医疗问答 P12 问诊问题的意图识别和实体抽取
前面课程中,我们已经把初始意图的过滤做完了,如果前面没挡住,下面就要把它当做问诊信息进行解析了,也就是先做意图识别,再用实体识别的模型,提取关键信息。
代码示例
1、修改query入口
如果问诊逻辑处理完,依然没有合适的答案,就给用户一个兜底回复。
def parse_diagnose_answer(self, text): pass # 统一查询方法 def query(self, text): # 问诊意图回复 answer = self.parse_diagnose_answer(text) return answer if answer else random.choice(APOLOGY_ANSWER)
2、问诊意图识别
调用前面训练好的意图识别模型包,进行问诊意图识别。
from models.model_ir.predict import predict as ir_predict def parse_diagnose_answer(self, text): # 问诊意图识别 score, label_id, label = ir_predict(text) print(score, label_id, label) if __name__ == '__main__': question_qa = GraphQA() answer = question_qa.query('感冒是一种什么病?') print(answer) answer = question_qa.query('支气管炎有传染性吗?') print(answer)
3、意图阈值判断
模型返回的结果带有置信度的,也就是模型对他给出的结果有多大把握是对的,如果太低,表示模型自己都不太自信,这个结论就是不能用的,就不要往下走了。
# config.py THRESHOLD = {'accept':0.8, 'deny': 0.4} if score < THRESHOLD['deny']: return random.choice(APOLOGY_ANSWER)
4、实体识别
from models.model_ner.predict import predict as ner_predict slots = ner_predict(text)
这节课的内容看上去很简单,因为我们前期做了大量的准备工作,把模型都训练并且封装好了,到这个地方才做集成。
本文链接:http://ichenhua.cn/edu/note/640
版权声明:本文为「陈华编程」原创课程讲义,请给与知识创作者起码的尊重,未经许可不得传播或转售!