相關文章

D91a4873b0055d04367bd5005eccd883bf082d51 經常上論壇、部落格留言的朋友,對這歪歪扭扭的字一定不陌生;這是用來分辨留言者是真人還是機器人的機制。但你也許不知道,這個東西不但可以用來擋spam,還可以用來幫助書籍的數位化。 砍也砍不完的垃圾留言,以及透過機器人大量註冊的假會員帳號,或是在網路投票中拚命灌水,這些都是網站管理員的惡夢;為了對付這些討人厭的spam行為,資訊科學界也發展出多種阻擋或過濾技術,其中一種相當有效的方式,就是利用歪七扭八的文字或數字做為檢核碼,你得分辨並正確輸入文字,才能通過檢核,順利完成po文或註冊程序。這種技術叫做CAPTCHA(Completely Automated Turing Test To Tell Computers and Humans Apart),翻成中文叫做「人類或電腦鑑別全自動圖林測試」。這是西元2000年時由卡內基美隆大學發展出來的技術,最先採用的正是Yahoo!。

關於圖林測試是什麼,以及在資訊科學上有什麼影響,可能要用很長的篇幅來說明才行;而且CAPTCHA也已被破解;不過這都不是我們的重點。我們要介紹的是CAPTCHA的另一個應用,就是用來幫助提高書籍數位化的精確度。怎麼做到的?其實這也是卡內基美隆大學研究人員的聰明點子。

人海戰術

在CAPTCHA成為許多網站用來防spam的機制後,累積了相當龐大的辨識資料,據統計,每天經由全球網友輸入的CAPTCHA扭曲字元約有二億個。一個人辨識一組CAPTCHA只要花十秒鐘,但全球網友花在解這些字謎的總時數,累加起來後一天達到15萬小時,等於是非常龐大的平行處理運算資源。

另一方面,全球有不少將人類有史以來的印刷出版品掃瞄辨識成數位文件的計畫,像是「古騰堡計畫」,以及Google的圖書搜尋服務等等。這些計畫都面臨同樣的難題:許多頗有歷史的出版品印刷品質欠佳,掃到的字元影像就像CAPTCHA的字元一樣歪七扭八;再加上電腦的辨識能力也很有限(用過OCR掃名片或文件的朋友就知道改起來有多痛苦),結果就是辨識出來的數位文件充斥亂碼,正確率偏低。


▲古籍掃瞄丟給電腦辨識,結果就是人原本看得懂的文字反而變亂碼 orz

卡內基美隆大學聰明的研究人員想到:既然每天有那麼多的人在網路上要通過CAPTCHA檢核,如果把歪七扭八的檢核字元換成同樣歪七扭八的書籍掃瞄文字,叫網友來辨識,不就可以借助大量網友的平行處理力量,來幫助提升文件數位化的正確性嗎?這便是reCAPTCHA計畫的起點。

reCAPTCHA的做法很簡單,就是把辨識失敗單字的原始影像找出來,然後放到CAPTCHA中讓網友辨識;為了確認辨識出來的單字是正確的,reCAPTCHA會放兩個單字讓你辨識:一個是真正需要辨識的扭曲單字,另一個單字則是已經經過正確辨識的扭曲單字。如果你答對已知單字的答案,reCAPTCHA就會讓你通過檢核,同時認定你對未知單字的辨識結果也是正確的。另外,reCAPTCHA還會在單字影像上加一點料,例如加上橫線並讓字體變得更加扭曲難辨,以提高被破解的難度,這樣就能確保辨識結果正確,而且都是由真正的人類提供答案。


▲1:把印刷品拿去掃瞄辨識   2:擷取辨識失敗的單字影像  3:對單字影像加料,提高辨識難度  4:變成reCAPTCHA檢查機制

接下來的問題是,要如何讓網友來幫忙辨識?卡內基美隆大學把reCAPTCHA做成一個網路服務元件,就像Youtube影片可自由嵌入任何網頁一樣,讓大家免費放在自己的網站拿去用;當需要進行人類檢核時,伺服器就會收到大家幫忙辨識的結果,這樣就能集眾人之力來改進古藉數位化的辨識精確度,目前已有超過十萬個網站安裝reCAPTCHA來擋spam,而辨識精確度也達到99.5%,遠高於任何OCR軟體的精確度。


▲原始的低品質文件


▲OCR辨識出來的結果,看了會想哭吧?


▲經由reCAPTCHA辨識出的結果,人類還是比電腦強啦!

由於reCAPTCHA在文件辨識上的精確度是如此驚人,因此也引起Google大神的興趣。大家都知道Google有個服務叫做Google Books,就是把書籍內容掃進資料庫裡,就可以像搜網頁一樣,用關鍵字來找書的內容;Google前一陣子出錢把reCAPTCHA買下來,一方面可以提高書籍辨識精確度,同時還能增強Google本身網站的安全性,減少被spam的風險。不久之後大家上Google申請服務,可能就會看到reCAPTCHA取代現在Google使用的CAPTCHA機制了。

使用 Facebook 留言

B41eacf42507a6a5e9a32f756da78bc5?size=48&default=wavatar
1.  CloudEX (發表於 2009年9月23日 12:17)
我有一點不太懂,既然需要網路使用者來辨識正確的字,但是這又出現在某些網站的驗證碼,那它到底是怎麼驗證使用者輸入的對不對?
tenz
2.  tenz (發表於 2009年9月23日 12:37)
在 reCAPTCHA 中不是要辨識兩個單字嗎?其中一個是已經知道答案的單字,另一個是有待辨識的;你一次要回答兩個單字的答案,只要答對已知單字,就可以通過驗證;系統會假設你對未知單字的回答也是對的。

當然,未知單字很可能重覆出現在別人的驗證程序中,參考更多人的辨識結果,以提高正確率。
59b8c7354e69ffd6562e047c6780e374?size=48&default=wavatar
3.  Harry (發表於 2009年9月23日 14:46)
這種東西給中文來做應該會更適合,反正在擋spam的頁面上弄中英文各一組的CAPTCHA,這樣好像也不錯?
118ed642d310bc813c5ce34d61285f49?size=48&default=wavatar
4.  wellss (發表於 2009年9月23日 18:22)
這真的是好有創意的GOOD點子。
不過我花了一些時間在想這謎樣的問題,如只要正確輸入「已知的正確單字」,那為何連同「未知的單字」也能馬上確認結果正確?

這是不是代表必須建立一套正確單字的辨識資料庫,只要演算法拼湊結果能夠符合(針對已知單字部份:掃瞄文字→對照已知單字→演算法比對 100% 符合),那也就是代表另一組未知對照組,用同樣的演算結果便馬上能 99% 比率確認單字?

不過想想只要將辨識系統的比對演算法+龐大資料庫結合起來,便能實現這樣的事情及工程,想想還真是奇妙。

不過我見過一些很機車的 CAPTCHA 文字,就像您說的那個中間有橫線的那樣,有的還跟本分不出來= = + 結果常常都是輸入錯誤 (印像某家免空),讓我一氣跑了...。
tenz
5.  tenz (發表於 2009年9月23日 18:32)
@Harry:
如果有中文的 CAPTCHA,不會中文的人看到應該會抓狂吧... XD

@wellss:
「如只要正確輸入「已知的正確單字」,那為何連同「未知的單字」也能馬上確認結果正確?」,其實不是這樣的。正確輸入已知單字後,系統只是「假設」未知單字的辨識結果也是對的,然後這個未知單字有可能再次出現在許多網友眼前,讓大家來重覆判讀,這樣才能得到真正的正解。所以 reCAPTCHA 的正確率也還不是100%,「只有」99.5%...

發表回應

謹慎發言,尊重彼此。按此展開留言規則