about 4 years ago

Introduction

Statistical Machine Translation (統計機器翻譯)是一種機器翻譯的演算法,這種方法藉由從 parallel corpus(平行語料庫)語料庫,當成訓練資料,訓練出機器學習的模型,以此將句子翻譯成另一個句子。

平行語料庫中包含大量句子,這些句子意思一樣,但分別用兩種語言寫成,例如:

這是一個蘋果。
This is an apple.

桌上有一本書。
There is a book on the table.

...... 

藉由這種平行語料庫,就可以用統計的方式,讓機器學會如何將一種語言,翻譯成另一種語言。

Noisy Channel Model

Noicy Channel Model 是一種常用的統計機器翻譯的模型。

Read on →
 
about 4 years ago

Introduction

Clustering 是一種非監督式的機器學習方法。所謂非監督式的學習方法,即是不需要事先提供人工標記好的語料庫給機器學習的演算法。可以直接從未標示的語料庫中,根據既有的特徵來做分類。

例如,可以根據某字的前面或後面有哪些字,來決定哪些字屬於同一類。給一語料庫如下:

The dog runs.
A dog jumps.
The dog jumps.
A cat runs.
The cat jumps.
The cat runs.

根據這些例句,可以把 catdog 歸在同一類,因為它們前面的字是 thea ,同理,也可以把 runjump 歸在同一類。

Defining the Formulation

現在來定義一下,進行這種分類所需要的數學公式。

Read on →
 
about 4 years ago

Minimum Edit Distance

Minimum Edit Distance (最小編輯距離),是用來計算兩個字串的相似程度。
可應用於拼字校正、或是計算兩個DNA序列的相似程度。

例如,假設有三個DNA序列:

1. AGCCT
2. AACCT
3. ATCT

直覺上,會認為,DNA序列 2.1. 的相似程度比 3.1. 的相似程度還要高。
但為何是 2.1. 較相似?相似程度又是多少?
若要把兩序列的相似程度量化成數值,就要計算「最小編輯距離」,最小編輯距離越小,就表示兩序列越相似。

Defining of Minimum Edit Distance

我們採用 Levenshtein 的最小編輯距離的定義,這是一種最簡單的定義方式。依此定義,若一個字串,編輯成另外一個字串,可以進行下面三種動作。

Read on →
 
about 4 years ago

在做機器學習演算法時,常常需要把資料分成 training setvalidation set 這兩個資料組。
但是,要如何切割,才可以讓具有不同 label 的資料,在這兩個資料組中,平均分佈?

用統計語言 R 處理 iris 資料組為例。iris 的資料如下:

index Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
... ... ... ... ... ......
51 7.0 3.2 4.7 1.4 versicolor
52 6.4 3.2 4.5 1.5 versicolor
... ... ... ... ... ......
101 6.3 3.3 6.0 2.5 virginica
102 5.8 2.7 5.1 1.9 virginica
... ... ... ... ... ......
Read on →
 
over 4 years ago

1. Introduction

python 程式中想要印出東西, 通常會用 print , 要 print 東西的時機很多, 例如, Debug 時要 print , 有 Error 時也要 print , 正常執行情況下也可能要 print 一些資訊

但是當程式寫好後, 原本用 print 出來的 debug message 就需要手動移除, 諸如此類的問題, 單純用 pring 就不方便

如果是用 logging , 可以設各種不同的層次, 例如在 debug 的時候, 印出 debug message , debug 結束後就不要印 debug message , 這樣只要調整一個參數即可, 不需要把所有用印出 debug 的程式碼都砍掉

pythonlogging 分成以下五個等級

等級 使用時機
DEBUG 程式執行時的詳細資訊, 可以找出BUG在哪
INFO 程式執行時的基本資訊, 用來顯示程式正常執行時的狀況
WARNING 程式執行時遇到某些狀況超乎預期, 或未來可能遇到問題, 但程式目前仍可以繼續執行
ERROR 程式執行時發生問題, 可能導致結果產生錯誤
CRITICAL 程式執行時遇到嚴重問題, 程式必須馬上停止
Read on →
 
over 4 years ago

Chunking

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

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

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

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

Read on →
 
over 4 years ago

1. Introduction

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

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

Depedenct Grammar 可以表示成這樣


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

Read on →
 
over 4 years ago

Introduction

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

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

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

ruby 裡面的 map 是這樣, 如下

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

它是 Enumerable TypeMethod

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

Read on →
 
over 4 years ago

1. Introduction

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

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

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

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

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

Read on →
 
over 4 years ago

1.Introduction

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

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

Chart 的結構如下

以下為一個 Chart 的例子

Read on →