プログラマでありたい

おっさんになっても、プログラマでありつづけたい

Chefを支えるohai。プラットフォームの情報を取得するためのライブラリ

 最近、ちょくちょく起こるのが新着/ホットエントリーしたエントリーがはてなブックマーク入りした際に想定したカテゴリーと違うところに入るケースです。直近では、"Chefを支えるohai。プラットフォームの情報を取得するためのライブラリ"という記事を書いて、"暮らし"に入っておりました。暮らしを支えるライオンですかね。あ、見つめるか。


 ということで、ブログのカテゴライズをするのであれば、自分であればどうするか考えてみました。カテゴライズ機能の鉄板といえば、ベイズ推定を使ったカテゴライズだと思います。対抗としては、SVM(回帰分析)があると思いますが、2値分析が得意なSVMよりポイント性のベイズの方がカテゴライズにはあっているような気がします。どちらも教師データ(正解データ)を用意して、学習させる手法です。具体的には、カテゴリーごとにそれにあう数千くらいの記事を用意して、特徴を抽出して覚えさせるという手法です。迷惑メールの判定手段も、本文解析という点では同じ手法が使われています。
 この手の話をすると、例えば特定の語が出てきたら問答無用に判定されると理解されがちですが、実際は単語ごとに重み付けをするという手法です。例えば、"Chefを支えるohai。プラットフォームの情報を取得するためのライブラリ"だったら、Chef,支える,ohai,プラットフォーム,情報,取得,ライブラリといった単語に分割し、単語ごとにどのカテゴリらしいかを計算します。Chefの場合、世の中:0.3,政治と経済:0.1,暮らし:0.8,学び:0.4,テクノロジー:0.7,エンタメ:0.2,おもしろ:0.1といった具合です。1に近い程に関係する可能性が高く、0に近い程可能性が低いといった次第です。(もちろん、この値は適当に付けたあたいです。)その総合点でカテゴリを決めるという方式です。


 話をはてなのカテゴライズに戻すと、本文とタイトルをそれぞれポイントづけしていると思うのですが、タイトルの重みが多いように思えます。この辺り、バランスが変わったのか。単に学習データの更新や修正されたカテゴリーの再学習がされていないのか、何かずれてきているなぁという印象です。ブログのカテゴライズというと、割りと難しくない分野なので精度が気になるところです。
 ちなみにこの辺りのテーマは、2006〜2008年くらいに流行りでした。同時期にレコメンドエンジンや転置インデックス、Suffix Arrayなどのノウハウが色々な方から一斉に放出されたこともあり自然言語処理の花盛りの時代だったのかもしれません。その後、名前を変えたもののビッグデータというキーワードの裏でこれらの技術が下支えしているのではと思います。


 あと蛇足ながら、実ははてなのカテゴライズ機能というのは長らく要望されながら中々実装されなかった機能です。人づてに聞いたので本当かどうか解りませんが、社長の近藤さんが人が書いた文章を共通の尺度で分類するのはおかしいという考えのもとだったとか。事実であれば、哲学的な信念を持って運営されていたのですね。
 実装を再度考えようと思ってたのですが、昔話になってしまいました。この辺りのアルゴリズムは最近は追っていませんが、どう進化しているのでしょうね?ここ数年はクラウドのお陰で、ほぼ無限の計算力を使えるようになっています。昔だったら理論上で終わっていたものが、今だったら力づくで実現出来るようになっています。それを活かして古くて新しいアルゴリズムが復活しているかもしれません。面白いのが出てくると良いですね。


See Also:
集合知プログラミングが凄すぎる件について
特徴語抽出のあれこれ
Algorithm::NaiveBayes ベイズ理論を使ってコメントスパムフィルター