前面课程中,我们已经把初始意图的过滤做完了,如果前面没挡住,下面就要把它当做问诊信息进行解析了,也就是先做意图识别,再用实体识别的模型,提取关键信息。

代码示例

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

版权声明:本文为「陈华编程」原创课程讲义,请给与知识创作者起码的尊重,未经许可不得传播或转售!