最好的AI實驗方式?AllenNLP介紹與評價

介紹

AllenNLP是由AllenAI提出的基於pytorch的NLP框架,與ELMO師出同門。據項目領導人Matt Gardner所說,該框架是在問題“NLP實驗的最優實踐方式”下提出的。
在EMNLP2018上,AllenAI對該框架做了介紹:演講ppt
ppt講述該框架的指導原則,也是NLP實驗的指導原則,受益匪淺。
我將這個ppt上傳到百度網盤(提取碼:ywm2),方便github速度慢的同學下載。

評價

使用了一段時間的AllenNLP,我從抗拒迷茫到愛不釋手,不僅是因爲它提高了我的編程生產力,而是因爲體會到它的軟件工程思想

除了少部分工程能力極強的大神,大部分研究者的code在“軟件工程”這個範疇之內是與工業界有着一定的差距的。
可能有人會說作爲一個researcher,我只需快速迭代idea,驗證想法就可以了。
但是一份遵循規範的code恰恰可以加速實驗的迭代。例如單元測試可以更好的確保code沒有bug,設計良好的模塊化可以更方便的幫助我們構建模型的不同變種等等。

作者:Suneburg
鏈接:https://www.zhihu.com/question/65122939/answer/527370392
來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

把AllenNLP的哲學用一個詞概括,那就是軟件工程,相比pure pytorch,它上手可能很慢,代碼量可能更多,因爲你要花時間學習代碼規範,但你一旦熟悉了這種編程風格,就能從冗雜的實驗中解脫出來。

我爲什麼推崇AllenNLP,以及AN中的核心抽象

我認爲,抽象是計算機科學的核心概念(想想網絡七層協議),而AllenNLP就通過抽象概念概念之間的松耦合,爲AI實驗劃定了層次。

  1. DataReader
  2. DataIterator
  3. Model
  4. Trainer
  5. Predictor

以上是AI實驗流水線的核心部件,AllenNLP將他們松耦合地組裝起來,這不僅意味着你可以複用代碼,更意味着你可以獨立地構建任何一個部件,只要它符合組裝規範。

當你在編寫模型的時候,可以在代碼內執行單元測試,當代碼編寫完畢之後,使用了jsonnet描述參數:參數修改,實驗結果記錄無需進入代碼,換句話說,不同參數,不同模型的集成測試以統一接口和接口描述文件的形式進行。
一個典型的jsonnet
在這裏插入圖片描述
這是AN最實用的特性,就我個人而言,也寧願在編寫模型時多費功夫,來獲得實驗時清晰的視角。

可惜的是,AN的學習資料較少,強抽象帶來的入門難度大,對於初學者很不友好,網上(包括外網)沒有一篇教程將思想與代碼實踐結合講解,AllenAI之前關於pipeline的教程也丟失了。我會嘗試着自己寫幾篇<AllenNLP框架下工程化的AI實驗>,希望能起到幫助。

最後,推薦一種自學入門方式:既然AllenNLP的強項不是它爲NLP實驗提供的built-in package,而是它提供的松耦合思想,那麼通過閱讀代碼體會不同模塊之間耦合方式,體會核心概念,把他們當作tutorial,而不是當作節省代碼的工具(在真正的實驗中很少能直接套用的,畢竟allennlp每種工具也只提供了most fundamental ones),最終以它的思想和框架搭建自己的實驗平臺。

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