代码改变世界

医疗知识图谱问答 ——Neo4j 基本操作

  北桥苏  阅读(604)  评论(2编辑  收藏  举报

前言

        说到问答机器人,就不得不说一下 ChatGPT 啦。一个预训练的大预言模型,只要是人类范畴内的知识,似乎他回答得都井井有条,从写文章到写代码,再到解决零散琐碎的问题,不光震撼到我们普通人,就百度和阿里也因此紧追其后分别推出了文心一言和通义千问。

        所以好像我们也可以通过 GPT,并训练特定的数据来完成本业务下的问答。但是,那时出现了 OpenAI 在封号的事件,国内公司又担心以后形成垄断后收取高昂费用。于是,我打算自己弄一个 GPT,(打断…… 很显然不现实),但是呢!既然是特定场景,那也不需要这么强大的机器人,只要能完成基本流程的智能回复就可以了。 前期我就想着用知识图谱的方式来完成,正好在网上也找了一个医疗知识问答的项目,所以跟着做一遍总结一下。

 

项目

        一个基于 python+neo4j 的问答,通过在图数据库里创建节点和关联边,接收问题的词语,进过拆解特定解析完成查询语句的拼装,最后输出答案。说到这里,是不是感觉这个其实就是一个程序化的思维导图,但是改造的地方也有很多,比如可以通过深度学习进行语义分析,添加语音对话,特定语气地回答输出等等。

 

neo4j 操作

1. 创建节点

1
create (n:Attr {name: "磕碰掉漆"}

2. 删除节点

1
MATCH (n:iphone6s) DELETE n

3. 创建关联边

1
2
3
4
5
6
MATCH (e:Goods_Class),(cc:Goods)
CREATE (e)-[r:HAS_GOODS ]->(cc)
 
match(class_name:Goods_Class),(goods_name:Goods)
where class_name.name='%s'and goods_name.name='%s'
create (class_name)-[rel:关联边名称{name: 指定名称}]->(goods_name)

 4. 删除关联边

1
2
MATCH (c:Goods_Class)-[r:HAS_GOODS]-(g:Goods)
DELETE r

5. 删除删除指定属性的节点

1
Match (n:Goods{name: '黑鲨手机'}) DELETE n

6. 条件查询

通过某个节点名查询与之关联的另一些节点信息,如下面是根据一个疾病名称,获取该疾病与之有关联 (has_symptoms) 的症状名称列表

1
MATCH (m:Diseases)-[r:has_symptoms]->(n:Symptoms) where m.name = '喘息样支气管炎' return m.name, r.name, n.name

 

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示