参考来源:https://github.com/datawhalechina/team-learning-nlp/blob/master/KnowledgeGraph_Basic/task04.md#21-%E9%97%AE%E7%AD%94%E7%B3%BB%E7%BB%9F%E7%AE%80%E4%BB%8B

本部分任务主要是将用户输入问答系统的自然语言转化成知识库的查询语句,因此本文将分成两部分进行介绍。

  • 第一部分介绍任务所涉及的背景知识;
  • 第二部分则是相应的代码和其注释

一、问答系统

1.1 问答系统简介

问答系统(Question Answering System,QA System)是用来回答人提出的自然语言问题的系统。根据划分标准不同,问答系统可以被分为各种不同的类型。

  • 问答系统从知识领域划分:

    • 封闭领域:封闭领域系统专注于回答特定领域的问题,由于问题领域受限,系统有比较大的发挥空间,可以导入领域知识或将答案来源全部转换成结构性资料来有效提升系统的表现;
    • 开放领域:开放领域系统则希望不设限问题的内容范围,因此其难度也相对较大。
  • 问答系统从实现方式划分:

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

    • 「知识库问答」。是目前的研究热点。知识库问答(knowledge base question answering, KB-QA)即给定自然语言问题,通过对问题进行语义理解和解析,进而利用知识库进行查询、推理得出答案。如下图 2 所示:
    • 「常问问题问答」;
    • 「新闻问答」;
    • 「网际网路问答」;

                                                                  图1 基于流水线实现的问答系统

                                                                          图2 知识库问答系统

二、Query理解

参考链接:https://zhuanlan.zhihu.com/p/136313695

2.1 query理解的目的

query理解是整个搜索系统中最上游的一环,负责的是从query中提取信息,从而了解用户希望通过这个query搜索出什么。

2.2 query理解的任务

  • 纠错改写。针对用户输错的,没输入完全的,内容,进行修正。底层数据库只支持精准搜索,因此需要将query改写到正确的内容下。
  • 意图识别。通过分析语义等方式,在一定的类目结构下,识别出具体意图。这个意图识别的目标,大家可以理解为告诉下游,需要在哪个库数据进行搜索。
  • 实体识别。其实和意图识别一样,只不过,粒度更细,但是是词级别的分析,从query中抽取关键的实体,如果说意图识别是为了告诉下游该检索那个数据库,那实体识别就是为了告诉下游,在该数据库下,该检索哪些字段。
  • 词权重问题。query里面有两个词,两个文档分别匹配到了其中一个词,那谁能靠前?这就要看匹配到什么内容更为重要。如家宾馆,匹配到一个如家酒店和五洲宾馆,如家酒店应该在前,这里就是为了解决这个问题。
  • Query预处理
  • Query纠错
  • Query扩展
  • Query归一
  • 意图识别
  • 槽值填充
  • Term重要性分析;

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

2.3 意图识别

  • 作用:意图识别是用来检测用户当前输入的意图,通常其被建模为将一段自然语言文本分类为预先设定的一个或多个意图的文本分类任务。
  • 所用方法:和文本分类模型的方法大同小异,主要有:
    • 基于词典模板的规则分类
    • 传统的机器学习模型(文本特征工程+分类器)
    • 深度学习模型(Fasttext、TextCNN、BiLSTM + Self-Attention、BERT等)

                                                            图3 意图识别

2.4 槽值填充

  • 介绍:槽值填充就是根据我们既定的一些结构化字段,将用户输入的信息中与其对应的部分提取出来。因此,槽值填充经常被建模为序列标注的任务。
  • 举例介绍:例如下图所示的 Query "北京飞成都的机票",通过意图分类模型可以识别出 Query 的整体意图是订机票,在此基础上进一步语义解析出对应的出发地 Depart="北京",到达地 Arrive="成都",所以生成的形式化表达可以是:Ticket=Order(Depart,Arrive),Depart={北京},Arrive={成都}。

                                                    图4 槽值填充

三、任务实践

3.1 整体框架

                                                                              图5 基于知识图谱的问答系统框架

3.2 项目文件

本项目主要包含build_graph.py,entity_extractor.py,kbqa_test.py,search_answer.py四个文件。

四、命名实体

命名实体识别是指在文档集合中识别出特定类型的事物名称或符号的过程。命名实体识别由3个问题组成:1.识别出文本中的命名实体;2.确定该实体的类型;3.对于多个实体表示同一事物时,选择其中的一个实体作为该组实体的代表。

4.1 命名实体识别整体思路介绍

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

                                   图6 实体介绍

4.2 结合代码介绍

五、意图识别

5.1 意图识别整体思路介绍

  • step 1:利用TF-IDF表征文本特征,同时构建一些人工特征(每一类意图常见词在句子中出现的个数);
  • step 2:训练朴素贝叶斯模型进行意图识别任务;
  • step 3:使用实体信息进行意图的纠正和补充。

                                                 图7 意图识别

5.2 代码介绍

DataWhale第21期组队学习自然语言处理实践(知识图谱)task4— 用户输入->知识库的查询语句相关推荐

  1. Datawhale 知识图谱组队学习 之 Task 1 知识图谱介绍

    Datawhale 知识图谱组队学习 之 Task 1 知识图谱介绍 知识图谱理论: 相关理论 知识图谱背景 早在 2010 年微软就开始构建知识图谱,包括 Satori 和 Probase:2012 ...

  2. Datawhale第五期组队学习团队成员

    第五期组队学习团队成员 组队学习 负责人 评优助教 星球星主 初级算法梳理 Danny 梁乾明 黑桃 高级算法梳理 居居 路建飞 黑桃 编程 LeoLRH 鲁力 黑桃 统计学 谷勇杰 ben 黑桃 L ...

  3. Datawhale第四期组队学习团队成员

    第四期组队学习团队成员 集训 负责人 评优助教 基础算法梳理 Sm1les 钱令武 高级算法梳理 于鸿飞 小雪 ML项目实践 杨冰楠 孙涛 编程 孙超 小熊 统计学 李奇锋 蓝昔 Leetcode 老 ...

  4. 转发:Datawhale第七期组队学习计划

    编者注:Datawhale是一个公益组织,也是AiUnion的四个成员之一,所有学习计划是免费的. 第7期Datawhale组队学习计划 马上就要开始啦 这次共组织15个组队学习 涵盖了AI领域从理论 ...

  5. Datawhale第23期组队学习—深度学习推荐系统—task5 DIN

    DIN 1. 背景 2. 模型原理 2.1 特征表示 2.2 模型原理 3. 代码实现 参考来源: https://github.com/datawhalechina/team-learning-rs ...

  6. 【Datawhale第25期组队学习】Task03:基于线性模型的异常检测

    Taks03 基于线性模型的异常检测 文章目录 Taks03 基于线性模型的异常检测 0 写在前面 1 概述 2 线性回归 2.1 基于自变量与因变量的线性回归 2.1.1梯度下降法优化目标函数 2. ...

  7. Datawhale第13期组队学习笔记Task3

    CNN CNN是一种层次模型,输入的是原始的像素数据.CNN通过卷积(convolution).池化(pooling).非线性激活函数(non-linear activation function)和 ...

  8. Datawhale第32期组队学习——task0:新闻推荐系统项目搭建:centos下前端配置

    文章目录 0.解决npm命令语法不正确问题 0.1 powershell报错 0.2 win10家庭版升级 nodejs 1.1 centos安装nodejs 1.2 win10安装nodejs 2. ...

  9. Datawhale 知识图谱组队学习 之 Task 4 用户输入->知识库的查询语句

    文章编写人:王翔 特别鸣谢:QASystemOnMedicalGraph 目录 Datawhale 知识图谱组队学习 之 Task 4 用户输入->知识库的查询语句 目录 一.引言 二.什么是问 ...

最新文章

  1. AWS之EC2搭建WordPress博客
  2. python最大公约数
  3. ES6类的使用和定义.Json.Promise对象的使用
  4. 文献综述写作之“结构内容”
  5. 策略模式 是一种好策略 -07
  6. 杭电1879继续畅通工程
  7. mysql havequerycache_如何开启MySQL的中的Query Cache缓存
  8. 如何创建隐藏用户帐号
  9. 【转】VC++计算当前时间点间隔N天的时间(不使用CTimeSpan类)
  10. solr配置中文IK Analyzer分词器
  11. QT错误:collect2:ld returned 1 exit status
  12. Python 柱状图 横坐标 名字_Python爬虫实例(二)——爬取新馆疫情每日新增人数
  13. sql server 数据库设计实例
  14. 论文笔记-《深度卷积神经网络的发展及其在计算机视觉领域的应用》
  15. win10系统的 3Dsmax2020 安装失败报错 1603 解决方案 亲测可用
  16. Fiddler抓包基础使用
  17. 【MM模块】Credit Memos and Reversals 红字发票和冲销
  18. 关于装msdn网站纯净版win7正版授权问题(已解决)
  19. 多模态学习(一) 初识
  20. 2019年最新Java面试真题,通往BATJ的必经之路!

热门文章

  1. 第二届Techo TVP 开发者峰会有感
  2. OS学习笔记-20(清华大学慕课)死锁和进程通信
  3. cadence17.2输出BOM清单
  4. URI跳转方式地图导航的代码实践
  5. 室内全景图数据集的设计及制作流程
  6. H5中判断手势滑动方向
  7. IP地址,IPV4与IPV6
  8. Hololens连接mysql_学校hololens开发项目:汽车发动机检修混合现实(MR)教学
  9. python freez_使用FreeZ在线电视在PC上观看电视
  10. QLabel显示多行文本