0.作業聲明
| 這個作業屬於哪個課程 | 信安1912-軟件工程 (廣東工業大學 - 計算機學院) |
|---|---|
| 這個作業要求在哪里 | 團隊作業3--需求改進&系統設計 |
| 這個作業的目標 | 需求&原型改進、系統設計、Alpha任務分配計划、測試計划 |
1.作業gitee鏈接
2.團隊展示
1、隊名:is-good-bro
2、隊員學號
| 隊員 | 學號 |
|---|---|
| 陳梓浩(組長) | 3119005455 |
| 羅行健 | 3119005470 |
| 黃浩 | 3119005414 |
| 何子陽 | 3119005413 |
| 蘇澤 | 3119005473 |
3、擬作的團隊項目描述:基於知識圖譜的醫療問答機器人

3.需求&原型改進:
1、針對課堂討論環節老師和其他組的問題及建議,對修改選題及需求進行修改
問題1:數據來源是否能確保准確性
修改1:實體識別模型訓練數據集采用ChineseBLUE中的cMedQANER數據集,關系抽取模型訓練數據集采用baiduie數據集,實體規范化模型訓練數據集采用yidu-n7k數據集,意圖識別模型訓練數據集采用CMID數據集
問題2:用戶如何能使用到本產品
修改2:使用前端交互界面,后端將項目部署到服務器上,提供web端供用戶進行使用
問題3:web端存在很多不便性,如何讓項目更能推廣出去
修改3:團隊成員研究更多的使用途徑,並開始嘗試開發微信聊天端
2、修改完善上周提交的需求規格說明書
上周提交的需求規格說明書中,只是淺談了不同用戶人群的需求狀況,這里進行詳細描述:
面向學齡兒童,由於人口老齡化趨勢導致年輕人的壓力增大,越來越多的年輕人選擇外出打拼,將孩子交給祖輩看護,但是祖輩的科學知識並不充裕,存在很多封建土方,比如孩子發燒通過厚被悶汗出熱治病,但是這其實沒有任何正效應,甚至可能導致加重發燒,需要一個准確的醫療診斷機器人,避免因誤判或過晚發現身體上的異常,容易造成不可估量的無法挽回后果
面向青年群體,青年身體有異常習慣通過挺兩天嘗試自愈,但是並非每種情況都可以靠身體自愈,而且為了方便,通常選擇網絡查病,但例如百度,經常隨便一問都是癌症征兆或者晚期,不僅沒實際效果,而且會導致心理焦慮,需要一個即時的醫療咨詢機器人,及時保障自身健康
面對中老年群體,他們的記憶力下降,容易忘記葯物的服用時間和劑量頻率,需要一個便捷的醫療問答機器人,防止影響治療效果
3、參考《構建之法》5節功能的定位和優先級,給出功能分析的四個象限
| 外圍功能 | 殺手功能 | |
|---|---|---|
| 必要需求 | 基本的症狀問病功能 | 獨特的並發症和宜忌食物查詢功能 |
| 輔助需求 | 拓展的葯品查詢功能 | 緩存對話信息,支持多輪對話功能 |
4、根據修改后的需求,調整任務分解WBS及相應的項目進度計划

| 第9周 | 1.團隊組隊、團隊博客 |
|---|---|
| 2.團隊介紹、成員展示、角色分配、選題確定 | |
| 3.制定團隊計划安排,團隊貢獻分的規定 | |
| 4.原型設計,隊員估計任務難度並開始學習必要的技術 | |
| 第10周 | 1.需求規格說明書 |
| 2.隊員完成基礎知識的學習 | |
| 3.完成系統基本編碼、服務器調試、基本架構 | |
| 第11周 | 1.原型改進(給目標用戶展現原型,並進一步理解需求) |
| 2.架構設計,WBS | |
| 3.已有模塊測試 | |
| 第12、13周 | 1.團隊項目Alpha任務分配計划 |
| 2.連續7天的Alpha敏捷沖刺,7篇每日Scrum Meeting博客+代碼提交 | |
| 3.第一次正式使用測試 | |
| 第14周 | 1.第二、三次正式使用測試 |
| 2.團隊Alpha階段個人總結 | |
| 3.團隊項目Alpha博客:發布說明、測試報告、展示博客、項目管理 | |
| 第15周 | 1.團隊項目Alpha博客:事后分析 |
4.系統設計
1、系統的架構設計

| 功能模塊 | 實現需求解決說明 |
|---|---|
| 前端 | 提供輸入界面和輸入方法,獲取用戶輸入 |
| 后端 | 使用Java語言進行設計開發,使用版本為Java11。在設計過程中采用了SpringBoot框架進行開發,期間調用了Neo4j圖形數據庫進行數據存儲,后續通過Java語言設計接口,實現了對數據庫中節點數據的模糊搜索 |
| 實體識別 | 使用BILSTM-CRF模型對用戶輸入進行命名實體識別預測,識別出用戶輸入中疾病、器官、症狀、人群、治療、時間等實體,提供給后期對話機器人使用 |
| 關系抽取 | 使用CasRel模型對病症數據進行實體關系抽取預測,抽取出病症數據中疾病、器官、症狀、人群、治療、時間等實體的關聯關系,生成三元組,保存為關系文本文件,提供給后期數據導入作為預處理后的數據使用 |
| 數據導入 | 將實體識別生成的詞庫文本文件和關系抽取獲得的關系三元組文本文件,使用python編寫批處理程序,先使用詞庫在neo4j圖數據庫建立對應的節點,並將關系三元組中的內容以此使用CQL語句向neo4j數據庫輸入,建立節點之間的關系,提供給后期對話機器人使用 |
| 實體規范化 | 當涉及到使用本項目進行查詢相關信息時,為減少誤輸和錯輸對用戶產生的體驗影響,使用bm25算法+esim模型進行實體規范化訓練,收集常錯輸入與規范詞的數據,如將“你好”誤輸為“nihao”,將輸入與規范詞進行實體連接,使得即使錯輸部分詞語也能正確反饋,提供給后期對話機器人使用 |
| 意圖識別 | 使用bert+textCNN模型進行意圖識別訓練,可以用來辨別用戶的輸入意圖是什么,如用戶輸入“你好”,對話機器人可以識別出這是問好意圖,回復“你好,我是信息查詢機器人”;用戶輸入“查詢XXX信息”,機器人可以識別出這是查詢意圖,提供給后期對話機器人使用 |
| 對話機器人 | 調用前面的實體識別等多個部分,對用戶的輸入進行自然語言理解,得出用戶的對話意圖和關鍵詞,如用戶輸入“心臟病是什么”,機器人就可以識別出這是查詢意圖,並且是查詢關鍵詞是心臟病,從neo4j數據庫查詢相關信息並返回給用戶 |
| 對話緩存 | 將用戶上一句查詢意圖輸入經實體識別后得到的槽位信息保存,當下一句輸入缺乏槽位信息時進行槽位繼承,使得實現多輪對話 |
2、完成團隊項目的數據庫設計,並在提供相應ER圖
由於本項目使用的數據庫為neo4j,無需定義屬性的數據類型,此處截圖以做展示


5.Alpha任務分配計划
1、依據項目組能提供的總時間、功能模塊的優先級以及模塊之間的依賴關系,在Product Backlog中選取待實現的功能項

2、對已選擇的功能項再做進一步分解,分解為1-10小時左右的任務,構成Sprint Backlog。在PM的協助下,編碼的同學對任務進行認領

3、以甘特圖的方式擬定迭代沖刺計划
此處由於截圖展示不便,故將上圖細致分時的子任務進行一定的合成,作出下圖,使用軟件為Worktile

6.測試計划
1、產品背景與定義
針對學齡兒童需要一個准確的醫療診斷機器人,青年群體需要一個即時的醫療咨詢機器人,中老年群體需要一個便捷的醫療問答機器人的時代發展背景,我們開發一個基於知識圖譜的醫療問答機器人,要求醫療數據包含疾病的定義、症狀、治療方法,拓展疾病的忌吃食物、宜吃食物、通用葯品、推薦葯品、並發症、治療科室;要求辨識用戶,識別用戶輸入內容中的意圖、實體,緩存用戶對話信息,並支持槽位繼承和意圖繼承實現多輪對話
2、測試定義與目的
此次測試為已有模塊測試,目的在於對目前已開發好的兩個模塊,實體識別模塊、關系抽取模塊,進行測試,測試模塊一是否能對輸入內容進行實體識別,分割出文字中的實體,測試模塊二是否能抽取出文字中的實體關系,測試要求廣泛收集測試數據,確保測試的客觀准確性,提高測試可信度,並據測試結果向開發人員反饋意見
3、測試工具與環境
測試工具:Pycharm
測試環境:
python==3.7
tensorflow==1.14.0
keras==2.3.1
bert4keras==0.10.6
h5py==2.8.0
3、測試時間與人員
| 測試內容 | 測試時間 | 測試人員 |
|---|---|---|
| 實體識別模塊 | 3天,11.10-11.12 | 羅行健、蘇澤 |
| 關系抽取模塊 | 3天,11.10-11.12 | 黃浩、何子陽 |
| 模塊銜接測試 | 1天,11.12 | 陳梓浩 |
4、測試資源
每項測試,測試數據均為200條,30%為測試人員結合自身生活生成,40%為網絡收集,30%為交叉測試人員生成,例如實體識別模塊,測試數據為“我昨天晚上腸胃炎犯了,而且頭痛”,實體識別模塊識別出“腸胃炎”疾病實體和“頭痛”症狀實體,關系抽取模塊測試數據“昨天晚上的腸胃炎,導致我肚子痛”,模塊識別出“腸胃炎”是“肚子痛”的原因,模塊銜接測試則為使用實體識別,擴大關系抽取模型可利用的實體,進而識別出更多的實體關系
