目前,BERT已经被广泛用于各类自然语言处理任务,那么,如何根据需求便捷生成字符嵌入向量呢?本文将记录该问题的探索过程。
1、用到的包,没有的可以自行下载
bert-serving-client
bert-serving-server
2、启动server, 注意,需要先启动服务,client才能收到反馈结果,否则一直处于运行等待状态。
from bert_serving.server.helper import get_args_parser
from bert_serving.server import BertServer
args = get_args_parser().parse_args(['-model_dir', 'chinese_L-12_H-768_A-12',
'-pooling_strategy', 'NONE',
'-max_seq_len','512'])
if __name__ == '__main__':
server = BertServer(args)
server.start()
说明:
-model_dir | 为BERT的预训练模型的路径 |
-pooling_strategy | 默认为句向量,"NONE"为词向量 |
-max_seq_len | 最大长度,不足补零 |
3、客户端运行
from bert_serving.client import BertClient
bc = BertClient(ip='localhost')
vectors = bc.encode(['稻纵卷叶螟是水稻的主要害虫之一,是一种迁飞性害虫。','辽豆10号属中熟品种、抗倒伏、抗大豆花叶病毒病和霜霉病'])
print(vectors)
shape=(2,512,768)
[[[ 0.14123556 0.02149387 -0.6442527 ... 0.6428839 0.34610572
0.80053955]
[-0.02585154 0.6437761 -0.4558012 ... -0.7428082 -0.55981106
0.20254183]
[ 1.3252223 0.27114892 -0.4354548 ... 1.0058303 0.09623593
0.42003313]
...
[-0. 0. -0. ... 0. -0.
-0. ]
[-0. 0. -0. ... 0. -0.
-0. ]
[-0. 0. -0. ... 0. 0.
-0. ]]
[[-0.40050918 0.49590495 -0.7672191 ... 0.8043914 -0.28956407
-0.47412562]
[-0.2795449 1.1792994 0.65010804 ... -0.7610196 -0.41661397
-1.190715 ]
[-0.24264015 0.30065003 -1.0405343 ... 0.20720059 0.3468752
-0.07896887]
...
[-0. 0. -0. ... 0. -0.
-0. ]
[-0. 0. -0. ... 0. -0.
-0. ]
[-0. 0. -0. ... 0. 0.
-0. ]]]