文本分类问题与其它分类问题没有本质上的区别,其方法可以归结为根据待分类数据的某些特征来进行匹配,当然完全的匹配是不太可能的,因此必须(根据某种评价标准)选择最优的匹配结果,从而完成分类。 后来人们意识到,究竟依据什么特征来判断文本应当隶属的类别这个问题,就连人类自己都不太回答得清楚,有太多所谓“只可意会,不能言传”的东西在里面。人类的判断大多依据经验以及直觉,因此自然而然的会有人想到何让机器像人类一样自己来通过对大量同类文档的观察来自己总结经验,作为今后分类的依据。这便是统计学习方法的基本思想。
统计学习方法需要一批由人工进行了准确分类的文档作为学习的材料(称为训练集,注意由人分类一批文档比从这些文档中总结出准确的规则成本要低得多),计算机从这些文档中挖掘出一些能够有效分类的规则,这个过程被形象的称为训练,而总结出的规则集合常常被称为分类器。训练完成之后,需要对计算机从来没有见过的文档进行分类时,便使用这些分类器来进行。这些训练集包括sogou文本分类分类测试数据、中文文本分类分类语料库,包含Arts、Literature等类别的语料文本、可用于聚类的英文文本数据集、网易分类文本分类文本数据、tc-corpus-train(语料库训练集,适用于文本分类分类中的训练)、2002年中文网页分类训练集CCT2002-v11等。
现如今,统计学习方法已经成为了文本分类领域绝对的主流。主要的原因在于其中的很多技术拥有坚实的理论基础(相比之下,知识工程方法中专家的主观因素居多),存在明确的评价标准,以及实际表现良好。统计分类算法
将样本数据成功转化为向量表示之后,计算机才算开始真正意义上的“学习”过程。常用的分类算法为:
决策树,Rocchio,朴素贝叶斯,神经网络,支持向量机,线性最小平方拟合,kNN,遗传算法,最大熵,Generalized Instance Set等。在这里只挑几个最具代表性的算法侃一侃。
Rocchio算法
Rocchio算法应该算是人们思考文本分类问题时最先能想到,也最符合直觉的解决方法。基本的思路是把一个类别里的样本文档各项取个平均值(例如把所有 “体育”类文档中词汇“篮球”出现的次数取个平均值,再把“裁判”取个平均值,依次做下去),可以得到一个新的向量,形象的称之为“质心”,质心就成了这 个类别最具代表性的向量表示。再有新文档需要判断的时候,比较新文档和质心有多么相像(八股点说,判断他们之间的距离)就可以确定新文档属不属于这个类。 稍微改进一点的Rocchio算法不仅考虑属于这个类别的文档(称为正样本),也考虑不属于这个类别的文档数据(称为负样本),计算出来的质心尽量靠近正样本同时尽量远离负样本。Rocchio算法做了两个很致命的假设,使得它的性能出奇的差。一是它认为一个类别的文档仅仅聚集在一个质心的周围,实际情况往往不是如此(这样的数据称为线性不可分的);二是它假设训练数据是绝对正确的,因为它没有任何定量衡量样本是否含有噪声的机制,因而也就对错误数据毫无抵抗力。
不过Rocchio产生的分类器很直观,很容易被人类理解,算法也简单,还是有一定的利用价值的,常常被用来做科研中比较不同算法优劣的基线系统(Base Line)。
朴素贝叶斯算法
贝叶斯算法关注的是文档属于某类别概率。文档属于某个类别的概率等于文档中每个词属于该类别的概率的综合表达式。而每个词属于该类别的概率又在一定程度上 可以用这个词在该类别训练文档中出现的次数(词频信息)来粗略估计,因而使得整个计算过程成为可行的。使用朴素贝叶斯算法时,在训练阶段的主要任务就是估计这些值。
朴素贝叶斯算法的公式并不是只有一个。
首先对于每一个样本中的元素要计算先验概率。其次要计算一个样本对于每个分类的概率,概率最大的分类将被采纳。所以
其中P(d| Ci)=P(w1|Ci) P(w2|Ci) …P(wi|Ci) P(w1|Ci) …P(wm|Ci) (式1)
P(w|C)=元素w在分类为C的样本中出现次数/数据整理后的样本中元素的总数(式2)
这其中就蕴含着朴素贝叶斯算法最大的两个缺陷。
首先,P(d| Ci)之所以能展开成(式1)的连乘积形式,就是假设一篇文章中的各个词之间是彼此独立的,其中一个词的出现丝毫不受另一个词的影响(回忆一下概率论中变 量彼此独立的概念就可以知道),但这显然不对,即使不是语言学专家的我们也知道,词语之间有明显的所谓“共现”关系,在不同主题的文章中,可能共现的次数 或频率有变化,但彼此间绝对谈不上独立。
其二,使用某个词在某个类别训练文档中出现的次数来估计P(wi|Ci)时,只在训练样本数量非常多的情况下才比较准确(考虑扔硬币的问题,得通过大量观 察才能基本得出正反面出现的概率都是二分之一的结论,观察次数太少时很可能得到错误的答案),而需要大量样本的要求不仅给前期人工分类的工作带来更高要求 (从而成本上升),在后期由计算机处理的时候也对存储和计算资源提出了更高的要求。
但是稍有常识的技术人员都会了解,数据挖掘中占用大量时间的部分是数据整理。在数据整理阶段,可以根据词汇的情况生成字典,删除冗余没有意义的词汇,对于单字和重要的词组分开计算等等。
这样可以避免朴素贝叶斯算法的一些问题。其实真正的问题还是存在于算法对于信息熵的计算方式。
朴素贝叶斯算法在很多情况下,通过专业人员的优化,可以取得极为良好的识别效果。最为人熟悉的两家跨国软件公司在目前仍采用朴素贝叶斯算法作为有些软件自然语言处理的工具算法。
kNN算法
最近邻算法(kNN):在给定新文档后,计算新文档特征向量和训练文档集中各个文档的向量的相似度,得到K篇与该新文 档距离最近最相似的文档,根据这K篇文档所属的类别判定新文档所属的类别(注意这也意味着kNN算法根本没有真正意义上的“训练”阶段)。这种判断方法很 好的克服了Rocchio算法中无法处理线性不可分问题的缺陷,也很适用于分类标准随时会产生变化的需求(只要删除旧训练文档,添加新训练文档,就改变了 分类的准则)。
kNN唯一的也可以说最致命的缺点就是判断一篇新文档的类别时,需要把它与现存的所有训练文档全都比较一遍,这个计算代价并不是每个系统都能够承受的(比 如我将要构建的一个文本分类系统,上万个类,每个类即便只有20个训练样本,为了判断一个新文档的类别,也要做20万次的向量比较!)。一些基于kNN的 改良方法比如Generalized Instance Set就在试图解决这个问题。
kNN也有另一个缺点,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。 SVM(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。
支持向量机方法是建立在统计学习理论的VC维理论和结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度,Accuracy)和学习能力(即无错误地识别任意样本的能力)之间寻求最佳折衷,以期获得最好的推广能力(或称泛化能力)。
SVM 方法有很坚实的理论基础,SVM 训练的本质是解决一个二次规划问题(Quadruple Programming,指目标函数为二次函数,约束条件为线性约束的最优化问题),得到的是全局最优解,这使它有着其他统计学习技术难以比拟的优越性。 SVM分类器的文本分类效果很好,是最好的分类器之一。同时使用核函数将 原始的样本空间向高维空间进行变换,能够解决原始样本线性不可分的问题。其缺点是核函数的选择缺乏指导,难以针对具体问题选择最佳的核函数;另外SVM 训练速度极大地受到训练集规模的影响,计算开销比较大,针对SVM 的训练速度问题,研究者提出了很多改进方法,包括Chunking 方法、Osuna算法、SMO 算法和交互SVM 等。SVM分类器的优点在于通用性较好,且分类精度高、分类速度快、分类速度与训练样本个数无关,在查准和查全率方面都略优于kNN及朴素贝叶斯方法。
关于情感分析文本相似性和语句推断等都属于常见中文分词应用中的语句关系判断回答如下:
情感分析,文本相似性和语句推断等都属于常见中文分词应用中的语句关系判断如下情感分析、文本相似性和语句推断都是中文自然语言处理中的常见任务,需要进行语句关系判断。
其中,分词是中文自然语言处理中的基础步骤,可以将句子切分成有意义的词语,为后续任务提供基础。
在情感分析任务中,需要对文本的情感进行分类,通常采用机器学习算法,对文本进行特征提取和分类。文本相似性任务是指比较两个文本之间的相似度,通常采用词向量模型进行特征提取和相似度计算。
语句推断任务是指给定前提和假设,判断假设是否可以从前提中推出,通常需要进行逻辑推理和语义理解。这些任务都需要进行语句关系判断,对中文自然语言处理具有重要意义。
资料扩展:
情感分析是指通过文本来挖掘人们对于产品、服务、组织、个人、事件等的观点、情感倾向、态度等。情感分析是随着互联网发展而产生的,早期主要用于对网上销售商品的用户评语的分析,
以便判断用户对其所购商品是“喜欢”还是“不喜欢”。后期随着自媒体的流行,情感分析技术更多地用于识别话题发起者、参与者的情感趋向,
从中判断或挖掘话题中的价值,由此来分析相关舆情。情感分析的应用十分广泛,其研究领域涉及自然语言处理、信息检索、机器学习、人工智能等。
领域依赖是指文本情感分析的模型对某一领域的文本数据非常有效,但是将其应用于其他领域的时候,会使得分类模型的性能严重下降。
学习过机器学习的你,也许对分类问题很熟悉。比如下图:
中是否包含房子?你的回答就是有或者没有,这就是一个典型的二分类问题。
同样,是这幅照片,问题变成了,这幅照片是谁拍摄的?备选答案你,你的父亲,你的母亲?这就变成了一个多分类问题。
但今天谈论的多标签是什么呢?
如果我问你上面图包含一座房子吗?选项会是YES或NO。
你会发现图中所示的答案有多个yes,而不同于之前的多分类只有一个yes。
这里思考一下:
一首歌:如果你有四个类别的音乐,分别为:古典音乐、乡村音乐、摇滚乐和爵士乐,那么这些类别之间是互斥的。这首歌属于哪个类别?这是一个什么问题?
一首歌:如果你有四个类别的音乐,分别为:人声音乐、舞曲、影视原声、流行歌曲,那么这些类别之间并不是互斥的。这首歌属于哪个类别?这是一个什么问题?
这里需要先了解一下softmax 与 sigmoid函数
这两个函数最重要的区别,我们观察一下:
区别还是很明显的。
综上,我们可以得出以下结论:
PyTorch提供了两个类来计算二分类交叉熵(Binary Cross Entropy),分别是BCELoss() 和BCEWithLogitsLoss()
看一下源码,参考帮助,我们来玩一下
输出
因为Note that the targets t[i] should be numbers between 0 and 1
所以需要先sigmoid
输出
假设你的target如下:
输出
自己计算一下:
输出
我们再对比一下使用torch内置的loss函数
输出
和我们自己算的误差非常小,可以忽略。
我们可以把sigmoid和bce的过程放到一起,使用内建的BCEWithLogitsLoss函数
输出
文档分析问题分类有文本分类、实体识别、模式挖掘问题。
1、文本分类问题:文本分类是将文本内容划分到预定义的若干个类别中的过程。这种分类问题是基于文本本身的特征构建模型,例如基于词频、n-gram、主题模型等技术。
2、实体识别问题:实体识别是指从文本中寻找并标注出人名、地名、组织机构等实体,实体识别属于信息抽取的一部分。
3、模式挖掘问题:模式挖掘是从数据中寻找有用的模式或规律,以支持知识发现和预测性分析的过程。在文本分析中,模式挖掘也可以应用于发现文本特征、主题词、情感极性等。
在实际应用中,不同的分类问题往往会交叉应用。例如,在情感分析中,需要进行文本分类来确定情感类型,同时也需要进行实体识别来提取情感对象的名称。
在文本分类中,标签被用来对文本进行分类和归类。例如,一个新闻网站可以使用标签来对新闻进行分类,如政治、经济、体育等。这样,用户可以根据自己的兴趣选择阅读感兴趣的新闻。同样地,一个文本分类系统也可以使用标签来对文本进行分类,如情感分析、主题分类等,方便用户进行文本分析和处理。
总之,标签作为一种分类和组织信息的工具,被广泛应用于各种领域。在互联网时代,标签已经成为了人们快速获取信息和管理数据的重要工具,其作用不可忽视。
总之,标签作为一种分类和组织信息的工具,被广泛应用于各种领域。在互联网时代,标签已经成为了人们快速获取信息和管理数据的重要工具,其作用不可忽视。
在数据管理中,标签被用来对数据进行分类和组织。例如,一个音乐网站可以使用标签来描述音乐的类型、歌手、专辑等信息,用户可以根据这些标签快速找到自己喜欢的音乐。同样地,一个管理系统也可以使用标签来描述的主题、拍摄地点、拍摄时间等信息,方便用户进行检索和管理。
欢迎分享,转载请注明来源:浪漫分享网
评论列表(0条)