文本分类实例:分辨垃圾邮件、文章作者识别、作者性别识别、电影评论情感识别(积极或消极)、文章主题识别及任何可分类的任务。

一、文本分类问题定义:

输入:

  • 一个文本d
  • 一个固定的类别集合C={c1,c2,...,cj},一共j个类别

输出:一个d的预测类别c∈C

方法:

  • 最简单的是使用基于词或其他特征组合的手写规则

    • 垃圾邮件:列举出一系列黑名单的邮箱地址或者词(比如,“dollars”和“have been selected”)
    • 如果规则很完备,准确率会非常高,但是一般很难做到或者花费会很贵
  • 一般方法:结合手写规则和机器学习

二、有监督的机器学习方法:

输入:

  • 一个文本d
  • 一个固定的类别集合C={c1,c2,...,cj},一共j个类别
  • 一个训练集,其中包括m个已经被手动标记上类别的文档(d1,c1),...,(dm,cm)

输出:一个学习完毕的分类器γ: d→c,即给定一个新文档就可以输出一个对应的类别

分类器类别:

  • Naive Bayes
  • 逻辑回归
  • 支持向量机Support-vector machines
  • K近邻k-Nearest Neighbors
  • ...

1. Naive Bayes

主要思想:非常简单,基于贝叶斯规则,用词袋表示文档

词袋:只统计文档中出现的单词本身及其计数,而忽略了词跟词之间的顺序,只是一个词的集合。词可以是文档中的词的全集或子集(即,只统计部分特征词),从而可以用一个词向量来表征文档

1.1 形式化描述:

对于一个文档d和一个类别c,我们旨在计算以下概率,,即给定一个文档,归属于该类别的概率是多少,从而找到最佳的类别:

最佳的匹配类别为:

其中P(d|c)为最大似然概率,P(c)为先验概率

继而有:

假定:

  • Bag of Words assumption: 假定词的位置无关紧要,只关注是否出现某个词
  • conditional independence条件独立性:假定给定类别c,各个特征x1,x2,...之间的概率P(xi|c)相互独立

当然以上的假设实际上并不正确,却能简化我们的计算问题,从而有:

1.2 参数学习:

最简单的方法:使用最大似然估计

这里需要将属于类别cj的文档都连接在一起,创建一个新的大文档,然后计算wi在该大文档中的频次

然而实际上,我们并不在naive Bayes中使用最大似然估计,因为:

  • 当测试集中出现训练集中没有的词时,会按照训练集中的计数被记为0,而当一个测试文档中出现一个类别cj中未知的词时,该文档属于cj的概率会是0,因为是连乘。

解决方法:增加一个平滑

Add-1:

1.2.1 具体步骤:
  1. 从训练集中提取词汇表V
  2. 计算每一个类别的P(cj)
    • 将所有属于cj类别的文档放入一个集合docsj
    • 计算:
  3. 计算类别cj下文档中的某个词wk的条件概率P(wk|cj)
    • 将docsj中的文档连接成一个文档Textj
    • 对于词汇表中的每个词,计算:
      • wk在Textj中出现的次数nk
      • ,其中α是增加的一个平滑
1.2.2 如何应对未知词:

在词汇表中增加一个词“unknown word”,用wu表示。

由于在训练集中不存在未知词,所以count(wu,c)=0,条件概率为:

2. Naive Bayes与语言模型的关系

根据一个类别,我们可以围绕这个类别生成一个文本,其跟语言模型非常相似

假设:每个类别=一个unigram语言模型

证明:

在Naive Bayes中,对于文档中的一个词有一个归属于一个类别的概率:P(word | c)。从而每个句子有:。例子如下:

文档为:“I love this fun film”。类别为:postive。则每个词归属于positive的概率为左列所示。

则整个句子的概率为:

而unigram语言模型在计算概率时为P(s)=ΠP(word)

所以Naive Bayes其实就是一个已知类别下的unigram语言模型。

当我们在检验不同类别下句子的概率时,就好比在运行不同的语言模型,比如postive和negtive

所以寻找概率最高的归属类别的过程就变成了寻找概率最高的语言模型的过程。

3. 多项式Naive Bayes模型的实例

3.1新闻分类

设我们要对亚洲新闻进行分类,训练集中有四个文档,每个文档归属于chinese或japanese,测试集中有一个文档,要求对这个文档进行分类。P(c)和P(w | c)的计算方法如上所示。

解:

1) 首先计算P(c)

2) 然后计算P(w | c):统计词汇表中一共有6个单词:Chinese, Beijing, Shanghai, Macao, Tokyo, Japan。由于测试集中只有3个单词:Chinese,Tokyo,Japan,所以方便起见我们只计算这三个词的条件概率如下:

以P(Chinese|c)为例,Chinese在c这个类别下出现了5次,c这个类别下一共有3+3+2=8个词,词汇表一共有6个词,则根据公式可以计算得到结果为6/14=3/7

3) 然后计算P(c|d5):d5表示第5篇文档,即测试文档,表示已知文档d5,求归属类别。

因为P(c|d5)=P(d5|c)*P(c)/P(d5)=ΠP(word|c)*P(c)/P(d5)v9 ∝ ΠP(word|c)*P(c),所以:

P(c|d5)>P(j|d5),所以测试文档的类别应为c

3.2 垃圾邮件过滤

上述新闻分类的实例中采用每个词作为特征,但是大部分应用中选用的是特殊种类的词和其他作为特征。在垃圾邮件检测中,采用以下作为特征:

【NLP_Stanford课堂】文本分类1的更多相关文章

  1. 【NLP_Stanford课堂】文本分类2

    一.实验评估参数 实验数据本身可以分为是否属于某一个类(即correct和not correct),表示本身是否属于某一类别上,这是客观事实:又可以按照我们系统的输出是否属于某一个类(即selecte ...

  2. Tensorflow二分类处理dense或者sparse(文本分类)的输入数据

    这里做了一些小的修改,感谢谷歌rd的帮助,使得能够统一处理dense的数据,或者类似文本分类这样sparse的输入数据.后续会做进一步学习优化,比如如何多线程处理. 具体如何处理sparse 主要是使 ...

  3. Atitti 文本分类  以及 垃圾邮件 判断原理 以及贝叶斯算法的应用解决方案

    Atitti 文本分类  以及 垃圾邮件 判断原理 以及贝叶斯算法的应用解决方案 1.1. 七.什么是贝叶斯过滤器?1 1.2. 八.建立历史资料库2 1.3. 十.联合概率的计算3 1.4. 十一. ...

  4. 基于weka的文本分类实现

    weka介绍 参见 1)百度百科:http://baike.baidu.com/link?url=V9GKiFxiAoFkaUvPULJ7gK_xoEDnSfUNR1woed0YTmo20Wjo0wY ...

  5. LingPipe-TextClassification(文本分类)

    What is Text Classification? Text classification typically involves assigning a document to a catego ...

  6. 文本分类之特征描述vsm和bow

    当我们尝试使用统计机器学习方法解决文本的有关问题时,第一个需要的解决的问题是,如果在计算机中表示出一个文本样本.一种经典而且被广泛运用的文本表示方法,即向量空间模型(VSM),俗称“词袋模型”. 我们 ...

  7. R语言做文本挖掘 Part4文本分类

    Part4文本分类 Part3文本聚类提到过.与聚类分类的简单差异. 那么,我们需要理清训练集的分类,有明白分类的文本:測试集,能够就用训练集来替代.预測集,就是未分类的文本.是分类方法最后的应用实现 ...

  8. Spark ML下实现的多分类adaboost+naivebayes算法在文本分类上的应用

    1. Naive Bayes算法 朴素贝叶斯算法算是生成模型中一个最经典的分类算法之一了,常用的有Bernoulli和Multinomial两种.在文本分类上经常会用到这两种方法.在词袋模型中,对于一 ...

  9. 文本分类学习(三) 特征权重(TF/IDF)和特征提取

    上一篇中,主要说的就是词袋模型.回顾一下,在进行文本分类之前,我们需要把待分类文本先用词袋模型进行文本表示.首先是将训练集中的所有单词经过去停用词之后组合成一个词袋,或者叫做字典,实际上一个维度很大的 ...

随机推荐

  1. laravel 运用

    查看路由:php artisan route:list 查看路由

  2. clearfix的用法

    如果有一个DIV作为外部容器,内部的DIV如果设置了float样式,则外部的容器DIV因为内部没有 clear,导致不能被撑开.看下面的例子:Div布局如下:Css代码如下:.out{border:1 ...

  3. unity鼠标拖动物体旋转

    using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> / ...

  4. Netty SSL性能调优

    TLS算法组合 在TLS中,5类算法组合在一起,称为一个CipherSuite: 认证算法 加密算法 消息认证码算法 简称MAC 密钥交换算法 密钥衍生算法 比较常见的算法组合是 TLS_ECDHE_ ...

  5. WPF获取程序启动路径(StartupPath)

    1. 在传统的Winform中获取 可以使用: Application.StartupPath Application.ExecutablePath 很可惜,这些方法,在WPF中都失效啦 2. 在WP ...

  6. 游戏开发者注意!这个音频SDK可以完美兼容所有主流游戏引擎

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯游戏云 发表于云+社区专栏 在网络游戏中,无论是大逃杀.棋牌类.电子竞技类还是娱乐休闲类小游戏,玩家和玩家之间的互动.语音聊天是一 ...

  7. Python基础(3) - 数据类型:2字符串类型

    Python字符串的表示有三种方法: 1.单引号(') >>>a = 'I love python. ' 2.双引号(") >>>a = " I ...

  8. HDU 5698——瞬间移动——————【逆元求组合数】

    瞬间移动 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submis ...

  9. java中wait和notify的关系

    java中,wait和notify这两个方法是一对,wait方法阻塞当前线程,而notify是唤醒被wait方法阻塞的线程.     首先,需要说明的是,wait和notify方法都是Object的实 ...

  10. 网易和淘宝的rem方案剖析

    以下内容到分割线前是引用前端大牛的文章,方便大家理解博主内容): 从网易与淘宝的font-size思考前端设计稿与工作流 1. 简单问题简单解决 我觉得有些web app并一定很复杂,比如拉勾网,你看 ...