第一次在公司调试BGE模型,谨以此篇记录学习过程

1、写作背景

这个星期,领导想要调试BGE模型,关于这个模型的简介在网上可以看到,包括最新的论文也可以找到。比如链接:智源开源最强语义向量模型BGE!中英文测评全面超过OpenAI、Meta-腾讯云开发者社区-腾讯云 (tencent.com)

BGE论文解读:如何炼成中文世界的通用Embedding Model - 知乎 (zhihu.com)

都介绍了BGE的相关概念,简单来说,BGE就是一种语义向量模型,可以解决自然语言领域的诸多问题,包括幻觉问题、知识时效问题、超长文本问题等,广泛应用于搜索、推荐、数据挖掘等领域。

此次领导安排我在本地调试BGE-base-zh模型,根据指定的训练数据微调该模型,使得这个模型能够适配公司的数据,这里用于调试的数据集并不大,所以微调起来不会太耗时,因此这次的任务主要是能够让这个模型运行起来。

BGE对应的github仓库对应地址为:GitHub - FlagOpen/FlagEmbedding: Retrieval and Retrieval-augmented LLMs

BGE模型地址为:https://huggingface.co/BAAI/

在github公布的数据集基于MTEB,包括中文和非中文的。BGE模型相关代码均开源于FlagOpen飞智大模型技术开源体系旗下FlagEmbedding项目,一个聚焦于Embedding技术和模型的新版块。

2、调试过程

此次使用的BGE模型为bge-base-zh,公司已经将模型文件下载到本地,领导直接提供了微调数据(finetune.json),所以我需要做的是修改微调启动文件。这里一般启动文件有两种,一种就是直接python文件,公司用的是.sh的启动文件,其实也就是封装了一下。

所以我主要就是修改finetune.sh文件。这里面主要有几点更改:

(1)更改GPU-devisices的数量和开启的进程数,这两点都需要根据实际的设备进行更改;

(2)更改加载的模型,这里使用的是bge-base-zh模型,并且模型文件都已经保存在本地,所以直接引入模型文件即可,也就是修改加载模型的地址。需要注意的是,BGE多个版本的模型都在huggingFace上提供了(BGE - a BAAI Collection (huggingface.co)),理论上说,就算本地没有模型文件,使用“BAAI/bge-base-zh”也是可以通过远程加载模型的,只是因为在国内,这种加载模型的方式不可用,也不仅仅是加载这个模型不行,加载huggingFace上的其他数据集也是不行的,至少我试了多种方式都不大行,若有可行的方法,期待留言。

(3)更改加载的数据,导入微调数据地址即可。

理应按照这些步骤就可以得到想要的结果,但实际操作中还是遇到了问题。

对于这个微调,主要修改的还是finetune.sh文件,将里面对应的参数改正确即可。

后来,在此基础上,我有开始调试模型的评价,对于一个模型的评价,MTEB是一个非常常用的数据评测指标,C-MTEB是中文版本,这里也是使用C-MTEB,在github上也有(FlagEmbedding/C_MTEB at master · FlagOpen/FlagEmbedding · GitHub)。程序员的第一步肯定得看readme.md吧,里面给了一些测试案例。下图就是C-MTEB文件夹所有内容。

这个时候我就单纯的想运行eval_C-MTEB.py,按照README.md里面介绍的步骤。

我一开始没有看明白,所以我一直以python eval_C-MTEB.py的方式执行,没有带后面的东西。反正是没有运行成功,但是在错误信息里面看到了“BAAI/bge-large-zh”。能够想出来,这是huggingface上面的模型,然后我更加细致的看了eval_C-MTEB.py的代码,有这么一段,让我有了新的思考。

由这部分代码,让我想起了官方文档里面运行代码的那句(python eval_C-MTEB.py --model_name_or_path BAAI/bge-large-zh)。没有意外的话,--model_name_or_path对应的就是代码里面的第一个参数。经过验证,确实没错。所有这个python文件是可以接受4个参数的。

首先我就需要让这个文件运行本地的模型(bge-base-zh),我就需要传入本地模型给--model_name_or_path。

当我在此执行时,其实执行了很多次,老是会出现链接huggingface.co相关的错误,让我更加认为,连接huggingface肯定是不行的,这应该是需要在线远程从huggingface上获取点什么,之前要使用transfromer时,也是因为连接huggingface不成功而搁浅了。

后来才发现,运行代码中没有指定数据集,报错的原因是不是需要远程加载数据集呢?应该是的,后来我随便找了数据量小的数据集放在本地,通过修改evaluation对象,绑定本地数据集,然后进行模型评估。其实应该差不多了,只是又到最后一步,evaluation.run()的时候出现了错误,提示我一些库的原因,安装来安装去,有的库通过pip安装不了(报错:metadata-generation-failed)。网上都说这个错误很常见,我也是根据网上的一顿操作,升级pip,wheel,setuptools。还清除安装缓存(pip cache purge),但没有解决,很扎心。后来经过一个哥们的操作,我们pip下载都是通过公司的源,他直接查了一下源里是否真的存在需要的库,发现没有。我去,这就高级了点,我怎么能想到呢。后来我就去PyPI上面去下载了那个库,上传到本地服务器上的python里面就可以用。

后来又出现提示我:pip install mteb[bire],这种方式我都没见过。。。我就按照指令安装,又是不行,中途又出现缺少faiss这个库,真是缺的东西也太多了。我想去PyPI里面找faiss这个库,发现这是wheel文件,我就选了一个,通过pip install name.wheel来安装,又出错了,我都搞不懂。。。

至此,还是没有安装完,导致这个代码没有顺利执行完毕,后续希望能有所进展!

3、总结

调试模型是一个复杂的过程,特别是看别人写好的代码,对应那种封装好的代码,站在公司的角度,是希望数据和模型都在本地。需要调整的地方很多。经过这么一个流程下来,也有很多的收获,学习了不少排错的方法,继续加油。

### BGE模型简介 BGE(BAAI General Embedding)是由智源研究院开发的一系列高性能文本嵌入模型,在中英文语义检索精度与整体语义表征能力方面表现卓越,甚至超越了OpenAI、Meta等国际知名机构的同类模型[^4]。该模型不仅适用于基础的文本相似度计算,还在知识库检索、聚类、分类以及RAG(Retrieval Augmented Generation)等复杂场景中有广泛应用价值。 #### 模型特点 1. **高效性能**:BGE模型以其高效的处理能力和优秀的语义理解能力著称,能够显著提升各类自然语言处理任务的效果[^1]。 2. **多样应用场景**:无论是简单的文本匹配还是复杂的生成任务辅助,BGE都能提供高质量的支持[^3]。 3. **丰富的版本支持**:Hugging Face平台上提供了多个版本的BGE模型供开发者选择,例如`bge-base-zh`用于中文场景下的应用[^2]。 --- ### 使用方法概述 当首次尝试在企业环境中部署BGE模型时,需注意以下几个关键点: 1. **加载模型的方式** 如果本地已存储有预训练好的模型文件,则可以直接通过路径引入;反之,虽然理论上可以利用Hugging Face提供的远程接口下载并加载模型,但由于国内网络环境限制,这种方式可能无法正常工作。 2. **微调优化** 对于特定领域内的定制化需求,可通过`llama_index`框架实现对BGE模型的有效微调,从而进一步提高其适配性和准确性[^5]。 3. **特殊参数设置** 实际操作过程中发现,部分情况下仅简单调用默认配置难以达到最佳效果。因此建议按照官方文档指导调整输入格式及相关超参设定,比如针对某些具体任务加入适当提示词(prompt engineering),这一步骤对于充分发挥BGE潜力至关重要。 --- ### 示例代码展示 以下是一个基于Python语言编写的小例子,演示如何加载并使用`bge-base-zh`完成基本功能测试: ```python from sentence_transformers import SentenceTransformer, util # 加载本地或在线版BGE模型实例 model_path = "./path/to/local/model" # 替换为实际存放位置 if not os.path.exists(model_path): model_name_or_path = "BAAI/bge-base-zh" else: model_name_or_path = model_path model = SentenceTransformer(model_name_or_path) # 输入待比较字符串列表 sentences = ["今天天气真不错", "明天会更好"] # 获取对应向量表示形式 embeddings = model.encode(sentences) print(f"Sentence embeddings shape: {embeddings.shape}") similarity_score = util.cos_sim(embeddings[0], embeddings[1]) print(f"Cosine similarity between sentences: {float(similarity_score):.4f}") ``` 上述脚本首先定义了一组短句作为样本数据,接着借助`sentence-transformers`工具包中的API完成了从原始文本到数值特征空间映射的过程,并最后输出两者的余弦距离衡量结果。 ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值