Mark Chang's Blog

Machine Learning, Deep Learning and Python

NLTK Rule-Based Chunking

Chunking

分析句子的成份, 當句子不符合文法時, 使用 Context-Free Grammar 去做 Parsing , 可能會得不出結果, 而某些應用, 需要的並不是完整的剖析樹, 而是把句子中某些成份給找出來

Chunking 的概念就是, 把句子中的單字分組, 每一組是由一到多個相鄰的單字所組成, 例如, 想要得出句子中有哪些名詞片語, 就可以把相鄰的定冠詞, 名詞修飾語, 以及名詞, 分成一組, 分組所得出的即為名詞片語

舉個例子, 在以下的句子中, 想要找出名詞片語有哪些

首先, 對這個句子進行 Part of speech Tagging

NLTK Dependency Grammar

1. Introduction

在自然語言處理中, Phase-Structured Grammar 這類的文法, 是把一個句子, 剖析成一個 完整的剖析樹 , 它的重點是句子中各個成份的階層關係, 例如 Context-Free Grammar

而所謂的 Dependenct Grammar , 是著重在 字和字之間關係 , 而非整個句子中各種成份階層關係, 例如

Depedenct Grammar 可以表示成這樣

d0

如上圖, 把詞語和詞語之間的關係, 用箭頭表示, 箭頭的起點為 Head, 終點為 dependents , 標示箭頭上的英文字代表 HeadDependent 之間的 relation

Ruby Enumerable 1 : Collect , Inject

Introduction

ruby 裡面, 也有類似 functional programming style 的東西, 像是 map , reduce 之類的

但是這些不是像 python 那樣是屬於 build in function , 像這樣

1
2
>>> map(lambda x:x*2 ,[1,2,3,4])
[2, 4, 6, 8]

ruby 裡面的 map 是這樣, 如下

1
2
irb(main):001:0> [1,2,3,4].map{|x| x*2}
=> [2, 4, 6, 8]

它是 Enumerable TypeMethod

除此之外, mapreduceruby 裡面還有其他的別名, 就是 collectinject

Log-Linear Model

1. Introduction

在機器學習中有一種用於分類的演算法, 叫作 Logistic Regression , 可以把東西分成兩類

而在自然語言處理的應用, 常常需要處理多類別的分類問題, 像是 Part of speech Tagging 就是把一個字詞分類到名詞, 動詞, 形容詞, 之類的問題

如果二元分類的 Logistic Regression , 推廣到多種類別分類, 就可以處理這種分類問題

首先, 把二元分類的 Logistic Regression 公式, 稍做調整, 如下

針對多類別的 Logistic Regression , 叫作 Multinomial logistic regression , 如果總共有 的類別, 每個類別的 label , 則公式如下

Chart Parsing

1.Introduction

在自然語言處理中, 剖析 ( Parsing ) 是根據定義好的文法, 把句子轉換成 Syntax Tree 的過程

Chart Parsing 是利用一種叫做 Chart 的資料結構, 來進行剖析的演算法

Chart 的結構如下

以下為一個 Chart 的例子

Pointwise Mutual Information

1.Introduction

在自然語言處理中, 想要探討兩個字之間, 是否存在某種關係, 例如某些字比較容易一起出現, 這些字一起出現時, 可能帶有某種訊息

例如, 在新聞報導中, 有 New , York , 這兩個字一起出現, 可以代表一個地名 New York , 所以當出現了 New 這個字, 則有可能出現 York

這可以用 Pointwise Mutual Information(PMI) 計算

Pointwise Mutual Information 的公式如下:

Python Eval and Execute

1.Introduction

如果要把 string 的內容, 當成程式碼來執行, 可以用到 evalexec

例如有個 string , 為 s1="3+5" 我們想要算它執行的結果, 可用

1
2
3
>>> s1="3+5"
>>> eval(s1)
8

來看一下怎麼用 evalexec

2. eval

eval 是當我們要計算某一個字串中的運算, 並且 會回傳計算結果 ,如下

1
2
>>> eval('3+1')
4

Model Selection

1.Motivation

本文接續先前提到的 Overfitting and Regularization

Machine Learning – Overfitting and Regularization

探討如何避免 Overfitting 並選出正確的 Model

因為 Overfitting 的緣故, 所以無法用 來選擇要用哪個 Model

在上一篇文章中, 可以把 最小的 Model 當成是最佳的 Model , 但是在現實生活的應用中, 無法這樣選擇, 因為, 在訓練 Model 時,無法事先知道 Testing Data 的預測結果是什麼 ,所以就不可能用 來選擇 Model

既然這樣, 要怎麼辦呢? 既然不可以用 來選擇 Model , 又無法事先算出

TF-IDF

1.Introduction

所謂的 TF-IDF , 是用來找出一篇文章中, 足以代表這篇文章的關鍵字的方法

例如, 有一篇新聞, 是 nltkReuters 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 這種常常出現的字

為什麼呢?因為 toat 雖然在這篇文章中出現較多次, 但其他文章中也常有這些字, 所謂的關鍵的字, 應該是在這篇文章中出現較多次, 且在其他文章中比較少出現的字

所以,如果要在一篇文章中, 尋找這樣的關鍵字, 要考慮以下兩個要素:

Naive Bayes Classifier

1.Introduction

在自然語言處理的應用, 常常有分類的問題, 例如把某篇新聞分到哪一類

處理分類問題, 有種簡單的方法, 就是看這篇文章有哪些關鍵字, 根據這些關鍵字的出現與否, 用 Naive Bayes Classifier 做分類

要講 Naive Bayes Classifier 之前, 首先, 要知道 Bayes rule 是什麼, Bayes rule 很簡單, 如下

這個公式, 高中數學應該都有教過 , 如果 Independence , 則

所謂的 Naive Bayes Classifier , 其實就是應用 Bayes rule 來處理分類問題