Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
マルコフ連鎖でツイート生成
Search
naosuke
February 08, 2017
Programming
0
1.6k
マルコフ連鎖でツイート生成
大学院の授業の発表資料です。
マルコフ連鎖を使って、自分っぽいツイートを作るプログラムを作りました
naosuke
February 08, 2017
Tweet
Share
More Decks by naosuke
See All by naosuke
クラウドサービスのウラオモテ / Outside and Inside of Cloud Services
hanasuke
0
1.4k
この素晴らしい新入社員とペアプロを! / Pair-programming with wonderful newcomer!
hanasuke
2
1.9k
学生サークルとOSCのつながりとこれから
hanasuke
0
350
TouchBarを触りたかった話
hanasuke
2
1.6k
ふりかえりを実践した話
hanasuke
0
270
Other Decks in Programming
See All in Programming
CloudNativePGを布教したい
nnaka2992
0
120
Honoをフロントエンドで使う 3つのやり方
yusukebe
7
3.6k
Rubyと自由とAIと
yotii23
6
1.9k
.NET Frameworkでも汎用ホストが使いたい!
tomokusaba
0
210
Jasprが凄い話
hyshu
0
180
AWS Step Functions は CDK で書こう!
konokenj
5
880
CDK開発におけるコーディング規約の運用
yamanashi_ren01
2
260
Datadog Workflow Automation で圧倒的価値提供
showwin
1
310
苦しいTiDBへの移行を乗り越えて快適な運用を目指す
leveragestech
0
1.2k
『テスト書いた方が開発が早いじゃん』を解き明かす #phpcon_nagoya
o0h
PRO
9
2.6k
PRレビューのお供にDanger
stoticdev
1
240
Serverless Rust: Your Low-Risk Entry Point to Rust in Production (and the benefits are huge)
lmammino
1
160
Featured
See All Featured
Unsuck your backbone
ammeep
669
57k
The World Runs on Bad Software
bkeepers
PRO
67
11k
Making Projects Easy
brettharned
116
6k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
11
1.3k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.2k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
11
540
Documentation Writing (for coders)
carmenintech
68
4.6k
Adopting Sorbet at Scale
ufuk
75
9.2k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
30
4.6k
Mobile First: as difficult as doing things right
swwweet
223
9.5k
Facilitating Awesome Meetings
lara
53
6.3k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
115
51k
Transcript
マルコフ連鎖を利⽤した ツイート⽣成スクリプトを作った
もくじ 1. つくったものの概要 2. 形態素解析とマルコフ連鎖 3. 実際の対象データの情報 4. 実験結果と⽐較 5.
まとめ
1-1 なにをつくったか • ⾃⾝のツイートから⽂字列を⽣成しツイートする ”なおすけくんbot” • ”しゅうまいくん”の⾃分のツイート版みたいな • いい感じにツイートを分析して、 いい感じの⽇本語の⽂章をツイート
• ツイート分析に形態素解析、 ツイート⽣成にマルコフ連鎖を利⽤
1-2 ツイート解析の概要 ⾃分の過去ツイート達 MeCabによる 形態素解析 なおすけ辞書の⽣成
1-3 ツイート⽣成の概要 マルコフ連鎖による ⽂章⽣成 なおすけ辞書 ツイート
2-1 形態素解析の概要 • 形態素解析とは • ⼊⼒⽂を形態素の並びに分解し、 品詞の同定や原形・活⽤形の判定を⾏うこと • 形態素: 意味を持つ最⼩の⾔語単位
お待ち / し / て / おり / ます / 。 • 著名な形態素解析器 • JUMAN : 京都⼤ ⿊橋研が開発 • 茶筌 (ChaSen) : 奈良先端⼤ 松本研が開発 • 和布蕪 (MeCab) : 詳細は後述 • KAKASI : 漢字→ひらがな変換プログラム 分かち書き機能がある
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の⽇本語⼊⼒エンジン (?)
2-3 マルコフ連鎖 • マルコフ過程 • マルコフ性をもつ確率過程 • 未来の挙動が現在の状態だけで決定する確率過程 ↑こんなの↑ •
マルコフ連鎖 • マルコフ過程のうち、取りうる状態が離散的なもの • 割と重要な概念らしい • ⾳声認識とかGoogleのPageRankで利⽤
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
3-2 Tweet群の前処理 • filter.rb • ⾃⾝のつぶやきでないものを除外 • RT • shindanmaker,
togetterなどのボタンからのツイート系 • swarmapp, はてブなどのアプリ連携のツイート系 • 邪魔な⽂字列を排除 • ”@ユーザ名” • http://~~のURL • “#なんとか”のようなハッシュタグ
3-3 ツイートの分析となおすけ辞書の作成 • ツイート⽂字列を形態素解析し、配列に格納 私の名前は中野です。→ [“私”, “の”, “名前”, ”は”, ”中野”,
”で す”, ”。”] • マルコフ連鎖のためのダミー⽂字列を挿⼊ [“_BEGIN_”, “私”, “の”, “名前”, ”は”, ”中野”, ”です”, ”。”, “_END_”] • N階マルコフモデルを作成する • N個のネストしたハッシュを作成 • ハッシュが存在すれば、要素としての配列に挿⼊ hash[“_BEGIN_”][“私”] = [‘の’, ‘は’, ‘が’, ‘と’, ‘で’,...] hash[“私”][“の”] = [‘名前’, ‘好き’, ‘嫁’, ‘名前’, ‘彼⼥’,...] : :
3-4 なおすけ辞書を基としたツイート機能 • ソースコードを⾒せながら説明します
4-1 元ツイートのデータ 期間 2012/04/20〜2017.02.01 (1749⽇) ツイート数 約21万 総⽂字数 約398.5万 約18⽂字/ツイート
2012年 2017年
4-2 Botの紹介 • てすとくん @naosuke_test • #naosuke_markov{N}というハッシュタグをつけて、 N階の連鎖によるツイートをツイート • #naosuke_markov3については途中までバグってた
• http://twilog.org/naosuke_test をみながらこの先解説をします
4-3 4階マルコフモデルによるツイート例 • http://twilog.org/naosuke_test/hashtags-naosuke_markov4
4-4 3階マルコフモデルによるツイート例 • http://twilog.org/naosuke_test/hashtags-naosuke_markov3
5-1 まとめ • ⾃然⾔語処理とマルコフ連鎖 • 形態素解析とマルコフ連鎖によるツイートbotの作成 • 形態素解析器としてMeCabを利⽤ • 辞書として、最新語が多く含まれたものを採⽤
• ⾼階マルコフモデルによる⽣成⽂章の違い • 2階、3階、4階、5階マルコフ連鎖で⽂章を⽣成 • 2階よりも3階以上のほうが多少マシな⽂章が⽣成されている • 4階以上による差異はあまりない ⇒1ツイートに含まれる形態素が少なすぎるせい? • マイクロブログ的な使い⽅をしてれば、差異が出るのかも
5-2 今後の課題と感想 • 今後の課題 • リプライ機能 →リプライの中の重要なキーワードから⽣成する感じ? • 機械学習/ニューラルネットワークによるBotの作成 →Hubotとの会話機能とか
• 感想 • 最近は⾃然⾔語処理のライブラリが豊富で⼿軽に遊べる • “書き⾔葉”ではなく“話し⾔葉”は解析が難しい ⇒安藤研の⼈たち頑張って欲しい • より⾃然に⾒える⽂章の作成は難しい • GoogleとかMicrosoft、Appleの⾔語処理系やばい
参考⽂献 • 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