找回密码
 注册
1月份电巢直播计划
查看: 52|回复: 0

知识图谱系列:Task 2 基于医疗知识图谱的问答系统操作介绍

[复制链接]
  • TA的每日心情
    奋斗
    2019-11-19 15:09
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2021-1-13 15:51 | 显示全部楼层 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    本帖最后由 fish1352 于 2021-1-13 15:52 编辑
    2 @6 p6 {5 a% J! _) s1 M" |# Q. z; ~% X
    6 V* A# R- M' S# m" J
    1.任务描述" k( K0 I2 g; F5 S) Y

    4 E) q+ A+ n  ^6 c0 J' h 今天的任务分两步,首先要搭建一个知识图谱(详见task03),然后启动问答测试(task04 task05详细讲),构建一个简单的基于 知识图谱 的对话系统。 3 x; X: S( i+ ^, E- |1 z
    ' K5 W3 L" v, q1 A- U5 H
    今天主要是能跑通这两步,能让自己对整个任务有一个整体的认识。
    8 X. y: I! l3 ~5 ?1 o1 l% n5 E# _/ M
    任务的源码在这里:https://github.com/zhihao-chen/QASystemOnMedicalGraph
    7 I+ V  v' \6 A; H" S
    1 g6 B& h) y2 {6 u( _4 r$ D 源码组成部分包括: - `4 V2 j- E* j+ C

    1 u- z6 b5 u! v! F0 r, A0 k, m% ? data:存放数据
    9 K" p/ D3 ^% i! z# h
    ( A4 x$ [: }, G$ D8 z; u3 _; }1 O img:存放readme里的图片 * w" R6 p, x2 i$ A2 n* D2 m* |2 c, }

    ! |4 N% U+ S/ J; J model:存放训练好的tfidf模型和意图识别模型
    8 Z+ |4 A# V3 u! m! _
    # \1 {8 b  V+ l$ ~ build_graph.py:构建图,详见task03 : a  S) a# S/ S9 S# V  o& L" h9 u

    * H6 A9 }1 K$ V( i5 u, J3 | entity_extractor.py:抽取问句中的实体和识别意图,详见task04 # W1 H- v2 S+ S. F2 g- z0 x# A

    4 b6 k- e: \8 @5 J# T search_answer.py:根据不同的实体和意图构造cypher查询语句,查询图数据库并返回答案,详见task05 6 Y% k/ K  T! }) o/ o2 d! p
    8 |5 E! L- S3 q( e4 w* [! e
    2.搭建知识图谱环境
    # a3 d# `' C7 G7 G2 {
    8 F* ?6 F# x- Y/ y6 o& R8 y4 W& [ 2.1.数据集7 u3 L" m: {* e3 e% a
    1 N- ^; v7 ^1 }
    数据源:39健康网。包括15项信息,其中7类实体,约3.7万实体,21万实体关系。数据结构如图所示:
    3 F4 |: d% |! o$ u; q. h4 n1 p0 V4 c7 L3 F/ E+ J& r: i
    % F# k5 g0 o3 i% r
    8 y4 q8 `* Y, z+ e! P7 X* Q5 ?
    ? 知识图谱实体类型

    + w. |* l0 P" a) d
    4 F' r9 K. d$ G. X8 ?* N- m$ n
    ) N0 Y% f  @$ y, u6 ^
    / w3 _" R& r0 W/ ?6 B8 f2 {; p- B4 t" F8 U
    2.2.搭建过程+ S/ T0 g2 V6 s5 ^* N/ n
    9 A& C" F  w$ @. w
    因为这次任务目标是先跑通,所以仅简略写下步骤。 5 |8 o' ?9 E# S3 ~% {/ a1 [6 H* o

    % o& W1 a# Q5 j" Q% Z$ B 要将数据导入Neo4j 图数据库,首先进入 build_graph.py 类中,在类MedicalGraph 中加入 本地Neo4j图数据库的账号和密码;
    8 Q2 c4 m( M5 _$ S
    0 r/ t3 ]! ?1 |" d  _% s6 \' T% Y class MedicalGraph:
      q  l$ D7 R' G7 p
    6 G$ H3 d% S! p' B9 D' V2 ~6 T def __init__(self): 3 h/ o3 @; j* C) G0 h5 V) j

    ; k* I% F5 f) p* [* A5 j ...
    ! G: o0 `+ R+ J" _) ^
    ) }- j' b) `1 r8 p self.graph = Graph("http://localhost:7474", username="neo4j", password="自己的") # ], e, t+ K1 K
    3 j, f+ f* f6 ^6 m; P( r
    ... " X8 ?5 {. \* Z  s" d) ]6 L* Z

    , `* ]' @4 K; i/ R8 d4 @, W 运行:
    : V5 N- m" z- N& p3 G# L; J5 h6 v
    python build_graph.py
    : P1 X  ^: p5 {
    5 p3 \  O! r, r 就开始进行数据导入了。由于数据量大,需要的时间很长,要1-2个小时。
    : @1 f9 p% I* W+ t) x, c/ c; j  s2 o( o7 z
    终于好了,看下结果,我们有了3w多节点,20多万个关系。 / U9 s# z* G+ P, I
    1 h4 G% |% T4 a& A. V( i0 M! m
    2 S) r/ g8 N: B" B

    % p! R& {/ p% b# s4 k4 h( @3 _

    " w, s+ `! b# g! E3 r7 ~  K
    . r# Z& O4 }$ q' |- x& h 3.启动问答测试
    + v" d8 G$ k  X; t7 u$ A0 J* Z, U; d" v1 v* ^( E! J" a  C
    运行命令: . A2 x; r; `: r4 n

    4 y% d+ d0 W  U. G9 P3 r python kbqa_test.py % i2 _7 w0 U) [, q; r2 D0 H3 |
    ! ~- M- ]. L4 a; U* J" `* Y( v5 N; n6 H
    注意:其中一个库名称为ahocorasick,这个直接pip安装找不到,安装时要改为pyahocorasick. 但是程序里面用的时候,还是要改回ahocorasick.
    ) D  R) M6 b4 T/ `8 v% C- P- O# |! A' l# G  l( _- N9 v. J3 @9 W

    . G/ w4 _# Y" W; }$ \: x8 U5 N3 p, ?' E( R  L
    还有遇到其他的包就碰到哪个装哪个啦。。。
    $ z+ i" U5 {. T8 @! |- [
      \' B* z5 W5 A! a, P3 V+ ~ 最终的效果是这样
    - L+ D7 Z$ u' z4 i! l2 c1 O- Z1 l, K5 s$ ^, s* t9 e9 O; `6 }. V* o
    『本文转载自网络,版权归原作者所有,如有侵权请联系删除』
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号 )

    GMT+8, 2021-1-16 22:06 , Processed in 0.093750 second(s), 21 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19925233282

    快速回复 返回顶部 返回列表