如何使用doc2vec矢量测量单词重量

时间:2018-04-08 11:41:32

标签: python algorithm word-embedding doc2vec

我正在使用word2vec算法来检测文档中最重要的单词,我的问题是如何使用从doc2vec获得的向量来计算重要单词的权重,我的代码是这样的:

model = Doc2Vec.load(fname)
word=["suddenly"]
vectors=model.infer_vector(word)

谢谢你的考虑。

2 个答案:

答案 0 :(得分:0)

假设您可以使用doc2vec找到与整个文档相对应的向量R。我们还假设使用word2vec,您也可以找到与任何单词v对应的向量w。最后,让我们假设Rv位于相同的 N维空间中。

假设所有这些,您可以使用普通的老向量算法找出Rv之间的一些相关性。

对于初学者,您可以将v标准化。毕竟,归一化只是将每个维度除以v的大小。 (即|v|)让我们将v的规范化版本称为v_normal

然后,您可以将v_normal投影到向量R所代表的行上。该投影操作只是找到v_normalR的点积,对吗?我们将点积的标量结果称为len_projection。好吧,您可以将len_projection / |v_normal|视为 parallel 单词的上下文与整个文档的上下文的对比。事实上,只考虑len_projection就足够了,因为在这种情况下,v_normal被归一化,|v_normal| == 1

现在,您可以将此过程应用于文档中的所有单词,并将导致最大len_projection值的单词视为该文档中最重要的单词。

请注意,此方法最终可能会找到常用字词,例如“I”,或“和”作为文档中最重要的字词,就像这样的字词出现在许多不同的背景下。如果这是您想要解决的问题,您可能需要执行后处理步骤来过滤此类常用词。

我在这里有点想到这种方法,我不确定这种方法是否有任何科学依据。但是,如果你想一下大多数矢量嵌入是如何工作的话,这可能是有意义的。通常训练单词向量来表示使用单词的上下文。从向量算术的角度思考,将向量投影到一条线上可以揭示该词w的上下文与该行所代表的整体上下文的平行程度。

最后但并非最不重要的是,因为我之前只使用过word2vec,所以我不确定doc2vec和word2vec数据是否可以像上面提到的那样使用。正如我在答案的第一段中所说,Rv必须位于相同的 N维空间中。

答案 1 :(得分:0)

使用infer_vector()时,所提供的单词都没有任何重量'或者“重要性”。

推理过程试图逐步建立一个通常很好地预测所有提供的单词的doc-vector,并且每个单词(反过来)都是该过程同样重要的目标。

另外:推理很少适用于微小的例子,例如只有一个或几个单词的文本。当为其可选参数提供非默认值时,推理通常会更好。例如,代替默认steps=5,值为20,100或更多可能会有所帮助,尤其是对于较小的文本。而不是默认的起始alpha=0.1,值0.025(类似于训练默认值)通常会有所帮助。