ITPub博客

首页 > 人工智能 > 自然语言 > HanLP-朴素贝叶斯分类预测缺陷

HanLP-朴素贝叶斯分类预测缺陷

自然语言 作者:adnb34g 时间:2019-07-22 09:43:45 0 删除 编辑


文章整理自   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 之间的数值,这一看就是概率值。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31524777/viewspace-2651272/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
八年IT互联从业经历,专注网络营销、大数据、人工智能等领域的知识分享

注册时间:2018-03-09

  • 博文量
    172
  • 访问量
    102686