применяя word2vec к небольшим текстовым файлам

11

Я совершенно новичок в word2vec, так что, пожалуйста, несите это со мной. У меня есть набор текстовых файлов, каждый из которых содержит набор твитов, между 1000-3000. Я выбрал общее ключевое слово ("kw1") и хочу найти семантически релевантные термины для "kw1", используя word2vec. Например, если ключевое слово «яблоко», я ожидаю увидеть связанные термины, такие как «ipad», «os» «mac» ... на основе входного файла. Таким образом, этот набор связанных терминов для «kw1» будет отличаться для каждого входного файла, так как word2vec будет обучаться для отдельных файлов (например, 5 входных файлов, запускать word2vec 5 раз для каждого файла).

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

Мои вопросы / сомнения:

  • Имеет ли смысл использовать word2vec для такой задачи? технически правильно использовать с учетом небольшого размера входного файла?

Я загрузил код с code.google.com: https://code.google.com/p/word2vec/ и только что дал ему пробную версию следующим образом:

 time ./word2vec -train $file -output vectors.bin -cbow 1 -size 200 -window 10 -negative 25 -hs 1 -sample 1e-3 -threads 12 -binary 1 -iter 50

./distance vectors.bin 
  • Из своих результатов я увидел, что я получаю много шумных терминов (стоп-слов), когда использую инструмент «расстояние», чтобы получить связанные термины с «kw1». Поэтому я удалил стоп-слова и другие шумные термины, такие как упоминания пользователей. Но я нигде не видел, чтобы word2vec требовал очищенных входных данных ...?

  • Как выбрать правильные параметры? Я вижу, что результаты (от запуска инструмента расстояния) сильно меняются, когда я изменяю такие параметры, как -window, -iter. Какой метод я должен использовать, чтобы найти правильные значения для параметров. (метод проб и ошибок невозможен для меня, так как я буду расширять набор данных).

samsamara
источник

Ответы:

9

Word2Vec не является хорошим выбором для набора данных такого размера. Из исследований, которые я видел, он раскроет свою силу, если вы подадите хотя бы пару миллионов слов, 3k твитов будет недостаточно для краткого сходства слов.

chewpakabra
источник
нам нужно удалить стоп-слова в качестве шага предварительной обработки данных?
samsamara
2
Нет, в подходе word2vec вам не нужно этого делать, поскольку сам алгоритм опирается на широкий контекст для поиска сходства в словах, поэтому стоп-слова (большинство из которых являются предлогами, местоимениями и т. Д.) Являются важными заданиями для алгоритма. ,
chewpakabra
но когда я использовал инструмент расстояния, чтобы найти наиболее похожие слова для данного слова, версия с удаленными стоп-словами дала мне толковые слова, чем версия без. Вы можете догадаться, что это значит?
Самсамара
Возможно, вы используете слишком узкий контекст: если ваша модель изучает, скажем, два слова назад и вперед, у вас будет до 2 стоп-слов в контексте, и это может привести к худшим результатам. Если вы расширить контекст (что сделает модель больше и больше времени обучения), с-игнорируемых слов модель даст вам лучшие результаты, я полагаю.
chewpakabra
спасибо за вклад, теперь имеет больше смысла. Кроме того, поскольку word2vec обрабатывает входное предложение за предложением, что произойдет, если я перепутаю предложения во входном документе? которые должны полностью изменить выходные векторы правильно? Кроме того, опять же, учитывая, что его обработка отправлена ​​отправленным, чем word2vec отличается от doc2vec? Спасибо еще раз.
samsamara