【问题标题】:How to measure the word weight using doc2vec vector如何使用 doc2vec 向量测量词的权重
【发布时间】:2018-04-08 11:41:32
【问题描述】:

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

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

感谢您的考虑。

【问题讨论】:

  • 首先,您需要定义“重要”和“重量”的含义。
  • weight:表示它的重要程度,我的应用是检测每块文本的主题(topics表示“重要的词”)

标签: python algorithm word-embedding doc2vec


【解决方案1】:

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

假设所有这些,然后您可以使用普通的旧向量算术来找出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 值的单词视为该文档中最重要的单词。

请注意,此方法最终可能会找到像 "I""and" 这样的常用词作为文档中最重要的词,因为这些词出现在许多不同的语境中。如果这是您想要解决的问题,您可能需要执行后处理步骤来过滤此类常用词。

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

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

【讨论】:

  • 感谢您的回复,但我想要文档中单词的分数之类的东西,因为我可以应用您提出的方法,因为 infer_vector 方法会导致未归一化的向量:/,我不知道如何解决...
  • @mourchidyoussef 我编辑了我的答案,使其更加详细。希望对您有所帮助。
【解决方案2】:

当使用infer_vector() 时,所提供的词都不再具有“权重”或“重要性”。

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

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

【讨论】:

  • 感谢您的回复,但我想要文档中单词的分数之类的东西
  • “文档中的单词分数”是什么意思?
猜你喜欢
  • 2016-09-17
  • 2019-08-30
  • 2015-02-12
  • 2018-10-02
  • 1970-01-01
  • 1970-01-01
  • 2021-11-20
  • 1970-01-01
  • 2017-03-17
相关资源
最近更新 更多