Word2Vec

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

Итак, в 2013 году компания Google представила на свет два метода под именем Word2Vec:  CBOW (continius bag of word) и skip-gram. Задачей метода CBOW является предсказание слова по близлежайшему контексту. В то время как у skip-gram противоположная задача - предсказание контекста по текущему слову.

Оба метода используют в качестве алгоритмов классификации искусственные нейронные сети. Первоначально каждое слово в словаре – случайный N-мерный вектор. Во время обучения алгоритм решает задачу максимизация косинуса угла между векторами слов (скалярное произведение векторов), которые появляются рядом друг с другом, и минимизация косинусной близости между векторами слов, которые не появляются друг рядом с другом. Рядом друг с другом в данном случае значит в близких контекстах.

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

Результатом обучения является  оптимальный вектор для каждого слова, полученный с помощью метода CBOW или skip-gram.

Например, слова «анализ» и «исследование» часто встречаются в похожих контекстах: «Ученые провели анализ алгоритмов» или «Ученые провели исследование алгоритмов». Word2vec анализирует эти контексты и делает вывод, что слова «анализ» и «исследование» являются близкими по смыслу. Так как подобные выводы word2vec делает на основании большого количества текста, выводы оказываются вполне адекватными. Скажем, когда я тренировал word2vec на коллекции из 10 000 небольших научных текстов (что, вообще-то, маловато), то для слова «Испания» на готовой модели получил следующий список наиболее близких по смыслу слов — Италия, Австралия, Нидерланды, Португалия, Франция. На основании вышесказанного можно сделать вывод: для обучения модели word2vec хорошего качества нужен большой-пребольшой корпус.  Для этих целей можно воспользоваться  Википедией.

Рассмотрим как работает Word2Vec по шагам:

  1. Читается текст и определяется частотность слов
  2. Массив слов сортируется по частоте, и удаляются редкие слова.
  3. Строится дерево Хаффмана для слов
  4. Из текста читается предложение и проводится субсэмплирование наиболее частотных слов (sub-sampling).  Субсэмплирование — это процесс изъятия наиболее частотных слов из анализа, что ускоряет процесс обучения алгоритма и способствует значительному увеличению качества получающейся модели.
  5. Применеятся метод скользящего окна для строки. Окно по умолчанию равно пяти, рекомендуемым значением является десять.
  6. Применяется нейросеть прямого распространения с функцией активации иерархический софтмакс (Hierarchical Softmax) и/или негативное сэмплирование (Negative Sampling) для ткущего скользящего окна. Hierarchical softmax лучше ведет себя при работе с не очень частотными словами, но работает помедленнее, negative sampling лучше работает с частотными словами и любит вектора слов небольшой размерности (скажем, 50-100), зато побыстрее.

В результате Word2Vec дает нам:

  • кластеризацию слов по их семантической близости
  • синонимы
  • получения семантических отношений между словами
  • оценку важности слов в запросе

Более детально ознакомится с алгоритмом можно по адресу:

https://code.google.com/archive/p/word2vec/

 

28.07.2016









 
архив

подписка