HanLP-朴素贝叶斯分类预测缺陷
文章整理自 baiziyu 的知乎专栏,感兴趣的朋友可以去关注下这位大神的专栏,很多关于自然语言处理的文章写的很不错。昨天看到他的分享的两篇关于朴素贝叶斯分类预测的文章,整理了一下分享给给大家,文章已做部分修改!
朴素贝叶斯分类时,最好取对数变相乘为相加,防止预测结果溢出。可能出现的badcase就是明明训练语料X类目下没有词语t,而系统就将文本预测为X类目。解决方法就时改相乘为取对数相加。HanLP的朴素贝叶斯分类计算没有用对数相加的方法,而是直接用的概率相乘,很有可能溢出。
对上述内容做一些更正,HanLP的朴素贝叶斯是按照概率取对数相加做的。
看一下下边的代码
@Override
public double[] categorize(Document document) throws IllegalArgumentException, IllegalStateException { Integer category; Integer feature; Integer occurrences; Double logprob; double[] predictionScores = new double[model.catalog.length]; for (Map.Entry<Integer, Double> entry1 : model.logPriors.entrySet()) { category = entry1.getKey(); logprob = entry1.getValue(); //用类目的对数似然初始化概率 //对文档中的每个特征 for (Map.Entry<Integer, int[]> entry2 : document.tfMap.entrySet()) { feature = entry2.getKey(); if (!model.logLikelihoods.containsKey(feature)) { continue; //如果在模型中找不到就跳过了 } occurrences = entry2.getValue()[0]; //获取其在文档中的频次 logprob += occurrences * model.logLikelihoods.get(feature).get(category); //将对数似然乘上频次 } predictionScores[category] = logprob; } if (configProbabilityEnabled) MathUtility.normalizeExp(predictionScores); return predictionScores; }
这么看来,之前遇到的下边的这个badcase就还要再分析
[1] 化验指标一变化患者就六神无主,看医生怎么讲解
核心词:患者 看医生
这里“患者”和“看医生”两个词都没在“艺术”类训练语料中出现,但是预测概率最大的反倒是“艺术”。
由于用PyHanLP没法看到预测概率的计算过程,所以还是把Python的分类预测代码改为Java代码调式看一下。今天移植了预处理,资源加载,人工干预部分的代码,明天把剩余预测部分移植为Java再来看这个badcase。这就是朴素贝叶斯的优势,分析起来非常清晰容易。不过从PyHanLP的预测输出概率值来看,不太像是取了对数相加得到的,因为都是0-1之间的数值,这一看就是概率值。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
一个阿里产品经理眼中的“垃圾分类” | 7月12号云栖夜读
点击订阅云栖夜读日刊,专业的技术干货,不容错过! 阿里专家原创好文 1.一个阿里产品经理眼中的“垃圾分类” 我叫切斯,是阿里巴巴的一名产品经理。今天和大家说说一个上线刚刚6天,已被500多万网友疯玩的AI——垃圾图像识别,可见垃圾分类苦天下网友久矣。以下是一个产品经理的碎碎念~ 阅读更多》》 2.QPS 提升60%,揭秘阿里巴巴轻量级开源 Web 服务器 Tengine 负载均衡算法 在阿里七层流量入口接入层(Application Gateway)场景下, Nginx 官方的Smooth Weighted Round-Robin( SWRR )负载均衡算法已经无法再完美施展它的技能。 Tengine 通过实现新的负载均衡算法Virtual Node Smooth Weighted Round-Robin(VNSWRR )不仅优雅的解决了 SWRR 算法的缺陷,而且QPS处理能力相对于 Nginx 官方的 SWRR 算法提升了60%左右。阅读更多》》 3.Aliyun Serverless VSCode Extension 上架并开源 Aliyun Serverless VSCode ...
- 下一篇
阿里云新版人脸识别Go语言调用示例
概述 本文主要演示基于阿里云现有通用Http Go SDK调用阿里云新版人脸识别服务,分别DetectFace方法使用图片URL、VerifyFace方法使用本地为示例演示。 环境准备 1、Go语言版本 go version go1.12.7 windows/amd64 2、IDE LiteIDE 3、SDK安装 go get -u github.com/aliyun/alibaba-cloud-sdk-go/sdk 测试代码 1、DetectFace Sample // demo1 project main.go package main import ( "fmt" "github.com/aliyun/alibaba-cloud-sdk-go/sdk" "github.com/aliyun/alibaba-cloud-
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS8安装Docker,最新的服务器搭配容器使用
- 设置Eclipse缩进为4个空格,增强代码规范
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7,8上快速安装Gitea,搭建Git服务器