999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種對話機器人開發技術綜述與系統架構實現

2021-04-06 04:04:19孫小魚
軟件工程 2021年2期

摘? 要:對話機器人是使用自然語言處理與生成技術,模擬人類對話邏輯并與人進行交流的計算機程序。作為新一代人工智能產品的人機交互主要入口,邏輯實現方式與交互是對話機器人設計的關鍵。本文結合對話機器人的技術特點,在實現過程中采用基于Python語言的Django微服務Web應用開發框架,將對話算法模型與邏輯處理過程進行微服務化API封裝,使其他應用能夠請求對話服務的接口進行功能的二次開發。為了提高對話響應速度,本文采用了關系型數據庫MySQL與基于內存的非關系型數據庫Redis結合的方式,減少算法模型對硬盤的讀取次數,優化了用戶體驗。

關鍵詞:微服務;Django;MySQL;Redis

Abstract: A chatbot is a computer program that simulates human conversation and communicates with human through natural language processing and generation technology. As main access to human-computer interaction for a new generation of artificial intelligence products, logical implementation and interaction are critical to the design of chatbots. Based on technical characteristics of chatbots, this paper adopts Python-based Django micro-service web application development framework in the implementation and encapsulates dialogue algorithm model and logic processing process into a micro-service API (Application Programming Interface). Thus, other applications can request the interface of dialogue service for a secondary development of functions. In order to improve the efficiency of query processing, a memory-based non-relational database Redis (Remote Dictionary Server) is used with relational database MySQL (Structured Query Language) to reduce the number of reads from hard disk and so to optimize system performance.

Keywords: micro-services; Django; MySQL; Redis

1? ?引言(Introduction)

對話機器人是當前人工智能領域的研究熱點,它應用自然語言處理與生成技術,以聊天界面或API為基礎,能夠與人進行語音或文本對話,以聊天的方式解決用戶的需求[1]。對話算法主要包括以下幾個過程:自然語言理解、對話狀態追蹤[2]、對話內容管理[3]、自然語言生成[4]。但是上述過程的核心算法都是基于Python編程語言開發的,與網站軟件開發或終端硬件開發的技術架構并不兼容。為了適應越發復雜的大型網站系統單體架構,微服務技術應運而生,其核心思想是各種自治的子系統協同工作,共同完成大型網站的功能和業務需求[5]。

對話機器人與其他微服務程序不同的地方在于:處理對話邏輯需要大量高頻重復且復雜的計算過程和頻繁的存取硬盤數據的過程。隨著使用對話的用戶規模變大,由于硬件資源有限,對話程序在運行過程中很容易造成對話響應速度變慢、對話邏輯處理不完整甚至是服務宕機等現象,嚴重影響用戶體驗。

針對上述問題,本文在技術實現過程中采用基于Python語言的Django開發框架,并根據業務邏輯將對話模型進行模塊拆分,在模塊之間添加Redis緩存[6],用內存中的讀寫過程替代了高頻的復雜計算和高頻的硬盤存取過程。

2? ?相關技術(Related technologies)

2.1? ?Python

Python是由Guido van Rossum在20世紀80年代末到90年代初于荷蘭國家數學和計算機科學研究所設計出來的一種結合了解釋性、編譯性、互動性和面向對象的高級程序設計語言。它具有易于學習與維護、可移植、可擴展、可嵌入等特點。Python由于代碼簡潔、基礎代碼庫完善等優勢,已經應用于人工智能、Web應用開發、運維系統開發、游戲開發等重要領域。Python語言在人工智能領域被廣泛應用是因為它對科學計算的友好支持[7],包括基礎的Numpy、Pandas、Scikit-learn等科學計算工具箱和Tensorflow、Pytorch、Caffe等深度學習開發框架都是以Python語言為基礎進行封裝的。

2.2? ?Django

Django是一款基于Python的免費開源的Web應用開發框架,采用了MVT的框架模式,即模型M(Model)、視圖V(View)和模板T(Template),于2008年9月發布了第一個正式版本1.0。MVT模式將傳統MVC模式中的Controller層拆分成業務邏輯操作與請求的處理與轉發,將業務邏輯操作結合到了View層中,View通過調用Model層與Template層,根據HTML、CSS、JavaScript等對數據進行渲染后返回給前端瀏覽器界面。同時新增了一個URL分發器,負責將不同的URL請求分發給不同的View進行業務邏輯處理。Django擁有強大的數據庫功能,并自帶一套功能完備、界面美觀的管理后臺。由于Django具有低耦合、開發快捷、部署方便、復用性高、運維成本低、完善的開發者社區等優點,近些年來許多大型網站的開發都選擇Django作為Web應用核心開發框架,例如YouTube、Google、Instagram、Reddit,以及國內的豆瓣、知乎等。

Django框架原理如圖1所示。首先,客戶端向服務發送HTTP請求,由WSGI(Web Server Gateway Interface)模塊統一進行協議處理后,發送給請求中間件,并由請求中間件交由URL分發器進行統一分發。若找不到對應的URL地址,則直接返回給響應中間件,經過WSGI模塊統一處理后返回給瀏覽器。若找到對應的URL地址,則由視圖中間件進行處理后映射到View層中的函數。View層的函數根據業務邏輯判斷是否需要調用Model層,Model層利用對象關系映射(Object-Relational Mapping,ORM)[8]將數據庫表抽象成Python中的類,數據庫表中的字段抽象成Python類中的屬性,通過對Model層的類的操作得到數據庫的API,避免了復雜的數據庫語句編寫。View層在調用Model層的同時從Template層的靜態資源庫中調用HTML/CSS/JavaScript資源,并將數據和頁面解析、渲染成HTML頁面,經事務中間件處理后返回給響應中間件,由響應中間件交給WSGI模塊統一處理后返回給瀏覽器。

2.3? ?MySQL數據庫

MySQL在Web應用方面是最好的RDBMS(Relational Database Management System,關系數據庫管理系統)應用軟件之一,由瑞典的MySQL AB公司開發,屬于Oracle旗下產品。數據庫(Database)是按照數據結構來組織、存儲和管理數據的應用程序。關系型數據庫是建立在關系模型基礎上的數據庫,借助于集合、代數等數學概念和方法來處理數據庫中的數據。在關系型數據庫中,數據以表(Table)的形式出現,表中的每一行稱為一條記錄,表中的每一列稱為一個屬性,表與表之間以代數關系為基礎組成完整的系統數據。數據庫表的結構設計決定了數據庫的性能,合理的數據庫結構可以讓使用者在每次訪問最少數量的表的前提下完成業務需求。MySQL數據庫使用標準的SQL語言形式對數據進行增加、刪除、修改、查詢等操作,由于其體積小、速度快、成本低、使用靈活等特點被應用于中小型網站開發。

2.4? ?Redis

遠程字典服務(Remote Dictionary Server, Redis)是一個基于key-value形式存儲的NoSQL數據庫[9],用哈希表表示key與value之間的映射關系,可用key值迅速查詢對應的value值[10]。Redis使用ANSI C編寫,包含五種數據結構,并且支持網絡通信和多語言API,遵守BSD協議,可擴展性強,可選作持久化存儲[11]。由于Redis的數據以key-value的形式存儲在內存中,且Redis的事務操作具有原子性,因此比硬盤讀寫更迅速,讀取速度可以達到110,000 次/秒,寫入速度可以達到81,000 次/秒[12]。Redis通常應用在“高頻讀、低頻寫”的熱點數據緩存、計數器、消息隊列、排行榜、社交網絡、訂單系統等高吞吐、高并發場景。

3? ?流程設計與實現(Process design and implementation)

3.1? ?對話服務問答流程

基于Django的對話機器人服務流程如圖2所示。

(1)對話服務從前端接收參數sentence和userId。其中sentence為用戶輸入的句子,userId為用戶的唯一標識。

(2)Django框架中的View層函數解析參數sentence和userId。

(3)以sentence為key在Redis的nlu目錄中進行查詢。若查詢到記錄,則將value取出作為dialogue,并更新生命周期為604,800 秒;若查詢不到記錄,則將sentence傳入NLU模塊進行理解,輸出作為dialogue,并將最新的理解結果寫入Redis。其中,dialogue為NLU模塊進行理解后的計算結果。

(4)以userId為key在Redis的userdst目錄中進行查詢。若查詢到記錄,則從value列表取出dst.state和keyword,并更新生命周期為604,800 秒;若查詢不到記錄,則初始化dst.state和keyword并寫入Redis。其中,dst.state為該用戶的對話狀態追蹤信息,keyword為該用戶上次對話的關鍵詞。

(5)將sentence,dialogue,dst傳入DPL對話策略學習模塊進行意圖識別。若DPL模塊處理結果顯示為非問答,則給出回應,并傳回給前端;若DPL模塊處理結果顯示為問答,則將處理后的問題question傳入QA模塊。

(6)以question為key在Redis的qa目錄中進行查詢。若查詢到記錄,則從value列表中取出answer,并更新生命周期為604,800 秒;若查詢不到記錄,則從數據庫中掃描關鍵詞并進行問答對匹配傳回給前端,同時將問答對寫入Redis,并更新生命周期為604,800 秒。

通過上述流程,高頻輸入的句子、高頻活躍的用戶對話狀態追蹤和高頻匹配的問答對全部被緩存至Redis之中。其他用戶請求服務時,若輸入的是經常被輸入的語句和經常被理解的問題,則直接從Redis數據庫中讀取內容,不必進行煩瑣的計算過程和緩慢的讀硬盤過程。

3.2? ?MySQL數據庫結構設計

由于對話機器人模型首先需要掃描對話域內的關鍵詞,匹配成功后再掃描該關鍵詞分支下的全部問答對,因此將關鍵詞表中的keyword字段作為問答對表的外鍵。關鍵詞表和問答對表如表1和表2所示。

3.3? ?Redis存儲策略設計

根據對話機器人模型的流程可知,高頻輸入語句的NLU計算結果、用戶狀態和用戶對話關鍵詞、高頻問答對匹配結果可以在Redis進行緩存處理。其中,高頻輸入語句的NLU計算結果用set命令存入chatbot:nlu目錄下,以sentence為key,以dialogue為value,生命周期為604,800 秒;用戶狀態和用戶對話關鍵詞用lpush命令存入chatbot:userdst目錄下,以userId為key,以dst和keyword為value列表,生命周期為604,800 秒;高頻問答對匹配結果用set命令存入chatbot:qa目錄下,以question為key,以answer為value,生命周期為604,800 秒。

4? ?性能分析(Performance analysis)

4.1? ?系統硬件指標及測試工具

本文的對話機器人服務開發采用的是Windows 64位操作系統上位機,處理器為Intel(R)Core(TM)i7-8565U CPU @ 1.80 GHz 2.00 GHz,核心數8 個,內存為16 GB、2400 MHz頻率,服務部署于開發機上。性能指標測試收集工具采用的是Postman請求模擬器v7.34.0和Apache Server中的ab.exe組件。

4.2? ?單個請求響應時間測試

首先由一個新用戶向對話服務發問,然后更換用戶再向對話服務問相同的內容,記錄請求的響應時間。如圖3和圖4所示,新用戶向對話服務發問時請求完成時間為345 ms,而更換用戶后問相同問題時請求完成時間僅為83 ms。因為前一名用戶的語義理解結果和問答對匹配結果已經被記錄至Redis中,新用戶的發問請求只需在Redis中讀取數據,無須進行復雜的計算和數據庫讀取。

4.3? ?并發請求測試

設置Apache Server ab.exe組件的參數-n與-c分別為{0,10,100,1000,10000}和{0,10,100,1000,10000}。其中,-n為總請求數,-c為并發請求數。記錄服務的吞吐率(Requests per Second,RPS,單位為req/s)和平均請求完成時間(Time per Request,TPR,單位為ms),測試結果如表3所示。

由測試結果可知,對話服務在4.1節的運行條件下,接收100 個并發請求的時候達到性能瓶頸,此時RPS達到25左右,且隨著并發量增加RPS不再變化;TPR為40 ms左右,且隨著并發量增加TPR不再變化。

5? ?結論(Conclusion)

本文從對話機器人算法流程出發,根據對話算法使用框架的特點,在技術實現過程中采用基于Python編程語言的Django微服務框架對算法業務邏輯進行API封裝,以便他人調用API接口進行對話功能的二次開發;同時將復雜的計算流程和硬盤存取流程拆分,并將高頻訪問的句子、高頻使用用戶的對話狀態追蹤信息和高頻匹配的問答對進行Redis緩存處理及MySQL持久化存儲處理。對性能分析的結果表明,基于Django框架和Redis緩存的對話服務開發流程減少了計算過程和硬盤存取過程,能夠應對大規模的數據存儲需求。對話服務的請求響應迅速,吞吐率指標正常,在保證性能的同時優化了用戶體驗。

參考文獻(References)

[1] 楊曄.基于深度學習的聊天機器人的研究[J].信息技術與信息化,2020(03):158-159.

[2] Tsung-Hsien Wen, David Vandyke, Nikola Mrksic, et al. A Network-based End-to-End Trainable Task-oriented Dialogue System[C]. Proceedings of the 15th Conference of the European Chapter of the Association for Computational Linguistics(Volume 1: Long Papers), 2017:438-449.

[3] Chien-Sheng Wu, Andrea Madotto, Ehsan Hosseini-Asl, et al.? Transferable Multi-Domain State Generator for Task-Oriented Dialogue Systems[C]. Proceedings of the 57th Annual Meeting of the Association for Computational Linguistics, 2019:? 808-819.

[4] Hao Zhou, Tom Young, Minlie Huang, et al. Commonsense knowledge aware conversation generation with graph attention[C]. Proceedings of the 27th International Joint Conference on Artificial Intelligence, 2018:4623-4629.

[5] 徐維,劉屹.微服務技術框架在智慧警務應用中的優勢和缺點[J].信息通信,2019(08):82-83.

[6] 張永躍.基于微服務+Redis的政務數據共享模式設計[J].電子技術與軟件工程,2020(14):208-209.

[7] 呂戌杪,粟藝峰,張蒙蒙,等.基于Django的煤礦地測防治水信息管理系統的設計與實現[J].科技經濟導刊,2020,28(15): 13-14.

[8] 石鳳貴.基于MTV模式的遠程教學系統設計與實現[J].電腦知識與技術,2020,16(07):93-96.

[9] 屠雪真.一種大規模Redis集群云運維技術[J].電腦知識與技術,2019,15(08):1-3.

[10] 桂成杰,曾獻輝.結合Redis與WebSocket的智能空調移動環境實時控制技術[J].軟件導刊,2020,19(01):190-194.

[11] 王佩劍.基于Docker容器的Redis高可用實現方案[J].信息通信,2019(08):67-70.

[12] 寧方美,賀雪梅,牟晉娟.SpringBoot集成Redis緩存技術在企業一卡通系統中的應用[J].電子技術與軟件工程,2019? (24):133-134.

作者簡介:

孫小魚(1993-),男,碩士,初級研究員.研究領域:人工智能,微服務開發.

主站蜘蛛池模板: 狠狠色丁香婷婷综合| 97人人做人人爽香蕉精品| 亚洲欧美国产五月天综合| 久久精品国产在热久久2019| 狂欢视频在线观看不卡| 亚洲精品图区| 成人免费黄色小视频| 国产亚洲欧美在线视频| 婷婷综合色| 在线观看免费国产| 成年看免费观看视频拍拍| 久久综合伊人 六十路| 国产综合精品一区二区| 最新精品国偷自产在线| 日本高清成本人视频一区| 久久99热这里只有精品免费看| 精品国产一区二区三区在线观看| 青青草91视频| 999精品免费视频| 亚洲精品卡2卡3卡4卡5卡区| 久久这里只有精品免费| 人妻出轨无码中文一区二区| 欧美中出一区二区| 欧洲av毛片| 亚洲v日韩v欧美在线观看| 伊人色在线视频| 日韩毛片在线播放| 国产在线一区视频| 国产高清国内精品福利| 18禁高潮出水呻吟娇喘蜜芽| 精品国产香蕉在线播出| 国产乱子伦手机在线| 欧美视频二区| 波多野结衣在线se| 伦伦影院精品一区| 国产成年女人特黄特色大片免费| 色婷婷狠狠干| 久草中文网| 午夜无码一区二区三区| 成人无码区免费视频网站蜜臀| 国产亚洲视频中文字幕视频| 日韩高清成人| A级全黄试看30分钟小视频| 亚洲成AV人手机在线观看网站| 四虎国产永久在线观看| 免费无码AV片在线观看国产| 激情网址在线观看| 91精品国产自产在线老师啪l| 伦精品一区二区三区视频| 无码一区中文字幕| a毛片免费观看| 无码专区在线观看| 亚洲无码A视频在线| 亚洲区第一页| 亚洲AV无码久久精品色欲| 亚洲Va中文字幕久久一区| 91久久偷偷做嫩草影院精品| 日韩黄色精品| 色偷偷一区| 国产成人精品一区二区不卡| 欧美日本激情| 亚洲国产精品不卡在线| 青青网在线国产| 欧美天堂久久| 国产人在线成免费视频| 久久国产精品电影| 欧美日韩导航| 高清无码手机在线观看| 97se亚洲综合在线韩国专区福利| A级毛片高清免费视频就| 国产成人h在线观看网站站| 又粗又硬又大又爽免费视频播放| 毛片视频网| 色婷婷丁香| 国产99热| 青青青视频免费一区二区| 色综合综合网| 美女视频黄频a免费高清不卡| 精品国产中文一级毛片在线看| 久久永久精品免费视频| 欧美成人午夜视频| 日本精品视频一区二区|