中文分詞是中文自然語(yǔ)言處理的一個(gè)非常重要的組成部分,在學(xué)界和工業(yè)界都有比較長(cháng)時(shí)間的研究歷史,也有一些比較成熟的解決方案。今天我們邀請了出門(mén)問(wèn)問(wèn)的兩位重磅嘉賓徐博士和Jason,和大家一起來(lái)回顧一下中文分詞的發(fā)展,著(zhù)重談一談現在比較流行的一些基于機器學(xué)習的分詞方法。
嘉賓簡(jiǎn)介
徐博士,約翰霍普金斯大學(xué)語(yǔ)言和語(yǔ)音實(shí)驗室博士。2012年畢業(yè)后加入微軟總部,先后在Bing和微軟研究院從事自然語(yǔ)言處理和機器學(xué)習相關(guān)的研究和產(chǎn)品開(kāi)發(fā),是cortana語(yǔ)義理解和對話(huà)系統團隊以及wordflow輸入法團隊的主要成員。雷鋒網(wǎng)雷鋒網(wǎng)(公眾號:雷鋒網(wǎng))雷鋒網(wǎng)
Jason,劍橋大學(xué)自然語(yǔ)言處理組畢業(yè)。一直從事自然語(yǔ)言處理方面的研究與開(kāi)發(fā)工作。加入出門(mén)問(wèn)問(wèn)3年多,負責開(kāi)發(fā)出門(mén)問(wèn)問(wèn)的語(yǔ)義分析系統、對話(huà)系統,參與的產(chǎn)品包括出門(mén)問(wèn)問(wèn)手機版、Ticwear智能語(yǔ)音手表交互系統、魔法小問(wèn)智能客服對話(huà)系統。
首先我來(lái)說(shuō)說(shuō)什么是詞?!霸~是最小的能夠獨立運用的語(yǔ)言單位”,那么什么是獨立運用呢?它可以解釋為“單獨做句法成分或單獨起語(yǔ)法作用”。在語(yǔ)言學(xué)語(yǔ)義學(xué)的角度有很多相關(guān)的研究都對詞給出了一些定義和判定標注。然很多中文詞僅由單個(gè)漢字組成,但是更多的單個(gè)漢字是無(wú)法“單獨做句法成分或單獨起語(yǔ)法作用”。由于國際上常用的NLP算法,深層次的語(yǔ)法語(yǔ)義分析通常都是以詞作為基本單位,很多中文的自然語(yǔ)言處理的任務(wù),也就多了一個(gè)預處理的過(guò)程來(lái)把連續的漢字分隔成更具有語(yǔ)言語(yǔ)義學(xué)上意義的詞。這個(gè)過(guò)程就叫做分詞。
這里有一個(gè)從(Xue 2003) 中拿來(lái)的例子:
日文章魚(yú)怎么說(shuō) =》 日文 章魚(yú) 怎么 說(shuō) ? 日 文章 魚(yú) 怎么 說(shuō)?
我想強調的一點(diǎn)是,盡管在語(yǔ)言學(xué)語(yǔ)義學(xué)上,詞有著(zhù)相對清晰的定義,對于計算機處理自然語(yǔ)言來(lái)說(shuō),分詞很多時(shí)候沒(méi)有放之四海皆準的共同標準。由于分詞本身更多的時(shí)候是作為一個(gè)預處理的過(guò)程,判斷其質(zhì)量的好壞更多的時(shí)候需要結合下游的應用來(lái)進(jìn)行。
比如在語(yǔ)音識別中,語(yǔ)言模型的創(chuàng )建通常需要經(jīng)過(guò)分詞,從識別效果來(lái)看,越長(cháng)的詞往往準確率越高(聲學(xué)模型區分度更高)。但是在文本挖掘中,很多時(shí)候短詞的效果會(huì )更好,特別是從召回率的角度來(lái)看(Peng et al. 2002, Gao et al. 2005)。在基于phrase的機器翻譯中,也有研究發(fā)現短詞(比中文treebank的標準短)會(huì )帶來(lái)更好的翻譯效果(Chang et al. 2008)。所以,如何衡量分詞的好壞,如何選擇分詞的方法,還是要結合自身的應用來(lái)進(jìn)行。
詞典匹配是分詞最傳統最常見(jiàn)的一種辦法。即便在后面要提到的基于統計學(xué)習的方法中,詞表匹配也通常是非常重要的信息來(lái)源(以特征函數的形式)。匹配方式可以有正向(從左到右),逆向(從右到左)。對于匹配中遇到的多種分段可能性(segmentation ambiguity),通常會(huì )選取分隔出來(lái)詞的數目最小的。
很明顯,這種方式對詞表的依賴(lài)很大,一旦出現詞表中不存在的新詞,算法是無(wú)法做到正確的切分的。但是詞表匹配也有它的優(yōu)勢,比如簡(jiǎn)單易懂,不依賴(lài)訓練數據,可以做到和下游的應用緊密結合 (機器翻譯中的phrase table,TTS中的詞典等等),易于糾錯等等。
還有一類(lèi)方法通過(guò)語(yǔ)料數據中的一些統計特征(如互信息量)去估計相鄰漢字之間的關(guān)聯(lián)性,進(jìn)而實(shí)現詞的切分。這類(lèi)方法不依賴(lài)詞表,具有很強的靈活性,特別是在對生詞的發(fā)掘方面,但是也經(jīng)常會(huì )有精度方面的問(wèn)題。
所以很多系統會(huì )結合基于詞表的方法和無(wú)詞表方法,發(fā)揮詞表方法的準確性以及在與后段應用結合上的優(yōu)勢,同時(shí)利用無(wú)詞表方法在召回方面的能力。
確實(shí),最近十多年,機器學(xué)習的發(fā)展非常迅速,新的模型,新的算法層出不窮。中文分詞由于其重要性,以及問(wèn)題的清晰性,成為很多新研究的試驗場(chǎng)。因為這方面的內容很多,所以我想盡可能的把主要的模型和方法分為兩大類(lèi):
一類(lèi)是基于character tagging的,也就是對每一個(gè)字單獨進(jìn)行分段信息的標注;
還有一類(lèi)就是基于詞的,也就是對詞進(jìn)行整體的標注和建模。
基于單個(gè)字方法的核心就是對每一個(gè)字在其所屬詞中的位置進(jìn)行一個(gè)標注。對于任何一個(gè)字來(lái)說(shuō),它可以是一個(gè)詞的開(kāi)始(Beginning), 一個(gè)詞的中間(Inside), 一個(gè)詞的結尾(End),或者本身就是一個(gè)單字的詞(Singleton),這也就是在序列標注中常用的BIES的分類(lèi)。這種標注空間(模型狀態(tài)空間)的劃分在其他任務(wù)上(如NER)也很常用,也會(huì )有一些類(lèi)似的變種,比如NER中常用的BIO。
說(shuō)到這類(lèi)方法,就要說(shuō)到MEMM (Maximum Entropy Markov Model) 和CRF (Conditional Random Field) 。這兩個(gè)都是discriminative的模型,和generative的模型(比如naive bayes, HMM)相比,在特征函數的定義方面有很大的靈活性。
(第二個(gè)是MEMM,第三個(gè)是CRF,X是句子,Y是位置的標注。)
MEMM是一個(gè)locally normalized的模型。也就是說(shuō)在每一個(gè)字的位置,其對應的概率分布需要進(jìn)行歸一化,這個(gè)模型有一個(gè)很有名的label bias的問(wèn)題,也就是當前的tag完全由前一個(gè)tag決定,而完全忽略當前的字本身。
CRF則通過(guò)全局歸一化(global normalization)的方式很好的解決了這個(gè)問(wèn)題。這兩個(gè)模型都被拿來(lái)在分詞上試驗過(guò)(Xue et al. 2003, Peng et al. 2004, Tseng et al. 2005, etc), 取得了不錯的效果。
這類(lèi)基于單個(gè)字的模型,正如它的名字所暗示,無(wú)法直接的去model相鄰詞之間的相關(guān)性,也無(wú)法直接看到當前整個(gè)詞所對應的字符串。具體到MEMM和CRF中特征函數的定義,在當前位置,模型無(wú)法抓去到“當前的詞”,“兩邊的詞”這樣重要的特征,而只能通過(guò)基于字的特征去代替。這個(gè)往往會(huì )造成建模效果與效率的損失。
基于詞的模型就很好的解決了這個(gè)問(wèn)題。
這一塊的很多工作會(huì )去用類(lèi)似transition based parsing的辦法去解決分詞的問(wèn)題。Transition based parsing是一種漸進(jìn)式的(incremental),自下而上(bottom-up)的語(yǔ)法分析辦法。它一般以從左向右的方式處理逐字處理文本的輸入,并在運行過(guò)程中通過(guò)一個(gè)堆棧去保存到當前為止得到的不完整的分詞結果,并且通過(guò)機器學(xué)習的方法去決定如何整合當前的分析結果,或是接收下一個(gè)輸入去拓展當前的分析結果。
具體到分詞這個(gè)任務(wù)上,每一個(gè)字輸入進(jìn)來(lái),算法會(huì )去決定這個(gè)字是去拓展堆棧上已經(jīng)保存的詞,還是開(kāi)始一個(gè)新詞。這個(gè)算法的一個(gè)問(wèn)題就是堆棧上的保存的到當前位置的分析結果的數量會(huì )非常大(到當前為止所有可能的分詞結果),所以必須要做pruning保證搜索空間在可控范圍內。
基于詞的模型還有一個(gè)方法這里簡(jiǎn)單提一下(Andrew, 2006),它和剛才說(shuō)的transition parsing的方法還是很類(lèi)似的,這個(gè)模型就是Semi CRF (Sarawagi & Cohen 2004)。這個(gè)模型運用也很多,微軟內部很多NER就是用這個(gè)模型。它在本質(zhì)上是一個(gè)高階的CRF,通過(guò)擴展state space的方法去模擬segment level的關(guān)聯(lián)性,用到分詞上也就是相鄰詞之間的關(guān)聯(lián)性。和之前的方法要做pruning一樣,Semi-CRF在實(shí)際應用中也需要限制segment的長(cháng)度,以控制搜尋最優(yōu)解的復雜度。
▎深度學(xué)習在分詞中的應用?
當然。最近幾年深度學(xué)習發(fā)展非???,影響力很大,所以這一塊要專(zhuān)門(mén)拿出來(lái)說(shuō)一說(shuō)。
和大多數自然語(yǔ)言處理中的任務(wù)一樣,深度學(xué)習也不出意外地被用在了分詞上,最近幾年也有非常多的相關(guān)的論文。和之前說(shuō)過(guò)方法相比,深度學(xué)習帶來(lái)的變化主要是特征的定義與抽取。無(wú)論是基于單字的,還是基于詞的,最近幾年都有這方面的工作。
基于單字的,運用deep learning的方法進(jìn)行NLP領(lǐng)域的序列的標注,其實(shí)早在2008年就有人做過(guò)(Collobert & Weston 2008)主要的方法是通過(guò)神經(jīng)網(wǎng)絡(luò )在每一個(gè)位置去自動(dòng)提取特征,并且預測當前位置的標注,最后也可以加一個(gè)tag transition模型與神經(jīng)網(wǎng)絡(luò )輸出的emission模型合并,通過(guò)viterbi抽取最佳標注序列。最近幾年的進(jìn)展主要是通過(guò)更強大的神經(jīng)網(wǎng)絡(luò )去提取更有效的信息,從而實(shí)現分詞準確率的提高 (Zheng et al. 2013, Pei et al. 2014, Chen et al. 2015, Yao et al.2016, etc)。
這個(gè)是collobert 2008年的基本版本,最近的工作結構上沒(méi)有太大偏差。全局歸一化的CRF模型也可以通過(guò)神經(jīng)網(wǎng)絡(luò )去自動(dòng)提取特征(DNN,CNN,RNN,LSTM,etc),這個(gè)在NER上已經(jīng)有了廣泛的應用,也完全可以用在分詞這個(gè)任務(wù)上,這里就不贅述了。
之前提到的基于詞的transition based的分詞最近也有了deep learning領(lǐng)域的拓展,原有的基于線(xiàn)性模型的action模型(延續當前詞還是開(kāi)始新詞)也可以通過(guò)神經(jīng)網(wǎng)絡(luò )去實(shí)現,簡(jiǎn)化了特征的定義,提高了準確率。
Deep learning當然是最近幾年最新的,非常重要的發(fā)展方向。除此之外,Joint modeling(聯(lián)合建模)的方法也值得一提。
傳統的中文自然語(yǔ)言處理通常會(huì )把分詞作為一個(gè)預處理的過(guò)程,所以系統是pipeline形式的,這樣帶來(lái)的一個(gè)問(wèn)題就是error propagation。也就是分詞的錯誤會(huì )影響到后面更深層次的語(yǔ)言語(yǔ)義分析,比如POS tagging, chunking, parsing等等。所以在學(xué)術(shù)界也有很多joint modeling(聯(lián)合建模)方面的工作,主要目的就是把分詞和其他更復雜的分析任務(wù)一起進(jìn)行(Zhang & Clark 2010, Hatori et al. 2012, Qian & Liu 2012, Zhang et al. 2014, Lyu et al. 2016, etc)。
最近幾年由于神經(jīng)網(wǎng)絡(luò )的迅速發(fā)展,其強大的特征學(xué)習能力也大大簡(jiǎn)化了對多個(gè)任務(wù)進(jìn)行聯(lián)合建模時(shí)在特征選取方面所要做的工作。聯(lián)合建模的一大好處是分詞與其他任務(wù)可以共享有用的信息,分詞的時(shí)候也會(huì )考慮到其他任務(wù)的要求,其他任務(wù)也會(huì )考慮各種分詞的可能性,全局上可以取得最優(yōu)解。
但是隨之而來(lái)問(wèn)題是搜索的復雜度往往會(huì )顯著(zhù)提高:需要更有效的pruning機制在控制復雜度的同時(shí),不對搜索的結果產(chǎn)生顯著(zhù)影響。
好的!謝謝徐博士這么詳盡的介紹了中文分詞的各種算法。因為,就像徐博士說(shuō)了,中文分詞是大部分下游應用的基礎,這些下游應用小到POS詞性標注、NER命名實(shí)體識別,大到文本分類(lèi)、語(yǔ)言模型、機器翻譯。所以我舉幾個(gè)基本的例子來(lái)回答在中文分詞的基礎上,怎么進(jìn)行之后的語(yǔ)義分析應用。當然,需要事先強調的一點(diǎn)是,這里談的一些算法(包括學(xué)術(shù)界很多主流的算法)都是語(yǔ)言無(wú)關(guān)的,并且都是以詞作為最小單位的。
那么對于中文來(lái)說(shuō),只要做好分詞(并且現在的分詞準確率還相當不錯,能達到96%左右的F-score Zhang et.al 2016),就可以跟對接現在比較主流的英文NLP算法。
先來(lái)談?wù)勗~性標注。
所謂詞性標注,簡(jiǎn)單來(lái)說(shuō),就是在分詞的結果上,判斷某個(gè)詞是名詞、動(dòng)詞、形容詞等等。這一般是被當做一個(gè)序列標注問(wèn)題來(lái)做,因為 : 判斷的依據可以是詞本身給出(比如“打開(kāi)”這個(gè)詞大部分情況不用看上下文都可以猜測是一個(gè)動(dòng)詞)也可以由上一個(gè)詞的詞性來(lái)給出(比如“打開(kāi) XX”,雖然不知道XX是什么詞,但是跟在動(dòng)詞“打開(kāi)”后面,很可能是名詞)。
又比如,命名實(shí)體識別。

在得到分詞結果,并且知道了每個(gè)詞的詞性之后,我們可以在此基礎上做命名實(shí)體識別(Named Entity Recoginition)。學(xué)術(shù)上,所謂的命名實(shí)體一般指的是人名(PERSON)、地名(LOCATION)、機構名(ORGANIZATION) 等等。當然,在實(shí)際商業(yè)產(chǎn)品中,根據不同的業(yè)務(wù)場(chǎng)景需求,命名實(shí)體的類(lèi)別會(huì )更加細分得多。比如地名可能會(huì )區分省、市、縣,或者餐館、酒店、電影院等等。
在得到分詞結果和詞性之后,我們還可以建立一棵語(yǔ)法樹(shù)。

輸出的結果,包含了整句句子的語(yǔ)法結構信息,比如名詞短語(yǔ)、介詞結構等等。如上圖所示。最后,推薦大家可以去Stanford NLP網(wǎng)站親自試試:http://nlp.stanford.edu:8080/parser/index.jsp 里面。

這個(gè)Demo,演示了從一句句子開(kāi)始,如何做分詞、POS tagging、Syntactic Parsing,以及依存分析、指代消解等等各種基本NLP應用。自己親手試試可以對分詞等一系列基礎NLP方法有比較直觀(guān)的了解哦。
很多學(xué)術(shù)界的NLP算法,放到真實(shí)應用場(chǎng)景里面來(lái),面對千變萬(wàn)化的人類(lèi)自然語(yǔ)言,都會(huì )遇到各種各樣的困難。我就分享一下我們出門(mén)問(wèn)問(wèn)這幾年來(lái)做中文分詞的一些經(jīng)驗和遇到的困難吧。先做個(gè)小廣告,群內可能有朋友不是很熟悉我們出門(mén)問(wèn)問(wèn)。出門(mén)問(wèn)問(wèn)成立于2012年,是一家以語(yǔ)音搜索為核心的人工智能創(chuàng )業(yè)公司。我們做了4年語(yǔ)音搜索,從手機版App、做到手表、車(chē)載,載體可能不同,但是核心都是我們的語(yǔ)音+語(yǔ)義的這一套語(yǔ)音搜索系統。

比如上圖中所示,用戶(hù)通過(guò)語(yǔ)音輸入一句語(yǔ)音:“交大附近的南京大排檔”。這段語(yǔ)音經(jīng)過(guò)語(yǔ)音識別轉換成一句自然語(yǔ)言文本,然后交由我們的語(yǔ)義分析系統進(jìn)行處理。我們的語(yǔ)義分析系統會(huì )經(jīng)過(guò)一系列的分詞、詞性標注、命名實(shí)體識別,然后能夠判斷出來(lái)這句query的詢(xún)問(wèn)主題是什么(訂餐廳、導航、天氣 etc.),并把相應關(guān)鍵字提取出來(lái),交給后面的搜索團隊進(jìn)行結果搜索和展示。
因為出門(mén)問(wèn)問(wèn)是專(zhuān)注于生活信息類(lèi)查詢(xún),因此正確識別出query中的實(shí)體名(POI、電影名、人名、音樂(lè )名 etc.)非常重要。出門(mén)問(wèn)問(wèn)的NLP系統也是以分詞作為整個(gè)NLP系統的基礎的:正確識別實(shí)體名的前提是整個(gè)實(shí)體名稱(chēng)正確并且完整地被分詞開(kāi)來(lái)。
因此,我們的分詞是需要偏向于實(shí)體名的。就像徐博士之前提到的,分詞沒(méi)有一個(gè)“放之四海而皆準”的標準;那么在出門(mén)問(wèn)問(wèn)NLP里面,我們應用分詞的一個(gè)很重要標準就是能夠正確切出這些實(shí)體名稱(chēng)。
我們的分詞相當依賴(lài)實(shí)體詞表,但在實(shí)際中遇到了非常大的困難。
一是實(shí)體詞表數據量大。比如光是POI點(diǎn)(信息點(diǎn))就是千萬(wàn)級別,而且總有新開(kāi)的餐館、酒店無(wú)法覆蓋到。
二是噪音很大。什么“我愛(ài)你”、“天氣不錯”,都是我們在真實(shí)詞表中發(fā)現的餐館名,更別說(shuō)千奇百怪的歌名了。
這些真實(shí)世界的問(wèn)題對統計系統的分詞造成了很大的困難。所以我們針對這些問(wèn)題,做過(guò)一些努力。
1) 建立完善的新詞發(fā)現機制,定期補充我們的POI詞,盡可能建立更多更全的實(shí)體詞表庫。但是更多的實(shí)體詞表也帶來(lái)了更多的噪音,會(huì )對分詞和后續語(yǔ)義識別造成問(wèn)題。
2)我們會(huì )利用機器學(xué)習的方法,來(lái)剔除實(shí)體詞表中的噪音詞。所謂的噪音詞,就是餐館詞表里面那些一般人看起來(lái)不是“餐館”的詞(比如“我愛(ài)你”“天氣不錯”),或者歌曲名里面一般來(lái)說(shuō)不會(huì )被認為是歌曲的詞(比如“附近”),等等。我們的算法會(huì )自動(dòng)篩選出這種低置信度的實(shí)體詞,避免造成噪音。
3)我們還嘗試過(guò)連接Knowledge Graph,用更豐富的信息來(lái)幫助正確分詞。舉一個(gè)真實(shí)的例子,“高第街56號”,一般的分詞程序都會(huì )分為“高第街/56/號”,但是群里面如果有濟南的朋友可能會(huì )一眼認出來(lái),這是濟南一家非常著(zhù)名的連鎖餐館的名稱(chēng)。結合我們的Knowledge Grahp (KG),如果用戶(hù)的當前地址在濟南,那么即使我們的除噪音的算法認為“高第街56號”不太可能是一家餐館,但是我們會(huì )綜合考慮KG給出的信息,將其正確識別成為一家餐館。
同時(shí),我們也在積極的嘗試一些新的方法,比如接受多種存在歧義的分詞,但是采用對最終搜索結果的評估來(lái)排序選出最佳答案。當然啦,整體的中文分詞的效果還是可以接受的。經(jīng)過(guò)我們抽樣錯誤分析,分詞造成的語(yǔ)義分析錯,占得比例還是比較低的,長(cháng)期來(lái)講我們仍然會(huì )一直信任當前的分詞系統提供的結果。
中文分詞是NLP難題中的一道必然工序,最近因為深度學(xué)習的到來(lái),很多人開(kāi)始希冀這個(gè)新的機器學(xué)習算法可以為它帶來(lái)一些全新的東西。本文出門(mén)問(wèn)問(wèn)的兩個(gè)資深研究人員從什么是中文分詞、中文分詞的傳統方法、中文分詞結合深度學(xué)習以及中文分詞在語(yǔ)義分析中的應用,在他們產(chǎn)品實(shí)際應用中遇到的問(wèn)題,為我們由淺入深、從理論到應用做了一堂生動(dòng)地科普,向我們展示了中文分詞和商業(yè)產(chǎn)品真正結合時(shí)的美妙碰撞。
附:徐博士參考文獻。
Peng et al. 2002, Investigating the relationship between word segmentation performance and retrieval performance in Chinese IR
Gao et al. 2005, Chinese word segmentation and named entity recognition: A pragmatic approach
Chang et al. 2008, Optimizing Chinese Word Segmentation for Machine Translation Performance
Zhang & Clark 2007, Chinese Segmentation with a Word-Based Perceptron Algorithm
Sarawagi & Cohen 2004, Semi-Markov Conditional Random Fields for Information Extraction
Andrew 2006, A hybrid markov/semi-markov conditional random field for sequence segmentation
Collobert & Weston 2008, A Unified Architecture for Natural Language Processing: Deep Neural Networks with Multitask Learning
Zheng et al. 2013, Deep learning for Chinese word segmentation and POS tagging
Pei et al 2014, Maxmargin tensor neural network for chinese word segmentation
Chen et al. 2015, Gated recursive neural network for chinese word segmentation
Chen et al. 2015, Long short-term memory neural networks for chinese word segmentation
Yao et al. 2016, Bi-directional LSTM Recurrent Neural Network for Chinese Word Segmentation
Zhang et al. 2016, Transition-Based Neural Word Segmentation
Zhang & Clark 2010, A fast decoder for joint word segmentation and pos-tagging using a single discriminative model
Hatori et al. 2012, Incremental joint approach to word segmentation, pos tagging, and dependency parsing in chinese
Qian & Liu 2012, Joint Chinese Word Segmentation, POS Tagging and Parsing
Zhang et al. 2014, Character-Level Chinese Dependency Parsing
Lyu et al. 2016, Joint Word Segmentation, POS-Tagging and Syntactic Chunking
雷鋒網(wǎng)原創(chuàng )文章,詳情見(jiàn)轉載須知。
聯(lián)系客服