Doc2Vec - Jak oznaczyć akapity (gensim)

17

Zastanawiam się, jak oznaczyć (tagować) zdania / akapity / dokumenty za pomocą doc2vec w gensim - z praktycznego punktu widzenia.

Czy musisz mieć każde zdanie / akapit / dokument z własną unikalną etykietą (np. „Wysłane_123”)? Wydaje się to przydatne, jeśli chcesz powiedzieć „jakie słowa lub zdania są najbardziej podobne do pojedynczego konkretnego zdania oznaczonego„ Wysłane_123 ”.

Czy możesz powtarzać etykiety na podstawie zawartości? Na przykład jeśli każde zdanie / akapit / dokument dotyczy określonego produktu (a dla danego produktu istnieje wiele zdań / akapitów / dokumentów), możesz oznaczyć zdania na podstawie tego produktu, a następnie obliczyć podobieństwo między słowem lub słowem zdanie i ta etykieta (które, jak sądzę, byłyby średnią wszystkich zdań, które miały związek z produktem)?

B_Miner
źródło

Odpowiedzi:

10

Oba są możliwe. Możesz nadać każdemu dokumentowi unikalny identyfikator (np. Sekwencyjny numer seryjny) jako dokument doctag lub wspólny ciąg doctag reprezentujący coś innego na ten temat, lub oba jednocześnie.

Konstruktor TaggedDocument pobiera listę tagów. (Jeśli zdarzy się, że ograniczysz się do zwykłych liczb całkowitych rosnących od 0, model Doc2Vec użyje ich jako bezpośrednich indeksów do swojej tablicy bazowej, a zaoszczędzisz dużo pamięci, która w innym przypadku byłaby poświęcona ciągowi znaków -> wyszukiwanie indeksu , co może być ważne w przypadku dużych zestawów danych. Możesz jednak użyć ciągów znaków doctag, a nawet mieszanki znaków int i ciągów znaków.)

Będziesz musiał eksperymentować z tym, co najlepiej pasuje do twoich potrzeb.

W przypadku niektórych zadań klasyfikacyjnych podejście, które czasami działało lepiej, niż się spodziewałem, polega na całkowitym pomijaniu identyfikatorów poszczególnych tekstów i po prostu szkoleniu modelu Doc2Vec ze znanymi przykładami klas z pożądanymi klasami jako doctagi. Otrzymujesz „wektory dokumentów” tylko dla dokumentów klasowych - nie dla każdego dokumentu - potencjalnie znacznie mniejszego modelu. Późniejsze wnioskowanie wektorów dla nowych tekstów powoduje, że wektory są znacznie zbliżone do powiązanych wektorów klas doc.

gojomo
źródło
To świetnie, dziękuję bardzo! Poza tym, kiedy zaczynam bawić się genimem - jestem ciekawy, czy można obliczyć podobieństwo między dokumentem (niezależnie od tego, czy używane są unikatowe lub wspólne tagi) i słowem - czy można tego dokonać w swoim doświadczeniu?
B_Miner
1
Niektóre tryby szkolenia tworzą wektory i słowa w „tej samej przestrzeni”, dlatego podobieństwa mogą mieć znaczenie. Zobacz na przykład ten artykuł - arxiv.org/abs/1507.07998 - który nawet dokonuje pewnego rodzaju „arytmetyki analogii” obejmującej doc-wektory (artykuły z Wikipedii) i wektory słów. Szkolenie w tej pracy jest jak tryb gensim za DBOW z równoczesnym Skip-gramowej słowo szkolenia: dm=0, dbow_words=1.
gojomo
Dzięki @gojomo! Dodałem zapytanie o to, jak to zrobić na liście gensim: groups.google.com/forum/#!topic/gensim/RLRfY6k3ulw
B_Miner
Proszę, popraw mnie jeśli się mylę. W ostatnim akapicie sugerujesz, aby każdy dokument był oznakowany, tak jak my oznaczamy pytania w tej witrynie. Po treningu otrzymamy reprezentację wektorową każdego znacznika. Kiedy pojawia się nowy dokument, możemy po prostu użyć metryki podobieństwa do sugerowania znaczników dla nowego dokumentu.
użytkownik
@ użytkownik - tak, jest to możliwe, a czasem korzystne, ale nie jest to konieczne.
gojomo
9

doc2vecmodel pobiera swój algorytm word2vec.

W word2vecnie ma potrzeby, aby oznaczyć te słowa, bo każde słowo ma swoje znaczenie semantyczne w słownictwie. Ale w razie doc2vecpotrzeby należy określić, ile liczb słów lub zdań przekazuje znaczenie semantyczne, aby algorytm mógł zidentyfikować je jako pojedynczą całość. Z tego powodu określamy labelslub tagszdanie lub akapit w zależności od poziomu przekazywanego znaczenia semantycznego.

Jeśli podamy jedną etykietę do wielu zdań w akapicie, oznacza to, że wszystkie zdania w akapicie są wymagane do przekazania znaczenia. Z drugiej strony, jeśli określimy zmienne etykiety do wszystkich zdań w akapicie, oznacza to, że każdy przekazuje znaczenie semantyczne i może mieć między nimi podobieństwo lub nie.

W prostych słowach labeloznacza semantyczne znaczenie czegoś.

yazhi
źródło
If we specify a single label to multiple sentences in a paragraph, it means that all the sentences in the paragraph are required to convey the meaning.Nie jestem pewien, czy rozumiem to poprawnie. Z algorytmów POV, czy wszystkie zdania z tym samym znacznikiem są potrzebne do definicji semantycznej, czy wszystkie zdania z tym samym znacznikiem opisują to samo? W pierwszym przypadku żadne zdanie nie jest samo w sobie samowystarczalne, w drugim przypadku jedno zdanie jest samowystarczalne.
użytkownik
@ użytkownik: Jest to drugi przypadek, z algorytmu POV, znacznik jest zdefiniowany jako byt, który użyty w jednym zdaniu przechwytuje znaczenie wszystkich słów. W ten sam sposób, gdy jest używany w wielu zdaniach, przechwytuje również słowa we wszystkich innych zdaniach.
yazhi