February 15, 2020

我们是如何分离语料管理和模型训练的

我们是如何分离语料管理和模型训练的

我们基于  Botfront 做语料管理,Botfront 本身是构建在 Rasa 之上的一套 UI+ 流程管理包,通过 Graphql 提供数据读写的包装,在之前关于 Rasa web UI 选型部分曾有过介绍。

在 NLP 领域有些模型经过处理之后其实在 cpu 架构下也还可以工作,比如 DistilBERT、ConVert,只不过训练的过程比 GPU 环境下要长很多,那么如何在开发环境下快速迭代、完成后又能快速发布到生产环境呢?如果是基于 Rasa 的开发,那么说不定可以参考下下面这个思路:

  1. 在本地的 GPU 服务器上跑研发环境,因为大部分生产语料都会轻易超过 1000 条(如果不到的话可以不用 Bert),类似这个样子配置好 pipeline 用于 gpu/cpu 的切换,当然实际的开发过程中可以把配置写成自动脚本,扔给 crontab 之类的:

-----2020-02-15---12.20.42

  1. 除了 pipeline 之外还有 NLU :

-----2020-02-15---12.18.56

值得注意的是,botfront 本身的  graphql 是不带 auth 的,多项目/多用户管理也暂时不会放到社区版。一个比较好的方式是把 auth/multi-user/project 管理前置,统一到 nginx 层。

比如可以采用 openresty 的加强 nginx,  openresty  本身是一个 nginx 的 lua module 合集,在 nginx 层完成分流、认证、鉴权等是在合适不过了,因为现在只要稍微上点规模的项目都基本不会是只有一种框架一种语言,这些认证、鉴权基本每个成熟的框架也都有一套,而且还各自为政,如果碰到需要跟企业内部的比如 ldap 之类的系统结合那就更让人头大,所以在内网实行 AKA(All Knows All),对外统一认证,是一个简单又快速的思路,吧。