意圖識別
意圖識別是通過分類的辦法將句子或者我們常說的query分到相應的意圖種類。
詞嵌入:將詞語轉換為數值形式,或者說,嵌入到一個數學空間,Word2vec是詞嵌入的一種;
基於詞向量的意圖識別:
將詞向量作為詞法特征進行意圖分類—基於詞向量的意圖分類方法對不同分類內容的表征能力和領域擴展性更好;
詞向量語義信息不全,可利用語義詞匯字典的信息來豐富詞向量,從而提高意圖文本的語義表示,通過構建BLSTM模型進行意圖識別。
基於CNN的意圖識別:
采用CNN提取文本向量表示作為查詢分類特征來識別用戶搜索查詢的意圖,與傳統人工特征提取方法相比,不僅減少了大量的特征工程,而且可以得到更深層次的特征表示(但CNN只能提取到意圖文本的局部語義特征,不能保持語義的連貫性)
基於RNN的意圖識別:
RNN表示的是一個詞序列,可根據上下文學習詞序語義信息;梯度爆炸或梯度消失等問題,不能很好模擬長期依賴關系;
LSTM 在RNN結構中引入一個內存單元解決梯度爆炸或梯度消失等問題,同時可控制要保留和遺忘的信息;
GRU LSTM的一種改進,具有在長序列上保留信息的能力,而且可以學習上下文語義信息;
例子:
舉一個簡單的例子,我想聽周傑倫的歌,這個query的意圖便是屬於音樂意圖,我想聽郭德綱的相聲便是屬於電台意圖。做好了意圖識別以后對於很多nlp的應用都有很重要的提升,比如在搜索引擎領域使用意圖識別來獲取與用戶輸入的query最相關的信息。
舉個例子,用戶在查詢"生化危機"時,我們知道"生化危機"既有游戲還有電影,歌曲等等,如果我們通過意圖識別發現該用戶是想玩"生化危機"的游戲時,那我們直接將游戲的查詢結果返回給用戶,就會節省用戶的搜索點擊次數,縮短搜索時間,大幅提高用戶的體驗。
再進一步說,做好意圖識別以后,我們可以將一個用戶的query 限定到一個垂直領域比如通過意圖識別以后發現該用戶輸入的生化危機就是想找"生化危機"的游戲進行下載,那么我們在游戲這個領域下進行搜索可以得到更高質量的搜索結果,進一步提高搜索體驗。
意圖識別的前提:
1.首先得想好意圖的划分問題,這種划分業界有很多叫法,
如技能:
若聊天機器人有30個技能,即我們的意圖有30類;(2018年的CES上,Google Assistant 號稱有100萬個技能)
另一種通用叫法,如領域:(domain)
搜索引擎的垂域搜索,即把用戶的query分為很多特定的領域,如電台領域,音樂領域。
(搜索時根據意圖識別認為這個query屬於電台領域,便在電台領域進行搜索。若意圖識別的准確率比較高,可大大加快搜索的速度和准確性)
業界一直有個觀點,意圖識別雖然是聊天機器人非常重要的一個部分,但是解析用戶的語義已經慢慢不再成為對話機器人的核心,識別用戶的意圖以后提供的服務開始成為對話機器人的產品差異化的核心。
2.其次是要想好意圖識別的可擴展能力:隨意圖覆蓋范圍增加,保證意圖識別准確率不下降甚至提升;
可擴展能力另一方面,體現在簡單技能的自動化生成,復雜技能的半自動化生成或第三方開發者的開發技能的快速接入;
3.技能的評價問題,完成一個技能模型開發后,需要符合一定的標准才可以接入到搜索引擎或對話系統中;
技能評價包括兩個方面:
(1)效果上的:若用precision和recall來評價,每一個接入的domain或者技能 的F1值必需大於某個值才可以接入;
(2)工程上的:每個接入的技能需要考慮,訪問量大了不能宕機;
(訪問量或者qps大了,結果可能會造成整體服務超時)
意圖識別的基本方法:
1.基於詞典及模版的規則方法
不同的意圖有不同的領域詞典,如書名,歌曲名,商品名等。當一個用戶的意圖來了以后,我們根據意圖和詞典的匹配程度或者重合程度來進行判斷,最簡單一個規則是哪個domain的詞典重合程度高,就將該query判別給這個領域。這個工作的重點便是領域詞典便須得做的足夠好。
2.基於查詢點擊日志
搜索引擎等類型業務場景,可通過點擊日志得到用戶的意圖;
3.基於分類模型對用戶意圖進行判別
使用paddle作為模型的基本框架以CNN外接softmax 和LSTM外接softmax來進行意圖識別方面工作;
使用LSTM+softmax來進行文本分類
用CNN 外接softmax來進行文本分類
難點:
標注數據獲取;(來源:一. 數據標注團隊進行數據標注;二. 通過半監督自動生成標注數據)
詞向量:
將語言數學化,因為機器不是人,機器只認數學符號。向量是人把自然界的東西抽象出來交給機器處理的東西,基本上可以說向量是人對機器輸入的主要方式。
詞向量是將語言中的詞進行數學化的一種方式,詞向量就是把一個詞表示成一個向量。
表示方法:
(1) one-hotrepresentation,用一個很長的向量來表示一個詞,向量的長度為詞典的大小,向量的分量只有一個 1,其他全為 0, 1 的位置對應該詞在詞典中的位置;
詞袋模型中,每個文本的向量長度都是詞典的大小,向量中每個位置的元素代表詞典中該位置的詞在文本中出現的次數;
優點:簡潔
缺點:1.維數災難;2.不能刻畫詞與詞之間的相似性(詞匯鴻溝,任意兩個詞之間是孤立的,從向量看不出兩個詞是否有關系);3.未保留詞序;
(2)DistributedRepresentation,用一個普通向量表示一個詞,這種向量一般長成這個樣子:[0.792, −0.177, −0.107, 0.109, −0.542, …],即普通的向量表示形式,維度以50維和100維較常見。
一個詞如何表示成這樣的一個向量需要經過訓練,訓練方法如word2vec等。
(注:每個詞在不同的語料庫和不同訓練方法下,得到的詞向量可能不一樣)
word embedding表示的是一種“降維”的嵌入,通過降維避免維度災難,降低計算復雜度;
詞向量的空間意義:
用向量表示,而且用較好的訓練算法得到的詞向量的向量一般是有空間上的意義的,也就是說,將所有這些向量放在一起形成一個詞向量空間,而每一向量則為該空間中的一個點,在這個空間上的詞向量之間的距離度量也可以表示對應的兩個詞之間的“距離”。所謂兩個詞之間的“距離”,就是這兩個詞之間的語法,語義之間的相似性。
計算機計算這個詞的詞向量跟其他詞的詞向量一一計算歐式距離或者cos距離;
google的word2vec模型是訓練詞向量的一種方法;
什么是word2vec?你可以理解為word2vec就是將詞表征為實數值向量的一種高效的算法模型,其利用深度學習的思想,可以通過訓練,把對文本內容的處理簡化為 K 維向量空間中的向量運算,而向量空間上的相似度可以用來表示文本語義上的相似。
Word2vec輸出的詞向量可以被用來做很多 NLP 相關的工作,比如聚類、找同義詞、詞性分析等等。如果換個思路, 把詞當做特征,那么Word2vec就可以把特征映射到 K 維向量空間,可以為文本數據尋求更加深層次的特征表示 。
Word2vec 使用的詞向量是 Distributed representation 的詞向量表示方式。其基本思想是 通過訓練將每個詞映射成 K 維實數向量(K 一般為模型中的超參數),通過詞之間的距離(比如 cosine 相似度、歐氏距離等)來判斷它們之間的語義相似度.其采用一個 三層的神經網絡 ,輸入層-隱層-輸出層。有個核心的技術是 根據詞頻用Huffman編碼 ,使得所有詞頻相似的詞隱藏層激活的內容基本一致,出現頻率越高的詞語,他們激活的隱藏層數目越少,這樣有效的降低了計算的復雜度。
這個三層神經網絡本身是 對語言模型進行建模 ,但也同時 獲得一種單詞在向量空間上的表示 ,而這個副作用才是Word2vec的真正目標。
Word2Vec實際上是兩種不同的方法:Continuous Bag of Words (CBOW) 和 Skip-gram。CBOW的目標是根據上下文來預測當前詞語的概率。Skip-gram剛好相反:根據當前詞語來預測上下文的概率(如下圖所示)。這兩種方法都利用人工神經網絡作為它們的分類算法。起初,每個單詞都是一個隨機 N 維向量。經過訓練之后,該算法利用 CBOW 或者 Skip-gram 的方法獲得了每個單詞的最優向量。

LSTM+Softmax文本分類:
整體流程:

語料預處理:去除標點符號,去除停用詞
生成詞向量:將語料從文字轉化為數值,方便程序后續處理,詞嵌入如word2vec
特征提取:使用多層LSTM提取特征,進行訓練

意圖分類:使用Softmax完成分類
優化網絡結構?使用LSTM單層網絡結構,在迭代15 次以后訓練准確率已經可以達到96%以上。進一步思考一下,疊加LSTM網絡,是否可以達到更高的訓練准確率,其他的部分不變,我們僅僅修改我們的網絡定義部分。
CNN +Softmax文本分類:
