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.5k
マルコフ連鎖でツイート生成
大学院の授業の発表資料です。
マルコフ連鎖を使って、自分っぽいツイートを作るプログラムを作りました
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
340
TouchBarを触りたかった話
hanasuke
2
1.6k
ふりかえりを実践した話
hanasuke
0
240
Other Decks in Programming
See All in Programming
Contemporary Test Cases
maaretp
0
140
Streams APIとTCPフロー制御 / Web Streams API and TCP flow control
tasshi
2
360
型付き API リクエストを実現するいくつかの手法とその選択 / Typed API Request
euxn23
8
2.3k
Modular Monolith Monorepo ~シンプルさを保ちながらmonorepoのメリットを最大化する~
yuisakamoto
5
330
最新TCAキャッチアップ
0si43
0
200
2024/11/8 関西Kaggler会 2024 #3 / Kaggle Kernel で Gemma 2 × vLLM を動かす。
kohecchi
5
950
色々なIaCツールを実際に触って比較してみる
iriikeita
0
340
シェーダーで魅せるMapLibreの動的ラスタータイル
satoshi7190
1
480
Jakarta EE meets AI
ivargrimstad
0
190
見せてあげますよ、「本物のLaravel批判」ってやつを。
77web
7
7.8k
AI時代におけるSRE、 あるいはエンジニアの生存戦略
pyama86
6
1.2k
アジャイルを支えるテストアーキテクチャ設計/Test Architecting for Agile
goyoki
9
3.3k
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
20
1.1k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
KATA
mclloyd
29
14k
Designing for humans not robots
tammielis
250
25k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
720
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
A Tale of Four Properties
chriscoyier
156
23k
Product Roadmaps are Hard
iamctodd
PRO
49
11k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.2k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
364
24k
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