2007-11-24 Sat
「圧縮新聞」を作った
僕は昔からロボットがロボットなりに変な文章を生成して喋ったりする人工無脳とかそういう仕組みが好きで、最近はそのへんの仕組みを勉強していました。それで大体仕組みの基本はわかったので簡単なスクリプトを書いてみたよ。
このスクリプトはウェブ上にある新聞社とかのニュースの文章を元にして、バラバラにして圧縮してまとめた文章を作るので、ざっと眺めるだけでその日起こった事件の全体が何となくわかるかもしれません。リロードするたび文章は変わります。
生成例
しょうゆ・みそ業界大手のNOVA(大阪市)が入った郵便小包は、北朝鮮の鉄道網を連結する計画だったらしいことが21日、わかった。タンクに灯油を補給した。検案の結果、財政難などをほとんど与えずに6者協議の外相会議の早期再開に期待を表明した国と製薬会社に賠償を求めた。その後、死亡した。
しくみ
こういった人工無脳みたいな文章生成をするには形態素解析とマルコフ連鎖という仕組みを使います。結構簡単にできます。
形態素解析
形態素解析というのは、簡単に言うと文章を単語に分けてバラバラにすることです。英語だと単語と単語はスペースで区切られているので楽なのですが、日本語は全部くっついているので、どこからどこまでが一つの単語なのかを区切ってやらないといけません。
上のサイトではYahooの形態素解析APIを使っています。
例えばこのAPIに
上のサイトではYahooの形態素解析APIを使っています。
という文章を投げると、
上 | の | サイト | で | は | Yahoo | の | 形態素 | 解析 | API | を | 使っ | て | い | ます | 。
というようにばらばらになった文章が返ってきます。
マルコフ連鎖
このバラバラになった文章を繋げるのにマルコフ連鎖という仕組みを使います。簡単に言うと、いくつかの単語の繋がりを記録しておいて、それを繋げていって文章を作るという仕組みです。
文章を形態素解析でバラバラにしたら、その中の単語の繋がりのパターンを記録します。「Yahoo」=「 の」という繋がりとか、「API」=「は」とか。
そして文章を作るときには、例えば最初に「Yahoo」=「 の」という繋がりを持ってくるとして、そしたら次は「の」から始まる繋がりをそこから繋げます。「Yahoo」=「 の」の次を「の」 =「 記憶」という繋がりにしたら、その次は「記憶 」=「 は」という繋がりを繋げられる。
そういう風に「Yahoo」= 「の」「の」=「記憶」「記憶」=「は」「は」=「終わっ」「終わっ」=「て」「て」=「ない」「ない」=「。」と繋げていくと、
「Yahooの記憶は終わってない。」
という、意味はわからないけれど文法的には違和感のない文章ができあがるわけです。
ちなみに上の例では2単語ずつの連なりを記録していますが、圧縮新聞では最初に文章を解析する際に4単語の連なりを1セットとして記録しています。仕組みとして2単語よりも3単語、3単語よりも4単語のほうが文章の意味が保持されやすくなります。最初に3単語セットのバージョンも作ったんだけどこれだとあまりにも文章の繋がりがばらばらになりすぎるので、このスクリプトの場合はある程度意味を保持していたほうが面白いだろうと思った。あと新聞記事は定型文が多いので、4連鎖をセットにしても結構文章が繋がるというのもあった。
資料
詳しくはこの本で学びました。
- 作者: 秋山智俊
- 出版社/メーカー: 毎日コミュニケーションズ
- 発売日: 2005/04
- メディア: 単行本(ソフトカバー)
- 購入: 4人 クリック: 286回
- この商品を含むブログ (84件) を見る
これはRubyの本で、僕はRubyではなくPHPで書いたんだけど、ロジックだけ参考にした。
あとPHPで書かれてるこのページにあるコードも参考にした。
本を貸してくれた赤田くんありがとう。
追記
Twitter版も作ってみました。
- WEB開発日記 - 「圧縮新聞」を作った - phaのニート日記
- bookmark_2007-11-24
- [Django][Python][jQuery][その他]巡回
- Webアプリを作ろう - 11/25 scrap
- Yahoo!
- ☈法令データ検索日誌 - 圧縮新聞←この文章に「パプリカ」を...
- 管理人 気になる情報、ニュース
- 少しは片付けましょう - 圧縮新聞
- 圧縮新聞というコンテンツ
- hatena HYBRID +annex - 「圧縮新聞」を作った
- cream2の日記
- Yogurti - bookmarks for the day
- 「全自動MADニュース」公開しました
- techlog - [http://lab.js-bar.net/gen/:title=文章をつくろう]
- 圧縮新聞とは
- 圧縮新聞
- 圧縮新聞
- 圧縮新聞の話題です
- 圧縮新聞
- 圧縮新聞
- 圧縮新聞関連ニュース!
- phaのニート日記 - 「文豪ミキサー」を作った
- txqz line - 今日のついったー
- unnecessary words - Rubyで形態素解析してみた
- hrkt0115311の日記 - 「坊ちゃん語」を話す「不明さん」を作成した件
- YMRL. - @ymrl_dnhrは@dnhrに改名しました+人工無脳dnhrの話いろいろ
- monochrome pleasure - 「圧縮新聞」という愉しみ
- phaのニート日記 - 圧縮新聞の英語版、Mashed Newsを作ってみた
- “圧縮新聞”が面白い
- 備忘録的ホイコーロー - GAEでTwitterのツイートを圧縮新聞っぽくま...
- RC3の無職しょ日記 - ルビーの本の10年
- Choosen life, choose life - 「ニートのカリスマ」phaさんの人気記...
- imHo - マルコフ作文2
- 34922 http://pha22.net/comp/
- 2954 http://egone.org/
- 2405 http://gigazine.net/index.php?/news/comments/20071126_headline/
- 2341 http://b.hatena.ne.jp/hotentry
- 2243 http://b.hatena.ne.jp/
- 2166 http://twitter.com/asshuku
- 1964 http://www.hatena.ne.jp/
- 1944 http://d.hatena.ne.jp/
- 1326 http://pha22.net/
- 1125 http://search.yahoo.co.jp/search?p=圧縮新聞&fr=top_v2&tid=top_v2&ei=euc-jp&search.x=1
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |

















