1、前言
在很多語音機器人或文本機器人對話場景下需要對整個對話過程或對話單句的核心關鍵字進行“提取或分析”(并不要理解每一句、只需要讀取中心思想),如提取電話號碼、郵政編碼、車牌號碼、地址庫、設備編號、商品編碼等,傳統(tǒng)方法如基于規(guī)則算法、或標準神經網絡模型都無法高效、精確處理復雜的業(yè)務場景、特別針對漢語言的方言的理解和處理上。
《VIKI-AI智能客服工單系統(tǒng)》是微服網絡最新研發(fā)的一套傳統(tǒng)呼叫中心+AI機器人+微信公眾號+智能工單+APP派單的“智能客服中心”整體解決方案系統(tǒng),支持私有化部署和快速業(yè)務場景適配的能力、下文介紹一個實際應用場景。
2、實際應用場景
2.1、案例介紹
由于2020年新冠疫情的發(fā)展、目前大量傳統(tǒng)呼叫中心服務公司或團隊面臨著巨大的人員招聘、管理、成本等綜合問題。某市運營商也是面臨同樣問題,急需要通過AI語音技術處理寬帶、電視、電話等原來由人工處理的客服受理問題。如:“電話接待、通話錄音、智能自助排障、轉接裝維人員、轉接人工坐席、工單自動采集與下發(fā)、自動報表數據分析、工單APP遠程處理”等、整個業(yè)務流程圖如下:
2.2、對話效果
如下圖機器人接聽來電、詢問和核對手機號碼、根據手機號碼匹配轉接裝維人員或電話值班客服。
1、算法介紹
3.1、注意力機制(Attention Mechanism)
AM源于對人類視覺的研究。在認知科學中,由于信息處理的瓶頸,人類會選擇性地關注所有信息的一部分,同時忽略其他可見的信息。上述機制通常被稱為注意力機制。人類視網膜不同的部位具有不同程度的信息處理能力,即敏銳度(Acuity),只有視網膜中央凹部位具有最強的敏銳度。為了合理利用有限的視覺信息處理資源,人類需要選擇視覺區(qū)域中的特定部分,然后集中關注它。例如,人們在閱讀時,通常只有少量要被讀取的詞會被關注和處理。綜上,注意力機制主要有兩個方面:決定需要關注輸入的哪部分;分配有限的信息處理資源給重要的部分。近年來,深度學習的研究越來越深入,在各個領域也都獲得了不少突破性的進展。微服網絡研發(fā)人員近年來一直致力于基于attention機制的神經網絡的研究與應用,在VIKI-AI系列產品獲得了非凡成績和效果,解決了很多實際問題。
3.2、軟性注意力機制的數學原理
在神經網絡模型處理大量輸入信息的過程中,利用注意力機制,可以做到只選擇一些關鍵的的輸入信息進行處理,來提高神經網絡的效率,比如在機器閱讀理解任務中,給定一篇很長的文章,然后就文章的內容進行提問。提出的問題只和段落中一兩個句子有關,其余部分都是無關的,那么只需要把相關的片段挑出來讓神經網絡進行處理,而不需要把所有文章內容都輸入到神經網絡中。軟性注意力機制一般的處理方法包括“普通模式”和“鍵值對注意力模式”,“普通模式”讀者可以查閱相關資料、本文重點描述VIKI-AI實際使用的“鍵值對注意力模式”。
3.2、鍵值對注意力模式
通常可以用鍵值對(key-value pair)來表示輸入信息,那么N個輸入信息就可以表示為(K, V)= [(k1,v1),(k2,v2),...,(kN,vN)],其中“鍵”用來計算注意分布σi,“值”用來計算聚合信息。那么就可以將注意力機制看做是一種軟尋址操作:把輸入信息X看做是存儲器中存儲的內容,元素由地址Key(鍵)和值Value組成,當前有個Key=Query的查詢,目標是取出存儲器中對應的Value值,即Attention值。而在軟尋址中,并非需要硬性滿足Key=Query的條件來取出存儲信息,而是通過計算Query與存儲器內元素的地址Key的相似度來決定,從對應的元素Value中取出多少內容。每個地址Key對應的Value值都會被抽取內容出來,然后求和,這就相當于由Query與Key的相似性來計算每個Value值的權重,然后對Value值進行加權求和。加權求和得到最終的Value值,也就是Attention值。
如下圖所示,以上的計算可以歸納為三個過程:
第一步:根據Query和Key計算二者的相似度。可以用上面所列出的加性模型、點積模型或余弦相似度來計算,得到注意力得分si;
第二步:用softmax函數對注意力得分進行數值轉換。一方面可以進行歸一化,得到所有權重系數之和為1的概率分布,另一方面可以用softmax函數的特性突出重要元素的權重;
第三步:根據權重系數對Value進行加權求和:
圖示如下:
可以把以上的過程用簡潔的公式整理出來:
以上就是軟性注意力機制的數學原理。
3.3、seq2seq模型介紹
seq2seq屬于encoder-decoder結構的一種,這里看看常見的encoder-decoder結構,基本思想就是利用兩個RNN,一個RNN作為encoder,另一個RNN作為decoder。encoder負責將輸入序列壓縮成指定長度的向量,這個向量就可以看成是這個序列的語義,這個過程稱為編碼,如下圖,獲取語義向量最簡單的方式就是直接將最后一個輸入的隱狀態(tài)作為語義向量C。也可以對最后一個隱含狀態(tài)做一個變換得到語義向量,還可以將輸入序列的所有隱含狀態(tài)做一個變換得到語義變量。
而decoder則負責根據語義向量生成指定的序列,這個過程也稱為解碼,如下圖,最簡單的方式是將encoder得到的語義變量作為初始狀態(tài)輸入到decoder的rnn中,得到輸出序列??梢钥吹缴弦粫r刻的輸出會作為當前時刻的輸入,而且其中語義向量C只作為初始狀態(tài)參與運算,后面的運算都與語義向量C無關。
decoder處理方式還有另外一種,就是語義向量C參與了序列所有時刻的運算,如下圖,上一時刻的輸出仍然作為當前時刻的輸入,但語義向量C會參與所有時刻的運算。
encoder-decoder模型對輸入和輸出序列的長度沒有要求,應用場景也更加廣泛。
3.4、seq2seq模型通用訓練
前面有介紹了encoder-decoder模型的簡單模型,但這里以下圖稍微復雜一點的模型說明訓練的思路,不同的encoder-decoder模型結構有差異,但訓練的核心思想都大同小異。
我們知道RNN是可以學習概率分布然后進行預測的,比如我們輸入t個時刻的數據后預測t+1時刻的數據,最經典的就是字符預測的例子,可在前面的《循環(huán)神經網絡》和《TensorFlow構建循環(huán)神經網絡》了解到更加詳細的說明。為了得到概率分布一般會在RNN的輸出層使用softmax激活函數,就可以得到每個分類的概率。
對于RNN,對于某個序列,對于時刻t,它的輸出概率為p(xt|x1,...,xt?1)p(xt|x1,...,xt?1),則softmax層每個神經元的計算如下:
其中ht是隱含狀態(tài),它與上一時刻的狀態(tài)及當前輸入有關,即:
那么整個序列的概率就為
而對于encoder-decoder模型,設有輸入序列x1,...,xTx1,...,xT,輸出序列y1,...,yT‘y1,...,yT‘,輸入序列和輸出序列的長度可能不同。那么其實就是要根據輸入序列去得到輸出序列的可能,于是有下面的條件概率,x1,...,xTx1,...,xT發(fā)生的情況下y1,...,yT‘y1,...,yT‘發(fā)生的概率等于p(yt|v,y1,...,yt?1)p(yt|v,y1,...,yt?1)連乘。其中v表示x1,...,xTx1,...,xT對應的隱含狀態(tài)向量,它其實可以等同表示輸入序列:
此時,ht=f(ht?1,yt?1,v)ht=f(ht?1,yt?1,v),decoder的隱含狀態(tài)與上一時刻狀態(tài)、上一時刻輸出和狀態(tài)向量v都有關,這里不同于RNN,RNN是與當前時刻輸入相關,而decoder是將上一時刻的輸出輸入到RNN中。于是decoder的某一時刻的概率分布可用下式表示:
所以對于訓練樣本,我們要做的就是在整個訓練樣本下,所有樣本的p(y1,...,yT‘|x1,...,xT)p(y1,...,yT‘|x1,...,xT)概率之和最大,對應的對數似然條件概率函數為
,使之最大化,θ則是待確定的模型參數。對于rnn、lstm和gru的結構可以看這幾篇文章《循環(huán)神經網絡》 《LSTM神經網絡》 《GRU神經網絡》。
1、參考文獻
[1]、邱錫鵬:《神經網絡與深度學習》
[2]、深度學習中的注意力機制(2017版) https://blog.csdn.net/malefactor/article/details/78767781
[3]、Dzmitry Bahdanau、KyungHyun Cho、Yoshua Bengio.
《Neural Machine Translation by Jointly Learning to Align and Translate 》
[4]、Cho, K., van Merrienboer, B., Gulcehre, C., Bougares, F., Schwenk, H., and Bengio, Y. (2014a).
[5] 《Learning phrase representations using RNN encoder-decoder for statistical machine translation》
[6] Yin, W., Ebert, S. Schütze, H. Attention-Based Convolutional Neural Network for Machine Comprehension. 7 (2016).
[7] Kadlec, R., Schmid, M., Bajgar, O. Kleindienst, J. Text Understanding with the Attention Sum Reader Network. arXiv:1603.01547v1 [cs.CL] (2016).
[8] Dhingra, B., Liu, H., Cohen, W. W. Salakhutdinov, R. Gated-Attention Readers for Text Comprehension. (2016).
[9] Vinyals, O. et al. Grammar as a Foreign Language. arXiv 1–10 (2015).
[10]Wang, L., Cao, Z., De Melo, G. Liu, Z. Relation Classification via Multi-Level Attention CNNs. Acl 1298–1307 (2016).