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

Данные и модель:

В целях экспериментов я использовал данные твитов Twitter, взятые из Kaggle. Давайте посмотрим на данные обучения:

Форма обучения и тестирования:

В целях обучения я использовал первые 1000 строк из обучающих данных, и, следовательно, приведенные ниже результаты, безусловно, относятся к этим данным.

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

Используемая модель - XGBoost. XGBoost - это ансамблевый алгоритм машинного обучения на основе дерева решений, который использует структуру повышения градиента. XGBoost - это реализация деревьев решений с градиентным усилением, разработанная для обеспечения скорости и производительности.

Методы встраивания слов

Мы обсудим техники встраивания трех слов:

  • Векторизатор подсчета
  • Векторизатор TF-IDF
  • Word2Vec

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

Граф Векторизатор

Это самый простой способ представления слов в векторы. Он в основном считает появление каждого слова в предложении. Формируется двумерная матрица, в которой столбцы обозначают уникальные слова из всех предложений, а строки определяют документы. Давайте разберемся с концепцией подробно на небольшом примере:

Рассмотрим набор из 2 предложений:

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

2. Затем будет создан вектор длины 8, состоящий из нулей.

3. Затем мы переберем все документы, переберем все слова в этом документе, посчитаем частоту каждого слова и, наконец, заменим ноль в этом векторе нулей частотой этого конкретного слова в самой позиции.

Так, например: Рассмотрение документа 1 - Футбол - очень хорошая игра.

  • Первоначально связанный с ним вектор [0, 0, 0, 0, 0, 0, 0, 0]. Затем мы перебираем слова в этом документе. Когда мы рассматриваем первое слово «футбол», мы получаем:

  • Когда мы рассматриваем следующее слово «есть», мы получаем:

  • Итак, наконец, после всех итераций, для документа 1 мы получаем вектор:

  • Точно так же для документа 2 мы получаем вектор:

Теперь давайте посмотрим, как работает Count Vectorizer с набором данных. Перед этим давайте разберемся с кодом.

Здесь важно создать объект Count Vectorizer вместе с определением всех гиперпараметров. После этого параметры помещаются в модель вместе с данными, и возвращается преобразованный результат. Для расчета оценки f1 данные разделяются на данные для обучения и проверки. Наконец, делается прогноз и рассчитывается оценка f1.

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

TF-IDF расшифровывается как Term Frequency Inverse Document Frequency. Он похож на Count Vectorizer, но с той лишь разницей, что он учитывает другие документы при создании вектора слов. Рассмотрим и здесь тот же образец сверху. Мы видим, что слово хорошо встречается в обоих предложениях и не имеет существенного значения при классификации документов. Следовательно, он должен иметь меньший вес по сравнению с такими словами, как Крикет и Футбол.

TF-IDF применяет штрафные санкции к общим словам, присваивая им меньший вес, при этом уделяя внимание словам, которые встречаются редко во всем корпусе, но встречаются в большом количестве в нескольких документах.

  • TF = (Количество раз, когда термин t встречается в документе) / (Количество терминов в документе)
  • IDF = log (N / n), где N - количество документов, а n - количество документов, в которых появился термин t.
  • TF-IDF = TF * IDF
  1. Подобно Count Vectorizer, будет создан пакет слов.
  2. Для каждого документа будет создан массив нулей.
  3. Затем для каждого слова в каждом документе будет вычислено значение TF-IDF, а ноль в массиве будет заменен вычисленным значением.

Так, например, давайте рассмотрим слово «футбол». Значение TF-IDF для него будет -

Теперь давайте посмотрим, как TF-IDF Vectorizer работает с набором данных. Перед этим давайте разберемся с кодом.

Подобно коду Count Vectorizer, здесь создается объект TFIDF Vectorizer, а все остальное такое же.

Word2Vec

Они очень эффективно понимают предоставленные им данные. Они помогают восстановить смысловое значение предложений. Он представляет слова в векторном пространстве, а также похожие слова расположены близко друг к другу. В отличие от других методов, Word2Vec высоко ценится в сообществе и является очень хорошей областью исследований. Как мы знаем, он представляет слово в векторном формате таким образом, что он также может идентифицировать отношения. Он может понять, что Женщина для мужчины, точно так же, как Королева для Короля.

CBOW и Skip-grams - две категории этого класса.

  1. CBOW: обозначает непрерывный набор слов. Здесь он смотрит на окружающие слова (скажем, 1 слева и 1 справа) и предсказывает слово, которое находится между ними.
  2. Пропуск граммов: здесь он берет слово, а затем пытается предугадать окружающие слова.

CBOW:

Рассматривая приведенный выше пример примера, давайте рассмотрим документ 1 - «Футбол - это очень [… ..] игра», здесь задача CBOW - предсказать результат для пропущенного слова, и он подскажет нам наиболее вероятное слово, подходящее для контекст. Он может предсказывать хорошие, плохие, потрясающие и т. Д. В зависимости от данных, на которых он обучается.

Теперь давайте посмотрим, как CBOW работает с набором данных. Перед этим давайте разберемся с кодом.

Здесь мы создаем вектор слов всех слов, присутствующих в документах корпуса. При определении параметров мы устанавливаем «sg» равным 0, так как это позволяет использовать модель word2vec как модель непрерывного мешка слов.

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

Наконец, мы обучаем модель, передавая вложения слов, созданные на уровне предложения на предыдущем шаге, и вычисляем f1-score.

Пропуск граммов:

Рассматривая приведенный выше образец примера, давайте рассмотрим документ 1 и слово - «Футбол» здесь задача CBOW состоит в том, чтобы сказать нам, что существует огромная вероятность того, что контекст - «[….] - очень хорошая игра». Он может предсказывать и другие контексты, например: «[….] - очень плохая игра» и т. Д., В зависимости от данных, на которых он обучается.

Теперь давайте посмотрим, как скип-граммы работают с набором данных. Перед этим давайте разберемся с кодом.

Здесь мы создаем вектор слов всех слов, присутствующих в документах корпуса. При определении параметров мы устанавливаем «sg» равным 1, поскольку это позволяет использовать модель word2vec в качестве модели skip-gram.

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

Наконец, мы обучаем модель, передавая вложения слов, созданные на уровне предложения на предыдущем шаге, и вычисляем f1-score.

Заключение

Вкратце, вложения слов представляют слова как семантически значимые вещественные векторы. Это позволяет нам эффективно обучать модель, без которой обучение данных было бы довольно сложной задачей. Это повышает производительность любой проблемы обработки естественного языка. Наконец, как мы видели, показатель f1 был самым высоким для модели Word2Vec Skip-gram, за которой следовали Count Vectorizer, TF-IDF Vectorizer, а затем - модель Word2Vec CBOW.

Использованная литература:

Использование сходства языков для машинного перевода - https://arxiv.org/pdf/1309.4168v1.pdf