前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一行代码自动调参,支持模型压缩指定大小,Facebook升级FastText

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

作者头像
机器之心
发布2019-08-28 15:00:22
2.2K2
发布2019-08-28 15:00:22
举报
文章被收录于专栏:机器之心机器之心

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

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

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

以下为超参数搜索中的效果:

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

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

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

使用方法

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

代码语言:javascript
复制
>> ./fasttext supervised -input train.txt -output model

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

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

代码语言:javascript
复制
-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 可以以下方式使用:

代码语言:javascript
复制
>> ./fasttext supervised -input cooking.train -output model_cooking -autotune-validation cooking.valid

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

代码语言:javascript
复制
Progress: 100.0% Trials: 27 Best score: 0.406763 ETA: 0h 0m 0s

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

代码语言:javascript
复制
>> ./fasttext test model_cooking.bin data/cooking.valid 
N 3000 
P@1 0.666 
R@1 0.288

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

代码语言:javascript
复制
>> ./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 命令。

代码语言:javascript
复制
>> ./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 命令进行自动优化。

代码语言:javascript
复制
>> ./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 即可。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器之心 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档