![[BERT]获取中文句子向量过程全记录,第1张 [BERT]获取中文句子向量过程全记录,第1张](/aiimages/%5BBERT%5D%E8%8E%B7%E5%8F%96%E4%B8%AD%E6%96%87%E5%8F%A5%E5%AD%90%E5%90%91%E9%87%8F%E8%BF%87%E7%A8%8B%E5%85%A8%E8%AE%B0%E5%BD%95.png)
目的:将数据集输入BERT,直接获取句子向量做后续训练
数据集格式:一句话一行(已过滤掉各种符号)
环境:python3.6 + tensorflow1.14
一、利用BertServer
参考:使用Bert得到句向量简单总结_介样不勾的博客-CSDN博客_bert获取句子向量
我的数据保存:
1. 安装BertServer:
pip install bert-serving-client
pip install bert-serving-server
输出:
2. 启动服务端
bert-serving-start -model_dir ./chinese_L-12_H-768_A-12/ -num_worker 2 -max_seq_len 64
max_seq_len的取值是经过统计数据集之后得到的长度,num_worker=2是因为服务器上有两张卡是空闲的可以被我拿来用~
3. 测试一下
import numpy as np
from bert_serving.client import BertClient
bc = BertClient()
sentence = bc.encode(['左侧 肾上腺 增粗 PET 上 异常 放射性 浓聚 考虑 为 肾上腺 转移'])
print(sentence.shape)
print(sentence)
python bert2senvec.py
输出:
(1, 768)
[[ 2.54443586e-01 3.98949206e-01 -2.38077953e-01 -2.89931267e-01
3.15846503e-01 -7.56896377e-01 -1.96446180e-01 -8.28849748e-02
...
-2.79337615e-01 2.05526114e-01 -3.87653321e-01 -2.14681253e-01
-7.32321620e-01 6.60689592e-01 -8.09417069e-01 6.66649314e-04]]
目前看来还比较成功
4. 批量处理一下
参考:使用bert-service获取句向量和相似度计算_马苏比拉米G的博客-CSDN博客_bert获取句向量
from bert_serving.client import BertClient
import numpy as np
import os
def get_sen_vec(file, new_name):
bc = BertClient()
sen_vec = []
len = 0
with open(file, 'r', encoding='utf-8') as f:
for line in f.readlines():
len += 1
if line.strip('\n').strip() != '':
# 如果不是空
sen = bc.encode([line])
sen_vec.append(sen)
print(f"{file}一共有{len}句话")
np.save(new_name, sen_vec)
if __name__ == '__main__':
dir = "file.txt"
output_dir = "file_vec"
get_sen_vec(file_name, new_name)
启动后运行
nohup python bert2senvec.py > run.log 2>&1 &
nohup:后台自动运行
所有提示信息输入到run.log中,输出消息如下:
nohup: ignoring input
file.txt一共有44122句话
目前看来非常成功,不知道能否顺利拿来应用,如果有后续持续更新
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)