<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>橋本商会 &#187; マルコフ連鎖</title>
	<atom:link href="http://shokai.org/blog/archives/tag/%e3%83%9e%e3%83%ab%e3%82%b3%e3%83%95%e9%80%a3%e9%8e%96/feed" rel="self" type="application/rss+xml" />
	<link>http://shokai.org/blog</link>
	<description>なんか作ったりした記録を忘れないうちに書くblog</description>
	<lastBuildDate>Sun, 20 May 2012 10:50:20 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com/" />
			<item>
		<title>ahokai rev.54以降でのDBファイル名変更、buzztter検索post</title>
		<link>http://shokai.org/blog/archives/4081</link>
		<comments>http://shokai.org/blog/archives/4081#comments</comments>
		<pubDate>Wed, 07 Jan 2009 07:34:09 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[ahokai]]></category>
		<category><![CDATA[n-gram]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[マルコフ連鎖]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=4081</guid>
		<description><![CDATA[（ついに本気を出して絶賛修論執筆中だけど）ahokaiiの設計を少し修正した これまでsqlite3のデータベースファイルを db_ngrams, db_postsという2つのファイルにしていたけど db というファイル [...]]]></description>
			<content:encoded><![CDATA[<p>
（ついに本気を出して絶賛修論執筆中だけど）<a href="http://shokai.org/blog/archives/4036">ahokai</a>iの設計を少し修正した<br />
<br />
これまでsqlite3のデータベースファイルを db_ngrams, db_postsという2つのファイルにしていたけど<br />
db というファイル1つにまとめました。<br />
<br />
理由は、特に2つに分ける意味は無かったからです。<br />
<br />
<a href="http://www.bitbucket.org/shokai/bot-ahokai/changeset/b4122dd31781/">commit 54</a>以降のバージョンにアップデートするには、<br />
db_postsの方にクロールした元twitterアカウントのデータが入っているので、それは消さずにdbにリネームして、n-gramのテーブルを追加すると良いですよ<br />
</p>
<blockquote><p>
mv db_posts db<br />
rm db_ngrams<br />
ruby migrate_ngrams.rb up<br />
ruby make3gram.rb<br />
</p></blockquote>
<p>
忘れずにmake3gramし直す。<br />
<br />
<br />
あと、ついでに<a href="http://buzztter.com/ja">Buzztter</a>から検索してpostを構築する機能が付けてみた。<br />
面白くなるかはわからないけど。<br />
<br />
<br />
マルコフ連鎖でのpost構築は、今まで頭側から行っていたけど左右両方向へ伸ばすようにしたので<br />
これで検索機能が付けられた<br />
</p>
<blockquote><p>ruby post3gram.rb リナカフェ</p></blockquote>
<p>
「リナカフェ」を含むpostが作られる<br />
</p>
<blockquote><p>
make post with &#8216;リナカフェ&#8217;<br />
リナ カフェ が 1<br />
&#8212;search left 3-grams&#8212;<br />
=&#8221; リナ カフェ 1<br />
m =&#8221; リナ 1<br />
&#8216; m =&#8221; 1<br />
e &#8216; m 1<br />
- e &#8216; 1<br />
(h)ruby &#8211; e 1<br />
&#8212;search right 3-grams&#8212;<br />
カフェ が オススメ 1<br />
が オススメ ！ 1(t)<br />
ruby-e&#8217;m=&#8221;リナカフェがオススメ！<br />
</p></blockquote>
<p>
<br />
<span id="more-4081"></span><br />
<br />
一定確率で<a href="http://www.bitbucket.org/shokai/bot-ahokai/src/12b642540a65/Buzzwords.rb">buzztterのRSSを取って</a>きて、<a href="http://www.bitbucket.org/shokai/bot-ahokai/changeset/d7095eafb3f6/">名詞を抽出して</a>、検索機能にかける。<br />
<br />
確率の指定方法はsample.config.yamlに書いてあります<br />
必要無い人は、0を指定してください。<br />
何も設定しないとデフォルト3割ぐらいでばずるけど、この値は変わるかもしれない<br />
<br />
<br />
ばずっているところ</p>
<blockquote><p>search buzztter&#8230;<br />
fetch http://buzztter.com/ja/rss<br />
make post with &#8216;最近&#8217;<br />
を 最近 作っ 1<br />
&#8212;search left 3-grams&#8212;<br />
もの を 最近 1<br />
な もの を 1<br />
みたい な もの 1<br />
github みたい な 1<br />
の github みたい 1<br />
版 の github 1<br />
ケータイ 版 の 1<br />
(h)wassr ケータイ 版 1<br />
&#8212;search right 3-grams&#8212;<br />
最近 作っ て 1<br />
作っ て パラレル 1<br />
て パラレル twitter 1<br />
パラレル twitter ワールド 1<br />
twitter ワールド に 1<br />
ワールド に する 1(t)<br />
に する 方法 1<br />
wassrケータイ版のgithubみたいなものを最近作ってパラレルtwitterワールドにする方法<br />
</p></blockquote>
<p>
<br />
<br />
<br />
<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/4081/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>スーパーボット大戦</title>
		<link>http://shokai.org/blog/archives/4036</link>
		<comments>http://shokai.org/blog/archives/4036#comments</comments>
		<pubDate>Wed, 24 Dec 2008 16:37:09 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[ahokai]]></category>
		<category><![CDATA[n-gram]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[マルコフ連鎖]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=4036</guid>
		<description><![CDATA[Twitter / ahokaiという、自分の過去の発言を収集し、n-gramモデルとマルコフ連鎖を用いて分析・発言するプログラムを作りました。いわゆるボットという奴です。 方法については「圧縮新聞」を作った &#821 [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://twitter.com/ahokai">Twitter / ahokai</a>という、自分の過去の発言を収集し、n-gramモデルとマルコフ連鎖を用いて分析・発言するプログラムを作りました。いわゆるボットという奴です。<br />
方法については<a href="http://d.hatena.ne.jp/pha/20071124/1195904502">「圧縮新聞」を作った &#8211; phaのニート日記</a>が詳しいです。<br />
<br />
<br />
こちらからahokaiの全ソースコードをダウンロードできます。<br />
<a href="http://www.bitbucket.org/shokai/bot-ahokai/">shokai / bot-ahokai / overview — bitbucket.org</a><br />
詳しい作り方やいきさつは<a href="http://d.hatena.ne.jp/shokai/20081221/1229879343">bot ahokaiの作成 &#8211; 橋本詳解</a>に書いたのですが、<br />
今回はahokaiの様な「自分の発言を再構成して喋るbot」を設置する方法を書きます。<br />
botがたくさん喋ってくれればクリスマスも寂しくないし、師走で忙しくても平気です。みんなで実在の人物を元にしたボットを設置して裏twitterを作り、最終戦争終結後もボット同士が喋り合いスーパーボット大戦しましょう。<br />
<br />
<br />
主な機能は<br />
<ul>
	<li>あるユーザの過去の発言を3000件程度取得する</li>
	<li>発言データを再構成する</li>
	<li>再構成して発言する</li>
	<li>followerにランダムに話しかける</li>
	<li>followしてきたユーザをfollowし返す</li>
	<li>言及してきた発言をtwitter searchで検索し、favotiteし返す</li>
</ul>
です。<br />
<br />
<span id="more-4036"></span><br />
<br />
■必要なモジュール・ライブラリ<br />
だいたい、Ruby on RailsとSQLite3、MeCabが使える環境ならすんなり動くと思います。<br />
rubygemsで<br />
<ul>
<li>twitter</li>
<li>activerecord</li>
<li>feed-normalizer</li>
<li>hpricot</li>
<li>xml-simple</li>
<li>simple-rss</li>
<li>sqlite3-ruby</li>
<li>mecab</li>
</ul>
をインストールする必要があります。この辺は、試しにRuby on Railsをインストールしてみればわかるはず。<br />
<br />
MeCab（形態素解析…日本語の単語を品詞毎に分解するのにも使えるツール）のインストールがそれなりに苦労します。<br />
MeCab本体とutf8で書かれた辞書、Rubyから使うためのMeCab Rubyバインディングの3つが必要です<br />
<br />
Macの場合、<a href="http://www.macports.org/">macports</a>を使うのが良い。<br />
<ul>
<li><a href="http://d.hatena.ne.jp/shokai/20080317/1205736293">形態素解析エンジンMeCabをインストールしなおし（utf8で） &#8211; 橋本詳解</a></li>
<li><a href="http://d.hatena.ne.jp/shokai/20080317/1205736627">MeCabのRubyバインディングをインストール &#8211; 橋本詳解</a></li>
</ul>
<br />
Ubuntuへのインストールは簡単です<br />
<ul>
<li><a href="http://d.hatena.ne.jp/shokai/20080317/1205737682">MeCabをUbuntuにインストール &#8211; 橋本詳解</a></li>
<li><a href="http://d.hatena.ne.jp/shokai/20080317/1205737845">MeCab辞書の切り替え &#8211; 橋本詳解</a></li>
<li><a href="http://d.hatena.ne.jp/shokai/20080317/1205739440">MeCab Rubyバインディングをインストール &#8211; 橋本詳解</a></li></ul>
<br />
Windowsや、さくらインターネットなどのレンタルサーバでも動かせるはずです。<br />
<br />
<br />
<br />
さていよいよ設置です。<br />
<br />
<br />
<br />
■設置の流れ<br />
ソースコードダウンロードして、DBの設定をし（Rails風に一発でできます）<br />
クローラを走らせで自分の発言を収集、分析します。<br />
それから単語を再構成して発言させます。<br />
<br />
<br />
■ダウンロード<br />
こちらからahokaiをダウンロードできます。<br />
<a href="http://www.bitbucket.org/shokai/bot-ahokai/">shokai / bot-ahokai / overview — bitbucket.org</a><br />
右上のリンクからzipでダウンロードして解凍するか、mercurialで<br />
</p>
<blockquote><p>hg clone http://bitbucket.org/shokai/bot-ahokai/ mybot</p></blockquote>
<p>
して、自分のマシンに置いてください。<br />
<br />
<br />
■アカウント設定<br />
まず、俺の場合&#8221;ahokai&#8221;というtwitterアカウントに喋らせたかったので、メールアドレスをもう1つ用意して取りました。<br />
sample.config.yamlを編集し、config.yamlに名前を変えて保存します。<br />
<br />
アカウントshokaiから収集し、ahokaiに発言を投げる場合はこうなります<br />
</p>
<blockquote><p>usernum : &#8220;3631571&#8243; # データ収集のためのユーザ番号<br />
user : &#8220;ahokai&#8221;<br />
pass : &#8220;twitter-password&#8221;</p></blockquote>
<p>
usernumは、取得したい各twitterアカウントの左下から、RSSのURLを見ると番号がわかります<br />
<a href="http://www.flickr.com/photos/shokai/3133570180/" title="twitter number by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3283/3133570180_817833c3d4.jpg" width="316" height="140" alt="twitter number" /></a><br />
（3631571はshokaiの番号です、各自変えてください）<br />
<br />
<br />
■データベースの設定<br />
同じディレクトリにSQLite3のDBを作ります。<br />
ダウンロードしたディレクトリに移動して<br />
コマンドラインで<br />
</p>
<blockquote><p>ruby migrate_posts.rb up<br />
ruby migrate_ngrams.rb up</p></blockquote>
<p>
すると、dbというファイルが生成されます。この中に回収した自分の発言などが入ります<br />
<br />
<br />
■発言データのクロール<br />
1ページ目から160ページ目までクロールします。<br />
</p>
<blockquote><p>ruby store.rb 1-160</p></blockquote>
<p>
現在のtwitterのAPIは過去の160ページまでしかデータが取得できないので、それ以上は無駄です<br />
twitterに負荷をかけないようにアクセス間隔を開けているのでかなり時間がかかります。<br />
<br />
<br />
今後は引数無しで実行すると、デフォルトで10ページ取得します。<br />
</p>
<blockquote><p>ruby store.rb</p></blockquote>
<p>
数日に1回行えば十分です<br />
<br />
<br />
※注意：あまり激しく実行すると、1~2時間twitterからアクセス拒否されます<br />
<br />
<br />
■n-gramモデルの作成<br />
3-gramモデルを作成します。発言件数によってはかなり時間がかかります。<br />
</p>
<blockquote><p>ruby make3gram.rb</p></blockquote>
<p>
モデル作成中でも、発言はできます。せっかちな人はmake3gramを走らせておきながら、次に進んで良いです<br />
<br />
<br />
<br />
■発言する<br />
3-gramモデルからマルコフ連鎖して発言します<br />
</p>
<blockquote><p>ruby post3gram.rb</p></blockquote>
<p>
5%の確率で、followerの誰かに@reply発言します。<br />
<br />
<br />
■自動follow返し、自動favorite返し<br />
この処理はそれほど重くないので、1時間に1回ぐらい走らせておくと便利です。<br />
</p>
<blockquote><p>ruby refollow.rb</p></blockquote>
<p>
現在のfollowers/friends一覧を取得し、新しいfollowerが居たらfollow仕返します<br />
<br />
<a href="http://search.twitter.com/">Twitter Search</a>でbot宛の発言を検索し、favoriteを付けます<br />
</p>
<blockquote><p>ruby refav.rb</p></blockquote>
<p>
<br />
<br />
■常時使い続ける<br />
store.rbとmake3gram.rbは3日に1回ぐらい動かせば十分です。初回のみ160ページ分解析するので時間がかかりますが、2回目以降は差分のみ計算するのですぐ終わります。<br />
<br />
refav.rbとrefollow.rbは好きな間隔で。1時間に1回でも十分だと思います。<br />
<br />
<br />
post3gram.rbは、あまり動かしすぎると本人より目立ってしまい、いつの間にか人間と入れ替わってしまうので気をつけて下さい。<br />
<br />
気になるあのアルファギークのbotを自分のサーバで飼う事も、ひとつの歪んだ愛の形かもしれません。<br />
<br />
<br />
ちなみに俺は、crontabで定期的に収集・分析・発言などを実行するように設定しています<br />
</p>
<blockquote><p>*/17 * * * * /usr/bin/ruby /home/sho/src/ruby/ahokai/post3gram.rb > /dev/null 2>&#038;1<br />
*/5 * * * * /usr/bin/ruby /home/sho/src/ruby/ahokai/refollow.rb > /dev/null 2>&#038;1<br />
*/19 * * * * /usr/bin/ruby /home/sho/src/ruby/ahokai/refav.rb 10 > /dev/null 2>&#038;1<br />
30 */4 * * * /usr/bin/ruby /home/sho/src/ruby/ahokai/store.rb 10; /usr/bin/ruby /home/sho/src/ruby/ahokai/make3gram.rb</p></blockquote>
<p>
<br />
<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/4036/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

