2016-08-03 19 views
1

私はテキストのマルチクラス分類プロジェクトに取り組んでおり、文書/用語行列を構築し、R言語で訓練し、テストする必要があります。テキスト分類と大きな疎行列での作業R

私はすでに、Rのベース行列クラスの限られた次元に収まらないデータセットを持っており、例えば100kツイートを分類できるように大きなスパース行列を構築する必要があります。私は、quantedaパッケージを使用しています。これは、辞書よりDocumentTermMatrixを作成することにより、小さなデータセットで非常にメモリが浪費されてしまうパッケージtmよりも有用で信頼性が高くなりました。現在、私が言ったように、私はquantedaを使って、それと同等のDocument Term Matrixコンテナを作成します。後でそれをトレーニングするためにdata.frameに変換します。

このような大きな行列を構築する方法があるかどうかを知りたいと思います。私はbigememoryパッケージを読んでこの種のコンテナを許可していますが、後で分類するためキャレットと一緒に動作するかどうかはわかりません。全体的に私は、RAMが(大きな)問題(32GB)ではないので、問題を理解し、より大きなデータセットで作業するための回避策を構築したいと思いますが、それを行う方法を見つけようとしています。それについて。

答えて

4

あなたは何時にラムの制約に達しましたか?

quantedaは、中規模のデータセットでNLPを使用するのに適したパッケージです。しかし私は私のtext2vecパッケージを試してみることをお勧めします。一般に、メモリにかなりのメモリがあり、RAMにすべての生のテキストをロードする必要はありません(たとえば、16GBのラップトップにWikipediaのダンプ用のDTMを作成できます)。

第2の点は、データをdata.frameに変換することを強く推奨しないことです。 sparseMatrixオブジェクトを直接操作してください。

次のメソッドは、テキスト分類のために良い仕事します:

  1. 線形SVMを(LiblineaRを参照してください、しかし、価値が代替のためのserachへ)関連
  2. 価値(glmnetパッケージを参照してください)L1ペナルティと
  3. ロジスティック回帰`xgboostを試してみてください。私は線形モデルを好むだろう。だから、線形ブースターを試すことができます。
+0

こんにちはドミトリー、お返事ありがとうございます。 –

+0

(その答えを編集するのに多くの時間を費やした...) 私はtext2vecパッケージを見て、興味深いと思っています。私はそれを試してみることを検討していますが、私はどのように分類を介して実行するために作成されたDTMを使用することができます理解する必要があります - 私が理解するこのオブジェクトはdgCMatrixまたはdgTMatrixですので、キャレットを使用する必要があります。 このオブジェクトをキャレットの電車機能に直接フィードできますか? ありがとう! –

+1

'Matrix'パッケージの' dgCMatrix'は、Rのスパース行列の「standart」です。私は 'キャレット 'を試しませんでしたが、このトピックに興味があります:https://github.com/topepo/caret/問題/ 31。キャレットはまばらな行列をすぐにサポートしているようです。 –