stosowanie word2vec na małych plikach tekstowych

11

Jestem zupełnie nowy w word2vec, więc proszę, zabierzcie to ze sobą. Mam zestaw plików tekstowych, z których każdy zawiera zestaw tweetów, między 1000 a 3000. Wybrałem wspólne słowo kluczowe („kw1”) i chcę znaleźć semantycznie odpowiednie terminy dla „kw1” za pomocą word2vec. Na przykład, jeśli słowem kluczowym jest „jabłko”, oczekiwałbym, że zobaczę powiązane terminy, takie jak „ipad” „os” „mac” ... na podstawie pliku wejściowego. Tak więc ten zestaw powiązanych terminów dla „kw1” byłby inny dla każdego pliku wejściowego, ponieważ word2vec byłby szkolony na poszczególnych plikach (np. 5 plików wejściowych, uruchom word2vec 5 razy na każdym pliku).

Moim celem jest znalezienie zestawów powiązanych terminów dla każdego pliku wejściowego, biorąc pod uwagę wspólne słowo kluczowe („kw1”), które byłoby używane w innych celach.

Moje pytania / wątpliwości to:

  • Czy warto używać word2vec do takich zadań? czy jest technicznie poprawne użycie, biorąc pod uwagę niewielki rozmiar pliku wejściowego?

Pobrałem kod z code.google.com: https://code.google.com/p/word2vec/ i właśnie nadałem mu następujący test:

 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 
  • Z moich wyników wynika, że ​​otrzymuję wiele hałaśliwych haseł (stopwords), gdy używam narzędzia „odległość”, aby uzyskać powiązane terminy z „kw1”. Więc usunąłem stopwords i inne hałaśliwe warunki, takie jak wzmianki użytkownika. Ale nigdzie nie widziałem, że word2vec wymaga wyczyszczonych danych wejściowych ...?

  • Jak wybrać odpowiednie parametry? Widzę, że wyniki (od uruchomienia narzędzia odległości) różnią się znacznie, gdy zmieniam parametry, takie jak „-window”, „-iter”. Której techniki należy użyć, aby znaleźć prawidłowe wartości parametrów. (ręczne próby i błędy nie są dla mnie możliwe, ponieważ będę powiększać zestaw danych).

samsamara
źródło

Odpowiedzi:

9

Word2Vec nie jest dobrym wyborem dla zbioru danych o takim rozmiarze. Z badań, które widziałem, uwolni swoją moc, jeśli nakarmisz co najmniej kilka milionów słów, 3 tys. Tweetów nie wystarczyłoby na zwięzłe podobieństwo słów.

chewpakabra
źródło
czy musimy usunąć stopery jako etap wstępnego przetwarzania danych?
samsamara,
2
Nie, w podejściu word2vec nie musisz tego robić, ponieważ sam algorytm opiera się na szerokim kontekście w celu znalezienia podobieństw w słowach, więc słowa stop (z których większość to przyimki, zaimki i tym podobne) są ważną oceną algorytmu .
chewpakabra
ale kiedy używałem narzędzia odległości do znajdowania najbardziej podobnych słów do danego słowa, wersja ze stoperami usuniętymi dała mi sensowne słowa niż wersja bez. zgadniesz, co to znaczy?
samsamara,
Prawdopodobnie używasz zbyt wąskiego kontekstu: jeśli Twój model analizuje, powiedzmy, dwa słowa w przód iw tył, będziesz mieć do 2 słów stop w kontekście, co może dać gorsze wyniki. Jeśli poszerzysz kontekst (co zwiększy model i wydłuży czas szkolenia), model z ogranicznikami zapewni lepsze wyniki, zakładam.
chewpakabra
dzięki za wkład, teraz ma to większy sens. Również ponieważ word2vec przetwarza zdanie wejściowe zdanie po zdaniu, co by się stało, gdybym pomieszał zdania w dokumencie wejściowym? które powinny całkowicie zmienić wektory wyjściowe, prawda? Znowu, biorąc pod uwagę przetwarzanie przez wysłanie, czym różni się word2vec od doc2vec? dzięki jeszcze raz.
samsamara,