推荐场景下文本嵌入模型性能对比
向量嵌入技术可以将图片、文字等信息转换为高维向量,从而能够在搜素推荐等场景下,通过计算向量之间的距离来计算图片、文本等原始内容之间的相关性。其中本文嵌入用到最多,市面上主要的AI服务商都会为他们的用户提供本文嵌入API,另外也有很多开源文本嵌入模型可供自行部署使用。目前主流的文本嵌入模型的评估标准为MTEB,但是MTEB并没有评估文本嵌入模型在推荐系统中的能力,而本文将尝试评估文本嵌入模型在推荐场景下的表现。
向量嵌入技术可以将图片、文字等信息转换为高维向量,从而能够在搜素推荐等场景下,通过计算向量之间的距离来计算图片、文本等原始内容之间的相关性。其中本文嵌入用到最多,市面上主要的AI服务商都会为他们的用户提供本文嵌入API,另外也有很多开源文本嵌入模型可供自行部署使用。目前主流的文本嵌入模型的评估标准为MTEB,但是MTEB并没有评估文本嵌入模型在推荐系统中的能力,而本文将尝试评估文本嵌入模型在推荐场景下的表现。
GitHub Actions为托管于GitHub上的项目提供了多种持续集成运行环境,包括三种操作系统Linux、macOS和Windows,以及两种架构AMD64和ARM64。这些环境对于大部分项目来说完全足够,但是RISC-V开发者会发现自己很难在GitHub Actions上运行RISC-V工作流。商业公司可以使用自托管(参考Supporting runners on 64bit RISC-V)或者服务商(RISC-V Runners和Cloud-V),但是对于个人开发者来说是一笔巨大的支出。
在大语言模型流行的当下,低精度浮点数对于开发者们不再陌生,而其中BF16是其中支持范围最广的低精度浮点格式。本文将介绍如何在Go语言中使用BF16。
+---------+--------+--------+
| 1符号位 | 8指数位 | 7尾数位 |
+---------+--------+--------+
AVX512是英特尔发布的最新最新一代SIMD指令,能够在一个指令周期内对512位数据进行处理,相当于16个单精度浮点数或者8个双精度浮点数。Gorse推荐系统中的推荐模型训练和推理过程需要大量的向量计算工作,AVX512理论上能够带来一定的加速效果。然而比较遗憾的是,Go语言的编译器并不能自动生成使用SIMD指令的机器码。
MinIO曾经开源过一个将英特尔汇编转换为Go汇编的工具c2goasm。首先,将需要向量化的函数用C语言实现,通过Clang编译出包含SIMD指令的汇编。然后,由于Go汇编是支持AVX512的,将Intel汇编指令转换成Go汇编,即可通过汇编调用SIMD实现的函数。c2goasm的方案十分有效,然而项目已经将近4年没有更新,经过测试也无法处理AVX512指令。
能够编译成一个单独的二进制文件是Go语言的一大特色,避免了部署时繁琐的依赖管理。然而,如果项目包含了前端代码,在编译的时候就需要想办法将前端产物嵌入到Go二进制文件中。编译流程大致如下: