LoginSignup
1
1

More than 5 years have passed since last update.

Mahoutインストール〜Model作成まで

Last updated at Posted at 2015-12-02

※1年前に試した時のログです

前提条件

  • JDK1.7系インストール済
  • Hadoop2系インストール済

   

注意点

  • Mahout0.9系 - Hadoop2.2系で実行しましたがMahoutが動きませんでした。  MahoutはHadoopの2.2系にはまだ対応していないようです。  ClouderaリポジトリからインストールしたMahout0.7 - Hadoop2.0系で動作を確認してます。

  

下準備

  • 学習データを用意します。 私はOK,NGのステータスがついたテキストを3500程用意してHBaseへ格納し、以下の処理を行うプログラムを書いて シーケンス化用データとしてHDFSに書き出しました。 ※ここではMahoutにフォーカスするのでさらっとだけ記述

 
①HBaseから値を取得
②日本語のテキストを処理しやすいよう加工(LuceneのJapaneseAnalyzerを使用しました)
・わかち分割処理
・不要な頻出語、助詞、助動詞、接続詞等の除外、大文字を小文字へ統一、全角を半角へ統一等

この処理を通したテキストは具体的には以下のようになります。
 

おはようございます!プログラマーの神様!(T_T)
おはよう プログラマー 代表 神様 t t  

 

③HDFS上にステータス毎にテキストを設置。
↓こんな感じ。このディレクトリ以下に1ファイル-1テキストで保存

hadoop dfs -ls /monitoring/kerberos/

Found 2 items
drwxr-xr-x   - hdfs hadoop          0 2014-03-13 15:39 /data/ng-text
drwxr-xr-x   - hdfs hadoop          0 2014-03-13 15:40 /data/ok-text

 

ng-textとok-text以下はこの通り

$ hadoop dfs -ls /data/ok-data/ |more

Found 1897 items
-rw-r--r--   3 matsukawa_tsubasa hadoop         24 2014-03-13 18:36 /data/ok-text/1311.txt
-rw-r--r--   3 matsukawa_tsubasa hadoop        136 2014-03-13 18:36 /data/ok-text/1312.txt
-rw-r--r--   3 matsukawa_tsubasa hadoop        115 2014-03-13 18:36 /data/ok-text/1313.txt
-rw-r--r--   3 matsukawa_tsubasa hadoop         24 2014
                                            ・
                                            ・
                                            ・

※mahoutのサンプル分類器はデータ格納ディレクトリを目的変数(テキストの分類ステータス)として取るようです。
-区切りであれば先頭から最初の-までをとってくれました。上記例の場合だと目的変数はokとngになります。

 

データのシーケンス化

$ mahout seqdirectory -i /data/ -o /data-seq

Options

  • --input (-i) ⇒ 入力データ
  • --output (-o) ⇒ シーケンスファイルの出力先
  • --chunkSize (-chunk) ⇒ ファイルの分割サイズ(デフォルトは64Mbytes)
  • --keyPrefix (-prefix) ⇒ 指定した文字列がKeyのprefixに利用される
  • --charset (-c) ⇒ 文字コードを指定(デフォルトはUTF-8)

どちらもデフォルトでHDFS上のデータを見に行きます。
-oで指定したディレクトリは存在しなくても生成してくれます。

シーケンスデータの確認

$ mahout seqdumper -i /data-seq/chunk-0

 

シーケンスデータのベクトル化

$ mahout seq2sparse -i /data-seq -o /data-vectors -a org.apache.lucene.analysis.core.WhitespaceAnalyzer

※luceneのバージョンによって微妙にパスが違うので注意

org.apache.lucene.analysis.core.WhitespaceAnalyzer
org.apache.lucene.analysis.WhitespaceAnalyzer

ベクトル以外にも,df値,辞書ファイル,単語の出現回数等が生成される
tf-vectorsとtfidf-vectors以外のファイルは,これまでと同様にseqdumperコマンドで内容を確認することができる

ベクターデータの確認

  • 内容確認
$ mahout vectordump -i /monitoring/kerberos-vectors/tfidf-vectors

  

  • 頻出語の確認
$ mahout seqdumper -i /monitoring/kerberos-vectors/wordcount | sort -nrk4 

 

Model作成

$ mahout trainnb -i /monitoring/test-vectors/tfidf-vectors -o /monitoring/test-model -el -li /monitoring/labelindex
  • --input (-i) ⇒ 学習データ
  • --output (-o) ⇒ モデルの出力先
  • --extractLabels (-el) ⇒ ラベルインデックスを作成
  • --trainComplementary (-c) ⇒ complement naive bayesを利用
  • --labelIndex (-li) ⇒ ラベルインデックスのパスを指定

 ラベルインデックスの確認

$ mahout seqdumper -i /monitoring/labelindex
Running on hadoop, using /usr/lib/hadoop/bin/hadoop and HADOOP_CONF_DIR=/etc/hadoop/conf
MAHOUT-JOB: /usr/lib/mahout/mahout-examples-0.7-cdh4.5.0-job.jar
14/03/13 19:57:48 INFO common.AbstractJob: Command line arguments: {--endPhase=[2147483647], --input=[/monitoring/labelindex], --startPhase=[0], --tempDir=[temp]}
Input Path: /monitoring/labelindex
Key class: class org.apache.hadoop.io.Text Value Class: class org.apache.hadoop.io.IntWritable
Key: ng: Value: 0
Key: ok: Value: 1
Count: 2
14/03/13 19:57:49 INFO driver.MahoutDriver: Program took 1735 ms (Minutes: 0.028916666666666667)

  

Modelのテスト

$ mahout testnb -i /monitoring/test-vectors/tfidf-vectors -o /monitoring/test1 -m /monitoring/test-model -l /monitoring/labelindex

Summary
-------------------------------------------------------
Correctly Classified Instances          :       3083       87.0167%
Incorrectly Classified Instances        :        460       12.9833%
Total Classified Instances              :       3543

=======================================================
Confusion Matrix
-------------------------------------------------------
a       b       <--Classified as
1215    442      |  1657        a     = ng
18      1868     |  1886        b     = ok


14/03/13 20:21:09 INFO driver.MahoutDriver: Program took 19632 ms (Minutes: 0.32721666666666666)

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1