醫療知識圖譜智能問答系統學習總結(一)-Neo4j/Python

學習知識圖譜,一個比較好的案例是中科院軟件所劉煥勇老師在github上的開源項目,地址:https://github.com/liuhuanyong/QASystemOnMedicalKG,構建了一個肝病智能問答專業知識圖譜。

下面詳細介紹下個人學習心得:

1.拿到代碼後,首先進入build_medicalgraph.py,修改Neo4j圖庫連接信息,然後運行該代碼,即可創建肝病圖庫。

class MedicalGraph:
    def __init__(self):
        cur_dir = '\\'.join(os.path.abspath(__file__).split('\\')[:-1])   # 獲取當前絕對路徑的上層目錄 linux中應用'/'split和join
        self.data_path = os.path.join(cur_dir, 'data\hepatopathy.json')   # 獲取json文件路徑
        self.g = Graph(
            host="127.0.0.1",  # neo4j運行地址,如果是本地安裝則保持改地址
            http_port=7474,  # neo4j服務監聽的端口號,7474
            user="neo4j",  # Neo4j圖庫user name
            password="password")Neo4j圖庫password

 以下是我的圖庫Details。

執行完成後,圖庫效果如下:

2.接下來就可以運行chat_graph.py,就可以開始與肝病問答小助手聊天了。

3.目前該問答項目的流程如下,問題分類主要解決諸如已知疾病查症狀,已知疾病查治療方法等等,問題解析根據分類構造查詢語句,答案檢索執行查詢組織回覆語句,然後返回答案。

  

 下面是一個查詢示例:

 4.該項目也存在一定的不足之處,需要進行完善。

  • 當檢索結果爲空時會報錯,該問題我已經修復,在answer_search.py增加結果判斷,如檢索結果爲空則返回未檢索到結果;代碼我上傳至github:https://github.com/runseason/medicalQA.git
            elif question_type == 'check_disease':
                desc = [i['m.name'] for i in answers]
                subject = answers[0]['n.name']
                if desc[0]:
                    final_answer = '通常可以通過{0}檢查出來的疾病有{1}'.format(subject, ';'.join(list(set(desc))[:self.num_limit]))
                else:
                    final_answer = '通常可以通過{0}檢查出來的疾病有 : 未檢索到結果'.format(subject)

     

  • 當檢索內容與肝病無關時只能返回初始化答案,需要增加相似性判斷,然後找到相似度最高的內容,檢索答案返回給用戶;該問題還在修復中,敬請期待。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章