本篇介紹如何用python nltk 的應用,邏輯語意與lambda calculus
1.introduction
邏輯語意學在語意推導方面,通常會用到
使用就可以把一個句子的語意,從個別單字中推導出來
至於 是什麼呢?
簡而言之,lambda calculus是一種數學運算,由以下三種元素組成
是
是 ,就是把function中的variable拿到前面,加個
是將另一個 放到 後面
然後可以進行一種運算,叫做 ,如下
還有另一種運算叫做 ,其實就是更改變數名稱而已
也是計算理論的一種,和Turing Machine等價
實際上以 實現的程式語言有Functional Programming,例如Lisp或Haskell
2. lambda expression
接著來實作untyped lambda calculus,
首先,載入模組 nltk.sem.logic
和 LogicParser
1 2 |
|
再看看 要用哪個符號
1 2 3 4 |
|
要表示lambda 符號,要用 \
字串
然後,用LogicParser
來輸入這個式子:
1 2 3 |
|
3. alpha conversion
再來試試看 :
從以下結果得知, 轉換前和轉換後,在邏輯上是相等
因為只是更改變數名稱而已
1 2 3 4 5 6 |
|
4. beta reduction
接著,來看看
舉一個自然語言的例子,例如 Gary walks. 這個句子,用邏輯語意可以表示成
根據Principle of Compositionality,
句子的語意是由單字的語意所組成的(但實際上還是有例外,例如片語)
推導出這個句子的語意,可由單字的語意推導出來,
walks 的語意是
Gary 的語意是
則 Gary walks 的語意是
接著來實作看看
1 2 3 4 |
|
再舉一個例子,例如 Gary sees Mary. 這個句子, sees 是及物動詞
及物動詞,是表示一個主詞和受詞的關係,
可用 First Order Logic 的 Relation 來表示
sees 的語意為
而 Gary sees Mary. 的語意是
接著,輸入nltk看看
1 2 3 4 5 6 |
|
還有其他的輸入方式,結果都一樣
1 2 3 4 |
|
結果如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
5.further reading
想要瞭解 , 請參考http://en.wikipedia.org/wiki/Lambda_calculus
想要看看 nltk 裡面的 , 請至http://www.nltk.org/howto/logic.html
還有關於邏輯語意的研究,可以參考這本書 Blackburn & Bos’ Representation and Inference for Natural Language