Slide 1

Slide 1 text

マルコフ連鎖を利⽤した ツイート⽣成スクリプトを作った

Slide 2

Slide 2 text

もくじ 1. つくったものの概要 2. 形態素解析とマルコフ連鎖 3. 実際の対象データの情報 4. 実験結果と⽐較 5. まとめ

Slide 3

Slide 3 text

1-1 なにをつくったか • ⾃⾝のツイートから⽂字列を⽣成しツイートする ”なおすけくんbot” • ”しゅうまいくん”の⾃分のツイート版みたいな • いい感じにツイートを分析して、 いい感じの⽇本語の⽂章をツイート • ツイート分析に形態素解析、 ツイート⽣成にマルコフ連鎖を利⽤

Slide 4

Slide 4 text

1-2 ツイート解析の概要 ⾃分の過去ツイート達 MeCabによる 形態素解析 なおすけ辞書の⽣成

Slide 5

Slide 5 text

1-3 ツイート⽣成の概要 マルコフ連鎖による ⽂章⽣成 なおすけ辞書 ツイート

Slide 6

Slide 6 text

2-1 形態素解析の概要 • 形態素解析とは • ⼊⼒⽂を形態素の並びに分解し、 品詞の同定や原形・活⽤形の判定を⾏うこと • 形態素: 意味を持つ最⼩の⾔語単位 お待ち / し / て / おり / ます / 。 • 著名な形態素解析器 • JUMAN : 京都⼤ ⿊橋研が開発 • 茶筌 (ChaSen) : 奈良先端⼤ 松本研が開発 • 和布蕪 (MeCab) : 詳細は後述 • KAKASI : 漢字→ひらがな変換プログラム 分かち書き機能がある

Slide 7

Slide 7 text

2-2 形態素解析器 MeCab • 構⽂解析器 MeCabの概要 • Yet Another Part-of-Speech and Morphological Analyzer • ⽇本語を対象とした形態素解析器 • 京都⼤とNTTコミュニケーションが共同研究で開発 • 過去の形態素解析器と⽐較してかなり⾼性能 • 条件付き確率場(CRF)に基づく⾼い解析精度 • ChaSen や KAKASI に⽐べ⾼速 • 利⽤場所 • Mac OS X の Spotlight(OSの検索機能) • iOS の⽇本語⼊⼒エンジン • Mac OS Xの⽇本語⼊⼒エンジン (?)

Slide 8

Slide 8 text

2-3 マルコフ連鎖 • マルコフ過程 • マルコフ性をもつ確率過程 • 未来の挙動が現在の状態だけで決定する確率過程 ↑こんなの↑ • マルコフ連鎖 • マルコフ過程のうち、取りうる状態が離散的なもの • 割と重要な概念らしい • ⾳声認識とかGoogleのPageRankで利⽤

Slide 9

Slide 9 text

3-1 実装関係 • ⾔語: Ruby 2.4 • 形態素解析: MeCab • 辞書: mecab-ipadic-Neologd (最新語が多く含まれる辞書) • Rubyライブラリ • natto (MeCabのRuby⽤のバインディング) • twitter (Twitter関連のいろいろ) • Kusabi:マルコフ連鎖によるテキストジェネレータ (使ってない) • ツイートログ • Twilog.org からダウンロードできるCSV “ID”, “ツイート⽇時”, “ツイート⽂⾯” • この形式さえあれば他⼈の辞書の⽣成も可能 https://github.com/hanasuke/advmath

Slide 10

Slide 10 text

3-2 Tweet群の前処理 • filter.rb • ⾃⾝のつぶやきでないものを除外 • RT • shindanmaker, togetterなどのボタンからのツイート系 • swarmapp, はてブなどのアプリ連携のツイート系 • 邪魔な⽂字列を排除 • ”@ユーザ名” • http://~~のURL • “#なんとか”のようなハッシュタグ

Slide 11

Slide 11 text

3-3 ツイートの分析となおすけ辞書の作成 • ツイート⽂字列を形態素解析し、配列に格納 私の名前は中野です。→ [“私”, “の”, “名前”, ”は”, ”中野”, ”で す”, ”。”] • マルコフ連鎖のためのダミー⽂字列を挿⼊ [“_BEGIN_”, “私”, “の”, “名前”, ”は”, ”中野”, ”です”, ”。”, “_END_”] • N階マルコフモデルを作成する • N個のネストしたハッシュを作成 • ハッシュが存在すれば、要素としての配列に挿⼊ hash[“_BEGIN_”][“私”] = [‘の’, ‘は’, ‘が’, ‘と’, ‘で’,...] hash[“私”][“の”] = [‘名前’, ‘好き’, ‘嫁’, ‘名前’, ‘彼⼥’,...] : :

Slide 12

Slide 12 text

3-4 なおすけ辞書を基としたツイート機能 • ソースコードを⾒せながら説明します

Slide 13

Slide 13 text

4-1 元ツイートのデータ 期間 2012/04/20〜2017.02.01 (1749⽇) ツイート数 約21万 総⽂字数 約398.5万 約18⽂字/ツイート 2012年 2017年

Slide 14

Slide 14 text

4-2 Botの紹介 • てすとくん @naosuke_test • #naosuke_markov{N}というハッシュタグをつけて、 N階の連鎖によるツイートをツイート • #naosuke_markov3については途中までバグってた • http://twilog.org/naosuke_test をみながらこの先解説をします

Slide 15

Slide 15 text

4-3 4階マルコフモデルによるツイート例 • http://twilog.org/naosuke_test/hashtags-naosuke_markov4

Slide 16

Slide 16 text

4-4 3階マルコフモデルによるツイート例 • http://twilog.org/naosuke_test/hashtags-naosuke_markov3

Slide 17

Slide 17 text

5-1 まとめ • ⾃然⾔語処理とマルコフ連鎖 • 形態素解析とマルコフ連鎖によるツイートbotの作成 • 形態素解析器としてMeCabを利⽤ • 辞書として、最新語が多く含まれたものを採⽤ • ⾼階マルコフモデルによる⽣成⽂章の違い • 2階、3階、4階、5階マルコフ連鎖で⽂章を⽣成 • 2階よりも3階以上のほうが多少マシな⽂章が⽣成されている • 4階以上による差異はあまりない ⇒1ツイートに含まれる形態素が少なすぎるせい? • マイクロブログ的な使い⽅をしてれば、差異が出るのかも

Slide 18

Slide 18 text

5-2 今後の課題と感想 • 今後の課題 • リプライ機能 →リプライの中の重要なキーワードから⽣成する感じ? • 機械学習/ニューラルネットワークによるBotの作成 →Hubotとの会話機能とか • 感想 • 最近は⾃然⾔語処理のライブラリが豊富で⼿軽に遊べる • “書き⾔葉”ではなく“話し⾔葉”は解析が難しい ⇒安藤研の⼈たち頑張って欲しい • より⾃然に⾒える⽂章の作成は難しい • GoogleとかMicrosoft、Appleの⾔語処理系やばい

Slide 19

Slide 19 text

参考⽂献 • MeCab: Yet Another Part-of-Speech and Morphological Analyzer http://taku910.github.io/mecab/ • マルコフ連鎖の基本とコルモゴロフ⽅程式 http://mathtrain.jp/markovchain • buruzaemon/natto: A Tasty Ruby Binding with MeCab https://github.com/buruzaemon/natto • takuti/kusari: Japanese random sentence generator based on Markov chain https://github.com/takuti/kusari