Skip to content

[NLP] BLEU 計算相似度

BLEU 是一種評估文字相似度的演算法,經常用於評估『機器翻譯』與『人工翻譯』之間的相似度。最近由於有比對文句之間相似度與否的需求,故在他人推薦之夏稍微研究了一下 BLEU 的原理,同時試用了 NLTK 中提供的 BLEU 函式。

以下不會紀錄太複雜的數學,僅僅只是介紹 BLEU 以及該怎麼使用 NLTK 的工具。畢竟我一直相信著,能試著不重複造輪子的人才能真正有效率地開發程式 —— 即便自己從頭寫起感覺十分安心、十分有成就感。


N-gram

談到 BLEU,就不得不提及所謂的 “N-gram”。 N-gram 是一種語言模型,能夠將一句話的 N 個詞彙搭配組合起來來表達這個句子的特徵。N 則是一組特徵中所看見的詞彙數量。

這樣的解釋有點含糊,假設我們有以下這樣一個句子:

Today is a nice day.


那麼,所謂的 1-gram,就是以下的表達方式:

['Today', 'is', 'a', 'nice', 'day']


那麼,2-gram 則是:

[['Today', 'is'],
 ['is', 'a'],
 ['a', 'nice'],
 ['nice', 'day']]

依此類推。而這就是 N-gram 的表達方式。


BLEU 的使用方法

BLEU 的計算方法大致上為:

Score Calculation Formula in BLEU Here m is number of words from ...

若有計算 BLEU 的需求時,推薦可以使用 NLTK 裡的工具。若是沒有 NLTK 套件,先使用以下指令安裝:

pip3 install nltk


以下是個最簡單的範例:

# coding: utf-8
from nltk.translate import bleu

sent_a = 'Today is such a nice day'.split()
sent_b = 'Today is such a good day'.split()

print(bleu([sent_a], sent_b))



Output:

0.537284965911771

References


Read More

Tags:

Leave a Reply