如何使用Python、Transformers和Scikit对文本进行分类

2022-02-26 07:15:45

那里有大量的文本,每天都有越来越多的文本以电子邮件、社交媒体帖子、聊天、网站和文章的形式生成。所有这些文本文件都是丰富的信息来源。但由于文本的非结构化性质,理解和分析它既困难又耗时。因此,大多数公司无法利用这一宝贵的信息来源。这就是文本分类等自然语言处理(NLP)方法的用武之地。

文本分类,也称为文本分类或文本标记,是将文本文档分配给一个或多个类别或类别的过程。它使组织能够以快速、廉价的方式自动构建所有类型的相关文本。通过对文本数据进行分类,组织可以快速了解趋势,并缩小范围进行进一步分析。

假设你受雇于一家公司,帮助他们整理客户评论。首先,如果组织有一个全球客户群,并且有多种语言编写的评论,根据其语言进行划分将有助于完成下游任务。

尽管积极的评价令人振奋和满足,但它们很少包含任何需要立即解决的紧迫问题。因此,进行情绪分析并将评论分为正面和负面可能是一个好主意。在这里,您以前的语言分类将有助于创建特定于语言的情感分析模型。

一旦你有了负面评论,你可以根据提到的功能/产品对其进行进一步分类。这将使不同的团队能够轻松找到相关的评论,并找出他们做错了什么或需要进行哪些改进。

手动文本分类涉及人工注释员,他通读文本文档的内容并对其进行标记。现在你可能会认为这种方法只会在处理大量文本时产生问题。但你这么想是不对的,有两个原因:

作为缓慢的副作用,手动分类会妨碍组织快速识别和应对关键情况的能力。例如,假设一个云提供商或一个API宕机,如果一个人正在按顺序查看客户支持票证,组织可能需要一段时间才能意识到他们的服务宕机。

即使在最美好的日子里,人类也是不完美的。由于睡眠不足、无聊、分心等因素,他们容易犯错误。这些因素可能导致分类不一致。对于关键应用程序,这些失误可能会让公司损失数千美元。

除了这些缺点之外,人工时间的成本远远高于在云服务器上运行Python脚本。因此,应用自然语言处理和其他人工智能技术进行自动文本分类是大多数情况下的最佳选择。自动分类速度更快,成本效益更高。最重要的是,一旦文本分类模型训练到令人满意的规格,它的性能就会保持一致。

有很多方法可以自动对文本文档进行分类,但所有方法都可以分为三种类型:

基于规则的方法使用一组手动创建的语言规则对文本进行分类。这些规则由每个类别的一个模式或一组模式组成。一种非常简单的方法是根据特定类别单词的出现情况对文档进行分类。

假设你想把新闻文章分为两类:商业和科学。要做到这一点,你需要创建两个单词列表,对每个类别进行分类。例如,你可以选择高盛、摩根士丹利、苹果等机构的名称。在商务课上,你可以选择NASA、科学家、研究人员等词汇。

现在,当你想对一篇新闻文章进行分类时,基于规则的分类器将统计与商业相关的词和与科学相关的词的数量。如果与商业相关的单词数量大于与科学相关的单词数量,则文章将被归类为商业,反之亦然。

国际空间站:美国宇航局计划如何摧毁它作为科学,因为有一个与科学有关的词——“NASA”,而没有与商业有关的词。

使用基于规则的系统的最大优点是,外行很容易理解。因此,一旦创建了一个基本系统,它就可以随着时间的推移而逐步改进。但这种优势的另一方面是,开发人员需要对领域有深入的了解才能创建规则。此外,基于规则的分类方法不能很好地扩展,在没有适当测试的情况下添加新规则可能会影响旧规则的结果。

您可以选择一种基于机器学习的方法,使用过去的观察自动学习规则,而不是手动定义规则。基于机器学习的分类器使用带标签的示例作为训练数据来学习单词/短语和标签之间的关联,即类别。

这听起来很容易解决,但在训练机器学习分类器之前,有一个问题需要解决。特征提取。你看,计算机不像我们那样理解文本,它们只理解数字、0和;1s。在计算机视觉问题的情况下,图像以数字的形式存储在内部,表示各个像素的值。

但文本并非如此。因此,训练NLP分类器的第一步是将文本转换为数字向量表示。最常用的文本嵌入方法之一是单词包。它创建一个向量,统计每个单词在预定义词典中的出现次数。

让';假设你将字典定义为:“(What,a,sunny,serene,beautiful,day,night)”,你想创建一个嵌入句子“What a serene night”的向量。你会得到以下句子的向量表示法:(1,1,0,1,0,0,0,1)。

生成所有带标签文本文档的向量表示后,可以使用它们来训练分类器。文本文档的向量表示将传递给分类器,并带有正确的类别。该模型学习文本中不同语言特征与类别之间的关联:

一旦模型被训练到所需的性能标准,它就可以用来做出准确的预测。使用相同的特征提取方法创建新文本文档的矢量表示。分类模型使用这些特征向量来预测文档的类别。

基于机器学习的文本分类方法通常比基于规则的分类器更准确。除此之外,机器学习分类器更容易扩展,因为您可以简单地添加新的训练示例来更新模型。机器学习分类器的唯一问题是它们很难理解和调试。因此,如果出现问题,可能很难找出问题的原因。

混合文本分类方法结合了这两个方面的优点。它们将机器学习分类器的泛化能力与易于理解和调整的基于规则的方法相结合。多亏了机器学习模型,他们可以学习复杂的规则,任何冲突的分类或不稳定的行为都可以使用规则修复。

例如,根据行业对金融新闻文章进行分类,如制药、金融、汽车、采矿等。要做到这一点,你可以创建一个混合系统。首先,训练一个命名实体识别模型,从新闻文章中提取公司名称。然后,创建每个部门的公司列表。那';就是这样,使用这两件事你可以创建一个合格的分类器。

你';我们将处理一些旧的谷歌新闻数据转储。新闻数据以JSONL格式存储。通常,您可以使用read_json方法将JSONL文件加载到数据帧中,并使用lines=True参数,但我们的数据结构有点奇怪。

每个条目都存储在一个对象中(包含在{';item';:}中)。因此,如果您尝试使用read_json方法直接加载它,它会将所有内容作为一列加载。

要解决这个问题,可以像读取普通文本文件一样读取该文件,并使用json。加载方法以创建字典列表。

还有一个问题需要解决😬. 每个标题的属性值存储在它自己的对象中。不用担心,你可以通过更多的字典操作快速修复它。

你没有';我真的不需要其他属性,比如国家、语言或url。以及主题标签';世界';和';国家';它们的定义非常松散,因此信息量不大。所以,你可以把它们放下。

接下来,您应该看看我们为每个类别提供了多少培训示例。

两大类超过35万篇文章,甚至小组也有大约4万个例子!

除了笑话,就像你';我们将使用最先进的BERT transformer模型来创建向量表示,我建议您使用可用数据集的子集来训练模型。

现在,您可以加载BERT句子转换器,并为标题创建向量嵌入。

支持向量分类器(SVM)位居榜首。你可以用它来预测新新闻标题的主题。

给你。现在,您知道什么是文本分类,它是如何工作的,以及如何培训自己的机器学习文本分类器。但是,神经网络呢?那';这是个好问题!问题是,尽管神经网络很好,但对于这项任务来说,它们并不是真正必要的。支持向量机和神经网络都能逼近非线性决策边界,在同一个数据集上都能得到可比的结果。神经网络可以在性能上领先,但它们需要更多的计算能力、训练数据和时间。

另一方面,支持向量机能够基于唯一的支持向量可靠地识别决策边界。因此,您可以使用训练达到类似性能的神经网络所需的一小部分数据来训练SVM分类器。然而,如果性能的任何微小提高都有利于应用程序,那么可以使用神经网络。