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

AIBigbull2050發表於2019-08-29

機器之心報導

參與:一鳴、亞洲

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 即可。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946223/viewspace-2655385/,如需轉載,請註明出處,否則將追究法律責任。

相關文章