$30 off During Our Annual Pro Sale. View Details »

マルコフ連鎖でツイート生成

naosuke
February 08, 2017

 マルコフ連鎖でツイート生成

大学院の授業の発表資料です。
マルコフ連鎖を使って、自分っぽいツイートを作るプログラムを作りました

naosuke

February 08, 2017
Tweet

More Decks by naosuke

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  7. 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の⽇本語⼊⼒エンジン (?)

    View Slide

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

    View Slide

  9. 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  19. 参考⽂献
    • 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

    View Slide