Doc2vec (gensim) - Як я можу зробити ярлик невидимих ​​речень?


14

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

Наприклад, якщо ми тренували doc2vec з

"aaaaaAAAAAaaaaaa" - "мітка 1"

"BbbbbbBBBBBbbbb" - "мітка 2"

Чи можемо ми зробити висновок, що "aaaaAAAAaaaaAA" ​​є міткою 1 за допомогою Doc2vec?

Я знаю, що Doc2vec може тренувати слова вектори та вектори міток. Використовуючи ці вектори, чи можемо ми зробити висновок про невидимі речення (поєднання тренованих слів) у якій мітці?

Відповіді:


11

Заголовок цього питання є окремим запитанням до його тексту, тому я відповім обидва окремо (враховуючи, що одне веде в інше).

  1. Як я можу зробити висновки про невидимі речення:
# ... 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. Чи можемо ми зробити висновок, що можливо небачене речення точно відповідає реченню у навчальному наборі?

D

Навіть виправлення випадкового насіння може не спрацювати, існує стільки інших змінних, які можуть вплинути на його конвергенцію. Першу відповідь див . На https://github.com/RaRe-Technologies/gensim/isissue/374 .

У будь-якому випадку ви можете знайти найбільш подібну мітку у вашому наборі даних до поданого речення, просто перебравши її на навчальний набір і порівнявши схожість з виведеним вектором. Але чому б ви хотіли точно відповідати чомусь у тренувальному наборі? ось те, що регулярні вирази призначені для вбудовування цих документів, - це для керованих чи непідконтрольних навчальним завданням (тобто класифікації та кластеризації).


0

Я намагався вирішити цю проблему сьогодні, і куднт знайшов будь-який модуль, заданий gensim.Doc2Vec, який обчислює схожість між виведеним вектором документа, а не в навченій моделі, з тими, що навчаються. Так в основному я це робив.

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]))

0

На основі підручника Gensim Doc2Vec ви можете зробити щось подібне.

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

Це дасть вам список кортежів із усіма мітками та ймовірність, пов’язану з вашим новим документом, що належить кожній етикетці. тоді ви можете просто взяти найбільше значення як свою етикетку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.