1. 程式人生 > >Python自然語言處理 10 分析語句的含義

Python自然語言處理 10 分析語句的含義

既然已經有了分析機制和基於特徵的文法,那麼能否做一些類似分析語句的含義的事情?

回答下列問題:

(1)如何表示自然語言的含義,並能通過計算機進行處理?

(2)怎樣才能將意思表示與無限制的語句集相關聯?

(3)怎樣才能通過連線意思表示與句子的程式來儲存資訊?

本章介紹一些邏輯語義方面的規範化技術,看看如何使用它們來查詢儲存有客觀整理的資料庫

一 自然語言理解

#查詢資料庫

目前為止在本書中學到的技術,解決特定領域的任務的QA系統是相當簡單的,但如果要以一種更通用的方式解決這個問題,就必須開闢一個全新的涉及意思表示的理念和技術框架。

因此,首先假設有關於城市和國家的結構化資料


import nltk
nltk.data.show_cfg('grammars/book_grammars/sql0.fcfg')
% start S
S[SEM=(?np + WHERE + ?vp)] -> NP[SEM=?np] VP[SEM=?vp]
VP[SEM=(?v + ?pp)] -> IV[SEM=?v] PP[SEM=?pp]
VP[SEM=(?v + ?ap)] -> IV[SEM=?v] AP[SEM=?ap]
NP[SEM=(?det + ?n)] -> Det[SEM=?det] N[SEM=?n]
PP[SEM=(?p + ?np)] -> P[SEM=?p] NP[SEM=?np]
AP[SEM=?pp] -> A[SEM=?a] PP[SEM=?pp]
NP[SEM='Country="greece"'] -> 'Greece'
NP[SEM='Country="china"'] -> 'China'
Det[SEM='SELECT'] -> 'Which' | 'What'
N[SEM='City FROM city_table'] -> 'cities'
IV[SEM=''] -> 'are'
A[SEM=''] -> 'located'
P[SEM=''] -> 'in'
SQL查詢
from nltk import load_parser
cp = load_parser('grammars/book_grammars/sql0.fcfg')
query = 'What cities are located in China'
trees = next(cp.parse(query.split()))
answer = trees[0].label()['SEM']
answer2 = trees[1].label()['SEM']
q = ' '
q = ' '.join(answer) + " WHERE" 
q = q + ' '.join(answer2)
print q
SELECT City FROM city_table WHERE  Country="china"
from nltk.sem import chat80
rows = chat80.sql_query('corpora/city_database/city.db', q)
for r in rows: print r[0],
canton chungking dairen harbin kowloon mukden peking shanghai sian tientsin
可以說,NLTK程式碼已經“理解”了SQL

#自然語言、語義和邏輯

上面文字翻譯成SQL來查詢,仍然在迴避問題的實質:翻譯是否正確。

引進語義中的兩個基本概念。第一個是在確定的情況下,陳述句非真即假。第二個是名詞短語和專有名詞的定義指的是世界上的東西。

一旦採取了在特定情況下事情真假的概念,我們就有了進行推理的強大工具。特別是,我們可以推理語句集在某些情況下是否能同時為真。

從廣義上講,基於邏輯方法的自然語言語義關注於那些指導我們判斷自然語言的一致性不一致性的方面。設計一種邏輯語言的句法是為了使這些特徵更標準更明確。

開發一種表示某種可能情況的技術,邏輯學家稱之為“模型”

二 命題邏輯

設計一種邏輯語言的目的是使推理更明確規範

命題邏輯只表示對應特定語句連線詞的語言結構部分


三 一階邏輯

通過翻譯自然語言表示式為一階邏輯表示它們的意思。

並不是所有的自然語言語義都可以用一階邏輯表示。但它是計算語義的一個不錯的選擇,因為它具有足夠的表現力來表達語義的很多方面,並且另一方面,有出色現成的系統可用於開展一階邏輯自動推理。

#語法

一階邏輯的標準構造規則識別以下術語:

#一階定理證明

是否可以有一個有限序列的推理步驟從一個假設的公式列表派生出來

#一階邏輯語言總結

#真值模型

#獨立變數和賦值

#量化

現代邏輯的關鍵特徵之一就是變數滿足的概念可以用來解釋量化的公式。

#量詞範圍歧義

#模型的建立

假設已經有了一個模型,並要檢查模型中的每個句子的真值

四 英語語句的語義

#基於特徵文法的成分語義學

組合原則:整體的含義是部分的含義與它們的句法結合方式的函式

#運算

#量化的NP


#及物動詞

#重述量詞歧義

五 段落語義層

段落是語句的序列。很多時候,段落中句子的解釋依賴它前面的句子。

#段落表示理論

段落表示理論的目標是提供處理這個和其他段落特徵的語義現象的方法。段落表示結構根據一個段落指稱的列表和一個條件列表表示段落的意思。段落指稱是段落中正在討論的事情,它對應一階邏輯的單個變數。 #段落處理 解釋一句話時會利用豐富的上下文背景知識,一部分取決於前面的內容,一部分取決於背景假設。

六 深入閱讀

現代邏輯的書