呂詩寧,張 毅,胡若云,沈 然,江俊軍,歐智堅
(1.國網(wǎng)浙江省電力有限公司電力科學研究院,杭州 310000;2.清華大學 電子工程系,北京 100084;3.國網(wǎng)浙江玉環(huán)縣供電有限公司,浙江 臺州 318000)
客服系統(tǒng)是電力營銷的重要組成部分,是電力部門對外的重要窗口[1]。為了提高客服質(zhì)量和效率,電力部門持續(xù)推動電力客服系統(tǒng)的信息化建設[2]。隨著人工智能技術(shù)的發(fā)展,智能化成為電力客服系統(tǒng)建設的機遇和挑戰(zhàn),智能客服受到了越來越多的關(guān)注和研究[3-5]。用智能客服代替人工客服回答高頻簡單的問題,可以減少人工客服的工作量,使其可以更專注于解決復雜的問題。同時,智能客服機器人可以以較低成本實現(xiàn)24 h全天候即時服務客戶。另外,人工客服的業(yè)務水平參差不齊,智能客服的服務質(zhì)量則相對穩(wěn)定和可控?;谶@些優(yōu)勢,智能客服有助于提高電力企業(yè)客服效率,減輕客服人員工作壓力,提升客戶滿意度。
智能客服是對話系統(tǒng)的一個應用場景。對話系統(tǒng)從功能上可以分為三類[6]:任務型、問答型、閑聊型。任務型對話系統(tǒng)通過與用戶的多輪交互完成一項特定領(lǐng)域的任務;問答型對話系統(tǒng)對于用戶的問題給予一個直接且簡潔的回復;閑聊型對話系統(tǒng)與用戶進行自然的多輪對話,主要起到娛樂或陪伴用戶的作用。其中,任務型和問答型對話系統(tǒng)更適合用做智能客服。
任務型對話可通過模塊化的方式實現(xiàn)[7-9]。模塊化對話系統(tǒng)主要由自然語言理解、對話狀態(tài)跟蹤、策略選擇、自然語言生成等模塊組成,如圖1 所示。
圖1 模塊化任務型對話系統(tǒng)
問答型對話系統(tǒng)[10-12]為了答案的正確性,需要根據(jù)知識庫或自然語言文本資料進行回答。
電力領(lǐng)域智能客服對話系統(tǒng)相比于通用領(lǐng)域的對話系統(tǒng)有著很強的專業(yè)性。電力領(lǐng)域經(jīng)過多年的積累,總結(jié)出了大量業(yè)務知識,包括客戶服務流程、客服數(shù)據(jù)庫和標準問答對等等。目前電力領(lǐng)域智能客服[3-5]主要利用了標準問答對,從知識庫中找到與客戶說的話意思最相近的標準問題,然后將對應答案回復給客戶,主要實現(xiàn)了問答型對話系統(tǒng)功能。如何充分利用電力客服業(yè)務流程,實現(xiàn)更為智能的電力領(lǐng)域智能客服對話系統(tǒng),需要新的探索。
為了構(gòu)建面向電力領(lǐng)域智能客服的對話系統(tǒng),本文提出融合神經(jīng)網(wǎng)絡學習和電力領(lǐng)域知識的對話系統(tǒng)。具體來說,首先利用對話流配置框架將電力領(lǐng)域知識融入對話系統(tǒng),從而指導對話系統(tǒng)做出正確的回答;接著利用基于神經(jīng)網(wǎng)絡的自然語言理解模塊讓對話系統(tǒng)理解用戶說的話;最后通過智能坐席和智能外呼兩個智能客服應用表明了新方法的有效性。
本文利用對話流配置框架和知識圖譜將電力領(lǐng)域客戶服務流程、電力客服數(shù)據(jù)庫和標準問答等電力領(lǐng)域知識融入對話系統(tǒng)。
為了保證服務質(zhì)量,電力公司對業(yè)務進行了細致的梳理,并針對每個業(yè)務的服務流程和話術(shù)制定了規(guī)范,通??梢杂昧鞒虉D的形式展現(xiàn),如圖2 所示。這些業(yè)務流程和話術(shù)是客服人員培訓材料的重要內(nèi)容。為了實現(xiàn)智能客服代替人工客服完成客服工作,需要解決三個問題:機器如何讀流程圖;機器如何按照流程執(zhí)行;機器如何判斷執(zhí)行哪個流程。為了解決這三個問題,本章節(jié)對流程圖進行抽象,提出了一個對話流配置框架。
圖2 電力客服業(yè)務流程
對話流配置框架主要包括五項內(nèi)容:對話流、意圖、全局變量、實體、函數(shù)。通過配置對話流,使對話系統(tǒng)能夠讀懂業(yè)務流程并按流程執(zhí)行;通過配置意圖,使對話系統(tǒng)能夠判斷應執(zhí)行哪個流程;通過配置其他三項內(nèi)容來支持對話流和意圖的配置。
1.1.1 對話流
對話流配置用以解決機器如何按照流程圖執(zhí)行的問題。
在節(jié)點配置方面,本文共歸納出三大類8 種不同類型的節(jié)點,具體如下。
1.1.1.1 信息獲取類
服務客戶時,客服需要得到用戶的信息,信息主要來源于客戶、數(shù)據(jù)庫和業(yè)務知識。
(1)填槽節(jié)點:對話系統(tǒng)有時需要從客戶那里獲取必要信息。比如客戶身份驗證時,需要知道客戶的用電戶號和姓名等信息,此時對話系統(tǒng)需要向用戶發(fā)問,并從客戶的回答中提取信息。填槽節(jié)點需要配置待填的槽以及對話系統(tǒng)向用戶詢問該槽的話術(shù)。填槽節(jié)點主要用來與客戶交互。
(2)函數(shù)節(jié)點:對話系統(tǒng)有時需要從數(shù)據(jù)庫等外部服務獲取必要信息。比如客戶詢問剩余電費的時候,對話系統(tǒng)需要調(diào)用一個函數(shù)從客服數(shù)據(jù)庫中獲取信息。對話系統(tǒng)會根據(jù)配置的函數(shù)名調(diào)用相應函數(shù)。函數(shù)節(jié)點主要用來和機器交互。
(3)賦值節(jié)點:對話系統(tǒng)有時可以根據(jù)業(yè)務知識推理出一些信息。比如客戶身份驗證失敗時,需要問用戶的供電單位。但如果客戶身份驗證成功,就不需要詢問用戶的供電單位,直接將供電單位賦值成提供服務的電力公司即可。賦值節(jié)點需要配置待賦值的全局變量(1.1.3 節(jié)介紹)和賦給它的值。
1.1.1.2 流程控制類
(1)子流程節(jié)點:電力客服業(yè)務中有一些通用的流程,比如幾乎所有業(yè)務都需要詢問用戶的戶號,因此配置每個業(yè)務的時候都要把詢問用戶戶號的部分重復配置一遍。為避免重復,可以把每個流程中的詢問用戶戶號這部分提取成子流程。把父流程中的子流程節(jié)點的流程名配置成待跳轉(zhuǎn)的子流程的名稱即可完成跳轉(zhuǎn)。這樣可以減少配置對話系統(tǒng)的工作量。同時,修改子流程時只需改動一個地方,使得對話系統(tǒng)更易維護。
(2)分支節(jié)點:進行邏輯判斷的節(jié)點。完成類似編程語言中的if-else 語句的功能。
(3)返回節(jié)點:返回節(jié)點位于一個流程的最后,用來從子流程返回父流程。返回節(jié)點不需要配置任何信息。
(4)結(jié)束節(jié)點:結(jié)束節(jié)點用來結(jié)束本次對話。結(jié)束節(jié)點需要配置結(jié)束對話的具體原因,比如掛機或轉(zhuǎn)人工。
1.1.1.3 信息輸出類
回復節(jié)點配置了業(yè)務文檔中規(guī)定的話術(shù)之后,對話系統(tǒng)可按配置的話術(shù)來回復用戶。
每一個節(jié)點完成自身功能后,根據(jù)業(yè)務邏輯應跳轉(zhuǎn)至下一節(jié)點,稱為目標節(jié)點。每一個目標節(jié)點對應一個條件,每個條件由操作符和元素數(shù)組組成,比如“電費余額<0”這個條件的操作符是“<”,元素數(shù)組是[電費余額,0]。存在多個條件時,依次判斷各條件是否為真。
1.1.2 意圖
意圖幫助對話系統(tǒng)判斷應該執(zhí)行哪個流程。電力客服每一個業(yè)務流程解決用戶的一個問題,因此對話系統(tǒng)只要知道客戶想解決什么問題,就可以用相應的流程來服務客戶。比如,“查電費”“修改服務密碼”等都是用戶的意圖。為了理解客戶說的話,在配置意圖時,需要配置表達該意圖的自然語言。另外,為了根據(jù)流程幫助用戶完成意圖,還需要配置與該意圖相關(guān)的槽。比如對于“查電價”這個意圖,用戶需要填“用電電壓”這個槽。
1.1.3 全局變量
全局變量可以在多輪對話過程中維護服務用戶所需的信息,跟蹤對話狀態(tài),使得對話系統(tǒng)和客戶保持信息的同步。對話狀態(tài)可以表示成一組鍵值對的形式。比如“戶號=1234,姓名=張三”就是對話系統(tǒng)詢問完客戶戶號和姓名之后的對話狀態(tài)。這里的“姓名”和“戶號”就是全局變量。
1.1.4 實體
實體是一個槽可取值的范圍。比如“查電價”這個業(yè)務流程,有“用電類型”和“供電電壓”這兩個槽。“用電類型”可取值的范圍為[居民生活用電,大工業(yè)用電,一般工商業(yè)用電,農(nóng)業(yè)生產(chǎn)],這個范圍就是“用電類型”這個槽的實體。配置了該實體之后,在填槽節(jié)點中對話系統(tǒng)才可以從用戶說的話中找出“用電類型”的信息。
1.1.5 函數(shù)
函數(shù)可以是一段代碼,又或是一個API 接口,供對話流中的函數(shù)節(jié)點調(diào)用,從而獲取必要信息或執(zhí)行某個指令。本文提出對話流配置框架的一個很重要的目的是減少搭建對話系統(tǒng)所需要的代碼量,對話流配置文件解釋器完成各類節(jié)點功能的底層實現(xiàn),使不會編程的業(yè)務人員也可以按照配置框架和業(yè)務流程用配置的方式搭建出一個對話系統(tǒng)。但有些功能,比如查詢數(shù)據(jù)庫,需要自定義函數(shù)來實現(xiàn)。通過自定義函數(shù),同時實現(xiàn)了減少代碼量和保留定制性這兩個目的。
電力客戶服務流程主要內(nèi)容是客服專業(yè)知識,而電力客服數(shù)據(jù)庫和標準問答對的主要內(nèi)容是電力專業(yè)知識。
電力客服數(shù)據(jù)庫的結(jié)構(gòu)包含了很多電力領(lǐng)域的知識,比如“抄表”查詢接口返回的內(nèi)容包含“本次示數(shù)”“抄表日期”“上次示數(shù)”等??梢詫⒖蛻粼跀?shù)據(jù)庫中的信息存儲在知識圖譜中,把數(shù)據(jù)庫的查詢接口作為知識圖譜中的實體,接口返回的內(nèi)容作為對應實體的屬性。當收到客戶的消息時,對話系統(tǒng)把客戶說的話在圖譜中進行文本相似度匹配,既可以查詢到與這句話相關(guān)的實體,也可以在一個實體下查詢到與這句話相關(guān)的屬性。比如用戶問“電費明細”時,如果沒有配置跟“電費明細”有關(guān)的意圖,對話系統(tǒng)無法根據(jù)業(yè)務流程服務客戶,但通過在圖譜中搜索,對話系統(tǒng)找到了“電費”這個實體以及該實體下“明細”這個屬性,對話系統(tǒng)就可以將屬性值回復給用戶。再比如,用戶如果問“煤改電補貼多少錢”,對話系統(tǒng)不僅可以回復客戶補貼金額,因為“煤改電”這個實體下還有“辦理方式”和“營業(yè)網(wǎng)點”這兩個屬性,對話系統(tǒng)可以進行智能推薦,詢問客戶是否還想問“辦理方式”和“營業(yè)網(wǎng)點”的信息。
電力客服關(guān)于業(yè)務類問題有大量的標準問和對應的標準答。知識圖譜可以抽取出標準問句中的實體和實體間的關(guān)系,從而把大量的標準問存儲在結(jié)構(gòu)化分層次的知識圖譜中,然后利用文本相似度算法在圖譜中找到與用戶問題最接近的標準問,最后將標準答案回復給客戶。
對話系統(tǒng)利用對話流配置文件解釋器來讀取對話流配置文件,并按照配置文件中的對話流服務客戶,從而實現(xiàn)了經(jīng)典模塊化任務型系統(tǒng)中的對話狀態(tài)跟蹤,策略選擇和自然語言生成這三個模塊的功能。下面介紹基于神經(jīng)網(wǎng)絡的自然語言理解模塊的實現(xiàn)方法。
本節(jié)用基于神經(jīng)網(wǎng)絡的自然語言理解模塊實現(xiàn)意圖識別功能。意圖識別的輸入是一句客戶說的話,輸出是這句話表達的意圖。本質(zhì)上是一個文本分類問題。類別標簽的集合是對話系統(tǒng)已配置的所有意圖。
在預訓練模型和遷移學習在圖像識別領(lǐng)域取得成功后,近年來,以openAI 的GPT[13]和谷歌的BERT[14]為代表的預訓練模型在十多個自然語言處理任務上取得了最優(yōu)的效果,甚至在某些數(shù)據(jù)集上的表現(xiàn)超過人類,證明了預訓練和遷移學習在自然語言處理領(lǐng)域也是有效的。本文采用預訓練模型BERT 進行意圖識別。
BERT 由多層的Transformer 編碼器構(gòu)成。Transformer 編碼器由兩部分組成:注意力層和前饋神經(jīng)網(wǎng)絡層。Transformer 的輸入是一個序列,輸出也是一個序列,輸出序列與輸入序列等長,序列中的每一個元素都是向量,將這些向量拼接在一起可以得到一個矩陣,因此Transformer 的輸入輸出可用矩陣表示。
2.1.1 注意力層
注意力層采用MHA(多頭注意力機制),具體如下:
式中:Hh∈Rl×dv為每個注意力頭的計算結(jié)果,將Hh拼接在一起得到注意力層的輸出結(jié)果;Qh∈Rl×datt,Kh∈Rl×datt,Vh∈Rl×dv分別為各個注意力頭的查詢矩陣、鍵矩陣、值矩陣,通過對輸入矩陣X 分別進行線性變換得到;W*h,b*h為線性變換的參數(shù)。
2.1.2 前饋神經(jīng)網(wǎng)絡層
前饋神經(jīng)網(wǎng)絡層由兩層前饋神經(jīng)網(wǎng)構(gòu)成,對輸入序列每個位置的向量做相同的計算。激活函數(shù)選擇GeLU[15],公式如下:
式中:W1,b1,W2,b2分別為兩層前饋神經(jīng)網(wǎng)的參數(shù)。
2.1.3 整體結(jié)構(gòu)
Transformer 編碼器的注意力層和前饋神經(jīng)網(wǎng)絡層均使用殘差連接和層歸一化[16]。
式中:att 為注意力層的輸出以及前饋神經(jīng)網(wǎng)絡層的輸入。
BERT 的輸入是一句話,輸出是對這句話每個字的包含上下文信息的編碼結(jié)果。BERT 首先對句子中的字進行向量化表示。
式中:Ei為字符向量ET、段向量ES和位置向量EP的和。字符向量用來區(qū)分每個字;段向量用來區(qū)分來自不同句子的向量,由于意圖識別任務的輸入只有一句話,所以每個字的段向量均相同;位置向量用來區(qū)分一句話中不同位置的詞。這3個向量都是可訓練的參數(shù)。
得到句子的向量化表示后,BERT 通過多層Transformer 對句子進行編碼得到編碼結(jié)果。
為了將BERT 用于意圖識別模型,需要BERT 輸出一個定長的向量而不是一個向量序列。為此在每句話的前面添加一個占位符[CLS],把[CLS]的編碼結(jié)果作為BERT 的輸出。
基于BERT 的意圖識別模型是在BERT 預訓練網(wǎng)絡的基礎上增加一層前饋神經(jīng)網(wǎng)絡。預訓練階段需要大量的計算資源和時間,因此本文直接使用谷歌開源的訓練好的中文BERT 預訓練網(wǎng)絡。微調(diào)階段在意圖識別數(shù)據(jù)集上訓練,對預訓練網(wǎng)絡和前饋神經(jīng)網(wǎng)絡組成的整體意圖識別模型的參數(shù)進行微調(diào)。
BERT 的輸出包含了這句話的語義信息,把[CLS]的編碼結(jié)果輸入一層前饋神經(jīng)網(wǎng)中,可得到每個意圖的概率分布,模型將概率最高的意圖作為識別結(jié)果。模型的整體結(jié)構(gòu)如圖3 所示。圖中E表示每個字的向量;Trm表示Transformer 編碼器;C 和T 分別表示BERT 模型對占位符[CLS]和句子中每個字的編碼結(jié)果。
基于BERT 的意圖識別模型參數(shù)量較大,Lan Z 等提出了ALBERT[17]以減少模型參數(shù)量。ALBERT 相對BERT 主要有三點改進:
(1)將字符向量組成的矩陣分解成兩個矩陣乘積,減少字符向量的參數(shù)量。
圖3 BERT 意圖識別模型
(2)通過共享BERT 中各層Transformer 的參數(shù),減少模型整體參數(shù)量。
(3)將預訓練階段的預測兩個句子是否相鄰這個任務換成相對更難的任務:預測兩個相鄰句子的先后順序,增強模型的語義編碼能力,使得模型參數(shù)量減少后模型性能不下降太多。
通過融合神經(jīng)網(wǎng)絡和電力領(lǐng)域知識,本文實現(xiàn)了兩個智能客服對話系統(tǒng),分別為智能坐席和智能外呼。
首先按照業(yè)務流程和對話流配置框架配置對話系統(tǒng)。智能坐席系統(tǒng)能夠回答客戶與電費電價相關(guān)的問題。智能坐席配置了“查電費”“電價標準”“查詢抄表數(shù)據(jù)”等12 個意圖。智能外呼系統(tǒng)在客戶沒有按規(guī)定日期繳費時主動給客戶打電話提醒客戶。智能外呼系統(tǒng)配置了“已知曉”“已還清”“查詢欠費”等48 個意圖。針對每個意圖配置了相對應的流程。圖4 舉例說明了智能坐席系統(tǒng)的“查電費”流程和智能外呼系統(tǒng)的“已知曉”流程的配置方式。
BERT 中Transformer 層 數(shù) 為12 層,Transformer 的輸入和輸出向量均為768,注意力層的注意力頭數(shù)為12,前饋神經(jīng)網(wǎng)絡層的隱藏層的維度為3072。句子的最大長度為64,每個訓練批次的大小為32,優(yōu)化器為Adam,學習率為2e-5,驗證集的loss(損失函數(shù))經(jīng)過5 輪不下降時停止訓練。訓練ALBERT 模型的超參數(shù)與BERT 模型一致。
圖4 對話流配置
為了訓練智能坐席系統(tǒng)和智能外呼系統(tǒng),通過標注線上客服聊天記錄,分別得到1 447 條和21 483 條數(shù)據(jù),其中的80%作為訓練集,10%作為驗證集,10%作為測試集。表1 列出了BERT模型和ALBERT 模型的參數(shù)規(guī)模以及在兩個數(shù)據(jù)集上的測試準確率。
表1 BERT 和ALBERT 的模型規(guī)模及性能
對比BERT 和ALBERT,可以看出BERT 相對ALBERT 準確率更高,而ALBERT 的模型參數(shù)量更少,實際使用中可根據(jù)實際業(yè)務需求和硬件資源選擇合適的模型。本文進行系統(tǒng)測試時選擇BERT 進行意圖識別。
系統(tǒng)測試效果如圖5 和圖6 所示。對照圖4和圖5 簡單解釋一下智能坐席系統(tǒng)根據(jù)業(yè)務流程服務客戶的過程。系統(tǒng)說出開場白后,客戶說“查一下電費”,系統(tǒng)識別出“查電費”意圖,進入“查電費”流程。由于客戶信息未知,進入圖4 右側(cè)所示的“獲取客戶信息”子流程。根據(jù)“獲取客戶信息”流程,系統(tǒng)先詢問客戶編號,客戶提供編號后,系統(tǒng)用函數(shù)節(jié)點驗證客戶姓名,驗證通過后系統(tǒng)從數(shù)據(jù)庫中獲得客戶信息,返回“查電費”流程,繼續(xù)查詢數(shù)據(jù)庫獲得電費信息并回復客戶。接下來客戶問“電價多少錢”,系統(tǒng)識別出“查電價”意圖,進入“查電價”流程?!安殡妰r”流程與“查電費”類似,但因為已經(jīng)得到了客戶信息,因此直接查詢數(shù)據(jù)庫得到電價信息回復給客戶。綜上所述,系統(tǒng)通過識別客戶意圖并執(zhí)行相應流程服務客戶。
圖5 智能坐席
圖6 智能外呼
電力公司的客服業(yè)務是服務客戶的重要窗口,有著話務量大、坐席業(yè)務繁重的特點。隨著自然語言處理技術(shù)的進步,用智能客服分流人工坐席業(yè)務,是減輕坐席客服壓力、降低服務成本的一個可行方案。本文探討了如何搭建一個面向電力領(lǐng)域的智能客服對話系統(tǒng),提出了融合神經(jīng)網(wǎng)絡和電力領(lǐng)域知識的方法:利用神經(jīng)網(wǎng)絡實現(xiàn)自然語言理解模塊,對客服的話進行意圖識別;利用對話流配置框架和知識圖譜將電力領(lǐng)域知識融入對話系統(tǒng),保證電力領(lǐng)域智能客服對話系統(tǒng)的專業(yè)性。同時開發(fā)了智能坐席和智能外呼兩個智能客服機器人,針對這兩個場景的線上客服進行數(shù)據(jù)標注,實驗得到的智能客服的意圖識別準確率分別為91.61%和90.78%,系統(tǒng)能夠按照電力領(lǐng)域知識回復客戶,驗證了方法的有效性。
電力客服領(lǐng)域已經(jīng)梳理出了比較規(guī)范的服務流程和話術(shù),可以根據(jù)這些業(yè)務文檔配置出智能客服機器人,回答常見的標準問題。另一方面,通過對線上聊天記錄進行分析后發(fā)現(xiàn),對于用戶的一些問題業(yè)務流程中并沒有規(guī)定處理方式,需要人工客服根據(jù)經(jīng)驗回答。如何讓智能客服從海量的客戶聊天歷史數(shù)據(jù)中學習到這些經(jīng)驗,提升服務能力,是有價值的研究方向。