精华内容
下载资源
问答
  • KM_KBQA /型号/ bert_config.json 伯特·基·汉斯·宾 BertERCls.bin check_kbqa_model.pt KB_KBQA / res / airport.txt ent_alias.txt airline.txt 启动服务 python - m KM_KBQA . qa . QAServer - lp port...
  • KBQA方案.docx

    2020-05-26 00:17:35
    阅读论文总结出的KBQA方案,有4部分组成:实体抽取部分,对话状态机DST部分,对话生成部分,中控部分。详细阐述了各个模块的思路以及算法流程,以供参考。
  • KBQA_1 基于知识的问答(KBQA)基线模型,例如HRBiLSTM和ABWIM
  • 基于知识图谱的问答系统(KBQA)

    万次阅读 多人点赞 2018-12-27 12:00:26
      最近因为工作原因暂时停止机器学习方面知识的学习,研究了一段KBQA。,下面是一个简单的关于中小学生需要掌握的诗词的demo,各位看官有兴趣的可以瞅瞅,欢迎来信一起交流。 1. 原理   KBQA简单讲就是将...

      最近因为工作原因暂时停止机器学习方面知识的学习,研究了一段KBQA。,下面是一个简单的关于中小学生需要掌握的诗词的demo,各位看官有兴趣的可以瞅瞅,欢迎来信一起交流。
    在这里插入图片描述

    1. 原理
      KBQA简单讲就是将问题带入提前准备好的知识库寻求答案的一种基于知识库的问答系统。该问答系统可以解析输入的自然语言问句,主要运用REFO库的对象正则表达式匹配得到结果,然后利用对应的SPARQL查询语句,请求后台基于TDB知识谱图数据库的服务,最终得到我们想要的结果。

    2. 流程
      1.实体检测,获取问题的关键词,比如问题“李白写了哪些诗?”,那么首先必须找到李白,才可以进行下一步。
      2.目的获取,一个问题,我们只获取了实体还不够,比如上面,只有李白,还要有目的,不然可能我是想问李白是哪个朝代的人,哪里的人等等,所以需要找到问题的真实目的。
      3.关系预测,有了实体和目的,那么我们就需要在知识库里面寻找双方的关系,想办法联系起来。
      4.查询构建,将处理好的三元组带入知识库搜索答案。
    3. 知识图谱
       1.介绍
       知识图谱由google于2012年率先提出,其初衷是用以增强自家的搜索引擎的功能和提高搜索结果质量,使得用户无需通过点击多个连接就可以获取结构化的搜索结果,并且提供一定的推理功能。这里我还是用《将进酒》这首诗举个例子,很多人看到《将进酒》,估计第一时间想不到这是哪个年代的诗歌,但是不妨看看作者,李白,很多人对李白就比较耳熟能详了,那么就来了,很多人都知道李白是唐朝人(这里假设没人不知道哈),那么自然而然就知道《将进酒》这首诗写在唐朝了。说了这些,我们发现,如果知识库里面有这些信息,那么就很容易找到答案。如果我们再多加一些相关属性,就可以构成一张简单的知识图了,如下图,具体的我就不描述了,大家可以看看知识图谱介绍这篇文章,讲述的非常明白,我就不在关公门前耍大刀了。

       2. 数据格式
       在知识图谱中,数据一般以RDF形式的三元组表示。
       RDF(Resource Description Framework)即资源描述框架,其本质是一个数据模型。它提供了一个统一的标准,用于描述实体/资源。简单来说,就是表示事物的一种方法和手段。RDF形式上表示为SPO三元组,知识图谱中我们也称其为一条知识。RDF由节点和边组成,节点表示实体/资源、属性,边则表示了实体和实体之间的关系以及实体和属性的关系。如下图所示:

       其中Subject与Object为实体,Predicate为边,表示二者之间的关系。

        RDF数据集方式主要有以下几种,主要使用Turtle。
        1、RDF/XML,用XML的格式来表示RDF数据。之所以提出这个方法,是因为XML的技术比较成熟,有许多现成的工具来存储和解析XML。然而,对于RDF来说,XML的格式太冗长,也不便于阅读,通常我们不会使用这种方式来处理RDF数据。
        2、N-Triples,即用多个三元组来表示RDF数据集,是最直观的表示方法。在文件中,每一行表示一个三元组,方便机器解析和处理。开放领域知识图谱DBpedia通常是用这种格式来发布数据的。
        3、Turtle, 应该是使用得最多的一种RDF序列化方式了。它比RDF/XML紧凑,且可读性比N-Triples好。
        4、RDFa, 是HTML5的一个扩展,在不改变任何显示效果的情况下,让网站构建者能够在页面中标记实体,像人物、地点、时间、评论等等。也就是说,将RDF数据嵌入到网页中,搜索引擎能够更好的解析非结构化页面,获取一些有用的结构化信息。
        5、JSON-LD,用键值对的方式来存储RDF数据。
       但是RDF的表达能力有限,无法区分类和对象,也无法定义和描述类的关系/属性,这个时候就有人提出RDFS和OWL这两种技术或者说模式语言/本体语言来解决了RDF表达能力有限的困境,详细介绍参考知识图谱基础之RDF,RDFS与OWL。后面的实例分析就是使用OWL来存储数据。

    4. 实例分析
       知识图谱这个专栏讲的非常详细,我也是参考这位前辈的专栏实现的小demo,所以我就不在这里花过多的时间描述相关方面的知识了,避免理解错误,误导大家。下面就直接开始我自己的实例。本demo实现是为了展示知识图谱,所以将数据分开,其实也可以直接将诗词名、作者、朝代、诗词内容放在一起,全部作为属性,不需要在SQL中创建多个数据表,所以希望大家不要觉得麻烦,感兴趣的可以使用一张表试着做一下。

    • 数据准备
        数据是中小学必背诗词,其中信息有诗词名、作者、朝代、诗词内容。
        作者信息:姓名、朝代
        诗词信息:诗词名、诗词内容
        诗句使用scrapy在百度上爬取,如果想自己动手的,可以参考一下前面的博客scrapy学习(一):scrapy框架(爬古诗词)

    • 数据建模
        这步是非必须的,但是为了后面数据映射更容易理解,我还是在这里简述一下。构建数据结构一般使用工具protégé,构建过程参考本体建模,根据我们自己的功能需要,创建三个类Poem(诗词)、Poet(诗人)、Verse(诗句):

      类创建完成后,因为诗词和诗人之间,需要联系起来,所以我就需要定义每个类之间的关系,其实也是创建一个简单的推理机:poemAuthor(诗词作者)、poetProduction(诗人作品)、poemInclude(诗词包含诗句)、verseIn(诗句在诗词里)。右下角为属性:InverseOf(相反关系)、Domain(属于哪个类)、Range(取值范围)。以verseIn为例,verseIn与poemInclude是一组相反关系,所以InverseOf属性为poemInclude,verse属于Verse这个类,所以Domain为Verse,这个关系的取值对象是诗词,所以range为Poem,如下图所示。其他的类推,这里我就仔细阐述了。

      上面的类和推理都创建好了,接下来就需要定义每个类里面的属性:poemContent(诗词内容)、poemName(诗词名)、poetDynasty(诗人朝代)、poetName(诗人名)、sentenceId(诗句ID)、verseId(诗词ID)、sentenceContent(诗句内容)、verseLen(诗词长度)。同样右下角也需要定义属性,Domain为属于哪个类,Range与前面关系的Domain有区别,这里表示的是数据类型。

      类、关系、属性都定义好之后,就组成了一个简单的数据模型,点击"Window–>Tabs–>OntoGraf",就可以在protégé中很明了的看出相互之间的关系。

      将我们构建好的关系导出备用,导出格式如下,文件名随意,我这里取为poem_kbqa.owl

    • 数据映射
        现在数据有了,关系也有了,如何将两者联系起来呢,我们以mysql中的诗词名为例,将poem这个表映射到我们在protege中定义的Peom类上,poem title映射到poemName上。
    	map:poem a d2rq:ClassMap;
    		d2rq:dataStorage map:database;
    		d2rq:uriPattern "poem/@@poem.poem_id@@";
    		d2rq:class :Poem;	# 类名
    		d2rq:classDefinitionLabel "poem";	# sql数据表
    		.
    	map:poem_title a d2rq:PropertyBridge;
    		d2rq:belongsToClassMap map:poem;
    		d2rq:property :poemName;
    		d2rq:propertyDefinitionLabel "poem title";
    		d2rq:column "poem.title";
    		.

      很多人看到上面的语句就懵逼了,但是别急,这可以直接通过D2RQ来实现,D2RQ是以RDF图的方式访问关系数据库的,将RDF的查询等操作翻译成SQL语句,最终在TDB上实现对应操作。用户可以在数据库自动生成的映射文件上修改,从而将数据映射到自己的本体上。
      进入D2RQ目录,执行下列语句生成映射文件,我这里取名poem_demo_mapping.ttl,大家自己随意就好。

    $ ./generate-mapping -u root -p 123456 -o poem_demo_mapping.ttl jdbc:mysql://127.0.0.1:3306/poem_kbqa_demo?serverTimezone=UTC
      这里不会使用jdbc访问SQL的可以自己百度一下,上面产生的文件我们发现映射词汇是自带默认的,这样对我们寻找关系不是很方便,我们截取Poem这个表的映射数据来分析一下
    	# Table poem	#Poem类
    	map:poem a d2rq:ClassMap;
    		d2rq:dataStorage map:database;
    		d2rq:uriPattern "poem/@@poem.poem_id@@";
    		d2rq:class vocab:poem;
    		d2rq:classDefinitionLabel "poem";
    		.
    	map:poem__label a d2rq:PropertyBridge;
    		d2rq:belongsToClassMap map:poem;
    		d2rq:property rdfs:label;
    		d2rq:pattern "poem #@@poem.poem_id@@";
    		.
    	map:poem_poem_id a d2rq:PropertyBridge;
    		d2rq:belongsToClassMap map:poem;
    		d2rq:property vocab:poem_poem_id;
    		d2rq:propertyDefinitionLabel "poem poem_id";
    		d2rq:column "poem.poem_id";
    		d2rq:datatype xsd:integer;
    		.
    	map:poem_title a d2rq:PropertyBridge;
    		d2rq:belongsToClassMap map:poem;
    		d2rq:property vocab:poem_title;
    		d2rq:propertyDefinitionLabel "poem title";
    		d2rq:column "poem.title";
    		.
    	map:poem_content a d2rq:PropertyBridge;
    		d2rq:belongsToClassMap map:poem;
    		d2rq:property vocab:poem_content;
    		d2rq:propertyDefinitionLabel "poem content";
    		d2rq:column "poem.content";
    		.

      belongsToClassMap为类名,property为属性名,propertyDefinitionLabel为数据描述,column数据表的标签。这里我们发现这和我们上面数据建模的关系很相似,belongsToClassMap–>domain,这里将上面的映射文件修改成我们在数据建模里使用的定义,结合关系图,这样看起来更明白。

    	# Table poem
    	map:poem a d2rq:ClassMap;
    		d2rq:dataStorage map:database;
    		d2rq:uriPattern "poem/@@poem.poem_id@@";
    		d2rq:class :Poem;
    		d2rq:classDefinitionLabel "poem";
    		.
    	map:poem_title a d2rq:PropertyBridge;
    		d2rq:belongsToClassMap map:poem;
    		d2rq:property :poemName;
    		d2rq:propertyDefinitionLabel "poem title";
    		d2rq:column "poem.title";
    		.
    	map:poem_content a d2rq:PropertyBridge;
    		d2rq:belongsToClassMap map:poem;
    		d2rq:property :poemContent;
    		d2rq:propertyDefinitionLabel "poem content";
    		d2rq:column "poem.content";
    		.
    • 数据查询
        数据映射完成后,我们可以类似使用SQL查询关系数据库一样使用SPARQL查询RDF格式的数据。
        SPARQL查询是基于图匹配的思想。比如我想查询《将进酒》的内容,那么需要将查询语句与RDF图进行匹配,找到符合该匹配模式的所有子图,最后得到变量的值。SPARQL查询分为三个步骤:
          1. 构建查询图模式,表现形式就是带有变量的RDF。
          2. 匹配,匹配到符合指定图模式的子图。
          3. 绑定,将结果绑定到查询图模式对应的变量上。
        由上面分析,查询《将进酒》的内容对应的SPARQL查询语言为:
    		PREFIX : <http://www.poem.com#>
    		PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
    		PREFIX owl: <http://www.w3.org/2002/07/owl#>
    		PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
    		PREFIX vocab: <http://localhost:2020/resource/vocab/>
    		PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    		PREFIX map: <http://localhost:2020/resource/#>
    		PREFIX db: <http://localhost:2020/resource/>
    		
    		SELECT ?o WHERE {
    		  ?s :poemName '将进酒'.
    		  ?s :poemContent ?o.
    		}

        SELECT指定我们要查询的变量。这里需要查询内容,用?o代替。
        WHERE指定我们要查询的图模式。意思上和SQL的WHERE没有区别。
        ?s、?o为三元组的实体表示。
        :poemContent、:poemName为关系
      最终查询出来的结果为:

    "君不见,黄河之水天上来,奔流到海不复回,君不见,高堂明镜悲白发,朝如青丝暮成雪,人生得意须尽欢,莫使金樽空对月,天生我材必有用,千金散尽还复来,烹羊宰牛且为乐,会须一饮三百杯,岑夫子,丹丘生,将进酒,杯莫停,与君歌一曲,请君为我倾耳听,钟鼓馔玉不足贵,但愿长醉不复醒,古来圣贤皆寂寞,惟有饮者留其名,陈王昔时宴平乐,斗酒十千恣欢谑,主人何为言少钱,径须沽取对君酌,五花马,千金裘,呼儿将出换美酒,与尔同销万古愁,"
    • 查询实践
        上一章简单讲了一下SPARQL查询的语句,下面我们就来实际操作一下,这里讲解两种方式:
          1.利用D2RQ开启SPARQL endpoint服务
          2.利用Apache jena开启SPARQL endpoint服务
    • D2RQ
      进入d2rq目录,使用下面的命令启动D2R Server:
    $ ./d2r-server.bat poem_demo_mapping.ttl
      “poem_demo_mapping.ttl”是我们定义的mapping文件。默认端口是 2020,在浏览器输入“http://127.0.0.1:2020/”,可以看到如下界面。
      点击数据箭头指向的地方,是我存的三组数据Poem、Poet、Verse。查询这里进去就可以填充自己的查询语句。
      Python也提供了一个第三方库:SPARQLWrapper。可以让我们十分方便地和endpoint进行交互。
    	from SPARQLWrapper import SPARQLWrapper, JSON
    	
    	sparql = SPARQLWrapper("http://localhost:2020/sparql")
    	sparql.setQuery("""
    	    PREFIX : <http://www.poem.com#>
    	    PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
    	    PREFIX owl: <http://www.w3.org/2002/07/owl#>
    	    PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
    	    PREFIX vocab: <http://localhost:2020/resource/vocab/>
    	    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    	    PREFIX map: <http://localhost:2020/resource/#>
    	    PREFIX db: <http://localhost:2020/resource/>
    	
    	    SELECT ?o WHERE {
    	      ?s :poemName '将进酒'.
    	      ?s :poemContent ?o.
    	}
    	""")
    	sparql.setReturnFormat(JSON)
    	results = sparql.query().convert()
    	
    	for result in results["results"]["bindings"]:
    	    for x in results["head"]["vars"]:
    	        print(result[x]["value"])

      最终查询出来的结果为:

    "君不见,黄河之水天上来,奔流到海不复回,君不见,高堂明镜悲白发,朝如青丝暮成雪,人生得意须尽欢,莫使金樽空对月,天生我材必有用,千金散尽还复来,烹羊宰牛且为乐,会须一饮三百杯,岑夫子,丹丘生,将进酒,杯莫停,与君歌一曲,请君为我倾耳听,钟鼓馔玉不足贵,但愿长醉不复醒,古来圣贤皆寂寞,惟有饮者留其名,陈王昔时宴平乐,斗酒十千恣欢谑,主人何为言少钱,径须沽取对君酌,五花马,千金裘,呼儿将出换美酒,与尔同销万古愁,"
    • Apache jena
      Apache Jena是一个开源的Java语义网框架,用于构建语义网和链接数据应用,是使用最广泛、文档最全、社区最活跃的一个开源语义网框架。我们会用到的组件有:TDB、Fuseki。
      1. TDB是Apache Jena用于存储RDF的组件,是属于存储层面的技术。在单机情况下,它能够提供非常高的RDF存储性能。
      2. Apache Jena提供了RDFS、OWL和通用规则推理机。其实Apache Jena的RDFS和OWL推理机也是通过Apache Jena自身的通用规则推理机实现的。
      3. Fuseki是Apache Jena提供的SPARQL服务器,也就是SPARQL endpoint。其提供了四种运行模式:单机运行、作为系统的一个服务运行、作为web应用运行或者作为一个嵌入式服务器运行。

      tdb支持RDF数据,所以需要讲我们的映射文件转为RDF文件。进入D2RQ目录:

    	$./dump-rdf.bat -o poem_kbqa.nt poem_demo_mapping.ttl

      poem_demo_mapping.ttl是建模后的映射文件。其支持导出的RDF格式有“TURTLE”, “RDF/XML”, “RDF/XML-ABBREV”, “N3”, 和“N-TRIPLE”。“N-TRIPLE”是默认的输出格式。poem_kbqa.nt就是我们生成的RDF文件。
      tdb数据存放,进入apache-jena\bat目录下:

    	$.\tdbloader.bat --loc="C:\KBQA\apache-jena\tdb" "C:\d2rq-0.8.1\poem_kbqa.nt"

      --loc为数据存放路径,poem_kbqa.nt为RDF文件。
      进入入Fuseki文件夹,运行fuseki-server.bat,然后退出。程序会为我们在当前目录自动创建run文件夹。将我们前面在数据建模时产生的文件poem_kbqa.owl移动到run文件夹下的databases文件夹中,并将owl后缀名改为ttl。在run文件夹下的configuration中,我们创建名为fuseki_conf.ttl的文本文件(取名随意),加入如下内容:

    	@prefix :      <http://base/#> .
    	@prefix tdb:   <http://jena.hpl.hp.com/2008/tdb#> .
    	@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
    	@prefix ja:    <http://jena.hpl.hp.com/2005/11/Assembler#> .
    	@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
    	@prefix fuseki: <http://jena.apache.org/fuseki#> .
    	
    	<#service3> rdf:type fuseki:Service ;
    		fuseki:name "poem_kbqa" ;	# RDF文件表
    		fuseki:serviceQuery "sparql" ;	 # SPARQL query service
    		fuseki:dataset <#dataset> ;
    		 .
    	
    	<#dataset> rdf:type tdb:DatasetTDB ;
    		tdb:location "C:/KBQA/apache-jena/tdb" ;	# tdb数据路径
    		# Query timeout on this dataset (1s, 1000 milliseconds)
    		ja:context [ ja:cxtName "arq:queryTimeout" ;  ja:cxtValue "1000" ] ;
    		# Make the default graph be the union of all named graphs.
    		## tdb:unionDefaultGraph true ;
    		.

      再次执行命令:

    	$ ./fuseki-server.bat
      jena-fuseki SPARQL query因为版本的不同,可能会出现不同的原因,可以参考

    关于jena-fuseki SPARQL query版本问题的解决方案
      默认端口是 3030,在浏览器输入“http://127.0.0.1:3030/”, 可以看到如下界面。

      query这里进去就可以填充自己的查询语句,同样还是查询《将进酒》的内容:

      实践篇(四):Apache jena SPARQL endpoint及推理这里讲述了规则推理,个人觉得可以不使用,直接利用语句推理即可,各位看官根据自己的喜好来决定。

    • KBQA实践
        前面讲了这么多理论知识,现在就真是开始我们文章开头的demo。此demo是利用正则表达式来做语义解析。我们需要使用结巴分词完成初步的自然语言处理(分词、实体识别),然后利用支持词级别正则匹配的库来完成后续的语义匹配。
        分词和实体识别我们用jieba来完成。为了防止分词错误,我这里将所有的诗人、诗名、诗句提出来作为扩展词并标注词性。分词结束后,可以使用REfO来完成语义匹配。匹配成功后,将其其对应的我们预先编写的SPARQL模板,再向Fuseki服务器发送查询,得到最终结果。
        感兴趣的朋友可以去 基于知识图谱的问答系统获取源码,自己试试效果,在跑demo之前,根据代码中是使用D2RQ还是Fuseki启动对应服务。

    5. 总结
      使用知识图谱,优缺点同样明显,在推理和关系上非常方便,但是如果在实际项目中使用,如果数据有更新,那么就需要重新修改数据库和映射,需要重新走一遍全部流程,反而麻烦,所以下篇博客我会换种方式再次实现一次相同效果的demo。
      本博客是根据知识图谱-给AI装个大脑模拟写出来的,在这里非常感谢该博主的无私分享。如果各位看官发现博客中有什么不对的,或者跟自己想法不一样的,可以留信探讨一下,纯属个人观点,不喜勿喷。

    展开全文
  • KBQA资料

    2019-05-06 01:41:04
    KBQA-BERT 代码:github.com/WenRichard/… 知乎文章:zhuanlan.zhihu.com/p/62946533 数据:tcci.ccf.org.cn/conference/… 相关论文:github.com/tyliupku/Ch…
    展开全文
  • 如何搭建KBQA系统(一)

    如何搭建KBQA系统 —— 初识KBQA(一)

    前言

    最近做了KBQA的项目,个人完整的负责并参与了设计和技术实施,所谓“完整”包含图谱建设和问答系统的建设,也对KBQA也有更高一层的认识,故希望把过程中能分享的技术和经验进行总结。图谱建设阶段是一个极其耗费人工和强依赖业务定义的过程,图谱质量直接影响了后续问答返回结果的质量。当然问答系统也是强依赖业务,还需要高精度的pipeline,一环扣一环,有时必须在召回和精度之间取平衡。

    完完整整落地一个知识图谱的问答系统不是易事,开始搭建KBQA之前得确定几个问题:

    1. 是否需要QA,或者是否需要KB;
    2. 项目是否有足够的时间和资源去折腾;
    3. 是否有足够丰富的数据,丰富是指数据类型多样、数据量大;
    4. 是否对业务足够了解;
    5. 是否是一次性成果,后期有无迭代机会;

    产品满足用户需求有多种方式,问答只是解决问题的其中一种,无论什么方式,其目的都是一致的,都是为了满足用户需求。在现实互联网产品中,问答系统随处可见,例如智能驾驶、智能催收、智能营销、电商智能客服等,但是它们在用户心中认可度有多少,也就是说它能解决多少用户的问题,可能很多少人像我一样,点击客服按钮,直接输入“人工”。所以在产品设计之前就要明确是真实需要QA,而不是为了有而有去“秀肌肉”。

    往往很多人都觉得市面上QA遍地开花,图谱技术也有吹到了天际,就想当然的认为这些不存在技术壁垒。首先不得不承认,现在问答(例如Rasa)和图谱技术都相对成熟了,但是完完整整的复制到自己的垂直领域下,很多时候不得不从头再来,好在于很多技术点是已经在业界取得良好的效果,可开箱即用,有了技术还不够,还要在垂直领域下依据业务设计问答系统,主要是限定问答边界,哪些可以回答,哪些我不能回答,最后你得需要花大量的精力和大量的数据去折腾出一张知识图谱。

    “如何搭建KBQA系统” 系列文章,我会遵循技术理论和真实项目实践去撰写,尽量做到每一个技术点有理论支撑,以项目实践去论证可行性,该系列文章将会分为以下几个篇章:

    • 如何搭建KBQA系统 —— 初识KBQA(一)
    • ( 内容随时更新,敬请期待 ~ )

    问答系统

    问答系统(Question Answering System,QA)是理解人类自然语言、管理对话状态并做出回复决策的系统,它在现实生活中并不陌生,也在某些场景方便了人类的生活方式,例如你现在就可以唤醒身边的“siri”、“小爱同学”等和它们对话。现在也有很多AI机器人公司,他们既有成熟的技术,更有成熟的商业模式和产品,自能问答领域可谓是一篇红海。
    在这里插入图片描述

    问答系统分类

    问答系统按照领域可以分为公共领域和垂直领域,公共领域例如百度百科上的问答,而垂直领域受限行业知识和行业数据,一般是需要依据业务定制化开发,但是企业内业务繁多、系统数据复杂,起初AI机器人开发商会让技术人员定制化开发,这会面临一个头痛得问题,技术人员不仅要面对技术问题,更要了解繁琐的业务流程。所以神奇开发商就思考能不能让把某些问答模块通用化,例如机器人都需要意图识别组件、实体识别组件等,然后提供一个可“拖拉拽”的界面让不会撸代码的企业员工也能手动配置一套问答系统,我了解到相关产品facebookMicrosoft Azure
    在这里插入图片描述
    问答系统另一种划分是按照其能力划分,可分为闲聊型、限定领域型(FAQ、KBQA等)、任务型(多轮对话)。

    类型说明应用
    闲聊型与机器进行开放的问答,目的是增加用户粘性和系统智能程度微软小冰、Siri
    限定领域型具有业务和垂直领域的知识问答,可以是常见问答或者基于知识库检索的问答电商客服
    任务型一般以多轮问答形式,当用户表意不清或信息缺失的情况,一步步引导用户得到最终的答案watson

    并不是每一个机器人都应该具备三种类型功能,根据领域、行业、用户的不同,来确定机器人应该具备哪些功能,应该优化到什么样的程度,当然也需要考虑项目规模、投入成本、用户访问量等因素。

    问答系统技术架构

    在这里插入图片描述
    问答系统涉及广泛的技术,在知识存储过程中,需要按照问答类型设计数据存储方式,也要对数据库做好选型,业务数据一般情况下是不满足问答系统的数据格式,此时需要花费大量精力在数据治理和处理过程中,例如知识图谱需要定义本体、schame、入图格式等。

    技术能力是问答系统性能和开发速度的关键,向上提供技术服务,向下提供数据治理能力。

    没有统一的问答引擎架构,但是大多数都会有自然语言理解、对话管理、答案检索、答案生成等模块,内部的子模块和逻辑各有不同。但是低耦合的模块设计,让系统更容易进行扩展和维护。

    KBQA

    言归正,回到主题,到底什么是KBQA呢?

    KBAQ(Knowledge-based Question Answering)称为基于知识库的问答系统,有些文章也称为KGQA(Knowledge graph Question Answering),通俗解释是用户输入问句(query),系统提取query中实体和关系到知识谱图中检索符合的答案,答案是图谱中的节点、关系、属性。

    术语

    一般你可能关注以下几个术语,这些术语在论文中大量出现,有写术语意思相似且容易混淆,例如“实体提及”和“实体”。

    术语说明
    实体提及 (mention)query中提取的短语,可能是实体或者词
    实体 (entity)指存储在图谱中的节点,需要和mention做映射
    关系(relation)指一般是指图谱中的边,有时候关系约等于谓语
    谓语(predicate)指在query中出现的谓词
    上下位关系(Hyponymy and hypernymy)上位关系(上位词):“牛” 的上位词是“动物”;下位关系(下位词):“牛”的下位词是“黄牛”
    跳(skip)图中节点固定方向出现边的次数,例如“节点 - 关系 - 节点”称为一跳,“节点 - 关系 - 节点 - 关系 - 节点”称为二跳
    路径(path)图中从某一个节点 (起始节点)到另一个节点(结束节点)经过的节点
    度(degree)图中某个节点所包含的边,“度”包括“出度”和“入度”,因为图谱关系一般是具有方向的
    实体(entity)和实体提及(mention)

    实体提及识别和提取阶段和实体对齐阶段会大量出现“mention”专业名词,初学者会比较陌生。抛开知识图谱的范围,可以说它两的意思差不多。值得注意“mention”是来至于query,“enttiy”来自于图谱,“mention”需要和“entity”作对齐的工作。

    跳(skip)、度(degree)和路径(path)

    刚开始接触知识图谱的人会对跳(skip)、度(degree)、路径(path)比较陌生,以下用图例可以较为生动形象的展示。对于A节点度数为5,因为有5个节点和它相连;A节点到B节点称为一跳,A节点到C节点称为二跳;A节点到C节点的路径为“A - B - C”。
    在这里插入图片描述

    技术总结

    KBQA在技术上可以分成两种方案,分别是一种是语义解析方式,第二种信息检索方式方法。语义解析是把问题解析出句法成分、逻辑组合、关系、实体等,然后转为知识库上的查询语句,这种方法优点是有较高的精度,但是需要定义大量的规则,人工量成本较高,并且低召回。

    而信息检索方式以实体在知识库上召回较多的候选路径,通过语义匹配的方式对候选路径进行重排序,从而选择最优的路径作为答案,所以信息检索方式具有较高泛化性。这样的方式一般需要以下几个组件:

    1. 问题预处理、清洗
    2. 实体提及(mention)识别和权重计算
    3. 实体对齐(或实体链接),涉及实体召回和实体排序两个过程
    4. 候选路劲生成,实体到知识库查询N跳子图,进行路径打分过程对候选路径排序
    5. 答案生成,一般是启发式定义返回结果

    问题处理和清洗包括正繁体转换、全角半角转换、表情符号处理等,有些特殊处理情况依据业务而定。

    mention处理方法一般包括分词、命名实体识别、正则表达式,有些系统会对mention进行打分、排序,目的是为了减少召回实体的数量。

    实体链接是使用mention链接到知识库的实体,实体链接通常做法会使用链接词典,这是最实际、最稳健的做法,当然也会使用一些模型算法提高实体召回,也会对实体进行排序,目的是为了减少候选路径的召回数量。

    候选路径生成指的是利用实体到知识库查到实体的子图,所有节点到节点之间的连线就是候选路径,对于属性图而言,属性也可以看成一种特殊的节点。路径排序是使用问题和路径计算相似度,相似度按高低对路径排序,一般而言,最后我们会返回top1的路径作为答案路径。

    答案生成是依据问题分类定义的各种规则,不同的问题类型会采用不同的返回结果策略。

    举个例子更好理解:
    在这里插入图片描述

    论文浅读

    全国知识图谱与语义计算大会(CCKS: China Conference on Knowledge Graph and Semantic Computing)是国内著名的关于知识图谱和自然语言处理技术的会议,首先声明我没有打广告,以下所列的都是CCKS论文的原因是本人当时主要参考了会议评测中一些优秀选手的方案,所以一切都是偶然。当然也阅读了大量国外的优秀KBQA论文,有兴趣可以在引用中查阅。

    我之所以选择展示CCKS KBQA 论文,是因为每年的评测任务稍微固定,虽然论文结构和细节简洁,但是技术框架基本保持一致,不同作者只是在不同组件加入了自己独特的想法,创新点不在于技术框架的更新,而在于组件内部策略的魔改。

    综上所述,CCKS对于小白十分友好,以下论文都是使用信息检索方法。

    CCKS2018

    1. A Joint Model of Entity Linking and Predicate Recognition for Knowledge Base Question Answering
    在这里插入图片描述
    在这里插入图片描述

    CCKS2019

    1. 混合语义相似度的中文知识图谱问答系统
    在这里插入图片描述
    在这里插入图片描述
    2. Multi-Module System for Open Domain Chinese Question Answering over Knowledge Base
    在这里插入图片描述

    在这里插入图片描述
    3. DUTIR 中文开放域知识库问答评测报告
    在这里插入图片描述
    在这里插入图片描述

    CCKS2020

    1. 基于特征融合的中文知识库问答方法
    在这里插入图片描述

    在这里插入图片描述
    1. 基于预训练语言模型的检索-匹配式知识图谱问答系统
    在这里插入图片描述
    在这里插入图片描述

    参考

    1. Cui, W., Xiao, Y., Wang, H., Song, Y., Hwang, S.W., Wang, W.: Kbqa: Learning
      question answering over qa corpora and knowledge bases (2019)
    2. Dai, W., Liu, H.,Liu, Y., Lv, R., Chen, S.:An Integrated Path Formulation Method for Open Domain Question Answering over Knowledge Base (2020)
    3. Zhang, H., Xiong, D.: One Model Structure for All Sub-Tasks KBQA System (2020)
    4. Lan, Y., Jiang, J.:Query Graph Generation for Answering Multi-hop Complex Questions from Knowledge Bases (2020)
    5. Yih, W.,Richardson, M., Meek, C., Chang, M., Suh, J.:The Value of Semantic Parse Labeling for
      Knowledge Base Question Answering (2016)

    下一篇,介绍如何构建一个知识图谱(属性图),来源于实战项目中的经验!

    展开全文
  • KBQA学习笔记

    千次阅读 2019-05-29 17:07:20
    KBQA 评价标准:召回率,准确率,F1-Score 方法:自然语言查询–>意图识别(Intention Recognition)–>实体链指(Entity Linking)+关系识别(Relation Detection) -->查询语句拼装(Query Construction)–>...

    评价标准:召回率,准确率,F1-Score

    方法:自然语言查询–>意图识别(Intention Recognition)–>实体链指(Entity Linking)+关系识别(Relation Detection) -->查询语句拼装(Query Construction)–>返回结果选择(Answering Selection)

    KBQA除了 基于模板的方法 之外,还有 基于语义解析基于深度学习 等方法

    • 三元组表示
      “奥巴马出生在火奴鲁鲁。” 可以用三元组表示为 (BarackObama, PlaceOfBirth, Honolulu)
      (实体entity,实体关系relation,实体entity)

    技术基础

    一、词语的向量化表示

    • 离散表示 One-Hot模型(维度高造成很大开销,词与词关系隔离)

    • 分布式表示 思想:词的语义可以通过上下文信息确认,通过无监督学习,将文本信息映射到定长的向量表示

    • Word2Vec两种模型
      CBOW模型(Continous Bags-of-Words Model) 利用上下文预测目标词语
      Skip-Gram模型(Contin-uous Skip-Gram Model) 利用当前词语预测上下文
      CBOW复杂度公式 N ∗ D + D ∗ log ⁡ v N*D+D*{\log{v}} ND+Dlogv其中N是上下文窗口大小,D是词向量维度,V是词典大小
      模型最大化目标函数
      L c b o w = 1 T ∑ t = 1 T log ⁡ p ( ω t ∣ C o n t e x t ( ω t ) ) L_{cbow}=\frac{1}{T} {\sum_{t=1}^T}{\log{p}({ω_t|Context(ω_t))}} Lcbow=T1t=1Tlogp(ωtContext(ωt))

      Skip-Gram模型 利用当前词语预测上下文
      Skip-Gram复杂度公式 C ∗ ( D + D ∗ l o g ( V ) ) C*(D+D*log(V)) C(D+Dlog(V))
      模型的最大化目标函数
      L S k i p − G r a m = 1 T ∑ t = 1 T ∑ − c ≤ j ≤ c , j ≠ 0 log ⁡ p ( ω t + j ∣ ω t ) L_{Skip-Gram}=\frac{1}{T}{\sum_{t=1}^T}{\sum_{-c≤j≤c,j≠0}}{\log{p}({ω_{t+j}|ω_t})} LSkipGram=T1t=1Tcjc,j̸=0logp(ωt+jωt)

    二、神经网络

    如图所示,这是一个三层神经网络模型,包括输入层(input layer)、隐藏层(hidden layer)、输出层(output layer)
    简单神经网络模型

    2.1 卷积神经网络(CNN)

    如图所示,卷积神经网络本质上是由卷积层、池化层、全连接层构成的深层神经网络。通过卷积层、池化层的结合,构成多个卷积组,然后逐层提取特征信息,最后通过全连接层得到最终的特征信息。
    卷积神经网络
    卷积神经网络主要特点是降采样局部连接、以及权值共享

    • 局部连接:通过感知小部分的区域来降低参数数量,提供特征拟合的能力
    • 池化层:更进一步降低输出参数数量,提高CNN的泛化能力
    • 权值共享:使一些基本特征能够被重复使用,共享网络参数并提高神经网络的训练效果

    2.1.1 卷积层

    是指“滑动窗口”与矩阵重叠局部区域间的线性运算,如图所示。
    卷积计算过程
    图中的“滑动窗口”(也叫卷积核)大小3*3,运算过程:滑动窗口从左上方开始,由左往右,由上至下,单次移动方向不变,距离(步长)固定。根据卷积核大小以及参数的不同,设置不同的卷积核可以提取到不同的特征。
    以上图所示,卷积运算的公式是
    Z = ∑ i = 1 d ∑ j = 1 d X m + i , n + j W i , j + b Z=\sum_{i=1}^{d}{\sum_{j=1}^{d}{X_{m+i,n+j}W_{i,j}}+b} Z=i=1dj=1dXm+i,n+jWi,j+b
    其中W是卷积核,X代表输入的矩阵向量(图像,文本),b是偏移参数,D是窗口的高度和宽度,m、n代表“滑动窗口”局部区域的索引图右边展现的是卷积运算结果矩阵Z。卷积层的最终输出公式: C i , j = g ( Z i , j ) C_{i,j}=g(Z_{i,j}) Ci,j=g(Zi,j)
    其中g(·)表示signmoid、tanh、relu等激活函数。

    2.1.2 池化层

    池化层对的任务是从输出中提取局部特征,通过筛选减少参数量。一般采用的Pooling方法有MaxPooling(取局部最大值,也叫最大池化法)、Mean-Pooling(取局部平均值,也叫平均池化法)等。
    Pooling操作的好处:
    ①可以使神经网络的最终输出可以固定长度
    ②输出可以很方便地加入到另外的神经网络

    2.2 循环神经网络(RNN)

    利用有向循环网络的结构来充分保留序列信息,记忆模型历史信息。在RNN中,当前神经元的输出跟序列中的其他神经元的输出相关。RNN中t时刻的节点与t-1时刻节点相连接,使隐藏层同层的节点不在相互独立。如图所示,上一时刻的输出与当前时刻输入一起送入当前节点进行计算。
    RNN以及展开图
    RNN的输入序列X={X0,X1…Xt…},Xt是t时刻的输入。U表示输入层和隐藏层之间的网络参数,V表示隐藏层和输出层间的网络参数,W表示当前时刻和上一层的隐藏层的网络参数。
    RNN的计算方式:
    S t = f ( U x t + W s t − 1 + b 1 ) S_t=f(Ux_t+Ws_{t-1}+b1) St=f(Uxt+Wst1+b1)
    O t = g ( V S t + b 2 ) O_t=g(VS_{t}+b2) Ot=g(VSt+b2)
    其中 S t S_t St代表t时刻隐藏层的输出状态, O t O_t Ot代表t时刻输出层的输出。当t=0时, S t − 1 S_{t-1} St1可以为空
    f(·)、g(·)为非线性激活函数,根据模型可以选择signmoid、tanh、relu等。
    RNN由于循环结构而具有一定的记忆能力,但是实际条件下输入过长的条件下,极易出现梯度消失和梯度爆炸问题。为改进这类问题,研究者提出来更为复杂的模型,如GRU模型,长短期记忆模型,双向循环神经网络,深层双向循环神经网络模型。

    智能问答算法及技术

    一、概述

    目前主流研究思路
    ① 基于语义解析的方法(Semantic Parsing-Based,SP-based)
    构建语义解析器,利用语义解析器将自然语言转化成逻辑表达,然后通过逻辑表达式在结构化的知识图谱查询知识三元组,提取答案
    ② 基于信息检索的方法(Information Retrieve,IR-based)
    利用问句中的语义信息在知识图谱中检索相关知识

    随着深度学习技术的进步,研究者着手基于深度学习的知识图谱问答(Neural Network-Based,NN-based)方法。
    优点:突破了传统神经网络在层数上的限制,可自定义层数,利用其强大的表征学习能力学习隐藏的语义信息。
    两方面改进:
    ① 在SP-based框架下使用深度学习方法代替传统方法实现实体识别、关系映射等流程
    ②端到端(End2End)的生成式学习框架,利用神经网络将实体、关系以及问句转化成向量形式,通过问句关系向量和知识向量之间语义相似度判断是否为正确答案

    二、基于语义解析的问答

    在自然语言处理方法的基础上的问答在解析后,将信息转化成机器语言
    局限性:都需要标记语料的逻辑形式做监督训练,且只能在谓词较少的领域才有较好的效果
    通常采用的思路:降低监督数量、提高逻辑谓词数量
    Berant等提出了一种不需要标注的语义解析器
    语义解析的关键过程:
    ①词汇映射
    构建一个词典将词语映射到知识三元组中的实体或者关系中来实现
    ②构建语法树
    将语法树的节点自下向上两两合并来实现,最终得到的根节点就是问句的逻辑表达式

    映射层:

    难点:如何向自然语言问句中的短语映射成需要的谓词
    常用的语义解析方法:模式匹配;远程监督;人工规则组合

    构建层:

    过程:自底向上分析问句并构建一棵语法树,需要较多的人工规则

    三、基于深度学习的问答

    借助大规模语料的训练有效的解决文本语义构建的问题,缓解语义解析方法带来的难以推断和难以大规模训练的问题。
    研究成果:
    Bordes等将基于嵌入的语义模型来解决基于知识图谱的回答问题,将自然语言问句和知识三元组表示为低维向量,通过余弦相似度找到相似的答案
    Berant等在上面的基础上提出了针对基于嵌入的语言模型的改进,利用嵌入子图在答案向量中融入尽可能多的语义信息
    Weston在记忆框架更进一步提出了基于记忆神经网络的大规模QA实现,支持复杂度更高的推理功能
    Yih等将基于知识图谱的问答分为实体识别及映射、关系映射两个步骤,分别利用两个卷积神经网络模型来完成整个映射过程
    yang等将实体间的映射和关系映射成一个整体的过程,与上面的类似

    Yih提出的Muli-Column CNN模型从上下文信息、答案路径、答案类型等多角度分析,利用多个CNN模型来抽取信息,并通过累计的打分方式来排列候选答案顺序。

    yang等在MCCNN模型基础上引入了注意力机制,关注不同词对最后排序的影响,同时引入底层知识库作为问答过程的全局信息,集成更多的知识库信息到答案的向量表示中,有助于解决问句理解中的词汇不足、信息量过少的问题

    zhang等通过不同方式融入注意力机制来获取不同的问句表达形式

    中文领域:
    xie等人分别在实体识别和属性链接过程中引入了神经网络模型
    yang等人利用机器学习的GBDT方法完成实体识别,而属性链接则结合传统NBSVM模型和深度学习中卷积神经网络
    lai等人利用分布式向量进行余弦相似度计算,结合人工构建特征,针对知识库层次单独构建细粒度的分词方法进行属性链接
    王银丽等针对FAQ问句匹配设计并实现了限定领域的智能问答系统
    杜泽宇等在CRF的实体识别算法和Word2Vec属性链接算法的基础上设计了一个基于中文知识图谱的电商领域问答系统算法框架(CEQA)

    三、智能问答算法设计

    3.1 框架

    在这里插入图片描述

    • 自然语言问句:指的是用户的提问
    • 问句处理:分词,去停用词
    • 词向量:利用词嵌入技术代替传统方法提取词语的潜在语义,将问句输入转化为模型词向量,主要用word2vec训练维基语料库
    • 实体识别:获取问句中的实体名称
    • 属性链接:找到问句询问的实体相关属性
    • 候选三元组:描述问句可能的三元组,如<NER,PRO,VAL>(实体:NER,属性:pro,属性值:VAL)
    • 查询构建:根据问题类别及查询模板,上下文流程识别的实体和属性信息,构建查询从知识库中获取候选三元组,从而构建候选属性集

    3.2 实体识别算法

    3.2.1 LSTM模型

    选择LSTM的实体识别模型,提出了门结构
    在这里插入图片描述
    在这里插入图片描述
    遗忘门决定细胞丢弃的数量,用signmoid函数来实现,计算公式如下:
    f t = σ ( W f ⋅ h t − 1 + U f ⋅ x t + b f ) f_t=σ(W_f·h_{t-1}+U_f·x_t+b_f) ft=σ(Wfht1+Ufxt+bf)
    其中, x t x_t xt表示当前时刻输入, h t − 1 h_{t-1} ht1为上一时刻隐藏层的输出, U f U_f Uf代表输入信息的权重, W f W_f Wf代表遗忘门权重, b f b_f bf为偏置项
    细胞更新时,首先通过输入确定更新的信息,然后根据得到的信息确定LSTM需要在新的细胞状态中的保存的信息
    i t = σ ( W i ⋅ h t − 1 + U i ⋅ x t + b i ) i_t=σ(W_i·h_{t-1}+U_i·x_t+b_i) it=σ(Wiht1+Uixt+bi)
    c t ′ = t a n h ( W c ⋅ h t − 1 + U i ⋅ x t + b c ) c_t&#x27;=tanh(W_c·h_{t-1}+U_i·x_t+b_c) ct=tanh(Wcht1+Uixt+bc)
    c t = f t ⋅ c t − 1 + i t ⋅ c t ′ c_t=f_t·c_{t-1}+i_t·c_t&#x27; ct=ftct1+itct
    其中, U i 、 W I 、 U c 、 W c U_i、W_I、U_c、W_c UiWIUcWc均为参数矩阵, b i 、 b c b_i、b_c bibc为偏置参数, c t c_t ct为当前时刻的Cell状态, C t − 1 C_{t-1} Ct1为上一时刻Cell状态
    输出门最终决定了LSTM模型的输出向量,计算公式如下:
    o t = σ ( W 0 ⋅ h t − 1 + U 0 ⋅ x t + b 0 ) o_t=σ(W_0·h_{t-1}+U_0·x_t+b_0) ot=σ(W0ht1+U0xt+b0)
    h t = o t ∗ t a n h ( C t ) h_t=o_t*tanh(C_t) ht=ottanh(Ct)
    其中, W 0 、 U 0 W_0、U_0 W0U0为参数矩阵, b 0 b_0 b0为偏置参数, h t h_t ht为当前LSTM的最终输出

    3.2.2 Bi-LSTM模型

    双向长短期记忆网络(Bi-LSTM):采用两个LSTM单元对输入序列进行处理,输出向量为两个LSTM输出向量的拼接。这个模型分别训练前后向序列兼顾了上下文信息,可以提取深层次的语义信息
    在这里插入图片描述

    展开全文
  • KBQA_zh 基于bert的KBQA,包含joint和pipeline两种模式 Introduction 本项目是一个基于知识三元组的简单的问答系统,分为joint和pipeline两种模式。joint模式为基于bert做意图识别和命名体识别的联合学习训练得到的...
  • 多语言KBQA数据集
  • COVID19-KBQA-DEMO COVID-2019 中文知识问答系统(SIMPLE DEMO) 将OpenKG数据转换为RDF导入Jena后采用SPARQL查询,QA采用refo模板。 这是一个简单的Demo,功能并不完善,需要增加更多的模板。 COVID19 轨迹关系...
  • KBQA技术小结

    2021-09-18 09:17:22
      KBQA(Knowledge Base Question Answer)是指将自然语言转换成知识库查询语句。KBQA方法主要有三类:模板法 [1,2]、语义解析法 [3,4,5]和信息检索法[1,6,7]。本文简要介绍每种方法的常见方案。 模板法   基于...
  • KBQA_BANK
  • KBQA相关知识

    2019-01-23 11:03:53
    码下来,慢慢看,谢谢各位的分享。 1.小象学院:王昊奋 2. 总结:...3. KBQA入门:https://zhuanlan.zhihu.com/kb-qa 4. 实战:https://zhuanlan.zhihu.com/knowledgegraph https://blog.csdn.net/k...
  • KBQA: 趋势浅谈

    千次阅读 2020-04-16 15:31:40
    KBQA百问十年大趋势语义解析槽位填充其他浪潮翻涌ACL 2019NIPS 2019AAAI 2019ICLR 2019下一个十年经典待用文段 百问 为更好地理解前人的创造是如何工作的,不如先对 QA 大背景下的所有问题进行统一的定义和分类。...
  • KBQA是个啥?

    2021-08-26 19:26:36
    什么是KBQA? KBQA的全称是基于知识库问答(Knowledge Base Question Answering),即给定自然语言问题,通过对问题进行语义理解和解析,进而利用知识库进行查询、推理得出答案。 知识库是用于知识管理的一种...
  • KBQA:基于Freebase的在线基于模板的问答系统
  • 两套KBQA系统

    2019-10-17 11:01:04
    此次使用的数据集来自NLPCC ICCPOL 2016 KBQA 任务集,其包含 14 609 个问答对的训练集和包含 9 870 个问答对的测试集。 并提供一个知识库,包含 6 502 738 个实体、 587 875 个属性以及 43 063 796 个 三元组。知.....
  • 快速入门 KBQA问答系统的实现

    千次阅读 2019-03-15 00:28:28
    KBQA问答系统的实现 首先默认你是已经学会了如何构建知识图谱,并且学会用sparql语言查询里面的知识库里面的知识。如果不会,请看下面的链接 使用D2RQ把关系数据库的信息转化为rdf文件。 使用jena 构建知识数据库...
  • KBQA问答系统流程

    千次阅读 2018-10-31 14:27:48
    KBQA()基于知识图谱的问答系统,大体流程是根据问句查询知识谱曲,然后根据知识图谱的信息生成一句答案返回给用户。 1、nlu(自然语言理解) 对于问答系统来说,自然语言理解就是要从自然语言当中提取query所提问...
  • COVID19-KBQA-DEMO COVID-2019中文知识问答系统(SIMPLE DEMO) 将OpenKG数据转换为RDF导入Jena后采用SPARQL查询,QA采用refo模板。 这是一个简单的Demo,功能并不完善,需要增加更多的模板。 COVID19 环境 Python...
  • KBQA知识图谱问答(一)SimpleQA

    千次阅读 2019-06-21 14:26:35
    针对KBQA简单QA数据集的三篇论文阅读
  • KBQA系统可以解析输入的自然语言问句,主要运用REFO库的"对象正则表达式"匹配得到结果, 进而生成对应 SPARQL 查询语句,再通过API请求后台基于TDB知识图谱数据库的 Apache Jena Fuseki 服务, 得到结果。...
  • KBQA-BERT 基于知识图谱的问答系统,BERT做命名实体识别和句子相似度 介绍 本项目主要由两个重要的点组成,一是基于BERT的命名实体识别,二是基于BERT的句子相似度计算,本项目将这两个模块进行融合,构建基于BERT的...
  • KBQA知识总结(学习笔记)

    千次阅读 2020-04-26 09:17:56
    KBQA知识总结 1.KBQA 1.1概念 基于知识图谱的问答(KBQA)–knowledge base question answering,通过对问题进行语义理解及解析,通过知识库进行查询。[1] 1.2 概述[4] 问答系统历史:基于模板的问答专家系统----->...
  • kbqa,欢迎大家star 基于知识图谱的中文症状问答系统,前端vue.js,后端springboot 开发语言是java,运行环境是windows 用到的技术:word2vec,doc2vec,编辑距离,词性标注,依存句法分析,scrapy,sparql 用到的...
  • KBQA: 知识图谱上的问答系统概述

    千次阅读 2019-10-18 10:02:08
    给定自然语言(NL)形式的问题,KBQA的目标是在潜在的知识图谱上自动寻求答案。这提供了一个更加自然更加直观的方式去访问大规模的潜在的知识资源。 KBQA的主要挑战在于词汇间隔(lexical gap)。例如同样的问题可以通过...
  • 基于ElasticSearch的问答系统(KBQA)

    千次阅读 热门讨论 2018-12-28 11:03:30
      在上一篇博客中,我们已经大概了解了KBQA的概念,也大概知道KBQA的流程,但是针对上篇博客提出的问题,修改数据,如何更简单的做到而对问答系统的影响效果最小呢?这里我就换成另一种方式,直接使用Elastic...
  • KBQA简介

    千次阅读 2020-04-16 21:01:22
    文章目录信息检索式的知识库问答确定中心实体问题答案排序语义解析式的知识库问答短语检测资源映射语义组合 自然语言问答 (QA) 是指利用各种技术和数据对用户提出的自然语言问题直接给出问题答案。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 776
精华内容 310
关键字:

kbqa