最简单的生成词向量加速

基础条件有限:

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条…会不会不只是两倍关系的速度提升,发现依旧如此,是不是这就是该思路的极限水平了?接下来该换思路了?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值