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