Flair:一个非常简单的pytorch框架,用于最先进的NLP

为什么这对NLP来说是个大新闻? Flair在解决NLP问题方面提供"最"先进的性能,例如命名实体识别(NER)、词性标注(PoS)、词义消歧和文本分类。这是一个建立在PyTorch之上的NLP框架。

本文介绍如何使用现有的文本分类器并使用Flair构建自定义文本分类器。

Flair:一个非常简单的pytorch框架,用于最先进的NLP

 

介绍

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

大多数现有技术方法依赖于称为文本嵌入的技术。它将文本转换为高维空间中的数字表示。它允许在这个高维空间中将文档、句子、单词、字符(取决于我们使用的嵌入)表示为向量。

Flair为NLP带来令人兴奋的消息的原因是因为Zalando Research最近发表的用于序列标记的文章字符串嵌入包含了一种始终优于以前最先进解决方案的方法。它在Flair中得到了实现和完全支持,可以用来构建文本分类器。

1.做好准备

要安装Flair,您将需要Python 3.6。如果你还没有,这里有一个如何做到这一点的指南。(https://realpython.com/installing-python/)然后,要安装Flair,请运行:

Flair:一个非常简单的pytorch框架,用于最先进的NLP

pip安装资质

这将安装运行Flair所需的所有必需软件包。它还将包括基于PyTorch的Flair。

扫描二维码关注公众号,回复: 4645782 查看本文章

2.使用预先训练的分类模型

新版本0.4附带两个预先训练的模型。在IMDB数据集上训练的情绪分析模型和“攻击性语言检测”模型(目前仅支持德语)。

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

要使用情绪分析模型,只需运行:

Flair:一个非常简单的pytorch框架,用于最先进的NLP

 

首次运行时,Flair将下载情绪分析模型,默认情况下将其存储到主目录的.flair子文件夹中。这可能需要几分钟时间。

上面的代码首先加载所需的库,然后将情绪分析模型加载到内存中(如果需要,首先下载它),然后在0到1的刻度范围内预测句子“Flair is pretty neat!”的情绪分数。最后通过命令输出:上面的句子是:[Positive(1.0)]。

现在,您可以将代码合并到REST API中,并提供与Google的Cloud Natural Language API的情绪分析相媲美的服务,这种分析在生产中用于大量请求时可能会非常昂贵。

3.训练自定义文本分类器

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

Flair:一个非常简单的pytorch框架,用于最先进的NLP

 

对于本文,我们将使用Kaggle的SMS垃圾邮件检测数据集来使用Flair构建垃圾邮件/非垃圾邮件分类器。该数据集适合学习,因为它只包含5572行,并且足够小,可以在几分钟内在CPU上训练模型。

Flair:一个非常简单的pytorch框架,用于最先进的NLP

来自数据集的SMS消息标记为垃圾邮件或Ham(不是垃圾邮件)

3.1预处理 - 构建数据集

我们首先从Kaggle上的这个链接下载数据集以获取spam.csv。然后,在与我们的数据集相同的目录中,运行下面的预处理片段,它将进行一些预处理并将我们的数据集拆分为train,dev和test set。

确保安装了Pandas。如果没有,请先运行pip install pandas。

Flair:一个非常简单的pytorch框架,用于最先进的NLP

 

这将从我们的数据集中删除一些重复项,将其随机化(随机行)并使用80/10/10拆分,将数据拆分为train、dev和test sets。

如果运行成功,您将获得以快速文本格式格式化的train.csv、test.csv和dev.csv,以便与Flair一起使用。

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

要训练模型,请将此片段与生成的数据集放在同一目录中。

Flair:一个非常简单的pytorch框架,用于最先进的NLP

 

首次运行此代码时,Flair将下载所有必须的嵌入模型,这可能需要几分钟时间。整个训练过程将再花5分钟。

此代码段首先将所需的库和数据集加载到语料库对象中。

接下来,我们创建一个嵌入列表(两个Flair上下文sting嵌入和一个GloVe单词嵌入)。然后将此列表用作文档嵌入对象的输入。堆叠和文档嵌入是Flair最有趣的概念之一。它们提供了将不同嵌入组合在一起的方法。您可以将传统的单词嵌入(如GloVe,word2vec,ELMo)与Flair上下文sting嵌入一起使用。在上面的示例中,我们使用基于LSTM的方法来组合单词和上下文sting嵌入以生成文档嵌入。

最后,该片段训练模型,该模型生成final-model.pt和best-model.pt文件,这些文件代表我们存储的经过训练的模型。

3.3使用训练模型进行预测

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

Flair:一个非常简单的pytorch框架,用于最先进的NLP

 

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

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

与Facebook的FastText甚至谷歌的AutoML自然语言平台不同,使用Flair进行文本分类仍然是一项相对较低级别的任务。我们可以通过选择设置参数来完全控制文本嵌入和训练,例如学习速率、批量大小、退火因子,损失函数,优化器选择......为了获得最佳性能,需要调整这些超参数。 Flair为我们提供了一个众所周知的超参数调优库Hyperopt(在此描述)的包装器,我们可以使用它来调整我们的超参数以获得最佳性能。

在本文中,为简单起见,我们使用默认的超参数。主要是默认参数,我们的Flair模型在20个epoch后获得了0.973的f1分数。

为了比较,我们使用FastText和AutoML自然语言平台训练了文本分类模型。首先使用默认参数运行FastText并获得0.883的f1分数,这意味着我们的模型大大优于FastText。然而,FastText仅需要几秒钟的时间来训练,而我们的定制Flair模型需要5分钟。

然后我们还将结果与在Google的AutoML自然语言平台上获得的结果进行了比较。该平台首先需要20分钟才能解析数据集。之后我们开始训练过程,花了将近3个小时才完成(花费近10美元的免费积分),但获得了99.211的f1分数,比我们定制的Flair模型略胜一筹。

猜你喜欢

转载自www.cnblogs.com/chuangye95/p/10175464.html