用最新NLP库Flair做文本分类

介绍

文本分类是一种监督机器学习方法,用于将句子或文本文档归类为一个或多个已定义好的类别。它是一个被广泛应用的自然语言处理方法,在垃圾邮件过滤、情感分析、新闻稿件分类以及与许多其它业务相关的问题中发挥着重要作用。

目前绝大多数最先进的方法都依赖于一种被称为文本嵌入的技术。它将文本转换成高维空间中的数值表示方式。它可以将文档、语句、单词、字符(取决于我们所嵌入的形式)表示为这个高维空间中的一个向量。

Flair之所以对NLP来说是一个令人兴奋的消息,是因为Zalando Research最近发表的一篇论文《Contextual String Embeddings for Sequence Labelling(用于序列标注的上下文相关字符串的嵌入)》,其中涵盖了一种始终优于以前最先进方案的方法。该算法在Flair中得到了完整的支持和实现,可以用来构建文本分类器。

1、准备

安装Flair需要Python 3.6,如果你还没有,请点击这里查看安装向导。然后执行pip命令安装即可:

pip install flair

上面的命令将安装运行Flair所需的所有依赖包,当然也包括了PyTorch。

2、使用一个预训练的分类模型

最新的0.4版本包含了两个预训练的模型,还有一个基于IMDB数据集上训练的情感分析模型和“攻击性语言检测”模型(当前仅支持德语)。

使用、下载和存储模型都被整合到了一个单一的方法中,这使得使用预训练模型的整个过程都非常简单。

要使用情感分析模型,只需执行以下代码片段:

fromflair.models import TextClassifier
from flair.data import Sentenceclassifier = TextClassifier.load('en-sentiment')sentence = Sentence('Flair is pretty neat!')
classifier.predict(sentence)# print sentence with predicted labels
print('Sentence above is: ', sentence.labels)

当第一次运行时,Flair将下载情感分析模型,默认情况下将其存储到home目录下的.flair子目录中,这大概得需要几分钟。

上面的代码首先加载必需的库,然后将情感分析模型加载到内存中(必要时先进行下载),接下来可以预测句子“Flair is pretty neat!”的情感数值,按0到1的区间赋值。最后命令的输出结果是:

The sentence above is: [Positive (1.0)]

就是这么简单!例如,现在你可以将上述代码合并在一个REST API中,并提供一个与Google的云自然语言API的情感分析类似的服务,当在有大量请求的生产环境中使用时,这种分析的成本将会非常的高。

3、训练一个自定义文本分类器

要训练一个自定义的文本分类器,我们首先需要一个标注过的数据集。Flair的分类数据集格式基于Facebook的FastText格式。格式要求在每行的开头定义一个或多个标签,以前缀__label__开头。格式如下:

__label__<class_1><text>
__label__<class_2><text>

在本文中,我们将利用Kaggle的Spam Detection数据集通过Flair构建一个垃圾/非垃圾的分类器。这个数据集比较适合我们的学习任务,因为它足够小,并且仅包含5572行的数据,可以在一个CPU上只花几分钟就可以完成一个模型的训练。

3.1 预处理-构建数据集

我们首先从Kaggle上的这个链接下载数据集来获得spam.csv文件。然后,在与数据集相同的目录中,我们运行下面的预处理代码片段,该代码将执行一些预处理,并将数据集拆分为训练集、开发集和测试集三个部分。

确保安装了Pandas。如果还没有,请先运行命令:

pip install pandasimport pandas as pd
data = pd.read_csv("./spam.csv", encoding='latin-1').sample(frac=1).drop_duplicates()data = data[['v1', 'v2']].rename(columns={"v1":"label", "v2":"text"})data['label'] = '__label__' + data['label'].astype(str)data.iloc[0:int(len(data)*0.8)].to_csv('train.csv', sep='\t', index = False, header = False)
data.iloc[int(len(data)*0.8):int(len(data)*0.9)].to_csv('test.csv', sep='\t', index = False, header = False)
data.iloc[int(len(data)*0.9):].to_csv('dev.csv', sep='\t', index = False, header = False);

上面的代码将从数据集中删除一些重复数据,并对其进行无序处理(随机化行),并按照80/10/10的比例将数据拆分为训练集、开发集和测试集。

如果运行成功,你将会得到FastText格式的三个数据文件:train.csv、test.csv和dev.csv,它们可以与Flair一起使用。

3.2 训练自定义文本分类模型

请在生成数据集的目录中运行以下代码片段用以训练模型:

fromflair.data_fetcher import NLPTaskDataFetcher
from flair.embeddings import WordEmbeddings, FlairEmbeddings, DocumentLSTMEmbeddings
from flair.models import TextClassifier
from flair.trainers import ModelTrainer
from pathlib import Pathcorpus = NLPTaskDataFetcher.load_classification_corpus(Path('./'), test_file='test.csv', dev_file='dev.csv', train_file='train.csv')word_embeddings = [WordEmbeddings('glove'), FlairEmbeddings('news-forward-fast'), FlairEmbeddings('news-backward-fast')]document_embeddings = DocumentLSTMEmbeddings(word_embeddings, hidden_size=512, reproject_words=True, reproject_words_dimension=256)classifier = TextClassifier(document_embeddings, label_dictionary=corpus.make_label_dictionary(), multi_label=False)trainer = ModelTrainer(classifier, corpus)trainer.train('./', max_epochs=10)

第一次运行上述代码时,Flair将会自动下载需要的所有嵌入模型,这可能需要几分钟,然后接下来的整个培训过程还需要大约5分钟。

程序首先将所需的库和数据集加载到一个corpus对象中。

接下来,我们创建一个嵌入列表,包含两个Flair上下文的字符串嵌入和一个GloVe单词嵌入。然后将此列表作为文档嵌入对象的输入。堆叠和文档嵌入是Flair中最有趣的概念之一,提供了将不同的嵌入整合在一起的方法。你可以同时使用传统的单词嵌入(如GloVe, word2vec, ELMo)和Flair上下文的字符串嵌入。在上面的例子中,我们使用了一种基于LSTM(Long Short-Term Memory,长短期记忆网络)的方法,将单词和上下文的字符串嵌入结合起来以生成文档嵌入。想要了解更多,请点击这里。

最后,上述代码进行模型训练并生成了final-model.pt和best-model.pt两个文件,它们表示我们存储的训练模型。

3.3 用训练过的模型进行预测

我们现在可以从同一目录通过运行以下代码,使用导出的模型来生成预测结果:

fromflair.models import TextClassifier
from flair.data import Sentenceclassifier = TextClassifier.load_from_file('./best-model.pt')sentence = Sentence('Hi. Yes mum, I will...')classifier.predict(sentence)print(sentence.labels)

这段代码会输出“[ham(1.0)]”,这意味着该模型100%确定我们的示例消息不是垃圾邮件。

与其它框架相比表现如何?

与Facebook的FastText甚至谷歌的AutoML自然语言平台不同,使用Flair进行文本分类仍然是一项底层的工作。我们可以通过设置诸如学习率、批量大小、退火因子(anneal factor)、损失函数、优化选择等参数来完全控制文本嵌入和训练的方式…为了获得最佳表现,需要调整这些超参数。Flair为我们提供了一个有名的超参数调优库Hyperopt的封装器,我们可以使用它来对超参数进行调优以获得最佳的性能。

在本文中,为了简单起见,我们使用了默认的超参数。在大多数默认参数下,我们的Flair模型在10个训练周期后获得了0.973的f1-score。

为了进行对比,我们使用FastText和AutoML自然语言平台训练了一个文本分类模型。首先我们使用默认参数运行FastText,并获得了0.883的f1-score,这意味着模型在很大程度上优于FastText。然而,FastText只需要几秒钟的训练时间,而我们训练的Flair模型则需要5分钟。

我们将结果与在谷歌的AutoML自然语言平台上获得的结果进行了比较。平台首先需要20分钟来解析数据集。之后,我们开始了训练过程,这几乎花了3个小时完成,但却获得了99.211的f1-score——这比我们自己训练的模型稍微好一点。

 


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/520049.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

配置无密码登录linux,linux ssh无密码登录配置

第一步:首先我们得先准备一个虚拟机集群并且能通过 虚拟机名称ping成功本人已经准备了test01 和test02两个虚拟机如果不会创建集群可以参考我之前写的此篇博客,地址如下:https://mp.csdn.net/mdeditor/102669331#第二步:关闭防火墙和seliunx (如果已经关闭了,可以直接跳过)1.关…

Mars——基于矩阵的统一分布式计算框架

背景 Python Python 是一门相当古老的语言了&#xff0c;如今&#xff0c;在数据科学计算、机器学习、以及深度学习领域&#xff0c;Python 越来越受欢迎。 大数据领域&#xff0c;由于 hadoop 和 spark 等&#xff0c;Java 等还是占据着比较核心的位置&#xff0c;但是在 s…

云计算管理工具:根植热土

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 老姜出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;有机构曾预计2020年全球云计算市场空间&#xff0c;会增至1435亿美元&#xff0c;年复合增长率超过20%。相关资料显示&#xff1a;2018年&#xff0c;…

linux modbus工具,基于ARM-Linux的Modbus串口服务器设计

随着互联网的迅猛发展&#xff0c;在使用计算机进行网络互联的同时&#xff0c;各种家电设备、仪器仪表以及工业生产中的数据采集和控制设备也在逐步地走向网络化&#xff0c;以便共享网络资源。所以&#xff0c;在电子设备日趋网络化的今天&#xff0c;利用串口服务器来实现网…

win10右键没有新建选项,无法新建文件夹

按下winr打开运行窗口&#xff0c;输入 regedit回车&#xff0c;如下图所示&#xff1a; 定位到HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers&#xff0c;如下图所示 鼠标右键ContextMenuHandlers&#xff0c;新建-》项&#xff08;K&#xff09;-》…

Service Mesh 是新瓶装旧酒吗?

戳蓝字“CSDN云计算”关注我们哦&#xff01;文章来源&#xff1a;阿里巴巴云原生&#xff0c;点击查看原文。Service Mesh 是新瓶装旧酒吗&#xff1f;新技术出现时所主张的价值一定会引发相应的探讨&#xff0c;Service Mesh 也不例外。以往&#xff0c;怀疑 Service Mesh 价…

Mars 算法实践——人脸识别

Mars 是一个基于矩阵的统一分布式计算框架&#xff0c;在之前的文章中已经介绍了 Mars 是什么&#xff0c; 以及 Mars 分布式执行 &#xff0c;而且 Mars 已经在 GitHub 中开源。当你看完 Mars 的介绍可能会问它能做什么&#xff0c;这几乎取决于你想做什么&#xff0c;因为 Ma…

2018年自然语言处理最值得关注的研究、论文和代码

2018年对于自然语言处理&#xff08;NPL&#xff09;是很有意义的一年&#xff0c;见证了许多新的研究方向和尖端成果。Elvis Saravia 是计算语言学专家&#xff0c;也是2019 计算语言学会年度大会北美分部的项目委员之一。他总结了2018年 NLP 的重要进展&#xff0c;包括增强学…

【惊天】京东任命周伯文担任京东云与AI事业部负责人 全面负责AI、云计算、IoT三大技术领域!

昨日&#xff0c;京东集团爆出大消息&#xff0c;宣布设立京东云与AI事业部&#xff0c;整合原京东云、人工智能、IoT三大事业部的架构与职责&#xff0c;由京东集团副总裁周伯文博士担任负责人&#xff0c;直接向京东集团董事局主席兼CEO刘强东先生汇报。 对此周伯文博士表示…

如何基于OceanBase构建应用和数据库的异地多活

如何基于OceanBase构建应用和数据库的异地多活 前言 OceanBase是一个通用的分布式的关系型数据库&#xff0c;有很多独特的特点。比如数据库的多租户、高可用、极致弹性伸缩能力。如果把OceanBase当作单库使用&#xff0c;就没有把OceanBase的分布式优势发挥到极致。 本文主要…

Perhaps you are running on a JRE rather than a JDK?

解决方案 https://gblfy.blog.csdn.net/article/details/102893885

12亿行代码,阿里巴巴这一年的技术报告和梦想报告

78年前&#xff0c;图灵用代码编译出的情报破解系统&#xff0c;让二战至少提前2年结束&#xff0c;挽救了2000万人的生命&#xff1b;50年前&#xff0c;登月科学家敲下的一行关键代码&#xff0c;启动了阿波罗号的着陆&#xff0c;成就了人类的一大步&#xff1b;30年前&…

为什么鲜有炫富的程序员?看看中国各阶级收入统计表

网上那些口口声声随随便便就能年入百万的&#xff0c;听听就行。作为开发者&#xff0c;可以不参加双11&#xff0c;但是花钱最多的地方就是买电子产品和“买课”。他们的炫富就是&#xff1a;你根本不知道有多贵的机械键盘&#xff0c;为了赚钱和幸福&#xff0c;又买了多少大…

路径规划之 A* 算法

算法介绍 A*&#xff08;念做&#xff1a;A Star&#xff09;算法是一种很常用的路径查找和图形遍历算法。它有较好的性能和准确度。本文在讲解算法的同时也会提供Python语言的代码实现&#xff0c;并会借助matplotlib库动态的展示算法的运算过程。 A*算法最初发表于1968年&a…

王思聪究竟上了多少次热搜?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 朱小五责编 | 阿秃王思聪又又又上了微博热搜——然而这次却不是关于娱乐圈。最近几天&#xff0c;王思聪与他的“限消令”接连登上热搜榜&#xff0c;引发吃瓜群众们广泛热议。知乎的段子手们也纷纷发挥自己的想象力。小五本…

2018年,自然语言处理很全的应用与合作

2018年见证了 NLP 许多新的应用发展。Elvis Saravia 是计算语言学专家&#xff0c;也是2019 计算语言学会年度大会北美分部的项目委员之一。他在一份报告中总结出&#xff0c;NLP 不仅在聊天机器人和机器学习中有所突破&#xff0c;也在医疗健康、金融、法律和广告等行业中有崭…

如何把springboot项目部署到tomcat上

文章目录一、 企业发布场景1. 首次发布2. 非首次发布3. 全量发布和增量发布概念和区别二、springboot部署tomcat2.1. 创建Web初始化类2.2. 修改打包方式2.3. 项目发布目录2.4. 启动tomcat2.5. 浏览器验证一、 企业发布场景 1. 首次发布 项目上线第一次会采用全量发布 【编译】…

OceanBase迁移服务:向分布式架构升级的直接路径

2019年1月4日&#xff0c;OceanBase迁移服务解决方案在ATEC城市峰会中正式发布。蚂蚁金服资深技术专家师文汇和技术专家韩谷悦共同分享了OceanBase迁移服务的重要特性和业务实践。 蚂蚁数据库架构的三代升级史 在过去的十多年时间里&#xff0c;蚂蚁在整个基础数据库架构上一…

被嫌弃的互联网的 “一生”(上)

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 小灰责编 | 阿秃在人类的历史长河中&#xff0c;我们这一代人是最幸运的一代&#xff0c;因为我们生活在一个智慧飞扬的时代。这个时代最伟大的发明是什么&#xff1f;或许每个人心中都有不同的答案。在小灰看来&#xff0c;…

Mars 是什么、能做什么、如何做的——记 Mars 在 PyCon China 2018 上的分享

最近&#xff0c;在 PyCon China 2018 的北京主会场、成都和杭州分会场都分享了我们最新的工作 Mars&#xff0c;基于矩阵的统一计算框架。本文会以文字的形式对 PyCon 中国上的分享再进行一次阐述。 听到 Mars&#xff0c;很多第一次听说的同学都会灵魂三问&#xff1a;Mars …