text2vec
のパッケージを使用して、コーパスから用語と用語の共起行列 (または TCM) を計算しようとしていますR
(優れた並列バックエンドがあるため)。私はこのチュートリアルに従いましたが、いくつかのおもちゃの例を調べているときに、create_tcm
関数が用語と用語の共起値に対して何らかのスケーリングまたは重み付けを行っていることに気付きました。内部でスキップグラムを使用していることは知っていますが、ドキュメントにはそれらをどのようにスケーリングするかについては言及されていません-明らかに、より遠い用語/ユニグラムはより低く重み付けされています。
次に例を示します。
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 . . .
質問: この動作を無効にして、スキップ グラム ウィンドウ内のすべてのターム/ユニグラムが同等に扱われるようにする方法はありますか? つまり、用語が別の用語のコンテキスト ウィンドウ内でコーパス内に 2 回出現する場合、TCM マトリックスでは「2」と表示されます。
おまけの質問: デフォルトのスケーリングはどのように機能しますか? 最後の例にさらに「a」を追加すると、bc 値は直線的に減少するように見えますが、ba 値は実際には増加しますが、より多くの出現または「a」が「b」から離れて表示されます。