17
Python の自動文章生成ライブラリ markovchains とその活用方法 (Twitter Bot) について 株式会社オーシーシー 小野裕作 1

Javakuche yono

  • Upload
    yono05

  • View
    1.009

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Javakuche yono

Python の自動文章生成ライブラリmarkovchains とその活用方法(Twitter Bot) について

株式会社オーシーシー 小野裕作

1

Page 2: Javakuche yono

自己紹介

• 氏名: 小野裕作• 株式会社オーシーシー• 琉大情報工学科出身• github: http://github.com/yono• 主に python 使ってます

2

Page 3: Javakuche yono

Twitter Bot とは?

• Twitter: ユーザーが「つぶやき」を投稿する Web サービスhttp://twitter.com/yono

• Twitter 上で自動的に発言をするプログラム

• 人間の発言を模倣してコミュニケーションを図るタイプ→ 人工無脳

• 自発的に話しかけたり、呼び掛けに応じたり

• すどりが有名http://twitter.com/sudori

3

Page 4: Javakuche yono

会話文の作り方

• Twitter やチャットなどから収集したログを使う

• 開発者自身が手作業で文章を用意する

• マルコフ連鎖を利用して文を生成する

4

→ 本発表でのテーマ

Page 5: Javakuche yono

マルコフ連鎖で文章生成

• 単語を順次発生させる• 次に選択される単語は現在の単語を基に決定される

5

今日

これから現在の単語

Page 6: Javakuche yono

マルコフ連鎖で文章生成

• 単語を順次発生させる• 次に選択される単語は現在の単語を基に決定される

6

今日

これから

とても現在の単語

Page 7: Javakuche yono

マルコフ連鎖で文章生成

• 単語を順次発生させる• 次に選択される単語は現在の単語を基に決定される

7

今日

はとても

暑い現在の単語

Page 8: Javakuche yono

N階マルコフ連鎖

• 単語を順次発生させる• 次に選択される単語は現在の単語を含む N - 1 個の単語を基に決定される

8

今日

これから

とても現在の単語

Page 9: Javakuche yono

ライブラリを開発

• マルコフ連鎖による文章生成はとてもポピュラー• N階マルコフ連鎖に対応させようとすると途端に面倒• 日本語文を取り扱う際にも面倒な部分が多々

→ python-markovchains の開発

9

Page 10: Javakuche yono

markovchains の機能一覧

1.読み込んだ文章を基に、文章を生成する2.読み込んだ文章を分解してデータベースに保存する3.データベースに保存した情報を基に文章を生成する→ PostgreSQL, MySQL に対応4.N階マルコフ連鎖に対応

10

Page 11: Javakuche yono

markovchains の機能について(1)

• 読み込んだ文章を基に、文章を生成する

11

from markovchains import markovchains # library を import

m = markovchains.MarkovChains() # instance 生成

text = u”””親譲(おやゆず)りの無鉄砲(むてっぽう)で

小供の時から損ばかりしている。

”””m.analyze_sentence(text) # 文章解析

print m.make_sentence() # 文章生成

Page 12: Javakuche yono

markovchains の機能について(2)

• 読み込んだ文章を分解してデータベースに保存する

12

from markovchains import markovchains # library を import

m = markovchains.MarkovChains() # instance 生成

text = u”””親譲(おやゆず)りの無鉄砲(むてっぽう)で

小供の時から損ばかりしている。

”””m.analyze_sentence(text) # 文章解析

m.load_db(‘postgresql’, ‘markov’) # DBMS, DB名を指定

m.db.register_data() # DB に保存

Page 13: Javakuche yono

markovchains の機能について(3)

• データベースに保存した情報を基に文章を生成する

13

from markovchains import markovchains # library を import

m = markovchains.MarkovChains() # instance 生成

m.load_db(‘postgresql’, ‘markov’) # DBMS, DB名を指定

m.db.make_sentence() # 文章生成

Page 14: Javakuche yono

markovchains の機能について(4)

• N階マルコフ連鎖に対応

14

from markovchains import markovchains # library を import

m = markovchains.MarkovChains() # デフォルトだと3階

m = markovchains.MarkovChains(order_num=2) # 2階マルコフ連鎖

Page 15: Javakuche yono

実行例

15

• 2階と3階マルコフ連鎖の違い

Page 16: Javakuche yono

markovchains の活用例

• Twitter Bot を作成• yonobot (http://twitter.com/yonobot)• 特定のユーザの発言を定期的にDBに保存• Reply に対して返事をする

16

Page 17: Javakuche yono

まとめ• マルコフ連鎖で文章生成• ライブラリがあるといろいろと便利• Twitter Bot が簡単に実装できる

17

github でソース公開してますmarkovchainshttp://github.com/yono/python-markovchains

yonobothttp://github.com/yono/py-yonobot