Hatena::ブログ(Diary)

しろもじメモランダム RSSフィード

2011-09-30

reCAPTCHAの無茶振りとその理由

CAPTCHA(いわゆる画像認証)の実装の一つにGooglereCAPTCHAというものがあるが、今日の昼にこんなものに引っかかった。

f:id:mashabow:20110930202329p:image

どうやらreCAPTCHAは、a–zの26文字以外のアルファベットも出してくるらしい。面白そうだったので、更新ボタン(矢印が巴形になっているボタン)を押しまくって変なものが出てこないか探してみた。

reCAPTCHAの無茶振り・初級篇

f:id:mashabow:20110930204138p:image

thouſand。上のツイートにも出てきた ſ はいわゆる長いsで、現代風に表記すれば thousand。古い本だとわりと出てくる文字だが、知らない人は知らないのでは。

f:id:mashabow:20110930204139p:image

szybkość。ポーランド語で「速さ」の意味らしい。ś も ć も小文字に ´ が付いたんだなーというのはわかるが、入力しろと言われてもなかなか困る。

f:id:mashabow:20110930204140p:image

σχηματα。ギリシャ語で「形」の意味らしい。ギリシャ文字JISにも入っているし、「しぐま」「かい」「えーた」……で変換していけるのでわりと大丈夫かも。アクセントとか付いたら途端にあれだけども。

f:id:mashabow:20110930204141p:image

Суутэй。Сүүтэй でした。コメント欄参照。ロシア語かと思ったらモンゴル語らしい。こちらのキリル文字もJISに入っているので、まだちょっとは馴染みがある。といってもギリシャ文字と違ってそれぞれの文字の名前までは覚えていないので、「きりる」で変換して探した。

reCAPTCHAの無茶振り・中級篇

f:id:mashabow:20110930214618p:image

雪竇(せっちょう)。北宋の禅僧に雪竇重顕という人物がいたらしい。漢字圏の人ならまだ対応のしようがあるが、非漢字圏の人にとってはハードル高そう。

f:id:mashabow:20110930214619p:image

CH3SC6H5メチルフェニルスルフィド。化学式まで出てきた。

f:id:mashabow:20110930214620p:image

こちらは構造式の一部。どうやって入力しろと。

f:id:mashabow:20110930214621p:image

何かのマーク。というか文字ですらないのでもう無視していいよね(´・ω・`)

reCAPTCHAの無茶振り・上級篇

f:id:mashabow:20110930220915p:image

طرق。アラビア文字が出てきた。

f:id:mashabow:20110930220916p:image

לֹא-ידע であってるのかなぁ。ヘブライ文字はよくわからん。

f:id:mashabow:20110930220917p:image

これは जातिधमी でいいんだろうか。デーヴァナーガリー文字はもっとわからん。文字表とにらめっこして苦労して入力したわりには自信がない……。→いただいたコメントによるとこちらは जातिधर्माः だそうです。難しい。

f:id:mashabow:20110930220918p:image

xE0E*0。終いには数式まで出てきた。

なぜreCAPTCHAは無茶な要求をしてくるのか

ここまでいろいろなものが出てくると、ではなぜそうなっているのかが気になってくる。で、理由を調べようとしたところ、reCAPTCHAの公式ページにそのまま仕組みが解説されていた。

以下、これを元に簡単な説明をしたい。

世界全体では、1日に2億回もCAPTCHAによる認証が行われているらしい。1回の解読には10秒もかからないが、塵も積もれば何とやらで、1日あたり150,000時間分ぐらいの労力がCAPTCHAに費やされている計算になる。

で、これってなんかもったいなくね?という発想からできたのがこのreCAPTCHA。書籍のデジタル化にあたってはOCRが使われるが、コンピュータも万能ではないのでどうしても読み取れない箇所が出てくる。その読み取れない単語をCAPTCHAの問題に使い、人間に解読してもらおうというアイデアだ。

だがしかし。正解がわかっていない単語の画像を問題に使ったら、回答が正しいかどうか、コンピューター側には判断する術がない。これではそもそもCAPTHAにすらなっていないではないか。これを解決するために、reCAPTCHAでは単語の画像の「ペア」を使っている。

f:id:mashabow:20110930204138p:image

reCAPTCHAの画像のペアは、片方が既知の画像(何と書いてあるか正解がわかっている画像(を歪ませたもの))、もう片方が未知の画像(OCRで読み取れなかった画像)からなっている。そして回答者に画像の単語をスペース区切りで入力させ、次のようにして正解かどうかを判断している。

  • 回答された単語のペアの中に、既知の画像の単語が含まれているか?
    • 含まれている場合:
      • 既知の画像が何という単語か答えられた
      • →回答者は人間だろう(→認証成功)
      • →未知の画像に対する回答も信頼できそうだからとっておこう
    • 含まれていない場合:
      • 既知の画像が何という単語か答えられなかった
      • →回答者はbotだろう(→認証失敗)
      • →未知の画像に対する回答は信頼できないから捨てよう

このようにして、未知の画像に何と書いてあるか、人間が読み取った結果を集めることができる。なおreCAPTCHAでは、1つの未知の画像を何回も使いまわして出題している。同じ未知の画像に対して人間の回答を多数集め、精度を高めているわけだ。現在、reCAPTCHA は New York Times と Google Books のデジタル化に利用されている。

このような仕組みがわかれば、「なぜreCAPTCHAは無茶振りしてくるのか」に対する答えも簡単に見出せる。reCAPTCHAで出てくる画像は書籍から切り出したものであり、しかもその片方はOCRで読み取れなかったものが入っている。よって、ラテン文字以外で書かれた単語が出てきたり、そもそも単語じゃなかったりというような、人間にとって読みづらい画像が容赦なく出てくることになるというわけ。

reCAPTCHAの回答時にほんのちょっと楽する方法

最後に、ささやかながらちょっとした裏技(?)を。

上で解説したように、reCAPTCHAでは「既知の画像の単語を読み取れたか」で認証の成功/失敗を決定している。すなわち、未知の画像に対して何と答えようとも、既知の画像に対する回答が合ってさえいれば認証が通るのだ。reCAPTCHAでは既知の画像にのみ歪みがかけられているので、歪んだ画像だけ読み取って入力し、歪んでいない未知の画像は無視して適当に「a」とでも答えておけばよい。

冒頭で「biſhop が bishop で通った」というツイートを採り上げたが、「bishop」だろうが「biſhop」だろうが「aaa」だろうが「ほげ」だろうが、実は何でも通ってしまう。ヘブライ文字だのアラビア文字だの、無茶振りされたときももちろん同様。

追記ブコメでご指摘をいただきました。

anigoka エロソムリエが一言

いやいやそもそもそっちは読む必要ねぇし、「a」とかも入れなくていいんだってば

試してみたらその通り、既知の画像の単語だけの入力でも認証にパスするようです。ありがとうえろい人!

ここにあるreCAPTCHAでぜひとも試してみてほしい。Correct! と出れば認証成功だ。

pleistpleist 2011/10/01 17:44 キリル文字のところですが、「у」ではなく「ү」(Cyrillic Small Letter Strait U)なる文字があるようですね。

mashabowmashabow 2011/10/01 18:09 ご指摘ありがとうございます。
モンゴル語のアルファベットには「у」とは別に「ү」があるんですね。知りませんでした。
どうりで「Суутэй」でググってもあんまりヒットしないわけだ…

nooyoshnooyosh 2011/10/02 21:40 デーヴァナーガリーは

जातिधर्माः jaatidharmaa

(逐語訳でbirth - law;サンスクリット語起源のカースト制度の用語)ではないでしょうか。

iiの右の記号ではなく、r + m の子音結合 + aa の記号ですね。コロンに見えるのはヴィサルガでこれもデーヴァナーガリーの一つです(たぶんこの文脈では、サンスクリットで単数主格を表しています)

参考までに:http://en.wikipedia.org/wiki/Devanagari#Devan.C4.81gar.C4.AB_in_Unicode (Biconsonantal conjuncts)

mashabowmashabow 2011/10/02 21:58 詳しい解説ありがとうございます。
アラビア文字が難しいなんてよく言われますが、こちらも慣れてないと難しいですね。
コロンっぽいのもデーヴァナーガリーだったとは……考えてもみませんでした;

hosohoso 2011/10/03 23:00 無茶ぶりが来た時は似てるアルファベットをいれると通るって感覚がなんとなくあったのですが、
未知の部分についてはそもそも考慮してなかったんですね

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証