基础条件有限:
SentenceTransformer 在 CPU 条件下生成词向量时
最简单方式:
批量处理(Batch Processing): 将多个句子组合成一个批次(batch),然后一次性传递给 SentenceTransformer 进行向量化。这种方法充分利用了 CPU 的并行计算能力,从而显著提高处理速度。通过使用批处理,可以减少函数调用和数据传输的开销,以及提高硬件资源的利用率。
单条结构化输出时:
def embedding(self, line_dict_list):
result_list = []
for single_dict_line_content_id in line_dict_list:
line_id = single_dict_line_content_id["id"]
line_content = single_dict_line_content_id["content"]
#结构化输出
dict_result_embedding = {}
dict_result_embedding["line_id"] = line_id
#单条向量化
line_embedding = model.encode(line_content)
vec_list = line_embedding.tolist()
dict_result_embedding["line_embedding"] = vec_list
result_list.append(dict_result_embedding)
return result_list
批量化输入结构化输出时:
def embedding(self, line_dict_list, collection_name=None):
line_content_list = []
line_id_list = []
result_embedding_list = []
for single_dict_line_content_id in line_dict_list:
line_id = single_dict_line_content_id["id"]
line_content = single_dict_line_content_id["content"]
line_content_list.append(line_content)
line_id_list.append(line_id)
#批向量化
line_embedding = model.encode(line_content_list)
vec_list = line_embedding.tolist()
#结构化输出
for line_id, line_embedding in zip(line_id_list, vec_list):
result_dict = {'line_id': line_id, 'line_embedding': line_embedding}
result_embedding_list.append(result_dict)
return result_embedding_list
测试速度对比:
20条数据下:
采用此方式优化前:6.47s
采用此方式优化后:3.93s
总结:
最简单的优化方式,之后也测试当数量继续增大为80条、120条…会不会不只是两倍关系的速度提升,发现依旧如此,是不是这就是该思路的极限水平了?接下来该换思路了?