なぜ「主人がオオアリクイに殺されて1年が過ぎました」なのか?

件名: 主人がオオアリクイに殺されて1年が過ぎました
差出人: 久光

いきなりのメール失礼します。
久光さやか、29歳の未亡人です。
お互いのニーズに合致しそうだと思い、連絡してみました。
自分のことを少し語ります。
昨年の夏、わけあって主人を亡くしました。
自分は…主人のことを…死ぬまで何も理解していなかったのが
とても悔やまれます。
主人はシンガポールに頻繁に旅行に向っていたのですが、
それは遊びの為の旅行ではなかったのです。
収入を得るために、私に内緒であんな危険な出稼ぎをしていたなんて。
一年が経過して、ようやく主人の死から立ち直ってきました。
ですが、お恥ずかしい話ですが、毎日の孤独な夜に、
身体の火照りが止まらなくなる時間も増えてきました。
主人の残した財産は莫大な額です。
つまり、謝礼は幾らでも出きますので、
私の性欲を満たして欲しいのです。
お返事を頂けましたら、もっと詳しい話をしたいと
考えています。連絡、待っていますね。

爆笑ですね:D。業務中に一服の清涼剤としてこんな楽しいメールを送りつけてきやがったスパム業者には、心の底から感謝の意を表したいです。
でもどうしてスパム業者はこんな意味不明なメールを送ってきたのでしょうか?私たちを楽しませるため?まさかね:D。スパム業者は己の利益のためだけに行動してるはずです。だから、このおかしなタイトルには何か意味があるはずです。その意味を自然言語処理的見地から考えてみましょう。

自然言語処理とは、人間が日常的に使う言語をコンピュータに理解させて、翻訳や検索や要約、そしてスパムフィルタなどを機械で自動的にしてもらうようにするという情報科学の一分野です。自然言語処理という名前はあまり馴染みが無いと思いますが、GoogleAmazonの検索欄に一つ二つ単語を入れるだけで適切なページや商品を紹介してくれるのは自然言語処理の技術を応用しているからであり、実は皆さんが日常的に利用している技術なのです。

GmailHotmailなど、今様々なメールサービスがありますが、どれも共通して提供している重要な機能があります。それはスパムフィルタです。スパムフィルタの原理をごく簡単に説明すると、スパムメールに特徴的な単語(特徴語と言います)を抽出しておき、届いたメールがスパムメールの特徴語を持つなら、それをスパムと判定します。よくあるのが「セックス」「無料キャンペーン」などの単語を含むメールをスパムと判定する等です。

原理はとっても簡単ですね。しかし、よく考えてみると、難点が二つあります。1つ目は、どのような単語がスパムメールの特徴語になるのでしょうか?また、それがわかったとしても、スパムメールのバリエーションは多岐に渡り、その上毎日のように新たなバリエーションが追加されていくため、どうやって特徴語の辞書をメンテナンスしていけばいいのでしょうか?という問題。二つめは、単に特徴語を含むメールを単純にスパムと判定して良いのかという問題です。「セックス」という単語は日常的なメールでもしばしば使われます(あ、非モテの皆さんは使う機会無いんでしたっけ、大変失礼しました、心よりお詫び申し上げます:D)し、「無料キャンペーン」もAmazon楽天などから届くお得情報のメールで使われます。と言うことは、単純に「セックス」「無料キャンペーン」のような単語を含むメールをスパムだと判定すれば良いわけでは無く、何らかのスコアを導入して、ある程度以上特徴語を含んでいればスパムだと判定する、という仕組みが必要なようですね。これは中々難しそう…。昔はどうやっていたのでしょうか?

昔は人手で実際のスパムメールと普通のメールを見比べて、「この単語を含んでいるとスパムっぽい」というのを人力で辞書に追加していきました。そして「セックス +0.3」「援助交際+0.7」「サッカー-0.1」などのように各単語毎にスコアを付けておきます。それをプログラムでメール文書と付き合わせて、文書の合計スコアが設定した閾値を超えたものをスパムと判定するという事をしていました。つまり、単語抽出とスコアリングを人手でやっていたわけです。非常に大変ですね!そこで登場するのが自然言語処理です。自然言語処理にも色々な手法がありますが、ここではよく使われてて実装も簡単なベイジアンフィルタを紹介します。ベイジアンフィルタとは、ナイーブベイズという手法を用いて文書を自動で分類する仕組みのフィルタです。このナイーブベイズを用いると、人間がやる作業は、普通のメールとスパムメールの実例をナイーブベイズに与えるのみになります。ナイーブベイズは与えられた例から自動で「どのような単語がどの程度含まれていればそのメールをスパムと判定するべきか」を自動で算出してくれます。単語抽出もスコアリングも自動でやってくれるなんて有難いですね。昔のようにユーザーが自力でちまちまスパムの特徴語をメーラーに設定する必要は無く、「これとこれはスパムメールだよ」と初期に与えてあげるだけで良いのです。それどころか、Webメールサービスですと、サービス提供者が大量のスパムメールの実例を抱えているため、ユーザーは何一つ作業することなく高精度でスパムフィルタリングされた結果だけを見ることが出来ます。便利な世の中ですね! ベイジアンフィルタの詳しい説明は,ここここを御参照下さい。

なるほど、現在はスパムメールの特徴語を自動で学習してくれるそうです。ユーザーは放っておいてもスパムを見る必要が無くなるわけですね。…となると、困るのはスパム業者。どんなにメールを送ってもスパム判定されてしまい、カモには届きません。スパム業者は商売あがったりです。そこでどうするか?スパムの特徴語ではない単語を用いて文書を組み立て、なおかつ援助交際や詐欺サイトに誘導するような文面を考えれば良い、となるわけです。スパム業者は自分のアドレス宛に沢山のプロトタイプを送って「ふむふむ、『セックス』や『援助交際』を沢山含むメールはスパム判定される。一回二回使うだけなら問題なしか」などとスパムフィルタを素通りするような文書はどういうものかを見出します(ちなみにこのようないたちごっこを自動で学習する手法を敵対的学習と言います)。「あれ、先週は『主人が転勤で寂しいので浮気しましょう』という文面ならスパムフィルタに引っかからなかったのに、今は引っかかるぞ。試して見ると『主人が転勤』というのはスパムだと判定されやすいようだな。では文面を変えるか。『主人が病気で〜』にしよう」→翌週→「『主人が病気』もスパムフィルタに引っ掛かるようになってしまった。え〜と、じゃあ次は『主人がトラックにはねられケガをしてしまい〜』にして〜」→翌週→…………という繰り返しの果て、スパム業者も疲れてきました。「こうなったら、我々も自然言語処理的な技術を使おう!」まぁしかし、スパム業者とスパムフィルタを作る企業とでは資本も研究力も桁が違いすぎるので、そんな大したことが出来るわけではありません。苦肉の策として編み出したのが「ワードサラダ法」です。仕組みは簡単で、ある程度文書の定型を作っておき、そこにどのような単語を埋め込むかは辞書からランダムで持ってくるというものです。例として「私は人妻です。夫が○○に△△されたため、人恋しいのです」という定型を作っておき、どこかからか持ってきた適当な辞書の単語を○○や△△に埋め込みます。そうして産み出された文書は、人間が見ると一発でおかしいとわかるのですが、スパムフィルタは基本的に文の意味情報や妥当性までチェックする機能は無く、単語マッチで判定するため、スパムの特徴語を含んでさえいなければ、中々スパムだと判定出来ません。そのため、スパムメールによく見られる特徴語を外した新しいスパムメールは、フィルタを素通りしてしまう可能性があります。

ここまで説明したらおわかり頂けたでしょうか…。そう、常識で考えて「オオアリクイ」なんて単語がスパムメールに登場するとはさしものGoogleYahoo!であっても思いつかず、また、他のスパム業者もまさかそんな単語を用いようとは夢にも思いつかず(多分ね)、オオアリクイがスパムだという実例が溜まりにくかったのです。結果、オオアリクイメールがスパムだと判定されることが遅れ、割と流行することになりました。

長々と説明してきましたが、要するに、「『主人がオオアリクイに殺された』という一文は、スパム業者のスパムフィルタとの闘いの結果産み出された努力の結晶」なのです。決してギャグでやってるわけでもなんでもなく、大まじめにこれでカモを釣ろうとしていたのです。いやはや、スパム業者の努力には頭が下がりますね、下がらねーよ糞が潰れろ。