Hatena::ブログ(Diary)

phaの日記 このページをアンテナに追加 RSSフィード Twitter

はたらきたくない

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連鎖をセットにしても結構文章が繋がるというのもあった。

資料

詳しくはこの本で学びました。

恋するプログラム―Rubyでつくる人工無脳

恋するプログラム―Rubyでつくる人工無脳

これはRubyの本で、僕はRubyではなくPHPで書いたんだけど、ロジックだけ参考にした。

あとPHPで書かれてるこのページにあるコードも参考にした。

本を貸してくれた赤田くんありがとう。

追記

Twitter版も作ってみました。

f:id:pha:20071125234427p:image

Twitter / asshuku

通りすがり通りすがり 2007/11/26 06:22 何気に面白いですねー。
「お気に入り」に登録しました。

かすかす 2007/11/26 12:15 ちょっとおもしろいですねぇ。
ただ、n-gram以外も取り入れて欲しいかな〜って生意気にも思ってしまいました。

cream2cream2 2007/11/26 16:25 感動しました!
昔のタモリのオールナイトニッポンの「つぎはぎニュース」を思い出しました!

is727is727 2007/11/26 16:28 すごいねー
「圧縮新聞」
面白いもの作ったね。
早速、お気に入りしておこう。
あと、はてなブックマークもしておこう。

nn 2007/11/26 19:26 しょうゆ・みそ業界大手のNOVA(大阪市)が入った郵便小包は、北朝鮮の鉄道網を連結する計画だったらしいことが21日、わかった。タンクに灯油を補給した。検案の結果、財政難などをほとんど与えずに6者協議の外相会議の早期再開に期待を表明した国と製薬会社に賠償を求めた。その後、死亡した。

phapha 2007/11/26 19:34 みなさんコメントありがとうー

匿名希望匿名希望 2007/11/26 19:57 広告目的で人気キーワードを埋め込んだブログを自動生成して儲けられそうだね。

nobanoba 2007/11/27 02:31 既にそういうのがいっぱいあって困る。テクノラティで検索すると、それっぽいブログが引っかかるが、ページに飛んでみるとしょうゆ・みそ業界大手のNOVAになっててがっかり。テクノラティももっと賢くなってほしいと思う今日この頃は秋。

kuonkuon 2007/12/13 00:20 圧縮新聞、面白いけど結果として子供が殺された事件なども笑い話しに読めてしまうので、それはプログラムで何とか除去してほしいなー。この新聞一部容認、一部残念って感じ

captino2003captino2003 2007/12/13 01:11 ニュース見てきました。
昔からこういった自動作文はありましたが、
新鮮なネタが常時提供されるのは良いですね。

’50s’50s 2007/12/13 09:21 シュールな感じは楽しめますが、kuonさんと同様に笑えない話は冗談にならない結果が欲しいですね。これからものぞいてみます。

yuyu 2007/12/13 10:55 おもしろいですね!
お気に入り登録させていただきました。

TAK_TAKTAK_TAK 2007/12/13 13:39 うーーーんなんでこの程度の技術ですごいと思えちゃう人が多いんでしょう、
やっぱり日本では(子供騙しの)面白さの方が受けがいいんですね


わたくしの方が、2年前から真の自動要約やって公開してるんですが.....

超ひも理論超ひも理論 2007/12/13 14:18 凄い面白いアイディアに脱帽です。
お気に入り登録させて頂きました♪
>TAKさん
ここ日本だしね。
圧縮新聞は技術の評価よりセンスが評価されてると思いますよ。

何年前からやってようが見る人から評価を受けて初めて価値がでるのだしTAKさんのHPはただの自己満足な作りなので宝の持ち腐れです。(見づらい上に目的が分からない)

kazukazu 2007/12/17 20:17 ITmediaから飛んできました
凄いですね
私もTAK_TAKさんのようなことを利用することを考えていましたが
phaさんのように受け入れられるものが大切かなと思いました
(TAK_TAKさんを否定はいたしません)

akudaikanakudaikan 2008/01/21 22:51 よくわからないけどおもしろいです。悪代官のホームページからリンクをしてもいいですか? http://akudaikan.hiho.jp

phapha 2008/01/21 23:18 みなさんどうもです。リンクはご自由にどうぞですー

vigilant8vigilant8 2008/02/03 09:23 はじめてここに来たんですが、圧縮新聞を見て朝から吹きましたwすっごい面白いっす

m-komagatam-komagata 2008/03/04 18:51 すごいっす。俺も思いっきり吹きました。

fattenswordfattensword 2009/06/16 09:27 すごい!これは、お気に入りいれますです!

KmusiclifeKmusiclife 2009/07/13 11:24 圧縮新聞の地方版、金沢圧縮新聞ができました。
http://twitter.com/kanazawa_asshu

中野中野 2009/12/05 01:51 ネトスタ見ましたよ。思わずくすくす笑ってしまいました。

sumihirosumihiro 2010/03/04 00:48 おもしろいですね!
初めは新手の縮刷版かと思ってました(笑)

rokugaturokugatu 2010/05/18 06:12 polysicsの歌詞みたーい!

ぴろきぴろき 2013/03/14 23:29 面白いですね。
利用するニュースソースをもう少し絞って主要ニュース中心とし、さらに文章を多少長くしてもらえると、もっと楽しめそうです。
期待してます。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/pha/20071124/1195904502
2003 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
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 |