В этой статье мы поговорим о

1. Мешок слов (BoW)

2. Векторизатор TF-IDF.

3. Word2Vec и AvgWord2Vec

4. Встраивание Word2Vec с TF-IDF

Итак, здесь мы не будем вдаваться в математические подробности. Я просто расскажу о частях кода и некоторой информации об этих моделях. Мы будем использовать эту модель после обработки текста, удаления стоп-слов очистки текста и т. Д. Во всем списке документов.

Во-первых, зачем нам эти модели?

Ответ: преобразовать текст в числовой вектор. Но зачем нам преобразовывать текст в вектор. Почему мы не можем просто использовать текст в качестве функций?

Как правило, мы собираемся преобразовать текст в векторное представление, где каждое измерение вектора соответствует слову, а его значение каким-то образом отображается на частоту или важность слова в фрагменте текста. Преобразование может быть выполнено с использованием Bow, idf, tfidf и т. Д. Отсюда вы получаете представление документа в непрерывном многомерном пространстве и можете применять алгоритмы кластеризации и классификации. Алгоритмы машинного обучения не могут работать напрямую с необработанным текстом; текст необходимо преобразовать в числа.

При языковой обработке векторы x выводятся из текстовых данных, чтобы отразить различные лингвистические свойства текста.

Стр. 65, Нейросетевые методы обработки естественного языка, 2017.

Есть много способов преобразовать текст в вектор, один из наиболее часто используемых методов - это использование нейронных сетей, таких как RNN (Recurrent Neural Networks), LSTM / GRU, которые работают феноменально. На самом деле, какой из них использовать, очень зависит от конкретной проблемы, но если у вас достаточно данных для варианта использования, RNN почти всегда превосходят GLM (обобщенные линейные модели). Я выложу статью по этому поводу через несколько дней.

А пока начнем с нашей первой модели.

1. Мешок слов (BoW)

Модель набора слов - это упрощенное представление, используемое в обработке естественного языка и поиске информации. В этой модели текст (например, предложение или документ) представлен как мешок (мультимножество) его слов.

Пакет слов - это представление текста, которое описывает появление слов в документе. Это включает в себя две вещи:

1. Словарь слов

2. Подсчет словарных слов, которые есть в документе.

Он называется пакетом слов, поскольку не содержит информации о порядке или структуре слов в документе. Например, модель знает только, есть ли словарное слово в документе, а не там, где оно находится.

Интуиция подсказывает, что документы похожи, если они имеют похожее содержание. Кроме того, только по содержанию мы можем кое-что узнать о значении документа.

Пример модели мешка слов

D1 - этот шоколад очень вкусный и доступный.

D2. Этот шоколад невкусный и недорогой.

D3. Этот шоколад вкусный и дешевый.

D4 - Шоколад вкусен, и шоколад хорош.

1-й шаг - в BoW создается словарь, т.е. набор всех уникальных слов.

Vocab– {Этот шоколад очень вкусный и доступный, не вкусный, дешевый, вкусный, хороший}

Допустим, у нас есть d уникальных слов и n текстовых документов (здесь n = 4, d = 12)

2-й шаг - мы создадим n векторов (по одному для каждого документа) размера d.

· Каждое слово представляет собой отдельное измерение в векторе, то есть каждый индекс соответствует одному уникальному слову в словаре.

· J-й индекс вектора хранит количество j-го слова в документе.

Двоичный BoW:

BoW, который хранит, наличие слов в словарном запасе. 1, если слово присутствует, 0 в противном случае.

Двоичное представление BoW D1 и D2 -

Длина вектора документа равна количеству известных слов.

Бинарный BoW предпочтительнее BoW. С этого момента я буду обсуждать Binary BoW.

По мере увеличения размера словаря увеличивается и векторное представление документов. В реальном мире проблема, когда у нас большой набор данных. Каждый вектор является разреженным вектором.

. (вектор, в котором большинство элементов равно нулю). Точно так же у нас есть d-мерный вектор для всех документов, и матрица, представляющая их, является разреженной матрицей.

Итак, до сих пор мы разбираемся в построении BoW.

Наша цель заключалась в том, чтобы похожий текст приводил к более близким векторам.

В BoW сходство между векторами документа можно рассматривать как подсчет общих слов в документе.

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

BoW не всегда работает очень хорошо. В этом примере

D1 - Этот шоколад очень вкусный и доступный. D2 - Этот шоколад невкусный и недорогой.

Все слова почти одинаковы, кроме очень вкусно и не вкусно. По BoW и большинство слов общие, а значит, и похожие. Но во вкусе они имеют противоположное значение.

Более сложный подход - создать словарь сгруппированных слов. Это одновременно изменяет объем словарного запаса и позволяет сумке слов уловить немного больше смысла из документа.

В этом подходе каждое слово или жетон называется «грамм». Создание словаря пар из двух слов, в свою очередь, называется моделью биграмм. Опять же, моделируются только биграммы, которые появляются в корпусе, а не все возможные биграммы.

N-грамма - это последовательность слов из N символов: 2-грамм (чаще называемая биграммой) - это последовательность слов из двух слов, например «пожалуйста, переверни», «переверни» или «твое домашнее задание». », А 3-граммовая (чаще называемая триграммой) - это последовательность слов из трех слов, например« пожалуйста, переверни свою »или« переверни свою домашнюю работу

Часто простой подход с использованием биграмм лучше, чем модель набора слов весом 1 грамм для таких задач, как классификация документации.

Представление мешка биграмм намного мощнее мешка слов, и во многих случаях его очень трудно превзойти.

(Перед построением н-граммов следует избегать удаления стоп-слов, таких как «не»)

Теперь давайте поищем часть кода -

Код для BoW

В Scikti learn мы уже реализовали модель BoW, которая может работать на нас.

из sklearn.feature_extraction.text импорт CountVectorizer
count_vect = CountVectorizer (ngram_range = (1,3))

final_bigram_counts = count_vect.fit_transform (документы)

print («тип векторизатора подсчета», type (final_bigram_counts))

ВЫВОД:

тип векторизатора подсчета ‹class‘ scipy.sparse.csr.csr_matrix ’›

Примечание:

1. ngram_range = (1, 3) означает, что мы используем униграмму, биграмму, триграмму. В основном мы используем i-й грамм в заданном диапазоне.

2. Документы должны представлять собой список текстовых документов.

3. Final_bigram_counts хранится как разреженная матрица, здесь - это справочник для дальнейшего понимания разреженной матрицы.

4. Форма final_bigram_counts (final_bigram_counts.get_shape ()) будет n * d. (n: количество документов, d размер словаря).

5. Если вы хотите построить двоичный BoW, в код будет небольшое изменение.
count_vect = CountVectorizer (ngram_range = (1, 3), двоичный = True)

6. Рекомендую ознакомиться с документацией Count Vectorizer.

Недостатки -

· Значение: при отказе от порядка слов игнорируется контекст и, в свою очередь, значение слов в документе (семантика). Контекст и значение могут многое предложить модели, что при моделировании можно было бы различить одни и те же слова, расположенные по-разному («это интересно» против «это интересно»), синонимы («старый велосипед» против «подержанный велосипед»). , и многое другое.

· Словарь: словарь требует тщательного проектирования, в частности, для управления размером, что влияет на разреженность представлений документа.

· Разреженность: разреженные представления труднее моделировать как по вычислительным причинам (пространственная и временная сложность), так и по информационным причинам, когда модели должны использовать так мало информации в таком большом пространстве представлений. .

TF-IDF

Проблема с оценкой частоты слов заключается в том, что в документе начинают преобладать очень часто встречающиеся слова (например, более высокие оценки), но они могут не содержать столько «информационного содержания» для модели, сколько более редкие, но, возможно, специфические для предметной области слова.

Один из подходов заключается в изменении масштаба частоты слов в зависимости от того, как часто они появляются во всех документах, так что оценки за часто встречающиеся слова, такие как «the», которые также часто встречаются во всех документах, были оштрафованы.

Такой подход к оценке называется Term Frequency-Inverse Document Frequency, или сокращенно TF-IDF, где:

· Частота термина: оценка частоты встречаемости слова в текущем документе.

· Обратная частота в документе: оценка того, насколько редко слово встречается в документах.

Баллы представляют собой взвешивание, когда не все слова одинаково важны или интересны.

В баллах выделяются отдельные слова (содержащие полезную информацию) в данном документе.

Таким образом, idf редкого термина будет высоким, тогда как idf частого термина, вероятно, будет низким.

Код -

из sklearn.feature_extraction.text import TfidfVectorizer

tf_idf_vect = TfidfVectorizer (ngram_range = (1,2))

final_tf_idf = tf_idf_vect.fit_transform (окончательные [‘CleanedText’]. значения)

print («тип векторизатора счетчика», type (final_tf_idf))

Вывод:

тип векторизатора подсчета ‹class‘ scipy.sparse.csr.csr_matrix ’›

Итак, до сих пор мы знаем о BoW и TF-IDF.

как они преобразуют текст в векторы. каковы разреженные векторы, интуиция за BoW.

Теперь мы будем обсуждать Word2Vec и Word2Vec, взвешенный по TF-IDF, в моей следующей статье.