どこまで継続できるかというのはあるけど、Elasticsearchを使って機械学習的なことをちょっとまとめていこうかと。
まず、いろいろとやるためには適用するデータが必要になるけど、ここではWikipediaのデータを使ってあれこれしてみようかな。
MovieLensとか、IRISとか、定番データは世の中に存在していると思うけど、あれはあれできれいな感じだからHelloWorld的なことをしたければ、それらを使ってみるのが良いかと思う。
Elasticsearchをここからダウンロードして、展開した後にkuromojiをインストールしておく。
$ wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.4.2.tar.gz
$ tar zxvf elasticsearch-1.4.2.tar.gz
$ cd elasticsearch-1.4.2/
$ bin/plugin -install elasticsearch/elasticsearch-analysis-kuromoji/2.4.1
今回は、WikipediaのデータをElasticsearchに入れるところまでを試してみる。
Wikipediaのデータを投入するのには、WikipediaのRiverを利用する。
WikipediaのRiverは
$ bin/plugin -install elasticsearch/elasticsearch-river-wikipedia/2.4.1
でElasticsearch 1.4系のものをインストールできる。
インストール後、Elasticsearchを起動する。
$ ./bin/elasticsearch &
次にWikipediaのデータをアーカイブされているところから取得する(ダウンロードしたものを置くところはどこでも良いです)。
$ mkdir wikipedia
$ cd wikipedia/
$ wget http://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2
ここまで準備できれば、あとはRiverを実行するだけだが、事前に登録先のインデックスを作成しておく。
$ curl -XPUT 'http://localhost:9200/jawiki-pages-articles/' -d '
{
"settings": {
"index":{
"refresh_interval": "60s",
"number_of_replicas":"0",
"number_of_shards":"5"
},
"analysis":{
"tokenizer":{
"ja_tokenizer":{
"type":"kuromoji_tokenizer",
"mode":"normal",
"discard_punctuation":"false",
"user_dictionary":"userdict_ja.txt"
}
},
"analyzer":{
"ja_analyzer":{
"type":"custom",
"tokenizer":"ja_tokenizer"
}
}
}
},
"mappings":{
"page":{
"_all": {
"enabled": false
},
"properties":{
"category":{
"type":"string",
"index":"not_analyzed"
},
"disambiguation":{
"type":"boolean"
},
"link":{
"type":"string",
"index":"not_analyzed"
},
"redirect":{
"type":"boolean"
},
"redirect_page":{
"type":"string",
"index":"not_analyzed",
"copy_to":"redirect_page_text"
},
"redirect_page_text":{
"type":"string",
"analyzer":"ja_analyzer"
},
"special":{
"type":"boolean"
},
"stub":{
"type":"boolean"
},
"text":{
"type":"string",
"analyzer":"ja_analyzer"
},
"title":{
"type":"string",
"index":"not_analyzed",
"copy_to":"title_text"
},
"title_text":{
"type":"string",
"analyzer":"ja_analyzer"
}
}
}
}
}'
$ES_HOME/config/userdict_ja.txtは空ではだめなので、kuromojiの辞書を適当に作成してください。
kuromojiの設定は後日変えるかもしれませんが、とりあえず、そんな感じにしておきます。
titleプロパティとかはanalyzeしない方が良さそうな場合もありそうなので、形態素解析用にはcopy_toで別プロパティを作成しておくことにします。
あとは、
$ curl -XPUT localhost:9200/_river/jawiki-pages-articles/_meta -d '
{
"type":"wikipedia",
"wikipedia":{
"url":"file:$ES_HOME/wikipedia/jawiki-latest-pages-articles.xml.bz2"
},
"index":{
"bulk_size":1000
}
}'
を実行してしばらく待つとデータができあがりです($ES_HOMEを適当に置き換えてください)。
latestを持ってきているので、実行したときによって違うかと思いますが、190万ドキュメントで7Gくらいの量のようです。
次回以降でこれをつかっていろいろと試せれば良いかな。