基于特征的文法分析以及概述自然语言处理
一、基于特征的文法分析
語法分析固然重要,但要想覆蓋語言的全部,需要進一步擴展到文法分析,文法分析可以基于規則,但是工作量難以想象,基于特征的文法分析不但可窮舉,而且可以方便用計算機存儲和計算,本節簡單做一個介紹,更深層次的內容還需要繼續關注后面的系列文章?
請尊重原創,轉載請注明來源網站www.shareditor.com以及原始鏈接地址
語法和文法
還記得上一節中的這個嗎?
(S(NP 小明) (VP(V 追趕) (NP(Det 一只) (N 兔子))))這里面的N表示名詞,Det表示限定詞,NP表示名詞短語,V表示動詞,VP表示動詞短語,S表示句子
這種句子分析方法叫做語法分析
因為句子可以無限組合無限擴展,所以單純用語法分析來完成自然語言處理這件事情是不可能的,所以出現了文法分析
文法是一個潛在的無限的句子集合的一個緊湊的特性,它是通過一組形式化模型來表示的,文法可以覆蓋所有結構的句子,對一個句子做文法分析,就是把句子往文法模型上靠,如果同時符合多種文法,那就是有歧義的句子
最重要的結論:文法結構范圍相當廣泛,無法用規則類的方法來處理,只有利用基于特征的方法才能處理
?
文法特征結構
文法特征舉例:單詞最后一個字母、詞性標簽、文法類別、正字拼寫、指示物、關系、施事角色、受事角色
因為文法特征是一種kv,所以特征結構的存儲形式是字典
不是什么樣的句子都能提取出每一個文法特征的,需要滿足一定的條件,這需要通過一系列的檢查手段來達到,包括:句法協議(比如this dog就是對的,而these dog就是錯的)、屬性和約束、術語
?
特征結構的處理
nltk幫我實現了特征結構:
>>> import nltk >>> fs1 = nltk.FeatStruct(TENSE='past', NUM='sg') >>> fs1 [NUM='sg', TENSE='past'] >>> fs2 = nltk.FeatStruct(POS='N', AGR=fs1) >>> fs2 [AGR=[NUM='sg', TENSE='past'], POS='N']在nltk的庫里已經有了一些產生式文法描述可以直接使用,位置在:
[root@centos $] ls ~/nltk_data/grammars/book_grammars background.fol discourse.fcfg drt.fcfg feat0.fcfg feat1.fcfg german.fcfg simple-sem.fcfg sql0.fcfg sql1.fcfg storage.fcfg我們看其中最簡單的一個sql0.fcfg,這是一個查找國家城市的sql語句的文法:
% start SS[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'解釋一下
這里面從上到下是從最大范圍到最小范圍一個個的解釋,S是句子
我們來加載這個文法描述,并試驗如下:
import nltk from nltk import load_parser cp = load_parser('grammars/book_grammars/sql0.fcfg') query = 'What cities are located in China' tokens = query.split() for tree in cp.parse(tokens):print tree輸出結果如下:
(S[SEM=(SELECT, City FROM city_table, WHERE, , , Country="china")](NP[SEM=(SELECT, City FROM city_table)](Det[SEM='SELECT'] What)(N[SEM='City FROM city_table'] cities))(VP[SEM=(, , Country="china")](IV[SEM=''] are)(AP[SEM=(, Country="china")](A[SEM=''] located)(PP[SEM=(, Country="china")](P[SEM=''] in)(NP[SEM='Country="china"'] China)))))我們可以看到用特征結構可以建立對大量廣泛的語言學現象的簡介分析??
二、概述自然語言處理涉及到的內容
別誤會,前面幾節不是逗你玩,我總結了,計算機領域的知識得倒著學,不管三七二十一先用起來,然后再系統地學習,這不,前幾節先給你們展示了幾個常見知識和工具,從這一節開始步入主題,自然語言處理與問答系統?
自然語言處理怎么學?
先學會倒著學,倒回去看上面那句話:不管三七二十一先用起來,然后再系統地學習
nltk是最經典的自然語言處理的python庫,不知道怎么用的看前幾篇文章吧,先把它用起來,最起碼做出來一個詞性標注的小工具
?
自然語言處理學什么?
這門學科的知識可是相當的廣泛,廣泛到你不需要掌握任何知識就可以直接學,因為你不可能掌握它依賴的全部知識,所以就直接沖過去吧。。。
話說回來,它到底包括哪些知識呢?如果把這些知識比作難關的話,我數一數,整整九九八十一難
第一難:語言學。直接懵逼了吧?語言學啥玩意,怎么說話?還是怎么學說話?其實大家也都說不清語言學是什么東東,但是我知道大家在這方面都在研究啥,有的在研究語言描述的學問,有的在研究語言理論的學問,有的在研究不同語言對比的學問,有的在研究語言共同點上的學問,有的在研究語言發展的歷史,有的在研究語言的結構,總之用一個字來形容那是一個涉獵廣泛啊
第二難:語音學。再一次懵逼!有人說:我知道!語音學就是怎么發聲。贊一個,回答的那是相當不完全對啊!你以為你是學唱歌嗎?語音學研究領域分三塊:一塊是研究聲音是怎么發出來的(同學你說對了一點);一塊是研究聲音是怎么傳遞的;一塊是研究聲音是怎么接收的。這尼瑪不是物理嗎?怎么還整出語言學來了?其實這是一個交叉學科,交叉了語言學,交叉了生物學
第三難:概率論。啥?怎么到處都是概率論啊?聽人說今年又某某某得了諾貝爾經濟學獎了,我定睛一看,尼瑪,這不是研究的概率論嘛,這也能得經濟學獎,真是得數學者得天下啊。廢話少說,概率論跟自然語言處理有什么關系?我知道了,說話是一個概率問題,我經常說“尼瑪”,那我再次說“尼瑪”的概率就高,嗯~沾邊了。提到概率論那就少不了這些:貝葉斯老爺爺、馬爾可夫大叔……
第四難:信息論。提到信息論肯定第一個想到的是“香濃”啊,有點流口水了,香農老爺爺提出的熵理論影響那是相當巨大啊,沒有它估計就沒有我們計算機人事什么事了,因為沒有他就沒有互聯網了。還有人說沒有圖靈就沒有計算機了,他咋不說沒有他們倆就沒有地球了呢?
第五難:機器學習。機器學習是我的最愛,得聊的正式一點,咳咳!機器學習啊——得好好學
第六難:形式語言與自動機。我滴媽啊!我跪了!剛說圖靈圖靈就來了。說白了,形式語言就是把語言搞的很形式,換句話說就是本來你能懂的東西,搞成你不能懂的東西,那就是形式語言啦!不信?你聽:短語結構語言、上下文有關語言、上下文無關語言、正則語言,懂了嗎?而自動機呢包括:圖靈機、有窮自動機、下推自動機、線性有界自動機。你可能會問了,這么多自動機那得要多少汽油啊?該死的翻譯怎么就把這么高大上的英文給翻譯成這么晦澀呢,自動機英文叫automata,表達的是自動形成一些信息,也就是說根據前面能自動判斷出后面。形式語言用在自然語言處理上我理解,都有語言倆字,可是這自動機有什么用呢?這您還真問著了,您見過拼寫檢查嗎?這就是用的自動機,用處杠杠的!
第七難:語言知識庫。你見過科幻電影里的機器人手捧著電話線就能知道一切的鏡頭吧,互聯網上有無數文本內容,用我們抽象的話說那都是知識,但是簡單放在電腦里那就是一串字符串,怎么才能讓它以知識的形式存儲呢?首先得讓計算機能分析語言,那么語料就是它學習的基礎、是種子,然后有了基礎再讓它把語言里的知識存儲起來,這就形成了語言知識庫
第八難:語言模型。模型顧名思義就是“模子”,就是“往上靠”的意思,怎么靠上去更吻合就怎么靠,這就是語言模型。怎么?沒懂?好那我用形式化的語言再來說一下:把很多已經整理好的模子放在那里,遇到一個新內容的時候看看屬于哪種格式,那就按照這種模子來解釋。嗯~你肯定懂了
第九難:分詞、實體識別、詞性標注。這部分開始純語言處理了,前幾節也簡單講過這部分內容,分詞就是讓計算機自動區分出漢字組成的詞語,因為一個詞語一個意思嘛。實體識別就是再分詞之后能夠根據各種短語形式判斷出哪個詞表示的是一個物體或組織或人名或……。詞性標注就是給你一句話,你能識別出“名動形、數量代、副介連助嘆擬聲”。
第十難:句法分析。句法分析類似于小學時學的主謂賓補定狀的區分,只是要在這基礎上組合成短語,也就是把一個非結構化的句子分析稱結構化的數據結構
第十一難:語義分析。看起來一步一步越來越深入了。語義是基于句法分析,進一步理解句子的意思,最重要的就是消除歧義,人姑且還會理解出歧義來呢,何況一個機器
第十二難:篇章分析。一堆堆的句子,每個都分析明白了,但是一堆句子組合成的篇章又怎么才能聯系起來呢?你得總結出本文的中心思想不是?這他娘的是小學語文里最難的一道題
以上這些內容就是自然語言處理的幾大難了,什么?說好的九九八十一難呢?你還不嫌多啊?你還真想變成孫猴子嗎?能把這幾關過了就不錯了!
請尊重原創,轉載請注明來源網站www.shareditor.com以及原始鏈接地址
自然語言處理和聊天機器人什么關系?
說到這里,索性就說說下自然語言處理的應用領域吧。
第一個應用:機器翻譯。機器翻譯方法有很多,我不做,也不說,想學自己看去
第二個應用:語音翻譯。跟上一個不是一個嗎?不是的,這是語音,那個是機器
第三個應用:文本分類與情感分析。別看兩個詞,其實是一種事——分類。前面有很多篇文章將文本分類的,可以看看,還有代碼噢。
第四個應用:信息檢索與問答系統。終于說到重點了,累死我了。這里的問答系統就是我們的聊天機器人。后面會著重講這個應用,我不斷讀論文,不斷給大家分享哈,別著急,乖!
第五個應用:自動文摘和信息抽取。看過百度搜索里顯示的摘要嗎?他們多么的精簡,而且描述了網頁里的中心內容,多漂亮啊!可惜多數都沒做到自動文摘。所以這是一個高技術難度的問題。
第六個應用:人機對話。融合了語音識別、口語情感分析、再加上問答系統的全部內容,是自然語言處理的最高境界,離機器人統霸世界不遠了。
以及這么多數不完的應用:文本挖掘、輿情分析、隱喻計算、文字編輯和自動校對、作文自動評分、OCR、說話人識別驗證……
好!自然語言處理就溫習到這里,讓我們上陣出發!
總結
以上是生活随笔為你收集整理的基于特征的文法分析以及概述自然语言处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 个人作业(alpha)
- 下一篇: Linux 系统中 Redis 的安装及