多言語スパムフィルター
多くのスパムフィルターは英語向けに作られています。そのため英語以外のスパムはすり抜け、英語以外の普通のメールは文字体系を理由にスパム扱いされます。Spam Scannerはその両方を避けるように作られています。
単語を読む#
単語はIntl.Segmenterで抽出します。これはUnicodeの単語境界の規則で、中国語、日本語、タイ語、ラオ語、クメール語、ビルマ語には辞書を使います。中国語の文は、二度と繰り返されない1本の長い文字列ではなく、恭喜、获得、大奖のような単語になります。
偽装は数える前に元に戻します。単語の中の不可視文字、ラテン文字の単語に混ざったキリル文字やギリシャ文字(pаypal)、文字の代わりの数字(v1agra)、数学用文字や囲み文字(𝐅𝐑𝐄𝐄)です。それぞれの偽装は、それ自体も手がかりになります。
知らないものをスパム扱いしない#
公開されているスパムのデータセットには、英語以外のハムよりもはるかに多くの英語以外のスパムが含まれています。そのため単純な分類器は、アラビア語や韓国語のテキストそのものをスパムだと学習してしまいます。Spam Scannerは言語を手がかりとして使わず、各単語をその言語自体のスパムとハムの件数と比べて重み付けし、ある言語で学習したハムが少ないほど「判定不能」に寄せます。
同梱モデルが一度も見たことのない21言語のSMSメッセージでのテストでは、これにより中国語、アラビア語、韓国語、日本語、ヒンディー語、ベンガル語、ウルドゥー語、トルコ語、ウクライナ語、スウェーデン語の誤検知がゼロになりました。
あらゆる言語のスパムを捕まえる#
- 単語を読まない検査:類似ドメイン、欺瞞的なリンク、実行ファイル、マクロ、SPFSender Policy Framework。あるドメインのメールの送信を許可されたサーバーを列挙するDNSレコード。、DKIMDomainKeys Identified Mail。メッセージに付ける署名で、送信者のDNSで公開された公開鍵を使って検証します。、DMARCあるドメインを名乗るメールがSPFとDKIMのアライメントに失敗したとき、受信側がどう扱うべきかを示すDNSのポリシー。、ブロックリスト。
- 言語モデル:判定不能のメッセージ向け。Qwen 3.5やGemma 4などのオープンモデルは140〜200言語を読みます。エンドツーエンドテストでは、中国語、アラビア語、韓国語、ヒンディー語、タイ語のスパムとハムを実際のモデルで確認しています。
- 自分のメール:ある言語でそれぞれ数百通のメッセージがあれば、自分のメールで学習したモデルはその言語で十分な確信度を持ちます。
spamscanner scan message.eml --llm ollama --llm-model qwen3.5:4b
spamscanner train --spam ~/Maildir/.Junk --ham ~/Maildir/cur --out my-model.json一部の言語だけを受け入れるには、--allow-language en,deを指定します。それ以外の言語だと確信をもって検出されたメールに点数が加算されます。