.net NLP/Quest。应答-从数据库中检索信息
最近我读了一些关于NLP的书,到目前为止,我已经(非常)了解了从句子分割到词性标注,以及知识表示等一切工作的基本原理 我知道有很多NLP库(主要是Java或Python),并且已经找到了一个.NET实现()。事实上,它非常棒。无需编写任何自定义处理逻辑;只要使用它们的功能,瞧!用户输入被很好地分开,并带有POS标签 我不明白的是,如果我的主要动机是建立一个问答系统(类似于一个喋喋不休的人),那么接下来该怎么办。我可以使用哪些库(最好是.NET)?如果我希望构建自己的知识库,我应该如何表示我的知识?我是否需要将POS标记的输入解析为DB可以理解的其他内容?如果我使用MS SQL,是否有任何库可以帮助将POS标记的输入映射到数据库查询?或者我需要根据过程语义编写自己的数据库查询逻辑(我已经读过了).net NLP/Quest。应答-从数据库中检索信息,.net,sql-server,nlp,artificial-intelligence,question-answering,.net,Sql Server,Nlp,Artificial Intelligence,Question Answering,最近我读了一些关于NLP的书,到目前为止,我已经(非常)了解了从句子分割到词性标注,以及知识表示等一切工作的基本原理 我知道有很多NLP库(主要是Java或Python),并且已经找到了一个.NET实现()。事实上,它非常棒。无需编写任何自定义处理逻辑;只要使用它们的功能,瞧!用户输入被很好地分开,并带有POS标签 我不明白的是,如果我的主要动机是建立一个问答系统(类似于一个喋喋不休的人),那么接下来该怎么办。我可以使用哪些库(最好是.NET)?如果我希望构建自己的知识库,我应该如何表示我的知识
当然,下一步是制定一个结构良好的答复,但我想我可以留待以后再说。现在困扰我的是这方面的资源不足(知识表示法,NLP到KB/DB检索),如果在座的任何人都能提供我您的专业知识,我将不胜感激:)这是一个非常广泛的问题,因此它几乎不适合StackOverflow的格式,尽管如此,我还是想尝试一下 首先,一个关于NLP的单词
NLP领域成熟工具的广泛可用性本身就有点误导。当然,从词性标记或组块到自动摘要或命名实体识别等所有/大多数NLP功能都已涵盖,并且通常由各种库的逻辑和支持数据提供良好的服务。然而,从这些构建块构建真实世界的解决方案并不是一项简单的任务。我们需要:
- 沿着某种管道或链构建解决方案,从而将特定转换的结果输入到后续流程的输入中
- 配置各个过程:这些过程的计算框架已经建立,但它们对基础数据(如训练/参考语料库、可选调整参数等)极为敏感
- 选择并验证适当的功能/流程
如上所述,词性标注本身并不是NLP管道中的一个充分元素。本质上,词性标注将添加文本中每个单词的信息,表明该单词的[可能]语法角色(如名词、形容词、动词、代词等)该POS信息非常有用,因为它允许,例如,随后将文本分块成逻辑上相关的词组和/或在字典、分类法或本体中更精确地查找单个词 说明某些“问答系统”可能需要的信息提取类型和底层知识表示,我将讨论各种语义搜索引擎中使用的一种常见格式。但是,请注意,对于语义搜索,这种格式可能更具概念性,而不是规范性,其他应用程序(如专家系统或翻译机)需要其他形式的知识表示 想法是使用NLP技术和支持数据(从简单词汇的普通“查找表”,到分类的树状结构,再到用专门语言表示的本体),以从文本中提取实体的三元组,结构如下:
- 代理人:某事或某人“做”某事
- 动词:正在做什么
- 对象:完成“做”的人或项目(或更一般地说,关于“做”的一些补充信息)
猫/代理吃/动词鼠标/对象。
约翰·格里沙姆/代理编写/动词鹈鹕简报/对象
奶牛/代理产品/动词牛奶/对象 此外,这类三元组有时被称为“事实”,可以根据特定的语义模式分为各种类型,通常围绕动词的语义组织。例如,“因果”事实有一个动词,表示某种因果关系,“包含”事实有一个动词,暗示容器与容器的关系,“定义”事实指的是对象[如果只是部分]定义了主体/主体的模式(例如,“猫是哺乳动物”),等等 人们可以很容易地想象,如何查询这些事实数据库,以提供问题的答案,并提供各种智能和服务,如同义词替换或提高问题答案的相关性(与普通关键字匹配相比) 真正的困难在于