Hatena::Grouprekken

murawaki の雑記

2009-06-10

隠語を使うならひらがなで短く

「違法・有害情報の検出技術」の話題。以前専門外の人から質問されたときにうまく答えられなくて、ずっと頭に残っていた。頭の中が整理できていないので、思うところをぽつぽつと書いてみるテスト

どこから始めたものか迷うが、具体例があると議論しやすい。ちょうど、産経の記事「ネット違法書き込み 隠語で摘発逃れ」に具体的な隠語の例が挙がっていて参考になる。*1

隠語を使う理由は、「掲示板の運営業者やプロバイダー、捜査当局が、定期的に違法な用語の検索をかけている」が、「隠語であれば検索の“網”をかいくぐる可能性が高い」からだそうである。検出は、現状では相当人力に依存しているようだが、一応自動化を念頭に考察する。

そもそも、彼らが達成すべき目標は「潜在的な顧客のアクセス機会を最大化しつつ、監視者のアクセス機会を最小化する」というものだろう。いかにも両立が厳しそうな目標。両者を分離するためには、顧客と監視者の間に何らかの違いが必要だが、それは何なのだろうか。費やす時間や持っている知識だろうか。この方面から攻めるには私の現状把握が不十分。とりあえず、顧客はとても見つけにくいページも頑張って探し出せると仮定して、とにかく監視者が見つけにくくすることを考える。

次に、監視者側の作業を整理する。監視者のタスクは2段階に分割できる。

  1. 単語レベルでの検索による候補の列挙
  2. 文脈を考慮した候補の絞り込み

例えば、覚醒剤関係のページを集めてくるとする。まずは「氷」で検索をかけてマッチしたページを集めてくる。*2これだけでは、マッチするページに覚醒剤と無関係なものが多すぎる。そこで、次に実際に覚醒剤と関係のありそうなページを絞り込む。具体的にどうするのだという疑問が当然出てくる。漠然と「前後の文脈等を解析する」と説明されるが、要素技術は文書分類や WSD (word sense disambiguation) なのだろう。*3

では、どうすれば監視を潜り抜けられるか。とりあえず思いついた検出の落とし穴は三つ。

  1. NGワードへの登録漏れ
  2. 検索漏れ
  3. 絞り込み段階での漏れ

NGワードへの登録漏れ。つまり、そもそも監視者が問題の隠語を知らないことを期待する。産経の記事によれば、隠語使いは登録漏れに期待しているようだが、監視者が本腰を入れたら終わりだ。

検索漏れ。例えば検索に Google を使うなら、取得できるのはせいぜい上位 1,000 件だから、そこに入らなければよい。一つの方法は、一般的な言葉に特殊な意味を持たせる。「氷」や「クリスタル」などがこれに当たる。こうした単語で検索しても、覚醒剤関係のページはまず出てこない。Google は記号を無視するから「¥」や「○」も有効だろう。反対に、「揺頭丸」や「シャブ」などは一度NGワードに登録すれば、精度よく対象ページを収集できそうだ。良い隠語ではない。

一般的な単語を使う場合は、監視者が独自にクローリングしている場合でも、絞り込み段階での漏れが期待できる。「氷」を含むページの集合のうち、覚醒剤に関係するものはごくわずかだろうから、頑張って候補を絞り込んでいるうちに漏れる可能性が高い。絞り込み段階での失敗は、文書分類や WSD の失敗が考えられる。この手の技術は完成度が微妙なので割と失敗しそうだが、どういうときに失敗するかといった一般的な傾向は知らない。むしろ、前処理の形態素解析でこけるとふんでいる。

文書分類や WSD は、一般的に、文書を直接扱わず、文書から抽出した単語の列や集合を扱う。*4ここで問題となるのは、ある単語が文書中に出現しているかがそもそも自明でないこと。有名な例に「京都」で文字列マッチングすると「東京都」が引っ掛かって困るというものがある。他にもいろんな例があったはずだが思い出せない。ともかく、計算機に文字通り機械的に列挙させたら全然関係のない単語がマッチする。そうした山のような候補の中からそれらしい単語列を選び出すのが形態素解析

形態素解析でこけそうなのは、くだけた文章を対象に開発されていないから。日本語の形態素解析の精度は公称99%だけど、それはあくまで新聞記事を対象とした場合。汚いテキストを与えたら解析に失敗するのは目に見えている。新聞記事だと「みwwwなwwwぎwwwってwwwきwwwたwww」なんて書かないから。

一般的な表現は無視して、NGワードが切り出せればよいとする。形態素解析は辞書が命だから、正しく解析しようと思ったら辞書整備が欠かせない。でも、産経の記事に載っている例はどれも辞書登録なしで解析できそうだ。例外は「ひゃっこいの」ぐらい。「氷」や「クリスタル」は登録済みだし、「サポ」のようなカタカナ語や「∬」のような記号は、辞書に載ってなくても簡単なルールで切り出せる。

実は、難しいのはひらがな語。それも短いの。例えば、「サポさがしてます」からなら簡単に「サポ」が切り出せるけど、「さぽさがしてます」だと「さぽ」を認識できない。*5単語が認識できなければ、文書分類も WSD もやりようがない。念を入れる場合には、監視者はNGワードの自動収集をやるかもしれないから、単語を単独では使わず、必ず上の例のように文中に埋め込めばよい。

*1:他には、NICT が「インターネット上の違法・有害情報の検出技術の研究開発」を委託研究として公募 (報道発表研究計画書) している。

*2:「氷」ではあまりに一般的すぎるから、実際には他のキーワードと組み合わせて検索してそうな気がする。

*3:現在の WSD はおもちゃすぎて隠語の検出は困難だと思う。この問題も気が向いたら整理したい。

*4:文書分類では中には文字列ベースでやる研究もある。WSD は知らない。

*5:辞書登録すればいいだろうが、短いひらがな語の場合、生起コストをちゃんと決めないと副作用があるかもしれない。「ひゃっこいの」ぐらい長ければ、適当なコストでも問題ないだろう。