カテゴリー
技術者と英語

問題のあるユーザー名登録を防ぐ英語圏のワードフィルタの実例

小片コード共有サービスの pastebin に貼られ、Hacker News で ゲーム配信サービス大手のTwitch がユーザー登録時に弾いているフィルタ部分のソースコードだ、との主張で紹介されている SQL コードは、問題のある単語をチェックするためのコードです。

CREATE OR REPLACE FUNCTION is_terrorism (VARCHAR) RETURNS BOOLEAN STABLE AS $$
 SELECT replace($1,'_','') LIKE '%did911%'
     OR replace($1,'_','') LIKE '%support%isis%'
     OR replace($1,'_','') LIKE '%isis%support%'
     OR replace($1,'_','') LIKE '%join%isis%'
     OR replace($1,'_','') LIKE '%isismember%'
$$ LANGUAGE SQL;


CREATE OR REPLACE FUNCTION is_child_exploitation (VARCHAR) RETURNS BOOLEAN STABLE AS $$
 SELECT replace($1,'_','') SIMILAR TO '%ped(o|0)(f|ph)(i|1)le%'
     OR replace($1,'_','') SIMILAR TO '%isa%ped(o|0)%'

SQL 文としてジャンルごとに定義されている関数は、イスラム国(ISIS)への参加を呼び掛ける文字列や、児童ポルノや人種差別・性犯罪やドラッグに関する英単語が含まれる文字列で True を返すようです。

また、単純な単語の一致だけではなく、それら英単語の一部の文字を数字に置き換えるなどしてチェックをすり抜けようとするものもある程度見つけるようになっていました。a を 4 にしたり、 e を3 にしたりという leetspeak と言われる変換ですね。

ユーザー登録のできるwebサービスでは大なり小なりこのようなフィルタリングを行っているとは思います。コードが Hacker News の投稿者の言う通り Twitch で使われているものかはわかりませんが、この SQL で引っかかるような文字列をいくつか入れてユーザー登録しようとしたら、エラーは出ますね。実際には JavaScript レベルでエラーにしているようなので、SQL 文のフィルタは誰かが再現したものかもしれませんし、あるいはそれぞれが同じネタ元のフィルタを参照して作られたものかもしれません。

各関数の名前からどのような性格の「悪い単語」を排除しようとしてるのかがわかります。

関数名 意味
is_terrorism テロ
is_child_exploitation 児童搾取
is_hateful ヘイト
is_harassment ハラスメント
is_violence 暴力
is_tragedy 悲劇
is_selfharm 自傷
is_sexual 性的
is_drugs ドラッグ
is_derogatory 軽蔑的
is_profanity 淫ら
is_blasphemy 冒涜
is_marijuana 大麻
is_sex_insult 性的侮辱

チェックされる単語の一つ一つは、多くが理解して気持ちのよい単語とは言えません。細かく紹介はしませんが、英語での罵倒や悪口の勉強がしたければいい教材となるやもしれません。

ワードフィルタは false positive であるスカンソープ問題も引き起こすので万能の解決法ではありませんが、海外向けにユーザー登録のあるサービスを公開する場合は対策の一つとしてこのようなフィルタを用意することも考えておかないといけないのでしょう。

カテゴリー
Uncategorized 技術者と英語

「ランダムなdigitsを示して」「左小指、左足親指、右足第4指、右人差し指、…」

数学・計算に強い検索エンジンとして知られるWolfram Alphaで、面白い検索結果が出るというツイートがありました。

「数字をランダムに48個表示して」のつもりで入力したものに対して、両手両足の指の名前がランダムに返ってきてます。

digit の2番目の意味に「手足の指」があるそうです。知りませんでした。

指を折って数えたものが数字(digit)になったから、数字より指の方が先にあった言葉なのかもしれませんね。

この結果、技術的に(technically)正しいと言えばまったくもって正しいのですが、Wolfram Alpha に求められてる結果ではなさそう。このツイートがバズったのを見て修正したのか、今は結果が出なくなってしまっていますが、下の方の「関連検索語」にはまだ「左足親指」や「右足第2指」が提案で出てきますね。

本来ほしかった結果を得たいときはどうすればいいか、ですが、48 random integers (ランダムな整数を48個)ですかね。

ヒトケタの数字を48個ほしかったのかもしれませんが。

カテゴリー
ネットのサービス

タイルを組み立てて日本語の文を作るサービス

Japanese Sentence Builder は、タイルに書かれた日本語(英語ヒントつき)を組み合わせて日本語の文章を作るという特殊なエディタです。

ブラウザ版のデモが公開されています。

左下の名詞を選ぶと、トップの助詞が選べるようになり、助詞を選ぶと、次の名詞かまたは右下の動詞を選べるようになります。

日本語タイルの下には英語で意味が書いてあるので、英語のヒントをみながら、それらしい日本語の文章を組み立てることができるというわけ。

とは言っても、日本語話者だから組み立てられるわけで、この英語のヒントだけをもって通じる日本語文を作るのも、なかなか難しそうではあります。

できあがった文章は、日英の自動翻訳で英語に変換され、組み上げた日本語の意味が通じるのかを確認することができます。

最近は機械翻訳が進歩してきているので、このような手動(を支援するソフトウェアツール)がなくても自動翻訳だよりでかなりのことができつつあるでしょうけれど、自分で外国語を身に着けたいというときは、このような支援ツールを使うことで学習が進むこともありそうです。

日本語話者にとっての英語学習もたいへんですが、逆の立場のたいへんさも想像できますね。

via Hacker News