今天我們來談談如何用python nltk做中文的的自然語言處理
nltk有內建的中文treebank,是中研院的sinica treebank
是免費的中文treebank
至於要如何使用呢?
首先 先載入模組
>>> from nltk.corpus import sinica_treebank
>>> import nltk
接下來我們來看看treebank裡面的東西:
Read on →今天我們來看看nltk.Tree要怎麼用
先載入模組
>>> from nltk import Tree
1.build syntax tree
舉個例子
Gary plays baseball
此句子的剖析樹(syntax tree)是這樣:
用nltk.Tree來建構tree:
>>> tree=Tree('S',[Tree('NP',['Gary']),
... Tree('VP',[Tree('VT',['plays']),
... Tree('NP',['baseball'])])])
>>> tree.draw()
即可將剖析樹畫出來
若沒安裝 python-tk,你也可以這樣把tree印出
>>> tree.pprint()
'(S (NP Gary) (VP (VT plays) (NP baseball)))'
以下為我對於 Ngram Smoothing 這個章節的公式所做的筆記
Introduction
Ngram Smoothing 是用於出現在 Training Corpus 中沒有的 Ngram,
它的機率會是0
本文以 Bigram 為例, Bigram 的機率如下:
如果 , 則
為了避免probability為0, 我們要做 Ngram Smoothing
1.Markov Model
Hidden Markov Model 在 natural language processing 中,
常用於 part-of speech tagging
想要了解 Hidden Markov Model ,就要先了解什麼是 Markov Model
例如, 可以把語料庫中,各種字串的機率分佈,
看成是一個Random varaible 的 sequence ,
其中, 的值是 alphabet (字)的集合 :
如果想要知道一個字串出現的機率, 則可以把字串拆解成Bigram, 逐一用前一個字,來推估下一個字的機率是多少
但是要先假設以下的 Markov Assumption
1.Introduction
在自然語言處理的應用, 常常有分類的問題, 例如把某篇新聞分到哪一類
處理分類問題, 有種簡單的方法, 就是看這篇文章有哪些關鍵字, 根據這些關鍵字的出現與否, 用 Naive Bayes Classifier 做分類
要講 Naive Bayes Classifier 之前, 首先, 要知道 Bayes rule 是什麼, Bayes rule 很簡單, 如下
這個公式, 高中數學應該都有教過 , 如果 和 為 Independence , 則
所謂的 Naive Bayes Classifier , 其實就是應用 Bayes rule 來處理分類問題
Read on →1.Introduction
所謂的 TF-IDF , 是用來找出一篇文章中, 足以代表這篇文章的關鍵字的方法
例如, 有一篇新聞, 是 nltk 的 Reuters Corpus 中的文章, 這篇文章被歸類在 grain , ship 這兩種類別下, 文章的內容如下:
GRAIN SHIPS LOADING AT PORTLAND
There were three grain ships loading and two ships were waiting to load at Portland , according to the Portland Merchants Exchange .
假設不知道什麼是 TF-IDF, 先用人工判別法試看看, 這篇新聞的關鍵字, 應該是 Portland , ship , grain 之類的字, 而不會是 to , at 這種常常出現的字
為什麼呢?因為 to 或 at 雖然在這篇文章中出現較多次, 但其他文章中也常有這些字, 所謂的關鍵的字, 應該是在這篇文章中出現較多次, 且在其他文章中比較少出現的字
所以,如果要在一篇文章中, 尋找這樣的關鍵字, 要考慮以下兩個要素:
Read on →1. Introduction
在機器學習中有一種用於分類的演算法, 叫作 Logistic Regression , 可以把東西分成兩類
而在自然語言處理的應用, 常常需要處理多類別的分類問題, 像是 Part of speech Tagging 就是把一個字詞分類到名詞, 動詞, 形容詞, 之類的問題
如果二元分類的 Logistic Regression , 推廣到多種類別分類, 就可以處理這種分類問題
首先, 把二元分類的 Logistic Regression 公式, 稍做調整, 如下
針對多類別的 Logistic Regression , 叫作 Multinomial logistic regression , 如果總共有 的類別, 每個類別的 label 為 , 則公式如下
Read on →1.Introduction
在自然語言處理中, 想要探討兩個字之間, 是否存在某種關係, 例如某些字比較容易一起出現, 這些字一起出現時, 可能帶有某種訊息
例如, 在新聞報導中, 有 New , York , 這兩個字一起出現, 可以代表一個地名 New York , 所以當出現了 New 這個字, 則有可能出現 York
這可以用 Pointwise Mutual Information(PMI) 計算
Pointwise Mutual Information 的公式如下:
Read on →1.Introduction
在自然語言處理中, 剖析 ( Parsing ) 是根據定義好的文法, 把句子轉換成 Syntax Tree 的過程
Chart Parsing 是利用一種叫做 Chart 的資料結構, 來進行剖析的演算法
Chart 的結構如下
以下為一個 Chart 的例子
Read on →1. Introduction
在自然語言處理中, Phase-Structured Grammar 這類的文法, 是把一個句子, 剖析成一個 完整的剖析樹 , 它的重點是句子中各個成份的階層關係, 例如 Context-Free Grammar
而所謂的 Dependenct Grammar , 是著重在 字和字之間關係 , 而非整個句子中各種成份階層關係, 例如
用Depedenct Grammar 可以表示成這樣
如上圖, 把詞語和詞語之間的關係, 用箭頭表示, 箭頭的起點為 Head, 終點為 dependents , 標示箭頭上的英文字代表 Head 和 Dependent 之間的 relation
Chunking
分析句子的成份, 當句子不符合文法時, 使用 Context-Free Grammar 去做 Parsing , 可能會得不出結果, 而某些應用, 需要的並不是完整的剖析樹, 而是把句子中某些成份給找出來
Chunking 的概念就是, 把句子中的單字分組, 每一組是由一到多個相鄰的單字所組成, 例如, 想要得出句子中有哪些名詞片語, 就可以把相鄰的定冠詞, 名詞修飾語, 以及名詞, 分成一組, 分組所得出的即為名詞片語
舉個例子, 在以下的句子中, 想要找出名詞片語有哪些
首先, 對這個句子進行 Part of speech Tagging
Read on →