講到數據清洗,無非那幾樣東西,這裡也就不再引用網路文獻累贅說明了。這篇文章主要用數據清洗的幾個方向來檢查一下中研院的中文分詞語料庫有哪些問題,中研院分詞語料庫是指那個只有分詞而沒有詞性標註的語料庫(非詞性標註的有這些問題,詞性標註的也逃不掉),一般分為「訓練集、測試集」。訓練集約有七十萬多句的規模,測試集則約有一萬四千多句規模,兩者合併仍然是七十幾萬句的規模。
這篇文章能帶你的收穫將超乎你的想像,除了可以避免你或你所在的公司浪費無數時間、金錢在一些沒有意義的事情上面虛耗(譬如調參數、重新訓練,採用錯誤的機器學習方法或架構),也可以讓你或你的公司在獲得相關知識之後,能更正確的理解當前的環境與制定出更好的市場戰略。
當然,這些內容估計很多收費的NLP教程是不會提到的,而其主要原因就在於這些人缺乏相關的經驗與知識,以及意識不到其重要性甚至存在。內容很簡單,沒有複雜的數學、統計學概念、公式,就是一些很基礎,影響巨大,卻又容易被人輕忽的東西!
至於中文分詞語料庫有什麼用處?中研院如此簡介:
可能的應用範圍:
- 資訊檢索
- 機器翻譯
- 語言分析
- 語言了解
- 訊息抽取
- 自然語言人機介面
這也就是說,這些範圍如果使用到了牽涉到分詞的技術,就都會受到分詞精確度的影響。(有些可以選擇不用,而使用諸如Bert類技術。)
以下就分別從「規範、重複、錯誤、標準」四大類方向來檢驗中研院語料庫的質量。
規範類
標點符號的規範
中文標點符號雖然只有幾種,但在萬國碼(unicode)之中卻存在很多近似的圖案。有些輸入法的作者對此並不熟悉,不知道該規範使用,有些基於預測的輸入法也未給出規範的用法,加上使用者以方便為主隨意打出的標點。都可能造成語料本身存在很多非規範的標點符號。
顯然中文標點符號應該規範,而且是非常容易做到的事情。很顯然,可以規範而不規範是一個很重大的疏失,而其根本原因在於語料庫的規劃者未曾思考過類似的問題。
詞彙的規範
有些詞存在異體形式,而異體形式又是因為存在異體字而來。譬如「沉默、沈默」,「沈」是「沉」的異體字。但要進行異體形式的規範化並不容易,最簡單的無非是用一個對照表,等分詞結束後進行替換(分詞前進行強制替換只會造成更多錯誤,因為上下文偶合的情況可能很多。)。但這種簡單粗暴的做法雖然方便,卻無疑會引發一些錯誤產生。譬如如果有一個叫做「沈默」的人,就可能被替換為「沉默」。替換之後的結果自然是錯誤的。當然,相比之下,除非你的語料庫之中收了一本小說,剛好有「沈重、沈默」等人,否則其影響是可以忽略不計的。
以「沉重、沈重」這兩個詞彙來說,其分佈結果如下:
找出含有以下詞彙的句子:沉重
共找出:52句!
找出含有以下詞彙的句子:沈重
共找出:78句!
除此外,中研院的語料庫還存在簡體字,這也屬於規範化問題,因為簡體字相對於繁體字也屬於異體字的範疇。但很多簡體字是很容易找出並替換的。譬如:
包括 靈感 來自 楊貴妃 的 華清池 浴 與 中藥 枸杞 、 冬虫夏草 等 口味 共 四 種 ,
才 發現 丹紐 僅 攜帶 一 只 旅行箱 ,
例如 服務 那 些 公益 機構 才 可 折抵 役期 、 役男 必須 提出 有效 的 証明 文件 等 。
日本 溫泉 協會 推荐 的 湯 之 花
隨便拿一個簡體字表掃一下也能找出很多,只要不是「歸併字」(譬如「後、后」被簡體字歸併為「后」。),都是很容易找出與直接替換的。
很多錯誤看似很小,在大數據宣傳的早期,宣傳者都信心滿滿的說這點小錯在大數據面前不值一提!可惜的是,每一種小錯雖然都可能只牽涉到十筆乃至千筆資料,但一種類別的小錯可能有成百上千個實例,譬如就詞彙的規範化來說「沉默、沈默」、「公布、公佈」、「家具、傢俱」等等等總數成百上千、實例可以觸及數萬乃至數十萬(看規模而定)。這類非規範化的詞彙與用字隨便都能牽扯到數萬個句子。每一個都很小,但加起來的量就可以覆蓋到很大的範圍從而造成非常多的困擾!當然也必然讓機器學習的結果大打折扣!
重複類
重複類的錯誤也就是指語料庫中存在重複的句子。這又分為訓練集、測試集本身存在的重複,以及兩個集互相重複的句子。(所以如果沒有分,就是單一語料庫中存在的例子)這裡僅就訓練集自身重複來說,其他的讀者可以自行檢查。因為只要未標註的訓練集包含了重複的句子,那麼這樣的疏漏自然很容易蔓延到其他集之中,包含標註的語料庫。這裡所謂的句子重複是指單純的句子重複,也就是兩個句子分詞結果一致的重複。這種東西是很好檢測出來的,很難理解為什麼收費的、出自中研院的產品還會存在這麼低級的錯誤!往後延伸,連低級的錯誤都會存在,高級的能意識到嗎?
僅就測試集而論,不計重複部分共14015句,重複部分共414句。刪除的句子如下。重複的句子,解對一個就解對全部,沒有意義,當然得刪除。譬如:
-------------------------------
不過,
此外,
匯市交易冷清,
外銀主管指出,
外銀主管指出,
如果日圓匯率能夠持穩,
據了解,
不過,
他指出,
-------------------------------
至於訓練集的資料已經遺失,也懶得再統計了。
錯誤類
錯誤又分為幾種,一種是詞彙錯誤,一種是無意義的符號(整個句子沒有可以理解的東西),一種是句子無意義,一種是分詞錯誤。分詞錯誤又分兩種,一種是分詞的句中存在雜訊,譬如存在連續的分詞間隔符號;一種是分詞錯誤,也就是分出了不能正確解讀的句子。
錯誤的詞彙導致的錯誤
去 追求 獨立 自主 的 格人 ,
其他還有諸如「彫刻、雕刻」等等等,錯誤的詞彙很多,就不再一一羅列了。
最扯的一點是什麼?那就是測試集中出現亂碼的地方,CKIP的解法竟然是一致的。這些錯字以及其所形成的錯誤詞彙不僅會佔據空間、瓜分頻率(頻率、向量),更重要的是假設原本的正確詞彙的集合對應了一個中文上下文偶合的子集,由於一大堆的錯誤詞彙摻入了詞彙庫之中,將使這個上下文偶合的子集的成員或稱可能性大增。而CKIP之所以能「精準的」對這樣的句子斷詞,乃在於這個集子本身也是所謂的「訓練集」而非「測試集」。以以下的實例而論,「芘捸C」是百分之一百的亂碼(僅舉一例),而且是中文與英文混雜的亂碼。按理說,中文後接英文的狀況很少見,常見的是英文後接中文的。但CKIP卻神奇的分詞正確了,說是神奇真是一點也不神奇。說穿了,就是過擬合,說穿了,就是所謂「測試集」也是CKIP「訓練集」的一部份罷了。
而且以下的錯字,無一例外的可以通過中研院自己的錯字偵測系統,也就是被當成對的意思。這一切都表明了這些錯字、錯詞都已經是CKIP的一部分了!
芘捸C 在 PSI 大於 100 的 主要 污染物 別比率 為 懸浮 微粒 占 71.5 % ,
芘捸C(FW) 在(P) PSI(FW) 大於(VJ) 100(Neu) 的(DE) 主要(A) 污染物別(Na) 比率(Na) 為(VG) 懸浮(VA) 微粒(Na) 占(VJ) 71.5%(Neqa) ,(COMMACATEGORY)
(9, 12, 'CARDINAL', '100')
(27, 32, 'PERCENT', '71.5%')
(88) 由 社區 、 機關 、 學校 等 從事 回數 工作 。
垃圾 年 成長率 由 八十年度 的 10 % 降至 八十四年度 的 2 % ,
顯見 垃圾 減量 及 資源 回數 已 見 成效 。
37.,想改月租費又拾不得那一千二的設定費,(這個錯字依然可以通過中研院的錯字偵測系統)
37(Neu) .(PERIODCATEGORY) ,(COMMACATEGORY) 想(VE) 改(VC) 月租費(Na) 又(D) 拾不得(VC) 那(Nep) 一千二(Neu) 的(DE) 設定費(Na) ,(COMMACATEGORY)
(14, 17, 'CARDINAL', '一千二')
其中「回數」是「回收」的錯誤、「拾不得」是「捨不得」的錯誤。但都已經被當成對的了,這樣搞出來的校對系統,你敢用?今天進行實測,首先用這一句丟入中研院的校對系統,得到以下結果:
「拾不得」無法被改正。如果做略為改動「想換月租費又拾不得那一千二的設定費」把「改」替換成「換」,無法找出錯誤。
接著我自己編了一句簡單的(就別為難這種系統了),「怎麼就拾不得離開了」,得到以下結果:
錯誤被揪出來了。這樣不穩定的結果,你能信任嗎?
由於中研院採用雙向LSTM技術,所以額外多試幾句:
數句合併,越後面改的幅度越大,依然沒有揪出錯誤。
把句子改成「想改月租費又捨拾不得那一千二的設定費」,找不出錯誤。
再改成「想改月租費又拾捨不得那一千二的設定費」,給出如下錯誤建議:
除此外,測試集的詞庫也存在非常多的「非詞」,也就是不是詞彙的字串。譬如「得很、給我」,以及類似「GORY)經驗」這樣的亂七八糟的字串,其中有些可能源自於沒有分詞好的人工失誤,也普遍存在於測試集的分詞結果之中。
連續的分詞間隔符號
兩個全型空白,全形空白為其斷詞分隔符號。這些算是小雜訊。但一大堆的小雜訊湊在一起就變成大雜訊。譬如:
1. 02 ) 28803636 。
菁芳園 04 ) 8223535 。
長壽元 是 可 治 虛冷 、 疲勞 甚至 痔瘡 的 日本 百補湯 NT 200 台隆 ) 。
無意義的句子
無意義的句子,有可能正確有可能不正確,屬於雜訊。
他 一點 也 不 懷疑 她 是 賺門 而 如 的 假貨 。
LibraryandInformationTechnologyAssociation
--------------------------------------------
類似以上的整句都是全型英文或者符號的句子,也不該放入語料庫之中。
標準類
關於「標準」的影響有多大,上一篇文章已經提到。這裡可以用實例來說明。
就跟錯誤類一樣,標準也是多層次存在的問題,既存在於詞彙的判斷本身,也存在於句子的分詞標準之中。詞彙的判斷標準不一,自然導致分詞的標準不一。
譬如:
而 從 以上 這 些 觀點 分析 ,
更 別 說 有 哪些 主流 的 流行 色彩 了 。
協議 那些 事 要 做 那些 事 不要 做 ,
「這些、哪些、那些」明顯是一類的東西,卻有不同的分類標準。其他例子如:
而是 應該 要 與 同學 們 好好 相處 ,
同學們 還 在 學習 基礎 識圖 、 製圖 時 ,
經 法務部長 陳定南 多次 要求 停工 ,
他 在 那裡 潛水 多 次 從 沒 發現 此 現象 ,
那麼當我們已經知道了這個訓練集分詞不一的結果之後,我們自然好奇中研院中文分詞系統究竟會選擇哪一個來分詞,因此下面除了給出這種分詞標準不一的句子,也給出一些CKIP自己的分詞結果。讀者一比對就知道貓膩所在!
譬如「還要」這種類型的字串根本沒有詞性「兼類」的問題。以下是CKIP的實際分詞案例:前三例是「還要」、後三例是「還+要」,請問標準在哪?一般使用者怎麼知道什麼時候會拆成「還要」?什麼時候又會拆成「還+要」?不知道,怎麼運用?
比 郭子乾 等 人 加起來 約莫 25萬 還要 多 。
母親 每 天 還要 帶 三 餐 ,
她 還要 勞累 到 什麼 時候 才 能 休息 ?
還 要 包括 一 群 喜愛 小說 的 該 刊 讀者群 。
還 要 招收 外國 學生 來 台 學習 漢語 文化 ,
還 要 再 加上 抗生素 的 使用 。
CKIP相關解法:CKIP的解法完全就是測試集的解法,一一對應。
比(P) 郭子乾(Nb) 等(Cab) 人(Na) 加起來(VB) 約莫(Da) 25萬(Neu) 還要(Dfa) 多(VH) 。(PERIODCATEGORY)
母親(Na) 每(Nes) 天(Nf) 還要(Dfa) 帶(VC) 三(Neu) 餐(Nf) ,(COMMACATEGORY)
她(Nh) 還要(Dfa) 勞累(VH) 到(P) 什麼(Nep) 時候(Na) 才(Da) 能(D) 休息(VA) ?(QUESTIONCATEGORY)
還(D) 要(D) 包括(VK) 一(Neu) 群(Nf) 喜愛(VL) 小說(Na) 的(DE) 該(Nes) 刊(Na) 讀者群(Na) 。(PERIODCATEGORY)
還(D) 要(D) 招收(VC) 外國(Nc) 學生(Na) 來(VA) 台(Nc) 學習(VC) 漢語(Na) 文化(Na) ,(COMMACATEGORY)
還(D) 要(D) 再(D) 加上(VC) 抗生素(Na) 的(DE) 使用(VC) 。(PERIODCATEGORY)
又如「共有」也不屬於「才能、都會」一類的字串。但CKIP有如下分歧的分法。試問其標準何在?
(87) 水 污染 防治 台灣 地區 共有 河川 129 條 ,
過去 共有 七十八 次 的 發射 經過 ,
今年 學測 共有 八十七 名 身心 障礙 生 報考 ,
共 有 七五 人 入選 ,
共 有 三千五百卅八 人 感染 愛滋 ,
他們 的 成員 共 有 四十多 位 ,
CKIP:CKIP再次一一對應測試集。
(87)(Neu) 水(Na) 污染(VC) 防治(VC) 台灣(Nc) 地區(Nc) 共有(VJ) 河川(Na) 129(Neu) 條(Nf) ,(COMMACATEGORY)
過去(Nd) 共有(VJ) 七十八(Neu) 次(Nf) 的(DE) 發射(VC) 經過(Na) ,(COMMACATEGORY)
今年(Nd) 學測(Na) 共有(VJ) 八十七(Neu) 名(Nf) 身心(Na) 障礙(Na) 生(Na) 報考(VC) ,(COMMACATEGORY)
共(Da) 有(V_2) 七五(Neu) 人(Na) 入選(VJ) ,(COMMACATEGORY)
共(Da) 有(V_2) 三千五百卅八(Neu) 人(Na) 感染(VJ) 愛滋(Na) ,(COMMACATEGORY)
他們(Nh) 的(DE) 成員(Na) 共(Da) 有(V_2) 四十多(Neu) 位(Nf) ,(COMMACATEGORY)
又如「年、年代、年度、年次」前面的數字是接續還是斷開,標準不一,以至於使用者不可能知道其規律究竟何在!嚴格說來,這種失誤完全可以用「正則表達式」掃出。不過測試集沒有做到,而CKIP的分詞也是標準不一,參考以下CKIP分詞:
一九五O 年 後 大陸 及 北半球 氣溫 略 有 下降 ,
從 一九九○年 波斯灣 戰爭 結束 以來 ,
厲莉 與 其 夫婿 在 一九九一年 到 澳洲 另外 開 了 一 家 厲家菜 餐廳 ,
CKIP:完全一一對應測試集,錯的也解出一樣的。
一九五O(Neu) 年(Nf) 後(Ng) 大陸(Nc) 及(Caa) 北半球(Nc) 氣溫(Na) 略(D) 有(V_2) 下降(VA) ,(COMMACATEGORY)
從(P) 一九九○年(Nd) 波斯灣(Nc) 戰爭(Na) 結束(VHC) 以來(Ng) ,(COMMACATEGORY)
厲莉(Nb) 與(Caa) 其(Nep) 夫婿(Na) 在(P) 一九九一年(Nd) 到(VCL) 澳洲(Nc) 另外(Da) 開(VC) 了(Di) 一(Neu) 家(Nf) 厲家菜(Nb) 餐廳(Nc) ,(COMMACATEGORY)
CKIP以及測試集有「很多、很少、更多、更少」,但沒有「更低、更高」,後者都是拆開的。試問前者結合的標準何在?使用頻率比較高?「更高」使用兩次,「更少」也使用兩次,顯然說是依靠頻率顯然不對。說是純粹主觀判斷是比較可信的。於是一個本來簡單的規則,因為這些字串的存在而變得複雜起來,不利於統計(譬如對於「很、更」等的統計,難以得出客觀的語言現象數據以供分析),也難以依靠這個達到很好的精確度,要往問答系統上運用,那也是自找麻煩的一種做法。以下都是一些相關的標準不一的例子。
同 路段 之 客運 有 很多 家 ,
同(Nes) 路段(Na) 之(DE) 客運(Na) 有(V_2) 很多(Neqa) 家(Nc) ,(COMMACATEGORY)
中央政府 資源 及 人才 較 多 ,
以 木材 材料 較多 ,
較少 爆炒 的 菜 ;
就 意味 著 會 有 人 獲得 較少 的 資源 ,
CKIP:這裡沒有一一對應。
中央(Nc) 政府(Na) 資源(Na) 及(Caa) 人才(Na) 較多(VH) ,(COMMACATEGORY)
以(P) 木材(Na) 材料(Na) 較多(VH) ,(COMMACATEGORY)
較少(D) 爆炒(VC) 的(DE) 菜(Na) ;(SEMICOLONCATEGORY)
就(D) 意味(VK) 著(Di) 會(D) 有(V_2) 人(Na) 獲得(VJ) 較少(VH) 的(DE) 資源(Na) ,(COMMACATEGORY)
為什麼 夜晚 還是 那麼 冷 呢 ?
」 「 你 穿 的 那麼少 ,
CKIP:這裡又一一對應了。
為什麼(D) 夜晚(Nd) 還是(D) 那麼(D) 冷(VH) 呢(T) ?
」(PARENTHESISCATEGORY) 「(PARENTHESISCATEGORY) 你(Nh) 穿(VC) 的(DE) 那麼少(VH) ,(COMMACATEGORY)
不可避免的詞彙
有些詞,我們是能避免收入詞彙庫之中的,譬如「技術人員、太陽能電池」,但有些詞,它本身就存在多種可能,是無法從詞彙庫「收與不收」來加以解決的,譬如「才能、都會、國中」,其分開與合併的形式都各有意義,因此詞彙庫收詞無法避免收入「才能、都會」。如此一來,單純使用字典分詞法的最大匹配就永遠無法正確對牽涉到「才能、都會」的句子進行分詞,而類似「才能、都會」都是極高頻率的常見字串,如此一來,錯誤率必然大增!
語料庫收詞標準不一,起因於分詞標準不一,如「二 月、十幾 號」有分開的也有合併的,應採用一致的標準。從語料庫提取的十四萬多組之中,共有九千多組(9027組)在實際分詞中呈現標準不一的詞彙,這些詞彙所牽涉到的句子多達四十五萬句左右(總數六十幾萬句,由原七十幾萬句刪除重複而得。)。換句話說,當分詞系統分到這些詞卻採用統一的標準來分時,會得到很低的分數。以「技術人員」為例,分合幾乎各佔一半。
技術人員 22 24
令 人 感受到 一 種 屬於 技術人員 的 無華 風采 。
並 很 快 成為 該 所 的 技術人員 。
研究 與 技術人員 雙方 在 此 一 合作 過程 中 ,
其 主要 目的 係 讓 所有 美國 科學家 及 工程 技術人員 能 共享 資料 ,
行政 或 技術人員 ,
由於 沒 能 正確 的 認識 技術 人員 與 支援 學術 工作 的 人 在 學術 機構 扮演 重要 角色 ,
即 需要 許多 何 先生 型 的 技術 人員 協助 ;
此外 也 獲得 物理所 訓練有素 之 多 位 技術 人員 的 支持 。
合理 地 納入 支援 研究 的 技術 人員 ,
在 編制 內 合理 地 納入 支援 研究 的 技術 人員 ,
結論
結論是中研院中文分詞語料庫充滿難以修復且為數眾多的雜訊與弊端,其中包括重複句子、不同分詞結果的重複句子、分詞標準不一的詞彙、錯誤的詞彙、未規範的中文標點符號、一大堆的錯字、漏字、簡體字、不能理解的句子等等等。
中研院的分詞系統之所以能對語料庫中的錯誤做出正確分詞,那是因為這些都是其「訓練集」的一部分。那麼當我們回過頭來看一下中研院相關的宣稱:「CkipTagger表現遠高於中國的結巴,中研院在中文斷詞準確度可達到97.49%,相較之下,中國的結巴只有90.51%。」(新聞出處:https://www.ithome.com.tw/news/132838)各位能想到什麼?一大堆分詞標準不一的東西,為什麼準確度能達到「97.49%」?也就是說,遇到A句就用A分法、遇到B句就用B分法,說穿了不僅僅是過擬合的問題,還是把「測試集」與「訓練集」一起訓練的結果!不管有沒有分「測試集」與「訓練集」,這些都是其語料庫以及其用來給出準確度的根據。
最後一個需要特別提醒的地方,當你或你的公司拿這樣的語料庫來測試自己的分詞系統,你覺得會如何?可能的其中一種結果是,其實你的分詞系統面對真實語料的表現比實際還好,但因為你不知道你所用來比對的分詞結果存在這麼多問題,於是你或你的老闆以為不好,然後你就去調東調西,然後在與這個語料庫比對的過程中得出了比較好的結果,卻不知道可能在面對真實語料時,你反而把好的給調糟了!確實,你永遠不可能知道!
可惜的是中研院的名頭太大,以至於跟我合作過的組織,甚至還有主張一定要用這個充滿各式各樣錯誤的語料庫的分詞結果來衡量我的分詞系統的準確度的。說實在話,只要把這個語料庫中的重複語料全部刪除,個人的初代技術就能很好的達到100%的準確率(也就是每一句都分出一模一樣的分詞)以及很好的泛化效果(也就是改動其中某些等類詞彙,效果不變。)。不過當然,那種意義是不大的。只是告訴個位從業者,針對這種充滿謬誤的語料庫所得出的分詞準確率幾乎是毫無意義可言的!當前的中文分詞系統面對真實語料的一般水平就是70%左右而已,遇到特殊領域的語料,自然就更低了。
當然,錯誤、標準問題不是中研院中文語料庫所特有的問題,而是當前學界與業界普遍無法解決的問題,也就是說當前各位所能接觸到的語料庫都存在這些問題。只是或多或少的問題而已。所以當有什麼研究論文或者什麼企業又說他們在這些語料庫的分詞中得出了多高的準確率,幾乎可以一笑置之了。
有了以上的認知,相信各位所控管的語料庫中的錯誤率可以降到歷史新低了。但標準問題,只能說當前台面上的理論是無法解決的。這一點以後講到語言學的部分會再詳細介紹。
以上只是淺淺而論,上面講到的很多問題,其實也早就有解法了(有些上面已經提到),也早就被設計到個人的分詞系統之中。只是這篇文章已經太長,這個坑以後有機會再填吧!
看完以上的文章,我估計很多從業人員應該能清楚意識到,以上的問題以及其所導致的後果遠遠不是「調參數」就能解決的!