淺談數(shù)據(jù)處理中的分詞技術(shù)
***章:基礎(chǔ)介紹
定義:分詞技術(shù)就是搜索引擎針對(duì)用戶提交查詢的關(guān)鍵詞串進(jìn)行的查詢處理后根據(jù)用戶的關(guān)鍵詞串用各種匹配方法進(jìn)行的一種技術(shù)。
概述
我們要理解分詞技術(shù)先要理解一個(gè)概念。那就是查詢處理,當(dāng)用戶向搜索引擎提交查詢后,搜索引擎接收到用戶的信息要做一系列的處理。步驟如下所示:
1.首先是到數(shù)據(jù)庫里面索引相關(guān)的信息,這就是查詢處理。
那么查詢處理又是如何工作的呢?很簡單,把用戶提交的字符串沒有超過3個(gè)的中文字,就會(huì)直接到數(shù)據(jù)庫索引詞匯。超過4個(gè)中文字的,首先用分隔符比如空格,標(biāo)點(diǎn)符號(hào),將查詢串分割成若干子查詢串。
舉個(gè)例子。“什么是百度分詞技術(shù)” 我們就會(huì)把這個(gè)詞分割成“ 什么是,百度,分詞技術(shù)。”這種分詞方法叫做反向匹配法。
2.然后再看用戶提供的這個(gè)詞有沒有重復(fù)詞匯
如果有的話,會(huì)丟棄掉,默認(rèn)為一個(gè)詞匯。接下來檢查用戶提交的字符串,有沒有字母和數(shù)字。如果有的話,就把字母和數(shù)字認(rèn)為一個(gè)詞。
這就是搜索引擎的查詢處理。
分詞的原理
百度是如何來分詞的呢?分詞技術(shù)現(xiàn)今非常成熟了。分為3種技術(shù)。
字符串匹配的分詞方法
這是種常用的分詞法,百度就是用此類分詞。字符串匹配的分詞方法,又分為3種分詞方法。
(1).正向***匹配法
就是把一個(gè)詞從左至右來分詞。
舉個(gè)例子:”不知道你在說什么”
這句話采用正向***匹配法是如何分的呢?“不知道,你,在,說什么”。
(2).反向***匹配法
“不知道你在說什么”反向***匹配法來分上面這段是如何分的。“不,知道,你在,說,什么”,這個(gè)就分的比較多了,反向***匹配法就是從右至左。
(3).就是最短路徑分詞法。
就是說一段話里面要求切出的詞數(shù)是最少的。
“不知道你在說什么”最短路徑分詞法就是指,把上面那句話分成的詞要是最少的。“不知道,你在,說什么”,這就是最短路徑分詞法,分出來就只有3個(gè)詞了。
(4).雙向***匹配法。
而有一種特殊的情況,就是關(guān)鍵詞前后組合內(nèi)容被認(rèn)為粘性相差不大,而搜索結(jié)果中也同時(shí)包含這兩組詞的話,百度會(huì)進(jìn)行正反向同時(shí)進(jìn)行分詞匹配。
詞義分詞法
就是一種機(jī)器語音判斷的分詞方法。很簡單,進(jìn)行句法、語義分析,利用句法信息和語義信息來處理歧義現(xiàn)象來分詞,這種分詞方法,現(xiàn)在還不成熟,處在測試階段。
統(tǒng)計(jì)分詞法
根據(jù)詞組的統(tǒng)計(jì),就會(huì)發(fā)現(xiàn)兩個(gè)相鄰的字出現(xiàn)的頻率最多,那么這個(gè)詞就很重要。就可以作為用戶提供字符串中的分隔符,這樣來分詞。
比如,“我的,你的,許多的,這里,這一,那里”等等,這些詞出現(xiàn)的比較多,就從這些詞里面分開來。
第二章:中文分詞技術(shù)
一、為什么要進(jìn)行中文分詞?
詞是最小的能夠獨(dú)立活動(dòng)的有意義的語言成分,英文單詞之間是以空格作為自然分界符的,而漢語是以字為基本的書寫單位,詞語之間沒有明顯的區(qū)分標(biāo)記,因此,中文詞語分析是中文信息處理的基礎(chǔ)與關(guān)鍵。
Lucene中對(duì)中文的處理是基于自動(dòng)切分的單字切分,或者二元切分。除此之外,還有***切分(包括向前、向后、以及前后相結(jié)合)、最少切分、全切分等等。
二、中文分詞技術(shù)的分類
我們討論的分詞算法可分為三大類:基于字典、詞庫匹配的分詞方法;基于詞頻度統(tǒng)計(jì)的分詞方法和基于知識(shí)理解的分詞方法。
***類方法應(yīng)用詞典匹配、漢語詞法或其它漢語語言知識(shí)進(jìn)行分詞,如:***匹配法、最小分詞方法等。這類方法簡單、分詞效率較高,但漢語語言現(xiàn)象復(fù)雜豐富,詞典的完備性、規(guī)則的一致性等問題使其難以適應(yīng)開放的大規(guī)模文本的分詞處理。第二類基于統(tǒng)計(jì)的分詞方法則基于字和詞的統(tǒng)計(jì)信息,如把相鄰字間的信息、詞頻及相應(yīng)的共現(xiàn)信息等應(yīng)用于分詞,由于這些信息是通過調(diào)查真實(shí)語料而取得的,因而基于統(tǒng)計(jì)的分詞方法具有較好的實(shí)用性。
下面簡要介紹幾種常用方法:
1)逐詞遍歷法。
逐詞遍歷法將詞典中的所有詞按由長到短的順序在文章中逐字搜索,直至文章結(jié)束。也就是說,不管文章有多短,詞典有多大,都要將詞典遍歷一遍。這種方法效率比較低,大一點(diǎn)的系統(tǒng)一般都不使用。
2)基于字典、詞庫匹配的分詞方法(機(jī)械分詞法)
這種方法按照一定策略將待分析的漢字串與一個(gè)“充分大的”機(jī)器詞典中的詞條進(jìn)行匹配,若在詞典中找到某個(gè)字符串,則匹配成功。識(shí)別出一個(gè)詞,根據(jù)掃描方向的不同分為正向匹配和逆向匹配。根據(jù)不同長度優(yōu)先匹配的情況,分為***(最長)匹配和最小(最短)匹配。根據(jù)與詞性標(biāo)注過程是否相結(jié)合,又可以分為單純分詞方法和分詞與標(biāo)注相結(jié)合的一體化方法。常用的方法如下:
a、***正向匹配法 (MaximumMatchingMethod)通常簡稱為MM法。其基本思想為:假定分詞詞典中的最長詞有i個(gè)漢字字符,則用被處理文檔的當(dāng)前字串中的前i個(gè)字作為匹配字段,查找字典。若字典中存在這樣的一個(gè)i字詞,則匹配成功,匹配字段被作為一個(gè)詞切分出來。如果詞典中找不到這樣的一個(gè)i字詞,則匹配失敗,將匹配字段中的***一個(gè)字去掉,對(duì)剩下的字串重新進(jìn)行匹配處理…… 如此進(jìn)行下去,直到匹配成功,即切分出一個(gè)詞或剩余字串的長度為零為止。這樣就完成了一輪匹配,然后取下一個(gè)i字字串進(jìn)行匹配處理,直到文檔被掃描完為止。
其算法描述如下:
(1)初始化當(dāng)前位置計(jì)數(shù)器,置為0;
(2)從當(dāng)前計(jì)數(shù)器開始,取前2i個(gè)字符作為匹配字段,直到文檔結(jié)束;
(3)如果匹配字段長度不為0,則查找詞典中與之等長的作匹配處理。
如果匹配成功,
則,
a)把這個(gè)匹配字段作為一個(gè)詞切分出來,放入分詞統(tǒng)計(jì)表中;
b)把當(dāng)前位置計(jì)數(shù)器的值加上匹配字段的長度;
c)跳轉(zhuǎn)到步驟2);
否則
a) 如果匹配字段的***一個(gè)字符為漢字字符,
則
①把匹配字段的***一個(gè)字去掉;
②匹配字段長度減2;
否則
①把匹配字段的***一個(gè)字節(jié)去掉;
②匹配字段長度減1;
b)跳轉(zhuǎn)至步驟3);
否則
a)如果匹配字段的***一個(gè)字符為漢字字符,
則 當(dāng)前位置計(jì)數(shù)器的值加2;
否則當(dāng)前位置計(jì)數(shù)器的值加1;
b)跳轉(zhuǎn)到步驟2)。
b、逆向***匹配法 (ReverseMaximumMatcingMethod)通常簡稱為RMM法。RMM法的基本原理與MM法相同 ,不同的是分詞切分的方向與MM法相反,而且使用的分詞辭典也不同。逆向***匹配法從被處理文檔的末端開始匹配掃描,每次取最末端的2i個(gè)字符(i字字串)作為匹配字段,若匹配失敗,則去掉匹配字段最前面的一個(gè)字,繼續(xù)匹配。相應(yīng)地,它使用的分詞詞典是逆序詞典,其中的每個(gè)詞條都將按逆序方式存放。在實(shí)際處理時(shí),先將文檔進(jìn)行倒排處理,生成逆序文檔。然后,根據(jù)逆序詞典,對(duì)逆序文檔用正向***匹配法處理即可。
由于漢語中偏正結(jié)構(gòu)較多,若從后向前匹配,可以適當(dāng)提高精確度。所以,逆向***匹配法比正向***匹配法的誤差要小。統(tǒng)計(jì)結(jié)果表明 ,單純使用正向***匹配的錯(cuò)誤率為 1/16 9,單純使用逆向***匹配的錯(cuò)誤率為 1/245。例如切分字段“碩士研究生產(chǎn)”,正向***匹配法的結(jié)果會(huì)是“碩士研究生 / 產(chǎn)”,而逆向***匹配法利用逆向掃描,可得到正確的分詞結(jié)果“碩士 / 研究 / 生產(chǎn)”。
當(dāng)然,***匹配算法是一種基于分詞詞典的機(jī)械分詞法,不能根據(jù)文檔上下文的語義特征來切分詞語,對(duì)詞典的依賴性較大,所以在實(shí)際使用時(shí),難免會(huì)造成一些分詞錯(cuò)誤,為了提高系統(tǒng)分詞的準(zhǔn)確度,可以采用正向***匹配法和逆向***匹配法相結(jié)合的分詞方案(即雙向匹配法,見(四)。)
C、最少切分法:使每一句中切出的詞數(shù)最小。
D、雙向匹配法:將正向***匹配法與逆向***匹配法組合。先根據(jù)標(biāo)點(diǎn)對(duì)文檔進(jìn)行粗切分,把文檔分解成若干個(gè)句子,然后再對(duì)這些句子用正向***匹配法和逆向***匹配法進(jìn)行掃描切分。如果兩種分詞方法得到的匹配結(jié)果相同,則認(rèn)為分詞正確,否則,按最小集處理。
3). 全切分和基于詞的頻度統(tǒng)計(jì)的分詞方法
基于詞的頻度統(tǒng)計(jì)的分詞方法是一種全切分方法。在討論這個(gè)方法之前我們先要明白有關(guān)全切分的相關(guān)內(nèi)容。
全切分
全切分要求獲得輸入序列的所有可接受的切分形式,而部分切分只取得一種或幾種可接受的切分形式,由于部分切分忽略了可能的其他切分形式,所以建立在部分切分基礎(chǔ)上的分詞方法不管采取何種歧義糾正策略,都可能會(huì)遺漏正確的切分,造成分詞錯(cuò)誤或失敗。而建立在全切分基礎(chǔ)上的分詞方法,由于全切分取得了所有可能的切分形式,因而從根本上避免了可能切分形式的遺漏,克服了部分切分方法的缺陷。
全切分算法能取得所有可能的切分形式,它的句子覆蓋率和分詞覆蓋率均為100%,但全切分分詞并沒有在文本處理中廣泛地采用,原因有以下幾點(diǎn):
1)全切分算法只是能獲得正確分詞的前提,因?yàn)槿蟹植痪哂衅缌x檢測功能,最終分詞結(jié)果的正確性和完全性依賴于獨(dú)立的歧義處理方法,如果評(píng)測有誤,也會(huì)造成錯(cuò)誤的結(jié)果。
2)全切分的切分結(jié)果個(gè)數(shù)隨句子長度的增長呈指數(shù)增長,一方面將導(dǎo)致龐大的無用數(shù)據(jù)充斥于存儲(chǔ)數(shù)據(jù)庫;另一方面當(dāng)句長達(dá)到一定長度后,由于切分形式過多,造成分詞效率嚴(yán)重下降。
基于詞的頻度統(tǒng)計(jì)的分詞方法:
這是一種全切分方法。它不依靠詞典,而是將文章中任意兩個(gè)字同時(shí)出現(xiàn)的頻率進(jìn)行統(tǒng)計(jì),次數(shù)越高的就可能是一個(gè)詞。它首先切分出與詞表匹配的所有可能的詞,運(yùn)用統(tǒng)計(jì)語言模型和決策算法決定***的切分結(jié)果。它的優(yōu)點(diǎn)在于可以發(fā)現(xiàn)所有的切分歧義并且容易將新詞提取出來。
4).基于知識(shí)理解的分詞方法。
該方法主要基于句法、語法分析,并結(jié)合語義分析,通過對(duì)上下文內(nèi)容所提供信息的分析對(duì)詞進(jìn)行定界,它通常包括三個(gè)部分:分詞子系統(tǒng)、句法語義子系統(tǒng)、總控部分。在總控部分的協(xié)調(diào)下,分詞子系統(tǒng)可以獲得有關(guān)詞、句子等的句法和語義信息來對(duì)分詞歧義進(jìn)行判斷。這類方法試圖讓機(jī)器具有人類的理解能力,需要使用大量的語言知識(shí)和信息。由于漢語語言知識(shí)的籠統(tǒng)、復(fù)雜性,難以將各種語言信息組織成機(jī)器可直接讀取的形式。因此目前基于知識(shí)的分詞系統(tǒng)還處在試驗(yàn)階段。
5).一種新的分詞方法
并行分詞方法:這種分詞方法借助于一個(gè)含有分詞詞庫的管道進(jìn)行 ,比較匹配過程是分步進(jìn)行的 ,每一步可以對(duì)進(jìn)入管道中的詞同時(shí)與詞庫中相應(yīng)的詞進(jìn)行比較 ,由于同時(shí)有多個(gè)詞進(jìn)行比較匹配 ,因而分詞速度可以大幅度提高。這種方法涉及到多級(jí)內(nèi)碼理論和管道的詞典數(shù)據(jù)結(jié)構(gòu)。