覑荱曲 发表于 2019-8-5 13:46:26

SAS代码构建贝叶斯文本分类器全教程


当我们进行文本分析、尤其是舆情监控的工作时,常常需要迅速对一段文本的倾向性做出判断:比如这条客户评论,洋洋洒洒几百字,究竟是好评还是差评?是赞美还是批判?对于这种需要“分类”的问题如果文本量较大,人工进行判断显然是缺乏效率的,这时贝叶斯分类器就可以帮上大忙了。

分类器就是利用某些特征对已有内容项进行分类的工具。对文档进行分类时,要先定义内容项为文档,特征为文档中的单词。本文以SAS代码为基础,根据已有文档的属性,构建训练数据集,训练贝叶斯分类器,将一讲如何利用贝叶斯分类器判断未知属性的文档。

1. 构造数据集
首先我们来利用已有文档构造两个数据集,一个是fc表(即feature-category),存放每个特征值(单词)出现在某个属性出现的次数;另外一个是cc表(即category-count),存放某个属性的内容项出现的次数。

存放每个特征值在某个属性出现次数的fc表的示例为:

fc表存放特征值、特征值的分类、特征值分类的个数三项信息。如果训练数据为简单的“Nobody owns the water” - “good”,这样就会在下图的fc表中记录4条信息(这里面the的次数在第一次训练的时候应该为1)。

具体的构造方法为:


另外一个数据集cc则负责存放某个属性的内容项出现的次数,示例如下:

其中category存放分类种类,count主要存放每种分类的计数。构造方法为:



2. 设置训练函数
训练函数的格式为:
%train("buy carnow","good");
%train("make quickmoney at the online casino","bad");


3. 计算训练数据集的条件概率
计算条件概率Pr(document|category):


然后计算加权的条件概率,设置每个特征单词初始的对于所有分类的加权概率从0.5开始,这样设计比较合理。


4. 计算整个文章的概率
整个文章的概率就是Pr(document)。我们需要先假设每个特征值都是独立的:


5. 概率转换
目前计算出的是Pr(document|category),我们需要利用贝叶斯变化,将之转换成Pr(category|document)。
Pr(category|document) = Pr(document|category) * Pr(category)/Pr(document)

接下来,我们选取“quick car”这两个单词构成的文本,测试分类效果:


通过选定的5段文本训练,经过计算,“quick car”属于good的概率为0.0312,远远大约属于bad的概率0.009,因此可以判断为“good”。

同样,贝叶斯分类器不仅仅可以用来判断文本的感情倾向,只要需要给文本进行分类的时候都可以用到。当然,本文介绍的方法只是一种示例,实际的训练集和需要判断的文本都会更加复杂。而且,本文假设每个特征变量都是独立的,但这种假设并不现实,因此是未来可以改进的地方。
页: [1]
查看完整版本: SAS代码构建贝叶斯文本分类器全教程