NLP之分词技术理论
? ? ? ? 從事了兩年多的NLP研究工作,平時忙于工作,難以靜下心來寫技術(shù)博客。由于疫情的原因,總算有太多的空閑時間來自由安排自己的學習生活,對落下的東西做點補償吧。隨著學習和工作的積累,打算從NLP的基礎(chǔ)工作開始,包括分詞、詞性標注、命名實體識別、句法分析等,這些技術(shù)是NLP上層應用的基礎(chǔ),在工作中,發(fā)現(xiàn)很多從業(yè)人員缺少對這些工作的重視,盡管深度學習很火,如果對底層技術(shù)認識不夠,很難做到對上層應用的改善。本文出于這樣的目的,對自己所學做以總結(jié)。
? ? ? ? 分詞通常是NLP工作的第一步,當然在這里指的是已經(jīng)做過數(shù)據(jù)清洗的文本。本系列以中英文為研究對象,進行展開說明。不論是中文還是英文,要對語言進行量化,分詞必不可少,但中文分詞難度遠高于英文,因此也有人調(diào)侃拉丁語系(如英文、法文等)沒有分詞。那么中文分詞難點是什么呢?主要有3點:①分詞的規(guī)范性;分詞規(guī)范嚴格來講,沒有標準,因為對于漢字而言,單個字便具有獨特的含義,字的組合又會表現(xiàn)出不同的含義,主觀性較強。②切分歧義;漢語受到語境的影響,不同的切分在不同的語境下表現(xiàn)出不同的含義。③詞表規(guī)模;NLP任務很重要的工作便是詞典的構(gòu)建,很多基于詞典的分詞方法,往往會由于詞典規(guī)模受限,而得不到理想的切分效果,因此,很多工具都提供了自定義加載詞典功能,以提高切分效果,比如jieba工具。
? ? ? ? 了解了分詞的難點后,那么為什么要進行分詞呢?很多人很少思考這個問題,僅僅把分詞當做一個流程。語言是人類區(qū)別于其他生物的標志。詞是最基本的能夠表示事物含義的語言單位,計算機無法識別文字符號,只有對文字符號進行編碼,才能進一步處理。有了分詞,便可以進一步運用數(shù)學方法來解決問題。
? ? ? ? 目前,常用的分詞算法分為3類:基于詞表的分詞算法、基于經(jīng)典機器學習方法的分詞算法、基于深度學習的分詞算法。
? ? ? ? 基于詞表的分詞算法包括前向最大匹配法、后向最大匹配法、雙向最大匹配法?;谠~表的分詞算法會有一個超參數(shù),稱之為窗口,指的是在該窗口大小下,和詞表中的詞進行匹配,如果沒匹配上,則縮小窗口的大小。對于前向最大匹配法:比如給定詞典:{我,愛,與,喜歡,自然,語言,處理,自然語言,自然語言處理,人工智能,智能,機器學習,機器,學習},給定一句話“我喜歡自然語言處理與機器學習”,設(shè)定窗口等于6,下面“[]”括起來的表示窗口內(nèi):
“[我愛自然語言]處理與機器學習”,發(fā)現(xiàn)詞典中沒有“我愛自然語言”,縮小窗口,“[我愛自然語]言處理與機器學習”,發(fā)現(xiàn)“我愛自然語”也沒有,繼續(xù)縮小窗口,“[我愛自然]語言處理與機器學習”,同樣沒有,依次類推,最后切分結(jié)果“我/愛/自然語言處理/與/機器學習”。
對于后向最大匹配法:比如給定詞典:{我,愛,與,喜歡,自然,語言,處理,自然語言,自然語言處理,人工智能,智能,機器學習,機器,學習},給定一句話“我喜歡自然語言處理與機器學習”,設(shè)定窗口等于6,下面“[]”括起來的表示窗口內(nèi):
“我愛自然語言處[理與機器學習]”,發(fā)現(xiàn)詞典中沒有“理與機器學習”,縮小窗口,“我愛自然語言處理[與機器學習]”,發(fā)現(xiàn)“與機器學習”也沒有,繼續(xù)縮小窗口,“我愛自然語言處理與[機器學習]”,這時發(fā)現(xiàn)“機器學習”在詞典中有,切分成功,繼續(xù)余下的內(nèi)容,依次類推,最后切分結(jié)果“我/愛/自然語言處理/與/機器學習”。
雙向最大匹配算法是將前向最大匹配得到的分詞結(jié)果和后向最大匹配得到的分詞結(jié)果進行比較,從而決定正確的分詞結(jié)果。它采用了一種啟發(fā)式的思想:①如果前向和后向的分詞結(jié)果詞數(shù)不同,則取分詞數(shù)量較少的那個。②如果分詞結(jié)果詞數(shù)相同,在這樣的條件下:a、分詞結(jié)果相同,就說明沒有歧義,可返回任意一個。b、分詞結(jié)果不同,返回其中單字較少的那個。
? ? ? ? 基于經(jīng)典機器學習的分詞算法主要包括:基于N-gram語言模型的分詞算法、基于HMM的分詞算法、基于CRF的分詞算法等等。基于N-gram語言模型的分詞算法的核心思想是從多個候選切分中,選擇概率最大的切分。比如對于“我愛機器學習”,選擇bi-gram二元語言模型,假設(shè)有三種候選切分(其實可以產(chǎn)生很多切分,這里僅僅舉例而已):“我/愛/機器/學習”,“我/愛機器/學習”,“我/愛/機器學習”。那么分別計算P(我/愛/機器/學習)=P(我)P(愛/我)P(機器/愛)P(學習/機器)、P(我/愛機器/學習)=P(我)P(愛機器/我)P(學習/愛機器)、P(我/愛/機器學習)=P(我)P(愛/我)P(機器學習/愛)三個值的大小。而這些值也稱之為參數(shù),是可以根據(jù)原始語料計算出來的,比如P(機器學習/愛)=P(愛,機器學習)/P(愛)=count(愛,機器學習)/count(愛)。這樣選擇概率最大的切分結(jié)果即可。
對于基于HMM的分詞算法,實質(zhì)上是將分詞作為一項序列標注任務,雖然與基于詞表的方法相比,不依賴于事先建好的詞表,但是仍然需要分好詞的訓練語料。規(guī)定4個標注符號:詞首B、詞中M、詞尾E、單字詞S。
對于"我愛機器學習":
| X | 我 | 愛 | 機 | 器 | 學 | 習 |
| Y | S | S | B | M | M | E |
HMM是一個生成式模型,X為觀測序列,Y為隱狀態(tài)序列。
以下為圖模型:
?
基于CRF的中文分詞算法與基于HMM的分詞算法,方法相似,不過原理有本質(zhì)不同,CRF屬于判別式模型,通過定義條件概率P(Y|X)來描述模型。同樣定義詞位:詞首B,詞中M,詞尾E,單字詞S。CRF分詞的過程就是對詞位標注后,將B和E之間的字,以及S單字構(gòu)成分詞。對于原始例句:我愛機器學習;CRF標注后:我/S 愛/S 機/B 器/M 學/M 習/E。分詞結(jié)果:我/愛/機器學習。
整個目標函數(shù)為:
其中S表示整個句子,l表示詞位,i表示位置信息,f()表示特征函數(shù)。整個圖模型表示如下:
?
?基于CRF的分詞方法采用了機器學習算法CRF,不僅考慮了詞語出現(xiàn)的頻率信息,同時考慮了上下文語境,具有較好的學習能力,而且是對基于HMM方法的一種改進。但缺點在于計算量大,時間長,算法復雜,需要設(shè)置特征模板。
? ? ? ? 基于深度學習的分詞算法,其核心思路是將深度學習模型和經(jīng)典機器學習算法進行結(jié)合,利用深度學習模型進行特征提取,再利用機器學習算法進行分詞。典型的框架為BiLSTM+CRF,如下圖所示:
?輸入層是一個embedding層,經(jīng)過雙向LSTM進行特征學習,輸出層為CRF層。詳細內(nèi)容參考博客https://blog.csdn.net/chivalrousli/article/details/70482488
本文主要總結(jié)了分詞方法相關(guān)的理論,后期有空會補上代碼實戰(zhàn),希望能夠幫到大家。
總結(jié)
以上是生活随笔為你收集整理的NLP之分词技术理论的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux内核驱动使用hugepages
- 下一篇: ckfinder使用