PyCorrector——中文语言纠错模型 文本纠错工具

谐音字词,如 配副眼睛-配副眼镜

混淆音字词,如 流浪织女-牛郎织女

字词顺序颠倒,如 伍迪艾伦-艾伦伍迪

字词补全,如 爱有天意-假如爱有天意

形似字错误,如 高梁-高粱

中文拼音全拼,如 xingfu-幸福

中文拼音缩写,如 sz-深圳

语法错误,如 想象难以-难以想象

1.use kenlm

1.1 kenlm打分

1.2 分词

1.3 (2或3_gram)打分

1.4 numpy矩阵处理

2.编辑距离

3.pandas use pycorrector

 错误检测

字粒度:语言模型困惑度(ppl)检测某字的似然概率值低于句子文本平均值,则判定该字是疑似错别字的概率大。

词粒度:切词后不在词典中的词是疑似错词的概率大。

 错误纠正

通过错误检测定位所有疑似错误后,取所有疑似错字的音似、形似候选词,

使用候选词替换,基于语言模型得到类似翻译模型的候选排序结果,得到最优纠正词。

###  英文检测 直接使用编辑距离 

一个类中 EnSpell,通过加载一个很大的英文语料来进行英文纠错

实例化 EnSpell之后,直接调用 en_correct方法即可对传入的单词进行纠错。

 重点:候选值怎么确定 + 概率怎么确定

候选值生成

首先,通过candidates方法获得可能的正确地拼写词,获取编辑距离1,2内的候选值以及当前值和子集候选值生成方法

编辑距离词的构建方法以及词的过滤,编辑距离词生成方法

然后依次遍历单词中的每个字母,筛选出存在于WORDS字典中的词

子集生成

WORDS是我们开头讲到的那个超大英文语料的词频字典。

概率计算

概率计算通过调用probability方法进行计算,

概率计算方法     计算方法是使用当前词的频率/总得词频数量

pycorrector过程:

1、把长句分为短句

2、顺序遮盖一个词 然后把当前序列送给模型进行预测(取TOP5的值)

3、取出所有满足规则条件的值token 对应的str  暂存起来

4、然后取出MASK值得所有同音字或者相似值  作为candidates候选值 (问题在于咱们有没有具体的西班牙语的同音字或者相似字)

5、看token里面的值是否在候选值里面  如果在直接选取当前值为正在MASK的值  否则继续使用原来的值

注释: 就是bert模型预测出来该位置的可能性值token   然后去该词的近似值candidates里面去寻找是否有该值 如果有则替换为找到的那个字  否则还是使用原来的那个词

直接使用shop item  mx  作为词频表 并且和标准的词频做一个合并

使用 query_pv_mx  和 少无结果  通过求编辑距离  作为一个形近词

same_stroke.txt  形似字

same_pinyin.txt   同音字

可能性对的表

word_freq   词频表  

你可能感兴趣的:(自然语言处理,人工智能)