第一次在公司调试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、总结

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

03-10
<think>好的,我现在需要处理用户关于BGE编程环境配置和使用教程的查询。首先,要明确BGE指的是什么。BGE可能有多个含义,但在IT领域,最常见的是Blender Game Engine,不过Blender在2.8版本后已经弃用了BGE,转而使用UPBGE作为分支。另外,BGE也可能指BGE M3 Embedding,这是北京智源研究院开源的文本向量模型,常用于自然语言处理。需要根据用户的问题中的“编程环境配置”和“使用教程”来判断用户指的是哪个。用户提到的是编程环境配置,可能更倾向于Blender的游戏引擎或者UPBGE,因为涉及到编程环境的设置和教程。而如果是BGE M3 Embedding,通常更多是安装库和调用API,可能不需要复杂的编程环境配置。 接下来,我需要验证这个假设是否正确。用户的问题中同时提到“编程环境配置”和“使用教程”,这可能指向游戏开发环境,比如Blender/UPBGE中的Python脚本编写。但也不能完全排除是BGE M3 Embedding的情况,尤其是在处理NLP任务时的环境配置。因此,最好在回答中涵盖这两种可能性,或者明确区分两种情况,确保用户得到正确的信息。 然后,我需要调用网络搜索工具来查找相关信息。首先搜索“BGE 编程环境配置 使用教程”,查看结果。根据搜索结果,如果大部分结果指向Blender Game Engine或UPBGE,那么重点放在这方面。如果出现BGE M3 Embedding的相关内容,则需包括NLP相关的配置步骤。 假设搜索结果中显示BGE主要指的是UPBGE(Blender的分支),那么配置步骤可能包括安装UPBGE、设置Python环境、编写逻辑砖或脚本。而如果是BGE M3 Embedding,则需要安装相应的Python库,如FlagEmbedding,并演示如何调用模型生成嵌入向量。 同时,用户要求分方法或步骤,换行分隔,避免使用首先、然后等步骤词汇。每个步骤需要清晰,整合搜索到的内容,确保实用性和可操作性。还需要注意引用内容不能堆在末尾,而是自然地融入回答中。 例如,对于UPBGE的环境配置,步骤可能包括下载安装UPBGE,配置Python API,使用逻辑编辑器或编写Python脚本,以及测试示例项目。而对于BGE M3 Embedding,步骤可能包括安装库、导入模型、处理文本和生成向量。 此外,需要检查是否有代码或公式需要格式化。例如,BGE M3的代码示例需要三个反引号包裹,并注明Python。数学公式如果涉及向量计算,需要用$或$$包裹。 最后,生成相关问题,必须基于原始问题和回答内容。例如,用户可能进一步询问UPBGE与Blender的区别,BGE M3的API参数,或者性能优化方法等。 现在需要确保回答结构正确,分点明确,符合用户的所有格式要求,包括相关问题部分。同时,避免第一人称和步骤词汇,正确使用代码块和公式格式。</think>根据BGE在不同技术领域的应用场景,整理两种主流BGE技术方案的配置和使用指南: 一、UPBGE(Blender游戏引擎分支)开发环境配置 1. 环境安装与基础配置 从UPBGE官网下载对应操作系统的稳定版本(当前最新版为0.3+) 验证Python环境兼容性,要求Python 3.7+环境支持 在用户偏好设置中配置外部代码编辑器路径(推荐VS Code或PyCharm) 2. 逻辑系统配置 使用内置逻辑编辑器创建交互式对象 配置传感器(Keyboard/Mouse)、控制器(Python模块)、执行器(Motion)的三元组逻辑 ```python # 示例:键盘控制物体移动 import bge cont = bge.logic.getCurrentController() obj = cont.owner keyboard = bge.logic.keyboard if keyboard.events[bge.events.AKEY] == 1: obj.applyMovement([-0.1,0,0], True) ``` 3. 物理系统调试 在属性面板设置刚体动力学参数 调试碰撞边界和触发器设置 通过Python API实时修改物理属性: ```python obj.collisionBounds = (1.0, 1.0, 1.0) obj.linearVelocity = [0, 2.0, 0] ``` 二、BGE M3 Embedding(文本向量模型)使用指南 1. 安装与基础调用 通过pip安装FlagEmbedding库: ```bash pip install -U FlagEmbedding ``` 初始化中文嵌入模型: ```python from FlagEmbedding import BGEM3FlagModel model = BGEM3FlagModel('BAAI/bge-m3', use_fp16=True) ``` 2. 多任务处理 同时生成稠密向量、稀疏向量和ColBERT token权重: ```python embeddings = model.encode( ["样例文本"], batch_size=12, max_length=8192, return_dense=True, return_sparse=True, return_colbert_vecs=True ) ``` 3. 混合检索实践 综合使用多种检索模式提升搜索精度: ```python # 稠密向量相似度计算 dense_emb = embeddings['dense_vecs'][0] cos_sim = np.dot(query_vec, doc_vec.T) / (np.linalg.norm(query_vec)*np.linalg.norm(doc_vec)) # 稀疏向量倒排索引 from sklearn.feature_extraction.text import TfidfVectorizer vectorizer = TfidfVectorizer() sparse_matrix = vectorizer.fit_transform(documents) ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值