4

最近我一直在阅读NLP,到目前为止,我已经得到了一个从句子拆分到POS标签的各种工作原理的基本概念(非常) ,还有知识表示。NLP /任务。回答 - 从数据库中检索信息

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

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

当然,下一步是制定一个结构良好的答复,但我认为我可以稍后离开。现在什么是我在这方面的资源缺乏(知识表示,NLP到KB/DB检索),我真的很感激,如果你们任何人都可以为我提供你的专业知识:)

回答

7

这是一个非常宽泛的问题,因此它几乎不适合StackOverflow的格式,从来就不是我想给它一个刺。

首先,NLP
的成熟工具NLP领域的广泛可用性的词本身有些误导。当然,所有的/最NLP功能,比如说,从POS标记分块,比方说,命名实体识别自动文摘或覆盖和普遍受到逻辑服务和各种库的支持数据。然而,从这些构建模块构建真实世界的解决方案并不是一项简单的任务。一个需要:

  • 构建沿着某种流水线或链的解决方案,从而将特定转换的结果反馈给后续流程的输入。
  • 配置单个过程:这些过程的计算框架已经建立,但是它们对底层数据如训练/参考语料库,可选调整参数等非常敏感。
  • 选择并验证正确的功能/过程。

以上是特别困难的用于与从文本(信息提取在大,但也共同参考消歧提取和语义元素的处理相关的解决方案的一部分,关系提取或情绪分析,仅举少数)。这些NLP函数以及各种库中的相应实现往往难以配置,对依赖于领域的模式更敏感或者语音级别变化甚至支持语料库的“格式”。

简言之,NLP库提供必要的积木的应用,如在问题中提到的“问答系统”,但多少“胶水”和许多酌情决定如何以及在哪里涂胶是必需的(以及大量的非NLP技术,如知识表示问题,下面讨论)。

论知识表示
如上暗示,POS标记单独不是NLP管线的足够元件。从本质上讲POS标记将添加有关文本中的每个字的信息,指示字[可能]语法角色(如名词与形容词VS动词与代词等),该POS机信息,因为它允许非常有用的,例如,文本成单词和/或单个词语词典中,分类法或本体更精确的查找的逻辑上相关的基团的后续的组块。

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

的想法是用NLP技术与支持数据一起(从简单的“查找表”进行简单的词汇,以树状结构进行分类,在专门的语言表达本体),以提取三胞胎实体从文字,结构如下:

  • 代理:某人或某事“做”事
  • 动词:正在做什么
  • 的对象:一个人或物品在其中的“DOI NG”完成(或更一般地,关于信息的一些补充‘做’)

例子:
 猫/代理商吃/动词鼠标/对象。
 约翰 - 格里沙姆/代理写入/动词 - 鹈鹕 - 简介/对象
 牛/代理生产/动词牛奶/对象

而且这种三胞胎的,有时也被称为“事实”,可分为各种类型对应于特定的语义模式,通常围绕动词的语义组织。例如“因果”事实有一个表达某种因果关系的动词,“包含”事实有一个动词,这意味着一个集装箱对集装箱的关系,“定义”事实是针对代理/对象被定义为[如果只是部分]被对象(例如“猫是哺乳动物”)等。

人们可以很容易地想象如何查询这些事实数据库来提供问题的答案,并提供各种智慧以及诸如同义词替换之类的服务或提高问题答案的相关性(与简单的关键字匹配相比)。

真正的困难在于从文本中提取事实。许多NLP函数都是为了这个目的而发挥作用的。例如,NLP流水线中的一个步骤是用他们引用的名词(回指分辨率或更一般的共同参考分辨率以NLP术语)来代替代名词。另一步是识别命名实体:人名,地理位置,书籍等(NER NLP术语)。另一个步骤可能是重写由“AND”连接的子句,通过重复隐含的语法元素来创建事实。
例如,也许约翰格里沙姆例如高于从文本摘录出来像
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.格里舍姆”和“鹈鹕简要“为具体实体。
  • 用“John-Grisham”替换第二句中的“他”。
  • 将第二句改写为两个事实:“John-Grisham在1989年写了A-time-to-kill”和“John-Grisham在1992年写了The-Pelican-brief”
  • 删除了“1992年”部分(或者更好的是,创造另一个事实,即“时间事实”:“The Pelican-brief/Agent is-related-time/verb year-1992/object”)(顺便说一句,这也意味着已经确定1992为类型的时间单位“年”)

一言以蔽之:信息提取即使施加在相对有限的领域和利用库中现有的可用功能NLP时,复杂的任务。它肯定是一个比单纯从形容词和动词中识别名词更“杂乱”的活动;-)

+0

哈哈,我很高兴你真的试了一下,所以至少我知道我应该朝哪个方向发展努力。对我而言,你所谈论的所有NLP内容似乎都很熟悉(我一直在阅读James Allen的自然语言理解),但是你对“真正的困难”的理解 - 真的让我觉得很懊恼。我猜这就意味着目前的规范是以句子和陈述的形式存储知识/事实,而不是任何其他形式的知识表示,你呢?你听起来对整个问题答疑主题都非常了解。你到目前为止如何? – matt 2013-02-20 16:08:25

+0

@matt虽然我已经在各种特定领域的环境中实现了一些“NLP管道”,但我依然在通过大部分NLP和相关技术实现BS。不要被我显然权威的风格所迷惑;-)另外,这里描述的“事实”(与主语,动词和宾语一样是短语)仅仅是存储知识的常用方便方式,可能特别适用于语义搜索和红外线应用程序;然而,他们并不是你猜测的“当前规范”。例如,它们比语义网络更简单(但也更有限)。 – mjv 2013-02-21 06:47:18

+0

“语义网络”有许多不同的“风味”,它们本身就是知识表示的另一种形式,也很流行,但也可能不是“规范”。事实上,可能没有任何规范,但只是一些概念格式,其众多的实现和支持语言。 NLP骑师的任务是选择一个适合手头任务的人(并且与整体架构非常吻合)。 – mjv 2013-02-21 06:55:04