基于语法树的语句识别算法

需求分析

自然语言处理的人机对话中,用户的语句表达具有多样性,例如“我喜欢你”、“你被我喜欢着”表达的是同一个意思,如何让计算机理解识别这些多样化的句子,面对各式各样的同义问题,都能作出相同的问答,本文尝试通过语法树、依赖树等工具将多样化的问句转换成较为统一形式的句子,以方便计算机识别这些语句。

特征表示

我们的目标是解决中文语句的多样性,考虑到如果直接使用词汇作为特征,有可能由于多样化的组合导致问题复杂化,例如:①你被我喜欢着;②她被我喜欢着,都可以转换成相同的形式 ①我喜欢你;我喜欢她。这些相同的形式就作为语句的分类,计算机根据这些分类来组织回答。

上述例子中,我们可以考虑通过标注来解决组合复杂化的问题,可以根据领域知识进行语义标注,也可以使用语法词性标注。考虑到领域知识归纳的困难度,本文使用第二种方法来解决问题。例如:①我喜欢你;我喜欢她,都可以标注成PN + V + PN。

特征选取

自然语言处理中存在语法树、依赖树这两种工具,我们可以考虑使用语法树、依赖树的词性标注、语法边、树结构等作为特征,表示同一类进行的语句,同一类的语句给它记录一条规则使之转换至统一形式的语句。

模型选择

特征选取完后,如何将同一类的语句给它记录一条规则使之转换至统一形式的语句,本文使用同步树替换文法模型。

资料整理自 Sentence Compression as Tree Transduction.pdf 与 一种基于同步树替换文法的统计机器翻译模型.pdf 摘抄自《人工智能原理及其应用(第2版)》
        在Sentence Compression as Tree  Transduction 一文中,Abstract摘要 这样写道:
        “This paper presents a tree-to-tree transduction method for sentence compression. Our model is based on synchronous tree substitution grammar, a formalism that allows local distortion of the tree topology and can thus naturally capture structural mismatches.”作者提出了一种基于同步树替换文法(STSG,synchronous tree substitution grammar)的树-树转换句子压缩算法。
        在 一种基于同步树替换文法的统计机器翻译模型 一文中,Abstract摘要 这样写道:
       “提出一种基于同步树替换文法 的机器翻译模型。相对于基于短语的模型,此模型可以对远距离结构性调序和非连续短语翻译进行建模;相对于基于同步上下文无关文法 模型,此模型可以对任何层次上的树节点调序进行建模。”
        
        上下文无关文法(context free grammar)是乔姆斯基提出的一种能对自然语言语法知识进行形式化描述的方法。在这种文法中,语法知识使用重写规则 表示的。下面举一个例子:
        我们对一个英文子集“The professor trains Jack. ”作上下文无关文法分析。
        人工编写的重写规则 为:

语句→句子 终结符
                           句子→名词短语 动词短语
                           动词短语→动词 名词短语
                           名词短语→冠词 名词
                           名词短语→专用名词
                           冠词→the
                           名词→professor
                           动词→wrote
                           名词→book
                           动词→trains
                           专用名词→Jack
                           终结符→.
        使用上面的重写规则,就可以把句子改写成一棵文法分析树(parse tree,语法树),

上下文无关文法反映了自然语言结构的层次特性,用它对自然语言的语法 进行形式化描述既严谨,又便于计算机实现。知识点:
        在重写规则中,作为终结符 的有英语单词the, professor, wrote, book, trains, Jack 及 “.”,其余均为非终结符 。也可以这样理解,在上图中,叶子结点 就是终结符,非叶子结点 就是非终结符 。并且,“语句”是一个特殊的非终结符,称为起始符 ,可以看做根结点 。上述文法之所以被称为上下文无关,其原因是这些重写规则的左边均为孤立的非终结符,它们可以被右边的符号串替换,而不管左边出现的上下文,“冠词”并不影响“名词”替换成“professor”。

上下文无关文法反映的仅是一个句子本身的层次结构和生成过程 ,它不可能与另外的句子发生关系。而自然语言是上下文有关的,句子之间的关系也是客观存在的。于是,乔姆斯基提出了变换文法(transformational grammar)。变换文法认为,英语句子的结构有深层 和表层 两个层次。例如,句子“She read me a story.”和“She read a story to me.”的表层结构不一样,但它们指的是同一回事,即这两个句子的深层结构是一样的。再例如,主动句与被动句。在变换文法中,句子深层结构和表层结构之间 的变换是通过变换规则 实现的,变换规则把句子从一种结构变换成另一种结构。知识点:
        变换文法的主要算法思路 就是,先用上下文无关文法建立相应句子的深层结构,然后再应用变换规则将深层结构变换为符合人们习惯的表层结构。目前许多双语翻译、缩句、句子成分移位的解决正是利用了这种思想。

其实变换规则就是,记录这两句平行预料的语法树结构,以后新进来一个句子,只要语法树结构跟上面的Source的语法树结构完全匹配,就可以应用这条规则,改写成Target的语法树,然后得到目标句子。
        我的理解,同步树替换文法就是变换文法。有了上面的知识点,我们可以来看同步树替换文法 的定义:

在上述定义中,提到“元树 (elementary tree)”,我们来看一下元树的定义:

从定义及例子中,我们可以看出,元树是完整的子树 或子树缺失了某些部分,但必须保证的是,元树中的每个结点的第一层子结点必须是完整的,像PP(TO(to))这种就是不合法 的。树核向量中所用到的应该也称为子树。
        为什么提到元树的呢?因为涉及到提取到的规则是否具有泛化能力,举个例子S(VBS WJ)既可以代表S(VBA(P NG VO) WJ),也可以代表S(VBA(XX XX) WJ),这样就可以防止提取到的变换规则的量太多而记录不下。
        在基于同步树替换文法的缩句算法中,规则的约束条件为,树-树间的成分要么是成对的对齐成分,要么是被删除成分。变换规则提取学习算法一般为:

算法实现

乔姆斯基提出变换文法(transformational grammar),变换文法认为,句子的结构有深层 表层 两个层次,例如:
                She read me a story. She read a story a story to me.
      上述两个句子的表层结构不一样,但它们指的是同一回事,即其深层结构是唯一的。
      本项目使用STSG(同步树替换文法) 依赖树(句子主干提取)完成中文句子从表层结构到深层结构的转换。
      使用依赖树进行「句子主干提取」其主要原理跟STSG 一样,只不过STSG 使用语法树 来提取规则,而语法树使用词性节点来表示句子的语法信息,树的结构较为复杂,针对句子成分移位 问题很难提取出较有泛化能力 的变换规则;而依赖树 使用语义边来表示句子的语法信息,树的结构较为简单,这时可以提取到较有泛化能力 的变换规则。但是,目前这种规则只能人工编写,缺少像STSG 规则自学习算法 那样强大的支撑,而人工编写规则很难覆盖全面
      目前规则使用七元组:<边属性名,dep词项,dep词性,dep转换后位置,gov词项,gov词性,gov转换后位置>。七元组就是特征,详见第3节 特征选取。

项目代码

http://git.oschina.net/Keyven/IKeyven

Reference

人工智能原理及其应用(第2版)

Sentence Compression as Tree Transduction.pdf

一种基于同步树替换文法的统计机器翻译模型.pdf

时间: 2024-10-26 17:54:32

基于语法树的语句识别算法的相关文章

人脸识别算法初次了解

这是转载别人的帖子,认为好,大家一块学习http://www.cnblogs.com/guoyiqi/archive/2011/07/28/2129300.html 前言 在写此文之前,先扯点东西.我一直在找一个东西,让我思考,让我久久的深陷当中,永久的,不断的思考.现在,我意识到,这个东西即是算法.我一直在找一家合适的公司,能让我的兴趣无比放肆的,自由驰骋. ok,由于在一家公司的面试过程中,面试官提到过这个人脸识别算法,由于在此之前,未曾有过了解,所以,特作此番学习与研究.有不论什么问题,欢

人脸识别---基于深度学习和稀疏表达的人脸识别算法

介绍 基于深度学习和稀疏表达的人脸识别算法 1 利用VGGFace提取人脸特征 2 PCA对人脸特征进行降维 3 稀疏表达的人脸匹配 Code 1 介绍 本文将介绍一种基于深度学习和稀疏表达的人脸识别算法.首先,利用深度学习框架(VGGFace)提取人脸特征:其次,利用PCA对提取的特征进行降维:最后,利用稀疏表达分类实现特征匹配.我采用CMC曲线评价在AR数据库上的识别性能.最后我还提供了整个过程的code. 2 基于深度学习和稀疏表达的人脸识别算法 2.1 利用VGGFace提取人脸特征 下

AACOS:基于编译器和操作系统内核的算法设计与实现

AACOS:基于编译器和操作系统内核的算法设计与实现 [计算机科学技术] 谢晓啸 湖北省沙市中学 [关键词]: 编译原理,操作系统内核实现,算法与数据结构,算法优化 0.索引 1.引论 1.1研究内容 1.2研究目的 1.3研究提要 正文 2.1研究方法 2.2编译器部分 2.2.1从计算器程序中得到的编译器制作启示 2.2.2在编译器中其它具体代码的实现 2.2.3编译器中栈的高级应用 2.2.3编译器中树的高级应用 2.2.4编译器与有限状态机 2.3操作系统内核部分 2.3.1操作系统与底

Atitit.sql&#160;ast&#160;表达式&#160;语法树&#160;语法&#160;解析原理与实现&#160;java&#160;php&#160;c#.net&#160;js&#160;python

Atitit.sql ast 表达式 语法树 语法 解析原理与实现 java php c#.net js python 1.1. Sql语法树 ast 如下图锁死1 2. SQL语句解析的思路和过程3 2.1. lexer作为一个工具,完成了对SQL字符串的切割,将语句转化成一个tokens数组.3 2.2. Parser完成了SQL解析的后序部分:使用一个lexer对象作为工具,切出tokens,然后解析语义,绑定相关的系统接口.3 2.3. 关系数据和XML数据库下其抽象语法树分别为: 如图

从K近邻算法、距离度量谈到KD树、SIFT+BBF算法

从K近邻算法.距离度量谈到KD树.SIFT+BBF算法 从K近邻算法.距离度量谈到KD树.SIFT+BBF算法 前言 前两日,在微博上说:“到今天为止,我至少亏欠了3篇文章待写:1.KD树:2.神经网络:3.编程艺术第28章.你看到,blog内的文章与你于别处所见的任何都不同.于是,等啊等,等一台电脑,只好等待..”.得益于田,借了我一台电脑(借他电脑的时候,我连表示感谢,他说“能找到工作全靠你的博客,这点儿小忙还说,不地道”,有的时候,稍许感受到受人信任也是一种压力,愿我不辜负大家对我的信任)

基于语法分析器GOLD Parser开发的数学表达式计算器

最近发现一款文法分析神器,看完官网(http://goldparser.org/)的介绍后感觉很犀利的样子,于是就拿来测试了一番,写了一个数学表达式分析的小程序,支持的数学运算符如下所示:常规运算:+ - * / ^ sqrt sqrt2(a,b) pow2(a) pow(a,b)三角函数:sin cos tan cot asin acos atan acot指数对数:log2(a) log10(a) ln(a) logn(a,b) e^最大最小:max(a,b,...) min(a,b,...

基于Aforge的物体运动识别-入门

基于Aforge的物体运动识别-入门篇chatbot人工智能机器人开发,提供教学视频>>>   0 收藏(2) 本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处! 最近看到越来越多人在做物体运动识别(例如:"第六感"中的指套),而且我最近也有点闲空,所以也来玩玩.....大多数人都是用Opencv来做,那我就不做重复的工作了,换个别的开源类库~~~Aforge. 来自百度知道的Aforge介绍:AForge.NET 是一个专门为开

DeepID人脸识别算法之三代

DeepID人脸识别算法之三代 转载请注明:http://blog.csdn.net/stdcoutzyx/article/details/42091205 DeepID,目前最强人脸识别算法,已经三代. 如今,深度学习方兴未艾,大数据风起云涌,各个领域都在处于使用深度学习进行强突破的阶段,人脸识别也不例外,香港中文大学的团队使用卷积神经网络学习特征,将之用于人脸识别的子领域人脸验证方面,取得了不错的效果.虽然是今年7月份才出的成果,但连发三箭,皆中靶心,使用的卷积神经网络已经改进了三次,破竹之

基于BP神经网络的简单字符识别算法自小结(C语言版)

本文均属自己阅读源码的点滴总结,转账请注明出处谢谢. 欢迎和大家交流.qq:1037701636 email:[email protected] 写在前面的闲话: 自我感觉自己应该不是一个很擅长学习算法的人,过去的一个月时间里因为需要去接触了BP神经网络.在此之前一直都认为算法界的神经网络.蚁群算法.鲁棒控制什么的都是特别高大上的东西,自己也就听听好了,未曾去触碰与了解过.这次和BP神经网络的邂逅,让我初步掌握到,理解透彻算法的基本原理与公式,转为计算机所能识别的代码流,这应该就是所谓的数学和计