Zastosuj osadzanie wyrazów do całego dokumentu, aby uzyskać wektor cech


38

Jak użyć osadzania wyrazów, aby zamapować dokument na wektor cech, odpowiedni do zastosowania w uczeniu nadzorowanym?

Słowo osadzanie odwzorowuje każdy wyraz w w wektor vRd , gdzie d jest około niezbyt dużą ilość (na przykład 500). Popularne osadzanie słów to word2vec i Glove .

Chcę zastosować nadzorowaną naukę do klasyfikowania dokumentów. Obecnie mapuję każdy dokument na wektor cech za pomocą reprezentacji worka słów, a następnie stosuję gotowy klasyfikator. Chciałbym zastąpić wektor cech worka słów czymś opartym na istniejącym wstępnie wyszkolonym osadzaniu słów, aby skorzystać z wiedzy semantycznej zawartej w osadzaniu słów. Czy jest to standardowy sposób?

Mogę sobie wyobrazić pewne możliwości, ale nie wiem, czy jest coś, co ma największy sens. Podejścia kandydackie, które rozważałem:

  • Mógłbym obliczyć wektor dla każdego słowa w dokumencie i uśrednić je wszystkie. Wydaje się jednak, że może to spowodować utratę dużej ilości informacji. Na przykład, w przypadku reprezentacji worków słów, jeśli istnieje kilka słów, które są bardzo istotne dla zadania klasyfikacji, a większość słów jest nieistotna, klasyfikator może łatwo się tego nauczyć; jeśli uśrednię wektory dla wszystkich słów w dokumencie, klasyfikator nie ma szans.

  • Łączenie wektorów dla wszystkich słów nie działa, ponieważ nie prowadzi do wektora cech o stałym rozmiarze. Wydaje się to również złym pomysłem, ponieważ będzie nadmiernie wrażliwy na konkretne umiejscowienie słowa.

  • Mógłbym użyć słowa osadzania, aby zebrać słownictwo wszystkich słów w ustalony zestaw klastrów, powiedzmy, 1000 klastrów, gdzie używam podobieństwa cosinus w wektorach jako miary podobieństwa słów. Następnie zamiast woreczka słów mógłbym mieć worek klastrów: wektor cech, który dostarczam do klasyfikatora, może być wektorem 1000, gdzie i ty składnik liczy liczbę słów w dokumencie, który są częścią klastra i .

  • Biorąc pod uwagę słowo , te osadzenia słów pozwalają mi obliczyć zestaw 20 najbardziej podobnych słów w 1 , , w 20 i ich wynik podobieństwa s 1 , , s 20 . Za pomocą tego mógłbym dostosować wektor cech przypominający worek słów. Kiedy widzę słowo w , oprócz zwiększania elementu odpowiadającego słowu w o 1 , mogę również zwiększać element odpowiadający słowu w 1 o s 1 , zwiększając element odpowiadający słowu w 2 oww1,,w20s1,,s20ww1w1s1w2 i tak dalej.s2

Czy jest jakieś konkretne podejście, które może dobrze działać przy klasyfikacji dokumentów?


Nie szukam paragraph2vec ani doc2vec; te wymagają szkolenia na dużym korpusie danych, a ja nie mam dużego korpusu danych. Zamiast tego chcę użyć osadzania istniejących słów.


1
Czy zdecydowałeś się na konkretną metodę reprezentowania dokumentów przy użyciu wstępnie przeszkolonego osadzania? Może to może trochę pomóc?
turdus-merula

1
@ user115202, schludnie! To nie do końca rozwiązuje problem, który miałem, ale jest to sprytny pomysł, który brzmi warte poznania - dziękuję za zwrócenie na to uwagi! Nigdy nie znalazłem bardzo dobrego rozwiązania tego problemu, który byłby znacznie lepszy niż zwykłe użycie worków słów. Może po prostu nie jest to dobre w osadzaniu słów. Dzięki!
DW

Ten jest również związany z twoim problemem, prawdopodobnie nieco większym niż poprzedni: Uczenie się reprezentacji dla bardzo krótkich tekstów z wykorzystaniem agregacji osadzania słów ważonych .
turdus-merula


1
Dlaczego nie skorzystać z RNN? Dokumenty o zmiennej długości nie stanowią problemu dla RNN. wildml.com/2015/09/…
kalu

Odpowiedzi:


23

Jedną z prostych technik, która wydaje się działać całkiem dobrze w przypadku krótkich tekstów (np. Zdanie lub tweet), jest obliczenie wektora dla każdego słowa w dokumencie, a następnie agregacja ich przy użyciu średniej współrzędnych, min lub maks.

Na podstawie wyników jednego z ostatnich artykułów wydaje się, że użycie wartości minimalnej i maksymalnej działa dość dobrze. Nie jest optymalny, ale jest prosty i mniej więcej tak dobry lub lepszy jak inne proste techniki. W szczególności, jeśli wektorami słów w dokumencie są v 1 , v 2 , , v nR d , to obliczasz min ( v 1 , , v n ) i max ( v 1 , , v nnv1,v2,,vnRdmin(v1,,vn)max(v1,,vn). Przyjmujemy tutaj współrzędne minimum, tj. Minimum to wektor taki, że u i = min ( v 1 i , , v n i ) , i podobnie dla maks. Następnie wektor cech jest połączeniem tych dwóch wektorów, więc uzyskanie wektora cech w R 2 duui=min(vi1,,vin)R2d . Nie wiem, czy jest to lepsze, czy gorsze niż przedstawienie worków słów, ale podejrzewam, że w przypadku krótkich dokumentów może on działać lepiej niż zestaw słów i pozwala na stosowanie wstępnie wyszkolonego osadzania słów.

TL; DR: Zaskakująco, połączenie min i max działa dość dobrze.

Odniesienie:

Uczenie się reprezentacji dla bardzo krótkich tekstów z wykorzystaniem ważonej agregacji osadzania słów. Cedric De Boom, Steven Van Canneyt, Thomas Demeester, Bart Dhoedt. Listy rozpoznające wzór; arxiv: 1607.00570. streszczenie , pdf . Zobacz zwłaszcza tabele 1 i 2.

Podziękowania: Podziękowania dla @ user115202 za zwrócenie mojej uwagi na ten artykuł.


4
w przypadku krótkiego tekstu avg / min / max może działać dobrze, ale co jeśli długi tekst, taki jak artykuł prasowy?
awokado

1
Dla każdego, kto czyta ten artykuł i jest tak samo zdezorientowany jak ja: artykuł nie koncentruje się na podejściu wspomnianym przez @DW, tylko wspomina o nim krótko w „5.1. Poziomy bazowe” jako podejście bazowe. Treść artykułu koncentruje się na ich własnej technice, która polega na szkoleniu klasyfikatora za pomocą osadzania, co jest znacznie bardziej skomplikowane niż przedstawione tutaj podejście!
Migwell

16

Możesz użyć doc2vec podobnego do word2vec i użyć wstępnie wyszkolonego modelu z dużego korpusu. Następnie użyj czegoś takiego jak .infer_vector()w gensim, aby zbudować wektor dokumentu. Szkolenie doc2vec nie musi pochodzić z zestawu treningowego.

Inną metodą jest użycie RNN, CNN lub sieci przesyłania dalej do klasyfikacji. To skutecznie łączy wektory słów w wektor dokumentu.

Możesz także łączyć rzadkie cechy (słowa) z gęstymi (wektor słów), aby się uzupełniać. Zatem macierz cech byłaby konkatenacją rzadkiej torby macierzy słów ze średnią wektorów słów. https://research.googleblog.com/2016/06/wide-deep-learning-better-together-with.html

Inną interesującą metodą jest użycie algorytmu podobnego do word2vec, ale zamiast przewidywania słowa docelowego, można przewidzieć etykietę docelową. To bezpośrednio dostosowuje wektory słów do zadania klasyfikacji. http://arxiv.org/pdf/1607.01759v2.pdf

Aby uzyskać więcej metod ad hoc, możesz spróbować wyważyć słowa w różny sposób w zależności od składni. Na przykład, możesz ważyć czasowniki mocniej niż determinanty.


6

Jeśli pracujesz z tekstem w języku angielskim i chcesz zacząć od wstępnie wyszkolonego osadzania słów, zapoznaj się z tym: https://code.google.com/archive/p/word2vec/

To jest oryginalna wersja C programu word2vec. Wraz z tą wersją wydali również model wyszkolony na 100 miliardach słów zaczerpniętych z artykułów Google News (patrz podrozdział zatytułowany: „Wstępnie przeszkolone wektory słów i fraz”).

Moim zdaniem i doświadczenie w pracy nad osadzaniem słów, do klasyfikacji dokumentów, model taki jak doc2vec (z CBOW) działa znacznie lepiej niż worek słów.

Ponieważ masz mały korpus, sugeruję, że inicjujesz swoją matrycę osadzania słów przez wcześniej wyszkolone osadzenia wspomniane powyżej. Następnie przygotuj wektor akapitowy w kodzie doc2vec. Jeśli nie masz doświadczenia z pythonem, możesz sprawdzić jego wersję gensim, którą bardzo łatwo modyfikować.

Sprawdź także ten artykuł, który szczegółowo opisuje wewnętrzne działania word2vec / doc2vec: http://arxiv.org/abs/1411.2738 . Ułatwi to zrozumienie kodu gensim.


1
Dziękuję za sugestie. Nie proszę o osadzenie słowa; Wiem już, jak uzyskać osadzenie wstępnie wyszkolonego słowa (w swoim pytaniu wspomniałem o word2vec). Moje pytanie dotyczy tego, jak konstruować wektory cech z wcześniej wyszkolonego osadzania słów. Doceniam odniesienie do doc2vec, ale mój korpus jest dość mały, więc podejrzewam / obawiam się, że próba wyszkolenia kodów doc2vec będzie pasować i działać słabo (nawet jeśli zainicjuję matrycę za pomocą wstępnie wyszkolonych osadzeń).
DW
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.