У меня проблемы с методом most_similar в модели Gensim Doc2Vec. Когда я запускаю most_similar, я получаю сходство только с первыми 10 документами с тегами (на основе их тегов - всегда от 0 до 9). Для этого кода у меня есть topn = 5, но я использовал topn = len (документы), и я по-прежнему получаю сходство только для первых 10 документов.
Документы с тегами:
tokenizer = RegexpTokenizer(r'\w+')
taggeddoc=[]
for index,wod in enumerate(model_data):
wordslist=[]
tagslist=[]
tokens = tokenizer.tokenize(wod)
td = TaggedDocument(gensim.utils.to_unicode(str.encode(' '.join(tokens))).split(), str(index))
taggeddoc.append(td)
documents=taggeddoc
Создайте экземпляр модели:
model=gensim.models.Doc2Vec(documents, dm=0, dbow_words=1, iter=1, alpha=0.025, min_alpha=0.025, min_count=10)
Обучите модель:
for epoch in range(100):
if epoch % 10 == 0:
print("Training epoch {}".format(epoch))
model.train(documents, total_examples=model.corpus_count, epochs=model.iter)
model.alpha -= 0.002
model.min_alpha = model.alpha
Проблема здесь (я думаю):
new = model_data[100].split()
new_vector = model.infer_vector(new)
sims = model.docvecs.most_similar([new_vector], topn=5)
print(sims)
Выход:
[('3', 0.3732905089855194), ('1', 0.36121609807014465), ('7', 0.35790640115737915), ('9', 0.3569292724132538), ('2', 0.3521473705768585)]
Длина документов одинакова до и после обучения модели. Не уверен, почему он возвращает сходство только для первых 10 документов.
Дополнительный вопрос: по любому опыту, лучше ли использовать Word2Vec или Doc2Vec, если входные документы очень короткие (~ 50 слов) и имеется> 2000 документов? Спасибо за помощь!