matchzoo和keras

  • 2021 年 5 月 17 日
  • AI

//github.com/NTMC-Community/MatchZoo/search?q=glovegithub.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的自己攒的工具代码基本都能用(当然有可能因为版本问题无法使用),如果要魔改查阅源代码参考基本的模型结构也是很不错的