热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【NLP_Stanford课堂】文本分类1

文本分类实例:分辨垃圾邮件、文章作者识别、作者性别识别、电影评论情感识别(积极或消极)、文章主题识别及任何可分类的任务。一、文本分类问题定义:输入:一个文本d一个固定的类别集合

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

一、文本分类问题定义:

输入:

  • 一个文本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 垃圾邮件过滤

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

 


推荐阅读
  • 本文讨论了在Spring 3.1中,数据源未能自动连接到@Configuration类的错误原因,并提供了解决方法。作者发现了错误的原因,并在代码中手动定义了PersistenceAnnotationBeanPostProcessor。作者删除了该定义后,问题得到解决。此外,作者还指出了默认的PersistenceAnnotationBeanPostProcessor的注册方式,并提供了自定义该bean定义的方法。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 本文介绍了贝叶斯垃圾邮件分类的机器学习代码,代码来源于https://www.cnblogs.com/huangyc/p/10327209.html,并对代码进行了简介。朴素贝叶斯分类器训练函数包括求p(Ci)和基于词汇表的p(w|Ci)。 ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • 前言:拿到一个案例,去分析:它该是做分类还是做回归,哪部分该做分类,哪部分该做回归,哪部分该做优化,它们的目标值分别是什么。再挑影响因素,哪些和分类有关的影响因素,哪些和回归有关的 ... [详细]
  • Python入门后,想要从事自由职业可以做哪方面工作?1.爬虫很多人入门Python的必修课之一就是web开发和爬虫。但是这两项想要赚钱的话 ... [详细]
  • 支持向量机训练集多少个_25道题检测你对支持向量机算法的掌握程度
    介绍在我们学习机器算法的时候,可以将机器学习算法视为包含刀枪剑戟斧钺钩叉的一个军械库。你可以使用各种各样的兵器,但你要明白这些兵器是需要在合适的时间合理 ... [详细]
  • plt python 画直线_机器学习干货,一步一步通过Python实现梯度下降的学习
    GradientDescent-梯度下降梯度下降法(英语:Gradientdescent)是一个一阶最优化算法,通常也称为最速下降法。要使用梯度下降法找 ... [详细]
author-avatar
sdfasdfqg
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有