专栏首页机器之心一行代码自动调参,支持模型压缩指定大小,Facebook升级FastText

一行代码自动调参,支持模型压缩指定大小,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 即可。

本文分享自微信公众号 - 机器之心(almosthuman2014)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 7 Papers | AI写论文更近一步?联邦学习怎样与通信领域结合

    论文 1:Best Practices for Scientific Research on Neural Architecture Search

    机器之心
  • 教程 | 用摄像头和Tensorflow.js在浏览器上实现目标检测

    机器之心
  • EMNLP 2018 | 结合通用和专用NMT的优势,CMU为NMT引入「语境参数生成器」

    神经机器翻译(NMT)无需单独训练或调整系统的任何部分就可以直接建模源语言到目标语言的映射。这使得 NMT 快速发展,并在许多大规模环境中成功应用 (Wu et...

    机器之心
  • Python 自动化办公之"你还在手动操作“文件”或“文件夹”吗?"

    1、“罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢? 2、利用 Python 进行多 Sheet 表合并、多工作簿合并、一表按列拆分

    杰哥的IT之旅
  • Node.js 进程平滑离场剖析

    使用 Node.js 搭建 HTTP Server 已是司空见惯的事。在生产环境中,Node 进程平滑重启直接关系到服务的可靠性,它的重要性不容我们忽视。既然是...

    草小灰
  • MGR搭建以及性能测试

    昨天的文章中简单介绍了MySQL的组复制的概念,今天搭建了一套单机多实例单主节点的MGR环境来进行性能测试。

    AsiaYe
  • PyTorch如何构建和实验神经网络

    在本文中,将展示一个简单的分步过程,以在PyTorch中构建2层神经网络分类器(密集连接),从而阐明一些关键功能和样式。

    代码医生工作室
  • 【PyTorch】PyTorch如何构建和实验神经网络

    在本文中,将展示一个简单的分步过程,以在PyTorch中构建2层神经网络分类器(密集连接),从而阐明一些关键功能和样式。

    lujohn3li
  • k8s故障问题收集帖

    通过 kubectl describe pod <pod-name> 命令查看到当前 Pod 的事件

    机械视角
  • Ittiam优化VP9,turnaround时间大幅减少

    libvpx是Google开发的视频编解码器VP8和VP9的开源软件实现库。libvpx中包含了VP9视频编码算法,相比H.264/AVC,在高...

    用户1324186

扫码关注云+社区

领取腾讯云代金券