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 wektor , gdzie 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 ty składnik liczy liczbę słów w dokumencie, który są częścią klastra .
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 o i tak dalej.
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.
Odpowiedzi:
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 n ∈ R d , to obliczasz min ( v 1 , … , v n ) i max ( v 1 , … , v nn v1,v2,…,vn∈Rd min(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 du ui=min(v1i,…,vni) 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ł.
źródło
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.
źródło
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.
źródło