`
lzj0470
  • 浏览: 1277037 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

文本分类入门(五)训练Part 2

阅读更多

将样本数据成功转化为向量表示之后,计算机才算开始真正意义上的“学习”过程。

  再重复一次,所谓样本,也叫训练数据,是由人工进行分类处理过的文档集合,计算机认为这些数据的分类是绝对正确的,可以信赖的(但某些方法也有针对训练数据可能有错误而应对的措施)。接下来的一步便是由计算机来观察这些训练数据的特点,来猜测一个可能的分类规则(这个分类规则也可以叫做分类器,在机器学习的理论著作中也叫做一个“假设”,因为毕竟是对真实分类规则的一个猜测),一旦这个分类满足一些条件,我们就认为这个分类规则大致正确并且足够好了,便成为训练阶段的最终产品——分类器!再遇到新的,计算机没有见过的文档时,便使用这个分类器来判断新文档的类别。

  举一个现实中的例子,人们评价一辆车是否是“好车”的时候,可以看作一个分类问题。我们也可以把一辆车的所有特征提取出来转化为向量形式。在这个问题中词典向量可以为:

   D=(价格,最高时速,外观得分,性价比,稀有程度)

  则一辆保时捷的向量表示就可以写成

   vp=(200万,320,9.5,3,9)

  而一辆丰田花冠则可以写成

   vt=(15万,220,6.0,8,3)

  找不同的人来评价哪辆车算好车,很可能会得出不同的结论。务实的人认为性价比才是评判的指标,他会认为丰田花冠是好车而保时捷不是;喜欢奢华的有钱人可能以稀有程度来评判,得出相反的结论;喜欢综合考量的人很可能把各项指标都加权考虑之后才下结论。

  可见,对同一个分类问题,用同样的表示形式(同样的文档模型),但因为关注数据不同方面的特性而可能得到不同的结论。这种对文档数据不同方面侧重的不同导致了原理和实现方式都不尽相同的多种方法,每种方法也都对文本分类这个问题本身作了一些有利于自身的假设和简化,这些假设又接下来影响着依据这些方法而得到的分类器最终的表现,可谓环环相连,丝丝入扣,冥冥之中自有天意呀(这都什么词儿……)。

比较常见,家喻户晓,常年被评为国家免检产品(?!)的分类算法有一大堆,什么决策树,Rocchio,朴素贝叶斯,神经网络,支持向量机,线性最小平方拟合,kNN,遗传算法,最大熵,Generalized Instance Set等等等等(这张单子还可以继续列下去)。在这里只挑几个最具代表性的算法侃一侃。

  Rocchio算法

  Rocchio算法应该算是人们思考文本分类问题时最先能想到,也最符合直觉的解决方法。基本的思路是把一个类别里的样本文档各项取个平均值(例如把所有“体育”类文档中词汇“篮球”出现的次数取个平均值,再把“裁判”取个平均值,依次做下去),可以得到一个新的向量,形象的称之为“质心”,质心就成了这个类别最具代表性的向量表示。再有新文档需要判断的时候,比较新文档和质心有多么相像(八股点说,判断他们之间的距离)就可以确定新文档属不属于这个类。稍微改进一点的Rocchio算法不尽考虑属于这个类别的文档(称为正样本),也考虑不属于这个类别的文档数据(称为负样本),计算出来的质心尽量靠近正样本同时尽量远离负样本。Rocchio算法做了两个很致命的假设,使得它的性能出奇的差。一是它认为一个类别的文档仅仅聚集在一个质心的周围,实际情况往往不是如此(这样的数据称为线性不可分的);二是它假设训练数据是绝对正确的,因为它没有任何定量衡量样本是否含有噪声的机制,因而也就对错误数据毫无抵抗力。

  不过Rocchio产生的分类器很直观,很容易被人类理解,算法也简单,还是有一定的利用价值的(做汉奸状),常常被用来做科研中比较不同算法优劣的基线系统(Base Line)。

  朴素贝叶斯算法(Naive Bayes)

  贝叶斯算法关注的是文档属于某类别概率。文档属于某个类别的概率等于文档中每个词属于该类别的概率的综合表达式。而每个词属于该类别的概率又在一定程度上可以用这个词在该类别训练文档中出现的次数(词频信息)来粗略估计,因而使得整个计算过程成为可行的。使用朴素贝叶斯算法时,在训练阶段的主要任务就是估计这些值。

朴素贝叶斯算法的公式只有一个

文本分类入门(五)训练Part 2

  其中P(d| Ci)=P(w1|Ci) P(w2|Ci) …P(wi|Ci) P(w1|Ci) …P(wm|Ci) (式1)

  P(wi|Ci)就代表词汇wi属于类别Ci的概率。

  这其中就蕴含着朴素贝叶斯算法最大的两个缺陷。

  首先,P(d| Ci)之所以能展开成(式1)的连乘积形式,就是假设一篇文章中的各个词之间是彼此独立的,其中一个词的出现丝毫不受另一个词的影响(回忆一下概率论中变量彼此独立的概念就可以知道),但这显然不对,即使不是语言学专家的我们也知道,词语之间有明显的所谓“共现”关系,在不同主题的文章中,可能共现的次数或频率有变化,但彼此间绝对谈不上独立。

  其二,使用某个词在某个类别训练文档中出现的次数来估计P(wi|Ci)时,只在训练样本数量非常多的情况下才比较准确(考虑扔硬币的问题,得通过大量观察才能基本得出正反面出现的概率都是二分之一的结论,观察次数太少时很可能得到错误的答案),而需要大量样本的要求不仅给前期人工分类的工作带来更高要求(从而成本上升),在后期由计算机处理的时候也对存储和计算资源提出了更高的要求。

  kNN算法则又有所不同,在kNN算法看来,训练样本就代表了类别的准确信息(因此此算法产生的分类器也叫做“基于实例”的分类器),而不管样本是使用什么特征表示的。其基本思想是在给定新文档后,计算新文档特征向量和训练文档集中各个文档的向量的相似度,得到K篇与该新文档距离最近最相似的文档,根据这K篇文档所属的类别判定新文档所属的类别(注意这也意味着kNN算法根本没有真正意义上的“训练”阶段)。这种判断方法很好的克服了Rocchio算法中无法处理线性不可分问题的缺陷,也很适用于分类标准随时会产生变化的需求(只要删除旧训练文档,添加新训练文档,就改变了分类的准则)。

kNN唯一的也可以说最致命的缺点就是判断一篇新文档的类别时,需要把它与现存的所有训练文档全都比较一遍,这个计算代价并不是每个系统都能够承受的(比如我将要构建的一个文本分类系统,上万个类,每个类即便只有20个训练样本,为了判断一个新文档的类别,也要做20万次的向量比较!)。一些基于kNN的改良方法比如Generalized Instance Set就在试图解决这个问题。

  下一节继续讲和训练阶段有关的话题,包括概述已知性能最好的SVM算法。明儿见!(北京人儿,呵呵)

<!-- 分页 -->
分享到:
评论

相关推荐

    浅谈Python NLP入门教程

    - 可以通过训练特定的情感分类器实现。 **总结** 本教程旨在为初学者提供一个关于Python NLP的基础指南。通过以上内容的学习,读者可以了解到如何使用Python进行基本的文本处理、分词以及词频统计等操作,并对NLP...

    CRF(条件随机场)入门文档

    在自然语言处理、生物信息学和语音识别等领域,经常需要对一系列观察到的数据进行标签序列的分配,例如,将自然语言文本中的每个词标记为相应的词性(Part-of-Speech, POS)。CRF在这里提供了一种强大而灵活的方法,...

    NLP基础入门.docxNLP基础入门.docxNLP基础入门.docxNLP基础入门.docx

    - **项目选择**:可以从简单的文本分类、情感分析开始。 - **项目实施**:使用上述技术解决问题。 - **结果评估**:通过准确率、召回率等指标评估模型性能。 ##### 6. 持续学习 - **跟踪最新进展**:关注顶级学术...

    「59页PDF」非技术也能看懂的 NLP 入门科普.pdf.zip

    3. **词法分析**:介绍分词(Tokenization)、词性标注(Part-of-Speech Tagging)和命名实体识别(Named Entity Recognition),这些是处理文本的初步步骤,用于将连续的文本分解成有意义的单位。 4. **句法分析**...

    [深度学习] 自然语言处理 --- NLP入门指南_小墨鱼的专栏-程序员宅基地 - 程序员宅基地1

    1. **类别到序列**:例如文本分类,将一段文本映射到一个或多个预定义的类别。 2. **序列到类别**:如情感分析,通过分析文本序列预测其所属的情感类别。 3. **同步的序列到序列**:比如机器翻译,将一种语言的句子...

    清华大学精品AI人工智能课程深度学习全套课程PPT课件含习题(30页) 第9章 深度学习在文本中的应用.pptx

    在深度学习的基本过程中,模型训练通常包括前向传播和反向传播,用于优化权重参数以提高模型对文本数据的拟合程度。深度学习模型如循环神经网络(RNN)、长短时记忆网络(LSTM)和Transformer等在NLP任务中表现出色...

    Python中一些自然语言工具的使用的入门教程

    在NLTK中,数据集的集合被称为“Corpora”,它们是预处理过的文本集,可以用作分析和训练模型的数据源。例如,NLTK提供了一些经典的语料库,如莎士比亚的剧本、布朗语料库(Brown Corpus)等。而“Histogram”是指...

    IntroducionToNLP:该库存储的是,我在阅读何晗老师的《自然语言处理入门》过程中,所复现和整理的Python代码

    2. **词性标注**:词性标注(Part-of-Speech Tagging)是识别文本中每个单词的语法角色,如名词、动词、形容词等。Python的nltk库提供了`pos_tag`函数来实现这一功能。 3. **命名实体识别**:命名实体识别(Named ...

    Python中文自然语言处理基础与实战_源代码和实验数据.rar

    10. **第10章**:可能会介绍文本分类和情感分析的深度学习模型,如RNN、LSTM、GRU和BERT等。 11. **第11章**:最后,可能涉及到自然语言生成,使用预先训练好的模型生成新的文本。 这些章节的源代码和实验数据将...

    自然语言处理_Python_下载.zip

    2. **Spacy**:这是一个高效的工业级NLP库,设计目标是简化NLP任务,提供预训练的语言模型,支持多语言,并且性能强大。它的特点是速度快,内存占用低。 3. **TextBlob**:基于NLTK构建,提供了更简单的接口,适合...

    sentiment-analysis:UBC图书馆研究共同体情感分析入门研讨会

    研讨会可能涵盖从基础概念,如词性标注(Part-of-Speech tagging)、情感词汇表(Sentiment Lexicons)到更高级的技术,如机器学习模型(如朴素贝叶斯、支持向量机)的构建和训练,用于自动识别文本情感。...

    Supervised Sequence Labelling with Recurrent Neural Networks

    这里的“监督式”意味着训练过程中需要有已标注的数据集作为指导,而“序列标注”则特指对于输入序列中的每个元素进行分类或标记的任务。 #### 描述解析 描述部分简短地重复了标题内容,并没有提供额外的信息。但从...

    OpenNLP-开源

    OpenNLP 包含了一系列用于处理文本数据的模块,如词性标注(Part-of-Speech tagging)、命名实体识别(Named Entity Recognition)、句子分割(Sentence Detection)、依存关系分析(Dependency Parsing)等。...

    2016ife-task:2016百度前端技术学院任务

    接下来是“任务Part2 Demo JS基础”,这是对JavaScript语言的初步介绍。JavaScript是一种客户端脚本语言,它赋予了网页动态交互的能力。在这一部分,学员会学习变量、数据类型、控制流程(如条件语句和循环)、函数...

    Transpire:hackathon项目,用您的母语编写程序

    这个项目的核心理念是降低编程的入门门槛,让编程变得更加亲切和易懂,尤其是对于那些母语非英语的开发者。 在Java编程世界中,这可能涉及到使用特定的库或框架来实现自然语言处理(NLP),以便将母语指令转化为可...

    C++MFC教程

    Visual C++MFC入门教程 目录 +-- 第一章 VC入门 |------ 1.1 如何学好VC |------ 1.2 理解Windows消息机制 |------ 1.3 利用Visual C++/MFC开发Windows程序的优势 |------ 1.4 利用MFC进行开发的通用方法介绍 |----...

Global site tag (gtag.js) - Google Analytics