如何评估在Embedding模型部署中的效果?

摘要:最近大模型发展迅速,与之对应的向量化需求也被带动起来了,由此社区也衍生出很多模型,本文选几款,简单做下评测。
写在前面 最近大模型发展迅速,与之对应的向量化需求也被带动起来了,由此社区也衍生出很多模型,本文选几款,简单做下评测。 前置概念 为方便读者,先简单介绍几个概念。 概念1:Vector Embedding 也即向量化嵌入,举个例子: 想象一下,你是一位市场研究员,职责是分析消费者的购买行为,并为你的客户提供针对性的营销策略。在你的数据库中,有成千上万的消费者交易记录,每条记录都包含了消费者的个人信息、购买的商品、购买的时间和地点等信息。 在没有Vector Embedding的情况下,如果你想找出哪些消费者可能对新产品感兴趣,你可能需要手动查看每条交易记录,然后根据消费者的购买历史和商品的特点来进行判断。然而,这种方法可能忽略了消费者的其他重要特征,如他们的收入水平、兴趣爱好、生活方式等,导致分析的结果不够准确。 现在引入Vector Embedding,此时你就可以将每位消费者的个人信息和购买历史转化为一个多维的“消费者画像向量”。这个向量不仅包括了消费者的基本信息和购买历史,还包含了他们的收入水平、兴趣爱好、生活方式等各个方面的元素。换句话说,这些信息能反映出消费者的复杂特征。例如,一位经常购买高端护肤品的消费者画像向量,大概率与追求高品质生活的向量相近,而一位经常购买户外运动装备的消费者画像向量,大概率与追求健康生活方式和热爱自然的向量相近。此时,若想找出哪些消费者可能对新产品感兴趣,只需要计算出新产品的向量,并与大量消费者画像的向量进行对比,即可快速筛选出潜在的目标客户(目标客户的向量相似度高)。这个过程不再需要逐个查看消费者的个人信息和交易记录,大大简化了数据的处理过程。 更深入的概念可阅读附录[1]进行学习。 概念2:文档切分中的Chunk和Overlap 在处理较长文档或文本时,将其分割成若干小块,每块称为一个Chunk。在这个特定的切分策略中,每个Chunk由最多N个Token组成。Token通常指文本中的单词或符号,取决于具体语境。而Overlap是相邻Chunk之间共有的Token数。举个例子: 每Chunk200 Token,Overlap 20。在这个例子中,每个Chunk由最多200个Token组成。Overlap为20,意味着相邻的Chunks会有20个Token是重复的,从而确保文本的连贯性。例如,如果某个文本段落共有230个Token,它将被分成两个Chunks:第一个Chunk将有200个Token,第二个Chunk将有30个Token(因为230-200=30),并且这两个Chunks之间将有20个Token重叠。 这种切分方式有助于确保在将长文档送入诸如大型语言模型进行Embedding或处理时,能够保持文本的语义连贯性,同时又能满足模型处理长度有限的输入的要求。切分文档时考虑Chunk的大小和Overlap的数量,对于提高模型处理效率和文本的语义理解都是十分重要的。​ 模型调研 与大模型类似,Embedding也是使用模型来实现的,只不过Embedding模型更为轻量。一般都在2G以内。 经调研(附录[6~10]),发现以下模型对中文的支持效果较好,且已经开源方便本地私有化部署: 可以看得出m3模型的优势是支持多语言,并且字符数扩展到了8192,这意味着BGE-M3能够高效地处理长篇幅的文档,满足对于长文档检索的需求。 以上几类模型的链接请参考附录[2~5],下文针对这几种模型进行效果评测。 模型部署 为了部署Embedding模型,我们需要引入对应的工具库,目前主要有几类: Sentence-Transformers: Sentence-Transformers库是基于HuggingFace的Transformers库构建的,它专门设计用于生成句子级别的嵌入。它引入了一些特定的模型和池化技术,使得生成的嵌入能够更好地捕捉句子的语义信息。Sentence-Transformers库特别适合于需要计算句子相似度、进行语义搜索和挖掘同义词等任务。 HuggingFace Transformers: HuggingFace的Transformers库是一个广泛使用的NLP库,它提供了多种预训练模型,如BERT、GPT-2、RoBERTa等。这些模型可以应用于各种NLP任务,如文本分类、命名实体识别、问答系统等。Transformers库支持多种编程语言,并且支持模型的微调和自定义模型的创建。虽然Transformers库的功能强大,但它主要关注于模型的使用,而不是直接提供句子级别的嵌入。 Langchain集成的HuggingFaceBgeEmbeddings。与3一样。
阅读全文