Filter::POPFileで複数のベイズ辞書

実装するとしたら、各フィードごとにベイズ理論で学習させないとあんまうれしくなさそう。A さんが書く私生活ネタはつまらないから読みたくないけど、B さんが書く私生活ネタはおもろいから読みたい、ときに判断するのがひとつの学習空間しかないと無理そげ。

メールのベイジアンフィルタの場合、Header で重み付けやら分類はできるのは知ってるんですが、ベイズで学習するとこは一カ所だけだと思ってたんですが、発信元ごとに学習する箇所も別空間で行えるんでしょうかね?

上の話についてはブクマコメントでも「なんでもベイズだけで解決しようというのは無理がある。その辺はPOPFileでもSpamAssassinでも認識していて、上位のルールが用意されていたり、発信元などであらかじめ分類できるようになっている」とレスしておきましたが、ちょっと学習空間の用途を広げ過ぎちゃっているのかな、という気がする。

基本的には、「Aさんの私生活」「Bさんの私生活」なんてバケツを用意して、まじめに振り分け訓練を続けていけば、たとえ学習空間がひとつであっても、AさんBさんの微妙な口癖の違いとか、あるいは共起するメアド、特徴的なURLとかの違いでそれなりに分類できるようになるはず。

ただ、同じような内容のバケツが増えると誤認識も増えるので、どちらも「私生活」というバケツに放り込んで、発信元で読む読まないを決めた方が正しい分類にたどりつける可能性は高そうです。

現状のFilter::POPFileにはそのような設定は組み込んでいませんが、たとえばPOPFileではタグだけ抽出して、次の段階で別途タグと発信元から読む読まないを決めるFilter/Ruleを書けば解決するんじゃないかと。

もちろんPOPFileのインストール先やら設定やらを分けて複数起動したうえで、Plaggerのレシピも複数用意してそれぞれ通すPOPFileを変えるとかすれば、AさんとBさんの学習空間をわけて、Aさんの私生活ネタは「読まない」に、Bさんの私生活ネタは「読む」に入れるなんてこともできるはずですけれど、これはたぶん手間ばかりかかっておいしくない。AさんBさんの二人くらいならともかく、バケツの数よりフィードの数が多くなったら、フィード単位で振り分けるより、必要に応じてバケツをひとつふたつ増やすくらいの方が気楽だと思う。

問題はむしろ、リモートのPOPFileに複数のユーザがアクセスする場合の方。

POPFileそのもののロードマップにもマルチユーザ対応があがっていて、限定的ながらひとつのマシンにインストールしたPOPFileを複数ユーザで(設定だけ別に)共有することはできるようになっていますが、ここで、CさんはAさんの話も読みたいし、DさんはAさんの話なんて読みたくない、となった場合に、学習空間をわけておかないと困ったことになる。

これが、万人に嫌われるスパムメール(のみ)を排除すればいいときと、フィードのように個人の好みが反映されたものを分類するときの最大の違いで、だからこそスパムフィルタリングに特化しすぎたSpamAssassinは後者の用途では使いづらいと言ったわけですが、いまのところこれはPOPFileのバージョンアップ待ちですね。

ただ、どのみちメールのベイズとフィードのベイズは分けておいた方が便利ですので、Plagger用のPOPFileはメール用のPOPFileとは別に、各人のlocalhost内に用意した方が賢明だろうとは思います。

POPFileネタはもうひとつふたつレスしようと思っているのがあるのですが、長くなったからひとまずここで。