Doc2vec (gensim) - Jak wywnioskować etykietę zdań niewidocznych?

14

https://radimrehurek.com/gensim/models/doc2vec.html

Na przykład, jeśli przeszkoliliśmy doc2vec

„aaaaaAAAAAaaaaaa” - „etykieta 1”

„BbbbbbBBBBBbbbb” - „etykieta 2”

czy możemy wywnioskować, że „aaaaAAAAaaaaAA” oznacza etykietę 1 za pomocą Doc2vec?

Wiem, że Doc2vec może trenować wektory słów i wektory etykiet. Korzystając z tych wektorów, czy możemy wnioskować o niewidocznych zdaniach (kombinacji wyuczonych słów), w której etykiecie?

Seongho
źródło

Odpowiedzi:

11

Tytuł tego pytania jest osobnym pytaniem do jego tekstu, więc odpowiem na oba osobno (biorąc pod uwagę, że jedno prowadzi do drugiego).

  1. Jak mogę wywnioskować niewidoczne zdania:
# ... trained model stored in var model
list_of_words = ["this", "is", "a", "new","unseen", "sentence"]
inferred_embedding = model.infer_vector(list_of_words)

WRN×PDRM×Rk

1Mi=1M1|Di|t=k|Di1|klog(p(wti|wtki,...,wt+ki,Di))

Diith|Di|wtitthithD

WD

  1. Czy możemy wywnioskować, że ewentualnie niewidoczne zdanie dokładnie odpowiada zdaniu w zestawie treningowym?

D

Nawet naprawa losowego materiału siewnego może nie działać, istnieje wiele innych zmiennych, które mogą wpływać na jego zbieżność, zobacz pierwszą odpowiedź na https://github.com/RaRe-Technologies/gensim/issues/374 .

W każdym razie możesz znaleźć najbardziej podobną etykietę w swoim zestawie danych do wywnioskowanego zdania, po prostu iterując zestaw treningowy i porównując podobieństwo do wnioskowanego wektora. Ale dlaczego chcesz dokładnie dopasować do czegoś w zestawie treningowym? to właśnie wyrażenia regularne do celów osadzania tych dokumentów dotyczą nadzorowanych lub nienadzorowanych zadań edukacyjnych (tj. klasyfikacji i grupowania).

Francisco Vargas
źródło
0

Próbowałem dziś rozwiązać ten problem i nie mogłem znaleźć żadnego modułu podanego przez gensim.Doc2Vec, który obliczałby podobieństwo między wywnioskowanym wektorem dokumentu nie w wyuczonym modelu a tymi w wyuczonym modelu. Zasadniczo to zrobiłem.

from scipy import spatial
inferred_vector=model.infer_vector(sentence.split())
for labels in labelled_documents:
    print (1-  spatial.distance.cosine(inferred_vector,model.docvecs[labels]))
Himanshu Rai
źródło
0

Na podstawie samouczka Gensim Doc2Vec możesz zrobić coś takiego.

inferred_vector = model_dmm.infer_vector(sentence.split())
sims = model.docvecs.most_similar([inferred_vector], topn=len(model.docvecs))

To da ci listę krotek ze wszystkimi etykietami i prawdopodobieństwo związane z twoim nowym dokumentem należącym do każdej etykiety. wtedy możesz po prostu wziąć największą wartość jako swoją etykietę.

Amirhos Imani
źródło