在DeepEval项目中使用自定义嵌入模型的完整指南

在DeepEval项目中使用自定义嵌入模型的完整指南

deepeval The Evaluation Framework for LLMs deepeval 项目地址: https://gitcode.com/gh_mirrors/de/deepeval

前言

在自然语言处理(NLP)和机器学习领域,嵌入模型(Embedding Models)扮演着至关重要的角色。它们能够将文本转换为数值向量表示,从而捕捉语义信息并支持各种下游任务。DeepEval作为一个强大的评估框架,在其数据合成功能中巧妙地利用了嵌入模型。本文将深入探讨如何在DeepEval项目中灵活使用各种自定义嵌入模型。

嵌入模型在DeepEval中的作用

DeepEval框架中,Synthesizer类的generate_goldens_from_docs()方法是唯一使用嵌入模型的组件。该方法通过计算文档间的余弦相似度,为数据合成提取相关上下文信息。这种设计使得DeepEval能够智能地从文档中生成高质量的评估数据。

使用Azure OpenAI嵌入模型

Azure OpenAI提供了强大的嵌入模型服务,配置步骤如下:

  1. 首先设置Azure OpenAI全局配置:
deepeval set-azure-openai \
    --openai-endpoint=<你的端点> \
    --openai-api-key=<你的API密钥> \
    --openai-model-name=<模型名称> \
    --deployment-name=<部署名称> \
    --openai-api-version=<API版本> \
    --model-version=<模型版本>
  1. 然后设置Azure OpenAI嵌入模型:
deepeval set-azure-openai-embedding \
    --embedding-deployment-name=<嵌入模型部署名称>

技术细节:第一个命令配置了全局的Azure OpenAI LLM,而第二个命令专门配置嵌入模型。这种分层设计允许用户灵活地组合不同的模型服务。

使用Ollama本地模型

对于需要本地部署的场景,Ollama提供了便捷的解决方案:

  1. 设置Ollama本地LLM:
deepeval set-ollama <模型名称>
  1. 设置Ollama本地嵌入模型:
deepeval set-ollama-embeddings <嵌入模型名称>

恢复默认:使用unset-ollamaunset-ollama-embeddings命令可随时切换回OpenAI默认服务。

使用其他本地LLM模型

DeepEval支持多种本地LLM服务,包括但不限于:

  • LM Studio:http://localhost:1234/v1/
  • vLLM:http://localhost:8000/v1/

配置示例:

deepeval set-local-model \
    --model-name=<模型名称> \
    --base-url="http://localhost:1234/v1/" \
    --api-key=<API密钥>

设置本地嵌入模型:

deepeval set-local-embeddings \
    --model-name=<嵌入模型名称> \
    --base-url="http://localhost:1234/v1/" \
    --api-key=<API密钥>

自定义嵌入模型开发指南

对于高级用户,DeepEval提供了完整的自定义嵌入模型接口。以下是实现要点:

  1. 继承基类:
from deepeval.models import DeepEvalBaseEmbeddingModel
  1. 必须实现的方法:
  • load_model(): 返回模型实例
  • embed_text(text: str): 单个文本嵌入
  • embed_texts(texts: List[str]): 批量文本嵌入
  • get_model_name(): 返回模型标识名称
  1. 异步方法实现:
async def a_embed_text(self, text: str) -> List[float]:
    embedding_model = self.load_model()
    return await embedding_model.aembed_query(text)

最佳实践:如果嵌入模型不支持异步操作,可以直接复用同步实现:

async def a_embed_text(self, text: str) -> List[float]:
    return self.embed_text(text)

在Synthesizer中使用自定义模型

创建自定义嵌入模型后,只需在初始化Synthesizer时传入:

synthesizer = Synthesizer(embedder=CustomEmbeddingModel())

常见问题与解决方案

  1. JSON解析错误:检查模型输出是否符合规范,必要时实现pydantic约束
  2. 性能优化:对于大批量文本,优先使用embed_texts而非循环调用embed_text
  3. 异步处理:在高并发场景下,异步方法能显著提升吞吐量

结语

DeepEval框架提供了极大的灵活性,支持从云端服务到本地部署的各种嵌入模型方案。无论是使用预配置的Azure OpenAI、Ollama,还是完全自定义的嵌入模型,开发者都能根据项目需求选择最适合的方案。通过本文的指导,您应该能够轻松地在DeepEval项目中集成各种嵌入模型,为您的NLP评估任务提供强大的支持。

deepeval The Evaluation Framework for LLMs deepeval 项目地址: https://gitcode.com/gh_mirrors/de/deepeval

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白娥林

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值