分詞是中英文NLP差異最廣為人知的壹點。我們都知道英文的單詞之間天然存在空格來分隔,因此在進行英文文本處理時,可以非常容易的通過空格來切分單詞。例如英文句子:
DataGrand is a Chinese company
可輕松切分為DataGrand / is / a / Chinese / company (文本用/表示詞匯分隔符)。
中文在每句話中間是不存在分隔符的,而是由壹串連續的漢字順序連接構成了句子。現代漢語裏表達意思的基本語素是詞而不是字。例如“自然”,拆為“自”和“然”都不能單獨表意,兩個字合並組成的詞才能有準確的意義,對應英文單詞是Nature。因此在我們使用計算機技術對中文進行自動語義分析時,通常首要操作就是中文分詞(Chinese Word Segmentation)。中文分詞是指按人理解漢語的方式,將連續的漢字串切分為能單獨表義的詞匯。例如中文句子:
“達觀數據是壹家中國公司。”
讓計算機來處理,第壹步需要切分為“達觀數據/是/壹家/中國/公司”這樣的詞串的形式,然後再進行後續的理解和處理。
如何正確的根據語義完成中文切分是壹個挑戰性的任務,壹旦切詞發生失誤,會導致後續的文本處理產生連鎖問題,給正確理解語義帶來障礙。為了快速準確的切分好中文,學術界迄今有超過50年的研究,提出了很多方法。中文切詞常見方法裏既有經典的機械切分法(如正向/逆向最大匹配,雙向最大匹配等),也有效果更好壹些的統計切分方法(如隱馬爾可夫HMM,條件隨機場CRF),以及近年來興起的采用深度神經網絡的RNN,LSTM等方法。
由於漢語語法本身極為靈活,導致歧義語義時常發生,給正確完成中文分詞帶來了很多障礙。如例句“嚴守壹把手機關了”所示,按照語義理解,正確切分方式為“嚴守壹/把/手機/關了”,而算法有誤時容易切分為“嚴守/壹把/手機/關了”。
更困難的是,有些時候兩種切詞方法意思都對,例如“乒乓球拍賣了”,切分為“乒乓/球拍/賣了”和“乒乓球/拍賣/了”本身都可行,必須要依賴更多上下文來選擇當前正確的切分方法。類似的還有“南京市長江大橋”、“吉林省長春藥店”等等。如果把“市長”“省長”等切出來,整句話的理解就偏差很多了。常見歧義類型包括交叉歧義(Cross Ambiguity)和組合歧義(Combination Ambiguity)等,在語義消岐方面近年不斷有國內外學者提出新的解決思路,來解決漢藏語系的這個特定問題。
此處順便壹提,和中文類似,日文句子內部同樣缺乏天然的分隔符,因此日文也同樣存在分詞需求。日文受漢語語法的影響很深,但同時又受表音語法的影響,明治時代還曾興起過廢漢字興拼音的運動,行文上漢字和假名混雜,好比中英文混血兒。業內比較知名的日文分詞器有MeCab,其算法內核是條件隨機場CRF。事實上,如果將MeCab的內部訓練語料由日文更換為中文後,也同樣可以用於切分中文。
隨著深度學習技術近年來在NLP領域成功的應用,壹些seq2seq學習過程可以不再使用分詞,而是直接將字作為輸入序列,讓神經網絡自動學習其中的特征,這在壹些端到端的應用中(如自動摘要、機器翻譯、文本分類等)確實省略了中文分詞這壹步驟,但是壹方面還有很多的NLP應用離不開分詞的結果,如關鍵詞提取、命名實體識別、搜索引擎等;另壹方面切分所得的詞匯也可以和單字壹起作為特征輸入,用以增強效果。因此分詞仍然是工程界進行中文處理時的壹項重要技術。
二、英文語素和中文偏旁的使用
英文單詞的提取雖然比中文簡單的多,通過空格就能完整的獲取單詞,但英文特有的現象是單詞存在豐富的變形變換。為了應對這些復雜的變換,英文NLP相比中文存在壹些獨特的處理步驟,我們稱為詞形還原(Lemmatization)和詞幹提取(Stemming)。
詞形還原是因為英文單詞有豐富的單復數、主被動、時態變換(***16種)等情況,在語義理解時需要將單詞“恢復”到原始的形態從而讓計算機更方便的進行後續處理。例如“does,done,doing,do,did”這些單詞,需要通過詞性還原統壹恢復為“do”這個詞,方便後續計算機進行語義分析。類似的:“potatoes,cities,children,teeth”這些名詞,需要通過Lemmatization轉為“potato,city,child,tooth”這些基本形態;同樣“were,beginning,driven”等要轉為“are,begin,drive”。
請註意詞形還原通常還需要配合詞性標註(pos-tag)壹起來進行,以確保還原準確度,避免歧義發生。因為英文中存在壹些多義詞的情況,例如calves就是個多義詞,即可以作為calf(名詞,牛犢)的復數形式,也可以是calve(動詞,生育小牛)的第三人稱單數。所以詞形還原也有兩種選擇,需要按實際所表示的詞性來挑選合適的還原方法。