gensim 对于*2vec模型,能够根据目标词与上下文词的距离对上下文词进行加权,

tpgth1q7  于 3个月前  发布在  其他
关注(0)|答案(5)|浏览(44)

word2vec中的window参数控制两个单词之间的距离,以及它们是否仍然可以直接影响彼此的嵌入结果。当前的设置是:给定一个单词是否在另一个单词的窗口内,这是一个二进制结果。通过与核回归的类比,word2vec使用均匀(或盒形)核从输入单词预测目标单词。因此,再次通过与核回归的类比,我们是否可以让用户指定核函数为非均匀函数?

例如,在计算损失时,我希望能够为每个上下文词分配一个权重,类似于w = exp(-beta*k),其中k是上下文词与目标词之间的距离,beta是非负数。因此,允许用户选择beta是一个开始。或者他们可以直接提供自己的k函数。

我在网上查了一些资料,但没有找到与这个word2vec提案相关的任何内容,但这似乎是常识,肯定有人尝试过吧?

zbwhf8kr

zbwhf8kr1#

我所看到的是人们使用完全任意的单词之间的距离,表示例如点击事件之间的时间间隔,或者物体(~"words")之间的物理距离。
如果我们添加权重,我更倾向于让它变得非常灵活,而不仅仅是像 exp(-beta*k) 或当前线性随机上下文缩短那样的一个固定函数家族。
以一种既易于使用又不引入性能回归的方式实现这一点可能是非平凡的。

4sup72z8

4sup72z82#

我同意 exp(-beta*k) 的限制性。另一种方法是创建一个默认值为 Nonewindow_weights 参数(保留当前行为和性能)。window_weights 的有效非空值是长度为 2*window 的数字值列表。这给用户带来了一些负担,需要知道在定义权重时他们在做什么,但它是完全灵活的,包括针对目标词之后和之前单词的不对称加权。

然后问题是这种开销有多大。可以推测,用于训练的所有单词对已经预先计算了它们的位置距离(以识别哪些对不是负样本),这是查找相关权重所需的全部内容。然后必须将权重乘以每个输入(在 CBOW 总和中)或每个输出损失(对于 skip-gram)。由于我对代码库的理解不足,无法确定具体会发生在哪里。

我认为我理解了您提到的距离,但不确定人们如何使用这些距离。这是用 gensim 吗?

vmpqdwk3

vmpqdwk33#

请注意,现有的 Word2Vec / Doc2Vec 并不等同于对待所有距离,而是遵循原始的 word2vec.c 实现,将 window 视为最大距离,但在每次针对特定单词的训练过程中,从 1 到 window 中选择一个随机有效的窗口值。因此,立即相邻的词总是训练的一部分,但更远的词有时是,有时不是——通过最少的计算来近似某种距离加权。

4dc9hkyq

4dc9hkyq4#

了解!也许这值得添加到标准文档中。这是相关的代码片段吗?

iaqfqrcu

iaqfqrcu5#

是的,在其他地方也会出现 reduced_windows 这样的变量(例如在 doc2vec_inner.pyx 中)。(我相信原始的 word2vec.c 代码中的类似有效窗口变量就是 b。)

相关问题