張良君
(人保金服智能數字營銷項目組 北京市 100031)
為了節省人力成本,越來越多行業的簡單服務場景,選擇用智能客服機器人與用戶交互。比如通知用戶快遞將要達到,做好取件準備;提醒家長孩子的課程即將開始等等。隨著時代的發展,各行各業使用智能客服機器人進行服務的場景不斷增加,交互難度也在增加,需要跟用戶有一定的互動,根據用戶回答的內容,迅速做出判斷,決定后面的問答要不要繼續。這種場景一般是提前規范好了提問話術,根據用戶回答的情況,一步一步按照話術文本進行提問。
本文利用車險續期提醒場景舉例,在用戶車險將要到期的時候,用智能客服機器人提醒用戶續期,流程如圖1所示。
這類服務場景需要對用戶回答的內容進行歸類。用戶回答的內容文本一般都比較短,偏口語化,用詞范圍開放,有時語序顛倒。對用戶回答內容文本進行歸類對判斷用戶狀態、及時調整對話內容、提升用戶體驗有重要的作用。
文本分類是指按照預先定義的類別,為文檔集合中的每個文本確定一個類別,是有監督的學習過程。實現過程分為兩步,第一步,把文本進行向量化,第二步利用監督學習進行歸類[1]。
傳統的向量空間模型對長文本表現出很好的效果,但是對于短文本卻存在特征稀疏和維度災難問題。各種研究表明,基于神經網絡的詞向量生成模型Word2Vec,用深度學習網絡對語料數據的詞語及上下文的語義關系進行建模,即降低了詞向量的維度,又能引入傳統模型不具有的語義特征,能很好的解決短文本向量化的問題[2]。
文本是一種序列,后面的詞語跟前面的詞語是有關聯的,后面的詞語依賴前面的詞語才能表達完整的意思。循環神經網絡(RNN)能夠通過在神經網絡基礎上,增加記憶單元,對歷史有記憶功能,比較適合文本分類。但是由于梯度消失問題,簡單的循環神經網絡無法記憶時間跨度大的信息,RNN的變體LSTM增加了攜帶信息跨越多個時間步的方法,可以有效解決此問題,LSTM保存信息以便后面使用,從而防止較早的信息在處理過程中逐漸消失。所以對于文本分類,LSTM是比較有效的方法[3]。

圖1:車險到期提醒流程圖
用戶回答問題的文本比較口語化,常常會出現倒敘的現象。雙向LSTM(BiLSTM)會把文本特征按照正序和逆序都學習一遍,然后把它們的表示合并在一起,沿著這兩個方向處理文本序列,雙向LSTM能捕捉到可能被單向LSTM忽略的信息[3]。
綜上所述,利用Word2Vec把用戶回答的短文本進行向量化,然后利用雙向LSTM(BiLSTM)對文本進行分類,是解決用戶回答問題文本分類的最佳選擇。
本文將利用Word2Vec+雙向LSTM對用戶回答的短文本進行分類,同時跟Word2Vec+單向LSTM的效果進行對比,以驗證雙向LSTM和單向LSTM方法的優劣。
Word2Vec是Google在2013年推出的一款用于訓練詞向量的工具。傳統的詞向量的方法是One-Hot representation方式,此方法把每個詞表示成只包含0和1的長向量,向量的維度就是詞典的大小,1的位置對應詞在詞典中的位置。這種方式存在以下問題:
(1)詞典的大小決定了向量的維度,通常詞典較大易造成向量的維度災難;
(2)向量大部分為0,非常稀疏,不利于處理任務;
(3)沒有考慮詞語之間的語義/語法關系。Word2Vec模型是利用詞的上下文信息環境,將一個詞從One-Hot representation方式映射為一個低維、稠密的K維實數向量(K為模型中超參量),Word2Vec詞向量表達來源于上下文的詞預測模型。既能解決One-Hot representation高維稀疏問題,還能引入語義特征。
Word2Vec主要有Continuous Bag-of-Words Model(CBOW)和Continuous Skip-gram Model(Skip-gram)兩種模型,CBOW模型是已知上下文Context(t)的情況下預測當前詞t,而Skip-gram模型則是在已知當前詞t的情況下預測其上下文詞Context(t),這兩個模型都包含輸入層、投影層和輸出層[4],如圖2所示。

圖2:Word2Vec模型

圖3:LSTM的出發點:SimpleRNN層

圖4:從SimpleRNN到LSTM:添加一個攜帶軌道
以CBOW模型為例,其原理為:首先w(t)為輸出層詞語,Context(t)為其上下文,單側個數為c,總長度為2c。利用One-Hot編碼生成輸入層和輸出層詞語向量:v(Context(wt-c))、v(Context(wt-c+1))…v(Context(wt+c)),在投影層將2c個輸入層向量求和(或取均值、直接拼接起來),即輸出層通過HierarchicalSoftmax或Negative Sampling降低訓練復雜度,HierarchicalSoftmax采用一顆Huあman樹,以語料中出現的詞為葉子節點,以詞頻為權重構成,其中葉子節點共N(即語料詞典的長度)個。Negative Sampling摒棄了Huあman樹,采用了負采樣和二元邏輯回歸的方法求解模型參數[4]。
本文Word2Vec模型采用的是CBOW,輸出層采用的是Negative Sampling。先利用一年內用戶回答文本預訓練了一個Word2Vec模型,這樣能最大限度的學習用戶回答文本的特征,然后利用Embedding層,把標注好的訓練集和驗證集文本進行詞嵌入,表達成雙向LSTM能夠識別的數據形式。
密集連接網絡和卷積神經網絡都有一個共同的特點,就是它們都沒有記憶。它們單獨處理每個輸入,在輸入和輸入之間沒有保存任何狀態,它們不適合處理序列數據,因為序列數據是依賴前面的數據的,所有的數據累積才能表示完整的序列。循環神經網絡(RNN)可以遍歷所有序列元素,并保存一個狀態,此狀態包含已查看內容相關信息,是根據過去的信息構建的,并隨著新信息的進入而不斷更新,所以循環神經網絡(RNN)更適合處理序列數據。但是簡單循環神經網絡(SimpleRNN)最大的問題是梯度消失問題:隨著層數的增加,網絡最終變的無法訓練。在此基礎上,Hochreiter、Schmidhuber和Bengio在20世紀90年代初設計了LSTM層和GRU層,有效解決了簡單循環神經網絡梯度消失問題。LSTM(long short-term memory)是SimpleRNN的一種變體,它增加了一種攜帶信息跨越多個時間步的方法。這些攜帶信息產生的影響:它將與輸入連接和循環連接進行運算,從而影響傳遞到下一個時間步的狀態,攜帶數據流是一種調節下一個輸出和下一個狀態的方法[3],LSTM流程原理詳見圖3和圖4。

表1:訓練集和驗證集在各分類上的數量分布

表2:各分類標簽上精確率和召回率
LSTM特別依賴順序或者時間,LSTM按順序處理輸入序列的時間步,而打亂時間步或者反轉時間步會改變LSTM從序列中提取的表示。雙向LSTM利用了LSTM順序敏感性:它包含了兩個普通LSTM,每個LSTM分別沿著一個方向對輸入序列進行處理(文本正序和文本逆序),然后將它們的表示合并在一起。通過沿這兩個方向處理序列,雙向LSTM能夠捕捉到可能被單向LSTM忽略的模式[3]。
本文數據來源是某公司車險到期續期場景中,客戶服務機器人與用戶電話對話文本。機器人提問的流程圖如圖1所示,需要根據用戶的回答決定后續話術。
用于Word2Vec預訓練的數據是實際服務的對話文本共2000萬條,這樣能盡可能全的學習到用戶對話文本的特征。用于雙向LSTM訓練的文本量為3387條,用于驗證的文本量為2338條,訓練集和驗證集都提前標注好了分類,屬于單標簽多分類情況。樣本在各分類上的分布如表1所示。
雙向LSTM和單向LSTM建模流程相同,如下所示:
第一步:分詞,利用結巴分詞工具,對用戶回答文本進行分詞;
第二步:去除停用詞、標點符號、特殊符號、空值;
第三步:利用2020年全年對話文本訓練Word2Vec模型,窗口設為5,向量維度為300,采用CBOW算法,輸出層采用的是Negative Sampling;
第四步:利用Embedding層,用第三步訓練好的Word2Vec模型,對訓練集數據進行詞嵌入映射。并把訓練集按照80%-20%比例拆分成訓練集和測試集。
第五步:構建深度學習網絡:
第一層:詞嵌入層(Embedding層),權重是預訓練的Word2Vec模型詞向量的系數,詞長度設為300,并把trainable(是否在訓練過程中更新詞向量)設為False;
第二層:分別構建雙向LSTM層(Bidirectional LSTM)和單向LSTM層,兩個獨立的模型分別運行;
第三層:密度鏈接層,因為是多分類問題,所以激活函數選擇softmax.
第六步:模型訓練,利用sgd調節學習率,損失函數選擇categorical_crossentropy(適用于多分類的損失函數),迭代30次,因為實驗表明30次之后,測試集的acc基本趨于平穩。
模型最終acc為95%,在各分類上的精確率和召回率如表2所示,最高的精確率能達到98.1%,最低的有91.7%,分類效果比較好。
從表2可以看出,和單向LSTM算法相比,雙向LATM在文本分類準確率和召回率上都有提升,說明對于用戶回答的短文本分類,預訓練的Word2Vec詞嵌入+雙向LSTM是比較適合的方法。
在一些智能客服交互場景中,用戶的回答具有文本短、偏口語化、用詞范圍開放、有時語序顛倒的特點,實驗表明用預訓練的Word2Vec模型進行詞向量的嵌入,然后訓練雙向LSTM模型,比較適合此類文本的分類,以后遇到類似特征的文本,可以嘗試使用此方法。本實驗有待改進的地方是,人工標注的樣本量相對較少,后期可以增加人工標注量,再進行模型訓練和驗證。