0

優れた Quanteda パッケージを使用して、テキストの大規模なコーパス (オブジェクト サイズは R で約 1Gb) から n グラムを構築しようとしています。利用可能なクラウド リソースがないため、自分のラップトップ (Windows および/または Mac、12Gb RAM) を使用して計算を行っています。

データを断片にサンプリングすると、コードが機能し、さまざまなサイズの n-gram の (部分的な) dfm が得られますが、コーパス全体でコードを実行しようとすると、残念ながらこのコーパス サイズでメモリ制限に達します。次のエラーが発生します (ユニグラム、単一単語のコード例):

> dfm(corpus, verbose = TRUE, stem = TRUE,
      ignoredFeatures = stopwords("english"),
      removePunct = TRUE, removeNumbers = TRUE)
Creating a dfm from a corpus ...
... lowercasing
... tokenizing
... indexing documents: 4,269,678 documents
... indexing features: 
Error: cannot allocate vector of size 1024.0 Mb

In addition: Warning messages:
1: In unique.default(allFeatures) :
  Reached total allocation of 11984Mb: see help(memory.size)

n > 1 で n-gram を構築しようとすると、さらに悪化します。

> dfm(corpus, ngrams = 2, concatenator=" ", verbose = TRUE,
     ignoredFeatures = stopwords("english"),
     removePunct = TRUE, removeNumbers = TRUE)

Creating a dfm from a corpus ...
... lowercasing
... tokenizing
Error: C stack usage  19925140 is too close to the limit

この関連記事を見つけましたが、密行列強制の問題であり、後で解決されたようで、私の場合は役に立ちません。

コーパス データを分割することなく、限られた量のメモリでこれを処理するより良い方法はありますか?

[編集] 要求どおり、sessionInfo() データ:

> sessionInfo()
R version 3.2.3 (2015-12-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] data.table_1.9.6 dplyr_0.4.3      quanteda_0.9.4  

loaded via a namespace (and not attached):
 [1] magrittr_1.5    R6_2.1.2        assertthat_0.1  Matrix_1.2-3    rsconnect_0.4.2 DBI_0.3.1      
 [7] parallel_3.2.3  tools_3.2.3     Rcpp_0.12.3     stringi_1.0-1   grid_3.2.3      chron_2.3-47   
[13] lattice_0.20-33 ca_0.64
4

2 に答える 2

1

おそらく今では遅すぎますが、最近、非常によく似た問題が発生しました(n-gram、R、Quanteda、および大きなテキストソース)。2日間検索しましたが、満足のいく解決策を見つけることができず、このフォーラムなどに投稿しましたが、回答が得られませんでした. データを分割し、最後に結果を結合する必要があることはわかっていましたが、分割の方法がわかりませんでした。最後に、私はやや洗練されていない解決策を見つけ、次の投稿で私自身の質問に答えました

「tm」パッケージ VCorpus を使用してコーパスをスライスし、そのチャンクを corpus() 関数を使用して quanteda に送りました。

コードソリューションを提供するときに投稿すると思いました。願わくば、他の人が検索に 2 日も費やすのを防いでくれることを願っています。

于 2017-01-12T22:10:12.630 に答える