摘 要:針對(duì)養(yǎng)豬農(nóng)戶在豬只生病時(shí)獲取疾病診斷和防治信息不方便、時(shí)間周期長(zhǎng)或者代價(jià)昂貴等問題,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)基于Rasa的生豬疾病診斷對(duì)話系統(tǒng)。從Rasa項(xiàng)目創(chuàng)建開始,按照應(yīng)用系統(tǒng)所需意圖和實(shí)體槽位設(shè)計(jì)、自然語言理解流水線配置、對(duì)話管理設(shè)計(jì)、知識(shí)圖譜設(shè)計(jì)和系統(tǒng)軟件架構(gòu)設(shè)計(jì)的順序?qū)ο到y(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)過程進(jìn)行了詳細(xì)的描述。該系統(tǒng)的開發(fā)升級(jí)了12396平臺(tái),對(duì)農(nóng)業(yè)信息的推廣應(yīng)用、提高農(nóng)業(yè)智能化水平具有重要意義。
關(guān)鍵詞:Rasa框架;生豬疾??;對(duì)話系統(tǒng);知識(shí)圖譜
中圖分類號(hào):S482.4 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1006-060X(2023)07-0097-04
Abstract:To address the issues of inconvenience, time-consuming or expensive costs for pig farmers' access to disease diagnosis and control information when their pigs are sick, a Rasa-based pig disease diagnosis dialogue system is designed and implemented. Starting from the creation of the Rasa project, the design and implementation process of the system is described in detail according to the order of the application system's desired intention and entity slot design, natural language understanding pipeline configuration, dialogue management design, knowledge map design and system software architecture design. The development of the system has upgraded the 12396 platform, which is of great significance for the promotion and application of agricultural information, and the improvement of agricultural intelligence level.
Key words:Rasa framework; pig disease; diagnosis system; knowledge graph
湖南是我國(guó)第二大生豬出口大省,生豬的疾病防治至關(guān)重要,診斷不及時(shí)或診斷有誤都將給農(nóng)戶帶來巨大損失,大范圍的生豬疾病將給豬肉市場(chǎng)帶來波動(dòng),影響廣大人民的生活質(zhì)量。對(duì)于養(yǎng)殖戶來說,獲取診斷和防治措施的途徑一般有咨詢專業(yè)獸醫(yī)、使用搜索引擎和查詢專業(yè)書籍等方式。農(nóng)村的專業(yè)獸醫(yī)十分稀少,出診時(shí)間長(zhǎng),很容易錯(cuò)過最佳治療時(shí)機(jī)。搜索引擎和查詢書籍等方式使用不方便,有些信息可靠性難以保證且不容易理解。
“十二五”期間,由湖南省科技廳牽頭,開發(fā)了湖南省農(nóng)村農(nóng)業(yè)信息化綜合服務(wù)平臺(tái),集成了12396呼叫熱線,農(nóng)戶可以通過平臺(tái)直接呼叫坐席專家。比如診斷生豬疾病,專家通過與農(nóng)戶的一系列對(duì)話,問詢農(nóng)戶關(guān)于豬只的表現(xiàn)癥狀,給出診斷結(jié)果和防治建議。這是一種很自然的交互方式,深受農(nóng)民歡迎,但坐席專家的代價(jià)太高,這種方式不可持續(xù)。而開發(fā)能替代坐席專家的機(jī)器人診斷代理是一種不錯(cuò)的選擇。
Rasa是一套開源機(jī)器學(xué)習(xí)框架,用于構(gòu)建基于對(duì)話上下文的AI(artificial intelligence,人工智能)小助手和聊天機(jī)器人[1-2]。該研究將設(shè)計(jì)和開發(fā)一個(gè)基于Rasa的生豬疾病問答機(jī)器人代理系統(tǒng),使養(yǎng)豬農(nóng)戶能方便、實(shí)惠地獲取生豬疾病診斷結(jié)果和防治建議。
1 Rasa框架概述
1.1 Rasa處理流程
Rasa主要包括Rasa NLU(Natural Language Under-standing)和Rasa Core這2個(gè)部分。Rasa NLU用于機(jī)器人的意圖分類和實(shí)體識(shí)別,而Rasa Core會(huì)話引擎則是用真實(shí)的對(duì)話文本訓(xùn)練機(jī)器學(xué)習(xí)算法模型,從而預(yù)測(cè)在收到消息后機(jī)器人該作何回復(fù)(Action)。用戶輸入文本信息,基于Rasa NLU的自然語言解釋器(Interpreter)將之轉(zhuǎn)換成意圖和實(shí)體信息,然后構(gòu)建包括用戶原始文本(Text)、用戶意圖(Intent)、實(shí)體(Entity)的語義詞典并傳給Rasa Core。在Rasa Core中,對(duì)話狀態(tài)追蹤器(Tracker)獲取當(dāng)前的對(duì)話狀態(tài),策略(Policy)接收到當(dāng)前的對(duì)話狀態(tài)后,通過特征提取組件得到對(duì)話狀態(tài)特征,按照對(duì)話狀態(tài)特征預(yù)測(cè)和選擇下一個(gè)動(dòng)作(Action)。最后,Tracker執(zhí)行Action將結(jié)果反饋給用戶并記錄此次執(zhí)行動(dòng)作[3-4]。Rasa消息處理流程如圖1所示。
1.2 Rasa NLU模塊
Rasa NLU是Interpreter的核心,主要負(fù)責(zé)實(shí)體抽取和意圖分類等自然語言理解任務(wù),將用戶的輸入文本表示為結(jié)構(gòu)化數(shù)據(jù)。Rasa NLU支持多種語言,內(nèi)置Spacy、MITIE和Jieba等多種開源NLP(Natural Language Process,自然語言處理)工具。開發(fā)人員通過配置config.yml的NLP Pipeline來選擇自然語言理解所需工具。Rasa NLU按照配置次序依次執(zhí)行,完成自然語言理解的各項(xiàng)任務(wù)。
1.3 Rasa Core模塊
Rasa Core是一種機(jī)器學(xué)習(xí)驅(qū)動(dòng)的對(duì)話管理引擎,也是Rasa體系中負(fù)責(zé)對(duì)話管理的部分,主要職責(zé)是記錄對(duì)話的過程和選擇下一個(gè)動(dòng)作。它可以幫助創(chuàng)建有上下文、有層次的對(duì)話,支持多輪交互。Rasa Core的主要功能是通過策略(Policies)來預(yù)測(cè)對(duì)話中的下一個(gè)動(dòng)作(Action),并根據(jù)用戶的輸入和對(duì)話狀態(tài)來更新對(duì)話跟蹤器(Tracker)。
2 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
2.1 創(chuàng)建Rasa項(xiàng)目
在ubuntu20.04系統(tǒng)安裝Miniconda用來配置Python3.8的虛擬環(huán)境,然后使用pip安裝Rasa以及依賴的python庫(kù):
pip install Rasa
pip install jieba
pip install transformers
執(zhí)行rasa init命令創(chuàng)建并初始化Rasa項(xiàng)目,包含的配置文件及說明如表1所示。
2.2 設(shè)計(jì)意圖和實(shí)體槽位
意圖是用戶回復(fù)消息的類別,意圖識(shí)別是一個(gè)文本分類問題。對(duì)于某個(gè)應(yīng)用,可以確定包含的實(shí)體類別,給每類實(shí)體定義對(duì)應(yīng)的槽位,對(duì)回復(fù)消息進(jìn)行實(shí)體識(shí)別后,將識(shí)別的實(shí)體填入槽位。該研究在nlu.yml中定義了豬只疾病查詢相關(guān)的3個(gè)意圖,實(shí)例如下。
\"text\": \"你能給我一些關(guān)于豬的豬鏈球菌病的信息嗎\",
\"intent\": {
\"name\": \"query_knowledge_base\",
\"confidence\": 1.0
}
在domain.yml中有關(guān)豬只的槽位定義如下:
animal:
type: any
mappings:
-entity: animal
type: from_entity
disease:
type: any
mappings:
-entity: disease
type: from_entity
disease_info:
type: list
mappings:
- entity: disease_info
type: from_entity
2.3 設(shè)計(jì)NLU流程
Rasa通過圖2所示流程來實(shí)現(xiàn)對(duì)用戶回復(fù)消息的理解。
基于Rasa支持的自然語言處理組件,通過在文件config.yml中配置pipeline來實(shí)現(xiàn)圖2的處理流程,配置如下:
pipeline:
- name: JiebaTokenizer
- name: LanguageModelFeaturizer
model_name: bert
model_weights: bert-base-chinese
- name: RegexFeaturizer
- name: DIETClassifier
epochs: 1000
learning_rate: 0.001
constrain_similarities: true
tensorboard_log_directory: ./log
- name: FallbackClassifier
threshold: 0.4
ambiguity_threshold: 0.1
- name: EntitySynonymMapper
2.4 設(shè)計(jì)對(duì)話管理
Rasa Core是Rasa體系中負(fù)責(zé)對(duì)話管理的部分,主要職責(zé)是記錄對(duì)話過程和選擇下一個(gè)動(dòng)作。
Rasa Tracker是Rasa框架中的一個(gè)核心組件,用于跟蹤對(duì)話歷史和當(dāng)前對(duì)話狀態(tài)。它存儲(chǔ)了用戶和機(jī)器人之間的所有交互,包括用戶發(fā)送的消息、機(jī)器人的響應(yīng)、對(duì)話中的槽值以及對(duì)話中的上下文。Rasa Tracker還可以將對(duì)話歷史轉(zhuǎn)換為對(duì)話狀態(tài),以便機(jī)器人可以使用它來推斷下一個(gè)最佳動(dòng)作。
在Rasa Core中,策略(Policy)負(fù)責(zé)學(xué)習(xí)故事,形成規(guī)則,從而利用Rasa Tracker中的對(duì)話狀態(tài)預(yù)測(cè)動(dòng)作。有關(guān)豬只疾病查詢的故事設(shè)計(jì)如下:
stories:
- story: 查詢知識(shí)庫(kù)
steps:
-intent:query_knowledge_base
- action: action_response_query
- checkpoint: check_query
- story: 確認(rèn)后續(xù)詢問
steps:
- checkpoint: check_query
- or:
- intent: other_query
- intent: affirm
-action:action_affirm_other_query
- story: 否認(rèn)后續(xù)詢問
steps:
- checkpoint: check_query
- intent: deny
- action: utter_deny
該研究將策略配置為:
policies:
- name: MemoizationPolicy
- name: TEDPolicy
max_history: 5
epochs: 100
- name: RulePolicy
core_fallback_threshold: 0.3
core_fallback_action_name: \"action_default_fallback\"
完成上述配置后,使用如下的命令完成相關(guān)模型的訓(xùn)練:
Rasa train
2.5 收集生豬疾病語料
“豬病通”網(wǎng)站(https://120.nxin.com/)有十分豐富的生豬疾病知識(shí),該研究使用網(wǎng)絡(luò)爬蟲技術(shù)采集相關(guān)知識(shí)。由于網(wǎng)站存在交互動(dòng)作,該研究使用selenium的chrome模塊進(jìn)行自動(dòng)爬取以及動(dòng)作記錄,通過正則表達(dá)式對(duì)數(shù)據(jù)進(jìn)行了清洗,并按后續(xù)方便使用的格式保存[5]。
通過py2neo初始化Graph,填寫賬號(hào)、密碼和庫(kù)名,然后分別創(chuàng)建NodeMatcher和RelationshipMatcher,將爬取的數(shù)據(jù)按照一個(gè)疾病對(duì)應(yīng)一個(gè)節(jié)點(diǎn)的原則存儲(chǔ),而疾病的其他信息則按節(jié)點(diǎn)的屬性存儲(chǔ),再將所有的疾病節(jié)點(diǎn)與標(biāo)記為動(dòng)物、名稱為豬的根節(jié)點(diǎn)建立關(guān)系鏈接起來[6]。部分生豬疾病知識(shí)圖譜如圖3所示。
2.6 web部署
該研究通過Python的Flask框架實(shí)現(xiàn)了一個(gè)輕便的Web服務(wù)器,部署在騰訊云上,便于與Rasa進(jìn)行交互。主要步驟包括:Miniconda虛擬環(huán)境配置、Flask Web服務(wù)器安裝配置、Docker安裝和配置。瀏覽器和服務(wù)器端的工作流程為:首先用戶在前端界面上輸入信息,輸入的信息會(huì)通過HTTP協(xié)議傳遞到Rasa服務(wù)器,并通過Rasa NLU和Rasa Core的處理,決定要執(zhí)行下一步動(dòng)作之后,再由Rasa動(dòng)作服務(wù)器結(jié)合知識(shí)圖譜生成響應(yīng),并將響應(yīng)的動(dòng)作返回到前端瀏覽器[7]?;赗asa的生豬疾病問答系統(tǒng)的軟件架構(gòu)如圖4所示。
3 系統(tǒng)測(cè)試
當(dāng)用戶打開該系統(tǒng)頁面時(shí),機(jī)器人會(huì)主動(dòng)發(fā)送一句問候語。用戶可以通過該Web頁面和機(jī)器人進(jìn)行對(duì)話,例如查詢生豬疾病知識(shí)、隨機(jī)了解隨意一種豬病、閑聊等。用戶可以以隨意句式拋出表達(dá)“查詢生豬疾病知識(shí)”意圖的句子,當(dāng)機(jī)器人做出第一輪回答后,用戶可以根據(jù)上輪問答繼續(xù)對(duì)該疾病進(jìn)行提問或者結(jié)束對(duì)話。當(dāng)用戶由于某種原因輸入亂序文本,或者輸入超出生豬疾病知識(shí)領(lǐng)域的問題時(shí),系統(tǒng)服務(wù)端將無法正確解析相對(duì)應(yīng)的文本信息,也會(huì)致使系統(tǒng)無法給出合適答案。生豬疾病診斷正確對(duì)話示例如圖5所示。
當(dāng)用戶向機(jī)器人查詢數(shù)據(jù)庫(kù)中未記錄的生豬疾病或者不存在的生豬疾病的話,機(jī)器人則會(huì)采取兜底回復(fù)給用戶。兜底回復(fù)的示例如圖6所示。
4 結(jié) 語
該文詳細(xì)闡述了基于Rasa框架構(gòu)建生豬疾病診斷對(duì)話系統(tǒng)的過程,包括意圖和實(shí)體槽位設(shè)計(jì)、自然語言理解流程設(shè)計(jì)和對(duì)話管理設(shè)計(jì)等。通過填寫相關(guān)配置文件創(chuàng)建模型訓(xùn)練數(shù)據(jù)集,進(jìn)而訓(xùn)練相關(guān)機(jī)器學(xué)習(xí)模型。通過構(gòu)建生豬疾病領(lǐng)域知識(shí)圖譜,為Rasa行為響應(yīng)提供知識(shí)來源。為了提供更友好的用戶體驗(yàn),基于python的flask框架實(shí)現(xiàn)了一個(gè)生豬疾病診斷對(duì)話系統(tǒng),通過對(duì)話這種自然交互方式為養(yǎng)豬農(nóng)戶提供準(zhǔn)確的生豬疾病及其防治知識(shí)。
參考文獻(xiàn):
[1] 李孟全,吳士泓,王志剛. 基于Rasa框架的智能對(duì)話系統(tǒng)研究與設(shè)計(jì)[J]. 現(xiàn)代計(jì)算機(jī),2023,29(1):95-100.
[2] 鹿婷婷. 基于Rasa框架的客服智能對(duì)話系統(tǒng)設(shè)計(jì)研究[J]. 電腦與電信,2022(1):81-85.
[3] 鐘有東,王 峰,邱逸銘,等. 基于Rasa框架的中醫(yī)問答系統(tǒng)設(shè)計(jì)[J]. 電腦知識(shí)與技術(shù),2022,18(11):74-76.
[4] 劉宇杰. 基于Rasa的領(lǐng)域?qū)υ捪到y(tǒng)的實(shí)現(xiàn)與優(yōu)化[D]. 上海:東華大學(xué),2022.
[5] 崔慶才. Python3網(wǎng)絡(luò)爬蟲開發(fā)實(shí)戰(zhàn)(第2版)[M]. 北京:人民郵電出版社,2021.
[6] 羅柏濤. 基于Neo4j的兒科知識(shí)圖譜的構(gòu)建與推理[D]. 廣州:廣東工業(yè)大學(xué),2022.
[7] 錢游著. Python Flask Web開發(fā)入門與項(xiàng)目實(shí)戰(zhàn)[M]. 北京:機(jī)械工業(yè)出版社,2019.7
(責(zé)任編輯:成 平)