Shogo's Blog

Dec 5, 2012 - 1 minute read -

聞こえますか…自動生成…してみた…よ…

聞こえますか…あなたの心に直接…で始まるこのテンプレート. 誰かが「文章入力したら…を自動で入れてくれるのないかな」って呟いてたのでつくってみた.

サクッと作成

TinySegmenterで単語分割, ランダムに…を単語の間に挿入して出力してみた.

この程度なら数十分あれば作れますね.

挿入位置を学習してみる

さて,実際やってみるとちょっと挿入位置が不自然な気がします. 世の中に出回っているツイートでは単語間ではなく文節の間に挿入しているのが多いように見えます.

しかし,TinySegmenterは品詞情報をつけてはくれないので文節の判定は少し面倒ですね.

・・・待てよ・・・このテンプレートを使ったツイートなんて大量に手に入る・・・これから学習すればいいんじゃね?

はい,やってみましょう.

ツイートを集める

Twitter APIを使ってテンプレートを使っているようなツイートを拾ってきます. ** 「聞こえますか OR きこえますか -RT」** で検索してみました.

普段Twitter APIを叩くときはTweepyを使っているのですが,これで検索するとあまり古いツイートは取れません. API 1.1 を使うと古いツイートも取ってこれるらしいので,強引にTweepyを書き換えて1.1対応. ** 72,529ツイートの取得に成功しました. ** プログラムについてはTweepyの書き換えでゴチャゴチャしているのでまた今度.

TinySegmenterMakerに放り込む

カッコで囲まれている部分を抽出,点々を空白に置換,パクリツイッタラー消去などの処理をした後, TinySegmentermakerに放り込みます. 実際に学習に使ったツイートは49,573ツイートです. 10000回の繰り返しで,学習結果は以下のようになりました.

Result:
Accuracy: 94.794% (3466578/3656961)
Precision: 90.9504% (526277/578642)
Recall: 79.2234% (526277/664295)
System/Answer p/p p/n n/p n/n: 526277 52365 138018 2940301

約95%の精度という非常に高い性能を示してくれましたが, 区切るところ(p)よりも区切らないところ(n)のほうが多いためですね. Recallが8割しかありませんが,人によるばらつきが大きそうなので,まあこんなもんでしょう.

学習が終わったら最後にオリジナルのTinySegmenterを学習後のもので置き換えるだけ. チェックボックスで単語分割とツイートの学習結果,どちらを使うか選択できます. なんだかそれっぽくなりましたかね・・・?

元ネタについて

ところでこのテンプレートの元ネタについて調査している方がいらっしゃるようです.

ゲームが元ネタだ,っていう人を時々見かけたけど, 検証してみると微妙に内容が違うらしい. もちろん影響は受けているんだろうけどね. マンガとかゲームで始めて心に直接語りかけたのって何なんだろう?