这个号上全是关于中文智能语言方向的,可能不太理解为什么会出现纯算法的博客,这里简单说明一下,在中文相似度计算的各个方向中,句法分析是不太出名的一条路,而其中最有代表性的就是依存树分析。
在我上一篇博客中提到过依存树的问题,最后说到依存树是无法直接使用的,需要进行进一步的处理,这进一步的处理方法很多,我另辟蹊径采用了两种途径,由于目前还处于保密状态我会在七月公开一部分代码,现在只提供一条技术路线的完整思路。
首先我们解释一下依存关系。依存关系是基于分词结果的,关系是词和词直接的关系,举一个简单的例子,我是一个很帅的人,这里的帅就是人的修饰关系,很表示程度依存于帅也是一个修饰。词和词之间的关系可以细分为三十多种(斯坦福分析法),根据不同的分析器不同就有不同划分方式数量可能不尽相同这里不做讨论。
依存树,顾名思义就是一个树型结构,这个结构是根据依存关系生成的二叉树。这种结构的好处很多,首先一个就是结构简单方便处理,二叉树可以用递归来写,代码量很少也容易理解,这个是目前处理依存关系的绝对主流方案。现在介绍一下算法的思路:从整棵树的最底层开始向上走,找到每一棵子树,每一颗子树都进行判断是否能够独立形成一个“完整”的句子,也就是是否能够独立表述含义,这里就涉及到句型的总结,英文里基本句式为5种(我读书少你们别骗我,基本的句式就是五种,如果还想跟我挣这个我也没办法),只要满足这五种就被认为是句子。这个对印欧语系的处理效果非常好,因为他们的从句很多常用句式13种中其余8种大部分都是用从句扩充出来的。这种处理方法可以简单判定是否是从句,如果是从句就会被当作一个语元来对待。最终整个句子被归类为五种基本句式的扩充,两个句子再进行相似度计算的时候就精确很多了。但是有一个很大的缺点,中文没有从句,这句话我不是信口雌黄,写出一句没有语病的句子进行依存判读是不会出现从句的,中文的修饰词在前,而印欧语系中的从句在中文中以多重修饰表达,举个例子还是这句“我是一个很帅的人”在英语中这样说“我是人,一个非常帅的人”这个是语言问题不多做讨论。既然没有从句那么从句的判断就没有意义,依存树的优势荡然无存,因此中文处理照搬英文绝对是行不通的。(题外话:英文照搬中文就很好用,比如李开复先生的多重隐马可夫链分词HMM,移植到英语判断语法是否正确效果异常好)