NLP /任务.回答 - 从数据库中检索信息

mat*_*att 4 .net sql-server nlp artificial-intelligence nlp-question-answering

我最近一直在读NLP,到目前为止,我已经对一切工作方式有了一个(非常)基本的概念,从句子分割到POS标记,以及知识表示.

我知道有很多种NLP库(主要是Java或Python)并且已经找到了.NET实现(SharpNLP).实际上这很棒.无需编写任何自定义处理逻辑; 只是使用他们的功能和瞧!用户输入分离良好且带有POS标记.

我不明白的是从这里开始,如果我的主要动机是建立一个问答系统(类似于聊天机器人).我可以使用哪些库(最好是.NET)?如果我想构建自己的KB,我应该如何表达我的知识?我是否需要将POS标记的输入解析为我的数据库可以理解的其他内容?如果我使用MS SQL,是否有任何库可以帮助将POS标记输入映射到数据库查询?或者我是否需要编写自己的数据库查询逻辑,根据程序语义(我读过)?

当然,下一步是制定一个构造良好的答复,但我想我可以留待以后再做.现在困扰我的是这个领域缺乏资源(知识表示,NLP到KB/DB检索),如果你们中的任何人能够提供你的专业知识,我真的很感激:)

mjv*_*mjv 8

这是一个非常广泛的问题,因此它几乎不适合StackOverflow的格式,从来没有像我想要的那样刺激它.

首先,关于NLP
一句话NLP领域中成熟工具的广泛可用性本身就有些误导.当然,所有/大多数NLP功能,例如,从 POS标记分块自动摘要命名实体识别,通常由各种库的逻辑和支持数据很好地服务.然而,从这些构建块构建现实世界的解决方案并非易事.一个人需要:

  • 在某种管道或链条上构建解决方案,从而将特定转换的结果输入后续流程的输入.
  • 配置各个过程:这些过程的计算框架已经很好地建立,但它们对底层数据非常敏感,例如训练/参考语料库,可选的调整参数等.
  • 选择并验证正确的功能/过程.

对于与文本中的语义元素的提取和处理相关联的部分解决方案(上述信息提取,但也参考消歧,关系提取或情感分析,仅举几例),上述特别困难.这些NLP功能和各种库中的相应实现往往更难配置,对依赖于域的模式或对语音级别的变化更敏感,甚至在支持语料库的"格式"中更敏感.

简而言之,NLP库为问题中提到的"问答系统"等应用程序提供了必要的构建块,但是需要很多"粘合剂"以及如何以及在何处应用胶水(以及良好的剂量)非NLP技术,如知识表示问题,如下所述).

关于知识表示
如上所述,单独的POS标记不是NLP管道的充分元素.基本上POS标记将添加有关文本中每个单词的信息,指示单词的[可能]语法角色(如Noun vs. Adjective vs Verb vs. Pronoun等).此POS信息非常有用,因为它允许,例如,文本成单词和/或单个词语词典中,分类法或本体更精确的查找的逻辑上相关的基团的后续的组块.

为了说明某些"问答系统"可能需要的信息提取类型和基础知识表示,我将讨论各种语义搜索引擎中使用的通用格式.不过要注意的是这种格式也许不是指令性的语义搜索更多的概念和其他应用程序如专家系统或翻译机还需要其他形式的知识表示.

这个想法是使用NLP技术以及支持数据(从简单词典的简单"查找表"到分类法的树状结构,到用专业语言表达的本体)从文本中提取实体的三元组,具有以下结构:

  • 代理人:某事或某人"做"某事
  • 动词:正在做什么
  • 对象:完成"做"的人或项目(或更一般地说,有关"做"的一些补充信息)

示例:
  cat/Agent eat/Verb mouse/Object.
  John-Grisham /代理人写/动词The-Pelican-Brief/Object
  cows/Agent产生/动词牛奶/对象

此外,这种三元组(有时称为"事实")可以被分类为对应于特定语义模式的各种类型,通常围绕动词的语义进行组织.例如," 因果关系 "事实有一个表达某种因果关系的动词," 包含 "事实有一个动词,意味着容器与容器的关系," 定义 "事实是针对定义代理人/主体的模式[如果只是部分地由物体(例如"猫是哺乳动物")等.

可以很容易地想象如何查询这些事实数据库以提供问题的答案,并提供各种智能和服务,例如同义词替换或提高问题答案的相关性(与普通关键字匹配相比).

真正的困难在于从文本中提取事实.为此目的,许多NLP功能都在发挥作用.例如,NLP管道中的一个步骤是用它们引用的noum替换代词(回指分辨率或更一般地说NLP术语中的共同参考分辨率).另一步是识别命名实体:人名,地理位置,书籍等(NLP术语中的NER).另一个步骤可能是重写由"AND"连接的子句,以便通过重复隐含的语法元素来创建事实.
例如,上面的John Grisham例子可能来自一个文本摘录
Author J. Grisham was born in Arkansas. He wrote "A time to Kill" in 1989 and "The Pelican Brief" in 1992"

前往John-Grisham/Agent wrote/Verb The-Pelican-Brief/Object暗示(除其他事项外):

  • 将"J. Grisham"和"The Pelican Brief"确定为具体实体.
  • 在第二句中用"John-Grisham"取代"他".
  • 将第二句重写为两个事实:"约翰 - 格里西姆写了1989年的A-time-to-kill"和"John-Grisham在1992年写了The-Pelican-brief"
  • 放弃"在1992年"部分(或更好的是,创造另一个事实,一个"时间事实":"鹈鹕 - 简报/特工与时间相关/动词年 - 1992年/对象")(顺便说一句,这会也暗示已被确定1992为"年"类型的时间实体.)

简而言之:即使应用于相对有限的域并利用库中现有的NLP功能,信息提取也是一项复杂的任务.这肯定是一个非常"混乱"的活动,而不仅仅是从形容词和动词中识别名词;-)