застосування 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'. Яку техніку я повинен використовувати, щоб знайти правильні значення параметрів. (пробна і помилка вручну неможлива для мене, оскільки я буду масштабувати набір даних).

Відповіді:


9

Word2Vec не є вдалим вибором для набору даних такого розміру. З результатів досліджень, які я бачив, це дозволить розкрити його силу, якщо ви накажете хоча б пару мільйонів слів, твітів 3 кб не вистачить для стислої подібності слова.


чи потрібно нам видаляти стоп-слова як етап попередньої обробки даних?
samsamara

2
Ні, у підході word2vec цього не потрібно робити, оскільки сам алгоритм покладається на широкий контекст, щоб знайти схожість у словах, тому зупинка слів (більшість з яких є прийменниками, займенниками та подібними) є важливою оцінкою алгоритму .
chewpakabra

але коли я використовував інструмент відстані, щоб знайти більшість подібних слів до заданого слова, версія із видаленими стоп-словами дала мені розумніші слова, ніж версія без. ви можете здогадатися, що це означає?
samsamara

Можливо, ви використовуєте занадто вузький контекст: якщо ваша модель розглядає, скажімо, два слова назад і вперед, у вас буде до 2-х стоп-слів у контексті, що може дати гірші результати. Якщо ви розширите контекст (що дозволить збільшити модель і час навчання довше), я вважаю, що модель-stopwords дасть кращі результати.
chewpakabra

спасибі за вклад, зараз має більше сенсу. Крім того, оскільки word2vec обробляє вхідне речення за реченням, що буде, якщо я змішаю речення у вхідному документі? це має повністю змінити вихідні вектори, правильно? Крім того, зважаючи на те, що обробка відправляється відправленим, чим word2vec відрізняється від doc2vec? знову дякую.
samsamara
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.