Press "Enter" to skip to content

贝叶斯推断应用:基于中文分词识别一串文本是否为地址的思路

通过 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

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注