通过 hanlp中文分词库 ,可以对输入分词得到分词结果集,例如对“深圳市南山区软件产业基地”,会得到以下结果
[深圳市/ns, 南山区/ns, 软件/n, 产业/n, 基地/n]
自然其他输入也会有对应的分词结果集
在针对地址识别这个需求下,由于地址文本的不规范,
基于字典的正则判断有一定的局限性(省市区镇乡等关键字不一定会出现,楼盘名也没有规律可寻)
判断分词结果为ns+以关键字( 省|市|区|县|路|街|座|号|楼|栋|梯|室|巷|大道|花园|苑|幢|弄|单元|乡 )结尾的词的数量占分词结果集比例的方法,会容易误判(阈值不好确定)
假如可以像看到阴天,就能预测下雨那样子,看到一个ns或者以关键词结尾的词,就提升地址的概率,看到“的、了、我们、你们”等和地址基本不相关的词就降低地址的概率,根据不同的词性加权平均,最后判断哪一个结果。理论上会减少误判的可能性
贝叶斯公式
想起大学里学的贝叶斯公式,正好可以用于上述场景。阮一峰的一篇文章 贝叶斯推断及其互联网应用(一):定理简介 已经作出了很好的介绍
识别思路
思路设计
假设
事件A为:输入是地址,则P(A)为输入是地址的概率
事件B为:出现XX词性,则P(B)为出现XX词性的概率
进而
P(A|B)为:出现XX词性时,输入是地址的概率
P(B|A)为:输入是地址时,出现XX词性的概率
根据贝叶斯公式,就可以计算出P(A|B)
计算出每个词性的P(A|B)之后,再预测某个输入是否为地址时,就可以根据分词后的词性得出概率之和,取平均值再与阈值比较就能判断输入是否为地址
数据准备
因为先验概率的计算需要样本数据,而样本数据的质量会直接影响贝叶斯推断的效果,因此样本数据最好能够反映出真实的情况
1、正样本
准备22000条真实地址数据
2、负样本
从新闻网站提取正文,按照”,”和“。”将文章切割成简单句,筛选一下长度,得出10000条负样本
概率计算
1、计算P(A)
从数据准备中就可以计算出P(A)的概率了:正样本条数/总样本条数
2、计算P(B)
提取出所有出现的词性,对每一个词性计算:出现该词性的样本条数/总样本条数
3、计算P(B|A)
对每一个词性,计算:出现该词性的样本条数/正样本条数
4、计算P(A|B)
依据上述三个值以及贝叶斯公式,就可以得出:出现某个词性时,输入是地址的概率了
后续补充
由于分词的局限性,有时以关键字(省|市|区|县|路|街|座|号|楼|栋|梯|室|巷|大道|花园|苑|幢|弄|单元|乡)结尾的词并不会识别成”ns”词性,而出现上述词时是地址的概率又会提升。
于是,人为地将符合上述特征的词的概率调整为:出现ns词性时,输入是地址的概率。
阈值确定
根据正负测试数据集的计算情况设置概率阈值,将误判率控制在1%以内
Be First to Comment