優れた 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