一文詳解中英文在NLP上的10大差別點

做者 | 達觀數據創始人 陳運文web


人類通過漫長的歷史發展,在世界各地造成了不少不一樣的語言分支,其中漢藏語系和印歐語系是使用人數最多的兩支。英語是印歐語系的表明,而漢語則是漢藏語系的表明。中英文語言的差別十分鮮明,英語以表音(字音)構成,漢語以表義(字形)構成,印歐和漢藏兩大語系有很大的區別。算法

640?wx_fmt=png

儘管全世界語言多達5600種,但大部數人類使用的語言集中在圖中的前15種(覆蓋全球90%以上人羣)。其中英語爲母語和第二語的人數最多,近14億人,是事實上的世界通用語。其次是漢語,約佔世界人口的23%。英語和漢語相加的人數佔世界總人數的近一半,所以處理中英文兩種語言很是關鍵。編程

640?wx_fmt=png

人工智能時代,讓計算機自動化進行文字語義理解很是重要,普遍應用於社會的方方面面,而語言自己的複雜性又給計算機技術帶來了很大的挑戰,攻克文本語義對實現AI全面應用有相當重要的意義。相應的天然語言處理(Natural Language Processing,NLP)技術於是被稱爲是「人工智能皇冠上的明珠」。網絡

中國和美國做爲AI應用的兩個世界大國,在各自語言的自動化處理方面有一些獨特之處。接下來筆者對中文和英文語言特色的角度出發,結合本身的從業經驗來概括下兩種語言下NLP的異同點。ide


1、中英文分詞方式不一樣

分詞是中英文NLP差別最廣爲人知的一點。咱們都知道英文的單詞之間自然存在空格來分隔,所以在進行英文文本處理時,能夠很是容易的經過空格來切分單詞。例如英文句子:svg

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應用離不開分詞的結果,如關鍵詞提取、命名實體識別、搜索引擎等;另外一方面切分所得的詞彙也能夠和單字一塊兒做爲特徵輸入,用以加強效果。所以分詞仍然是工程界進行中文處理時的一項重要技術。


2、英文語素和中文偏旁的使用

英文單詞的提取雖然比中文簡單的多,經過空格就能完整的獲取單詞,但英文特有的現象是單詞存在豐富的變形變換。爲了應對這些複雜的變換,英文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(動詞,生育小牛)的第三人稱單數。因此詞形還原也有兩種選擇,須要按實際所表示的詞性來挑選合適的還原方法。

640?wx_fmt=png

詞幹提取(Stemming)是英文中另外一項獨有的處理技術。英文單詞雖然是句子中的基礎表義單元,但並不是是不可再分的。英文單詞內部都是由若干個詞素構成的。詞素又分爲詞根(roots)和詞綴(前綴prefix或後綴suffix),而詞根的原形稱爲詞幹(stems)。例如單詞disability,dis-就是表示否認意思的經常使用前綴,-lity是名詞經常使用後綴,able是表示「能力」的詞幹,這些詞素合併在一塊兒就構成了單詞的含義。

英文的詞素種類很是多(最經常使用的有300多個),不少源自拉丁語和希臘文。提取詞素對理解英文單詞的含義起着很是重要的做用,例如semiannually這個單詞,可能有的朋友並不認識,若是經過詞素來看:前綴semi-表示「一半」的意思,詞幹annul表示年,-ly是副詞後綴,semiannually這個單詞的含義是「每半年進行一次的」。

Ambidextrous,heterophobia,interplanetary,extraterritorial等這些看着很複雜的詞彙,經過拆解詞幹的方法能很方便的把握單詞含義,對人類和對計算機來講都是如此。常見Stemming方法包括Porter Stemming Algorithm, Lovins Algorithm和Lancaster(Paice/Husk) Algorithm。目前大部分英文NLP系統都包括詞形還原(Lemmatization)和詞幹提取(Stemming)模塊。(陳運文)

相比英文,中文裏是沒有詞幹的概念的,也無需進行詞幹提取,這是中文NLP中相對簡便的一塊。但在中文裏有一個相近的概念是偏旁部首。和英文中「單詞不懂看詞幹」相似,中文裏「漢字不識看偏旁」。例如「猴、狗、豬、貓、狼」這些漢字,顯然都是動物名詞。當出現漢字「狁」時,即便不認識也能經過部首「犭」猜出這是一個動物名稱,且發音相似「允」字。再好比「木,林,森」這些字都和樹木相關,數量還遞增。「鎖、錫、銀、鏡、鐵、鍬」都和金屬有關。「採」字和手抓植物有關。「囚」字和「孕」字就更直觀形象了。

借鑑英文中詞幹提取的方法,不少人天然會馬上想到:是否咱們拆分中文漢字的偏旁部首,做爲特徵輸入,也能更好的幫助計算機理解中文語義呢?學術界確實也有人作過此類嘗試,可是總體收益都不像英文詞幹分析那麼明顯,這背後的緣由是什麼呢?

筆者認爲,其緣由首先是經常使用漢字的數量遠比英文單詞要少,相比英文單詞數量動輒數萬計,加上各類先後綴和詞形變換數量更多,中文漢字最經常使用的才過千個。由於字少,每一個漢字的意思多,這些漢字的含義經過上下文來獲取的語義描述信息足夠充分,拆分偏旁後額外再能添補的信息做用很是小。即使對罕見字來講偏旁確實能額外補充特徵,但由於它們在平常文本中出現頻次太少,對總體文本語義理解的做用頗有限,只有在一些專業性文書的應用上可能起少許幫助。

其次是漢字通過數千年的演化,再加上簡化字的使用,不少字形和含義已經發生了巨大變化,偏旁未必能準確表達字的意思,甚至使用偏旁可能還會引入一些噪聲特徵。第三是現代漢語裏表義的基本單元是多個漢字構成的詞,而不是單字。這和英文中表義單元是單詞徹底不一樣。所以對單個漢字的偏旁處理對整個中文NLP起到的做用很是輕微,並未成爲中文NLP裏經常使用的作法。


3、詞性標註方法的差別

詞性是語言學的一個概念,根據上下文將每一個詞根據性質劃歸爲特定的類型,例如n.名詞 v.動詞 adj.形容詞 adv.副詞等就是最多見的幾類詞性。中英文的詞性儘管總體類似,例如表達一個物品(如蘋果Apple,火車Train)一般是名詞,而描述一個動做(如跑步Run,打開Open)通常是動詞,但在不少細節上存在差別。若是計算機可以對每一個詞彙的詞性進行正確的識別,無疑對加強語義分析的效果有幫助(注:一樣在seq2seq裏詞性並沒必要須,可是對詞性的正確理解仍然有其特訂價值)。

在NLP裏有技術分支稱爲詞性標註(Part-Of-Speech tagging, POS tagging),中英文各自有其特色。

640?wx_fmt=png

其一是英文中有一些中文所沒有的詞性。這些詞性大量存在,給語義理解帶來了很好的指引做用。其中最典型的就是英文特有的兩個詞性:一是冠詞,二是助動詞。中文裏沒有冠詞一說,在英文中冠詞(Article,通常簡稱art.)也是詞性最小的一類,只有三個:不定冠詞(Indefinite art.)、定冠詞(Definite art.)和零冠詞(Zero art.)。如英文中無處不在的單詞「the」就是定冠詞,the後面一般會緊跟着出現句子的關鍵名詞+介詞短語。例如「Show me the photo of your company」,經過定冠詞the的指示,很容易的定位本句話的關鍵實詞是photo。

相似的,前面例句「DataGrand is a Chinese company」裏「a」這樣的不定冠詞也能夠很好的指示出賓語「company」。這些大量出現的冠詞雖然是虛詞,自己並無明確含義,但在NLP中用於定位句子中的關鍵實詞,判斷實詞種類(是否可數,是否專有名詞等),進而識別出句法結構(後面還會詳細介紹)等,起到了很大的指示做用,也下降了計算機進行語義理解的難度,於是這方面英文比中文有先天優點。

助動詞(Auxiliary Verb)也是英文特有的現象,助動詞的做用是協助主要動詞構成謂語詞組,如am, is, have, do, are, will, shall, would,should, be going to等都是常見助動詞,在英文句子中也大量存在,和冠詞用於指示主語賓語相似,助動詞對識別主要動詞(Main Verb)和謂語會起幫助。

其次,英文在詞性方面的劃分和使用更嚴謹,詞彙在變換詞性的時候會在詞尾造成豐富的變化。例如-ing、-able、-ful、-ment、-ness等都對確認詞性給出具體的提示。名詞中還會進一步區分可數名詞、不可數名詞,在詞尾用-s、-es來區分。動詞也一樣會存在發生時態的指示,過去式,如今時,將來時等很是明確,所以在英文語法中幾乎沒有詞性混淆不清的狀況發生。

而中文的詞性則缺少相似英文這樣的明確規範。中國著名的語言學家沈家煊先生在著做《語法六講》中就曾提出「漢語動詞和名詞不分立」的觀點,將確認漢語詞性的問題描述爲「詞有定類」則「類無定職」,而「類有定職」則「詞無定類」。和英文中名詞、動詞、形容詞三大類詞彙相互獨立的「分立模式」不一樣,中文更相似「包含模式」,即形容詞做爲一個次類包含在動詞中,動詞自己又做爲次類被名詞包含,並且這個詞性的轉換過程很是微妙,缺少表音語言中的先後綴指示。

例如「他吃飯去了」中「吃飯」是動詞,只須要句式稍加變換爲「他吃飯很差」,此時「吃飯」就搖身一變成名詞了。「熱愛編程」、「挖掘數據」中,「編程」、「挖掘」等詞,既能夠是名詞也能夠是動詞。形容詞也有相似的狀況,如「活躍」是個常見的形容詞,經常使用句爲「他表現很是活躍」。但有時也能夠變身爲動詞「他去活躍氣氛」,還能變爲名詞「活躍是一種行爲習慣」。可見漢語語境的變化給詞性帶來很是微妙的變化。

漢語沒有英文的屈折變化的特色,不像英語能經過靈活的詞尾變化來指示詞性變化,漢語這種一詞多性且缺少指示的特色,給計算機詞性標註帶來了很大的困難,業界對詞性的標準以及標準測試集也很不完善。不少具體詞彙的詞性甚至讓人工來研讀都模棱兩可,讓算法自動來識別就更難了。

例如:「他很開心」、「他逗她開心」、「他開心不起來」、「他開心的很」、「開心是他很重要的特色」,這裏「開心」的詞性讓人來判斷都很難搞明白,甚至存在爭議。而反觀英語裏一個詞被標爲動詞仍是名詞幾乎不存在爭議。對這些模糊的狀況,一些中文語料標註庫裏乾脆用「動名詞vn」、「形名詞an」等來標記,擱置爭議,模糊處理。

在目前中文NLP詞性標註中,「名動形」糊在一塊兒的特色仍然沒有找到特別好的處理手段,也給後面的句法結構分析,詞彙重要性判斷,核心關鍵詞提取等語義理解課題帶來了干擾。


4、標點符號和字體特徵

在天然語言處理應用中,很容易被忽略的是標點和字體等信息的利用。尤爲學術界研究核心算法時通常都會忽略這些「次要」信息,大部分學術測試集合乾脆是沒有字體信息的,標點也不講究。可是在實際工程應用中,這些信息能起不小的做用。而英漢語在其使用方面也存在一些差別。標點(如?!:——。等)和字體(字母大小寫,斜體,粗體等)雖然自己沒有具體語義,但在辨識內容時起重要的引導做用。不妨讓咱們想像一下,若是把我這篇文章裏全部標點、分段、標題字體等都去掉,讓人來閱讀理解本文內容,難度是否是馬上會加大不少?如果換成計算機來讀那就更麻煩了。

在英語中(尤爲是書面語中),逗號和句號的使用有明確規範,一句話結尾要求必須用句號符「.」,而且下一句話的第一個單詞的首字母要求大寫。英文中從句很是多,從句之間要求用逗號「,」鏈接,以表示語義貫通。不只如此,當一句話的主謂賓完整出現後,若是下一句話也一樣是一個完整句子,則兩句話中間或者須要用連詞(如and, or, therefore, but, so, yet, for, either等)鏈接,或者必須用句號「.」分割,若是中間用「,」且沒有鏈接詞,則屬於正式文書中的用法錯誤。如:

The algorithms and programs,which used on the website, are owned by the company called DataGrand, and are well known in China.

這裏出現的標點和大小寫字體是良好的句子語義指示符,既分割不一樣句子,也在句子內部分割不一樣語義,這些規範給英文NLP處理創造了較好的環境。

中文標點的使用則沒有這麼強的規範。事實上中文標點在中國古代官方文書中一直不被採用,僅扮演民間閱讀中的停頓輔助符的角色。直到1919年中華民國教育部在借鑑了西方各國標點規範後才第一次制定了漢語的12中符號和使用方法,建國後在1951年和1990年兩次修訂後逐步成型。由於歷史沿革的緣由,這些對標點的使用規範更多偏向於指導意見,而不是一套強制標準。

例如對逗號和句號什麼時候使用,並不像英語中有特別嚴格的界定。漢語的分句較爲模糊,意思表達完之後雖一般用句號,但用逗號繼續承接後面的句子也並不算錯,只要整篇文章不是極端的「一逗到底」,即便語文老師在批閱做文時也都不會過度對標點較真,而平常文章中標點的使用更是爲所欲爲了。

與此同時,英文裏專有名詞用大寫或者斜體字體來區分,首字母大寫等用法,在中文中也不存在。NLP處理中,中文標點和字體使用的相對隨意給句法分析也帶來了巨大的挑戰,尤爲在句子級別的計算機語義理解方面中文比英文要困難不少。

除了上述不利因素,中文也有一些獨特的標點帶來有利的因素。例如書名號《》就是中文所獨有的符號,感謝這個符號!書名號能很是方便的讓計算機程序來自動識別專有名詞(如書名、電影名、電視劇、表演節目名等),這些名詞每每都是未登陸詞,若是沒有書名號的指引,讓計算機程序自動識別這些中文專名的難度將加大不少,而這些專名詞彙偏偏都體現了文章的關鍵語義。

例以下面這段新聞若是讓計算機來閱讀:「因爲流浪地球的內容很接近好萊塢大片,所以影評人比較後認爲不只達到了2012的水平,並且對比星際穿越也絕不遜色。」要求計算機自動提取上面這句話的關鍵詞會很是困難,由於裏面有不少未登陸詞,對「2012」的理解也會有歧義(時間詞?or電影名?)

而正由於咱們中文有書名號,迎刃而解:「因爲《流浪地球》的內容很接近好萊塢大片,所以影評人比較後認爲不只達到了《2012》的水平,並且對比《星際穿越》也絕不遜色。」。除了書名號,漢語的頓號(、)也能很好的指示並列關係的內容,「達觀天天下午的水果餐很豐富,有桃子、葡萄、西瓜和梨」,這些並列的內容能夠很方便的被計算機解讀。

英文則沒有書名號和頓號等,而是採用特殊字體(例如加粗、斜體、大寫,各不相同,沒有強制約定)等形式來標識出這些專有名詞。所以在處理英文時,這些字體信息起很重要的做用,一旦丟失會帶來麻煩。

值得一提的是,在平常聊天文字中,標點符號和字母使用的含義產生了不少新的變化。例如對話文本中「。。。。。」每每表達出「無語」的情緒。「?」和「???」前者是疑問,後者更多表達震驚。還有 ? ^o^/ ORZ等各種的符號的變換使用,給開發對話機器人的工程師們帶來了不少新的挑戰。


5、詞彙粒度的處理方法差別

詞彙粒度問題雖然在NLP學界被討論的很少,但的的確確NLP實戰應用中的一個關鍵要點,尤爲在搜索引擎進行結果召回和排序時,詞彙粒度在其中扮演關鍵角色,若是對其處理不恰當,很容易致使搜索質量低下的問題。

咱們先看中文,詞彙粒度和分詞機制有很大關係,先看個例子:「中華人民共和國」這樣一個詞,按不一樣粒度來切,既可大粒度切爲:「中華人民,人民共和國」,也可進一步切出「中華,人民,共和國」,而「共和國」還能夠進一步切爲「共和,國」。通常咱們把按最小粒度切分所得的詞稱爲「基本粒度詞」。在這個例子中,基本粒度詞爲「中華,人民,共和,國」4個詞。甚至「中華」還能繼續切出「中/華」也有表義能力(這個後面還會詳細分析)。

爲何分詞須要有不一樣的粒度呢?由於各有做用。大粒度詞的表義能力更強,例如「中華人民共和國」這樣的大粒度詞,能完整準確的表達一個概念,適合做爲文章關鍵詞或標籤提取出來。在搜索引擎中直接用大粒度詞去構建倒排索引並搜索,通常可獲得相關性(準確率)更好的結果。

但從事過信息檢索的朋友們想必清楚召回率(Recall)和準確率(Precision)永遠是天平兩端互相牽制的兩個因素。大粒度詞在搜索時會帶來召回不足的問題。例如一篇寫有「人民共和國在中華大地上誕生了起來」的文章,若是用「中華人民共和國」這個詞去倒排索引中搜索,是沒法匹配召回的,但拆分爲「中華人民 共和國」三個詞進行搜索就能找出來。

因此一個成熟的分詞器,須要因地制宜的設置不一樣粒度的分詞策略,而且最好還能確保在檢索詞處理(Query Analysis)和索引構建(Index Building)兩端的切分策略保持一致(陳運文)。目前學術界公開的分詞測試集合,每每都是隻有一種粒度,並且粒度劃分標準也並不一致,致使不少評測結果的高低離實際使用效果好壞有必定距離。

在中文分詞粒度裏,有一個很是使人頭疼的問題是「基本粒度詞」是否可繼續拆分的問題。就比如在化學中,一般約定原子(atom)是不可再分的基本微粒,由原子來構成各種化學物質。但若是進一步考慮原子可分,那麼整個化學的根基就會動搖。一樣在中文NLP領域,雖然學術界一般都默認基本粒度詞再也不可分,但在實際工程界,基本詞不可再分會致使不少召回不足的問題,引入難以解決的bad case。不要小看這個問題,這是目前限制中文語義理解的一個特別常見的難題。要解釋清楚前因後果,筆者還得從漢語的發展歷程提及。

中國古代漢語的表義基本單位是字而不是詞。我從《論語》中拿一句話來舉例:「己所不欲,勿施於人」。古代漢語一字一詞,這句話拿來分詞的話結果應該是「己/所/不/欲,勿/施/於/人」,可見所有切散爲單字了。若是用現代白話文把這句話翻譯過來,則意思是「本身都不肯意的方式,不要拿來對待別人」。現代漢語的特色是通常喜歡把單字都雙音節化,「己–>本身,欲–>願意,勿–>不要,施–>對待,人–>別人」。

能夠看出這些雙音節(或多音節)詞彙中部分蘊含着來源單字的意義。這種現象在現代漢語詞彙中比比皆是,例如「獅子」,「老虎」,「花兒」,「圖釘」,「水果」,「紅色」等,對應「獅,虎,花,釘,果,紅」等有意義的單字。而若是把這些雙音節詞做爲不可再切分的基本粒度詞的話,當用戶搜「獅」的時候,即便文章中出現了詞彙「獅子」,也是沒法被搜到的。

那麼若是將這些基本粒度詞再進一步切分呢?會切出「子,老,兒,圖,水,色」這樣存在轉義風險的詞彙(即這些單字對應的含義並未體如今原文中),帶來不少「反作用」。例如用戶搜「老」的時候,固然不但願把介紹「老虎」的文章給找出來。

與此同時,還有另外一類的狀況是有一些詞彙切爲單字後,兩個單字都分別有表義能力,如「北歐」切爲「北/歐」,對應「北部,歐洲」兩方面的意思。「俄語」切爲「俄/語」,對應「俄國,語言」,「苦笑」,切爲「苦/笑」,對應「痛苦,笑容」,以及「海洋」,「圖書」,「親友」,「時空」等都是可細分的。

還有第三類狀況是,詞彙切分後單字都不能體現原詞含義,例如「天然」,若是切分爲「自/然」,兩個字都沒有意義。相似的還有「蘿蔔」,「點心」,「巧克力」等,外來語爲多。

之因此前面提到現在中文語義分析時,基本粒度問題是一個關鍵難題,緣由是在現代漢語寫做時,既有現代雙音節/多音節詞彙,也夾雜不少源於古代漢語的單字,半文半白的現象很常見,這就一下給語義理解帶來很大的挑戰。無論是切分粒度的選擇,仍是單字和詞彙間關聯關係的提取,標題和正文語義的匹配,當面臨文白間雜時都會遇到難關。

常見的狀況爲:新聞標題爲了精煉,常常喜歡採用源自古漢語習慣的單字簡稱或縮略語。例如「中美援非模式差別帶來效果截然不同」,是選擇「中美/援非」這樣的基本切分粒度,仍是按單字表義切分爲「中/美/援/非」,對應「中國美國援助非洲」這樣的內容,是存在各自的利弊的。計算機提取文章關鍵詞時,還須要把「援—>援助,非–>非洲」還原爲詞並創建關聯才能很好的解讀處理。

目前業界並無一個公認的粒度標準,常見的幾個評測語料集合,如北大pku-test,微軟亞洲研究院msr-test,人民日報標註語料等,切分標準都有所不一樣。雖然通常廣泛採用的雙音節詞爲主的基本粒度標準,可是在應用於搜索引擎、問答對話時都會出現大量召回不足的問題。而大量採用單字做爲基本粒度詞又會引入有轉義風險的無效單字,而且還會出現運算性能等隱患。

爲了解決基本粒度詞的問題,筆者曾在百度設計開發了亞粒度詞(subterm)補足的策略,緩解了召回不足的問題,工業界還有一些其餘的同義詞關聯等方法來應對,但到目前爲止詞彙粒度問題仍然是困擾中文NLP的一個「慢性病」。近年來興起的BERT模型,利用大量文本進行Transform預訓練,填補各類粒度詞彙的語義信息,也是是一種緩解問題的辦法。

英文由於不存在切分問題,因此粒度問題只須要考慮詞組(Phrase)切分的問題。例如Harvard University,兩個單詞能夠切爲Phrase來表達一個具體機構。相比中文的從細到粗的多粒度切分要簡單不少。


6、句法結構分析方法異同

天然語言處理在詞彙級別之上是語句級別,由於語句是由一系列的詞彙排列組合後生成的。經過學習語法咱們知道句子結構是由「主謂賓定狀補」這樣的句法元素構成的。例句「陳運文去達觀數據上班,」主語是「陳運文」,謂語「上班」,「達觀數據」是狀語,說明動做發生的地點。

在句子結構方面,「英語重形合,漢語重義合」的特色體現的很是明顯。英語爲了充分體現句子中的各類承接、轉折、從屬、並列等關係,不厭其煩的準備了大量的連詞、助詞、介詞、冠詞等做爲填充劑,來補充實詞之間的縫隙,構成了不少從句、引導句。這些包含各種結構的結構,讓計算機來進行語義角色標註(SemanticRole Labeling, SRL)和語義依存分析(SemanticDependency Parsing, SDP)相對比較容易。

由於這些形式指示詞的存在,一個你們能很直觀發現的現象就是英文寫出來的句子每每都特別長,整篇文章篇幅多。而一樣的意思用中文寫出來,篇幅每每只須要英文的一半甚至更少,漢語的句子很是精煉,尤爲詩歌用短短几個字能描述出豐富的內涵——「孤帆遠影碧空盡,惟見長江天際流」,多麼洗練優美有意境。

從計算機的視角來看,偏偏由於漢語講究意合而不重形式,句子結構都比較鬆散,並無英文中那麼多的虛詞做爲實詞間的語義粘合劑,而是依賴詞彙先後順序關係,隱含表達出句子結構,因此也給計算機處理帶來了挑戰。例如「中國人工智能創業企業獲獎名單公佈」這句話裏,「中國,人工智能,創業,企業,獲獎」這一連串的名詞均是主語「名單」的定語,若是用英語來寫這句話,必定會出現形如「the…of…that…which…」這樣一系列的輔助詞來把這些名詞粘接到一塊兒,而中文並無它們。因此當咱們訓練算法去識別句子主語和定語的時候,必需要當心的判斷哪一個名詞纔是句子的真正主語所在。漢語中句子的重心每每後移,相反英語中句子主要部分前移,因此一般生成句法依存樹時中文都會自動選擇靠後的名詞。

640?wx_fmt=png

除了句子內部的輔助詞外,在句子間關係識別時,中英文都會經過特定標識詞鏈接子句間關係,例如轉折關係(雖然…可是…),假設關係(若是….就…),遞進關係(不只…並且…),因果關係(由於….因此….),英文則是because…, Although…, If…, but also… 等。在中英文中這些標識詞常常會被自動省略,例如「車站人流量大,你們要照看好本身的行李」。這裏隱含的語義爲「[由於]車站人流量大,[因此]你們要照看好本身的行李」,[-]內的詞彙被自動省略了。區別在於英文通常會省略其中一個,例如「because…, so…,」這樣的句子會省掉其中一個,中文則既能夠全省掉,也能夠全寫出,實際進行語義理解時須要額外補充處理。

目前句法依存分析在實際工程應用中並無發揮很大做用,其緣由一方面是上述一些現象致使了很難抽取獲得特別準確的句法關係結果,另外一方面是大部分NLP應用選擇了直接從詞彙或篇章級別來得到結果,省去了中間句子這層。目前業界針對長程的語義上下文關係,逐步放棄傳統的RST方法,更多傾向於利用記憶網絡(如bi-LSTM)等技術完成提煉。在聊天對話等應用方面,用句法結構來把握語義仍然是會有價值的。


7、中文英文指代消解處理

計算機進行文章內容解讀時,常常碰到指代消解(ReferenceResolution)的問題。不管是在書面文本中進行長文章解讀,仍是在對話文本中回溯前文問題,指代消解都起到很是關鍵的做用。計算機須要能像人類同樣創建起上下文間這些詞彙間的關聯關係,作到把概念串聯起來「讀懂」文章的意思。例如這句話:

「達觀數據順利入駐浦東軟件園,公司創始人陳運文表示,達觀專一於爲企業提供文本智能處理軟件系統和技術服務。他說:‘文本理解任重道遠’」

這句話裏「公司」、「達觀」、「他」這些都是指代詞,「達觀數據」、「陳運文」是真正的實體,稱爲先行語(antecedent),而「公司」、「達觀」、「他」是回指語(或稱爲照應語,anaphor)。回指語有時是代詞(如「He」、「that」、「該公司」、「上述條款」、「前者」、「被告人」等等),有時是簡稱或縮寫(如「達觀」、「CEO」、「NLP」、「WTO」),有時採用借代方法,如「白宮的態度很是堅定」,「范冰冰們的納稅狀況逐步被公佈」,「白宮」=「美國總統」,「范冰冰們」=「大陸影視演員」。

人類的閱讀能力很是強,各種指代的狀況人都能通暢理解,但對計算機來講並不簡單。在NLP領域爲此專門存在技術分支稱爲指代消解。指代消解一般又細分爲回指、預指、共指等情形,實踐中一般稱爲共指消解(CoreferenceResolution)。

640?wx_fmt=png

英文中常見指代語是專名首字母縮寫,也是表音文字特別之處。英文中專有名詞每每由多個單詞構成,篇幅長,從中抽取字母構成各種縮寫約定很是常見。縮寫一部分是行業內通用的(例如計算機領域常見的CV,DNS,CPU,NLP等),另外一些則是在文中第一次出現專名時臨時約定的。

例如一篇行業分析報告裏的句子:「High Carbon Steel (HCS) is typically producedas low carbon steel. HCS export volume in YTD 2017 reached to 6.9 millionmetric tons(MMT).」。這裏臨時性縮寫(HCS,YTD,MMT等)大量出現。這些回指語是一個新的獨立單詞(例如例子中的HCS),和原詞彙的關聯處理經過共指消解來完成。另外一類回指語是「it、which、where、there、that」等這樣的指代詞,要經過上下文依賴關係去尋找實體。

中文的縮寫一般是從實體中抽取若干漢字新構成的詞,例如北京大學簡稱北大,復旦大學簡稱復旦,XX銀行,一般簡寫爲X行,XX局長,簡寫爲X局。(陳運文)由於漢字裏單字的表義能力比英文中單獨的字母要強的多。咱們知道經常使用漢字有5000多個,而英文字母只有26個,因此中文縮寫詞更容易能讓人「望文生義」,讀懂含義。例如「高碳鋼」這個縮寫即便是外行也能猜出意思,可是HCS怕是很難直接讓人明白是啥,即漢語在縮略語的可讀性上優於英文。

正由於英文縮略語可讀性弱,且重複歧義多,因此爲了讓人能讀懂,英文裏一般都會清楚標出先行語和縮寫規則。而漢語裏除非嚴格的法律文書會前置術語表,通常文本里用縮略語時比較隨意,不少時候約定俗成,並不「提早打招呼」。例如新聞:「北大學生在剛剛結束的奧數競賽中成功摘得兩枚金牌」。若是按縮略語習慣,應該寫爲:「北京大學(如下簡稱北大)學生在剛剛結束的國際奧林匹克數學邀請賽(如下簡稱奧數)中成功摘得兩枚金牌。」

在共指消解中還會遇到的一類問題是由於語法結構致使的指向歧義的問題。例如「這張照片裏有陳運文和高翔的同事」、「那邊坐着三個公司的工程師」,這在前面句法結構解析時提到過,也一樣會影響中英文在處理共指消解時的結果。

在實際工程應用中,共指消解最經常使用到的場景是對人名、機構名、地點、條款、具體事件、關係類型等要素的指代處理。在超長文書(如證券行業的上市公司重組公告、招股說明書等)處理方面該技術也起了很大做用。平常中文的共指消解存在必定的行文規律,經過預先挖掘簡寫和指代詞表導入算法中可顯著提高效果。業界常見的共指消解方法既有傳統的規則啓發法,也有經典的統計學習、聚類算法、機率圖模型等,此外深度強化學習、長短時記憶網絡等新的Meural Mention-ranking方法也有良好的效果。


8、英漢語詞彙間關聯關係挖掘

詞彙間關係是構建語義網絡的一項基礎技術,咱們知道同義詞、近義詞、相關詞是特別常見的詞彙關係,此外詞彙的上下位(例如在生物知識網絡中Sparrow屬於Bird,Shanghai屬於China)和詞向量等在NLP處理中都很重要。和英文單詞相比,漢字的數量少得多,經常使用漢字數才2000-3000個,其中最經常使用的1000個漢字已經能覆蓋92%的書面資料了。這1000個漢字中去掉偏旁部首相似的字,獨立語素更是不到500個。在表述事物時漢語中採用字組合的方式,能夠很是方便的理解詞義而且研讀出詞彙之間的關聯關係。

而英文單詞動輒2萬-3萬個(美國成年人平均單詞量),並且意思類似的詞彙間的字母構成差別很大,因此不少狀況下若是沒見過某個單詞,很難像中文同樣大體能猜出詞彙所指的意思。請你們不查詞典猜猜limousine、roadster、saloon分別是什麼意思,再看看對應的中文意思,就能理解爲何會有這麼多英文單詞了。

咱們再用下面的這樣一些例子給你們直觀的展現英文在表述相近事物時的差別性:Chick, Rooster, Hen, Egg彼此之間從字母分佈上來看很難看出有什麼關聯,可是換成中文,對應的是小雞、公雞、母雞、雞蛋,很容易就能發現其中的規律。中文詞彙是由有意思的單字組合構成的,所以經過字就很容易觀察和理解詞彙間的關係。

相似的,小牛,公牛,母牛的英文單詞爲Calf,Ox,Cow,甚至公牛在英文中還區分閹割後的steer和沒被閹割的bull。所以漢語NLP中只須要根據動物名「雞」、「牛」、「豬」、「鴨」加上相應的形容詞就能夠知道意思了,而在英文中因爲單詞的差別沒法直接經過單詞的語素關係直接計算得到,因此爲驗證語義關係時略爲複雜一些。

640?wx_fmt=png

知識圖譜(Knowledge Graph)是理解這些詞彙間關係一種好辦法。詞彙(或稱爲實體Entity)間的關係經過挖掘大量文本、Wiki等來構建。英文詞彙間的關係不像中文這樣能讓人能觀察到,所以構建知識圖譜對英文來講很是有價值。例如spaghetti,penne,capellini,fusilli,lasagne,macaroni這些實體,經過構建出知識圖譜,才能讓計算機知道他們都屬於Pasta(意大利麪)下面的某個品類的名字。

近幾年興起的基於Skip-gram或CBOW模型的Word2Vec方法一經提出就獲得了很是普遍的應用,在實踐中好評如潮,就是由於embedding技術剛好彌補了英文中詞彙之間關係不直觀的問題,對提升計算機英文語義理解的能力起到了很好的幫助做用。相似的,中文詞向量、預訓練等技術構建好後,也帶來了總體語義分析效果的大幅度進步。漢語和英語在詞彙間關係挖掘這個方面,目前總體的算法都是相同的,區別在於漢語的詞彙間關係能夠更加顯式的被人觀察到。

畢竟,讓人來判斷hepatitis和pneumonia,Grape和Raisin,January和March,Monday和Thursday間的關係,相比分析肝炎和肺炎,葡萄和葡萄乾,一月和三月,週一和週三之間的關係,仍是要困難不少的,對計算機來講也是如此。


9、中英文省略和內容補足的處理

語境是一個微妙的概念,人類在進行文字閱讀時,不僅是看到文字內容自己,而是不自覺的會將語境相關的詞彙自動補充進入字裏行間,輔助語義理解。反之,人類在文字寫做時,會將一些重複內容省略掉,主語或賓語是最常被省略的對象。例如摘錄自合同文書的一段文字「本協議中約定了大橋建設工程的具體內容,其中乙方負責承接,丙方負責監督,以確保順利交付」。

若是讓計算機來解讀,須要把指代語補齊(用[-]表示)爲:「本協議中約定了大橋建設工程的具體內容,乙方負責承接[該工程],丙方負責監督[乙方的工做],確保[該工程]順利交付」。 書面文本還相對規範,若是是平常對話的口語文本,那麼省略更加是無處不在,以一個電商客服問答爲例:「這雙賣多少?」,「58」。「少點?」,「最低了」。「行嗎?」,「作不了哎」。若是補齊省略語,應該爲:「這雙[鞋子的價錢]賣多少?」「[價錢]少點[行嗎]?」「[價錢少點]行嗎?」

除了主謂語省略,一些很是重要的連詞也常常被省略,例如「由於…因此…,雖然…可是…,儘管…然而…」,例如:「開車不注意,親人淚兩行」,「股市有風險,投資需謹慎」,補充邏輯連詞後爲「[若是]開車不注意,[那麼]親人淚兩行」,「[由於]股市有風險,[因此]投資需謹慎」。

英文的省略習慣也存在(全世界人民都愛偷懶),例如省略主語it:「Looks as if it will snow」,省略謂語comes:「Who next?」,省略賓語thedishes:「Let ’ s do the dishes. I ’ ll wash and you ’ ll dry.」,省略連詞that「It ’ s a pity[that] she ’ s leaving」。固然英文中還有一類約定俗成的獨特簡稱(不少來自拉丁語)e.g., etc., al., i.e., viz.等。

區別在於英文書面文本中省略出現的較少,同時語義鏈接詞的省略有固定規範,例如「because…so…」要求只省其中一個。英文行文時單詞使用量比中文多,一樣的內容英文篇幅一般是中文的200%左右,也即中文1頁紙寫完的內容,若是用英文寫要2頁甚至更多。若是對比惜字如金的文言文,就更濃縮了。如「民爲貴,社稷次之,君爲輕」,10個字若是改用英文寫,沒有幾十個單詞怕是說不清楚。那麼放到省略環境下看時,漢語就比較吃虧了,由於原本就濃縮,再加上語法約束不嚴致使時不時省略,對信息的損失比較大。

從10個漢字的短句中省略2個字,和從一段20個單詞的英文句子中省略2個單詞,前者對計算機處理來講要費力很多。達觀在進行文本應用實踐中,也在想辦法主動「腦補」出這些省略語,加深對文字理解的深度(陳運文)。近年興起的文本預訓練(例如大名鼎鼎的BERT,MT-DNN等)技術經過海量文本的預訓練,對文本進行表示學習,運用transform編碼器等把這些詞句中的隱語義信息嵌入(Embedding),結合Attention機制,填補省略內容,在天然語言理解(NLU)的不少應用(例如GLUE benchmark、斯坦福閱讀推理SQuAD、SNLI、MultiNLI、SciTail)能大幅度提高效果。


10、歧義問題與子串轉義處理

雖然大部分NLP的算法都具有語言無關性(Language independent),可是在具體工程任務中仍是有不少語言相關的問題。在漢語中常常發生的一類狀況是文字子串局部轉義的問題。這個問題由於是漢語所獨有的,在英文中幾乎未曾出現,因此在天然語言處理的學術界並不做爲主流的課題被研究(由於學術界主流仍是傾向於研究語言無關性的課題和方法)。可是筆者在多年從事NLP以及搜索和推薦系統技術研發工做時,深深的感覺到子串轉義是一個很是困難卻也很是重要的漢語NLP課題。對這個課題處理水平的高低直接影響着大量的實際工程效果。下面具體闡述下該問題的定義。

前文我曾提到過漢語中單字很少(3000個漢字能夠覆蓋99%的中文文本了),因此漢語裏的詞彙大可能是由幾個漢字順序組合來造成的。這裏潛伏着一個巨大的隱患是,由於字的排列組合形式不少,因此會致使局部出現的一些組合所構成的意思,和總體詞的意思不一樣,出現歧義;或者說一個詞彙中的子串和整個詞的意思會出現很大的差別,於是也稱爲子串轉義問題。

這裏我用數學形式化的方法再來表述下:假設A、B、C分別表示三個漢字,那麼子串轉義就是指詞彙ABC的含義,和AB或者BC的含義徹底不相同。固然4個漢字或者更長的短串也相似。例如ABCD和ABC或BCD或AB、BC、CD的意思可能會徹底不一樣,這種意思「突變」的狀況稱爲子串轉義。

例如:「周杰倫」和其中的前兩個字構成的詞「周杰」顯然指的是徹底不一樣的兩我的,「蕁麻疹」和「麻疹」是兩種病,「亞健康」和「健康」的意思截然相反。這會給計算機處理帶來不少困難,尤爲在搜索引擎中,當用戶搜「周杰」或「麻疹」或「健康」時,若是結果出「周杰倫上海粉絲見面會」、或「蕁麻疹治療方法」、「致使白領亞健康的主要緣由」都是不太好的結果。咱們在搜索引擎中遇到的大量結果不相關的問題,不少都是因爲漢語中局部轉義現象致使的。

一樣,在進行關鍵詞提取、文本類似度計算、相關文章推薦等場景的時候,這些局部轉義的問題一樣也會帶來很大麻煩。例如「周杰倫上海粉絲見面會」和「周杰倫現身上海電影節」兩篇文章的內容相關度,顯然遠大於「周杰上海粉絲見面會」。

不少朋友可能會以爲這些均可以視爲命名實體識別(NER)問題,將這些專名直接切爲一個總體,就能解決上述局部轉義的問題了。其實沒這麼簡單,由於其實大量的中文詞彙裏,局部詞組合成的意思和總體詞彙是存在關聯的,若是不切開會帶來召回不足的問題。例如「消防隊」和「消防」,「上班族」和「上班」,「315晚會」和「315」等,甚至前面例子裏「周杰倫」和「杰倫」也有緊密的語義關聯。當用戶搜索詞是「消防」、「杰倫」、「315」等query時,相應的總體詞「周杰倫」、「315晚會」等所在的文章也理應被搜出來。由於明明文章裏有這個詞且意思相關,若是沒被找出來是不能被用戶接受的。經過這些例子可見正確處理漢語的字詞組合的確是一件很棘手的課題。

再舉個例子:「不能夠」這個經常使用詞,把「不可」單獨做爲子串提取出來是很是有必要的,由於和原詞意思相同。可是把「能夠」單獨提取出來就很危險,由於和原詞意思相反,單獨進行搜索匹配會致使歧義。再如咱們能夠把「阿里巴巴」裏的子串「阿里」切出來,由於不少時候用戶稱呼「阿里」就是指「阿里巴巴」,可是把「裏巴」或「巴巴」切出來則是不合適的。

究竟哪些子串詞彙和原詞意思相同相近?哪些又會發生轉義?這須要計算機更智能的進行判斷才行,目前咱們已經想了一些方法去解決,例如經過字的共現頻率等進行處理,但離完全解決漢語裏子串轉義的問題還有距離。

除了子串轉義外,漢語中其餘歧義的狀況也是比比皆是,例如「我去上課了」、「她看病去了」(主動和被動不明,致使沒法區分老師仍是學生,病人仍是醫生)、「要多少有多少」(沒法區分核心語義是多仍是少)、「咬死了獵人的狗」、「喜歡山區的孩子」(沒法區分狗或孩子是主語仍是賓語)。由於中文不是靠詞彙的變形變換來體現修飾、主被動等關係,而是靠順序組合來體現,所以在中文NLP的各個環節,從分詞、詞性、句法、指代,到局部子串處理等,都會帶來歧義理解的問題。

英文中也存在歧義問題,最多見的狀況是英文多義詞致使的。例如「He went to the bank」既能夠理解爲「他去了銀行」,也能夠理解爲「他去了河岸邊」,「The doctor saw the Indian dance」,單詞Indian既能夠視爲形容詞「印第安人的舞蹈」,也能夠是名詞「印第安人+跳舞」,還有英文中不定式致使的歧義,如「Not many books filled the shelves」,能夠理解爲「書架上沒有幾本書」或者「要放滿那些書架不用不少書」。

其實全部的人類語言都存在着各式各樣的歧義的問題,咱們看到各個民族所流傳的笑話裏不少都是拿這些歧義語義來打趣的。不一樣語言處理歧義的具體方法不一樣,但總體思路都是將歧義句放到句子上下文裏來解讀,引入更多語境信息來正確得到意思。

能夠說計算機進行語義理解的結果,某種程度上就是在和各類各樣的歧義作鬥爭的過程。打個比方,天然語言處理的過程就像是讓計算機拿着用上下文語境拼湊出的一張殘缺的地圖,撥開雲遮霧繞的文字迷霧,越過歧義所埋下的一個個大坑,逐步接近語義真相的過程。


中英文NLP差別總結

中文和英文這兩類全球使用人數最多,影響力最大的語言,有各自鮮明的語言特點,在計算機進行天然語言處理領域也有各自獨樹一幟的地方。本文從語言特色的角度出發,從10個方面分析了中英文在天然語言處理上的差別。隨着全球化的發展,中英文在不斷相互影響,相互滲透。例如中文中有大量的外來語來自英文,沙發、咖啡、巧克力、牛頓等這些頻繁出現的詞彙都源於英文,還有不少專業術語如NGO、WTO、CFO等,甚至NLP一詞自己也是源自英文。英文也在受中文影響,每一年都有近千條外來詞彙新收錄入英文詞典,如Kungfu(功夫),tofu(豆腐)等。

本文同步分享在 博客「shiter」(CSDN)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索