matchzoo和keras

  • 2021 年 5 月 17 日
  • AI

//github.com/NTMC-Community/MatchZoo/search?q=glove​github.com

matchzoo有兩版,一個keras(非tf.keras,純keras)的一個torch的,torch版本不是很完善,bug略多,直接上手keras版的就行,其實用起來基本沒差別,上層封裝的api幾乎是完全一樣的。

matchzoo的3個比較好的特性:

1、數據存儲的方式是pandas組成的data_pack,一個稍微高階點的文本匹配數據的新的數據格式,用起來很簡單和pandas沒啥太大區別,另外能夠支援批量讀取,這意味著如果是非常大的csv可以流式讀取生成data_pack然後模型訓練,流式讀取的方式基本解決了數據太大記憶體不夠的問題;

2、數據預處理,dssm這類模型(還有其它模型)的輸入不僅僅是word的index,像dssm還需要對數據做ngram的處理,這類預處理基本上可以通過內置的processor來直接實現,避免了自己手動處理的繁瑣,另外也提供了比較方便的其它的processor的方法來幫助將文本直接轉化為word index的形式;

3、模型搭建幾乎是傻瓜式的,定義一些架構的參數就可以了,比如lstm的隱層大小之類的


matchzoo的幾個不方便的地方:

1、封裝的太多,魔改起來麻煩,比如我想在embedding層後面加一個spatialdropout層,沒找到介面支援,自定義loss也不太方便,畢竟是keras的再一層封裝,很多keras生態圈裡的工具或程式碼都需要經過調試才能應用起來,非常麻煩;

2、數據預處理的功能比較局限,自定義不方便,不過這個不是什麼問題,數據預處理部分完全可以自己使用自己的工具來處理完保存為csv之後再上matchzoo沒什麼問題;

3、keras的multigpu,fp16等等性能優化的方法不知道怎麼放進來,一樣,找介面真的很麻煩還得調,不是很想把時間浪費在別人的設計邏輯上;

好在matchzoo的設計靈活性還是比較大,預留了一個model.backend的功能可以直接訪問keras下的model,那麼問題就簡單很多;

1、魔改,這個沒啥辦法,如果要自己改模型,只能自己從頭build一個model出來,不過matchzoo的數據預處理和數據準備的這些api還是可以使用起來的,最後一個model.fit就可以了;

2、數據預處理,前面說過了,自己完全可以第三方工具處理;

3、model=model.backend ,使用了matchzoo的自動幫你構建模型的功能快速搭建模型的原型,剩下的就完全回歸keras了,此時的model就是一個keras的model的類,你所有的keras或者tf.keras的自己攢的工具程式碼基本都能用(當然有可能因為版本問題無法使用),如果要魔改查閱源程式碼參考基本的模型結構也是很不錯的

Tags: