一鸣、亚洲报道

一行代码自动调参,支持模型压缩指定大小,Facebook升级FastText

FastText 作为一款使用简单、运行快速的自然语言处理工具,获得了很多研究者和开发者的喜爱。美中不足的是,FastText 之前没有自动调参的功能。近日,Facebook 更新了这一工具,用户只需要在命令行增加一句代码,工具可以根据用户数据自动调整超参数,使得模型在指定标签或整体数据上达到最佳效果。同时,其可以进行模型压缩,并自动在压缩过程中调整参数。即使模型足够小,也依然可以保证在该模型下达到最佳性能。

FastText 是 Facebook 开源的一款自然语言处理机器学习框架。通过这套工具,用户可以快速完成诸如文本分类等的相关任务,而且不需要设计模型架构。近日,Facebook 给这款工具增加了新的功能——自动调参。

这项功能使得 fastText 可以根据提供的数据集自动选择最好的超参数,用于构建高效的文本分类器。使用时,用户需要输入训练集和验证集,并设定时间限制。FastText 之后会在规定的时间内搜索超参数空间,找到使得验证集性能最佳的超参数。此外,用户还可以自定义最终模型的大小。在这样的情况下,fastText 会使用压缩技术降低模型大小。

为什么需要自动超参数调整

FastText 和大部分机器学习模型类似,使用了很多超参数。这其中包括学习率、模型维度、以及训练轮次。每个因素都会对模型的结果造成影响,而且在不同数据集或任务上,最优化的超参数往往是不同的。为了搜索得到表现最好的超参数,用户往往需要进行手动的搜索和调整,即使是对专家而言,手动搜索也是非常令人生畏且耗时间的。Facebook 提供的最新功能使得这些这些工作都可以自动完成。

在许多情况下,模型需要被部署在设备或云端中,因此模型需要足够小,以便控制内存的占用。为了满足在不同设备上部署模型的需求,FastText 现在也可以帮助用户建立能够控制大小的文本分类器了。

使用方法

FastText 本身是使用命令行进行模型的构建、测试的。例如,构建一个文本分类器是可以这样在命令行中规定:

>> ./fasttext supervised -input train.txt -output model

因此,在自动调参的过程中,用户只需要在已有的命令上增加关于自动调参的相关属性命令即可。

现有的超参数命令如下所示,本文将会重点介绍其中的一部分:

-autotune-validation validation file to be used for evaluation 
-autotune-metric metric objective {f1, f1:labelname} [f1] 
-autotune-predictions number of predictions used for evaluation [1] 
-autotune-duration maximum duration in seconds [300] 
-autotune-modelsize constraint model file size [] (empty = do not quantize)

为了激活超参数优化,需要提供带有-autotune-validation 增强的验证文件。

例如,使用同样的数据作为教程示例,autotune 可以以下方式使用:

>> ./fasttext supervised -input cooking.train -output model_cooking -autotune-validation cooking.valid

然后,fastText 将会搜索超参数,在 cooking.valid 文件上给出最佳的 f1 得分:

Progress: 100.0% Trials: 27 Best score: 0.406763 ETA: 0h 0m 0s

然后,使用以下方式就能测试得到的模型了:

>> ./fasttext test model_cooking.bin data/cooking.valid 
N 3000 
P@1 0.666 
R@1 0.288

默认情况下,搜索过程花费 5 分钟左右。你可以使用-autotune-duration 增强设定秒级的自动暂停,例如,通过以下方式把时间限定在 10 分钟:

>> ./fasttext supervised -input cooking.train -output model_cooking -autotune-validation cooking.valid -autotune-duration 600

在自动调参时,fastText 展示了这个时间内找到的最好的 f1 得分。如果想在自动暂停前结束,可以发送一个 SIGINT 信号(例如通过 CTLR-C)。FastText 就会结束当前训练,使用目前找到的最佳参数再训练。

限制模型大小

前文提到,FastText 的另一个功能是可以压缩模型大小。当然,使用用户自有的超参数进行模型压缩可能会对模型的精确率造成一定的影响。

好在 FastText 可以在压缩模型上自动寻找最优化的超参数,同时满足模型压缩的要求。为了实现这一点,用户可以使用 -autotune-modelsize 命令。

>> ./fasttext supervised -input cooking.train -output model_cooking -autotune-validation cooking.valid -autotune-modelsize 2M

这条命令会产生一个 .ftz 文件,使得模型在指定的大小(如 2M)下有着最高的精确率。

设置优化矩阵

默认情况下,autotune 会对用户提供的验证文件进行测试,并优化到模型能够产生最高的 f1 得分。这一点和 /fasttext test model_cooking.bin cooking.valid 命令是一样的。

但是,有时候用户希望模型能够在一个特定的标签上优化其分数,比如,在 __label__baking 命令上,用户可以设置一个 -autotune-metric 命令进行自动优化。

>> ./fasttext supervised -input cooking.train -output model_cooking -autotune-validation cooking.valid -autotune-metric f1:__label__baking

这和当用户测试时使用./fasttext test-label model_cooking.bin cooking.valid | grep __label__baking 命令手动优化 f1 得分是一样的。

有时候,用户可能会对预测一个以上的标签感兴趣。例如,如果用户需要手动优化超参数以达到两个标签上最佳的分数时,会使用./fasttext test model_cooking.bin cooking.valid 2 命令。现在,用户也可以让 autotune 来优化这些参数,使用-autotune-predictions 即可。

参考链接:

https://ai.facebook.com/blog/fasttext-blog-post-open-source-in-brief/
https://fasttext.cc/docs/en/autotune.html

入门自然语言处理fastText
2
相关数据
机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

文本分类技术

该技术可被用于理解、组织和分类结构化或非结构化文本文档。文本挖掘所使用的模型有词袋(BOW)模型、语言模型(ngram)和主题模型。隐马尔可夫模型通常用于词性标注(POS)。其涵盖的主要任务有句法分析、情绪分析和垃圾信息检测。

超参数技术

在机器学习中,超参数是在学习过程开始之前设置其值的参数。 相反,其他参数的值是通过训练得出的。 不同的模型训练算法需要不同的超参数,一些简单的算法(如普通最小二乘回归)不需要。 给定这些超参数,训练算法从数据中学习参数。相同种类的机器学习模型可能需要不同的超参数来适应不同的数据模式,并且必须对其进行调整以便模型能够最优地解决机器学习问题。 在实际应用中一般需要对超参数进行优化,以找到一个超参数元组(tuple),由这些超参数元组形成一个最优化模型,该模型可以将在给定的独立数据上预定义的损失函数最小化。

fastText技术

Facebook开发的文本处理工具,是一个用于高效学习单词表示和句子分类的库。

自然语言处理技术

自然语言处理(英语:natural language processing,缩写作 NLP)是人工智能和语言学领域的分支学科。此领域探讨如何处理及运用自然语言;自然语言认知则是指让电脑“懂”人类的语言。自然语言生成系统把计算机数据转化为自然语言。自然语言理解系统把自然语言转化为计算机程序更易于处理的形式。

推荐文章
暂无评论
暂无评论~