1. 程式人生 > >coursera NLP mooc 第五週 NLU學習筆記

coursera NLP mooc 第五週 NLU學習筆記

coursera NLP mooc 第五週 NLU學習筆記

任務指向型對話系統

需要注意的是,在本課中我們假設我們得到的使用者的表達都是以文字形式被系統接收的。

意圖的判斷

當我們接收到使用者輸入的資訊後,我們要做的第一件事就是去判斷他的意圖。舉個例子,當接收到"How long to drive to the nearest Starbucks"時,判斷其意圖是"navigition,time,closest".當接收"Give me directions to nearest Starbucks"時,意圖應該是"navigation,directions,closest".
而對於自然語言來說,同樣的意圖有很多不同的表達方式,系統的任務就是對不同的意圖加以辨認與分類。

語義槽填充

我們可以假設有一個表格,這個表格是使用者與對話系統的交流媒介,為了讓對話系統理解自己的目的,使用者需要將自己的意圖填到表格中。為了方便對話系統對自然語言的理解,一個意圖又被分成了若干含有更加精確的資訊的語義槽,填充這些語義槽將變成我們的新任務。舉個例子,當意圖是"navigition,directions"時,袋填充的將是"from","to"兩個語義槽。

語義槽標籤化

接下來我們要做的就是給使用者輸入的資訊貼上語義槽標籤。舉個例子,當輸入為句子"Show me the way to History Museum."時,to後面的"History Museum"為to語義槽中應該填充的內容。對該句中的單詞以BIO三種標籤分類,即語義槽中的起始部分B,語義槽內的部分I,和語義槽外的部分,得到下圖表格。
BIO標籤舉例

用F1測量法評價語義槽標籤模組的好壞*

為了評價一個語義槽標籤模組的好壞,引入召回率與精確度的概念,其中召回率是指找到的準確語義槽在全部符合要求的槽數中的佔比,精確度是指找到的準確語義槽在找的槽中的佔比。具體公式如下圖:
在這裡插入圖片描述

一輪對話舉例

輸入"Give me directions to San Francisco.",意圖分類器將其意圖判斷為"navigation.directions",語義槽標籤化模組將"San Francisco"貼上to標籤,對話管理器在接收到所需資訊後連線地圖軟體,輸出路線。

多輪對話舉例

先輸入"Give me directions from L.A.",進行如上判斷,給"L.A.“貼上from標籤,但對話管理器發現to語義槽未被填充,發起下一輪對話"Where do you want to go?”,在下一輪對話中完成對to語義槽的填充,連線地圖,輸出路線。

如何追蹤文字內容

在課程中介紹了一種簡單的方法,給意圖分類器,語義槽標籤化模組新增簡單特徵。第一個特徵是過去的意圖,過去的意圖被儲存,用來指導下一步操作。第二個特徵是語義槽填充情況,記錄哪些語義槽被填充,哪些尚未被填充。這種方法雖然簡單,但可以將f1值提高0.5%,降低%6.7的意圖分類器錯誤率。

意圖分類器和語義槽標籤化模組

意圖分類器的模型選取

傳統模型:n元組詞袋,TF-IDF
CNN卷積神經網路模型
RNN迴圈神經網路

語義槽標籤化模組的模型選取

制定特定規則,比如:規定take me to後面的詞貼上to標籤
利用RNN迴圈神經網路訓練的seq2seq模型
利用CNN迴圈神經網路訓練的seq2seq模型
*seq2seq模型在第四周的第二部分中介紹

ATIS資料集

全稱是Airline Travel Information System,包含很多單輪次對話記錄,涵蓋17種意圖以及127個語義槽標籤
舉例:裡面都是一些類似於" show me flights from Seattle to San Diego tomorrow"的表達

對意圖分類器和語義槽標籤化模組的聯合訓練

在這裡插入圖片描述
**簡單地說,就是將利用雙向編碼器以及最後的隱藏狀態同時傳遞給語義槽標籤化模組和意圖分類器,再分別解碼出語義槽標籤和意圖。以此來提高訓練的效率與質量。

聯合訓練的訓練結果

以ATIS資料集為基礎進行聯合訓練,可以將語義槽的f1值由單獨訓練的95.78增加為95.87,將意圖分析的錯誤率由單獨訓練的2.02%降低為1.57%

將文字加入到自然語言理解

將資訊儲存到記憶向量

當進行完一定輪次的人機對話後,機器可能沒有填充滿所需的語義槽,下一輪對話將繼續進行。下一輪對話由機器人發起,所以儲存之前對話中使用者的意圖就變得很有必要。我們用一種特殊的迴圈神經網路將過去的對話內容儲存到記憶向量當中。
在這裡插入圖片描述

進一步處理新的記憶向量

在得到一個新的記憶向量c後,要將其與之前的記憶向量建立新的關係。選取之前建立的記憶向量,按照注意力機制對其賦予相對應的權值,將權值放到記憶向量h中。後將c與h重新一起編碼,得到新的記憶向量o,其中既儲存了新的資訊,又包含了與以前向量的關係。
在這裡插入圖片描述
然後就可以將這些資訊用於迴圈神經網路中得到語義槽標籤序列。*

將詞典加入到自然語言理解

將字典特徵應用到輸入的單詞中

我們在第一週學習了n元組的詞袋模型,在輸入單詞後,我們將會按照詞帶模型在詞典中尋找n元匹配項。舉個例子,在輸入"san"後,會匹配出"San Francisco"和"San Antonio"兩種結果,我們便可從中作出選擇。匹配遵守以下三條原則:精準匹配優先於部分匹配,更長的匹配優先於短的匹配,越早出現匹配越好

匹配編碼

按照BIOE編碼以詞典為基準對詞進行編碼,BIOES五個字母分別對應Begin, Inside, Outside, End, Single。不同的詞典結果會有很大的不同,樣例如圖
在這裡插入圖片描述

訓練過程的一些細節

1.*可以將自己的句子樣本化當做詞典的一部分
2.可以通過替換語義槽中的變數來達到擴充套件資料集的目的,例如"take me to Beijing"可以替換成"take me to NewYork"