来自Doc2Vec和Word2Vec的不同余弦相似度系数

问题描述

背景

在我的项目开始时,重点是比较收到的请求/问题在内容方面的不同。我训练了一个doc2vec模型,结果非常好(作为参考,我的数据包括1400万个请求)。

class PhrasingIterable():
    def __init__(self,my_phraser,texts):
        self.my_phraser = my_phraser 
        self.texts = texts
    def __iter__(self):
        return iter(self.my_phraser[self.texts])

docs = DocumentIterator()
bigram_transformer = Phrases(docs,min_count=1,threshold=10)
bigram = Phraser(bigram_transformer)
corpus = PhrasingIterable(bigram,docs)
sentences = [TaggedDocument(doc,[i]) for i,doc in enumerate(corpus)]    
model = doc2vec(window=5,vector_size=300,min_count=10,workers = multiprocessing.cpu_count(),epochs = 10,compute_loss=True)
model.build_vocab(sentences)
model.train(sentences,total_examples=model.corpus_count,epochs=model.epochs)

但是,在第二阶段,分析的重点从每周的请求转移到个人。为了衡量每个星期不同请求的不同之处,我提取了给定周t中请求的所有单词,并使用d2v_model.wv.n_similarity与前t-1周中请求中的所有单词进行了比较。由于我需要在其他领域进行复制,因此我发现我本来可以使用doc2vec来获得相同的度量,却浪费了大量的内存和时间训练Word2Vec模型。因此,我训练了以下Word2Vec模型:

docs = DocumentIterator()
bigram_transformer = gensim.models.Phrases(docs,threshold=10)
bigram = gensim.models.phrases.Phraser(bigram_transformer)
sentences = PhrasingIterable(bigram,docs)
model = Word2Vec(window=5,size=300,iter = 10,epochs=model.epochs)

我再次使用余弦相似度来比较每周w2v_model.wv.n_similarity内容。作为健全性检查,我比较了Word2Vecdoc2vec产生的相似性,两者之间的相关系数约为0.70,并且规模相差很大。我的隐含假设是,在训练有素的d2v_model.wv.n_similarity中使用Word2Vec比较提取的单词集是在利用doc2vec

我的问题

当我们从doc2vecWord2Vec进行交易时,两组提取的单词之间的余弦相似度度量是否应该不同?如果是这样,为什么?我不会,关于我的代码有什么建议吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)