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

一、文本分类问题定义:

输入:

  • 一个文本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. 基于python实现GET和POST请求及token相关调用

    GET请求实例: #coding:utf- import requests parm={"}#封装登录参数 r=requests.get("http://space.test.co ...

  2. A problem has been detected and windows has been shut down to prevent damage

    问题描述 问题解决 参考百度经验, 未解决,重装系统,U盘启动解决.过程可以参考上一篇博文.

  3. 解决执行maven项目出现 SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”. error

    最近再弄maven项目,运行起来没有问题,但是Console控制台会报错,比如说如下的问题异常提示: 由此我们可以看出,报出错误的地方主要是slf4j的jar包,而故障码中“Failed to loa ...

  4. python pandas使用一些协程

    import pandas as pd def coroutine(func): """装饰器:向前执行到第一个`yield`表达式,预激`func`"&quo ...

  5. 2016424王启元 Exp5 msf基础应用

    成功实现的有: 一个主动攻击实践,ms08_067 一个针对浏览器的攻击,ms11_050 一个针对客户端的攻击,Adobe(在实现这一步骤的时候有点小瑕疵,就是Adobe的版本问题换了三四个才成功) ...

  6. Digispark(ATTINY85) 微型开发板驱动安装与开发环境配置教程

    前几天无聊就弄了弄这个玩,网上教程可能有点杂,在这里就总结一下. Digispark开发板(也就是badusb)能干什么,自己搜去,/坏笑. 1.准备材料:Attiny85微型 USB接口开发板 Di ...

  7. git笔记(三)

    详细输出日志 git log --pretty=raw 查看id类型 git cat-file -t fe4c git cat-file -t b36bf6 git  cat-file  -t b08 ...

  8. HDU 5694——BD String——————【递归求解】

    BD String Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  9. WEB下渗透测试经验技巧(全)[转载]

    Nuclear’Atk 整理的: 上传漏洞拿shell: 1.直接上传asp.asa.jsp.cer.php.aspx.htr.cdx….之类的马,拿到shell.2.就是在上传时在后缀后面加空格或者 ...

  10. C#操作Redis Hash数据表

    /// <summary> /// Redis Hash /// </summary> public static void Redis_Hash() { RedisClien ...