研究メモ

疑問

  1. Bayes方式のスパムフィルタを用いて、個人のメッセージを他人のフィルタを用いることの有効性は有効か。
    1. Bayes方式のスパムフィルタでは、通常、単語の出現頻度に関する情報(辞書)を学習する。辞書だけでなく、スパムの判定に用いる閾値も学習できるのではないか。(これは恐らく正しいが実証の必要がある)
    2. 他人の辞書を用いて自分のメッセージをフィルタリングする場合、もし前項が事実であれば、他人の辞書を用いつつ、閾値は学習した方が有効性が高いかもしれない。というか、前回の実験での結果が思わしくなかった原因は、スパムフィルタの基本的な性能が低かったことに加えて、この点についての配慮がなかったためかもしれない。
  2. Aの辞書(DA)を用いてBのメッセージをフィルタリングできるとはどういうことか?
    1. AはDAを用いて、メッセージを評価し、評価の指標として閾値tAを用いる。Bは、DAとtAをそのまま用いるよりも、BのためにDAを用いてtBを学習させた方が効果が高いかもしれない。
  3. 多くの人々(P = {A, B, C, ...})のスパムフィルタとして利用できそうなフィルタを持っている人物Aが見つかった場合に、共有フィルタはどのように構成すればいいか。
    1. Pたちの辞書を合成して、全員の総意を表すような辞書DPを作成し、DPを用いて各自が閾値を学習すればいいかもしれない。この時点で、どれだけの人がDPを利用できなくなるかという点は興味深い。

協調型Bayse式フィルタのアイデアを実証するための実験

  1. 1,000人の仮想ユーザについてスパムフィルタ(=辞書)を生成する。
  2. 仮想ユーザのペア(A, B)について相互のフィルタを利用して閾値を学習し、相互のフィルタの利用可能性を調べる。利用可能性としては、自己のフィルタと比較して、ほぼ遜色のないフィルタであれば利用可能と判断できるものとする。
  3. 利用可能性に関するグラフ(A が B のフィルタを利用可能なら、A → B)を作成し、それをクラスタリングする。
    1. 本当なら神のクラスタリング*1をすべきだが、とりあえず以下のヒューリスティクスを適用する:前述のグラフにおいて入力次数の最も大きいもの(ボス)を取り出し、そのノードに入力辺を通して隣接するノード(ボスの配下)をグラフから削除する。この作業をグラフが空になるまで繰り返す。
    2. ボスたちの入力次数の大きさ(すなわち配下の人数)をプロット(rank vs. degree)する。直感的には羃分布になると予想される。
  4. ボスが率いる配下が小さい場合、ボスが見つからない人についてはそもそも協調型フィルタを提供することの意味が問われるかもしれない。仮にこういうグループを無視したら、全体の性能はどこまで向上するだろうか。(一部の変な人をサポートするために多くの人々が)
    1. 一定のrankより大きなボスたちに対するフィルタの生成を無視すれば、共有フィルタの数を削減することができる。
    2. 無視するrankとその結果、フィルタサービスを利用できなくなるユーザ数の関係(cut-off rank vs. #users)をプロット
    3. 実験用のメッセージ集合を用いて、recall/precisionを計測する。結果をどのように示すのがよいか?*2

今後の予定

  1. (実験)協調型フィルタの時系列的な安定性に関する実験
  2. 性能劣化の際のフィルタの共有方式の再構成のアルゴリズムの提案および実験(実験はシミュレーションシステムではなく、support 関係の時系列的な変化のデータをもとにできるはず)

*1:サーベイ

*2:要検討