前言
在进行自然语言处理相关的开发时,模型的训练往往是非常耗时耗力的,因此使用预训练好的模型进行 Fine-tune 是一项非常常用的方法。BERT(Bidirectional Encoder Representations from Transformers)是 Google 在2018年推出的一个基于 Transformers 模型的预训练方法,其表现优秀,因此非常受欢迎。在使用 BERT 模型进行文本分类、实体识别等 NLP 相关任务时,我们往往希望可以使用简便的方式来对输入的文本进行特征提取,因此 bert-as-service 这个 npm 包应运而生。
本文将详细介绍 bert-as-service 的使用方法,并结合代码示例演示如何使用该包。
安装
使用 npm 进行安装
npm install bert-as-service
下载预训练模型
bert-as-service 默认使用 BERT 的预训练模型,因此我们需要在使用它之前下载预训练模型。BERT 官方提供了一些预训练模型下载地址,不同的模型包含的语料库大小不同,可以根据自己的需要进行选择。这里以中文的 Chinese-L-12_H-768_A-12 为例进行介绍:
wget https://storage.googleapis.com/bert_models/2018_11_03/chinese_L-12_H-768_A-12.zip unzip chinese_L-12_H-768_A-12.zip
启动服务
下载好模型之后,我们需要使用 bert-as-service 来启动服务。下面是 bert-as-service 的一些常用参数:
- -model_dir:模型文件夹的路径
- -num_worker:工作进程的个数(默认为1)
- -max_seq_len:输入序列的最大长度(bert-as-service 默认为25,因此建议根据任务需求进行调整)
- -pooling_strategy:池化策略(bert-as-service 的默认策略是取平均值)
我们可以根据自己的需求来设置上述参数。下面是一个示例的启动命令:
bert-serving-start -model_dir chinese_L-12_H-768_A-12/ -num_worker 4 -max_seq_len 128 -pooling_strategy REDUCE_MEAN
启动服务之后,会输出类似如下的信息:
... [I 210517 08:29:52 bert_service:_fork:243] worker id: 1, rank: 0, gpu_device: None, hostname: localhost [I 210517 08:29:52 bert_service:_fork:243] worker id: 2, rank: 1, gpu_device: None, hostname: localhost [I 210517 08:29:52 bert_service:_fork:243] worker id: 3, rank: 2, gpu_device: None, hostname: localhost [I 210517 08:29:52 bert_service:_fork:243] worker id: 4, rank: 3, gpu_device: None, hostname: localhost [I 210517 08:29:52 bert_service:__init__:311] ready and listening!
这说明服务已经成功启动。
代码示例
接下来,我们将结合代码示例演示如何使用 bert-as-service 进行特征提取。这里我们以 Python 为例进行演示。
1. 导入模块并连接服务
import numpy as np from bert_serving.client import BertClient bc = BertClient()
2. 输入文本并进行特征提取
texts = ["这是一个测试用例。", "这是另外一个测试用例。"] vecs = bc.encode(texts)
最后,vecs 中将会保存 texts 中每句话的特征向量。vecs 的大小为 (2, 768)(预训练模型为 Chinese-L-12_H-768_A-12,因此特征向量的长度为768)。
可以根据需要进行特征向量的后续处理。
总结
本文详细介绍了 bert-as-service 的使用方法,并结合代码示例演示了如何使用 bert-as-service 进行特征提取。对于需要使用 BERT 进行相关任务的开发者,使用 bert-as-service 可以非常方便地进行预测。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600673e1fb81d47349e53d48