如何使用 doc2vec 向量测量单词权重

How to measure the word weight using doc2vec vector

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

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

感谢您的考虑。

假设您可以使用 doc2vec 找到对应于整个文档的向量 R。我们还假设使用 word2vec,您也可以找到对应于任何单词 w 的向量 v。最后,我们假设 Rvsame N-dimensional space.

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

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

然后,您可以将 v_normal 投影到向量 R 表示的直线上。那个投影运算就是求 v_normalR 的点积吧?我们将点积的标量结果称为 len_projection。好吧,您可以将 len_projection / |v_normal| 视为单词上下文与整个文档的上下文 平行度 的指示。事实上,只考虑 len_projection 就足够了,因为在这种情况下,由于 v_normal 被归一化, |v_normal| == 1.

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

请注意,此方法最终可能会找到 frequently-used 个单词,例如 "I""and" 作为文档中最重要的词,因为这些词出现在许多不同的上下文中。如果这是您想要解决的问题,您可能需要执行 post-processing 步骤来过滤此类常用词。

我是当场想到这个方法的,不知道这个方法有没有科学依据。但是,如果您考虑大多数单词向量嵌入的工作原理,这可能是有道理的。通常训练词向量来表示使用词的上下文。从向量算术的角度考虑,将向量投影到一条线上可能会揭示该词的上下文 w 与该行表示的整体上下文的平行程度。

最后但同样重要的是,因为我之前只使用过 word2vec,所以我不确定 doc2vec 和 word2vec 数据是否可以像我上面提到的那样同时使用。正如我在回答的第一段中所述,Rv 必须位于 same N-dimensional space.

当使用 infer_vector() 时,none 提供的字词中有 'weight' 或 'importance'。

推理过程试图逐步形成一个 doc-vector,它通常非常擅长预测所有提供的单词,并且每个单词(反过来)都是该过程同等重要的目标。

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