我正在尝试使用 in 中的text2vec
包从语料库中计算术语术语共现矩阵(或 TCM) R
(因为它有一个很好的并行后端)。我遵循了本教程,但是在检查一些玩具示例时,我注意到该create_tcm
函数对术语-术语共现值进行了某种缩放或加权。我知道它在内部使用skip-grams,但文档没有提到它是如何缩放它们的——显然,更远的术语/unigrams 的权重更低。
这是一个例子:
tcmtest = function(sentences){
tokens <- space_tokenizer(sentences)
it = itoken(tokens, progressbar = FALSE)
vocab <- create_vocabulary(it, ngram = c(ngram_min = 1L, ngram_max = 1L))
vectorizer <- vocab_vectorizer(vocab, grow_dtm = FALSE, skip_grams_window = 5L)
return(create_tcm(it, vectorizer))
}
> tcmtest(c("a b", "a b c"))
3 x 3 sparse Matrix of class "dgTMatrix"
b c a
b . 1 2.0
c . . 0.5
a . . .
> tcmtest(c("a b", "c a b"))
3 x 3 sparse Matrix of class "dgTMatrix"
b c a
b . 0.5 2
c . . 1
a . . .
> tcmtest(c("a b", "c a a a b"))
3 x 3 sparse Matrix of class "dgTMatrix"
b c a
b . 0.25 2.833333
c . . 1.833333
a . . .
问题:有什么方法可以禁用这种行为,以便在 skip-gram 窗口中的每个术语/单字都得到同等对待?即,如果一个词在语料库中两次出现在另一个词的上下文窗口内,则它应该在 TCM 矩阵中显示为“2”。
额外的问题:默认缩放是如何工作的?如果在最后一个示例中添加更多的“a”,则 bc 值似乎线性减小,而 ba 值实际上增加了——尽管出现更多的“a”或“a”看起来离“b”更远。