oklas / w2vxx

word2vec++

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

w2vxx

w2vxx — набор утилит для построения векторных представлений слов какого-либо естественного языка. Фактически это word2vec, реализованный на C++.

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

Быстрый старт

В репозитории размещены демонстрационные скрипты для Linux и Windows, обеспечивающие:

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

Для сборки утилит требуется компилятор с поддержкой C++17. Сборка протестирована под Linux с компилятором gcc v7.4.0 и под Windows с компилятором от Visual Studio 2017 v15.9.14 (cl.exe версии 19.16).

Запуск под Linux Запуск под Windows
Запустите консоль. Перейдите в директорию, в которой хотите развернуть программное обеспечение. Запустите «Командную строку разработчика для VS 2017» (это обеспечит настройку окружения для сборки утилит). Перейдите в папку, в которой хотите развернуть программное обеспечение.
git clone https://github.com/w2vxx/w2vxx.git
cd w2vxx
./demo-linux.sh demo-windows.cmd
При успешных сборке и обучении работа скрипта завершится вызовом утилиты, отыскивающей слова с близким значением. Чтобы удостовериться в работоспособности утилит, попробуйте ввести распространённые английские слова — phone, car, king. Отмечу, что демонстрационный скрипт порождает неоптимальную векторную модель, чтобы сократить время обучения.

Утилиты и их параметры

В состав w2vxx входит четыре утилиты: build_dict, cbow, skip-gram и distance. В отличие от word2vec, построение словаря здесь выделено в отдельную подзадачу (build_dict), а различные модели обучения — cbow и skip-gram — реализованы в одноимённых утилитах.

build_dict

Решает задачу построения словаря по обучающему множеству. Параметры утилиты:

-trainимя файла, содержащего обучающее множество;
-min-countчастотный порог. Слова, частота которых (в обучающем множестве) ниже порога, не попадают в словарь;
-save-vocabимя файла, куда будет сохранён словарь.

cbow

Осуществляет построение векторных представлений слов языка в соответствии с моделью обучения Continuous Bag-of-Words (cbow). Параметры утилиты:

-trainимя файла, содержащего обучающее множество;
-words-vocabимя файла, содержащего словарь, построенный утилитой build_dict;
-outputимя файла, куда будут сохранены векторные представления слов. Файл имеет бинарный формат, полностью совместимый с word2vec;
-sizeразмерность результирующих векторов для представления слов (размерность эмбеддинга);
-windowразмер окна, задающего контекст слова;
-optimizationметод оптимизации вычислений. Значение hs соответствует hierarchical softmax, значение ns соответствует negative sampling. В отличие от оригинального word2vec, можно использовать только один из методов;
-negative(для метода negative sampling) количество отрицательных примеров, противопоставляемых каждому положительному примеру. Иными словами, количество слов, выбираемых из noise distribution;
-iterколичество эпох обучения;
-sampleкоэффициент прореживания. Обеспечивает снижение в обучающем множестве доли частотных слов. По умолчанию 1e-3;
-alphaначальное значение скорости обучения;
-threadsколичество потоков управления, параллельно выполняющих обучение модели.

skip-gram

Осуществляет построение векторных представлений слов языка в соответствии с моделью обучения Skip-gram. Набор параметров утилиты совпадает с параметрами для cbow.

distance

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

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

имя файла с векторными представлениями слов, построенными утилитами cbow или skip-gram;
количество выводимых на экран слов с близкими значениями.

Внутреннее устройство

Код утилит cbow и skip-gram организован следующим образом.

Программная логика, отвечающая за работу со словарём, инкапсулирована в классах OriginalWord2VecVocabulary и CustomVocabulary.

Интерфейсом к обучающему множеству служат классы OriginalWord2VecLearningExampleProvider и CustomLearningExampleProvider. Их задача — предоставить обучающей логике очередной обучающий пример в виде структуры, содержащей слово и его контекст.

struct LearningExample
{
  size_t word;                     // индекс слова в словаре
  std::vector<size_t> context;     // индексы слов контекста
};

За создание и обучение нейросети отвечают классы CustomTrainer, CbowTrainer_Mikolov и SgTrainer_Mikolov. Точкой входа для потоков (thread) служит метод CustomTrainer::train_entry_point. Обработка обучающего примера нейросетью выполняется в методах learning_model (содержание этого метода зависит от модели обучения: cbow или skip-gram).

About

word2vec++

License:MIT License


Languages

Language:C++ 97.0%Language:Batchfile 0.9%Language:Shell 0.7%Language:Makefile 0.6%Language:JavaScript 0.5%Language:Visual Basic 0.3%