machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Мультиклассовая классификация с пакетами слов и последовательностями слов

Дата публикации Feb 21, 2019

Документ представляет собой определенную последовательность слов. Но не все последовательности слов являются документами. Обучение разнице в алгоритме - сложная задача. Принятие во внимание последовательности слов для анализа текста в общем вычислительно дорого. Подходы глубокого обучения, такие как LSTM, позволяют нам моделировать документ как строку слов, и в последнее время они действительно достигли определенного успеха в задачах НЛП.

С другой стороны, когда мыизмельчите документ и сделайте сумки словоммы получаем вектор весов / чисел этих слов. Отображение из документа в этот вектор может быть многозначным, поскольку все возможные последовательности слов дают один и тот же вектор. Поэтому расшифровка смысла исходного документа (а тем более воскрешение его!) Из этого вектора невозможна. Тем не менее, в течение десятилетий подход к моделированию документов был основным средством решения задач НЛП.

Когда последовательность слов важна для определения класса документа, подходы с цепочкой слов затмевают мешки слов. Мы продемонстрировали это ссинтетические документыгде LSTM использовал метод суммирования слов (Наивный Байес, работающий с векторами tf-idf) для классификации. Но для реального текстового корпуса обзоров фильмов длябинарная классификация настроений, мы показали, что и LSTM, и SVM (с векторами tf-idf) были сопоставимы по качеству, хотя первое заняло гораздо больше времени.

Целью этого поста является дальнейшая оценка «сумки против строк» ​​для мультиклассовой ситуации. Мы будем работать с текстовым корпусом из 20 групп новостей, который доступен по адресуscikit-Learn API, Мы также рассмотрим влияние использования встраивания слов - как предварительно обученного, так и пользовательского. Здесь мы рассмотрим некоторые фрагменты кода, но полный код для воспроизведения результатов можно загрузить сGitHub. [LatexPage]

1. Токенизировать 20news корпус

Этот корпус состоит из постов, сделанных в 20 новостных группах, поэтому они хорошо помечены. Есть более 18000 сообщений, которые более или менее равномерно распределены по 20 темам. В приведенном ниже фрагменте кода мы извлекаем эти сообщения, очищаем и маркируем их, чтобы подготовиться к классификации.

  • Строки № 7–9. Лексемизация. Удалите все знаки препинания и стоп-слова NLTK. Убедитесь, что все слова / токены начинаются с буквы. И сохраняйте только те слова длиной от 3 до 15 символов.
  • Строка # 13: используйте scikit-learn api для извлечения сообщений, но не забудьте убрать подсказки о том, к какой теме относится данное сообщение.
  • Строка № 22: Принятие к сведению количества слов в каждом документе помогает нам выбрать разумную длину последовательности для LSTM позже. Процентиль статистика наnTokensпоказывает, что более 92% документов содержат менее 200 слов.

2. Word-Embeddings

Слово-вложениекороткие (длиныпэто намного, намного меньше, чем размер словарного запасаnWords) числовые векторные представления для слов. Они позволяют нам уменьшить размерность пространства слов от длины словаря корпуса (около 107 000 здесь) до гораздо более короткой длины, такой как 300, используемой здесь.Предварительно обученный быстрый текствекторы слов загружаются, а пользовательские быстрые тексты для корпусов фильмовгенерироватьсяв автономном режиме черезGensim, В любом случае, попав в руки, они просто считываются с диска.

  • Строки # 6–7: у нас есть собственные сгенерированные Gensim векторы слов в файле json, структурированные как {слово:вектор, ..} поэтому мы просто читаем это как словарь
  • Строки # 8–21: В случае предварительно обученных векторов мы читаем загруженный файл и обрабатываем с некоторой проверкой ошибок.
  • Строки № 25–27: подготовитьnWords x 300матрица вложения, где каждая строка представляет собой числовой вектор длиной 300 для соответствующего слова.

Конечный результат представляет собой матрицу, в которой каждая строка представляет собой длинный вектор 300 для слова. Слова / строки упорядочены согласно целочисленному индексу вword_indexтолковый словарь -{Слово: индекс}, В случае Keras слова упорядочены по частоте. В случае векторизатора tf-idf слово получает свой индекс на основе своего алфавитного порядка в словаре. Просто бухгалтерский учет, ничего сложного.

3. Пакетные сумки и последовательности

LSTM работает с последовательностями слов в качестве входных данных, в то время как традиционные классификаторы работают с пакетами слов, такими как векторы tf-idf. Имея каждый документ в виде списка токенов, мы готовы к любому.

3.1 Tf-Idf Векторы для SVM

Мы используем scikit-learnTf-Idf Vectorizerпостроить словарный запас (word_indexпеременная dict в строке № 6 ниже) и векторы документов (строка № 7) из токенов.

Xencodedэто редкостьnDocs x nWordsматрица. При использовании вложения слов мы преобразуем это в плотныйндок х 300матрица путем умножения на матрицу вложения, которую мы вычислили в разделе 2. Эти более короткие 300-длинные плотные векторы затем классифицируются.

3 2 последовательности для LSTM

Текстпроцессорв Keras превращает каждый документ в последовательность / строку целых чисел, где целочисленное значение указывает фактическое слово согласно{Слово: индекс}словарь, который генерирует та же обработка. Значения индекса начинаются с 1, пропуская 0, который зарезервирован для заполнения. Мы используем 200 длинных последовательностей, так как статистика на токенах показывает, что более 92% документов содержат менее 200 слов. В строке № 7 в приведенном ниже коде документы, содержащие менее 200 слов, «отправляются» с добавлением значения индекса 0, которое игнорируется слоем внедрения (mask_zero = Trueустанавливается в определении уровня встраивания в разделе 4).

4. Модели

LSTMреализуется через Keras, аSVMреализовано с помощью scikit-learn. Оба работают с одинаковым разделением поезд / тест, поэтому сравнение будет справедливым. Двадцать процентов всего корпуса (то есть 3660 документов) отводятся для тестирования во время обучения по оставшимся 14636 документам.

4.1 LSTM

Как и в предыдущих статьях этой серии, мы используем простейшую модель LSTM, со слоем внедрения, одним слоем LSTM и выходным слоем. При использовании внешних вложений слов слой внедрения не будет обучен, т. Е. Веса будут теми, которые мы прочитали с диска в Разделе 2.

Рисунок 1. Простая модель LSTM для мультиклассовой классификации

Уровень внедрения на рисунке 1 уменьшает количество объектов с 107196 (количество уникальных слов в корпусе) до 300. Слой LSTM выводит вектор длиной 150, который подается на выходной уровень для классификации. Сама модель определяется довольно просто ниже.

  • Строки № 3–7: слой внедрения обучается только в том случае, если не используются внешние вложения слов.
  • Строка № 9: поля пропуска предназначены для предотвращения переоснащения

Обучение выполняется с ранней остановкой, чтобы предотвратить чрезмерное обучение в строке № 5 в коде ниже. Конечный выходной слой дает вектор, который равен числу меток, а argmax этого вектора является предсказанной меткой класса.

4.2 SVM

Модель для SVM гораздо менее сложна, так как движущихся гораздо меньше
части и параметры для выбора. Это всегда хорошо
курс.

5. Симуляторы

Нам интересна матрица путаницы и полученные баллы F1. С предсказанными метками в руках любого из подходов мы используем scikit-learn API для их вычисления.

Хотя мы рассмотрели некоторые фрагменты в другом порядке, полный кодlstm-20news.pyдля запуска LSTM иsvm-20news.pyдля запуска SVM включенGitHub, Как указано в предыдущих статьях, различные случайные семена инициализируются для повторяемости. Моделирование выполняется с помощью сценария оболочки ниже, который перебирает варианты, которые мы рассматриваем.

5.1 LSTM

Слой встраивания должен способствовать

107196 * 300 весовых параметров + 300 параметров смещения = 32159100 параметров

Это соответствует количеству необучаемых параметров в строке № 11 ниже для запуска LSTM с внешними вложениями слов.

Layer (type)                 Output Shape              Param #   
=================================================================
embedding_1 (Embedding) (None, 200, 300) 32159100
_________________________________________________________________
lstm_1 (LSTM) (None, 150) 270600
_________________________________________________________________
dense_1 (Dense) (None, 20) 3020
=================================================================
Total params: 32,432,720
Trainable params: 273,620
Non-trainable params: 32,159,100
_________________________________________________________________
None
Train on 14636 samples, validate on 3660 samples
Epoch 1/50
- 224s - loss: 2.5373 - acc: 0.1837 - val_loss: 2.1770 - val_acc: 0.2757
Epoch 2/50
- 223s - loss: 2.1440 - acc: 0.2913 - val_loss: 2.0411 - val_acc: 0.3437
Epoch 3/50
...
...
Epoch 35/50
- 223s - loss: 0.5122 - acc: 0.8351 - val_loss: 0.9211 - val_acc: 0.7295
Epoch 00035: early stopping
...
...
micro avg 0.7295 0.7295 0.7295 3660
macro avg 0.7209 0.7167 0.7137 3660
weighted avg 0.7300 0.7295 0.7255 3660

Time Taken: 7859.074368476868

Пробег длится более 2 часов, останавливается из-за критериев ранней остановки и получает показатель F1 0,73. Рисунок 2 показывает скорость сходимости, сглаживающую хороший бит примерно на 20 эпох или около того.

Рисунок 2 Конвергенция модели LSTM с встраиванием в текстовые слова.

5.2 SVM

У SVM гораздо меньше движущихся частей, и он также обрабатывает намного быстрее. При встраивании в быстрый текст он работает с плотной матрицей 18296 x 300 (строка № 7 ниже) и получает F1-показатель 0,68.

X, labels #classes classes 18296 (18296,) 20 ['alt.atheism', 'comp.graphics', 'comp.os.ms-windows.misc', 'comp.sys.ibm.pc.hardware', 'comp.sys.mac.hardwa
re', 'comp.windows.x', 'misc.forsale', 'rec.autos', 'rec.motorcycles', 'rec.sport.baseball', 'rec.sport.hockey', 'sci.crypt', 'sci.electronics', 'sci.med
', 'sci.space', 'soc.religion.christian', 'talk.politics.guns', 'talk.politics.mideast', 'talk.politics.misc', 'talk.religion.misc']
Vocab sparse-Xencoded 107196 (18296, 107196)
# Bad Word Vectors: 1
Dense-Xencoded (18296, 300)
...
...
micro avg 0.6899 0.6899 0.6899 3660
macro avg 0.6757 0.6766 0.6722 3660
weighted avg 0.6835 0.6899 0.6839 3660

Time Taken: 140.8366870880127

6. Результаты

У нас есть результаты, чтобы сравнить не только пакеты и последовательности для мультиклассовой классификации, но и влияние использования предварительно обученных и пользовательских встраиваний слов. На рисунке 3 показаны полученные оценки F1 и время, затраченное во всех случаях. SVM с прямыми векторами tf-idf делает лучшее как по качеству, так и по производительности. Предварительно обученные вложения слов помогают LSTM улучшить свой показатель F1. Ожидается большее время выполнения для LSTM, и они соответствуют тому, что мы видели в предыдущих статьях этой серии.

Рисунок 3. Сравнение качества и производительности мешков со строками для классификации из 20 новостей. SVM явно лидер по качеству и производительности. Встраивание слов, кажется, помогает LSTM достичь лучших результатов.

На рисунке 4 ниже сравниваются лучшие матрицы путаницы, полученные любым из этих подходов.

Рисунок 4. Диагональное доминирование наблюдается в любом случае. Интересно, что оба подхода кажутся запутанными между более или менее одинаковыми парами классов.

7. Выводы

Так что же нам делать с результатами, полученными в этой серии из трех частей? Для синтетического текстового корпуса преобладают последовательности,словосочетания выбивают мешки словсподручно. Для бинарной задачи классификацииОценка была даже.В этой задаче мультиклассовой классификации шкала наклонена в сторону мешков с словами Учитывая, что подходы глубокого обучения имеют так много ручек, никогда нельзя быть уверенным, что полученные результаты не могут быть улучшены путем настройки некоторых (какие, скажите мне, пожалуйста ... юниты / слои / партии / ячейки / ... и на сколько слишком, пока вы находитесь на него…). Итак, вот некоторые свободные оценки того, чего они стоят.

  • Для настоящего текстового набора мешки с надписями сложно превзойти, особенно с учетом гораздо более короткого времени выполнения
  • Векторы мешков слов на самом деле не выигрывают от использования вложений слов. Мы видели это в более ранних статьях, таких какВложения в слова и векторы документов: Часть 2. Классификация
  • Встраивание слов может улучшить качество результатов для подходов, основанных на строках слов.

Оригинальная статья

Footer decor

© machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map