pythonで機械学習案件

pythonを使った機械学習で極性判定器を作成する案件をやりました。決してプロフェッショナルではありませんが、「機械学習」とpythonは近い距離にあると思うので、実際の内容と「機械学習」に対する現場での温度感の参考になればと思います。

案件を見つけたきっかけ

自分の趣味として機械学習に興味があったため、ライブラリや書籍の解説を元に機械学習の勉強をしていました。普段の業務ではpythonは社内システム的に利用するだけだったので、機械学習に応用する機会はありませんでした。

サンプルを使った実装である程度分類システムなどを作ったりできるまでになりましたが、その後でネタになりそうなものが見つからず悩んでいました。実践での機械学習経験はほぼ無に等しかったので、フリーで機械学習エンジニアを募集している案件を探し、自分のスキルを理解した上で相談しつつ作業を進められることを条件に何件か提案したのがきっかけです。

案件の簡単な内容

業務内容は、先方のサービスに関するツイートのログから意見抽出や極性判定を行うことでした。
先方からいただいたデータは、サービスや関連するキーワードについて検索しただけのテキストデータでした。

まず、ツイートに頻出するURLやハッシュタグなどの構造データのパターンを分析し、データの整形を行いました。
ツイッターAPIから取得したデータであればもう少しシンプルに実装できたかもしれませんが、単純なテキストデータだったので、正規表現などを利用してきれいなテキストデータになるようにしました。

加えて、誤字や崩れた表現をある程度分析しやすい形にしようと思い、条件付確率場に基づくモデルを構築して若干の修正を加えました。この辺りは先方からの依頼があった部分ではないので、モデル構築には既存のエンジンを使用して自分の納得のいくところまでの整形でした。

次に、整形したデータの構文解析を行いました。日本語のデータなので若干扱いにくいですが、日本語用の形態素解析、係り受け解析器はpythonラッパーも整備されているのでそちらを利用しました。
意見抽出に関しては、係り受け解析で品詞を元に大雑把に獲得できました。表現の種類がロングテールすぎるので、こちらは意見とは少しずれるものも含めたままで完了としました。

極性判定、つまりサービスに対してポジティブなことを言っているか、ネガティブなことを言っているかの判定には語彙情報が必要になりました。先方からいくつかキーワード指定を頂いていましたが、表現のパターンは多岐にわたり、人手ではとてもカバーしきれないと思ったので、自前でツイッターログを集め、類似表現を元に極性判定に有効になりそうな語彙を集めました。

集めた語彙を含むツイートを含むかどうかで極性のタグ付けをしました。一つ一つ手作業で行うのは非常に時間が必要になってしまうので、キーワードとその派生表現があるかで半自動的にタグ付けを行い、後から人手で修正を加えるという方法で極性判定を行いました。

ここまでで先方にデータを確認していただき、了承を得たところで、極性判定器の構築に取り掛かりました。目的は、今回のデータとは別に得られたツイート、あるいはその他のレビュー文章において、サービスに対して良い印象を持っているかよくない印象を持っているかを自動的に判定できるようになることです。
完成したデータを使って、今回はロジスティック回帰による多値分類問題としてモデルを作成しました。まず、はじめにいただいたデータを使った交差検定でパラメータの調整を行いました。次に、いただいたツイートログに近いログを集め、未知のデータの極性判定ができるシステムを作成しました。

ノイズを除去しきることはできませんでしたが、評判分析の参考にしたいとの目的だったのでこちらで構築したモデルの精度で満足していただき、この案件は完了となりました。

案件の環境や身についたこと案件の感想

ビデオ通話で数回打ち合わせを行うだけで、在宅での作業でした。先方はpythonには理解があるが、機械学習の知識がなく、依頼先も分からなかったということでお互いに分からない点を確認しながら進めるという案件になりました。

これまでは整形されたデータか、ほとんど手を加える必要がないデータを使ったため、生のデータを対象とした分析は想像以上に地味な作業となりました。今回はツイートデータを対象にしましたが、日常的に用いられる日本語のデータを扱う上でのノウハウを得られたと思います。

機械学習という言葉が流行った背景もありますが、「機械学習を試してみたいがよく分からない」という企業は多く存在するようです。機械学習のことを知らずにとにかくやってくれというのが最初の依頼だったので、どんなデータがあってそこからどんな結果を得たいのかを明確にする作業が必要な場合があることには注意が必要だと感じました。

自然言語を使ったデータを扱う上ではpythonは非常に向いていて、ライブラリも充実しているので言語処理の知識があれば応用できる案件はたくさんありそうです。