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

场景说明

经过hanlp中文分词库,能够对输入分词获得分词结果集,例如对“深圳市南山区软件产业基地”,会获得如下结果html

[深圳市/ns, 南山区/ns, 软件/n, 产业/n, 基地/n]
复制代码

天然其余输入也会有对应的分词结果集git

在针对地址识别这个需求下,因为地址文本的不规范,github

  • 基于字典的正则判断有必定的局限性(省市区镇乡等关键字不必定会出现,楼盘名也没有规律可寻)
  • 判断分词结果为ns+以关键字(省|市|区|县|路|街|座|号|楼|栋|梯|室|巷|大道|花园|苑|幢|弄|单元|乡)结尾的词的数量占分词结果集比例的方法,会容易误判(阈值很差肯定)

假如能够像看到阴天,就能预测下雨那样子,看到一个ns或者以关键词结尾的词,就提高地址的几率,看到“的、了、咱们、大家”等和地址基本不相关的词就下降地址的几率,根据不一样的词性加权平均,最后判断哪个结果。理论上会减小误判的可能性bash

贝叶斯公式

贝叶斯公式

想起大学里学的贝叶斯公式,正好能够用于上述场景。阮一峰的一篇文章贝叶斯推断及其互联网应用(一):定理简介已经做出了很好的介绍测试

识别思路

思路设计

假设网站

  • 事件A为:输入是地址,则P(A)为输入是地址的几率
  • 事件B为:出现XX词性,则P(B)为出现XX词性的几率

进而spa

  • P(A|B)为:出现XX词性时,输入是地址的几率
  • P(B|A)为:输入是地址时,出现XX词性的几率

根据贝叶斯公式,就能够计算出P(A|B)设计

计算出每一个词性的P(A|B)以后,再预测某个输入是否为地址时,就能够根据分词后的词性得出几率之和,取平均值再与阈值比较就能判断输入是否为地址code

数据准备

由于先验几率的计算须要样本数据,而样本数据的质量会直接影响贝叶斯推断的效果,所以样本数据最好可以反映出真实的状况cdn

一、正样本

准备22000条真实地址数据

二、负样本

重新闻网站提取正文,按照","和“。”将文章切割成简单句,筛选一下长度,得出10000条负样本

几率计算

一、计算P(A)

从数据准备中就能够计算出P(A)的几率了:正样本条数/总样本条数

二、计算P(B)

提取出全部出现的词性,对每个词性计算:出现该词性的样本条数/总样本条数

三、计算P(B|A)

对每个词性,计算:出现该词性的样本条数/正样本条数

四、计算P(A|B)

依据上述三个值以及贝叶斯公式,就能够得出:出现某个词性时,输入是地址的几率了

后续补充

因为分词的局限性,有时以关键字(省|市|区|县|路|街|座|号|楼|栋|梯|室|巷|大道|花园|苑|幢|弄|单元|乡)结尾的词并不会识别成"ns"词性,而出现上述词时是地址的几率又会提高。

因而,人为地将符合上述特征的词的几率调整为:出现ns词性时,输入是地址的几率。

阈值肯定

根据正负测试数据集的计算状况设置几率阈值,将误判率控制在1%之内

相关文章
相关标签/搜索