中文医学知识图谱CMeKG CMeKG(Chinese Medical Knowledge Graph)是利用自然语言处理与文本挖掘技术,基于大规模医学文本数据,以人机结合的方式研发的中文医学知识图谱。
CMeKG 中主要模型工具包括 医学文本分词,医学实体识别和医学关系抽取。这里是三种工具的代码、模型和使用方法。
由于依赖和训练好的的模型较大,将模型放到了百度网盘中,链接如下,按需下载。
RE:链接:https://pan.baidu.com/s/1cIse6JO2H78heXu7DNewmg 密码:4s6k
NER: 链接:https://pan.baidu.com/s/16TPSMtHean3u9dJSXF9mTw 密码:shwh
分词:链接:https://pan.baidu.com/s/1bU3QoaGs2IxI34WBx7ibMQ 密码:yhek
- json
- random
- numpy
- torch
- transformers
- gc
- re
- time
- tqdm
依赖文件
- pytorch_model.bin : 医学文本预训练的 BERT-base model
- vocab.txt
- config.json
- model_re.pkl: 训练好的关系抽取模型文件,包含了模型参数、优化器参数等
- predicate.json
使用方法
配置参数在medical_re.py的class config里,首先在medical_re.py的class config里修改各个文件路径
- 训练
import medical_re
medical_re.load_schema()
medical_re.run_train()
model_re/train_example.json 是训练文件示例
- 使用
import medical_re
medical_re.load_schema()
model4s, model4po = medical_re.load_model()
text = '据报道称,新冠肺炎患者经常会发热、咳嗽,少部分患者会胸闷、乏力,其病因包括: 1.自身免疫系统缺陷\n2.人传人。' # content是输入的一段文字
res = medical_re.get_triples(text, model4s, model4po)
print(json.dumps(res, ensure_ascii=False, indent=True))
- 执行结果
[
{
"text": "据报道称,新冠肺炎患者经常会发热、咳嗽,少部分患者会胸闷、=乏力,其病因包括: 1.自身免疫系统缺陷\n2.人传人",
"triples": [
[
"新冠肺炎",
"临床表现",
"肺炎"
],
[
"新冠肺炎",
"临床表现",
"发热"
],
[
"新冠肺炎",
"临床表现",
"咳嗽"
],
[
"新冠肺炎",
"临床表现",
"胸闷"
],
[
"新冠肺炎",
"临床表现",
"乏力"
],
[
"新冠肺炎",
"病因",
"自身免疫系统缺陷"
],
[
"新冠肺炎",
"病因",
"人传人"
]
]
}
]
调整的参数和模型在ner_constant.py中
训练
python3 train_ner.py
使用示例
medical_ner 类提供两个接口测试函数
- predict_sentence(sentence): 测试单个句子,返回:{"实体类别":“实体”},不同实体以逗号隔开
- predict_file(input_file, output_file): 测试整个文件 文件格式每行待提取实体的句子和提取出的实体{"实体类别":“实体”},不同实体以逗号隔开
from run import medical_ner
#使用工具运行
my_pred=medical_ner()
#根据提示输入单句:“高血压病人不可食用阿莫西林等药物”
sentence=input("输入需要测试的句子:")
my_pred.predict_sentence("".join(sentence.split()))
#输入文件(测试文件,输出文件)
my_pred.predict_file("my_test.txt","outt.txt")
调整的参数和模型在cws_constant.py中
训练
python3 train_cws.py
使用示例
medical_cws 类提供两个接口测试函数
- predict_sentence(sentence): 测试单个句子,返回:{"实体类别":“实体”},不同实体以逗号隔开
- predict_file(input_file, output_file): 测试整个文件 文件格式每行待提取实体的句子和提取出的实体{"实体类别":“实体”},不同实体以逗号隔开
from run import medical_cws
#使用工具运行
my_pred=medical_cws()
#根据提示输入单句:“高血压病人不可食用阿莫西林等药物”
sentence=input("输入需要测试的句子:")
my_pred.predict_sentence("".join(sentence.split()))
#输入文件(测试文件,输出文件)
my_pred.predict_file("my_test.txt","outt.txt")