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.7k
マルコフ連鎖でツイート生成
大学院の授業の発表資料です。
マルコフ連鎖を使って、自分っぽいツイートを作るプログラムを作りました
naosuke
February 08, 2017
Tweet
Share
More Decks by naosuke
See All by naosuke
クラウドサービスのウラオモテ / Outside and Inside of Cloud Services
hanasuke
0
1.5k
この素晴らしい新入社員とペアプロを! / Pair-programming with wonderful newcomer!
hanasuke
2
2k
学生サークルとOSCのつながりとこれから
hanasuke
0
370
TouchBarを触りたかった話
hanasuke
2
1.7k
ふりかえりを実践した話
hanasuke
0
310
Other Decks in Programming
See All in Programming
フロントエンド開発に役立つクライアントプログラム共通のノウハウ / Universal client-side programming best practices for frontend development
nrslib
7
3.8k
iOSアプリの信頼性を向上させる取り組み/ios-app-improve-reliability
shino8rayu9
0
120
エンジニアとして高みを目指す、 利益を生み出す設計の考え方 / design-for-profit
minodriven
23
11k
iOS 17で追加されたSubscriptionStoreView を利用して5分でサブスク実装チャレンジ
natmark
0
430
そのpreloadは必要?見過ごされたpreloadが技術的負債として爆発した日
mugitti9
2
2.6k
Web技術を最大限活用してRAW画像を現像する / Developing RAW Images on the Web
ssssota
2
1k
Breaking Up with Big ViewModels — Without Breaking Your Architecture (droidcon Berlin 2025)
steliosf
PRO
1
270
Swiftビルド弾丸ツアー - Swift Buildが作る新しいエコシステム
giginet
PRO
0
1.6k
CSS Linter の現在地 2025年のベストプラクティスを探る
ryo_manba
10
3.1k
AccessorySetupKitで実現するシームレスなペアリング体験 / Seamless pairing with AccessorySetupKit
nekowen
0
210
私達はmodernize packageに夢を見るか feat. go/analysis, go/ast / Go Conference 2025
kaorumuta
2
400
ABEMAモバイルアプリが Kotlin Multiplatformと歩んだ5年 ─ 導入と運用、成功と課題 / iOSDC 2025
akkyie
0
300
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
Reflections from 52 weeks, 52 projects
jeffersonlam
352
21k
Why Our Code Smells
bkeepers
PRO
339
57k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Large-scale JavaScript Application Architecture
addyosmani
513
110k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Navigating Team Friction
lara
189
15k
A Tale of Four Properties
chriscoyier
160
23k
Unsuck your backbone
ammeep
671
58k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
30
2.9k
Code Review Best Practice
trishagee
72
19k
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