Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Doc2Vec和Word2Vec的不同余弦相似系数_Python_Gensim_Word2vec_Cosine Similarity_Doc2vec - Fatal编程技术网

Python Doc2Vec和Word2Vec的不同余弦相似系数

Python Doc2Vec和Word2Vec的不同余弦相似系数,python,gensim,word2vec,cosine-similarity,doc2vec,Python,Gensim,Word2vec,Cosine Similarity,Doc2vec,背景 在我的项目开始时,重点是比较收到的请求/问题在内容方面的差异。我训练了一个Doc2Vec模型,结果非常好(作为参考,我的数据包括1400万个请求) 然而,在第二阶段,分析的重点从每周的请求转移到个人。为了衡量个人请求每周的差异,我提取了给定t周请求中的所有单词,并使用d2v\u model.wv.n\u相似度与前一周t-1请求中的所有单词进行比较。由于我需要在其他领域复制这一点,我突然意识到,当我可以使用Word2Vec获得相同的度量值时,我在训练Doc2Vec模型时浪费了大量内存和时间。

背景

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

然而,在第二阶段,分析的重点从每周的请求转移到个人。为了衡量个人请求每周的差异,我提取了给定t周请求中的所有单词,并使用
d2v\u model.wv.n\u相似度
与前一周t-1请求中的所有单词进行比较。由于我需要在其他领域复制这一点,我突然意识到,当我可以使用
Word2Vec
获得相同的度量值时,我在训练
Doc2Vec
模型时浪费了大量内存和时间。因此,我培训了以下
Word2Vec
模型:

docs = DocumentIterator()
bigram_transformer = gensim.models.Phrases(docs, min_count=1, threshold=10)
bigram = gensim.models.phrases.Phraser(bigram_transformer)
sentences = PhrasingIterable(bigram, docs)
model = Word2Vec(window=5,
                        size=300,
                        min_count=10,
                        workers = multiprocessing.cpu_count(),
                        iter = 10, 
                        compute_loss=True)
model.build_vocab(sentences)
model.train(sentences, total_examples=model.corpus_count, epochs=model.epochs)
我再次使用余弦相似性来比较每周的内容
w2v\u model.wv.n\u相似性
。作为健全性检查,我比较了
Word2Vec
Doc2vec
产生的相似性,两者之间的相关系数约为0.70,标度差异很大。我的隐含假设是,使用
d2v_模型.wv.n_相似性
比较提取的单词集是利用了经过训练的
Doc2Vec
中的
Word2Vec

我的问题


当我们从
Doc2Vec
Word2Vec
进行交易时,两组提取单词之间的余弦相似性度量是否应该有所不同?若然,原因为何?我没有,对我的代码有什么建议吗?

只是猜测,但余弦相似性只是伪装下的点积。如果两个库对组使用不同的向量,它们的结果会不同,这似乎很自然。我们不清楚比较几周是什么意思-多少周?是每人一周吗?每个文本中有多少个单词用于比较。此外,还不清楚如何单独使用
Word2Vec
来比较多单词文本的相似性。(Word2Vec只为每个单词创建向量,因此您可以比较单词。有多种方法可以在更大的比较中使用这些单词向量,但没有一种方法可以在没有规范的情况下假设它如此占主导地位。)此外,对于您的
Word2Vec
模型,您更改了许多默认设置,这些默认设置在
Doc2Vec
中保持不变。为什么一个样本是非默认的
样本
,而另一个则不是?为什么一个BU的非默认启动
alpha
,而不是另一个?为什么一个窗口是非默认的
而另一个窗口不是呢?我很抱歉@gojomo丢失了信息。我在5年内每周比较一个人,每个请求平均有100个单词。我更正了提供的代码,尝试调整规范以改进
Doc2Vec
模型,但即使使用类似的规范,差异仍然存在。另外,
n_相似度(ws1,ws2)
from
Doc2Vec
计算两组单词之间的余弦相似度,因此,在我的例子中,在第一周和第二周的请求之间。如果我不理解您的问题,请让我知道。您是否在早期的仅请求案例(不包括每周每个用户的伪文档)中使用了
d2v_model.wv.n_similarity()
(而不是基于文档向量的任何内容),结果“相当好”?您能否更具体地说明使用(A)原始
Doc2Vec
model;(B
Word2Vec
模型与您问题中的原始模型相同,但存在一些未明确动机的参数更改;(C)更新问题中的
Word2Vec
模型的参数与原始
Doc2Vec
?(或者它们在新用户周任务中是否同样糟糕?)
docs = DocumentIterator()
bigram_transformer = gensim.models.Phrases(docs, min_count=1, threshold=10)
bigram = gensim.models.phrases.Phraser(bigram_transformer)
sentences = PhrasingIterable(bigram, docs)
model = Word2Vec(window=5,
                        size=300,
                        min_count=10,
                        workers = multiprocessing.cpu_count(),
                        iter = 10, 
                        compute_loss=True)
model.build_vocab(sentences)
model.train(sentences, total_examples=model.corpus_count, epochs=model.epochs)