BERT
训练语料集合生成预训练词向量模型,能用在下游任务中。和Word2vec比,个人觉得它最大的好处在于词缺失的时候,能词条化和短词的词向量匹配,这样能避免丢掉太多语义,比如promax
不存在,BERT就会返回pro###
和###max
,这样也能有效获取语义。
BERT
12层的transformer,自己训练一次开销巨大,为了快速使用BERT
生成词向量而不去直接训练,利用bert-as-service
封装库来实现预训练结果的读取。
预训练结果
BERT谷歌官方在github中给出了几个不同类型的已训练好的结果,bert-as-service可以直接拿来使用。
预训练结果github链接 https://github.com/google-research/bert
包括不同词向量维度与不同语言语料的结果,我们这边选择12层训练768维度的全小写英文文本训练结果: https://storage.googleapis.com/bert_models/2020_02_20/uncased_L-12_H-768_A-12.zip
bert-as-service 服务端
bert-as-service
将BERT
作为一个服务运行在pc上,这样需要使用时,只需要将要获取的词或句传给服务器即可。
服务端安装
利用pip
进行安装
pip install bert-serving-server
服务器要求tensorflow
版本大于1.1,python3
。
不过这库很久没更新了,没有做tensorflow2
的适配,所以最高基本就是1.15
版本。
我本身不怎么用tensorflow,直接在自己机子(windows)上装了个1.15版本来用。比较尴尬的是gpu版本的cuda和我pytorch的冲突,只能装个cpu版本凑活用着。
服务端启动
bert-serving-start
bert-serving-start -model_dir=E:bert/uncased_L-12_H-768_A-12/ -num_worker=1 -cpu -max_seq_len=150
主要参数:
model_dir
:预训练bert的结果文件地址
num_worker
:cpu或者gpu线程数,决定同时有几个用户可以使用service
max_seq_len
:处理语句的最长长度,可以设置为None&#x