読者です 読者をやめる 読者になる 読者になる

しろもじメモランダム

文字についてあれこれと。

reCAPTCHAの無茶振りとその理由

文字認識

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

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

reCAPTCHAの無茶振り・初級篇

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

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

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

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

reCAPTCHAの無茶振り・中級篇

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

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

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

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

reCAPTCHAの無茶振り・上級篇

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

anigoka エロソムリエが一言
いやいやそもそもそっちは読む必要ねぇし、「a」とかも入れなくていいんだってば

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

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