Doc2VecサンプルのDockerfile

まだ検証すら始めていませんが、Doc2Vecを利用してなにかサービスを立ち上げられないかと考えています。かなり前からある技術なので参考になるサイトが複数あるのですが、gensimというライブラリのバージョンが違ったり、形態素解析ツールのバージョンが違ったりと環境構築が大変だったのでDockerfileにしてみました。dockerについてはまともに入門したこともないので、色々ツッコミどころがあると思いますが、徐々に(長い長い目で)改善していく予定です。(例えば1コンテナなのにdocker-compose使っているとか。)また、サンプルプログラムはただの動作確認程度です。(一応独自データで学習させることもできますが、ちょい不便)
そもそもDoc2Vecとは何か、何ができるのかはもうちょっと勉強してから記事にしようと思います。文章をベクトル化して類似度を見る方法なので考え方は顔認識と近いはず…



このコンテナで出来ること

形態素解析ツールにはJUMAN++とMecabを使う場合があるようなのでそれぞれ作成しています。rondhuit社が公開しているlivedoorニュースのクリエイティブコモンズライセンス記事を学習し、推論することができます。詳細はリポジトリ内のそれぞれのreadmeを参照してください。ただ、もともとGCE無料枠で運用するつもりだったのですが、JUMAN++を導入したコンテナサイズは17GBになってしまったので、全体30GBのインスタンスでは厳しいかなと思いJUMAN++側は本当にただ動かすだけになります。buildもかなり時間がかかります。(うちのネットが遅すぎるのもありますが…)
Mecabを導入したほうは5GB程度なので許容範囲かと思います。サンプルプログラムで学習もできるので、同梱しているDjangoでGCE無料枠でプロトタイプ作成も可能だと思います。

Doc2Vecが流行った時代との差分

Doc2Vecを検索すると2017年ごろの記事が良くヒットするし非常に参考になるのですが、ライブラリの更新等で2019年5月ではその通りサンプルが動かない場合があります。躓きポイントとしては下記でした。

gensimのインターフェースが更新されている

gensimのインターフェースについて、良く記事が見つかる2017年ごろはgensim.models.Doc2Vec.trainでの訓練時にtotal_examplesとepochsは指定不要だったのですが、gensim==3.7.2では必要になったようです。 また、gensim.models.Doc2Vec.docvecs.most_similarで類似度が高い文書を検索する際に、以前はファイルパス指定だったようですが、現在は分かち書きした文章が必要です(ひょっとしたらオプションで指定可能かもしれませんが…)。推論が直観的でないのでラップする関数を作成したほうが良いかもしれません。

JUMAN++にはJUMANも必要

JUMAN++について、これはRNNを用いた形態素解析器みたいです。名前に++と付いているので当然と言えば当然ですが、あらかじめJUMANをインストールしておく必要があります。

KNPのバージョンが更新されているのでwgetでこける

KNPとは「日本語文の構文・格・照応解析を行うシステム」とのことです。詳細は公式を参照してください。こちらが更新されていてNotFoundになっていました。最新を検索してwgetするコマンドを生成する方法調べないと将来同じ事象になるな…

初めてDockerfileを作ってみて感じましたが、使いやすいプログラムやDockerfileを公開している人ってすごいですね。私の知識、経験ではただ動作確認するサンプルを作るだけでも大変でした…(自分で使いにくいと感じるなら公開するなと思いつつ、自分しか使わないだろうしアウトプットの練習になるから良いという悪魔に負けました。天使と悪魔のパワーバランスが特殊)
職場でもdocker使えるようにまともなものを作って布教していかなければ…


カテゴリー:Doc2Vec,docker,python,エラー対処,自然言語処理

Output不足なエンジニア

統計が好きになれず、機械学習やったら必然的に統計が必要になるだろうと思ったら想像以上に機械学習にハマる。数学は芸術なので商売にするつもりはないけど、DeepLearningは数学じゃないし商売にしたいと思っているところ。画像処理がメイン。