1. 程式人生 > >《NLP漢語自然語言處理原理與實踐》第一章

《NLP漢語自然語言處理原理與實踐》第一章

一.基本知識

規則派還是統計派:

1.規則派:以語言學理論為基礎,根據語言學家對語言現象的認識,採用規則形式描述或解釋歧義行為或歧義特性。規則派首先要對大量的語言現象進行研究,歸納出一系列的語言規則。然後再形成一套複雜的規則集----語言分析或生產系統,對自然語言進行分析處理。

2.統計派:以基於語料庫的統計分析為基礎的經驗主義方法,該方法更注重用數學,從能代表自然語言規律的大規模真實文字中發現知識,抽取語言現象或統計規律。統計派來源於多種數學基礎,包括香濃的資訊理論、最優化方法、概率圖模型、神經網路、深度學習等。她將語言事件富裕概率,作為其可信度,由此來判斷某個語言現象是常見的還是罕見的。統計派的方法則偏重於對語料庫中人們實際使用的普遍語言現象的統計表述。統計方法是語料庫語言學研究的主要內容。

深度學習就是一種特徵學習方法,把原始資料通過一些簡單的但是非線性的模型轉換成更高層次的、更加抽象的表達。通過足夠多的轉換的組合,非常複雜的函式也可以被學習。


NLP 全系列處理框架
名稱 包含模組和下載地址 開發語言
哈工大的Ltp3.X 中文分詞、詞性標註、未登入詞識別、句法分析、語義角色標註
網址:https://github.com/HIT-SCIR/ltp/releases
C++
Stanford NLP 中文分詞、詞性標註、未登入詞識別、句法分析等
網址:http://nlp.stanford.edu/software/
java
FudanNLP 中文分詞、句法分析等
網址:https://github.com/xpqiu/fnlp/
java
HaNLP 中文分詞、句法分析等各類演算法
網址:http://hanlp.linrunsoft.com/
java
... ... ....

NLP 分詞框架
名稱 包含模組和下載地址 開發語言
ICTCLAS分詞系統 具有里程碑意義的中文分詞系統
網址:http://www.threedweb.cn/forum-2-1.html
C++
Ansj中文分詞系統 中等規模的中文分詞系統
網址:https://github.com/NLPchina/ansj_seg
Java
結巴分詞 小規模中文分詞
網址:https://github.com/fxsjy/jieba
Python
... ... ...

一個自然語言處理系統也應該包含至少三個模組

語言的解析語義的理解以及語言的生成

在語法解析層面,大規模高精度的中文分詞、詞性標註系統已經基本達到商用的要求,但在句法解析方面還存在著精度問題

在語義解析層面,命名實體識別、語義塊都已經獲得了較高的精度。人工智慧對知識庫的研究歷史悠久,已經形成一整套的知識庫的架構和推理體系。實現句子到知識庫的主要方法是語義角色標註系統,但在整句的理解層面,語義角色標註系統的精度嚴重依賴句法解析系統,這使該系統離商用還有一段距離。

由於前兩個層面的問題,語言生成的發展相對滯後,應用也不廣泛,雖有商業的應用,但是範圍都非常狹窄,基本都集中在機器翻譯領域


二.中文分詞模組:

(1)基於條件隨機場(CRF)的中文分詞演算法的開源系統。

國內使用CRF做中文分詞的開源系統主要是哈工大的HIT LTP語言技術平臺(https://github.com/HIT-SCIR/pyltp)

(2)基於張華平NShort的中文分詞演算法的開源系統。

張華平NShort的中文分詞演算法是目前大規模中文分詞的主流演算法。在商用領域,大多數搜尋引擎公司都使用該演算法作為主要的分詞演算法。具有演算法原理簡單、容易理解、便於訓練、大規模分詞的效率高、模型支援增量擴充套件、模型佔用資源低等優勢。

結巴分詞器是該演算法的Python實現,結巴分詞的演算法核心就是NShort中文分詞演算法(https://github.com/fxsjy/jieba)

      結巴分詞模組可以支援如下三種的分詞模型:

      1.精確模式,試圖將句子最精確地切開,適合文字分析(類似Ltp的分詞方式)

       2.全模式,把句子中所有可以成詞的詞語都掃描出來,速度非常快,但是不能解決歧義。

       3.搜尋引擎模式,在精確模式的基礎上對長詞再次切分,提高召回率,適合用於搜尋引擎分詞。

它支援繁體分詞,支援基於概率的使用者字典。

結巴分詞庫的安裝:

pip  install jieba

      使用結巴分詞:

import jieba
#結巴分詞--全模式
sent = "愛吃花果,花非花霧非霧"
wordlist = jieba.cut(sent,cut_all=True)
print("|".join(wordlist))

#結巴分詞--精確模式
wordlist = jieba.cut(sent)
print("|".join(wordlist))

#結巴分詞--搜尋引擎模式
wordlist = jieba.cut_for_search(sent)
print("|".join(wordlist))

result:

愛|吃|花果|||花|非|花|霧非霧
愛|吃|花果|,|花非花|霧非霧
愛|吃|花果|,|花非花|霧非霧

使用使用者自定義字典:每行三個欄位,詞  詞頻  詞性

userdict.txt檔案必須為UTF-8編碼

欄位:

愛 5 v

吃花果 5  n

結巴分詞中的字典詞頻設定,預設為5.這個數越大,說明該字串成詞的概率越高,受到內建字典的干擾就越小;這個數越小,使用者字典內的詞受到內建字典的干擾越強,不能正確切分的概率就越大。使用者需要根據實際情況來設定這個值。

jieba.load_userdict("userdict.txt")
sent = "愛吃花果,花非花霧非霧"
wordlist = jieba.cut(sent)
print("|".join(wordlist))
result
愛|吃花果|,|花非花|霧非霧
三、詞性標註
    詞性標註又稱詞類標註,是指判斷出在一個句子中每個詞所扮演的角色,例如名稱,動詞,形容詞等。
    一般而言,中文的詞性標註演算法比較統一,大多數使用HMM(因馬爾科夫模型)或者最大熵演算法,
如結巴分詞的詞性標註。為了獲得更高的精度,也有使用CRF演算法的,如Ltp中的詞性標註。
    目前流行的中文詞性標籤有兩大類:北大詞性標註集和賓州詞性標註集。這兩類各有千秋。
四、命名實體識別
    命名實體識別用於識別文字中具有特定意義的實體,常見的實體主要包括人名、地名、機構名以及其他專有名詞等。
    ltp和Stanford命名實體識別
五、句法解析
    句法解析是根據給定的語法體系自動推匯出句子的語法結構,分析句子所包含的語法單元和這些
語法單元之間的聯絡,將句子轉化為一顆結構化的語法樹。句法解析是所有自然語言處理的核心模組。
    目前句法分析有兩種不同的理論:一種是短語結構語法;另一種是依存語法。
六、語義角色標註