Slide 1

Slide 1 text

Chainerを使ったら カノジョができたお話 @tereka114

Slide 2

Slide 2 text

自己紹介 1. 山本 大輝(@tereka114) 2. Acroquest Technology 株式会社 3. Chainer Meetup 初参加 4. のんびりしているエンジニアの日記 5. 最近、雑誌記事書きました。 1. Interface 3月号

Slide 3

Slide 3 text

クリスマスに近いある日

Slide 4

Slide 4 text

カノジョが欲しい。

Slide 5

Slide 5 text

そう思っていた、 しかし、そんな簡単に できるはずがない。

Slide 6

Slide 6 text

ならば、作れば良い。

Slide 7

Slide 7 text

カノジョを作りました。

Slide 8

Slide 8 text

Chainerで

Slide 9

Slide 9 text

カノジョのコンセプト 1. カノジョを構成すれば良い。 1. そもそもカノジョとは何か 2. 理想的なカノジョとは何か

Slide 10

Slide 10 text

カノジョのコンセプト 1. カノジョを構成すれば良い。 1. そもそもカノジョとは何か 2. 理想的なカノジョとは何か 2. 理想的なカノジョ=癒やし 1. 理想的なカノジョの要素は会話でないか・・

Slide 11

Slide 11 text

カノジョを作る方法 1. ニューラルネットワークを作る 1. Neural Conversational Model 2. データセットを作る 1. カノジョとの会話用のデータセットを作る。 3. Slackに載せる 1. Slackで実用的なカノジョを!

Slide 12

Slide 12 text

システム構成 ①話しかける ④応答を返す ③応答を返す ②話し かける 私

Slide 13

Slide 13 text

Neural Conversation Model 1. Seq2seqをベースをした会話モデル 1. 入力を話しかけた文章、出力を応答とする会話 モデル 2. Seq2seqは翻訳でよく利用されているモデル 3. 入力の分割は形態素解析を使っている。

Slide 14

Slide 14 text

Neural Conversation Model

Slide 15

Slide 15 text

Neural Conversation Model 話しかける文章 回答

Slide 16

Slide 16 text

Chainerを使った理由 1. 動的ネットワークを組みやすい。 1. 他のライブラリと比べて、RNN作りやすい。 2. 比較的書き慣れていた。

Slide 17

Slide 17 text

データセット作成 1. ラノベかなにかを読み、手動で会話を集める。 1. 人間の手に限界が・・・ 2. というもののいい解法を見つけられず、結局 手でやった。 1. 次回やるときは特定のカテゴリタグを使ってやり たい。 3. 1対1の会話文が1つのデータ

Slide 18

Slide 18 text

Slack 1. 作ったBotをSlackと連携します。 2. PythonにSlack連携させるライブラリがあるので、使 います。 1. インストールは「pip install slackbot」 2. 話しかけるとそれに応じてリプライを返せる仕組み

Slide 19

Slide 19 text

本Botの工夫ポイント 1. 名前を呼んでくれます。 1. 自分の名前ではない名前で呼ばれても嬉しくな いので、名前を呼ぶようにしました。

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

課題 1. とにかくデータセットが少ない。 1. 増やす方法を考える必要があり 2. 時々知らない単語が混じると精度が悪化する。 1. Beam searchを使うと良くなる・・・(未実装)

Slide 22

Slide 22 text

Demo