国产麻豆精品福利在线观看,亚洲人亚洲精品成人网站,亚洲熟妇无码AV另类VR影视,欧美A级毛欧美1级A大片免费播放

您的位置:首頁 > 互聯網 >

每個NLP工作者都應掌握分詞技術 教你3種中文規(guī)則分詞方法

2020-10-29 08:23:51 來源: 51cto

在自然語言理解中,詞(token)是最小的能夠獨立活動的有意義的語言成分。將詞確定下來是理解自然語言的第一步,只有跨越了這一步,中文才能

在自然語言理解中,詞(token)是最小的能夠獨立活動的有意義的語言成分。將詞確定下來是理解自然語言的第一步,只有跨越了這一步,中文才能像英文那樣過渡到短語劃分、概念抽取以及主題分析,以至自然語言理解,最終達到智能計算的最高境界。因此,每個NLP工作者都應掌握分詞技術。

1. 分詞的概念和分類

“詞”這個概念一直是漢語言學界糾纏不清而又揮之不去的問題。“詞是什么”(詞的抽象定義)和“什么是詞”(詞的具體界定)這兩個基本問題迄今為止也未能有一個權威、明確的表述,當今更是沒有一份令大家公認的詞表。

問題的主要難點在于漢語結構與印歐體系語種差異甚大,對詞的構成邊界很難進行界定。比如在英語中,單詞本身就是“詞”的表達,一篇英文文章的格式就是“單詞”加分隔符(空格)。

而在漢語中,詞以字為基本單位,但是一篇文章的語義表達卻仍然是以詞來劃分。因此,需要針對中文漢字,將其按照一定的方式進行組織,分成不同的詞。

中文分詞是讓計算機自動識別出句子中的詞,然后在詞間加入邊界標記符。這個過程看似簡單,然而實踐起來要復雜得多,主要困難在于分詞歧義。

下面以NLP分詞的經典場景為例進行說明,短語“結婚的和尚未結婚的”,應該分詞為“結婚/的/和/尚未/結婚/的”,還是“結婚/的/和尚/未/結婚/的”呢?對于這個問題,機器很難處理。此外,像未登錄詞、分詞粒度粗細等都是影響分詞效果的重要因素。

自中文自動分詞被提出以來,歷經近30年的探索,先后出現了很多分詞方法,可主要歸納為規(guī)則分詞、統計分詞和混合分詞(規(guī)則+統計)這3個流派。最近這幾年又興起了以深度學習的方式進行分詞,比如BILSTM+CRF。

規(guī)則分詞是最早興起的方法,主要通過人工設立詞庫,按照一定方式進行匹配切分,其實現簡單高效,但對沒有錄入詞庫的新詞很難進行處理。

隨后統計機器學習技術興起,應用于分詞任務上就有了統計分詞方法。該方法能夠較好地應對新詞發(fā)現等特殊場景。然而在實踐中,單純的統計分詞也有其缺陷:太過依賴語料的質量。因此實踐中多是采用規(guī)則分詞和統計分詞這兩種方法的結合,即混合分詞。

2. 規(guī)則分詞

基于規(guī)則的分詞是一種機械分詞方法,需要不斷維護和更新詞典,在切分語句時,將語句的每個字符串與詞表中的每個詞進行逐一匹配,找到則切分,找不到則不予切分。

按照匹配劃分,主要有正向最大匹配、逆向最大匹配以及雙向最大匹配這3種切分方法。

1. 正向最大匹配

正向最大匹配(Maximum Match)通常簡稱為MM法,其執(zhí)行過程如下所示。

從左向右取待切分漢語句的m個字符作為匹配字段,m為機器詞典中最長詞條的字符數。 查找機器詞典并進行匹配。若匹配成功,則將這個匹配字段作為一個詞切分出來。若匹配不成功,則將這個匹配字段的最后一個字去掉,剩下的字符串作為新的匹配字段,進行再次匹配,重復以上過程,直到切分出所有詞為止。

比如我們現在有個詞典,最長詞的長度為5,詞典中存在“南京市長”“長江大橋”和“大橋”3個詞。

現采用正向最大匹配對句子“南京市長江大橋”進行分詞,那么首先從句子中取出前5個字“南京市長江”,發(fā)現詞典中沒有該詞,于是縮小長度,取前4個字“南京市長”,詞典中存在該詞,于是該詞被確認切分。

再將剩下的“江大橋”按照同樣方式切分,得到“江”“大橋”,最終分為“南京市長”“江”“大橋”3個詞。顯然,這種結果不是我們所希望的。正向最大匹配法示例代碼如下。

classMM(object):def__init__(self):self.window_size=3defcut(self,text):result=[]index=0text_length=len(text)dic=['研究','研究生','生命','起源']whiletext_length>index:forsizeinrange(self.window_size+index,index,-1):#4,0,-1piece=text[index:size]ifpieceindic:index=size-1breakindexindex=index+1result.append(piece)returnresult

分詞的結果如下所示,這個結果并不能讓人滿意。

text='研究生命的起源'tokenizer=MM()print(tokenizer.cut(text))

輸出結果如下所示。

['研究生','命','的','起源']

2. 逆向最大匹配

逆向最大匹配簡稱為RMM法。RMM法的基本原理與MM法大致相同,不同的是分詞切分的方向與MM法相反。

逆向最大匹配法從被處理文檔的末端開始匹配掃描,每次取最末端的m個字符(m為詞典中最長詞數)作為匹配字段,若匹配失敗,則去掉匹配字段最前面的一個字,繼續(xù)匹配。相應地,它使用的分詞詞典是逆序詞典,其中的每個詞條都將按逆序方式存放。

在實際處理時,先將文檔進行倒排處理,生成逆序文檔。然后,根據逆序詞典,對逆序文檔用正向最大匹配法處理即可。

由于漢語中偏正結構較多,若從后向前匹配,可以適當提高精確度。所以,逆向最大匹配法比正向最大匹配法的誤差要小。

統計結果表明,單純使用正向最大匹配的錯誤率為1/169,單純使用逆向最大匹配的錯誤率為1/245。比如之前的“南京市長江大橋”,按照逆向最大匹配,最終得到“南京市”“長江大橋”的分詞結果。

當然,如此切分并不代表完全正確,可能有個叫“江大橋”的“南京市長”也說不定。逆向最大匹配法示例代碼如下。

classRMM(object):def__init__(self):self.window_size=3defcut(self,text):result=[]index=len(text)dic=['研究','研究生','生命','命','的','起源']whileindex>0:forsizeinrange(index-self.window_size,index):piece=text[size:index]ifpieceindic:index=size+1breakindexindex=index-1result.append(piece)result.reverse()returnresult

分詞的結果如下所示,這個結果就很準確了。

text='研究生命的起源'tokenizer=RMM()print(tokenizer.cut(text))

輸出結果如下所示。

['研究','生命','的','起源']

3. 雙向最大匹配

雙向最大匹配法是將正向最大匹配法得到的分詞結果和逆向最大匹配法得到的結果進行比較,然后按照最大匹配原則,選取詞數切分最少的作為結果。

據Sun M.S.和Benjamin K.T.研究表明,對于中文中90.0%左右的句子,正向最大匹配和逆向最大匹配的切分結果完全重合且正確,只有大概9.0%的句子采用兩種切分方法得到的結果不一樣,但其中必有一個是正確的(歧義檢測成功),只有不到1.0%的句子,或者正向最大匹配和逆向最大匹配的切分結果雖重合卻都是錯的,或者正向最大匹配和逆向最大匹配的切分結果不同但兩個都不對(歧義檢測失敗)。這正是雙向最大匹配法在實用中文信息處理系統中得以廣泛使用的原因所在。

前面列舉的“南京市長江大橋”采用雙向最大匹配法進行切分,中間產生“南京市/ 江/ 大橋”和“南京市/ 長江大橋”兩種結果,最終選取詞數較少的“南京市/ 長江大橋”這一結果。

雙向最大匹配的規(guī)則如下所示。

(1) 如果正反向分詞結果詞數不同,則取分詞數量較少的那個結果(上例:“南京市/江/大橋”的分詞數量為3,而“南京市/長江大橋”的分詞數量為2,所以返回分詞數量為2的結果)。

(2) 如果分詞結果詞數相同,則:

分詞結果相同,就說明沒有歧義,可返回任意一個結果。 分詞結果不同,返回其中單字較少的那個。比如前文示例代碼中,正向最大匹配返回的結果為“['研究生', '命', '的', '起源']”,其中單字個數為2個;而逆向最大匹配返回的結果為“['研究', '生命', '的', '起源']”,其中單字個數為1。所以返回的是逆向最大匹配的結果。

參考代碼如下所示。

#統計單字成詞的個數defcount_singlechar(word_list):returnsum(1forwordinword_listiflen(word)==1)defbidirectional_segment(text):mm=MM()rmm=RMM()f=mm.cut(text)b=rmm.cut(text)if(len(f)len(b)):returnbelse:if(count_singlechar(f)>=count_singlechar(b)):returnbelse:returnf

最后我們驗證一下效果。

print(bidirectional_segment('研究生命的起源'))

輸出結果為:

['研究','生命','的','起源']

基于規(guī)則的分詞一般都較為簡單高效,但是詞典的維護面臨很龐大的工作量。在網絡發(fā)達的今天,網絡新詞層出不窮,很難通過詞典覆蓋所有詞。另外,詞典分詞也無法區(qū)分歧義以及無法召回新詞。

在實際項目中,我們是否會考慮使用規(guī)則分詞?

雖然使用規(guī)則分詞的分詞準確率看上去非常高,但是規(guī)則分詞有幾個特別大的問題:

不斷維護詞典是非常煩瑣的,新詞總是層出不窮,人工維護費時費力; 隨著詞典中條目數的增加,執(zhí)行效率變得越來越低; 無法解決歧義問題。

關鍵詞:

精選 導讀

募資55億港元萬物云啟動招股 預計9月29日登陸港交所主板

萬科9月19日早間公告,萬物云當日啟動招股,預計發(fā)行價介乎每股47 1港元至52 7港元,預計9月29日登陸港交所主板。按發(fā)行1 167億股計算,萬

發(fā)布時間: 2022-09-20 10:39
管理   2022-09-20

公募基金二季度持股情況曝光 隱形重倉股多為高端制造業(yè)

隨著半年報披露收官,公募基金二季度持股情況曝光。截至今年二季度末,公募基金全市場基金總數為9794只,資產凈值為269454 75億元,同比上

發(fā)布時間: 2022-09-02 10:45
資訊   2022-09-02

又有上市公司宣布變賣房產 上市公司粉飾財報動作不斷

再有上市公司宣布變賣房產。四川長虹25日稱,擬以1 66億元的轉讓底價掛牌出售31套房產。今年以來,A股公司出售房產不斷。根據記者不完全統

發(fā)布時間: 2022-08-26 09:44
資訊   2022-08-26

16天12連板大港股份回復深交所關注函 股份繼續(xù)沖高

回復交易所關注函后,大港股份繼續(xù)沖高。8月11日大港股份高開,隨后震蕩走高,接近收盤時觸及漲停,報20 2元 股。值得一提的是,在7月21日

發(fā)布時間: 2022-08-12 09:56
資訊   2022-08-12

萬家基金再添第二大股東 中泰證券擬受讓11%基金股權

7月13日,中泰證券發(fā)布公告,擬受讓齊河眾鑫投資有限公司(以下簡稱齊河眾鑫)所持有的萬家基金11%的股權,交易雙方共同確定本次交易的標的資

發(fā)布時間: 2022-07-14 09:39
管理   2022-07-14

央行連續(xù)7日每天30億元逆回購 對債市影響如何?

央行12日再次開展了30億元逆回購操作,中標利率2 10%。這已是央行連續(xù)7日每天僅進行30億元的逆回購縮量投放,創(chuàng)下去年1月以來的最低操作規(guī)

發(fā)布時間: 2022-07-13 09:38
資訊   2022-07-13

美元指數創(chuàng)近20年新高 黃金期貨創(chuàng)出逾9個月新低

由于對美聯儲激進加息的擔憂,美元指數11日大漲近1%創(chuàng)出近20年新高。受此影響,歐美股市、大宗商品均走弱,而黃金期貨創(chuàng)出逾9個月新低。美

發(fā)布時間: 2022-07-13 09:36
資訊   2022-07-13

美股三大股指全線下跌 納斯達克跌幅創(chuàng)下記錄以來最大跌幅

今年上半年,美股持續(xù)回落。數據顯示,道瓊斯指數上半年下跌15 3%,納斯達克綜合指數下跌29 5%,標普500指數下跌20 6%。其中,納斯達克連續(xù)

發(fā)布時間: 2022-07-04 09:51
推薦   2022-07-04

融資客熱情回升 兩市融資余額月內增加超344億元

近期A股走強,滬指6月以來上漲4%,融資客熱情明顯回升。數據顯示,截至6月16日,兩市融資余額1 479萬億元,月內增加344 67億元,最近一個半

發(fā)布時間: 2022-06-20 09:41
資訊   2022-06-20

4個交易日凈買入超百億元 北向資金持續(xù)流入A股市場

北向資金凈流入態(tài)勢延續(xù)。繼6月15日凈買入133 59億元后,北向資金6月16日凈買入44 52億元。自5月27日至今,除6月13日以外,北向資金累計凈

發(fā)布時間: 2022-06-17 09:37
推薦   2022-06-17