知方号

知方号

基于模糊音的中文匹配Dimsim<模糊相似度匹配算法有哪些>

基于模糊音的中文匹配Dimsim

dimsim介绍

论文解读dimsim的python实现

中文的语音相似性Phonetic similarity算法,可以用于语音纠错spelling correction,比如将稀饭修改为喜欢。

dimsim三方库介绍:给定两个相同长度的中文单词,模型确定两个单词之间的距离,并返回几个与给定单词接近的候选单词。它包括 2 个API接口:

get_distance:接收两个短语字符串,返回两个词语的发音相似度数值,数值越小表示越相似get_candidates:接收一个短语字符串,返回相似短语

代码示例如下:1234import dimsim

# 计算词语间的发音相似度score_py = dimsim.get_distance("星辰", "姓陈")

问题描述

在语音识别领域,由于我国方言众多,所以需要精准地匹配每个地方的方言目前还不太现实。市面上的语音识别服务基本上对普通话的识别率是最高的,但是也需要用户用很标准的普通话来讲。这就涉及到模糊音匹配的问题了。

提出问题

用户说:“大娘水饺好吃吗”,被语音识别成了“大亮睡觉好吃嘛”(举个栗子而已),这个时候怎么将语音识别后的结果转换成我想要的结果。

单词纠错

一般来说中文单词的拼写错误大致有这么几种类型:

字形相似这种在手写字时特别容易出现,比如 “彬彬有礼“ 写成 ”杉杉有礼”。读音相似手写字或者拼音输入法时容易出现,比如 “南通市” 写成 “难通市”,前后的读音都是 “nan tong shi”。

因为汉语表达比较精炼,使用编辑距离去做纠错,效果就很不好,比如 “南通市 – 难通市 – 北通市”,这三者的编辑距离都是 1,就不好判断了。但这时结合拼音去判断,就会发现 “南通市” 与 “难通市” 的相似度高于 “南通市” 与 “北通市” 了。

所以对于汉字的纠错,我们需要同时结合拼音和字形上的特点:

读音相似度。示例:胡 -> hú,福 -> fú读音上相对来说好处理一点,我们可以将汉字转成对于的拼音,比如说 “南” 字转成 “nan2”,其中 2 为声调部分,然后对拼音构成的字符串再用传统的相似度匹配算法,比如编辑距离,就可以达到很好的效果。也可以使用 Soundex 语音算法,在拼音文字中有时会有会念但不能拼出正确字的情形,可用Soundex做类似模糊匹配的效果。

不同这里有一点需要注意,由于不同地区有着各自截然不同的方言,所以在计算相似度时需要适当调整。

比如许多南方人很难分辨 “L” 和 “N’,他们常常会将这两个音弄混,将“篮球”读作“南球”,而“刘德华”就变成了“牛德华”。

另外有汉字是多音字,在汉字转拼音时不好处理,因为要考虑所有可能的拼音组合,在极端情况下会导致指数爆炸!例如美团的实现(枚举多音字全排列)。所以我们一般就取该汉字拼音出现次数较多的那个读音

字形相似度。示例:门 -> 37001,闩 -> 37101字形相似读计算是个特别难的问题,一种朴素的思想,便是首先将汉字转化成一组的字母数字的序列,而这个转化所用到的hash算法必须能够将该汉字的字形特征保留下来。利用这样的转化,我们便将汉字字形的相似度问题,变成了两组字母数字序列的相似度问题。而这正是传统相似度匹配算法的强项。这种解决方案的核心,就在于找到一个恰当的hash算法,能够将汉字进行适当的转化,并在转化结果中,保留住汉字的字形特征。曾经有人发明了一种名为 四角编码 的汉字检字法来实现这样的算法。四角算法是由王云五于1925年发明,这种编码方式根据汉字所含的单笔或复笔对汉字进行编号,取汉字的左上角,右上角,左下角以及右下角四个角的笔形,将汉字转化成最多五位的阿拉伯数字。 通过将汉字转化成四角编码,再对四角编码的相似度进行计算,便可以得出两个汉字在字形上的相似程度。

四角编码:http://baike.baidu.com/view/67253.htm?fr=aladdin

这种编码可以在一定程度上解决形近词的问题,但也有其自身的问题,由于只取汉字的四角笔形,有些外形截然不同的汉字,因为四角结构相同,也拥有同样的四角编码。比如:量 - 6010 ,日 - 6010 ,但它们是不一样的。

所以为了解决汉字相似度计算问题,我们可以结合汉字的拼音、声调、四角编码、笔画数、字形结构等来考虑。

解决思路

我们的做法:将ASR的2元结果跟姓氏库进行一一模糊匹配,检查用户的拼写是否有错误,如果有的话,给出正确的姓氏,完成姓氏读音纠错。

中文汉字大致有几个特征:1)声母;2)韵母;3)声调;4)偏旁;5)结构;6)笔画这几个特征中,在语音识别后的处理过程中,1、2、3的权重要高一些,其中,1、2最为重要,也就是语音识别为什么出错的原因,要做的事情就是通过模糊音将声母、韵母来进行匹配。 基于语言模型做文本自动纠错 查词典 词典

检查一个单词是否拼写错误,我们可以通过查词典找同音词,在词典中查找相似度阈值大于某个特定值的关键词即为候选正确词。

排序

如果得到多个正确词,但是通常显示给用户只有一个,按照下面规则对它们进行排序,越前面的规则权重越高。

同音词优先,同音词之间的顺序由同音词的搜索建议权重决定。搜索建议权重由搜索词的商品数目、搜索次数、添加方式决定。拼写相近词的顺序由相似度决定,越相似的词排在越前面。参考

PYTHON模糊匹配指南浅谈基于模糊音的中文匹配算法搜索关键词纠错算法ALi, Min and Danilevsky, Marina and Noeman, Sara and Li, Yunyao_, “DIMSIM: An Accurate Chinese Phonetic Similarity Algorithm Based on Learned High Dimensional Encoding”, Proceedings of the 22nd Conference on Computational Natural Language Learning, 2018.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。