基于依存树相似度算法讨论

来源:互联网 发布:希尔薇 知乎 编辑:程序博客网 时间:2024/06/08 16:57

这个号上全是关于中文智能语言方向的,可能不太理解为什么会出现纯算法的博客,这里简单说明一下,在中文相似度计算的各个方向中,句法分析是不太出名的一条路,而其中最有代表性的就是依存树分析。

在我上一篇博客中提到过依存树的问题,最后说到依存树是无法直接使用的,需要进行进一步的处理,这进一步的处理方法很多,我另辟蹊径采用了两种途径,由于目前还处于保密状态我会在七月公开一部分代码,现在只提供一条技术路线的完整思路。

首先我们解释一下依存关系。依存关系是基于分词结果的,关系是词和词直接的关系,举一个简单的例子,我是一个很帅的人,这里的帅就是人的修饰关系,很表示程度依存于帅也是一个修饰。词和词之间的关系可以细分为三十多种(斯坦福分析法),根据不同的分析器不同就有不同划分方式数量可能不尽相同这里不做讨论。

依存树,顾名思义就是一个树型结构,这个结构是根据依存关系生成的二叉树。这种结构的好处很多,首先一个就是结构简单方便处理,二叉树可以用递归来写,代码量很少也容易理解,这个是目前处理依存关系的绝对主流方案。现在介绍一下算法的思路:从整棵树的最底层开始向上走,找到每一棵子树,每一颗子树都进行判断是否能够独立形成一个“完整”的句子,也就是是否能够独立表述含义,这里就涉及到句型的总结,英文里基本句式为5种(我读书少你们别骗我,基本的句式就是五种,如果还想跟我挣这个我也没办法),只要满足这五种就被认为是句子。这个对印欧语系的处理效果非常好,因为他们的从句很多常用句式13种中其余8种大部分都是用从句扩充出来的。这种处理方法可以简单判定是否是从句,如果是从句就会被当作一个语元来对待。最终整个句子被归类为五种基本句式的扩充,两个句子再进行相似度计算的时候就精确很多了。但是有一个很大的缺点,中文没有从句,这句话我不是信口雌黄,写出一句没有语病的句子进行依存判读是不会出现从句的,中文的修饰词在前,而印欧语系中的从句在中文中以多重修饰表达,举个例子还是这句“我是一个很帅的人”在英语中这样说“我是人,一个非常帅的人”这个是语言问题不多做讨论。既然没有从句那么从句的判断就没有意义,依存树的优势荡然无存,因此中文处理照搬英文绝对是行不通的。(题外话:英文照搬中文就很好用,比如李开复先生的多重隐马可夫链分词HMM,移植到英语判断语法是否正确效果异常好)

然后就是森林,实际上依存关系形成的二叉树是经过处理的,部分关系被过滤掉了,也就是我们说的非主要关系。依存关系实际上非常复杂,森林能够保留下来所有的关系,进行处理会更精确,计算思想上没有区别,主要是受限于森林的存储结构更复杂代码更复杂,提高的准确率比较有限仅有百分之一左右,空间和时间复杂度高很多,因此这里并不推荐。

最后要说的是图。这个是我提出来并我和的并和导师张老师一起总结完善的,目前来看是最适合中文处理的。这不是乱讲,我做出来之后偶然了解到哈工大也有基于依存句法的研究,采用的也是图,他们的代码目前也是保密的不太清楚是不是同样的思路,但是大方向确实是英雄所见。有向图,这个是我认为最符合依存关系的结构,而一般来说关系数往往大于词的个数,词的个数又不会太多,因此这里采用占用空间比较多但是效率高的邻接矩阵就可以了。这里有两条技术路线,这里只介绍其中一条。首先要进行一点处理,要计算图中任意两点之间的距离,根据根和每一个词的距离就可以将所有词划分为多个不同重要性集合,根据这些词的重要性就可以计算句子相似度了,这里的过程请参考我另外的博客。两个词之间的距离越短,关系越紧密,根据关系的远近就可以赋予不同权重,这样只需要比对两个句子图结构的相似度就可以在一定程度上得出两个句子结构的相似度,通过这两个相似度进行加权处理就可以得到两个句子的比较准确的相似度。


0 1
原创粉丝点击