Book label
书籍标签AI自动化打标
通过AI算法对书籍的流派、风格、题材元素、主角身份、主角姓名、主角性格,以上6个维度进行自动化打标,节省人工标注成本,经人工检验后,准确率稳定在90%以上的维度上线自动化。
目前的标签AI打标流程主要分为:模型训练、模型部署、提供在线服务。规则是由运营方提供,这里不做过多的介绍。
1.模型训练
通过已有的标签,进行有监督的训练,做文本分类任务。模型主要做的事情有两个,一个是从复杂的文本信息中抽取出有用的特征,另一个是对抽取出来的特征做分类。
这6个标签维度,都各有不同的特点,因此特征的输入选择也有所不同。每一个维度我们都做了大量的实验,包括模型和特征的选取,以下列出的是最优结果的组合。由于男女频的标签库差别较大,以上6个标签都分别训练了男女频两版模型,但同一标签的做法,男女频较为相似,下文记叙中不区分男女频。
流派:输入特征为书名,模型选择xlnet。首先经过规则模块,命中规则即可返回预测结果。若没有命中,将从已有标签的书籍中搜索结果,通过书名的相似度进行匹配,返回相似度大于0.95的结果。若无命中,再调用模型进行预测,返回结果。
题材元素:输入特征为书籍内容,模型选择gpt。取书籍原文的前100章,调用hanlp做摘要提取,压缩到300字以内,再输入到gpt中做预测。通过模型得到的预测结果,进入规则模块,最后返回结果。
主角姓名:输入特征为书籍内容,模型选择midu-ner模型。取书籍原文前20章,调用米读自研的ner模型,识别每一段落中的人名,维护一个含有所有姓名的set,再分别使用名字在原文做count,得到每一个名字的出现次数,选取次数最高的作为书籍的主角,该方法经验证准确率高达99%。
主角身份:输入特征为书籍的基础信息以及内容,模型选择为electra。根据书籍的基础信息和原文内容经过规则模块,命中则直接返回结果。经过模型预测,获取预测标签。
主角性格:输入特征为书名+流派+主角身份+主角姓名+题材元素,模型选择roberta。选取前6大类别的标签,覆盖80%以上的书籍,做分类。待检验。
风格:待做。
2. 模型部署
我们采用 Tensorflow Serving + Flask + Docker 作为部署方案。
Tensorflow Serving 只关心模型的推理,接收Tensor,在gpu上推理计算,输出Tensor;Flask作为前端服务,统一处理所有接口请求,对文本信息进行编解码、异常处理。配合Docker,使得部署和管理更加简易方便。
因为标签接口的qps不高,每一个模型分别部署在一台gpu型的机器上成本较高,于是考虑将多个模型集成在一台单卡机器上。
tfs模型仓库目录如下所示,在model.config文件中定义每一个模型的信息。
执行以下命令启动Tensorflow Serving服务,8500端口提供gRPC调用,8501端口提供REST API方式调用。
由于tfs只能处理tensor的运算,将文本输入到模型之前需要对文本做编码,以及对模型输出的tensor做解码。(注:tensorflow-serving nightly版本中即将支持将文本的编解码处理加入动态图中做推理计算)
因此我们在Tensorflow Serving 服务层上创建 Flask 服务,负责分发请求、异常处理以及对输入输出的编解码,并且提供一个统一的域名地址,与调用方代码解耦。
3. 在线打标服务
这部分的服务主要处理规则逻辑和获取模型预测的结果,比较偏向业务层面,改动频繁,因此将这个服务分离出来。
crontab启动定时任务,每隔一小时获取待打标签书籍id,对书籍进行自动化打标,并上传至后台。
Last updated