一行代碼自動調參,支持模型壓縮指定大小,Facebook升級FastText

轉自:https://mp.weixin.qq.com/s/LLrq1F2uEC2xEWZrd9uijA

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章