知识图谱task4

本文介绍了问答系统的实现方式,包括基于流水线和端到端的实现,并重点讨论了Query理解,特别是意图识别和槽值填充。在医疗领域的实践部分,阐述了命名实体识别的步骤,以及如何利用AC Tree和相似度计算进行实体匹配。此外,还详述了意图识别的过程,包括构建TF-IDF特征和人工特征,以及使用朴素贝叶斯模型进行意图分类。
摘要由CSDN通过智能技术生成

1.问答系统介绍

  • 问答系统的实现方式:
  1. 基于流水线(pipeline)实现:基于流水线实现的问答系统有四大核心模块,分别由自然语言理解(NLU)、对话状态跟踪器(DST)、对话策略(DPL)和自然语言生成(NLG)依次串联构成的一条流水线,各模块可独立设计,模块间协作完成任务。在这里插入图片描述
  2. 基于端到端(end-to-end)实现:基于端到端实现的问答系统,主要是结合深度学习技术,通过海量数据训练,挖掘出从用户自然语言输入到系统自然语言输出的整体映射关系,而忽略中间过程的一种方法。但就目前工业界整体应用而言,工业界的问答系统目前大多采用的还是基于流水线实现的方式。
  • 问答系统的答案来源:

    1.「知识库问答」。是目前的研究热点。知识库问答(knowledge base question answering, KB-QA)即给定自然语言问题,通过对问题进行语义理解和解析,进而利用知识库进行查询、推理得出答案。在这里插入图片描述
    2.「常问问题问答」
    3.「新闻问答」
    4.「网际网路问答」

2.Query理解介绍

Query理解 (QU,Query Understanding),简单来说就是从词法、句法、语义三个层面对 Query 进行结构化解析。

搜索 Query 理解包含的模块主要有:
Query预处理,Query纠错,Query扩展,Query归一,意图识别,槽值填充,Term重要性分析

本任务后面代码主要涉及意图识别和槽位解析,因此这里仅对这两部分内容做介绍。

2.1.意图识别

意图识别是用来检测用户当前输入的意图,通常其被建模为将一段自然语言文本分类为预先设定的一个或多个意图的文本分类任务。

  • 所用方法:和文本分类模型的方法大同小异,主要有:
    基于词典模板的规则分类
    传统的机器学习模型(文本特征工程+分类器)
    深度学习模型(Fasttext、TextCNN、BiLSTM + Self-Attention、BERT等)

2.2.槽值填充

槽值填充就是根据我们既定的一些结构化字段,将用户输入的信息中与其对应的部分提取出来。因此,槽值填充经常被建模为序列标注的任务。

例如 Query “北京飞成都的机票”:通过意图分类模型可以识别出 Query 的整体意图是订机票,在此基础上进一步语义解析出对应的出发地 Depart=“北京”,到达地 Arrive=“成都”,所以生成的形式化表达可以是:Ticket=Order(Depart,Arrive),Depart={北京},Arrive={成都}。

  • 序列标注的任务常用的模型有:
    词典匹配
    BiLSTM + CRF
    IDCNN
    BERT等

3.QASystemOnMedicalGraph的实践

在这里插入图片描述
其中有两个关键步骤:命名实体和意图识别

3.1.命名实体

  • step 1:对于用户的输入,先使用预先构建的疾病、疾病别名、并发症和症状的AC Tree进行匹配;
  • step 2:若全都无法匹配到相应实体,则使用结巴切词库对用户输入的文本进行切分;
  • step 3:然后将每一个词都去与疾病词库、疾病别名词库、并发症词库和症状词库中的词计算相似度得分(overlap score、余弦相似度分数和编辑距离分数),如果相似度得分超过0.7,则认为该词是这一类实体;
  • step 4:最后排序选取最相关的词作为实体(项目所有的实体类型如下图所示,但实体识别时仅使用了疾病、别名、并发症和症状四种实体)

1:构建 AC Tree
entity_extractor.py 中的 build_actree 函数构建AC Tree

  • 函数模块
def build_actree(self, wordlist):
        """
        构造actree,加速过滤
        :param wordlist:
        :return:
        """
        actree = ahocorasick.Automaton()
        # 向树中添加单词
        for index, word in enumerate(wordlist):
            actree.add_word(word, (index, word))
        actree.make_automaton()
        return actree
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 函数调用模块
 def __init__(self):
        ...
        self.disease_path = cur_dir + 'disease_vocab.txt'
        self.symptom_path = cur_dir + 'symptom_vocab.txt'
        self.alias_path = cur_dir + 'alias_vocab.txt'
        self.complication_path = cur_dir + 'complications_vocab.txt'

   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值