1. 程式人生 > >文字上的演算法讀書筆記七--理解語言有多難

文字上的演算法讀書筆記七--理解語言有多難

理解語言有多難

7.1 自然語言處理

自然語言處理NLP是讓計算機能處理語言,20世紀50年代,大家關心的是人類學習語言的認知研究上,計算機處理語言,必須先分析語句和獲取語義,需要分析詞的次序,句子的句法規則,就是喬姆斯基的有限狀態自動機刻畫語言的語法,建立了自然語言的有限狀態模型,這時是基於規則的服好主意方法。人工智慧興起後,20世紀70年代開始,逐步關注基於統計的聯結主義方法。並在90年代的IBM基於統計機器學習的語音識別系統和翻譯系統的突破以及機器學習演算法的研究,讓人們看到了基於統計的聯結主義的方法的優勢。

這兩方法誰也不能取代另一方,充分利用和融合兩者的優勢也許是更好的選擇。由於Google等搜尋引擎的巨大成功,把自然語言推辭昂高潮。包括深度學習的發展,自然語言的研究也是一個熱點。

7.1.1 自然語言處理技術

理想的NLP是一個層次結構

最底層是詞法分析,包括分詞,詞性標註、專名識別等,對詞進行分析。

然後是句法分析,句法樹,得到更多的詞或短語之間的關係

語義分析,整個句子的邏輯關係

應用,比如知識抽取,問答系統等任務

實際應用的NLP 框架

實際中,句法分析很多專案中沒有利用起來,語義也會有不同的形式,有時抽取中心詞就可以滿足應用

底層是資源,資源是非常重要的一部分,知識庫的建立也會用到很多上層的NLP技術。

詞彙級別的技術,詞法層面是對詞的處理,分詞、詞性標註、識別專名等。詞之間有一定的關係,本體,很多關係包括:上下位(蘋果-公司),同位(蘋果-谷歌)等,這些關係可以用來推理、泛化等

句子級別的技術,語義層面的分析,很難,歸納為中心詞提取,topic分析,意圖識別和語義分析。變換更多用在搜尋,主要是糾正句子。結構層面分析用的最多的是句法分析和組塊分析,也有語義標註等,用的較少。

文字任務,搜尋引擎,自動問答,人機對話是非常複雜的。

專名識別

識別句子中的專有名詞,如人名,地名,機構名,時間詞,數字詞,影視名等。其中專名識別是一個序列標註問題,就是識別詞的邊界。BME的標註格式,分佈是詞首,詞中,詞尾。用法有CRF,lstm,lstm+crf。其中人名,地名,機構名結構邊界都比較清楚,f1值很高。其他的類別比如音樂名、小說名等不太好識別,比如羞羞的鐵拳,夏洛特煩惱等十分不好識別,因為它們沒有什麼規律,需要依靠模型,詞表和業務trick,有的正則如時間,數字等可以用正則實現。

句法分析

關鍵技術之一,跟據文法規則得到一個句子的句法結構,表示為樹狀。確定句子中各成分之間的關係是非常困難的,精確度不高,為了降低複雜度,大多是淺層句法分析,識別相對簡單的成分。

目前研究多的是依存語法,是詞與詞之間的依存關係,也就是詞與詞之間的支配與被支配的關係,有方向的,核心動詞是支配其他成分的中心成分,本身不受其他的支配,比如吃是核心動詞,小明和吃是主謂關係,吃和蘋果是動賓關係,紅和蘋果是定中關係。

方法有兩大類

基於圖的方法:

把問題看成有向圖中最大生成樹的求解問題,優點是全域性方法,搜尋所有子樹,缺點是不能利用太多歷史資訊。

基於決策的方法:

構建分解為一序列動作,由分類器根據當前狀態來決定下一個分析動作,優點是速度快,可以較多地利用歷史資訊(全域性性的),缺點在於使用區域性貪心演算法

有arc-standard和arc-eager演算法

arc-standard:

定義一個,s是棧,b是待分析詞的序列(buffer),A 是當前的已有的依存關係。s初始時一個ROOT,b為空時停止,這時候得到的A就是依存關係。

操作包括:

增加一個依存關係i,從stack移除

增加一個依存關係i,從stack移除

將b1從buffer移到stack中

如果有N個依存關係的話,總共的動作就有2N +1個,這其實可以抽象成分類(SVM,最大熵,深度學習等),特徵為:詞,詞性,依存關係

近年來有基於深度學習的依存句法分析方法:

論文《A Fast and Accurate Dependency Parser using Neural Networks》

最大優點是可以方便的在input層擴充套件特徵,然後由神經網路學習這些特徵的內在資訊,準確率也會提高

輸入是詞,詞性,依存關係embedding之後的向量,是拼接而成。中間需要一些trick使得模型效果更好,比如隱藏層的激勵函式用的是立方函式。

英文上已經有不錯的準確度,但是中文要差。實際專案中應用不是很理想,因為真實場景和標準集資料分佈有差異,真實場景下的標註句法的訓練語料是由很門檻的,需要一定的語言知識的人才可以。

語義分析

終極目標,很難的問題。句法分析是得到一個句子的句法樹,而語義分析是要解析成一個邏輯表示式。如小於10的最大質數,姚明的身高是多少,,表達成這樣很困難,只能在特定的場景中,比如知識圖譜類的問答中。深度學習中嘗試用end2end方式來解決,將邏輯表示式建模成中間的隱藏狀態,比如深度學習中的閱讀理解

知識庫的建立很重要,

因為知識一直在增加,而且很難表示成計算機能理解的形式,

結構化知識:

是以實體為中心,SPO三元組,。知識圖譜,比較好表示,來源有限,百科,垂直網站,海量的網頁中抽取無結構化的,需要很多的技術,指代消解或者共指消解,關係抽取等。

無結構化:

天空為什麼是藍的

7.1.2 語言的特殊

思想是逐步進化的,語言也是隨著思想進化而來的,因為語言是思想傳遞的媒介,是人類特有的。

可以用不同的符號表示。每國有各國的表示方法。

喬姆斯基認為人組織語言遵循一定的語法規則,這是先天性的知識,叫做普通語法。

漢語常用詞不到1萬個,按照語法規則組成句子,句子長度不固定 ,有無窮多的可能,去掉不符合語法規則的還是有好多。

對計算機來說是很困難:

1.如何量化語義

有的是隱喻,比如櫻桃小嘴,豐富了語言(理解需要人的深層推理和抽象能力),但是對計算機造成了困難

2.如何理解隱喻

語言的貧乏造成了語言的歧義,同時包含了很多粗糙的歧義的字眼(這裡,那裡,一些)

3.如何理解歧義

數學家的公式,無歧義語言

與人類的語言程度相比,現在的進展還是初級的,更不用說人類的其他能力(推理,感知,思考,意識等)

7.2 對話系統

異常火爆的一個方向。

人們覺得對話是最自然的互動方式,是未來的趨勢等,但是技術還不成熟。

目前來說還沒有一個真正意義上能解決使用者某一方面問題且體驗很好的對話產品,亞馬遜的echo,更多的是指令型的控制。

做好對話的幾個技術點:

1.語義理解

包括實體識別、句法分析和意圖識別等

2.對話管理

上下文建模,指代消解和省略補全

3.知識表示

語義分析和知識建設

4.使用者管理

使用者畫像、長時記憶和短時記憶

主要有3個型別:

問答型、任務型、閒聊型

1.問答型

解決的更多的是知識型的,目前研究最多的是一個實體的客觀性知識的任務:

中國的首都在哪兒,北京,答案是一句話或者一段話,或者是主觀的,個性化的更是困難。

比較複雜,涉及的知識點主要是

1.語義分析

解析使用者的語義

2.知識建設

知識表示,知識抽取,知識推理等

首先是問題的各種分析,然後從海量文件中檢索出可能包含答案的問檔,再在證據庫中找到相關的證據支撐,最後根據許多模型對結果排序找到最終的答案。

另一個應用是客服系統,使用機器人來輔助人回答高頻經常被問到的問題,提高客服效率,基於檢索的方法,加上英語資源做優化。

2.任務型

任務型對話系統更多的是完成一些任務,比如訂機票、訂餐等,有個明顯的特點,就是需要和使用者互動得到出發地,目的地和出發時間等槽位,然後有可能還要和使用者確認等,最後幫使用者完成一件事情。系統根據當前狀態(state)和相應的動作(action)來決定下一步的狀態和反饋,求狀態轉移概率,就是馬爾科夫決策的過程(MDP),

流程:

先得到使用者的query(語音轉文字),然後是自然語言理解模組(NLU),主要是槽位識別和意圖識別,意圖有可能是有多個的,對應槽位也會不同,都有個置信度。然後是對話管理模組,包括Dialog state tracking 和Dialog policy,DST 就是會根據之前的資訊得到它的state,就是slot的資訊,得到多少個slot,還差什麼slot,以及得分。Dialog policy就是根據state做出一個決策,叫action,比如還需要什麼slot,是否要確認等等,最後是自然語言生成模組NLG,把相應的action生成一句話回覆給使用者。

DST比較關鍵

有以下方法:

1.產生式模型(Generative Model)

生成式模型把對話狀態抽象成系統acttion和使用者SLU結果的貝葉斯網路。

是要求解的新的對話狀態概率,是SLU的結果,可以觀察到的,s是上一輪的對話狀態,是不可觀察的,是上一輪使用者的真實action,也是不可觀察的,是系統action,可觀察的,加撇的是本輪的表示。

是給定使用者真實action下SLU的概率,是給定系統action和本輪對話狀態下使用者選擇action為的概率,是給定上一輪對話狀態和系統action下對話轉變為的概率,是之前的對話狀態概率。

2. 判別式模型

把問題抽象成一個分類問題,根據之前對話的一些特徵來預測新的state

是從SLU結果和歷史對話資訊中抽取出來的特徵

分類問題,把slot打分看出序列標註問題,只要是分類模型和序列標註問題,就可以使用深度學習。

有action的可以融入強化學習的激勵懲罰機制。

3. 規則系統

可控的,兩個因素:state和action,state是意圖和slot,action是state的一些回覆,需要詢問的slot可以知道,缺哪些詢問就可以,對置信度低的不確定的進行確認並影響到之後相似的情況就是強化學習的思想了。

處理slot範圍限定,slot和slot之間的衝突。

規則系統有一個配置檔案,寫一些規則。基於模型的方法需要有label資料,資料缺失的情況下規則系統比較有效,規則系統突出了NLU的重要性,因為用到了NLU的1-best,而不是N-best結果。

3 閒聊型

沒有明確限定的聊天,前兩個型別是機器打智商牌,這個型別是打情商牌。

主要有規則方法,生成模型和檢索方法

1.規則方法

20世紀60年代,ELIZA是純規則的方法,寫一個較泛化的模板。現在沒有哪個系統是純規則的了,規則方法是一些其他方法處理不好的情況下的補充。

2.生成模型

使用一個RNN模型把輸入句子ABC表示一個向量,然後把這個向量作為另一個RNN模型的輸入,最後使用語言模型生成目標句子WXYZ。優點是省去了中間模組,缺點是多是泛泛的無意義的回覆、前後回覆不一致,或者句子不通順的問題。

3.檢索方法

思想是如果機器給人回覆一句話,如果這句話或者相似的話別人有說過,只需要把它找出來就可以。需要挖掘很多的語料。最基本首先進行NLU,然後從語料庫中召回一些可能的回覆,然後使用更精細和豐富的模型(語義相似度、上下文模型等)找出最合適的回覆。

核心技術:

1.意圖識別

語言量化,分類、聚類、語義相似度和模板等多個技術來解決

2.上下文模型

省略補全

能補全就是單輪對話了,否則就要結合topic和keyword處理

3.個性化模型

考慮使用者畫像,還要考慮場景(時間、地點等)

4.自學習

結合反饋來對當前的對話進行評估是否可再用

對話系統評價

問答型,回答更多是實體,好評價

任務型,可評價

閒聊型,人工評價和反饋

對話系統涉及的難點

1.自然語言難以量化

如把水拿過來,感冒好了沒有,導致了意圖識別和話題識別變得很難

2 語言歧義太多,如何解決

3 上下文處理和推理相對人類太初級

A:快點走

B: 30

4.領域知識難以很好的融合,知識這個很難定義,知識的建立和表示都比較初級

結論

搜尋引擎是使用者主動獲取資訊的方式,個性化推薦系統是被動的給使用者呈現資訊的方式。

使用者畫像,就是給使用者打各種tag來表示使用者的興趣,但是具有同一個Tag的使用者就有相同的興趣嗎,人的興趣有時很難以自然語言表示,加上各個產品都是孤立的,獲得的都是部分資訊,導致捕捉使用者興趣的稀疏性。

個性化和隱私是個矛盾體。搜尋引擎是產品設計的一個簡化。由於技術達不到直接給使用者資訊。所以呈現給使用者所有想要的結果,自己去篩選。