我目前正在做一个 NLP 项目。一项任务是比较两个新闻文章/标题的相似程度。
为此,我已经使用 gensim 库上的英文维基百科文章训练了一个 doc2vec 模型。现在我想通过从 wiki doc2vec 模型中推断向量来比较新文本的相似性。我尝试过的方法之一是 gensim docvecs 的 'similarity_unseen_docs' 功能。但是,结果并不是很直观。我可以知道有没有其他方法可以获得具有更好性能的相似度分数?或者也许代码的某些部分是错误的?
doc2vec模型的训练:
models = Doc2Vec(dm=1, dm_mean=1, vector_size=300, window=5, min_count=20, epochs =10, sample=0.001, negative=5, workers=cores)
比较相似度:
arg1='China is the leader in manufacturing electric vehicle'
arg2='The biggest electric car producer is China'
model.docvecs.similarity_unseen_docs(model=wikimodel, doc_words1=tokenize_text(arg1),
doc_words2=tokenize_text(arg2), alpha=0.025, min_alpha=0.0001, steps=50)
输出相似度分数仅为~0.25,这似乎并不好。
这是训练的代码:
from gensim.corpora.wikicorpus import WikiCorpus
from gensim.models.doc2vec import Doc2Vec, TaggedDocument
from gensim.models import KeyedVectors
from pprint import pprint
import multiprocessing
#read the wiki corpus
wiki = WikiCorpus("trend_analysis/enwiki-latest-pages-articles.xml.bz2")
#define the class to convert wikicorpus into suitable form to train Doc2vec
class TaggedWikiDocument(object):
def __init__(self, wiki):
self.wiki = wiki
self.wiki.metadata = True
def __iter__(self):
for content, (page_id, title) in self.wiki.get_texts():
yield TaggedDocument([c for c in content], [title])
documents = TaggedWikiDocument(wiki)
cores = multiprocessing.cpu_count()
#initialize a model and choose training method. (we use DM here)
models = Doc2Vec(dm=1, dm_mean=1, vector_size=300, window=5, min_count=20, epochs =10, sample=0.001, negative=5, workers=cores)
#building vocab for the model
models.build_vocab(documents)
#train the Doc2vec model
models.train(documents,total_examples=models.corpus_count, epochs=1)
请让我知道培训是否有任何错误导致推断看不见的文档不准确。