土曜日 2 p.m.–2:30 p.m.
Tornado/ElasticSearchで実現する大量ツイートのリアルタイム関連文書判定
Satoru Kadowaki
- 対象レベル:
- 中級
- カテゴリ:
- Best Practices/Patterns
説明
Twitterのツイートのような短い文章を自然言語処理して,分類したりタグ付けしたりする試みが色々なところで行われていますが,ツイートはあまりに短く非整形であるために,ステート・オブ・アートの機械学習の手法を使用してもあまり良い結果が出ないことが多くあります.
一方,Elasticsearchは容易にスケールアウトが可能でRestfullに使用できるオープンソース全文検索エンジンです.Pythonクライアントも充実しており容易に使用することができます.本セッションでは,Elasticsearchの特徴を活かし,機械学習を使用せずとも大量のツイートをリアルタイムに関連性文書判定することができる仕組みをTornadoベースで作成したプログラムを通して解説します.
概要
### はじめに
- 文章を何らか分析にかけて様々なインサイトを得たいという試みは各所で行われています.しかし,ツイートはあまりに短く非整形であるために,ステート・オブ・アートの機械学習の手法を使用してもあまり良い成果がでないことが多いです.本セッションでは「全文検索をうまく利用して全自動でツイートの分類/判定をする」という部分を中心にお話を行いますが,tornadoとelasticsearchの検索スコアリングの機能を使用して機械学習を使わなくても,関連性の強いドキュメントに判定させることができるシステムを実際の利用事例と合わせて解説します.具体的な問題領域としては,テレビ番組に関するツイートを,番組ごとに分類・判定するということを考えています.
### 全文検索を使用した関連文書判定
具体的な問題として,ツイッターのツイートがどのテレビ番組についてつぶやかれたものかを判定するタスクを考えます.このとき利用できる情報は,
- テレビ番組名,番組要約,出演者,放送時間等の記述があるEPG(番組表)
となります.これを実現するには,このEPGに出てくる番組名,要約,出演者等の単語をキーとする転置索引をつくります.この転置索引を利用すれば,個々のツイートがどの番組に関連が高いか,ということが原理的にわかります.![][1]
[1]: https://bitbucket.org/bakfoo/pub/wiki/pycon2015kadowaki/bhantei0.png
#### 日本語の問題
日本語文書には固有の問題があります.オープンソースの辞書を利用した形態素解析などの通り一遍の処理をするだけでは,文書分類・判定の精度が悪いのです.これを解決するための整形方法,過度の単語分割を避ける手法,重要語は特別な重みをつける方法なども講演で紹介します.
#### Elasticsearchを使用する理由
ElasticsearchはRestfullに使用することができ,Pythonのライブラリを使用すれば簡単にその機能に触れることができます.Ngram方式やプラグインのインストールなどによりkuromojiやMecabを使用することも可能で,それぞれの検索には検索結果にとなるスコアが付与される仕組みとなっています.このスコアシステムを使用することで判定の閾値を定めることができ,今回の事例においてもその特性を利用しています.
また,先にも述べているようにRestfullに使用できるAPI群は非同期アプリケーションによって大量のデータ解析にも十分利用可能なパフォーマンスを提供します.もちろん,情報量によってスケールアウトが必要なケースがありますが,難しい設定を必要とせず,ほとんどの機能をアウトオブボックスに利用することができます.
本セッションでは,
- PythonからElasticsearchを使用する
- tornadoによる非同期アプリケーションからElasticsearchで検索した結果を受け取る
という点のデモを中心として機械学習を使用しない関連文書判定の事例について紹介していきます.