孔繁恒,高永祺,張子帥,阮俊豪,馮 時(shí)
(東北大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院,遼寧 沈陽(yáng) 110819)
kongfanheng426@163.com;905323742@qq.com;1060876095@qq.com;954369920@qq.com;fengshi@stu.neu.edu.cn
伴隨著互聯(lián)網(wǎng)數(shù)據(jù)的爆發(fā)式增長(zhǎng),聊天機(jī)器人產(chǎn)品出現(xiàn)在人們的視野中。聊天機(jī)器人是經(jīng)由對(duì)話或文字進(jìn)行交談的計(jì)算機(jī)程序,能夠模擬人類對(duì)話,為用戶提供了智能、自然連貫的對(duì)話服務(wù)。聊天機(jī)器人根據(jù)其對(duì)話生成技術(shù)主要分為檢索式和生成式。檢索式模型使用信息檢索的技術(shù),從事先處理好的語(yǔ)料庫(kù)中選擇匹配的對(duì)話作為應(yīng)答。生成式模型使用深度學(xué)習(xí)的技術(shù),通過(guò)預(yù)先訓(xùn)練的模型合成適當(dāng)?shù)膽?yīng)答。
在對(duì)話中保持一致的個(gè)性對(duì)于人類來(lái)說(shuō)是很自然的,但對(duì)于機(jī)器來(lái)說(shuō)卻不是一件平凡的任務(wù),由于在自然語(yǔ)言中體現(xiàn)個(gè)性的困難,以及在大多數(shù)對(duì)話語(yǔ)料庫(kù)中觀察到的人物角色稀疏問(wèn)題,仍然沒(méi)有得到很好的探討。本文設(shè)計(jì)了一種檢索-生成混合模型,該模型可以利用人物角色稀疏對(duì)話數(shù)據(jù)生成連貫的響應(yīng)。通過(guò)對(duì)說(shuō)話人的角色和對(duì)話歷史進(jìn)行編碼,設(shè)計(jì)個(gè)性屬性嵌入,來(lái)模擬更豐富的對(duì)話語(yǔ)境,從而實(shí)現(xiàn)個(gè)性化的聊天機(jī)器人系統(tǒng)。
作為人機(jī)交互領(lǐng)域一個(gè)非常重要的研究方向,人機(jī)對(duì)話系統(tǒng)正處于蓬勃發(fā)展的階段。傳統(tǒng)的問(wèn)答系統(tǒng)已經(jīng)不能滿足人們的要求,如今人們更偏向于系統(tǒng)擁有更廣泛的知識(shí)領(lǐng)域并能夠具有特定的個(gè)性,使得人機(jī)對(duì)話更加生動(dòng)、順暢。聊天機(jī)器人,主要任務(wù)是利用自然語(yǔ)言完成與人在任意話題上的交流,其涉及的話題之廣、表達(dá)方式之多更能符合用戶的需求。
本系統(tǒng)所要實(shí)現(xiàn)的目標(biāo)為個(gè)性化的智能聊天機(jī)器人系統(tǒng),擁有進(jìn)行個(gè)性化聊天的功能。用戶在與本系統(tǒng)交互時(shí),可以設(shè)置聊天機(jī)器人的個(gè)性信息。系統(tǒng)會(huì)通過(guò)對(duì)用戶設(shè)置的角色和對(duì)話歷史進(jìn)行編碼,模擬對(duì)話語(yǔ)境,分別得到檢索式和生成式兩種回復(fù)方式,將兩者評(píng)價(jià)比較后選擇最優(yōu)回復(fù),并顯示在聊天界面上,實(shí)現(xiàn)個(gè)性化的聊天。本系統(tǒng)的各功能模塊如圖1所示。
圖1 系統(tǒng)功能模塊圖Fig.1 System function block diagram
本系統(tǒng)以PyTorch為開(kāi)發(fā)框架,采用深度學(xué)習(xí)的技術(shù),使用檢索-生成混合模型,構(gòu)建了一個(gè)個(gè)性化的智能聊天機(jī)器人系統(tǒng)。前端采用Tkinter模塊接口,后端采用PyTorch開(kāi)發(fā)框架,均使用Python語(yǔ)言編寫(xiě)。前端為Graphical User Interface(GUI),分為兩部分:設(shè)置界面(可供用戶設(shè)置聊天機(jī)器人的個(gè)性信息,包括性別、地域和個(gè)性標(biāo)簽)與聊天界面。后端使用檢索-生成混合模型,檢索模型采用Elasticsearch搜索服務(wù)器,檢索速度極快,大大降低了整體系統(tǒng)的回復(fù)生成時(shí)間;生成模型采用PostKS模型,可以定向設(shè)置聊天機(jī)器人的個(gè)性并生成具有特定個(gè)性的回復(fù)。通過(guò)混合兩種模型提高了回復(fù)的相關(guān)性和流暢性,語(yǔ)句質(zhì)量較高。
在后端設(shè)計(jì)中,選擇具有個(gè)性信息的2019 年社會(huì)媒體處理大會(huì)中文人機(jī)對(duì)話技術(shù)評(píng)測(cè)(SMP2019-ECDT)對(duì)話集和質(zhì)量較高的小黃雞語(yǔ)料庫(kù)作為數(shù)據(jù)集,然后進(jìn)行數(shù)據(jù)預(yù)處理,包括篩選高頻個(gè)性標(biāo)簽、數(shù)據(jù)清洗、調(diào)整數(shù)據(jù)格式等。檢索模塊使用Elasticsearch搜索服務(wù)器及小黃雞語(yǔ)料庫(kù)構(gòu)建檢索模型,生成模塊首先構(gòu)建PostKS個(gè)性化生成模型,然后利用SMP2019-ECDT對(duì)話集進(jìn)行訓(xùn)練。前端為用戶提供窗口輸入個(gè)性信息與對(duì)話,以字符串的形式傳送到后端。后端接收到用戶發(fā)送的信息,分別傳送到檢索和生成模塊中生成應(yīng)答,在回復(fù)選擇模塊比較兩種模型生成的應(yīng)答并選擇合適的應(yīng)答,同時(shí)將此應(yīng)答傳回前端并展示到界面上。系統(tǒng)總體結(jié)構(gòu)如圖2所示。
圖2 系統(tǒng)總體結(jié)構(gòu)圖Fig.2 System overall structure diagram
本文選取SMP2019-ECDT提供的數(shù)據(jù)集作為生成模型的原始數(shù)據(jù),數(shù)據(jù)集中包含約500萬(wàn)輪次的對(duì)話(既包含單輪對(duì)話又包含多輪對(duì)話),以及參與這些對(duì)話的發(fā)話人的個(gè)性化信息(包括性別、個(gè)性標(biāo)簽、所屬地域)。數(shù)據(jù)集為JSON格式,如{"dialog":[["瘋了瘋了"],["我要帶到教室去上課你就羨慕我吧!"]],"profile":[{"tag":["美食"],"loc":"四川成都","gender":"female"},{"tag":["娛樂(lè);旅游"],"loc":"四川","gender":"female"}],"uid":[0,1]},其中dialog為對(duì)話,profile表示對(duì)話人的個(gè)性化信息,包括tag——個(gè)性標(biāo)簽、loc——所屬地域、gender——性別、uid——對(duì)話人id。
由于生成模型需要個(gè)性信息作為特征,標(biāo)簽的篩選十分重要,因此要對(duì)數(shù)據(jù)集進(jìn)行預(yù)處理。首先將相似的標(biāo)簽進(jìn)行合并,例如“電影”“愛(ài)電影”“電影愛(ài)好者”這類標(biāo)簽可以合并成一類。然后篩選出高頻出現(xiàn)的標(biāo)簽,得到高頻標(biāo)簽字典。算法描述如下所示。
由于數(shù)據(jù)集中存在很多個(gè)性信息不完善(缺少性別/地域/個(gè)性標(biāo)簽)的對(duì)話,因此需要對(duì)數(shù)據(jù)集進(jìn)行清洗,并且保證對(duì)話中的每個(gè)單詞都在單詞表中,以此來(lái)提升數(shù)據(jù)集的質(zhì)量。算法描述如下所示:
對(duì)于檢索模型,SMP2019-ECDT提供的數(shù)據(jù)集對(duì)話噪音較多,在語(yǔ)意連貫、流暢性等方面有所欠缺,因此本文采用小黃雞語(yǔ)料庫(kù)作為檢索模型的數(shù)據(jù)集。該數(shù)據(jù)集只需調(diào)整數(shù)據(jù)格式即可使用。
Elasticsearch是一個(gè)分布式、可擴(kuò)展、實(shí)時(shí)的搜索與數(shù)據(jù)分析引擎。由于Elasticsearch是在Lucene基礎(chǔ)上構(gòu)建而成的,所以在全文本搜索方面表現(xiàn)十分出色。Elasticsearch是一個(gè)近實(shí)時(shí)的搜索平臺(tái),這意味著從文檔索引操作到文檔變?yōu)榭伤阉鳡顟B(tài)之間的延時(shí)很短,相比一些傳統(tǒng)的檢索方法回復(fù)速度提升了10%以上。Elasticsearch提供了強(qiáng)大的索引能力,其使用的倒排索引相較于關(guān)系型數(shù)據(jù)庫(kù)的B-Tree索引更快。
通過(guò)文本匹配的相關(guān)度分?jǐn)?shù)來(lái)判斷檢索對(duì)話的相關(guān)性。其相關(guān)度評(píng)分的計(jì)算規(guī)則涉及布爾模型(Boolean Model)、詞頻-逆文檔頻率(TF-IDF)和向量空間模型(Vector Space Model)。Elasticsearch使用布爾模型查找匹配文檔,并用一個(gè)名為實(shí)用評(píng)分函數(shù)(借鑒TF-IDF和向量空間模型)的公式來(lái)計(jì)算相關(guān)度,同時(shí)也加入了協(xié)調(diào)因子、字段長(zhǎng)度歸一化、詞或查詢語(yǔ)句權(quán)重提升。
映射(Mapping)是定義文檔及其包含的字段如何存儲(chǔ)和索引的過(guò)程。每個(gè)文檔都是字段的集合,映射數(shù)據(jù)時(shí),將會(huì)創(chuàng)建一個(gè)映射定義,其中包含與文檔相關(guān)的字段列表。
本文檢索的映射規(guī)則設(shè)置如下:
其中,type 表示每個(gè)字段的數(shù)據(jù)類型,常用的有keyword和text等,可根據(jù)檢索的目的設(shè)置。analyzer表示索引時(shí)用于文本分析的分析器,search_analyzer表示搜索時(shí)使用的分析器,本文分別設(shè)置為ik_max_word和ik_smart。IK分詞器是一款中文分詞器,ik_max_word算法是最細(xì)粒度切分算法,比如將“中華人民共和國(guó)人民大會(huì)堂”拆分為中華人民共和國(guó)、中華人民、中華、華人、人民共和國(guó)、人民、共和國(guó)、大會(huì)堂、大會(huì)、會(huì)堂等詞語(yǔ)。而ik_smart算法是最粗粒度切分算法,比如將“中華人民共和國(guó)人民大會(huì)堂”拆分為中華人民共和國(guó)、人民大會(huì)堂。對(duì)于中文內(nèi)容,在索引時(shí)用ik_max_word,在搜索時(shí)用ik_smart可以使檢索的效果達(dá)到最佳。
生成模塊中使用PostKS模型,這是一個(gè)可以利用知識(shí)的先驗(yàn)和后驗(yàn)分布來(lái)促進(jìn)知識(shí)選擇的神經(jīng)模型。通過(guò)使用先驗(yàn)分布有效地逼近后驗(yàn)分布,該模型可以在推理過(guò)程中產(chǎn)生適當(dāng)?shù)幕卮?。根?jù)用戶輸入的個(gè)性化信息通過(guò)知識(shí)管理器來(lái)設(shè)定聊天機(jī)器人的個(gè)性,使得系統(tǒng)能夠生成具有特定個(gè)性的回復(fù)。
圖3 PostKS模型圖Fig.3 PostKS model diagram
(1)對(duì)話編碼器和知識(shí)編碼器
顯然,后驗(yàn)分布在選擇知識(shí)時(shí)是優(yōu)于先驗(yàn)分布的,但在推理生成應(yīng)答階段中,后驗(yàn)分布是未知的,因此期望先驗(yàn)分布能夠盡可能地接近后驗(yàn)分布。為此,引入了KLDivLoss(Kullback-Leibler Divergence Loss)作為輔助損失函數(shù),用來(lái)衡量先驗(yàn)分布和后驗(yàn)分布的接近性:
(3)解碼器
然后,融合單元將它們組合在一起,生成整體的隱藏狀態(tài):
檢索模型與生成模型各有利弊。檢索模型直接使用語(yǔ)料庫(kù)中的對(duì)話,選擇匹配度較高的對(duì)話進(jìn)行回復(fù),回復(fù)語(yǔ)句的質(zhì)量較高,保證了對(duì)話的信息性,但無(wú)法回復(fù)語(yǔ)料庫(kù)中未出現(xiàn)的問(wèn)題;生成模型將對(duì)話經(jīng)過(guò)一系列處理從而產(chǎn)生相應(yīng)的回答,且PostKS模型能夠根據(jù)特定的個(gè)性產(chǎn)生對(duì)應(yīng)個(gè)性的回復(fù),具有多樣性,但相較于檢索模型產(chǎn)生的回復(fù)可能會(huì)出現(xiàn)缺乏相關(guān)度或語(yǔ)義不通等問(wèn)題。
為使聊天機(jī)器人系統(tǒng)既能保持檢索模型的信息性,也能保持生成模型的多樣性,且盡可能地克服兩種模型的缺點(diǎn),因此設(shè)計(jì)了一種檢索-生成混合模型,結(jié)構(gòu)如圖4所示。
圖4 回復(fù)選擇模塊流程圖Fig.4 Reply selection module flowchart
當(dāng)接收到用戶發(fā)送的對(duì)話時(shí),先在檢索模塊通過(guò)Elasticsearch搜索引擎進(jìn)行檢索并進(jìn)行相關(guān)度評(píng)分,設(shè)定一個(gè)適當(dāng)?shù)拈撝?本文設(shè)為5),若存在相關(guān)度評(píng)分高于閾值的對(duì)話,則將評(píng)分最高的回復(fù)發(fā)送給用戶,否則調(diào)用PostKS個(gè)性化生成模型,依據(jù)用戶設(shè)置的個(gè)性化信息,生成具有特定個(gè)性的回復(fù)發(fā)送給用戶。
由于用戶設(shè)置過(guò)聊天機(jī)器人的個(gè)性信息,當(dāng)詢問(wèn)聊天機(jī)器人的性別與地域相關(guān)問(wèn)題時(shí),為防止機(jī)器人的回復(fù)與先前用戶設(shè)置的信息不一致,機(jī)器人的回復(fù)不應(yīng)通過(guò)檢索或生成模型來(lái)獲取,而是調(diào)用回復(fù)性別或地域的函數(shù)。
前端使用Tkinter模塊,是Python標(biāo)準(zhǔn)Tk GUI庫(kù)。前端包括設(shè)置界面(可供用戶設(shè)置聊天機(jī)器人的個(gè)性信息,包括性別、地域和個(gè)性標(biāo)簽)與聊天界面。
在設(shè)置界面(圖5)分別輸入性別、地域和個(gè)性標(biāo)簽即可設(shè)置聊天機(jī)器人的個(gè)性,點(diǎn)擊“確定”后進(jìn)入聊天界面(圖6),在輸入框中輸入語(yǔ)句,點(diǎn)擊“發(fā)送”即可生成應(yīng)答并顯示在界面中,點(diǎn)擊“返回”將退回到設(shè)置界面,可重新設(shè)置聊天機(jī)器人的個(gè)性。
圖5 設(shè)置界面Fig.5 Interface for settings
圖6 聊天界面Fig.6 Interface for chatting
系統(tǒng)運(yùn)行結(jié)果如圖7和圖8所示。
圖7 設(shè)置界面展示Fig.7 Display of setting interface
圖8 聊天界面展示Fig.8 Display of chatting interface
本文設(shè)計(jì)了一種可以實(shí)現(xiàn)個(gè)性化回復(fù)的聊天機(jī)器人系統(tǒng)。本系統(tǒng)基于PyTorch開(kāi)發(fā)框架,后端各個(gè)模塊結(jié)構(gòu)清晰簡(jiǎn)潔,易于修改、擴(kuò)展。使用檢索-生成混合模型,既保留了檢索模型的信息性,語(yǔ)句流暢、質(zhì)量高,也保留了生成模型的多樣性,且可生成特定個(gè)性的應(yīng)答。檢索模型使用Elasticsearch搜索引擎,檢索速度極快,大大縮減了整個(gè)系統(tǒng)生成應(yīng)答的時(shí)間,通常情況下1 s內(nèi)即可產(chǎn)生應(yīng)答,對(duì)話具有實(shí)時(shí)性。生成模型使用PostKS模型,可以生成具有特定個(gè)性的應(yīng)答。本系統(tǒng)可供用戶閑聊,同時(shí)也可以應(yīng)用到多種不同的場(chǎng)景中。在面向特定的應(yīng)用場(chǎng)景時(shí),依據(jù)實(shí)際場(chǎng)景采取相應(yīng)的個(gè)性,會(huì)使交流過(guò)程更為順暢和專業(yè),這無(wú)疑具有一定的社會(huì)價(jià)值。