领域常识图谱的医师引荐系统:运用BERT+CRF+BiLSTM的医疗实体辨认,建立医学常识图谱,建立常识问答系统

本项目首要完结了疾病自诊和医师引荐两个功用并构建了医师服务目标点评系统。疾病自诊首要经过运用BERT+CRF+BiLSTM的医疗实体辨认, 建立医学常识图谱, 然后完结根据患者问诊文本的疾病初诊。这个功用帮助患者初步了解本身的疾病况况并为下一步与医师的沟通供给支撑。 第二个功用是医师引荐。本渠道选用根据Jacard距离的Minhash和minhashLSHForest算法来进行引荐, 匹配患者的咨询文本和医师的前史问诊信息,然后为患者引荐最适合的医师。最终咱们运用django框架进行项目发布。

1.项目框架

2.数据收集

本项目除了运用公开的医疗数据集外,还收集了我国领先医疗渠道的数据集。

spiders模块供给了数据收集的信息。

39crawler用于获取39健康网的数据,hdf用于获取好大夫网的数据(scrapy)。

运转程序在dist文件夹中,双击spider_run.exe即可运转爬虫程序。

爬取指定的疾病信息,在disease.txt参加科室称号(拼音)或者疾病称号(拼音),每一个科室或者科室占有独自一行。

不管你在disease.txt文件中添加多少行,爬虫只会爬取第一行对应的科室或疾病,成果将在程序运转完结后,输出为doctor.csv,disease.csv。

如需爬取第二个疾病,请将第一行科室或者疾病删去,重新运转程序。

3.疾病自诊

在疾病自诊模块,渠道会读取用户疾病描绘的语义信息,首要进行文本预处理,然后经过实体辨认模型抽取出其间的关键成分,即:疾病症状、并发症、身体部位等医学实体。然后,这些医学实领会输入到渠道后端的常识图谱(根据大规模数据集构建)中。最终,经过常识图谱的快速查询和核算,渠道将回来根据患者疾病描绘的疾病揣度以及相应的概率值。一起,疾病相关的介绍、需求去就诊的科室和疾病多发人群的相关信息也会推送给用户。

3.1. 医学实体辨认

医疗实体辨认是指从给定句子中辨认出医疗实体。在本项目中,需求从患者咨询的病况描绘中辨认出疾病、症状、科室等多种类型的医疗实体,找到与疾病特征相关的关键词。

entity_extract模块供给了有关医学实体辨认的有关信息。

由于模型过大因而并未放置在项目文件途径下,见项目材料

输入:汪主任您好,1月中旬惯例体检发现TCT高度病变,HPV未查,2020年hpv和tct正常。已经在南京鼓楼医院做了活检,陈述如下,确诊写的肿瘤,请问现在这个是不是癌呢?是不是很严峻?由于娃太小很害怕,后续该怎么手术呢?非常迫切希望得到您的答复,不胜感激!
输出:{'test': [('hpv', 35), ('tct', 39), ('活检', 56)], 'symptom': [('肿瘤', 68)], 'feature': [('严峻', 87)]}
运用示例:
# predict.py
args.bert_dir = '../data/bert-base-chinese'  # 加载预训练的语义模型
model_name = 'bert_bilstm_crf'  # 运用的model类型:bert_bilstm, bert_bilstm_crf, bert_crf, bert
id2query = pickle.load(open('../data/id2query.pkl', 'rb'))  # 加载词典
ent2id_dict = pickle.load(open('../data/ent2id_dict.pkl', 'rb'))  # 加载词典
args.num_tags = len(ent2id_dict)
bertForNer = BertForNer(args, id2query)
model_path = './checkpoints/{}/model.pt'.format(model_name)  # 模型存储途径
model = bert_ner_model.BertNerModel(args)  # 根据参数实例化模型
model, device = trainUtils.load_model_and_parallel(model, args.gpu_ids, model_path)  # 模型加载
model.eval()
raw_text = "汪主任您好,1月中旬惯例体检发现TCT高度病变,HPV未查,2020年hpv和tct正常。已经在南京鼓楼医院做了活检,陈述如下,确诊写的肿瘤,请问现在这个是不是癌呢?是不是很严峻?由于娃太小很害怕,后续该怎么手术呢?非常迫切希望得到您的答复,不胜感激!".strip().replace(
    '(', '(').replace(')', ')').replace('+', '&')  # 患者输入的自述文本
print(raw_text)
bertForNer.predict(raw_text, model, device)  # 辨认的医学实体

3.2. 支撑辨认的实体类型

body:患病部位,如:胃,皮肤
drug :药品,如:产妇康清洗液
feature:患病程度,如:严峻
disease:疾病,如:前列腺炎
symptom:疾病症状,如:胃壁增厚
department:科室,如:五官科
test:疾病相关的查看,如:血惯例

3.3. 模型选择

咱们在训练集上检验了BERT、BERT+CRF、BERT+BiLSTM和BERT+BiLSTM+CRF各模型的准确率、召回率和micro_f1值后,咱们发现BERT+BiLSTM+CRF模型具有更好的医疗实体辨认才能,因而,在本项目中,咱们选用**BERT+BiLSTM +CRF**模型完结后续医疗实体辨认的任务。

领域知识图谱的医生推荐系统:利用BERT+CRF+BiLSTM的医疗实体识别,建立医学知识图谱,建立知识问答系统

3.4. 常识图谱构建

为了进行准确的疾病确诊,咱们依托于大规模数据集构建常识图谱。

build_kg模块供给了有关常识图谱构建的信息。

咱们将应用于疾病自诊这一模块的所需实体标记为确诊查看项目、科室、疾病、药品、患病的部位、疾病症状、患病程度,在用户输入一段文本后,咱们首要经过实体辨认将以上这些关键实体辨认出来。

经过事先调查,咱们发现在进行疾病确诊的过程中,不仅仅是以身体的症状为根据,也有许多其他的所属联系可供咱们参阅。因而在进行联系抽取中,咱们将各个实体间的联系分为8类,分别为归于、疾病常用药品、疾病对应科室、疾病别名、疾病所需查看、疾病部位、疾病症状、疾病并发疾病。咱们经过以上8类联系判断在常识图谱中实体间两两之间的联系,然后核算出患该种疾病的概率。界说常识图谱实体间联系的描绘性统计特征如下表所示。

领域知识图谱的医生推荐系统:利用BERT+CRF+BiLSTM的医疗实体识别,建立医学知识图谱,建立知识问答系统

4. 医师引荐智能系统

在医师引荐模块,渠道希望寻找到前史数据中与用户最类似的患者,并找到与之对应到相应的医师,来完结个性化的引荐。具体而言,渠道首要经过用户的描绘文本获得其间的医学实体,即:一段文本到多个token的映射。然后,将每一个实体都选用词向量的形式进行表示。紧接着,Minihash和MinihashLSHForest算法连接了两端,即:用户的描绘文本和数据库中医师的前史问诊记载。渠道运用jacard距离来核算二者的类似性,类似度高的被认为有较高的匹配度。最终,渠道经过匹配度较高的问诊记载来引荐医师。

recommend模块供给了有关常识图谱构建的信息。

领域知识图谱的医生推荐系统:利用BERT+CRF+BiLSTM的医疗实体识别,建立医学知识图谱,建立知识问答系统

输入:一周前稍感胸闷,入院查看,心脏彩超,腹部彩超正常,心脏冠状动脉CT,显示狭隘
输出:[{'Unnamed: 0': 0, 'patient_score': 11, 'patient_online': 2116, 'educate': '教授', 'articleCount': '22篇', 'spaceRepliedCount': '2116位', 'totaldiagnosis': '367位', 'openSpaceTime': '2008-10-22 18:15', 'hot_num': 3.6, 'hospitalName': '上海交通大学医学院隶属上海儿童医学中心', 'keshi': '心内科', 'good_at': '先天性心脏病的确诊和介入医治,小儿肺动脉高压的诊治,儿童心肌病的确诊和医治', 'introduction': '傅立军,男,主任医师,教授,医学博士,博士生导师,心内科主任,国家卫计委先天性心脏病介入培训基地导师。从事小儿心血管疾病的医治二十年,尤其拿手于先天性心脏病的确诊和介入医治以及肺动脉高压、心肌病的诊治,累计完结先天性心脏病介入医治3000余例。 中华医学会儿科学分会心血管病学组委员,遗传代谢性心肌病协作组组长 中华医学会心血管病学分会肺血管病学组委员 我国医师协会儿科医师分会心血管疾病专业委员会委员兼秘书长 上海市儿科学会心血管病学组副组长 在国内外宣布论文三十余篇。 参编专著多部。', 'doctor_title': '主任医师', 'doctor_id': 221603, 'doctorName': '傅立军', 'disease': 'gaoxueya'}, {'Unnamed: 0': 0, 'patient_score': 71, 'patient_online': 8515, 'educate': '教授', 'articleCount': '8篇', 'spaceRepliedCount': '8515位', 'totaldiagnosis': '1357位', 'openSpaceTime': '2009-05-07 16:16', 'hot_num': 4.0, 'hospitalName': '首都医科大学隶属北京安贞医院鹤壁市人民医院', 'keshi': '心脏内科中心心血管内科', 'good_at': '冠心病,介入医治;心肌病,心力衰竭,难治性高血压的确诊医治。', 'introduction': '赵全明,博士,首都医科大学教授,博士研讨生导师,北京安贞医院心脏内科中心主任医师。1989年西安医科大学内科硕士结业,1997年末法国路易斯巴斯德大学医学院博士结业,2000年提升主任医师。拿手各种心血管疾病的确诊和医治,重点从事冠心病的临床和研讨,个人完结冠状动脉造影10000例,冠心病介入医治(PCI)超过5000例。展开了冠心病确诊(冠脉造影,血管内超声-IVUS,光学相干断层显像-OCT,冠脉血流储藏分数-FFR)和杂乱冠心病介入医治的各种新技能(冠状动脉支架术,钙化病变的旋磨术,支架内再狭隘的药物球囊医治,生物可降解支架临床研讨),并获得丰厚经验。', 'doctor_title': '主任医师', 'doctor_id': 4269, 'doctorName': '赵全明', 'disease': 'gaoxueya'}, {'Unnamed: 0': 0, 'patient_score': 13, 'patient_online': 14327, 'educate': '教授', 'articleCount': '95篇', 'spaceRepliedCount': '14327位', 'totaldiagnosis': '3385位', 'openSpaceTime': '2011-07-06 14:35', 'hot_num': 3.6, 'hospitalName': '首都医科大学隶属北京安贞医院', 'keshi': '心脏内科中心', 'good_at': '房颤和杂乱心律失常的导管消融医治,尤其拿手各种类型心房颤动(房颤)、心房扑动(房扑)、房性心动过速(房速)的导管消融,包括心脏外科术后如二尖瓣置换术后、房距离封堵术后以及射频消融术后复发的房颤、房扑;室性心动过速(室速)和室上性心动过速(室上速);瓣膜病的球囊扩张术,特别是风湿性心脏病二尖瓣狭隘的医治。', 'introduction': '马长生,主任医师,教授,博士生导师。于1998年完结国内首例房颤导管消融术,并系统建立了我国心律失常消融的技能和方法。 北京市心血管疾病防治工作室主任 中华医学会心血管病学分会副主任委员 我国医师协会心血管内科医师分会会长 中华医学会心电生理和起搏分会副主任委员 我国生物医学工程学会常务理事兼心律分会主任委员 我国生物医学工程学会介入医学工程分会主任委员 为卫生部有突出贡献中青年专家、科技北京百名领军人才、北京市卫生系统领军人才及JournalofCardiovascularElectrophysiology、Europace、JournalofInterventionalCardiacElectrophysiology和ChineseMedicalJournal等30余种学术期刊编委。 3次获国家科学技能进步二等奖 创始单导管法、“2C3L”术式、倒U形导管塑形消融右侧旁路等一系列原创性方法。 牵头研制成功自主常识产权的磁定位三维电解剖标测系统和首套房颤导管消融模拟器。 主编的《介入心脏病学》《心律失常射频消融图谱》为本专业最具影响的教科书之一。 以第一作者或通信作者宣布SCI录入论文80余篇, 承当“十二五”国家科技支撑方案、“十二五”国家科技重大专项子课题、“十一五”863方案、“十五”国家科技攻关项目等省部级以上课题数十项。 已授权或公告专利7项,其间PCT专利2项。', 'doctor_title': '主任医师', 'doctor_id': 4255, 'doctorName': '马长生', 'disease': 'gaoxueya'}, {'Unnamed: 0': 0, 'patient_score': 0, 'patient_online': 3151, 'educate': '教授', 'articleCount': '4篇', 'spaceRepliedCount': '3151位', 'totaldiagnosis': '115位', 'openSpaceTime': '2008-12-20 03:09', 'hot_num': 3.5, 'hospitalName': '我国医学科学院阜外医院我国医学科学院阜外医院深圳医院', 'keshi': '心血管内科心血管内科', 'good_at': '冠心病的确诊与介入医治,急性心肌梗死介入医治', 'introduction': '主任医师,教授,博士研讨生导师 我国医学科学院阜外医院深圳医院内科管委会主任 内科教研室主任、冠心病中心主任、介入中心主任 美国心脏病学会会员(FACC)、美国心脏协会会员(FAHA);欧洲心脏病学会会员(FESC)。  著名的心血管病学专家,国家级领军人才 中央保健委会诊专家 深圳市医学重点学科(心血管内科)负责人 深圳市重大疾病(冠心病)防治中心负责人 深圳市医防融合心血管病项目专家组组长 深圳市医疗卫生三名工程急性冠脉综合征团队负责人  受教育经历: 1982年武汉大学医学部获学士学位(改革开放后第一批本科生);1988年华中科大同济医学院(全日制)硕士学位;1994年日本国立滨松医大(全日制)博士学位。  专业专长: 全球心血管介入手术例数最多和经验最丰厚的的专家之一;各种心血管急重症的确诊与医治;杂乱冠心病介入医治和长时间办理;研讨方向:急性心梗临床与转化医学研讨。  工作言语: 普通话、英语和日语 我国医师协会胸痛专业委员会副主任委员 《我国介入心脏病学杂志》副主编 《中华心血管病杂志》等编委 《中华医学杂志》等审稿专家 先后建立了中日友好医院、北京安贞医院和北京阜外医院急性心梗救治通道;先后承当国家和省部级研讨项目30项,共获得6000万元基金支撑。 宣布或参与宣布文章550篇(https://scholar.google.com/scholar?hl=en&as_sdt=0%2C5&q=HONGBING+YANBeijing+&btnG=)。 出书著(译)作60部(https://book.jd.com/writer/颜红兵_1.html?stop=1&book=y&vt=2)。', 'doctor_title': '主任医师', 'doctor_id': 4274, 'doctorName': '颜红兵', 'disease': 'gaoxueya'}, {'Unnamed: 0': 0, 'patient_score': 4, 'patient_online': 4829, 'educate': '教授', 'articleCount': '33篇', 'spaceRepliedCount': '4829位', 'totaldiagnosis': '1228位', 'openSpaceTime': '2009-08-31 10:21', 'hot_num': 3.6, 'hospitalName': '首都医科大学隶属北京安贞医院', 'keshi': '心脏内科中心', 'good_at': '冠心病介入医治(支架术) 心绞痛/心肌梗死诊治 起搏器/除颤器植入 经导管主动脉瓣置入术 肺动脉高压诊治', 'introduction': '聂绍平,男,教授、主任医师、医学博士、博士研讨生导师、欧洲心脏病学会专家会员(FESC),美国心血管造影和介入学会国际会员(FSCAI)。现任首都医科大学隶属北京安贞医院急诊危重症中心主任。首要从事冠心病介入医治、心肺血管急危重症临床与研讨工作。个人累计完结经皮冠状动脉介入医治(支架术)达15000余例,拿手杂乱冠心病介入医治(如钙化病变旋磨术、阻塞病变介入医治等)。 主持863项目一项,国家自然科学基金面上项目3项,以及多项省部级重点项目。', 'doctor_title': '主任医师', 'doctor_id': 4264, 'doctorName': '聂绍平', 'disease': 'gaoxueya'}]
运转示例:
# try_minhash.py
df_csv = pd.read_csv('./gaoxueya-1.csv')
# 建立参数
# Number of Permutations
permutations = 128
forest = get_forest(df_csv, permutations)
# Number of Recommendations to return
# 召回top—n数目
num_recommendations = 100
# 精确需求的医师id数
num_doctors = 5
# 输入测验文本
raw_text = ' 一周前稍感胸闷,入院查看,心脏彩超,腹部彩超正常,心脏冠状动脉CT,显示狭隘 '
raw_text = raw_text.strip().replace('(', '(').replace(')', ')').replace('+', '&')
# 模型加载
args.bert_dir = '../data/bert-base-chinese'
model_name = 'bert_bilstm_crf'  # 运用的model类型:bert_bilstm, bert_bilstm_crf, bert_crf, bert
id2query = pickle.load(open('../data/id2query.pkl', 'rb'))
ent2id_dict = pickle.load(open('../data/ent2id_dict.pkl', 'rb'))
args.num_tags = len(ent2id_dict)
bertForNer = BertForNer(args, id2query)
model_path = '../entity_extract/checkpoints/{}/model.pt'.format(model_name)
model = bert_ner_model.BertNerModel(args)
model, device = trainUtils.load_model_and_parallel(model, args.gpu_ids, model_path)
model.eval()
# 辨认测验文本中的医疗实体
text_shiti = path_pre(raw_text, bertForNer, model, device)
# 引荐医师
df = pd.read_csv('./haodaifu/doctors_gaoxueya.csv')
recommend(df_csv, text_shiti,df)

5.医师服务目标点评系统

医师点评目标在考虑经济目标的一起,更应该突出社会效益导向,要体现以患者 为中心,寻求赢利的合理化,引导医师努力提高医疗服务质量。本研讨在大规模客观数据集的基础上,构建了根据医师发文量、患者投票数、医师引荐热度、问诊后患者报道数量、在线服务患者数量和总患者数量六大维度的服务目标评级系统。

6.项目可视化展示

本项目的运转依托django框架。

web_server模块供给了有关渠道运转的信息。

6.1. 渠道首页

领域知识图谱的医生推荐系统:利用BERT+CRF+BiLSTM的医疗实体识别,建立医学知识图谱,建立知识问答系统

6.2. 疾病自诊

领域知识图谱的医生推荐系统:利用BERT+CRF+BiLSTM的医疗实体识别,建立医学知识图谱,建立知识问答系统

6.3. 医师引荐

领域知识图谱的医生推荐系统:利用BERT+CRF+BiLSTM的医疗实体识别,建立医学知识图谱,建立知识问答系统

6.4. 医师服务目标点评系统

领域知识图谱的医生推荐系统:利用BERT+CRF+BiLSTM的医疗实体识别,建立医学知识图谱,建立知识问答系统

领域知识图谱的医生推荐系统:利用BERT+CRF+BiLSTM的医疗实体识别,建立医学知识图谱,建立知识问答系统

码源链接跳转见文末

码源链接跳转

更多优质内容请关注公号&知乎:汀丶人工智能;会供给一些相关的资源和优质文章,免费获取阅览。

领域知识图谱的医生推荐系统:利用BERT+CRF+BiLSTM的医疗实体识别,建立医学知识图谱,建立知识问答系统