その秘密はベイジアンフィルターにある。POPFileはこのベイジアンフィルターという数学理論を採用してメールを解析しているのだ。Bayes)という英国人によって考え出された原理だ。ベイズは、「物事を判断する確率は、その物事の観察者にとっての不確かさである」と説き、神の存在でさえ数学的に示すことができると述べたそうだ。Estimation)という。簡単に言うと、新たなできごとを予測する際には、すでに起きている事実と、観察者自身の経験を考慮に入れることにより、かなり正確に推測できる、という考え方である。実生活では当たり前っちゃー当たり前だが、数学的にやるとなると簡単そうには見えない。あなたに宅配便で小ぎれいな小包が届いたとしよう。それが何かうれしいプレゼントか、そうでないかを予測することだろう。単純に確率を述べるなら、いちかばちか、50パーセントという確率だというのもあながち悪いとはいえない。どこか実際的ではない。実際には、その小包の大きさ、重さ、差出人、内容に関する記載事項などという観察に基づく「事実」と、過去の「経験」に基づく確率、つまりプレゼントだと思ったらそうでなかったという確率、あるいは期待通りだった確率を考え合わせるからだ。これを考慮に入れてはじめて、実際の結果にかなり近い予測が可能となる。この考え方で正しい分類を予測するために、POPFileは最初にいくらかユーザーのトレーニングを受けると、それらのメールから学習する。添付ファイルやHTMLのタグやコメントを取り除き、残されたヘッダと本文をコーパス(corpus)と呼ばれる単語群に分解する。分類されるメールの共通点を知るために、出現頻度の高いものを重み付けし、こうしてメールにおける各単語の出現と各バケツに分類された確率を計算できるようにコーパスデータベースを構築する。新たなメールを受け取ると、POPFileはそのコーパスデータベースに基づいて、「バケツ」への分類に影響を及ぼす単語を抽出し、その単語の有無や出現回数などから計算して、いずれのバケツに分類するかを決定する。その作業の過程で、POPFileは未知の単語にも遭遇するわけで、それによってセルフトレーニングを行うため、ユーザが間違いを指摘しない限り、自然に精度の高いコーパスデータベースができあがっていく。間違った分類をしたことを指摘される(つまり手動で再分類される)と、POPFileはそのデータベースを訂正する。これにより、POPFileは「観察者の判断」を学習し、分類精度を上げることができるのだ。UIの「履歴」メニューから、spamに認定されたメールの「件名」をクリックしてみて欲しい。すると、メールヘッダと本文のあちこちがバケツと同じ色にされて表示されている。ページの下のほうから「単語の頻度を表示」「単語の確率を表示」というリンクをたどると、各メールの分類に大きな影響を及ぼした単語が順に表示されており、大変興味深い。POPFileのデータベースにスパムで使われる単語が十分蓄積されていくにつれ、業者はスパムらしからぬ単語を使ってメールを送らない限り、その判定をすり抜けることは難しくなっていく一方だ。そのようなメールでは、スパム業者の目的を達することはできないだろう。スパムのフィルタリングの技術が向上するにつれ、彼らのビジネス上の目的が立ち行かなくなり、ついにはスパムメールという手段をあきらめてくれるようになればよいのだが。p.105に掲載された文に若干加筆したものです)オープンソースの責任の所在?2004/09/07OSS4件のコメントマイクロソフト社のバルマー氏は、自身の講演においてLinuxについてどう考えているかについて示した際「Linuxのアキレス腱は誰も責任を負わないこと」だと述べています。これについて、いくつかのblogで「じゃあMSはどうなんだよ」との指摘を拝見しました。いずれの主張も、なにがしかの事実や現状を観察して出てきたものでしょう。残念ながらこの講演を直接聞いていないのですが、わたしがバルマー氏に質問できるのなら、ビジネスとしてどの局面において「責任を負う」ことが欠落していることを指摘したいのか、そこを尋ねたいですね。「ソフトウエアそのものの責任を負う」?LinuxカーネルにせよUNIXライクに統合されたものにせよ、複数の人間によるプログラムの複合体であることは言うまでもありません。プログラムが企業によるものであれ、個人によるものであれそのコードに対する責任をプログラマが負っていることは事実です。プログラマが企業ハードウエアに対応するデバイスドライバをIBMやNECのような企業が作ってオープンソースとしてコントリビュートしているケースでも、個人が何かのコードをコントリビュートした場合でも、です。対価は金銭とは限らないのは言うまでもありませんが、とにかくそれに対しその「責任を果たす」ということを、コードを公開し、著作権者を銘記し、フィードバックを集約していくことなどの方法で果たしています。それを怠ると、そのコードは、他人に引き継がれるか、オルタナティブコードの出現などにより淘汰されていきます。時の経過と共に、より効果的に責任を負う著作者によるコードへと選択されていきます。別にオープンソースだから責任を果たしやすく、プロプライエタリだと責任を果たしにくいというハナシではありません。無責任なコードが永久的に許容されつづけないことをどう保証するのかについて、プロプライエタリなソフトウエアとオープンソースソフトウエアではアプローチが異なるだけです。(この部分はもう少し話したいことがありますが、今回はここで止めます。)「ソフトウエアの利用に責任を負う」?オープンソースソフトウエアによるビジネス実現に対価を得ることは構わないことになっています。プロプライエタリなソフトウエアは有償でライセンスを取得することにより、活用することができます。この局面で、インテグレータはMSのようなプロプライエタリなソフトウエアも、オープンソースソフトウエアも、どちらでも選択することができます。この場合に、MSのような主体者がないオープンソースソフトウエアに関する責任は誰がとるのか、という問題があるでしょうか?ありません。オープンソースインテグレーションの責任においては、シンプルな話、対価に対しその責任があるというのが答えです。築地で寿司を食べる場合、客はその寿司のクオリティの責任を誰に求めますか?魚自身にですか?漁師ですか?市場関係者ですか?運送業者ですか?違いますね。