たいさブログ

taisa's engineer blog

機械学習

「Chainerで学習した対話用のボットSlackで使用Twitterから学習データを取得してファインチューニング」を試してみる

投稿日:

Pocket

本記事は以下の勉強会用に作成した記事で現時点では最後まで動作確認できていない箇所があるのでご注意ください。問題解決したら更新します。

AIPy (アイパイ) ハンズオン #4 (2018/09/20 19:30〜)

この勉強会について しばらくは機械学習に特化した勉強会になります。仕事で機械学習などを活用したいけど何からはじめればよいか分からないような方向けのハンズオン形式の勉強会です。こ の会はみんなで集まって意見を交換したり協力したりしながら一気に機械学習に関する知見を深めていこうというのが主な目的です。既に機械学習に慣れ親しんでいる方も大 …

題材

こちらにある内容をやってみる。ただ記事が古い、ソースが更新されている、ドキュメントとの差異があるということから実践するのが大変だったのでその辺も踏まえて書いていく。

Chainerで学習した対話用のボットをSlackで使用+Twitterから学習データを取得してファインチューニング – Qiita

ChainerでSlack用のbot作成!! 注意:chainer 1.5.1以降のバージョンで動作を試みるとSegmentation faultのバグが出ます ` pip install chainer==”1.5.1…

以下の記事も同様に試した経緯が書いてあって参考になるけど、ここからもアップデートされている部分が多かった。

Chainer-Slack-Twitter-Dialogueを動かすまでに試行錯誤したメモ

Chainerとは

https://chainer.org/

  • ニューラルネットワークの計算および学習を行うためのオープンソースソフトウェアライブラリ
  • 複雑なニューラルネットワークの構築を必要とする深層学習で主に用いられる
  • Preferred Networks の主導で開発が進められており、Preferred Networks が日本の機械学習系のベンチャー企業であることから、日本国内を中心として利用が広がっている。

出典:https://ja.wikipedia.org/wiki/Chainer

環境構築

上記の通り、本家ソースは微妙に更新されていたりしてそのままでは動かないところが多いので今回のハンズオン用に本体からフォークしたソースを利用する。

pyenv install 3.5.0に失敗したら・・・

以下の記事が参考になる

Common build problems
MacでPython 3.5.0インストールに失敗したら

トレーニングデータを準備する

wikipedia から word2vec モデルを作成する

word2vec って何?

word2vec は、大量のテキストデータを解析し、各単語の意味をベクトル表現化する手法です。単語をベクトル化することで、

単語同士の意味の近さを計算
単語同士の意味を足したり引いたり
ということが可能になります。

例えば、word2vecにより『松本人志』、『浜田雅功』、『ボケ』、『ツッコミ』という言葉を以下のようにベクトル化できたりします。

  • 松本人志:(0.4,0.1,0.9,0.4)
  • 浜田雅功:(0.5,0.2,0.3,0.4)
  • ボケ:(0.1,0.0,0.8,0.2)
  • ツッコミ:(0.2,0.1,0.2,0.3)

このベクトル表現から、

  • 『松本人志』、『浜田雅功』の距離を計算すると、結構近いところにありそうだ。なので二つの意味は近いのでは?
  • 『松本人志』 – 『ボケ』 + 『ツッコミ』 ≒ 『浜田雅功』 になる。

といった考察・計算ができます。

引用:word2vec(Skip-Gram Model)の仕組みを恐らく日本一簡潔にまとめてみたつもり

word2vec モデルを作成する

以下のリンクから jawiki-latest-all-titles-in-ns0.gz をダウンロードして解凍する
https://dumps.wikimedia.org/jawiki/latest/

jawiki-latest-all-titles-in-ns0 を word2vec ディレクトリに配置して、まずはデータ数を減らす為に以下を実行する

jawiki-latest-random-titles-in-ns0 ファイルをプロジェクト直下の Data ディレクトリに移動して以下を実行しモデルを作成する

以下の2つのファイルができあがる

  • word2vec_chainer.model
  • word2vec.model

雑談対話コーパスからデータを作成する

以下のURLから雑談対話コーパスデータをダウンロードする

雑談対話コーパス

解凍したデータをそのままプロジェクト直下の Data ディレクトリに配置し以下のコマンドを実行する

実行が完了すると util ディレクトリ直下に以下のファイルができあがる

  • player_1.txt
  • player_2.txt(player_2.txt の後ろに半角スペースがあるので削除する)

mecab で日本語を分解する

以下のURLを参考に Mecab のセットアップをする

Python3 から Mecab を使う

以下のコマンドでそれぞれ分解する(自分の場合はパス指定が「/usr/local/lib/mecab/dic/ipadic」にする必要があった。)

ChainerDialogue モデルを作成する

プロジェクト直下の train.py を実行すると(うまくいけば)以下のモデルファイルができあがるのでプロジェクト直下の model ディレクトリに移動する。モデル作成部分は元のソースにはないので、こちらのソース からEncoderDecoderModelForward.pyを作成しtrain.pyから呼び出して実行している。

  • ChainerDialogue.spec
  • ChainerDialogue.srcvocab
  • ChainerDialogue.trgvocab
  • ChainerDialogue.weights

うまくいかないと以下のエラーで落ちる

Slackボットを準備する

データの準備ができたので Slack ボットが応答する準備をする。Slack の設定をした上でディレクトリ配下のenviroment_slack.ymlにボットの情報を入れる

実行してみる

Slack 上で以下のコマンドを実行した上で chainer に話しかけてみる

うまくいっていれば応答があるはず?

以下の記事を見てみると解説が書いてあるので分かる人は参考になるかも

PyCon 2016で発表したChat Botをコードベースから解説(Chainerを利用した雑談応答編)

Pocket

-機械学習
-, ,

執筆者:

関連記事

パーセプトロン – 機械学習におけるアルゴリズム

機械学習におけるアルゴリズムの一つであるパーセプトロンについて、仕事ではじめる機械学習を元に学習していく。 そもそもどのアルゴリズムを選ぶべきか 機械学習にはどんな種類があるか 分類(Classifi …

機械学習におけるアルゴリズム

前回のパーセプトロンに引き続きこの勉強会用に仕事ではじめる機械学習を元に機械学習におけるアルゴリズムをまとめる。 AIPy (アイパイ) ハンズオン #3 (2018/07/19 19:30〜) この …

「仕事ではじめる機械学習」の「映画の推薦システムをつくる」を実践してみる

「仕事ではじめる機械学習」の映画の推薦システムをつくるを実践してみる 本書のソースコートは以下にあがっている。本記事はchap07が対象。 https://github.com/oreilly-jap …

「AIPyハンズオン#1」開催レポート

第1回AIPyハンズオン勉強会を開催したのでその開催レポート AIPy (アイパイ) ハンズオン #1 (2018/04/12 19:30〜) この勉強会について 仕事で機械学習などを活用したいけど何 …