我一直在尝试多进程BERT嵌入生成。
尝试按以下方式进行编码,但无法起飞。
bert_command = 'bert-serving-start -model_dir uncased_L-12_H-768_A-12 -num_worker 40'
process = subprocess.Popen(bert_command.split(), stdout=subprocess.PIPE)
from bert_serving.client import BertClient
然后使用
import concurrent.futures
对嵌入生成进行多处理
def embedding_dic(file_list):
dic={}
with concurrent.futures.ProcessPoolExecutor(max_workers=20) as executor:
for file, e in zip(file_list, executor.map(embedding_file, file_list)):
dic[file]=e
return dic
def embedding_file(file):
file_obj = open(form_path+file, 'r')
file_read = file_obj.readlines()
file_obj.close()
file_read = [i.rstrip() for i in file_read if not(bool(not i or i.isspace()))]
file_read =[' |||'.join(file_read )]
bc = BertClient(check_length=False)
try:
embedding = bc.encode(file_read)
except ValueError:
embedding=None
return embedding
但是流程陷入了
embedding = bc.encode(file_read)
我们非常感谢您的帮助。
关于机器配置:
系统信息
bert-as-service
版本:1.8.9