張瀚月 丁妍 張毓 馮時(shí)
摘? 要:近年來,隨著自然語言處理技術(shù)的飛速發(fā)展,傳統(tǒng)的客服越來越不能滿足當(dāng)前的業(yè)務(wù)需求,基于自然語言技術(shù)的智能客服系統(tǒng)應(yīng)運(yùn)而生并被廣泛應(yīng)用在學(xué)習(xí)、生活、工作等各個(gè)領(lǐng)域中。本系統(tǒng)使用HTML和JavaScript進(jìn)行前端頁面的實(shí)現(xiàn),采用Django進(jìn)行后端的搭建,并使用MySQL進(jìn)行數(shù)據(jù)的管理;使用ESIM模型進(jìn)行語義匹配,該模型綜合應(yīng)用了BiLSTM和注意力機(jī)制,將不同句子的各單詞特征相關(guān)性進(jìn)行表示,再進(jìn)行差積分析,凸顯了局部推理信息,最終實(shí)現(xiàn)了具有回答用戶問題、天氣查詢、推薦商品等功能的智能客服系統(tǒng)。
關(guān)鍵詞:智能客服;電子商務(wù);搜索引擎
中圖分類號:TP311.1? ? ?文獻(xiàn)標(biāo)識碼:A
Design and Implementation of E-commerce Intelligent Customer
Service System based on Deep Neural Network
ZHANG Hanyue, DING Yan, ZHANG Yu, FENG Shi
(School of Computer Science and Engineering, Northeastern University, Shenyang 110819, China)
zhanghanyuehyz@163.com; 20174530@stu.neu.edu.cn;
zhangyvneu@163.com; fengshi@cse.neu.edu.cn
Abstract: In recent years, with rapid development of natural language processing technology, traditional customer service is increasingly unable to meet current business needs. Intelligent customer service system based on natural language technology has emerged and is widely used in various fields, such as study, life, and work. This paper proposes to design an E-commerce intelligent customer service system using HTML (HyperText Markup Language) and JavaScript to implement the front-end page, Django to build the back-end, MySQL (Structured Query Language) to manage data, and the ESIM (Enhanced Sequential Inference Model) to perform semantic matching. This model uses BiLSTM (Bidirectional Long Short-term Memory) and attention mechanism to combine different sentences. Feature relevance of each word is expressed, and then difference product analysis is performed, which highlights the local reasoning information. Finally, the intelligent customer service system with functions such as answering user questions, weather inquiries, and recommending products is realized.
Keywords: intelligent customer service; e-commerce; search engine
1? ?引言(Introduction)
隨著人工智能的發(fā)展,聊天機(jī)器人逐漸走入人們的視野,它第一次出現(xiàn)在英國知名數(shù)學(xué)家圖靈在Mind上發(fā)表的經(jīng)典論文——《計(jì)算機(jī)器與智能》[1-2]中。聊天機(jī)器人在應(yīng)用場景上主要可以劃分為娛樂、在線客服、教育、個(gè)人助理和智能問答[3]。近幾年來,信息的爆發(fā)式增長使得人們需要更快速、準(zhǔn)確地在網(wǎng)絡(luò)中獲取自己需要的信息[4]。因此,智能客服機(jī)器人的需求日益增加,其發(fā)展趨勢非常迅猛,它被廣泛運(yùn)用在電商平臺的導(dǎo)購服務(wù)、公共平臺的智能指導(dǎo)服務(wù)等方面。相對于人工客服,它有著巨大的優(yōu)勢:響應(yīng)快速、全天候在線、成本低。顧客可以在任意時(shí)間咨詢電子客服,并且得到迅速響應(yīng),這是人工客服無法做到的[5]。當(dāng)一個(gè)企業(yè)的客戶規(guī)模很大時(shí),對客服的需求量也是不斷增加的,這會給企業(yè)帶來巨大的人力資源壓力、服務(wù)成本壓力、監(jiān)管壓力。而使用智能服務(wù)機(jī)器人只需對其進(jìn)行開發(fā)、運(yùn)營、維護(hù),其成本要比人工客服小得多。因此,使用智能客服機(jī)器人代替人工客服是一種必然的趨勢[6]。
本文實(shí)現(xiàn)了基于深度神經(jīng)網(wǎng)絡(luò)的電子商務(wù)智能客服系統(tǒng),具有回答用戶問題、查詢天氣、推薦商品等基本服務(wù)。用戶可以詢問與商品有關(guān)的信息并得到回答,同時(shí)該系統(tǒng)也會在頁面上顯示推薦用戶購買的相關(guān)產(chǎn)品信息。
2? ?需求分析(Requirements analysis)
本系統(tǒng)所要實(shí)現(xiàn)的目標(biāo)為一個(gè)多功能智能客服對話系統(tǒng),擁有回答用戶有關(guān)商品問題、進(jìn)行商品推薦、查天氣這三項(xiàng)基本功能。在用戶與本系統(tǒng)交互時(shí),系統(tǒng)會根據(jù)用戶提出的問題進(jìn)行關(guān)鍵詞抽取,并在數(shù)據(jù)庫中找到最為匹配的回答傳送到前端并顯示在界面上。同時(shí)它也具有商品推薦和天氣預(yù)報(bào)的功能,用戶可直接在聊天頁面跳轉(zhuǎn)到華為商城進(jìn)行商品選擇,也可查詢所在地的天氣情況,如圖1所示。
3? ?實(shí)現(xiàn)技術(shù)(Implementation technology)
3.1? ?智能客服機(jī)器人簡介
本智能客服對話系統(tǒng)采用了深度學(xué)習(xí)的框架,根據(jù)用戶輸入的句子,利用模型逐詞或逐句生成答案,然后將答案回復(fù)給用戶;采用了Encoder-Decoder模型,即編碼—解碼模型[7],其框架技術(shù)如圖2所示。Encoder就是對輸入序列進(jìn)行編碼,通過一系列非線性變換轉(zhuǎn)化成一個(gè)帶有語義固定長度的向量;Decoder就是根據(jù)之前生成的固定向量再轉(zhuǎn)化成輸出序列。本系統(tǒng)選擇的模型是ESIM模型。
3.2? ?ESIM 模型算法流程
為了理解ESIM網(wǎng)絡(luò)模型的工作原理,這里通過一系列算法方程進(jìn)行說明。
進(jìn)一步假設(shè)如下:給定兩個(gè)句子和。其中a是前提(premise),b是假設(shè)(hypothesis)。ai和bj屬于l維的詞向量,可以由一些預(yù)訓(xùn)練的詞向量和語義樹組織來初始化,目標(biāo)是要預(yù)測表示a和b之間的邏輯關(guān)系標(biāo)簽y[8]。
具體算法流程如下:
第一步(輸入編碼):BiLSTM作為推理模型的一個(gè)基礎(chǔ)模塊,用表示輸入句子a在BiLSTM網(wǎng)絡(luò)的時(shí)刻i的隱藏層輸出(單詞ai的隱狀態(tài))。同理,公式如下:
(1)
(2)
第二步(局部推理):采用注意力機(jī)制,注意力層通過計(jì)算隱狀態(tài)對的注意力權(quán)重來作為前提和假設(shè)的相似度。具體計(jì)算公式為:
(3)
第三步:對于前提中一個(gè)單詞的隱狀態(tài),由第二步得到的eij計(jì)算它與假設(shè)中的各單詞的語義相似程度,公式如下。其中是對單詞序列的加權(quán)求和。
(4)
(5)
第四步:計(jì)算了對的差異和點(diǎn)積銳化元組中元素之間的局部推理信息,將計(jì)算得到的差異和點(diǎn)積向量拼接在原始向量、之后。
(6)
(7)
第五步:計(jì)算了一個(gè)整合層來組合增強(qiáng)的局部推理信息。在樹組合中,更新樹節(jié)點(diǎn)以組合局部推理的總體公式如下:
(8)
(9)
第六步:計(jì)算平均池化和最大池化,并將這些向量進(jìn)行拼接,形成最終的固定長度向量v。
(10)
(11)
(12)
4? ?系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)(System design and implementation)
4.1? ?總體設(shè)計(jì)
本系統(tǒng)以TensorFlow為開發(fā)平臺,采用深度學(xué)習(xí)的框架構(gòu)建了一個(gè)智能客服對話系統(tǒng)。前端采用了HMTL和JavaScript語言進(jìn)行編寫,并結(jié)合了CSS和jQuery;后端采用了Django的Web應(yīng)用框架,以MTV模型為基礎(chǔ)進(jìn)行前后端的交互。前后端之間通過AJAX技術(shù)異步通信,是一種在無須重新加載整個(gè)頁面的情況下,能夠部分更新網(wǎng)頁的技術(shù),以創(chuàng)建快速動態(tài)網(wǎng)頁[9]。傳輸?shù)臄?shù)據(jù)全部以JSON格式包裝。用戶在網(wǎng)頁上產(chǎn)生請求后,后端通過協(xié)議將請求內(nèi)容轉(zhuǎn)發(fā)到相應(yīng)的功能模塊服務(wù)器上并返回響應(yīng),前端收到響應(yīng)后通過JS對頁面上顯示的內(nèi)容進(jìn)行修改,并顯示在界面上,如圖3所示。
4.2? ?數(shù)據(jù)庫設(shè)計(jì)
由于數(shù)據(jù)量較大并且要和Django相結(jié)合,因此使用MySQL數(shù)據(jù)庫存儲數(shù)據(jù),使用繼承Django的Models類的方式實(shí)現(xiàn)一個(gè)數(shù)據(jù)庫模型類。類中共有四個(gè)數(shù)據(jù)成員,分別是int類型的id、varchar類型的name、varchar類型的question和varchar類型的answer。其中,id是表的主鍵,name用于記錄商品名,question用于記錄關(guān)于該商品的問題,answer記錄對于問題的回答,如表1所示。
使用python manage.py makemigrations命令將數(shù)據(jù)模型生成遷移腳本文件,再使用python manage.py migrate命令將生成的遷移腳本文件映射到數(shù)據(jù)庫中,生成數(shù)據(jù)表。其中數(shù)據(jù)庫中的部分?jǐn)?shù)據(jù)展示,如圖4所示。
圖4 數(shù)據(jù)庫部分?jǐn)?shù)據(jù)展示
Fig.4 Part of the database data display
4.3? ?搜索引擎
為了得到用戶所提問題的候選答案,同時(shí)也為了保證運(yùn)行時(shí)間,本文實(shí)現(xiàn)了一個(gè)輕量級的搜索引擎。首先使用搜索引擎來得到一些候選回答,然后再使用神經(jīng)網(wǎng)絡(luò)匹配模型篩選出更加精確的回答。本文使用了Python的第三方庫Whoosh來制作搜索引擎。在使用搜索引擎之前,先要創(chuàng)建一個(gè)索引,而在創(chuàng)建索引之前,要先創(chuàng)建一個(gè)模式(Schema)。
算法1:創(chuàng)建索引。
if index文件夾存在:
打開索引
else:
os.mkdir("index")? ? ? // 創(chuàng)建index文件夾
my_index = create_in("index", schema)? // 創(chuàng)建索引
將數(shù)據(jù)庫中的數(shù)據(jù)寫入索引
創(chuàng)建索引結(jié)束
我們使用如上代碼創(chuàng)建了一個(gè)模式,使用了jieba庫中的ChineseAnalyzer作為語言分析器。在創(chuàng)建好模式之后,就可以創(chuàng)建索引了。首先,創(chuàng)建一個(gè)名為index的文件夾;然后,使用之前創(chuàng)建好的模式創(chuàng)建一個(gè)索引;最后,把數(shù)據(jù)庫中的數(shù)據(jù)對應(yīng)于模式中的各個(gè)字段保存到索引中。索引創(chuàng)建完成之后,就可以實(shí)現(xiàn)答案的搜索了。具體搜索流程如圖5所示。
算法2:對問題進(jìn)行搜索。
輸入:用戶詢問的問題
question = request.POST.get('question_box')? ? ? // 獲得問題
parser=MultifieldParser(["name","question"],my_index.schema, group=qparser.OrGroup)? ? ? ? ? //使用創(chuàng)建whoosh.query.Query對象
myquery = parser.parse(question)? //對問題進(jìn)行處理,生成query對象
with my_index.searcher() as searcher:
result = searcher.search(myquery)? //對問題進(jìn)行搜索
4.4? ?后端設(shè)計(jì)
(1)問答功能
本功能主要是對用戶關(guān)于商品信息的提問進(jìn)行回答。首先我們爬取了京東、淘寶上關(guān)于華為手機(jī)的問答對,構(gòu)建了一個(gè)大型語料庫。當(dāng)用戶輸入問題后,使用搜索引擎搜索出最匹配的十個(gè)問題,然后使用語義匹配模型進(jìn)行匹配,將得分最高的答案返回給用戶,如圖6所示。
(2)語義匹配模型
語義匹配模型主要分為數(shù)據(jù)預(yù)處理和匹配打分這兩個(gè)部分,下面分別對其進(jìn)行介紹。
首先是數(shù)據(jù)預(yù)處理。我們對用戶輸入的問題進(jìn)行繁體轉(zhuǎn)簡體、使用jieba進(jìn)行分詞、去除停用詞的操作,將句子轉(zhuǎn)換為一個(gè)由詞語組成的列表。
其次是匹配打分的過程。我們主要使用Keras搭建ESIM(Enhanced Sequential Inference Model)模型,該模型主要分為三個(gè)部分:輸入編碼、局部推理和推理合成[10]。
輸入編碼是使用BiLSTM模型表征輸入句子中每一個(gè)單詞和它的上下文信息。它能夠很好地表征局部推理信息和它在上下文中的影響,其中我們假設(shè)句子的最大長度為20。
局部推理是采用注意力機(jī)制,通過計(jì)算狀態(tài)對的注意力權(quán)重來作為前提和假設(shè)的相似度。最后利用點(diǎn)積等操作銳化局部推理信息,并將其拼接在一起。
推理合成部分依舊使用BiLSTM模型來整合局部推斷信息。
最后將輸出結(jié)果進(jìn)行平均值池化和最大值池化,送入多層感知器(MLP)中,激活函數(shù)采用tanh函數(shù),輸出層采用softmax函數(shù),得到前提和假設(shè)的匹配度。
該模型的輸入為兩個(gè)經(jīng)過預(yù)處理后的單詞列表,輸出結(jié)果為這兩個(gè)列表原本語句的匹配程度。我們采用了在京東上爬取的關(guān)于華為手機(jī)的問答對共十萬條進(jìn)行訓(xùn)練和測試,在測試集上的準(zhǔn)確率達(dá)到88.5%,召回率達(dá)到88.8%。語義匹配流程圖如圖7所示。
(3)天氣預(yù)報(bào)功能
在問答界面中,也提供了天氣預(yù)報(bào)的功能,用戶可以查看自己當(dāng)前所在城市的天氣情況。在HTML代碼中,使用一個(gè)iframe標(biāo)簽,將該iframe標(biāo)簽的src屬性設(shè)置為天氣網(wǎng)站的鏈接,這樣就將用戶所在城市的天氣信息返回到了前端。用戶也可以通過點(diǎn)擊天氣信息的圖形來了解關(guān)于天氣更多的細(xì)節(jié)。
(4)商品推薦功能
問答機(jī)器人在頂部提供了通往華為商城的鏈接,用戶點(diǎn)擊后可以通往華為商城。
4.5? ?前端設(shè)計(jì)
我們采用HTML和JavaScript進(jìn)行編寫,設(shè)計(jì)了一個(gè)如圖5所示的聊天界面。用戶在聊天界面輸入自己的問題并提交,使用post方法進(jìn)行數(shù)據(jù)的傳輸,為了使得Django能夠正確地找到HTML文件,需要在settings.py和views.py中指定文件的位置,因此進(jìn)行了相應(yīng)設(shè)置。
當(dāng)對話數(shù)量較多時(shí),聊天對話框被拉長,影響使用體驗(yàn),因此為聊天對話框設(shè)置最大高度后添加overflow-y: scroll;樣式,可在內(nèi)容超出最大高度后自動顯示滾動條。在用戶輸入內(nèi)容或系統(tǒng)對用戶進(jìn)行回復(fù)后,通過對聊天框的scrollTop參數(shù)進(jìn)行設(shè)置實(shí)現(xiàn)滾動條自動滾動顯示最新內(nèi)容。聊天對話框主體下方為輸入框和發(fā)送按鈕,當(dāng)頁面加載完成時(shí),為發(fā)送按鈕設(shè)置鍵盤監(jiān)聽事件,以實(shí)現(xiàn)按回車鍵直接發(fā)送消息。
4.6? ?數(shù)據(jù)集
本系統(tǒng)采用的數(shù)據(jù)集為京東商場有關(guān)華為手機(jī)的40 萬條問題與回答數(shù)據(jù),其中238,014 條用于訓(xùn)練,158,677 條用于測試。數(shù)據(jù)爬取的目標(biāo)是京東上用戶提出的問題和回答。由于京東上一部分的商品是動態(tài)加載的,因此采用selenium的方法進(jìn)行數(shù)據(jù)爬取,為了使一個(gè)頁面中的所有商品都可以加載出來,在爬取數(shù)據(jù)時(shí),先讓瀏覽器執(zhí)行一段JS代碼,將瀏覽器的滾動條拖到最下面,以完成一個(gè)頁面中所有商品的加載。為了提高爬取的效率,將京東上一個(gè)頁面的60 個(gè)商品分成12 組,采用多線程的方式分別對每一組進(jìn)行數(shù)據(jù)的爬取。通過繼承threading中的Thread類,實(shí)現(xiàn)一個(gè)Crawl類,通過構(gòu)造函數(shù),使類的實(shí)例具有商品編號和商品名稱信息。定義Crawl類的run方法,在run方法中加入獲取數(shù)據(jù)的函數(shù),在線程啟動時(shí)即開始爬取數(shù)據(jù),使用PyQuery庫的find方法結(jié)合CSS選擇器找到想要的數(shù)據(jù)。在得到的數(shù)據(jù)中發(fā)現(xiàn)有很多回答會有“您好”或者“感謝您對京東的支持!祝您購物愉快”這樣對我們的系統(tǒng)無用的語句,所以使用正則表達(dá)式對爬取到的答案進(jìn)行清洗,將清洗的數(shù)據(jù)存入數(shù)據(jù)庫中。
5? ?系統(tǒng)展示(System display)
系統(tǒng)運(yùn)行結(jié)果如圖8所示。
6? ?結(jié)論(Conclusion)
本文主要介紹了基于深度神經(jīng)網(wǎng)絡(luò)的電子商務(wù)智能客服系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)過程。首先該系統(tǒng)構(gòu)建了一個(gè)大型語料庫,包含從京東等電商平臺爬取的數(shù)萬條問答對,作為模型訓(xùn)練和評估的數(shù)據(jù)。其次,該系統(tǒng)使用Django進(jìn)行后端搭建,使用HTML和JavaScript進(jìn)行前端實(shí)現(xiàn),使用Keras進(jìn)行模型的搭建和訓(xùn)練,代碼簡潔清晰。我們將各個(gè)功能進(jìn)行封裝,使其便于復(fù)用,降低了各模塊之間的耦合度,使其易于擴(kuò)展。同時(shí)該系統(tǒng)設(shè)置有問答功能、天氣查詢功能、商品推薦功能,能夠在用戶有需要的時(shí)候隨時(shí)提供服務(wù),降低了人工成本,提高了服務(wù)效率,商品推薦功能也會給用戶提供更多購買選擇,是一個(gè)極具實(shí)用性的系統(tǒng)。
參考文獻(xiàn)(References)
[1] TURING A M. Parsing the Turing Test[M]. Dordercht: Springer, 2009:23-65.
[2] 馮曉波.中文問答系統(tǒng)中問題分類和關(guān)鍵詞擴(kuò)展的研究[D].北京:北京郵電大學(xué),2011.
[3] 王浩暢,李斌.聊天機(jī)器人系統(tǒng)研究進(jìn)展[J].計(jì)算機(jī)應(yīng)用與軟件,2018,35(12):1-6,89.
[4] LOW D B W. An improved immune genetic algorithm for the optimization of enterprise information system based on time property[J]. Journal of Software, 2011, 6(3):436-443.
[5] 王乾銘,李吟.基于深度學(xué)習(xí)的個(gè)性化聊天機(jī)器人研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2020,30(4):79-84.
[6] 張素榮.智能客服問答系統(tǒng)關(guān)鍵算法研究及應(yīng)用[D].江蘇:南京郵電大學(xué),2018.
[7] LE Q, MIKOLOV T. Distributed representations of sentences and documents[C]//ROGOZHNIKOV A. International Conference on Machine Learning. Proceedings of the 31 st International Conference on Machine Learning. New York: JMLR, 2014: 1188-1196.
[8] ZHANG L, CHEN C. Sentiment classification with convolutional neural networks: An experimental study on a large-scale Chinese conversation corpus[C]// International Conference on Computational Intelligence and Security. 2016 12th International Conference on Computational Intelligence and Security. New York City: IEEE, 2016:165-169.
[9] 韓可彧.基于Django的XSS和CSRF防御系統(tǒng)的研究與實(shí)現(xiàn)[D].武漢:武漢郵電科學(xué)研究院,2018.
[10] 伍行素,陳錦回.基于LSTM深度神經(jīng)網(wǎng)絡(luò)的情感分析方法[J].上饒師范學(xué)院學(xué)報(bào),2018,38(06):10-14.
作者簡介:
張瀚月(1999-),女,本科生.研究領(lǐng)域:軟件工程,機(jī)器學(xué)習(xí).
丁? ?妍(1999-),女,本科生.研究領(lǐng)域:自然語言處理.
張? 毓(1999-),男,本科生.研究領(lǐng)域:深度學(xué)習(xí),軟件工程.
馮? 時(shí)(1981-),男,博士,副教授.研究領(lǐng)域:數(shù)據(jù)挖掘,自然語言處理.