/bert_encode_server

bert/albert/roberta特征抽取服务端,基于bert-as-service,新增albert模型。

Primary LanguagePython

Bert-Encode-Server

简介

项目在肖涵老师的bert-as-service上添加了ALBERT模型,总体使用与bert-as-service保持一致。

直接通过Bert Encode Server服务端获取输入特征(可以是字特征,也可以是句特征),此时的预训练语言模型仅作为通用的特征提取器,不参与下游模型的训练,可以显著降低任务的计算资源占用;从Bert Encode Server服务端提取特征需要一定的耗时,该耗时取决于服务端的计算性能

更新日志

  • 2020.03.03 新增样例。
  • 2020-01-11 加载roberta系列模型时,不需要添加-albert参数,其网络结构与bert模型一致。
  • 2020-01-11 修复BERT模型加载出现AttributeError: 'BertConfig' object has no attribute 'embedding_size'的错误,原因是对开启server的参数-albert进行处理时出现错误;现在,-albert参数被设置为store_true的动作参数,默认为False

未来工作

  • 提高稳定性和并发性。
  • 新增BERT系列改进模型,如Distill Bert,Tiny Bert。

依赖项

  • flask == 1.1.1
  • GPUtil == 1.4.0
  • termcolor == 1.1.0
  • flask_cors == 3.0.8
  • flask_json == 0.3.4
  • tensorflow == 1.15.2
  • flask_compress == 1.4.0

字特征提取(服务端)

cd char_server
bash char_server.sh

注意修改.char_server.sh中文件的相关内容:

  • 如果使用ALBERT模型,应添加参数-albert
  • model_dirckpt_nameconfig_name根据预训练语言模型的位置进行相应调整。
  • 如使用cpu,添加-cpu参数;如使用gpu,添加-device_map "0",其中"0"为0号GPU。

句特征提取(服务端)

cd sent_server
bash sent_server.sh

参数与字特征提取(服务端) 所示参数一致,但需注意:

  • -pooling_strategy参数应删除或设置该参数为REDUCE_MEAN

使用客户端

import requests

r = requests.post(
    "http://your_ip:your_port/encode",
    json={
        "id": 123,
        "texts": ["啊","啥意思"],
        "is_tokenized": False
    }
)

其中,json中的相关参数设置如下:

  • texts字段为句子list时,is_tokenized字段为False
  • texts字段为字符list时,is_tokenized字段为True

一些常用的中文预训练模型

BERT

ALBERT

Roberta

参考