0

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」から離れて表示されます。

4

1 に答える 1