0

私は、約 85,000 のツイートの非常に大きなコーパスを操作して、テレビ コマーシャルのダイアログと比較しようとしています。ただし、コーパスのサイズが原因で、「エラー: サイズ n のベクトルを割り当てることができません」というメッセージ (私の場合は 26 GB) を取得せずに余弦類似度測定を処理できません。

大量のメモリを搭載したサーバーで既に R 64 ビットを実行しています。また、メモリが最も多いサーバー (244 GB) で AWS を使用しようとしましたが、役に立ちませんでした (同じエラー)。

fread のようなパッケージを使用してこのメ​​モリ制限を回避する方法はありますか? それとも、データを分割する方法を考え出す必要がありますか? 助けてくれてありがとう、私は以下のコードを追加しました:

x <- NULL
y <- NULL
num <- NULL
z <- NULL
ad <- NULL
for (i in 1:nrow(ad.corp$documents)){
  num <- i
  ad <- paste("ad.num",num,sep="_")
  x <- subset(ad.corp, ad.corp$documents$num== yoad)
  z <- x + corp.all
  z$documents$texts <- as.character(z$documents$texts)
  PolAdsDfm <- dfm(z, ignoredFeatures = stopwords("english"), groups = "num",stem=TRUE, verbose=TRUE, removeTwitter=TRUE)
  PolAdsDfm <- tfidf(PolAdsDfm)
  y <- similarity(PolAdsDfm, ad, margin="documents",n=20, method = "cosine", normalize = T)
  y <- sort(y, decreasing=T)
  if (y[1] > .7){assign(paste(ad,x$documents$texts,sep="--"), y)}
  else {print(paste(ad,"didn't make the cut", sep="****"))}  
}
4

1 に答える 1

3

このエラーは、proxy::simil() を呼び出すために dfm オブジェクトを密行列に強制する以前のバージョンの quanteda (0.9.1-8 より前、2016 年 1 月 1 日の時点で GitHub で) が原因である可能性が最も高いです。新しいバージョンは、method = "correlation"およびの強制なしにスパース dfm オブジェクトで動作するようになりmethod = "cosine"ました。(よりスパースなメソッドが間もなく登場します。)

コードで何をしているのかを実際に追跡することはできませんが、グループとして集約されたドキュメント間でペアごとの類似性が得られているようです。次のワークフローをお勧めします。

  1. 比較するテキストのすべてのグループのグループ オプションを使用して dfm を作成します。

  2. 行ったように、この dfm に重みtfidf()を付けます。

  3. を使用y <- textstat_simil(PolAdsDfm, margin = "documents", method = "cosine")して、これを完全な対称行列に変換しas.matrix(y)ます。ペアワイズ ドキュメントはすべてそのマトリックスにあり、0.7 のしきい値よりも大きいという条件で、そのオブジェクトから直接選択できます。

    で項頻度を正規化する必要がないことに注意してくださいmethod = "cosine"quantedaの新しいバージョンではnormalize、重み付けを に組み込むよりも、類似度の計算の前に dfm に重み付けする方がワークフローの実践として優れていると思うので、とにかく引数が削除されましたtextstat_simil()

最後の注意: ここにあるメソッドを使用してオブジェクトの内部にアクセスしないことを強くお勧めしcorpusます。これらの内部が変更され、コードが壊れる可能性があるためです。texts(z)の代わりにz$documents$texts、たとえば とのdocvars(ad.corp, "num")代わりに使用しますad.corp$documents$num

于 2016-01-01T19:08:54.543 に答える