醫藥領域知識圖譜快速及醫藥問答項目--項目探究

開篇

文章根據@liuhuanyong_iscas大佬的項目進行調試與解析,作爲KGQA和NLP入門的一個學習實戰的項目。有不對的地方請不吝指教,若有侵犯相關權益,也請給我留言,我會撤下該文章。
項目原地址:https://github.com/liuhuanyong/QASystemOnMedicalKG
CSDN鏈接:https://blog.csdn.net/lhy2014/article/details/82953792

環境的搭建比較簡單,這裏就不做展開了,主要對項目各部分的功能進行探究,弄清整個系統的流程。

一、 構建知識圖譜

在這裏插入代碼片這部分主要是通過python將獲取到的語料構建成知識圖譜,使用py2neo將每個node創建好,並創建相應的relationship,使節點之間相互關聯。
對應的是項目中 build_medicalgraph.py 這個腳本,類名爲MedicalGraph

下面對各個方法進行講解:

  • init (初始化)
    鏈接neo4j數據庫,與語料路徑的獲取

  • read_nodes (讀取文件)
    將json文件中的7類節點以及節點與實體之間的關係存入到list中。

  • create_node(在neo4j中創建節點)
    這裏做了些改動,將create_diseases_nodes的方法合併到了一起

  • create_graphnodes(創建節點)
    調用create_node方法,創建Drugs,Foods,Checks,Departments,Symptoms,Disease這些節點

  • create_graphrels(在neo4j中將節點之間建立關係)

  • create_relationship
    調用create_graphrels 將創建的節點建立關係,傳遞關係的名稱

  • export_data(導出數據檢驗)

二、 問題分類器

這個腳本的功能主要是進行問題類型的分類,對應的腳本爲question_classifiler.py

  • init(初始化)
  1. 讀取並加載特徵詞
  2. 將所有的特徵詞構建領域的actree
    調用build_actree:將所有的特徵詞彙構建成actree爲後續的問句特徵詞的提取提供使用
  3. 使用特徵詞構建詞典得到詞的類型
    調用bulild_wdtype_dict:所有的特徵詞進行類型標記包含的類型有(disease、department、check、drug、food、symptom、producer)
    問題類型匹配通過這裏的特徵詞典得到問題的類型屬於哪一類
  4. 疑問句問詞詞典的構建

  • classify(問句分類)
    -1. 調用 check_medical
    -2. 使用之前生成的actree來獲取輸入問句中的特徵詞
    -3. 得到特徵詞之後在類型詞典中獲取到相應的類別返回
    -4. 數據格式如下
    在這裏插入圖片描述
    再根據初始化中的疑問句特徵詞詞典來獲取問題的類型將問題的類型以及特徵詞返回,數據格式如下
    在這裏插入圖片描述
    通過疑問詞詞典來
    重點內容: Aho-Corasick automaton (AC自動機算法)
    具體的算法介紹參考鏈接(雖然是java實現,原理相通)
    http://www.hankcs.com/program/algorithm/implementation-and-analysis-of-aho-corasick-algorithm-in-java.html

三、 獲取對應query

question_parser.py通過分類腳本得到的結果,得到neo4j的query語句.

  • parser_main
    args
     特徵詞以及類別
    questions_types
    問題的類別

  • build_entitydict
    通過參數中類別獲取節點實體
    傳入的參數
    在這裏插入圖片描述
    返回的參數
    在這裏插入圖片描述

  • sql_transfer
    根據question_type對不同的問題分開處理,生成query
    將問題類別與特徵詞傳遞進來生成相應的query語句

最終返回sqls,生成對應的查詢語句 在這裏插入圖片描述


三、 執行cypher查詢通過模板匹配獲取回答

answer_search.py 在neo4j中獲取內容,匹配模板得到回覆

  • init
    連接neo4j

  • search_main
    執行query獲取到相應的結果
    在這裏插入圖片描述
    最後將獲取的所有的回答返回,在最終結果展示出來

  • answer_prettify
    根據question_type匹配回答的模板,將得到的結果放到模板中生成答案
    在這裏插入圖片描述

結果展示
在這裏插入圖片描述


關於這個項目的流程解析就寫到這裏。不是很複雜的項目,作爲知識圖譜的練手項目還是挺好的。
再次感謝原創作者的分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章