【发布时间】:2021-08-07 14:01:20
【问题描述】:
我正在尝试比较两个句子并获得它们之间的余弦相似度。
我有大约 50 个句子,我使用了 genism 的预训练 doc2vec,并在这 50 个句子上训练了模型,只是稍微调整了权重。然而,两个句子之间的余弦相似度并不能真正反映相似度。例如,sentence1 的英语与 sentence2 不接近,但它们的嵌入非常相似。
我的问题是,我通常如何比较两个句子的相似性(因为 doc2vec 不适合我)。这似乎是由于调整权重的训练输入量很少,但我想知道是否有另一种技术来完成这项任务。
例如到目前为止的粗略实现
s1 = "This is a sentence"
s2 = "This is also a sentence"
...
s50 ="This is the last sentence
list = [s1,s2..s50]
tagged_data = [TaggedDocument(words=word_tokenize(_d.lower()), tags=[
str(i)]) for i, _d in enumerate(list)]
model = Doc2Vec(vector_size=vec_size,
alpha=alpha,
min_alpha=0.00025,
min_count=1,
dm=1)
model.build_vocab(tagged_data)
for epoch in range(max_epochs):
print('iteration {0}'.format(epoch))
model.train(tagged_data,
total_examples=model.corpus_count,
epochs=100)
# decrease the learning rate
model.alpha -= 0.0002
# fix the learning rate, no decay
model.min_alpha = model.alpha
然后我遍历每个句子并执行model.infer_vector(sent_tokens) 以获取嵌入。但正如我所说,当使用相似性时,它们甚至都不是正确的。
如果我做错了什么,请告诉我。
【问题讨论】: