十分なお手伝いができるかどうかはわかりませんが、いくつかのエントリー ポイントをご紹介できれば幸いです。一般的に、Mahout のソース コードをダウンロードして、サンプルとターゲット クラスがどのように実装されているかを確認することをお勧めします。これは簡単なことではありませんが、Mahout には簡単な入り口がないことを覚悟しておく必要があります。しかし、それらに入ると、学習曲線は速くなります。
まず、使用している Mahout のバージョンによって異なります。自分は0.7を使っているので、0.7についての説明になります。
public void classify(String modelLocation, RawEntry unclassifiedInstanceRaw) throws IOException {
Configuration conf = new Configuration();
NaiveBayesModel model = NaiveBayesModel.materialize(new Path(modelLocation), conf);
AbstractNaiveBayesClassifier classifier = new StandardNaiveBayesClassifier(model);
String unclassifiedInstanceFeatures = RawEntry.toNaiveBayesTrainingFormat(unclassifiedInstanceRaw);
FeatureVectorEncoder vectorEncoder = new AdaptiveWordValueEncoder("features");
vectorEncoder.setProbes(1); // my features vectors are tiny
Vector unclassifiedInstanceVector = new RandomAccessSparseVector(unclassifiedInstanceFeatures.split(" ").length());
for (String feature: unclassifiedInstanceFeatures) {
vectorEncoder.addToVector(feature, unclassifiedInstanceVector);
}
Vector classificationResult = classifier.classifyFull(unclassifiedInstanceVector);
System.out.println(classificationResult.asFormatString());
}
そこで何が起こるの:
1) まず、trainnb で取得したモデルを読み込みます。このモデルは、trainnb の呼び出し中に -o パラメータを使用して指定した場所に保存されました。モデルは .bin ファイルです。
2) StandardNaiveBayesClassifier はモデルを使用して作成されます
3) RawEntry は、データの生の文字列の単なるラッパーであるカスタム クラスです。toNaiveBayesTrainingFormar は、分類したい文字列を受け取り、ニーズに基づいてそこからノイズを除去し、特徴の文字列 'word1 word2 word3 word4' を単純に返します。そのため、分類されていない生の文字列は、分類に適した形式に変換されました。
4) 特徴量の文字列を Mahout の Vector としてエンコードする必要があるのは、分類器の入力が Vector のみであるためです。
5) ベクターを分類子に渡す - マジック。
これが最初の部分です。これで、分類子は、確率を持つクラス (あなたの場合は感情) を含むベクトルを返します。特定の出力が必要です。最も簡単に実装できるのは (ただし、最も効率的でスタイリッシュなものではないと思います)、次に行うことです。
1) 分類したいすべてのデータを処理する map reduce ジョブを作成します
2) 各インスタンスに対して、classify メソッドを呼び出します (すべてのインスタンスに対して StandardNaiveBayesClassifier を作成しないように、いくつかの変更を行うことを忘れないでください)。
3)分類結果ベクトルを使用すると、マップ削減ジョブで希望する形式でデータを出力できます
4) ここで便利な設定は jC.set("mapreduce.textoutputformat.separator", " "); です。ここで、jC は JobConf です。これにより、mapreduce ジョブからの出力ファイルのセパレーターを選択できます。あなたの場合、これは「、」です。
繰り返しますが、これはすべて Mahout 0.7 に当てはまります。そのままで動作することを保証するものではありません。それは私のために働いた。
一般に、コマンドラインから Mahout を使用したことはありません。私にとっては、Java の Mahout が最適です。