中文NLP vs 英文NLP在理論,數據處理上有什麼相同和不同, 尤其是中文 NLP有什麼獨特的地方?
個人在國外內容推薦平台工作, 主要接觸英文的 NLP, 個人用 NLTK, spaCy 有成熟的數據處理流程和 modeling process. 最近想開始對中文文章廣告進行處理, 除了發現 jieba 這個分詞的 package, 沒有發現主流的package, 自己也在看類似的文章. 謝謝大家幫忙
謝邀。
從實用文本分析技術而言:如果只做主題聚類、文本分類等任務的話,中英文最大差別就在於,中文需要做自動分詞,相關工具包已經很多了,包括題主提到的Jieba,還有哈工大的LTP,北理工的ICTCLAS,還有我們組研製的THULAC。當然,在文本分類時,到底是選詞還是Ngram作為特徵,在SVM+BOW時代曾是個問題。進入到深度學習時代,就直接可以用基於字的神經網路模型了。
從NLP研究角度而言:中英文在詞性標註、句法分析等任務上頗有差異。主要體現在英語有明顯的屈折變化(單複數、時態等)而漢語缺少這些屈折變化,亦即有學者總結的「漢語重義合,英語重形合」。所以,英語里一個詞被標為動詞還是名詞,沒有太多爭議;漢語里一個詞應該被標為動詞還是名詞,例如「熱愛學習」、「勞動光榮」中的「學習」、「勞動」如果按照英文語法規範應當標註為名詞。著名語言學家沈家煊先生就曾提出「漢語動詞和名詞不分立」的理論。在句法分析層面漢語也有一些自己的特點,具體需要請教專業的語言學家解答了。
@李韶華 等答主提到中英文相關分析任務的錯誤率問題。之所以在一些任務上中文分析性能顯著低於英文,除了中文缺少屈者變化、有更多自由度從而提升了分析難度的原因外,中文標註資源相對較少、標註質量相對較低也是關鍵原因之一。語言資源標註既需要語言學家和計算機學者的通力合作,需要花費大量精力和時間,在國內環境下太費力不討好了,希望未來會有改觀。
從更廣闊的語言研究角度而言,我覺得中英由於各自承載了兩種截然不同的人類群體的文化信息,所以在更深層的文化內涵會有更明顯的分野,例如兩種語言的辭彙聯想網路、隱喻風格等,可能會有更大的不同。也許在NLP技術日漸成熟之後,我們可以透過語言更加定量地分析兩種不同文化的差異。在這方面我非常感興趣,期待更多專家指點交流。
謝邀。
感覺說不出更多比劉知遠老師更有洞察力的回答了。只說一點點個人做過的工作和覺得中文有趣以及不同的地方:
1. 中文是象形文字(logograms)——註:這句不嚴謹,現在大多數漢字都是形聲字,一部分 component 提供語義,一部分提供發音;這句話主要是想說提供語義的那些 components 和最初甲骨文很多是象形。就像英語有一些前綴後綴詞根一樣,中文也有這樣類似的語義相關的語素——偏旁部首。偏旁部首是兩個不同的東西,可以粗略地認為,部首(radical)是最主要的偏旁(components)。比如大家都知道,三點水的字多數和河流和水有關係等等。
2. 所以很自然的一個想法就是像英文那些利用 subunits(前綴後綴詞根)的研究工作一樣,把中文的偏旁部首加進來提供額外的信息。
3. 更瘋狂的一個想法是,像甲骨文時代一樣,很多字本身的含義就是由多個偏旁的含義「組合」在一起的;而很多詞的含義又是由組成的單個字的含義拼接在一起的。
由上述2和3的思想的驅動,我們過去做過一個工作:
Yanran Li, Wenjie Li, Fei Sun, and Sujian Li. Component-Enhanced Chinese Character Embeddings. Proceedings of EMNLP, 2015. [pdf] [bib]
是一個比較簡單的工作,直接將 components 信息和字本身拼接在一起,作為 Word2Vec 模型的輸入。這個工作後來還被改進到了很多更複雜的模型,得到了更好的一些結果[1][2]。同時,同期也有來自哈工大的研究團隊發表了相似的研究成果[3]。這裡值得一提的一點是,我們做的還是基於字級別的建模,並不是基於詞的。雖然中文分詞幾乎被認為是標配,但是其實字級別的建模對於很多罕見詞等等還是比較有幫助的,這個在後來和一些公司的交流中發現他們線上的一些模型也是字詞結合的。
但是在做這個工作的過程中,遇到了一些阻礙或者說可能未來繼續的方向。一些也許也有意思的研究是:
4. 英文里,character-level 的一些相關建模和研究,比如 character-level LM[4][5] 都表現得效果不錯。但是當時是覺得,英文的26個字母本身是沒有任何含義的,所以如果把中文「下降」到偏旁部首這種有語義含義的級別,應該效果會很不錯。然而效果只是輕微得好。這其中受限於:(1) 偏旁部首在漢字演化中改變非常大,不僅是形態,還有含義。儘管我們在做工作過程中進行了一些映射處理,但只是滄海一粟吧;(2) 中文有時候也有非象形字,比如象聲字,怎麼識別和區分或者結合這兩種字的建模也是個問題。
5. 就像剛才說的,我們希望中文多個字結合出來的詞,也是有語義的。但是很多時候倆字結合出來意思就和單獨倆字完全不一樣了,這在英語里也比較少見。比如「美麗」,本身這倆字都是好看的意思,結合起來還是好看的意思。但是比如「東西」,這倆字明明是倆方位詞,結合在一起就變成一種籠統的物體了。這種詞義結合後的轉變,其實應該可以用一些 NLP 的技術識別出來,並做一些有意思的研究。這個是我暫時還沒進行下去但比較有興趣的方向。
6. 在我本科的時候,學過一點點腦認知。當時有一些關於人腦到底是如何把文字和語義聯繫起來的研究,比如著名的格式塔理論等等。所以從最原始的出發點,我覺得現在的 NLP 技術也可以往這個方向探究一下。最近收到了一個心理測評機構的合作邀請,希望一起探究下中文字元認知的一些問題。超級開心啊!(感覺多少做了個有趣和有點意義的研究……QAQ
References:
[1] Jian Xu, Jiawei Liu, Liangang Zhang, Zhengyu Li, Huanhuan Chen. "Improve Chinese Word Embeddings by Exploiting Internal Structure". NAACL 2016.
[2] Rongchao Yin, Quan Wang, Rui Li, Peng Li, Bin Wang. "Multi-Granularity Chinese Word Embedding". EMNLP 2016.
[3] Yaming Sun, Lei Lin, Duyu Tang, Nan Yang, Zhenzhou Ji, Xiaolong Wang. "Radical-Enhanced Chinese Character Embedding". arXiv preprint 2014.
[4] Yoon Kim, Yacine Jernite, David Sontag, Alexander M. Rush. "Character-Aware Neural Language Models". AAAI 2016.
[5] Xiang Zhang, Junbo Zhao, Yann LeCun. "Character-level Convolutional Networks for Text Classification". NIPS 2015.
謝邀。
從NLP的幾個基本任務說起,結合語言學,從理論上做一些補充回答。
1.中文分詞
詞是最小的能夠獨立運用的語言單位。「詞」這個概念,是從西方引入的,在1898年《馬氏文通》出版之前,傳統的語言學研究對象是「字」,而不是「詞」。漢語和英語最直觀、最明顯的不同,就是英語的詞是天然的,由空格分開,而漢語的字緊密排列,從形式上看,其實沒有「詞」這個單位。
現代漢語的典型特徵之一是雙音節詞佔優勢。古漢語常常是一字即一詞,而現代漢語都把它們雙音節化了,比如「目--&>眼睛」「悅--&>高興、喜歡」。如果單單把「睛」、「興」等字拿出來,它們承載的意義與原詞是有差異的。加之考慮到實際應用的需求,以詞為索引可以減小搜索空間、加快搜索速度、提高準確率,所以做分詞是有必要的。
由於漢語的特殊性,在分詞任務中,會碰到兩種歧義現象:交叉歧義(Cross Ambiguity)和組合歧義(Combination Ambiguity)。
(1)老闆有意見他。
(2)老闆對他有意見。
(1)和(2)的正確切分是:
(1)老闆/有意/見/他/。
(2)老闆/對/他/有/意見/。
這種屬於交叉歧義。abc三個成分,ab可以分成一個詞,bc也可以分成一個詞。
(3)其他語言學起來很難。
(4)語言學是以人類語言為研究對象的學科。
(3)和(4)的正確切分是:
(3)其他/語言/學/起來/很/難/。
(4)語言學/是/以/人類/語言/為/研究/對象/的/學科/。
這種就是組合歧義。ab兩個成分,組合在一起的時候是一個詞,分開以後可以各自成詞。
解決分詞歧義的技術方法主要有三大類,分別是基於規則的方法,基於統計的方法(例如CRF、HMM、Deep Learning等),以及規則和統計結合。網上,也能查到一些相關的分詞器來實現。
在技術需求方面,有的需要細粒度的分詞,有的需要粗粒度的,這都是實際應用會面對的矛盾。這也是由於漢語本身語素、詞和短語的界限不明造成的。
(5)臣妾做不到啊。
(5)中的「做不到」,屬於動補結構(動詞+補語),從語言學的角度看,是個短語。實際應用時,可以分成「做/不/到」,也可以「做不到」合在一起,看成一個詞。
中文分詞也是英文和中文NLP的一個基本不同,英文不需要分詞,而中文需要進行分詞,以便能夠更好地進行後續NLP任務。當然,目前也有一些中文NLP技術,可以避開中文分詞任務。
2.詞性標註(Part-of-speech Tagging, POS)
漢語詞性的獨特之處 @劉知遠 老師已經提到幾點了,漢語作為孤立語/分析語,沒有明顯的形態變化,與英語等屈折語不同。比如:
(6)我感覺他喜歡我。(動詞)
(7)我的感覺很准。(名詞)
如果用英語說這兩句話,應該是:
(8)I feel he loves me. (動詞)
(9)My feeling is reliable.(名詞)
同樣一個「感覺」,其實是同形異義詞。我們必須準確識別兩種詞性。
上面說的這種情況名詞和動詞的區別是比較明顯的。但漢語的複雜之處還不止這個。比如:
(10)他喜歡你。(動詞)
(11)我很珍惜她的喜歡。(動詞用作名詞)
「喜歡」從絕大多數情況來看,都被人們看成一個動詞,但例(11)就把動詞當作名詞用了,而且沒有詞形變化。這種情況在漢語里大量存在,這也就是沈家煊先生提出的漢語「名動包含」的觀點。
漢語的這一特點會造成句子里的核心謂語動詞難以識別的問題。還是拿例(11)來說,句子里有兩個動詞「珍惜」和「喜歡」,但核心謂語動詞是「珍惜」。「喜歡」最好不要被判斷為動詞,否則會影響後續的句法、語義分析。
中科院計算所漢語詞性標記集提供了vn、an等詞性標籤,v代表動詞,a代表形容詞,後面加上n,其實有一種「動名詞」「形名詞」的意思,也是對英語的一種借鑒。vn等標籤可以幫我們解決掉一些非謂動詞幹擾的問題,但不能解決全部。
在實際應用中,我們以「依句辨品,離句無品」的原則去做詞性標註,關注詞在句子里的位置和作用,雖然這未必是黎錦熙先生說這句話時的本意。
3.句法分析
目前在做的句法分析包括句法樹(Parse Tree)和依存句法分析(Dependency Parsing, DP),談到這兩點不得不放出下面這兩張圖:
圖(1)
圖(2)
不同的詞類在句子中行使的功能是不一樣的。圖(1)基本可以代表英語詞類的功能,這張圖比較符合我們的一般認識,即名詞作主語賓語,動詞作謂語,形容詞作定語,副詞作狀語。
但是漢語的情況,如圖(2),要複雜得多。名詞也可以作謂語,動詞也可以作主賓語。比如:
(12)我永遠十八歲。
例(12)就是一個典型的名詞性短語作謂語的例子,這個句子不需要動詞也成立。「我」是代詞,「永遠」是副詞,「十八歲」是數量短語。
句法樹分析結果如下:
圖(3)
圖(3)借用CTB的標註體系,NP代表名詞性短語,VP代表動詞性短語,雖然這句話中沒有動詞,但仍需要VP作為謂語的框架。
依存句法分析結果如下:
圖(4)
圖(4)借用LTP的標註體系,SBV代表主語,root是「歲」,即使沒有動詞,也能正確分析句子結構。
漢語還有一些特殊句型,比如主謂謂語句、存現句、連謂句、兼語句等,在句法分析層面上都有自己獨特的結構,也是需要特殊處理的。
4.其他方面
漢語還有一個特點是重意合而不重形式,句子結構比較鬆散,多分句;英語則多從句,多引導詞,句子結構比較容易判斷。如果要判斷句子里的因果關係、讓步關係、目的關係、假設關係等,目前來說還比較難。況且我們說話的時候,常常會省略「因為」「即使」「如果」等明顯的關聯詞,這樣也就使得特徵變得不明顯。比如:
(13)人勤地不懶。
(14)如果人勤地就不懶。
例(13)和(14)表達了一樣的意思,但它們的表現形式是不一樣的。
漢語結構鬆散還表現為:
(15)一斤蘋果多少錢?
(16)蘋果一斤多少錢?
(17)多少錢一斤蘋果?
例(15)(16)(17)都說得通,而且還很常用。
在語義分析層面,如語義角色標註(Semantic Role Labeling, SRL)和語義依存分析(Semantic Dependency Parsing, SDP),漢語這個特點著實加大了實現的難度。
5.後記
自然語言處理的任務涉及到語法、語義、語用三個層面,越往後越難。語言學中語義、語用方面的理論有待完善,對技術也有更高的要求。期待計算機領域和語言學領域更緊密的合作。
本回答來自Emotibot NLU組語言學家范敏,NLP專家葉茂
剛入nlp幾個月,根據自己的所見所聞有幾點感受。
深度學習時代,很多任務的表現都超過了傳統的語言模型,包括文本分類、pos、情感分析、詞性標註、句子匹配、對話等。所以直接上手深度學習,一切單詞、句子、文本都可以轉化為embedding,我認為這種方法,雖然簡單粗暴,但是有效啊。中英文還有其他語言都適用。
seq2seq模型,能夠用來機器翻譯,語言沒有限制,其實就說明,方法是通用的。但具體到語言時,還是有微小區別。比如翻譯從英文到法文,雙向LSTM時,把sequence倒過來輸入能夠提高準確率,是因為這兩種語言的順序大體一致,法文第一個詞跟英文第一詞比較相關,所以倒過來輸入,最後得到的英文句子embedding跟其第一個詞強相關,所以對輸出法文句子的第一個詞有好處的。
然而,從英文到日文,把句子倒過來輸入不一定有效,畢竟英文第一個詞可能跟日文最後幾個詞相關。其實用上attention模型後,輸出能夠聚焦在輸入sequence的某些地方,這些問題都能很好解決。我舉這個例子是想說明,中文跟英文的語言習慣還是有差異的。
對於QQ匹配問題,我接觸比較多,kaggle上做過英文的,工作中做過中文的。這類問題用法很廣,可以做為客服機器人。很多客服機器人都可以歸結為FAQ,只要找到近似問題的回答,就可以以此回復。對於英文來說,公開的數據非常多。對中文而言,訓練embedding非常需要專業資料庫,比如你想做銀行、電商客服,就需要他們的數據。不然只使用公開數據或者網上爬取到的數據,效果肯定會差。這是從業務角度去理解。直接上手詞、句embedding,然後匹配QQ的相似度,事實上準確率非常高。比英文多的地方就是要用到分詞等。
分詞效果對匹配結果有很大影響,對新鮮詞語或者短語有些分的不太好,對於分詞不太好的case,會手動加一些rule進去,這塊不是很懂。但有一點可以肯定的是,當大家都不知道匹配對不對的時候,只有語言學家才知道。專業知識在nlp非常重要,句法樹、依賴樹、詞性等。
歡迎交流!
中文的自然語言處理要比英文難得多。
比如詞性標註(supervised training),英文state of the art是97%左右,中文只有93%。至於更複雜的語法樹解析,精度的差距就大得多了。(我看的相關論文有限,歡迎補充或修正數據)
中文裡主語缺失和省略,尤其是口語里,也比英文多得多。這無端引入了許多長程的語義相關,並讓文本理解和人機對話變得非常困難。因為從句的存在,英文的結構化更強一些,也更容易計算機處理。(人來讀也類似:即使翻譯沒錯,我們看中文譯文也可能沒有英文原文好懂)
所以現在中文NLP的比較靠譜的辦法還是 分詞 + bag of words. 當然,這種方法能做的事情是比較有限的。另外, @李澤宇 答案里說直接RNN+embedding,也是一種辦法,避開了解析語言結構的難題,儘管個人感覺這種辦法很快會碰到性能的瓶頸
最後,從選擇研究方向的角度看,中文難,未必是壞事。商業界里,問題 ≈ 機會。學術圈裡,問題 ≈ paper。
演算法:
基於字模型的話,不需要分詞。特定任務需要基於詞處理的話,需要先分詞。一般來說基於詞的模型比基於字的模型效果好。
分詞可以用神經網路來做,準確率可達97%以上了。結巴速度快,但準確率只有80%多。
-
數據:公開數據少,開源演算法少;數據都要錢,包都不好裝。中文比英文具有含義的穩定性,這是優勢也是關鍵所在。目前大多數處理方法都是基於英文為母語的,所以不適合你中文,這也是目前世面上產品不倫不類的結果。
中文是二次編碼:偏旁部首組成字,字組成詞。英文是一次編碼。因此,中文字少詞多。英文單詞多。
分詞,中英文混用,電報短語,專業外來語,非白話文 隨便一個都是一個大坑
1.分詞
2. 公開的標註預料少。
3.句法結構不同。
首先分詞這個是中文避免不掉的。其次是英文中比如句子開頭大寫字母這種強特徵也很有用,然而中文就不會有。再者中文的句間關係分隱性和顯性,英文用連詞做強特徵。
推薦閱讀:
※自然語言處理起航篇之資訊理論基礎(上)
※PaperWeekly 第53期 | 更別緻的詞向量模型:Simpler GloVe - Part 2
※線下沙龍 x 北京 | NLP專題技術分享會,佔座全憑手速!
※論文推薦:機器閱讀理解,問答系統,對話生成 | 本周值得讀 #36
※SEO詞庫清洗詞和歸類相關問題?