インターン LIBLINEARを用いたツイートの分類およびマルコフ連鎖

東京都立産業技術高等専門学校 ものづくり工学科 電子情報工学コース

実習先 Shannon Lab 株式会社

1.はじめに
 今回、自分はShannon Lab 株式会社にて10日間のインターンシップを行った。
Shannon Lab 株式会社は人工知能を開発するベンチャー企業であり、他にもデータ解析・自然言語処理を得意技術としている。
また、学生のインターンシップの採用に積極的なため、実習に取り組むにあたって熱心に対応していただいた。
私が行った実習はTwitterから特定の属性からのツイートを収集し、SVMを用いることによってそれらしいツイートであるかどうかを確かめ、自然言語処理マルコフ連鎖による文章生成するという内容である。
実習内容をこのように定めた理由は、マルコフ連鎖を用いることで機械が人間らしい文章を生成できることに大きな魅力を感じていたためである。今回は去年のインターンシップの引き継ぎとしてSVM(Support Vector Machine)による属性の分類も合わせて行わせていただいた。
SVMは教師あり学習(教師データを元に学習する)という手法を用い分類を行うものである。
また、マルコフ連鎖は次の状態が現在の状態のみで求められ、過去の状態とは関係無いような確率過程である。
ただし、マルコフ連鎖を追求すると奥が深く、高度な技術が必要となるため今回の実習の目標を「自動的にツイートを収集し、それらの形態素からマルコフ連鎖して、特定の属性の特徴となる単語を含むツイートを生成する」こととした。
2.実習内容
 実習作業の行程をおおまかに分けると以下の2-1~2-4までの4つになる。
2-1.ツイートの収集
 ツイートの収集はPythonのTwitter APIライブラリである「Tweepy」を使用した。これを用いるとTwitterからツイートを検索できるため、特定の属性の人がよく使うであろう単語を検索し、収集した。この際、検索に使用した単語は必然的に出現回数が多くなってしまうため、データベースに保存しないようにするなどの工夫が必要である。
2-2.ツイートに含まれる文章の形態素解析
 ツイートに含まれる文章の形態素解析は形態素解析エンジンである「MeCab」を使用した。ただし、MeCab標準の辞書では略語やネットスラングが正しく解析されないため、ユーザー辞書を作成し、それを解析に用いた。
 今回ユーザー辞書として用いた単語は「Wikipedia」、「はてなブックマーク」、「ニコニコ大百科」から取得したもので、これらを固有名詞として登録した。こうすることで固有名詞を正しく解析することができる。ただし、今回は対応することができなかったが、本来、助詞や助動詞として用いられるべき単語まで固有名詞として登録されてしまうため、既に登録されている単語はユーザー辞書に含めないなどの工夫が必要である。
2-3.形態素の属性の分類
 形態素の属性の分類は線形予測の機械学習ライブラリである「LIBLINEAR」を使用した。
 去年のインターンシップでは「LIBSVM」を用いてツイートから男女の分類を行っていたが、今年はそれより精度が高く、速いという理由からLIBLINEARを用いることとした。
2-4.マルコフ連鎖を用いた特定の属性らしいツイートの生成
 マルコフ連鎖を用いた特定の属性らしいツイートの生成は前述の2-1~2-3の行程から得たデータとプログラムを組み合わせて行う。
 まず、特定の属性を表すキーワードのうち対照的なものを2つ1組として用意する。それぞれのキーワードでTwitterからツイートを検索し、それを形態素に分割して形態素の出現回数を調べる。これと別に、データベースからそれぞれの属性に分類された形態素があるかどうかを調べ、ある場合はその出現回数を教師データとして用いることにした。このときに、その2つの検索語に関係の無い単語を教師データに含めると分類の精度が上がるとのアドバイスをいただいたため、そのように実装した。実際に検索に用いた単語の対は「ダンス」と「シャーペン」、「牛丼」と「靴下」、「ポケモン」と「デスメタル」、「カレー」と「アイアンマン」、「進捗」と「中目黒」である。
 これらを用いてLIBLINEARで実際にその属性らしいツイートであると判別できたツイートを用いてマルコフ連鎖を行った。
3.結果と考察
 今回の実習の結果、実際に特定の属性らしいマルコフ連鎖で文章を生成することができ、これを定期的に行いツイートすることでTwitterのbotを作成することができた。
 ただし、実際に生成された文章は意味の通るものではないものが多く、改善が必要である。
この原因としてまず前述のとおりMeCab標準の辞書に登録されている助詞や助動詞が固有名詞として登録されてしまったことである。これはユーザー辞書の作成の時点でプログラムを改編する必要があった。
次に動詞や助詞が文の先頭になってしまうことが多いことである。これはマルコフ連鎖のアルゴリズムを見直す必要がある。また、MeCabで品詞を解析することで先頭の単語が動詞などでないかを確認するなどの対策法もあるだろう。
最後に「�」のような文字化けしたツイート
を収集してきた際にそれを取り除く方法が無いということである。これは生成されるツイートに文字化けした文字が多いことからプログラム中で何か変換されてしまっている可能性もあるが確認することができなかった。
今回、検索に用いた単語の中で特徴がはっきり出たのは「靴下」であった。この単語で検索すると女性のツイートが多く収集でき、生成される文章も女性らしい物になることが分かった。これを用いれば男女の分類などに応用できるかもしれない。
4.まとめ
 今回自分が実装したマルコフ連鎖で生成できたツイートは考察で述べたようにまだまだ改善の余地があると考えられる。
 しかし、そのためにマルコフ連鎖の原理など基本的な部分の勉強をしなければならないとも感じた。
(a)インターンシップに参加した感想
 10日間という短い期間の中でSVMによる分類からマルコフ連鎖まで幅広い分野の実習をさせていただいたが、やはり分からないことを自分で調べることが多かった。今回のインターンシップを通して自分で検索して解決する能力が身についたと思う。
(b)後輩へのアドバイス
 Shannon Labでのインターンシップはある意味、今まで培ってきた自分の力がどれだけ実際の仕事で通用するかを試すことができる。職場で働いているかのような適度な緊張感があり、意見の交換も盛んにできる。高専から就職を考えているならここでのインターンシップで社会人に必要な力が身につくと思う。

Comments are closed.