精华内容
下载资源
问答
  • 基于知识图谱的军事知识问答系统设计[J].信息技术,2020,44(12):121-124+128. [2]薛坤. 面向军事领域的知识图谱构建与应用研究[D].大连理工大学,2020. 目前,知识图谱已为多个方向和领域的产品研发及应用提供了技术...

    参考文献:
    [1]王震南,董宝良,田飞.基于知识图谱的军事知识问答系统设计[J].信息技术,2020,44(12):121-124+128.
    [2]薛坤. 面向军事领域的知识图谱构建与应用研究[D].大连理工大学,2020.
    目前,知识图谱已为多个方向和领域的产品研发及应用提供了技术支持,各个方面取得的成果如图所示。在这里插入图片描述

    本文基于知识图谱的军事问答系统流程如下:
    首先,利用爬虫框架Scrapy从互动百科、环球军事网等网站采集结构化和非结构化数据,并进行数据的处理与完善补充,然后基于这些数据的分类和各要素之间的内在关系进行了领域本体建模。

    (本体指的是知识图谱中对知识数据描述和定义的“元”数据,能够以一种统一的三元组格式表示实例型数据和描述型数据)

    本体的构建方法分为人工构建自动构建两种方式,人工构建需要确定领域及任务、体系复用、罗列要素、确定分裂体系、定义属性及关系和定义约束,因为在本体构建的进程中,会加深对知识的认知,需要退回到上一个阶段或者更早的阶段进行修改;自动构建就是自动的从数据种学习本体。

    其次,利用K最近邻算法(选取测试数据距离训练集中每一个数据的距离中最小的K个点)进行军事实体分类,构建军事实体库。
    采用BiLSTM-CRF算法完成军事实体识别任务,再利用PCNN算法(分段卷积神经网络模型)对实体间的关系进行抽取获得三元组信息,根据抽取到的知识构建军事知识图谱;

    BiLSTM-CRF算法将句子中的子向量作为双向长短期记忆网络的输入,通过提取句子特征,结合条件随机场进行句子级的序列标注,完成实体识别。长短期神经网络在传统的循环神经网络的基础上增加了遗忘门、输入门以及输出门三种门机制,通过门机制来选择上一时刻和当前时刻的信息,解决了长期依赖的问题

    最后,采用Neo4j图数据库存储数据,(采用Cypher语言,将数据导入到数据库中,导入的数据以图结构的形式存储到Neo4j图数据库中)在已构建的军事领域知识图谱上开发实现了军事实体的识别和查询、关系查询、军事知识概览、军事知识问答和图片检索等功能,对用户关心的军事信息进行更智能、更全面地反馈。

    展开全文
  • 基于知识图谱的自动问答系统,有代码,和说明文档,大家可以看看.很很好的知识图谱的入门案例代码
  • 知识图谱问答系统-论文分享两则

    千次阅读 2020-06-10 16:27:26
    本文主要聚焦问答系统(Q&A)的反问题—问题生成(Question Generation,Q&G)。问题生成的目的是在给定上下文和相应答案的情况下生成语义相关的问题,问题生成任务可分为两类:一类是基于规则的方

    论文一:Improving Question Generation with Sentence-level Semantic Matching and Answer Position Inferring

    论文链接:https://arxiv.org/pdf/1912.00879.pdf

    本文主要聚焦问答系统(Q&A)的反问题—问题生成(Question Generation,Q&G)。问题生成的目的是在给定上下文和相应答案的情况下生成语义相关的问题,问题生成任务可分为两类:一类是基于规则的方法,即在不深入理解上下文语义的情况下手动设计词汇规则或模板,将上下文转换成问题。另一类是基于神经网络的、直接从语句片段中生成问题词汇的方法,包括序列-序列模型(seq-to-seq)、编码器解码器(encoder-decoder)等。本文讨论的是后一种基于神经网络的问题生成方法。
    目前,基于神经网络的问题生成模型主要面临以下两个问题:(1)错误的关键词和疑问词:模型可能会使用错误的关键词和疑问词来提问;(2)糟糕的复制机制:模型复制与答案语义无关的上下文单词。本文旨在解决以上两个问题。

    本文的亮点主要包括:
    (1)以多任务学习的方式学习句子级语义
    (2)引入答案位置感知。

    与现有的问答系统、问题生成模型的处理方式不同,本文并不是通过引入更多的有效特征或者改进复制机制本身等来改进模型效果,而是直接在经典序列-序列模型(seq-to-seq)中增加了两个模块:句子级语义匹配模块和答案位置推断模块。此外,利用答案感知门控融合机制来增强解码器的初始状态,从而进一步改进模型的处理效果。

    论文二:Stepwise Reasoning for Multi-Relation Question Answering over Knowledge Graph with Weak Supervision

    论文链接:https://dl.acm.org/doi/abs/10.1145/3336191.3371812

    知识图谱问答(KG-QA)系统大多包含两个步骤:链接问题中的topic entity到KG,然后识别问题所指的在KG中的最相关的关系。根据获取答案所需的KG三元组的数量,可以将自然语言问题分成单一关系问题和多关系问题两种。
    现有的KG-QA方法可以分成两个主流的分支。
    第一种主要致力于学习一个能够将非结构化的问题转换为结构化表示的语义解析器(Semantic Parser, SP),其中传统的基于SP的方法利用诸如SPARQL、λ-DCS和λ-calculus之类的逻辑形式,但这就要求用户熟悉这些逻辑形式的语法和后台数据结构,而且预测所得的结构和和KG的结构之间存在的不匹配的情况也会限制模型的表现。因此最近的研究使用query graph来表示问题的语义结构,这样可以取得较好的结果,但以人工标注成本作为代价,因此难以用于其它领域,且依赖于成熟的NLPpipelines,会有错误的叠加。
    另外一个分支的方法利用以topic entity为中心的子图获取候选答案,且将问题和每个候选子图编码为同一个嵌入空间的语义向量,利用嵌入相似度排序,其中神经网络可以较好地用以表示问题和KG成分。这一类方法可以端到端地训练,且有泛化到其他领域的可能,但在多关系问题上表现不是很好。
    因此,对于后一类方法,最近的研究工作致力于提高多关系问题上的推理能力。然而还有以下几个挑战:(1) 时间复杂度过高,因为现有的方法对于每个问题都需要用到整个以topic entity为中心的子图,使得候选答案个数以指数级上升。(2) 语义信息太复杂,因为多关系问题中的每一个部分都对三元组选择有各自的影响,故需要在不同步骤里关注问题中的不同部分,而许多现有的方法没有对多关系问题作更进一步的分析,因此表现很差。(3) 需要使用弱监督来训练,因为一步步地分析到底如何回答一个多关系问题是不现实的,这需要大量的数据标注。实际的标注只有最终的答案,因此是弱监督的。有些工作使用外部知识(如Wikipediafree text)来丰富分布式表示,但这种操作不适用于没有外部知识的某些特定领域。
    针对以上挑战,本文提出了一个基于强化学习的神经网络模型“Stepwise Reasoning Network (SRN)”。贡献如下:
    (1) 针对第一个挑战,SRN将多关系问题的回答形式化为一个顺序决策问题,通过学习一个从topic entity开始,在KG中执行路径搜索的策略来得到一个自然语言问题的答案,并使用beam search在每一步获取三元组列表,因此可以不考虑整个以topic entity为中心的子图,进而显著减少对于一个问题的候选答案。
    (2) 针对第二个挑战,SRN使用注意力机制决定当前关注哪一个部分以获取问题中不同部分的独特的信息,在每一步使用对应的单层感知机以强调三元组选择的顺序,使用GRU网络来编码决策历史。
    (3) SRN使用REINFORCE算法进行端到端训练。针对第三个挑战,特别是在弱监督、多关系问题的情况下存在的一系列问题,SRN使用基于potential 的reward shaping方法来为agent提供额外的rewards,该方法不会使得agent偏离真正的目标,也不需要外部知识。
    (4) 通过实验证明了方法的有效性,在3个benchmark数据集上进行了ablationstudy。

    展开全文
  • Python+Neo4j医药知识图谱自动问答系统源码,知识图谱构建,自动问答,基于kg的自动问答。以疾病为中心的一定规模医药领域知识图谱,并以该知识图谱完成自动问答与分析服务。
  • 复旦大学博士论文系统而全面地介绍了基于知识图谱的智能问答相关关键技术
  • 基于电影知识图谱的智能问答系统,有助于搭建基于import-基于电影知识图谱的智能问答系统
  • 本代码实现是基于python实现的基于复旦大学崔万云博士的learing question answering over corpora and konwlege bases ,代码实现与论文有所出入,原因是本实现用的语料是中文做...,其中命名实体认为论文有太多欠缺...
  • 十几篇有关医学行业的知识图谱构建及应用的相关毕业论文。包括关系抽取、知识挖掘与发现、自动问答系统等。
  • 肖仰华 | 基于知识图谱问答系统

    万次阅读 多人点赞 2017-09-18 00:00:00
    本文整理自复旦大学知识工场肖仰华教授在VLDB 2017 会议上的论文报告,题目为《KBQA: Learning Question Answering over QA Corpora and Knowledge Bases》,作者包括:崔万云博士(现上海财经大

    本文转载自公众号知识工场


                                                  

    本文整理自复旦大学知识工场肖仰华教授在VLDB 2017 会议上的论文报告,题目为《KBQA: Learning Question Answering over QA Corpora and Knowledge Bases》,作者包括:崔万云博士(现上海财经大学讲师),肖仰华教授(复旦大学)等等。


    VLDB (Very Large Data Base) 是数据库领域最顶尖的国际会议之一,被中国计算机学会推荐国际学术会议列表认定为 A 类会议。涵盖数据库系统、数据管理、大数据处理、数据挖掘等各个研究领域,是展现数据库前沿科研成果以及探讨数据库未来发展方向的盛会。


    肖仰华:大家好,非常高兴能在这里与大家分享我们的论文。


    问答系统(QA)已经成为人类访问十亿级知识图谱的流行方式,它回答的是自然语言问题。 QA系统最有名的故事之一就是IBM WATSON在2011年参加了Jeopardy竞赛,打败了所有人类竞争对手,获得了100万美元的奖励。



    QA的研究非常重要。首先,从应用角度来看,QA系统降低了人机交互的门槛, 非常适合成为互联网的新入口。作为聊天机器人的重要组件,吸引了来自工业界的大量关注。

    从人工智能角度来看,QA是评估机器智能的一个重要任务,也就是图灵测试。同时,QA还是许多AI技术的重要测试平台,比如机器学习,自然语言处理,机器认知等等




    现在我们来谈谈知识库。近年来,我们目睹了知识库的发展,越来越多的大规模知识库涌现出来,如Google Knowledge graph,Yago和Freebase等。这些知识库具有体量大,质量高的特点。

    一个知识库包含了大量的结构化数据。右图给出了一个关于Obama的知识图谱示例。知识库中的每一个三元组代表一个知识或某个事实。 例如,一个三元组(d,人口,390k)表示檀香山的人口为390k。




    KBQA指的是以知识库作为答案来源的问答系统。

    那么它是如何工作的呢?关键在于将自然语言问题转换为知识库上的结构化查询。例如,要回答“有多少人住在檀香山?”这个问题,我们需要将其转移到SPARQL或者SQL查询。 这里的关键问题是属性推断。


    关于属性推断,我们面临两个挑战。

    第一个挑战是问题表示。对于任意一个QA系统,我们需要一个具有代表性的问题表示来帮助识别具有相同语义的问题,同时区分不同意图的问题。

    第二个挑战是语义匹配,如何将问题表示映射到知识库中的结构化查询?



    然而,之前的解决方案并不能解决上述提出的挑战。

    我们研究了两个主流的解决方案。

    第一个是基于模板/规则的方法。这个方法用模板表示句子,语义解析往往通过人工标记来实现。这种方法的优点是它的结果是用户可控的,这使得它更适用于工业用途。缺点是严重依赖人工,成本太高,昂贵的人力成本使得它无法处理多样性的问题。

    另一个是基于神经网络的方法。最近这种做法很受欢迎,它们通过embedding的方式来表示一个问题,并从QA语料库中学习出它的语义解析。这种方法的优点是embedding是灵活的,所以它可以理解各种各样的问题。缺点是基于神经网络的方法通常具有较差的解释性,此外,结果是不可控的,所以他们并不适用于工业应用。

    因此,我们不禁会想:能不能提出一种新的方法兼备这两种方法的优点?



    为了做到这一点,我们用模板来表示自然语言问题。 例如,“檀香山有多少人?”的模板成为“城市里有多少人?”。因为使用了模板作为问题表示,我们的方法具有可解释性和用户可控性。

    然而,我们并不是手动标记模板,而是从QA语料库中自动学习模板。 最终,我们为2,782个意图学到了2,700万个模板,这么大量的数据保证我们可以理解不同的问题。


    这个系统体系结构如图所示。它主要包括两个过程:离线预处理部分和在线QA部分。

    我们先来看看离线过程,离线过程的目标是学习出从模板到属性的映射。

    再来看在线部分,当一个问题进来,系统首先将其解析和分解为一组二元事实型问题。对于每个二元事实型问题,系统使用概率推断来寻找它的值。这个推断是基于给定模板的属性分布来得到的。



    接下来,我们对这个问题进行形式化定义。给定问题q,问答系统的目标是寻找具有最大概率的答案v(其中,v是一个简单值)。

    我们提出了一个生成模型来解释如何为一个问题找到它的答案。

    我们认为使用概率推断的方法来做KBQA是非常合理的。首先,一些问题的意图是模糊的。其次,大多数知识库都是不完整的。最后,QA语料库中的答案也可能是错误的。





    我们以这个问答对来说明这个生成过程。


    从用户问题q开始,我们首先生成或者说识别出其中对应的知识库中的实体d。


    在知道问题和实体之后,我们根据d的概念分布生成模板t。 这样,我们得到了一个模板“有多少人住在某城市?”



    由于属性只与模板有关,所以我们推断出这个属性的模板为“population”。


    最后,给定实体d和属性population,我们通过查找知识库来得到它的答案。



    通过这种方法,我们完成了从一个自然语言问题到生成答案的整个过程。这个过程可以建模为一个概率图模型。

    基于这个生成模型,可以得到一个联合概率分布,进而用来解决给定其他变量求最大v的条件概率问题。



    下一个问题是如何计算出联合概率分布公式中的每一种概率。

    我们可以从语料库直接估计出来大部分的概率。例如实体分布的概率,模板分布的概率以及值分布的概率。

    我们从雅虎问答的4200万的QA pairs中,学习出问题模板和属性的映射关系。表中展示了QA语料库中的一些例子。




    最后我们来估计P(P|T)的值。基本思路是将P(P|T)作为参数,然后使用极大似然法来估计P(P|T)。

    这里我们使用了EM算法来进行参数估计。



    KBQA的另一个难点就是回答复杂问题。在面对复杂问题时,我们采用了分治算法。首先,系统把问题分解为一系列的二元事实型问题,然后系统依次回答每个问题。每个问题的答案都是一个概率,我们通过动态规划算法找到最优分解。



    接下来我们来看看实验部分。我们首先通过实验证明属性推断的有效性。我们从学习出的属性数量和模板数据来对比我们的方法和bootstrapping方法。结果表明,我们的KBQA方法能得到更多的属性和模板, 这意味着KBQA在属性推理中更有效。大量的模板可以确保KBQA理解不同的问题模板,同时,大量的属性可以确保KBQA理解不同的关系。


    我们也在很多benchmarks上用到了我们的KBQA。图为QALD-5的结果。结果表明,KBQA具有最高的准确度。由于KBQA只回答二元事实型问题,因此召回率相对较低。如果我们只考虑二元事实型问答,召回率能上升到0.67。


    即使在一个不以二元事实型问题为主的数据集中(如WEBQUESTIONS,QALD-3),KBQA也可以作为混合问答系统的一个完美组件。


    我们这样构建混合问题系统:一个问题过来,首先提交给我们的KBQA系统。如果KBQA系统不能回答,这意味着这个问题很可能不是二元事实型问题。然后,我们再将这个问题提交给baseline系统。


    结果表明,当使用了我们的KBQA系统后,baseline系统的性能都有了很明显的提高。

    最后,我们对本文进行总结。我们构建了一个基于知识库的问答系统KBQA。 我们的QA系统和以前的系统有两个明显区别:第一,它使用模板理解问题;第二,它从非常大的QA语料库中学习语义解析。


    我们认为系统还有很多可以改进的地方。 首先,目前关于QA系统的研究主要建立在开放领域的知识库上。因此,研究如何使这些系统适应不同特定领域的应用是非常重要的。 其次,我们希望可以通过常识推理来更深入的理解问题。 再者,由于知识库仍然存在数据缺陷问题,如何使用互联网作为外部知识变得非常重要。

     获取论文和完整PPT

    关注“知识工场”微信公众号,回复“20170907”获取下载链接。



    以上就是肖仰华教授在VLDB 2017 会议上为大家带来的全部内容。知识工场实验室后续将为大家带来更精彩的文章。请大家关注!

              



    OpenKG.CN


    中文开放知识图谱(简称OpenKG.CN)旨在促进中文知识图谱数据的开放与互联,促进知识图谱和语义技术的普及和广泛应用。

    点击阅读原文,进入 OpenKG 博客。

    展开全文
  • 电影知识图谱问答系统项目总结

    千次阅读 2019-03-06 22:35:17
    本次问答系统是复现实验,使用rdf作为知识存储的工具,原始的项目源码,原始参考:知乎专栏 作者源码是python2写的,我将其改写为python3,更改后项目源码链接,提取码:8fk4 在复现系统的过程中将自己遇到的一些...

    本次问答系统是复现实验,使用rdf作为知识存储的工具,原始的项目源码,原始参考:知乎专栏

    作者源码是python2写的,我将其改写为python3,更改后项目源码链接,提取码:8fk4

    在复现系统的过程中将自己遇到的一些问题记录下来,方便自己以后查阅以及让读者少走一些弯路

    源码文件结构展示:

    项目的主逻辑文件在 ./KG-demo-for-movie-master/kg_demo_movie下,其中crawler文件夹用于爬取数据,由于数据原作者已给出,所以这个文件夹不用,另一个文件夹KB_query,其子文件(如下图)为问答的逻辑文件

    • "external_dict"包含的是人名和电影名两个外部词典。csv文件是从mysql-workbench导出的,按照jieba外部词典的格式,我们将csv转为对应的txt。

    • "word_tagging",定义Word类的结构(即我们在REfO中使用的对象);定义"Tagger"类来初始化词典,并使用jieba对句子进行分词和词性标注,并实现自然语言到Word对象的方法,运行效果如下:

    • "jena_sparql_endpoint",用于完成与Fuseki的交互。首先我们需要启动fuseki服务,下载解压Apache-Jena和Apache-Jena-fuseki,下载地址:清华镜像站(fuseki使用方法请看我的另一篇博客),Jena我们后面用,先看Jena_fuseki

    进入fuseki文件夹,双击fuseki-server.bat脚本文件,出现如图所示的界面

    然后我们用浏览器访问:http://localhost:3030

     

    查询输入如下代码: 

    PREFIX : <http://www.kgdemo.com#>
    PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    
    SELECT DISTINCT ?x WHERE {
    ?p :personName '周润发'.?p :hasActedIn ?m.?m :movieTitle ?x.?m :movieRating ?r.filter(?r >7)
    }

    查询效果如下图: 

    这样fuseki服务器就启动好了,接下来在回到代码,在代码中访问fuseki服务,获取其返回值,例如我们查询周星驰的电影:

    my_query = """
            PREFIX : <http://www.kgdemo.com#>
            PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
            PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
            
            SELECT DISTINCT ?x WHERE {
            ?s :personName '周星驰'.?s :hasActedIn ?m.?m :movieTitle ?x
            }
            limit 1000
        """

    代码输出效果:

    {'head': {'vars': ['x']}, 'results': {'bindings': [{'x': {'type': 'literal', 'value': '鹿鼎记 II : 神龙敎'}}, {'x': {'type': 'literal', 'value': 'Xiao tou a xing'}}, {'x': {'type': 'literal', 'value': '武状元苏乞儿'}}, {'x': {'type': 'literal', 'value': '最佳女婿'}}, {'x': {'type': 'literal', 'value': '大内密探零零发'}}, {'x': {'type': 'literal', 'value': '刑警本色'}}, {'x': {'type': 'literal', 'value': '长江七号'}}, {'x': {'type': 'literal', 'value': '无敌幸运星'}}, {'x': {'type': 'literal', 'value': '睹侠'}}, {'x': {'type': 'literal', 'value': '群星会'}}, {'x': {'type': 'literal', 'value': '少林足球'}}, {'x': {'type': 'literal', 'value': 'Man hua wei long'}}, {'x': {'type': 'literal', 'value': '师兄撞鬼'}}, {'x': {'type': 'literal', 'value': '整蛊专家'}}, {'x': {'type': 'literal', 'value': '逃学威龙'}}, {'x': {'type': 'literal', 'value': '审死官'}}, {'x': {'type': 'literal', 'value': 'Yi ben man hua chuang tian ya II miao xiang tian ka'}}, {'x': {'type': 'literal', 'value': '97 ga yau hei si'}}, {'x': {'type': 'literal', 'value': '阴阳界'}}, {'x': {'type': 'literal', 'value': '算死草'}}, {'x': {'type': 'literal', 'value': '龙的传人'}}, {'x': {'type': 'literal', 'value': '特技猛龙'}}, {'x': {'type': 'literal', 'value': '咖喱辣椒'}}, {'x': {'type': 'literal', 'value': '幸运一条龍'}}, {'x': {'type': 'literal', 'value': '喜剧之王'}}, {'x': {'type': 'literal', 'value': '龙在天涯'}}, {'x': {'type': 'literal', 'value': '望夫成龙'}}, {'x': {'type': 'literal', 'value': '破坏之王'}}, {'x': {'type': 'literal', 'value': '回魂夜'}}, {'x': {'type': 'literal', 'value': '济公'}}, {'x': {'type': 'literal', 'value': '捕风汉子'}}, {'x': {'type': 'literal', 'value': '神击大道'}}, {'x': {'type': 'literal', 'value': '国产凌凌漆'}}, {'x': {'type': 'literal', 'value': '龙凤茶楼'}}, {'x': {'type': 'literal', 'value': '千王之王 2000'}}, {'x': {'type': 'literal', 'value': 'Film ohne Fesseln - Das neue Hongkong Kino'}}, {'x': {'type': 'literal', 'value': '西游记第壹佰零壹回之月光宝盒'}}, {'x': {'type': 'literal', 'value': '新精武门1991'}}, {'x': {'type': 'literal', 'value': '百变星君'}}, {'x': {'type': 'literal', 'value': '江湖最后一个大路'}}, {'x': {'type': 'literal', 'value': '赌圣'}}, {'x': {'type': 'literal', 'value': '功夫'}}, {'x': {'type': 'literal', 'value': '风雨同路'}}, {'x': {'type': 'literal', 'value': '义胆群英'}}, {'x': {'type': 'literal', 'value': 'Fei zhou he shang'}}, {'x': {'type': 'literal', 'value': '豪门夜宴'}}, {'x': {'type': 'literal', 'value': '食神'}}, {'x': {'type': 'literal', 'value': '流氓差婆'}}, {'x': {'type': 'literal', 'value': '唐伯虎点秋香'}}, {'x': {'type': 'literal', 'value': '赌覇'}}, {'x': {'type': 'literal', 'value': '西游记大结局之仙履奇缘'}}, {'x': {'type': 'literal', 'value': '英雄本色'}}, {'x': {'type': 'literal', 'value': '九品芝麻官之白面包靑天'}}, {'x': {'type': 'literal', 'value': '一本漫画天涯'}}, {'x': {'type': 'literal', 'value': 'Final Justice'}}, {'x': {'type': 'literal', 'value': '建国大业'}}, {'x': {'type': 'literal', 'value': '琉璃樽'}}, {'x': {'type': 'literal', 'value': '逃学威龙 II'}}, {'x': {'type': 'literal', 'value': '家有囍事'}}, {'x': {'type': 'literal', 'value': '鹿鼎记'}}, {'x': {'type': 'literal', 'value': '逃学威龙 III 龙过鸡年'}}, {'x': {'type': 'literal', 'value': '赌侠 III 之上海滩赌圣'}}]}}
    ['鹿鼎记 II : 神龙敎', 'Xiao tou a xing', '武状元苏乞儿', '最佳女婿', '大内密探零零发', '刑警本色', '长江七号', '无敌幸运星', '睹侠', '群星会', '少林足球', 'Man hua wei long', '师兄撞鬼', '整蛊专家', '逃学威龙', '审死官', 'Yi ben man hua chuang tian ya II miao xiang tian ka', '97 ga yau hei si', '阴阳界', '算死草', '龙的传人', '特技猛龙', '咖喱辣椒', '幸运一条龍', '喜剧之王', '龙在天涯', '望夫成龙', '破坏之王', '回魂夜', '济公', '捕风汉子', '神击大道', '国产凌凌漆', '龙凤茶楼', '千王之王 2000', 'Film ohne Fesseln - Das neue Hongkong Kino', '西游记第壹佰零壹回之月光宝盒', '新精武门1991', '百变星君', '江湖最后一个大路', '赌圣', '功夫', '风雨同路', '义胆群英', 'Fei zhou he shang', '豪门夜宴', '食神', '流氓差婆', '唐伯虎点秋香', '赌覇', '西游记大结局之仙履奇缘', '英雄本色', '九品芝麻官之白面包靑天', '一本漫画天涯', 'Final Justice', '建国大业', '琉璃樽', '逃学威龙 II', '家有囍事', '鹿鼎记', '逃学威龙 III 龙过鸡年', '赌侠 III 之上海滩赌圣']
    

     当然,如果代码真的这样写的话就是硬编码了,代码就被写死了,我们需要的效果是用户输入一句自然语言我们可以解析出一条查询语句,然后向fuseki服务器请求,如何将问句转换成sparql? 

    • "question2sparql",这个文件就是将自然语言转为对应的SPARQL语句,看懂这个代码之前,我们需要知道基于规则的匹配

    • "question_temp",这个文件定义了SPARQL模板和匹配规则,我们就是通过这个匹配规则将自然语言转换成sparql的,主要的一些规则如下,当然这个只是句子的规则,还有词法的规则

    rules = [
        Rule(condition_num=2, condition=person_entity + Star(Any(), greedy=False) + movie + Star(Any(), greedy=False), action=QuestionSet.has_movie_question),
        Rule(condition_num=2, condition=(movie_entity + Star(Any(), greedy=False) + actor + Star(Any(), greedy=False)) | (actor + Star(Any(), greedy=False) + movie_entity + Star(Any(), greedy=False)), action=QuestionSet.has_actor_question),
        Rule(condition_num=3, condition=person_entity + Star(Any(), greedy=False) + person_entity + Star(Any(), greedy=False) + (movie | Star(Any(), greedy=False)), action=QuestionSet.has_cooperation_question),
        Rule(condition_num=4, condition=person_entity + Star(Any(), greedy=False) + compare + number_entity + Star(Any(), greedy=False) + movie + Star(Any(), greedy=False), action=QuestionSet.has_compare_question),
        Rule(condition_num=3, condition=person_entity + Star(Any(), greedy=False) + category + Star(Any(), greedy=False) + movie, action=QuestionSet.has_movie_type_question),
        Rule(condition_num=3, condition=person_entity + Star(Any(), greedy=False) + genre + Star(Any(), greedy=False) + (movie | Star(Any(), greedy=False)), action=QuestionSet.has_specific_type_movie_question),
        Rule(condition_num=3, condition=person_entity + Star(Any(), greedy=False) + several + Star(Any(), greedy=False) + (movie | Star(Any(), greedy=False)), action=QuestionSet.has_quantity_question),
        Rule(condition_num=3, condition=person_entity + Star(Any(), greedy=False) + comedy + actor + Star(Any(), greedy=False), action=QuestionSet.is_comedian_question),
        Rule(condition_num=3, condition=(person_entity + Star(Any(), greedy=False) + (when | where) + person_basic + Star(Any(), greedy=False)) | (person_entity + Star(Any(), greedy=False) + person_basic + Star(Any(), greedy=False)), action=QuestionSet.has_basic_person_info_question),
        Rule(condition_num=2, condition=movie_entity + Star(Any(), greedy=False) + movie_basic + Star(Any(), greedy=False), action=QuestionSet.has_basic_movie_info_question)
    ]

    我们仔细观察,这些规则其实都是将人问问题的模式都考虑到了,如果你想法奇特,问了一个天马行空的问题,那系统就理解不了这句话,无法生成sparql进行查询,我们举个例子:我们问“周润发演了什么电影”,它就会匹配到上述规则的第一条,因为规则一condition后面跟的规则,首先就是person_entity人物实体,然后随便你再说点什么,它会匹配到Star(Any(), greedy=False),然后你提到电影这两个字,它会匹配到movie,后边你说或者不说话,它会匹配到Star(Any(), greedy=False);那么你可能就问了,凭什么周润发就能匹配到是一个人物实体?是这样,我们前面不是对句子进行了分词和词性标注吗,凡是标注为nr,我就认为这是个人物实体,标注为nz,我就认为是一个电影实体,另外还定义了很多其他比如电影分类、生日、出生地等,有了这些定义好的变量我们就可以进行匹配识别了

    pos_person = "nr"
    pos_movie = "nz"
    pos_number = "m"
    
    person_entity = (W(pos=pos_person))
    movie_entity = (W(pos=pos_movie))
    number_entity = (W(pos=pos_number))
    
    adventure = W("冒险")
    fantasy = W("奇幻")
    animation = (W("动画") | W("动画片"))
    drama = (W("剧情") | W("剧情片"))
    thriller = (W("恐怖") | W("恐怖片"))
    action = (W("动作") | W("动作片"))
    comedy = (W("喜剧") | W("喜剧片"))
    history = (W("历史") | W("历史剧"))
    western = (W("西部") | W("西部片"))
    horror = (W("惊悚") | W("惊悚片"))
    crime = (W("犯罪") | W("犯罪片"))
    documentary = (W("纪录") | W("纪录片"))
    science_fiction = (W("科幻") | W("科幻片"))
    mystery = (W("悬疑") | W("悬疑片"))
    music = (W("音乐") | W("音乐片"))
    romance = (W("爱情") | W("爱情片"))
    family = W("家庭")
    war = (W("战争") | W("战争片"))
    TV = W("电视")
    genre = (adventure | fantasy | animation | drama | thriller | action
             | comedy | history | western | horror | crime | documentary |
             science_fiction | mystery | music | romance | family | war | TV)
    
    actor = (W("演员") | W("艺人") | W("表演者"))
    movie = (W("电影") | W("影片") | W("片子") | W("片") | W("剧"))
    category = (W("类型") | W("种类"))
    several = (W("多少") | W("几部"))
    
    higher = (W("大于") | W("高于"))
    lower = (W("小于") | W("低于"))
    compare = (higher | lower)
    
    birth = (W("生日") | W("出生") + W("日期") | W("出生"))
    birth_place = (W("出生地") | W("出生"))
    english_name = (W("英文名") | W("英文") + W("名字"))
    introduction = (W("介绍") | W("是") + W("谁") | W("简介"))
    person_basic = (birth | birth_place | english_name | introduction)
    
    rating = (W("评分") | W("分") | W("分数"))
    release = (W("上映"))
    movie_basic = (rating | introduction | release)
    
    when = (W("何时") | W("时候"))
    where = (W("哪里") | W("哪儿") | W("何地") | W("何处") | W("在") + W("哪"))

    这样匹配好之后就会调用规则中的 action = QuestionSet.has_movie_question,这个函数来生成sparql

     def has_movie_question(word_objects):
            select = u"?x"
            sparql = None
            for w in word_objects:
                if w.pos == pos_person:
                    e = u"?s :personName '{person}'." \
                        u"?s :hasActedIn ?m." \
                        u"?m :movieTitle ?x".format(person=w.token.decode('utf-8'))
    
                    sparql = SPARQL_SELECT_TEM.format(prefix=SPARQL_PREXIX,
                                                      select=select,
                                                      expression=e)
                    break
            return sparql
    • "query_main",main函数,用户运行程序的入口函数,在启动这个程序之前,需要先启动fuseki服务器,如上所述。

    主函数运行效果如下:

    以上是这个项目的大概思路,其中用到的D2R,从关系数据库中提取rdf,使用Jena进行推理等,我这里并没有涉及,我的另一篇博客中有关于D2R的介绍。

    总结:这种基于规则的问答可解释性比较强,如果某个问题解析错误,我们只要找到对应的匹配规则进行调试即可;相对于深度学习的端到端黑盒模型,如果有的地方问答出现谬误,我们并不能准确给出其原因,也并不能立即找到合适的解决方案;这种问答模型比较适合固定的业务领域,适合问题数量和问题模式可数可罗列的情况,我们可以将规则做的很细致,将其鲁棒性调试到最优,让其有很强的泛化能力;但是,如果用于开放领域的问答,那么问题的数量将是不可数的,我们没办法做出足够多的规则去匹配,这就需要借助一些机器学习和深度学习的方法;在没有数据或者数据极少的情况下,我们可以利用正则规则马上上线一个初级的问答系统。在现实情况中,由于上述优点,工业界也比较青睐用正则来做语义解析。基于规则的缺陷也是显而易见的,它并不能理解语义信息,而是基于符号的匹配。换个角度说,用规则的方法,就需要规则的设计者能够尽可能考虑到所有情况,然而这是不可能的。暂且不考虑同义词、句子结构等问题,光是罗列所有可能的问题就需要花费很大的功夫。尽管如此,在某些垂直领域,比如“音乐”,“电影”,由于问题集合的规模在一定程度上是可控的,基于规则的问答系统还是有很大的用武之地的。

    展开全文
  • 来自OPENKG的[论文浅尝],内容涉及信息抽取、知识推理、知识问答、推荐系统知识融合等多个方向,共90篇
  • 知识图谱问答系统中的应用综述,刘俪婷,师文轩,从基于关键词匹配、信息抽取并基于浅层语义分析的IR-based QA到依赖于网民贡献的问答系统,再到基于知识库的问答系统,甚至问答系统
  • 基于知识图谱问答系统(KBQA)

    万次阅读 多人点赞 2018-12-27 12:00:26
      KBQA简单讲就是将问题带入提前准备好的知识库寻求答案的一种基于知识库的问答系统。该问答系统可以解析输入的自然语言问句,主要运用REFO库的对象正则表达式匹配得到结果,然后利用对应的SPARQL查询语句,请求.....
  • 基于知识图谱与Solr的问答系统研究与实现,邢世样,张闯,本文针对传统搜索引擎信息过载,用户无法获取精确信息等问题,提出了基于知识图谱与搜索引擎框架Solr的智能问答系统。针对用户输��
  • 清华大学人工智能研究院院长张钹院士2020年发表署名文章,首次全面阐述第三代人工智能的理念,提出第三代人工智能的发展路径是融合第一代的知识驱动和第二代的数据驱动的人工智能。基于知识图谱的推...
  • 一种改进的基于序列到序列框架的知识图谱问答方法,刘彦志,程祥,知识图谱问答系统能根据图谱中的结构化知识回答自然语言问题。在知识图谱问答系统中,将自然语言问句映射为结构化查询语句是关键
  • 包括了事件抽取、关系抽取、NER、实体消歧、知识表示、问答系统知识图谱论文,适合入门学习。
  • 基于知识图谱的《红楼梦》人物关系可视化及问答系统
  • 基于分层注意力机制的知识图谱问答方法,郎爽,朱署光,知识图谱问答能够根据知识图谱中的结构化知识回答自然语言问题。由于自然语言与结构化查询难以直接对应,该映射过程成为知识图谱
  • 基于知识图谱问答系统

    千次阅读 2018-06-10 21:27:23
    基于知识图谱问答系统 一.准备工作: 1.下载好java8,并用mysql创建好数据库–重点在于存储数据 2.spark安装–用来进行提问问题的分类算法的编写 3.进行neo4j–用来存储mysql对应的数据库的关系–重点在于存储...
  • https://github.com/BshoterJ/awesome-kgqa https://blog.csdn.net/Ljuice/article/details/107980180 知识图谱/知识库问答论文整理(含可用代码、数据集) 近期开始涉猎知识库问答,这会是我第二篇论文的起始点,同时...
  • 基于知识图谱的智能问答系统

    千次阅读 2020-05-31 12:47:52
    公众号关注“ML_NLP” 设为 “星标”,重磅干货,第一时间送达! 来自 |知乎 ...编辑 |机器学习算法与...由于本实验室目前正在使用知识图谱搭建问答系统,故而这里将使用知识图谱的方式构建该智能问答系统。这里...
  • 1. An Interpretable Reasoning Network for Multi-Relation Question Answering(基于可解释推理网络的多关系自动问答) 作者:Mantong Zhou,Minlie Huang,Xiaoyan Zhu 摘要:Multi-relation Question ...
  • 知识图谱初学经典论文10篇

    千次阅读 2021-11-27 19:58:42
    人工智能正由感知智能向认知智能演化,让机器具备认知智能,其核心就是让机器...知识图谱Topic必读论文 知识图谱的概念最早起源于Google在2012年提出的Knowledge Graph。知识图谱本质上是一种语义网络。其结点代表实体
  • 基于知识图谱问答系统(下)

    千次阅读 热门讨论 2020-03-12 06:03:36
    基于知识图谱问答系统(下) 本项目是基于知识图谱问答系统,BERT+BILSTM+CRF做命名实体识别和句子相似度比较,最后实现线上的部署。 项目的分以下步骤进行描述: 1-项目介绍 - 1.1-数据集介绍 - 1.2-技术方案...
  • 基于电影知识图谱的智能问答系统系列章节传送门: 基于电影知识图谱的智能问答系统(一) -- Mysql数据准备 基于电影知识图谱的智能问答系统(二) -- Neo4j导入CSV文件 基于电影知识图谱的智能问答系统(三) ...
  • 每天给你送来NLP技术干货!来自:美团技术团队作者:如寐 梁迪 思睿等知识图谱问答(Knowledge-based Question Answering, KBQA)是指给定自然语言问题,...
  • 平时除了看论文还是看论文,感觉有点无聊,于是嘛就想着搞点东西来玩玩,然后就搞了一个非常简单的基于知识图谱的电影问答系统系统是用python实现的,大概只花了1天吧,代码也仅有300多行,可以说是很容易上手了。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,512
精华内容 1,404
关键字:

知识图谱问答系统论文