在DeepEval项目中使用自定义嵌入模型的完整指南
deepeval The Evaluation Framework for LLMs 项目地址: https://gitcode.com/gh_mirrors/de/deepeval
前言
在自然语言处理(NLP)和机器学习领域,嵌入模型(Embedding Models)扮演着至关重要的角色。它们能够将文本转换为数值向量表示,从而捕捉语义信息并支持各种下游任务。DeepEval作为一个强大的评估框架,在其数据合成功能中巧妙地利用了嵌入模型。本文将深入探讨如何在DeepEval项目中灵活使用各种自定义嵌入模型。
嵌入模型在DeepEval中的作用
DeepEval框架中,Synthesizer
类的generate_goldens_from_docs()
方法是唯一使用嵌入模型的组件。该方法通过计算文档间的余弦相似度,为数据合成提取相关上下文信息。这种设计使得DeepEval能够智能地从文档中生成高质量的评估数据。
使用Azure OpenAI嵌入模型
Azure OpenAI提供了强大的嵌入模型服务,配置步骤如下:
- 首先设置Azure OpenAI全局配置:
deepeval set-azure-openai \
--openai-endpoint=<你的端点> \
--openai-api-key=<你的API密钥> \
--openai-model-name=<模型名称> \
--deployment-name=<部署名称> \
--openai-api-version=<API版本> \
--model-version=<模型版本>
- 然后设置Azure OpenAI嵌入模型:
deepeval set-azure-openai-embedding \
--embedding-deployment-name=<嵌入模型部署名称>
技术细节:第一个命令配置了全局的Azure OpenAI LLM,而第二个命令专门配置嵌入模型。这种分层设计允许用户灵活地组合不同的模型服务。
使用Ollama本地模型
对于需要本地部署的场景,Ollama提供了便捷的解决方案:
- 设置Ollama本地LLM:
deepeval set-ollama <模型名称>
- 设置Ollama本地嵌入模型:
deepeval set-ollama-embeddings <嵌入模型名称>
恢复默认:使用unset-ollama
和unset-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提供了完整的自定义嵌入模型接口。以下是实现要点:
- 继承基类:
from deepeval.models import DeepEvalBaseEmbeddingModel
- 必须实现的方法:
load_model()
: 返回模型实例embed_text(text: str)
: 单个文本嵌入embed_texts(texts: List[str])
: 批量文本嵌入get_model_name()
: 返回模型标识名称
- 异步方法实现:
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())
常见问题与解决方案
- JSON解析错误:检查模型输出是否符合规范,必要时实现pydantic约束
- 性能优化:对于大批量文本,优先使用
embed_texts
而非循环调用embed_text
- 异步处理:在高并发场景下,异步方法能显著提升吞吐量
结语
DeepEval框架提供了极大的灵活性,支持从云端服务到本地部署的各种嵌入模型方案。无论是使用预配置的Azure OpenAI、Ollama,还是完全自定义的嵌入模型,开发者都能根据项目需求选择最适合的方案。通过本文的指导,您应该能够轻松地在DeepEval项目中集成各种嵌入模型,为您的NLP评估任务提供强大的支持。
deepeval The Evaluation Framework for LLMs 项目地址: https://gitcode.com/gh_mirrors/de/deepeval
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考