分析产品评论时,Doc2Vec 和 Word2Vec 之间应该使用什么?

问题描述

我收集了一些来自不同用户的网站产品评论,我试图通过使用用户使用的词的嵌入来找到产品之间的相似之处。 我对每个产品的每个评论进行了分组,这样我就可以在我的数据框中一个一个地获得不同的评论(即:一个产品的不同作者)。此外,我还对评论(以及所有其他预处理方法)进行了标记。下面是我所拥有的模型数据框(每个产品的代币列表实际上非常高,以及产品的数量):

产品 reviews_tokenized
XGame3000 绝对惊人的模拟器感觉无法访问......
Poliamo 产​​值效应趋于覆盖...
阿尔忒弥斯 绝对棒极了可能是好油...
拌饭 能力模拟应急操作员镇...

但是,我不确定 doc2vec 和 Word2Vec 之间哪个最有效。我最初会选择 doc2vec,因为它能够通过考虑段落/句子来找到相似之处,并找到它的主题(我想拥有它,因为我试图按主题对产品进行聚类) ,但我有点担心评论来自不同的作者,因此可能会影响嵌入?请注意,我对 NLP 和嵌入非常陌生,因此可能会忽略一些概念。下面是我的 doc2vec 代码,它给了我一个很好的轮廓分数(~0.7)。

product_doc = [TaggedDocument(doc.split(' '),[i]) for i,doc in enumerate(df.tokens)]
model3 = doc2vec(min_count=1,seed = SEED,ns_exponent = 0.5)
model3.build_vocab(product_doc)
model3.train(product_doc,total_examples=model3.corpus_count,epochs=model3.epochs)
product2vec = [model3.infer_vector((df['tokens'][i].split(' '))) for i in range(0,len(df['tokens']))]
dtv = np.array(product2vec)

您认为解决此问题的最有效方法是什么?如果有什么不清楚的地方,请告诉我。

感谢您的帮助。

编辑:以下是我获得的集群:

Clusters obtained

解决方法

无法确定哪种特定的方法组合最适合特定数据集和特定最终目标:您确实必须在自己的可重用管道中相互尝试它们,以便根据您想要的结果对它们进行评分。

看起来您已经将文档分解为关键字而不是原始自然文本,这可能会对这些算法造成影响 - 您可能想同时尝试两种方法。

根据文本的大小和格式,您可能还需要考虑在句子(或其他小的逻辑数据块)之间进行“Word Mover 的距离”(WMD) 比较。一些工作已经演示了在评论域中找到“类似问题”(即使措辞不同)的有趣结果,例如:https://tech.opentable.com/2015/08/11/navigating-themes-in-restaurant-reviews-with-word-movers-distance/

但是,请注意,对于较大的文本进行批量计算 WMD 的成本非常高。