当前位置: 首页 > news >正文

【评测】推理和微调 “GTE文本向量-中文-通用领域-base”模型

回到目录

【评测】推理和微调 “GTE文本向量-中文-通用领域-base”模型

GTE文本向量-中文-通用领域-base 模型介绍 ,尝试跑通页面的推理和微调案例
运行环境:AMD 8700G + ddr5-4800-64GB + nvidia 4090D + ubuntu24.04

0. 安装modelscope基础环境

参考 环境安装

1. 推理案例

1.1. 运行推理案例程序

# test_gte_embedding.py
from modelscope.models import Model
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasksmodel_id = "iic/nlp_gte_sentence-embedding_chinese-base"
pipeline_se = pipeline(Tasks.sentence_embedding,model=model_id,sequence_length=512) # sequence_length 代表最大文本长度,默认值为128# 当输入包含“soure_sentence”与“sentences_to_compare”时,会输出source_sentence中首个句子与sentences_to_compare中每个句子的向量表示,以及source_sentence中首个句子与sentences_to_compare中每个句子的相似度。
inputs = {"source_sentence": ["吃完海鲜可以喝牛奶吗?"],"sentences_to_compare": ["不可以,早晨喝牛奶不科学","吃了海鲜后是不能再喝牛奶的,因为牛奶中含得有维生素C,如果海鲜喝牛奶一起服用会对人体造成一定的伤害","吃海鲜是不能同时喝牛奶吃水果,这个至少间隔6小时以上才可以。","吃海鲜是不可以吃柠檬的因为其中的维生素C会和海鲜中的矿物质形成砷"]}result = pipeline_se(input=inputs)
print (result)inputs2 = {"source_sentence": ["不可以,早晨喝牛奶不科学","吃了海鲜后是不能再喝牛奶的,因为牛奶中含得有维生素C,如果海鲜喝牛奶一起服用会对人体造成一定的伤害","吃海鲜是不能同时喝牛奶吃水果,这个至少间隔6小时以上才可以。","吃海鲜是不可以吃柠檬的因为其中的维生素C会和海鲜中的矿物质形成砷"]
}
result = pipeline_se(input=inputs2)
print (result)
 $ source ~/.venv/bin/activate $ uv run test_gte_embedding.py
...2.0832840e-02,  2.3828523e-02, -1.1581291e-02]], dtype=float32), 'scores': [0.8859604597091675, 0.9830712080001831, 0.966042160987854, 0.891857922077179]}

运行过程中,查看nvidia-smi,基本用不上GPU资源。中间两个选项的得分高,与实际的语义相符。

1.2. 修改test_gte_embedding.py后运行

 $ vi test_gte_embedding.py
inputs = {"source_sentence": ["吃完海鲜可以喝牛奶吗?"],"sentences_to_compare": ["海鲜吃多了过敏",    <-- 增加这一条 sentence"不可以,早晨喝牛奶不科学","吃了海鲜后是不能再喝牛奶的,因为牛奶中含得有维生素C,如果海鲜喝牛奶一起服用会对人体造成一定的伤害","吃海鲜是不能同时喝牛奶吃水果,这个至少间隔6小时以上才可以。","吃海鲜是不可以吃柠檬的因为其中的维生素C会和海鲜中的矿物质形成砷"]}$ uv run test_gte_embedding.py
...0.03249872, -0.0043882 ]], shape=(6, 768), dtype=float32), 'scores': [0.6142874360084534, 0.6227918863296509, 0.8829822540283203, 0.8409826755523682, 0.6533908247947693]}
...inputs = {"source_sentence": ["吃完海鲜可以喝牛奶吗?"],"sentences_to_compare": ["不可以,早晨喝牛奶不科学","吃了海鲜后是不能再喝牛奶的,因为牛奶中含得有维生素C,如果海鲜喝牛奶一起服用会对人体造成一定的伤害","吃海鲜是不能同时喝牛奶吃水果,这个至少间隔6小时以上才可以。","吃海鲜是不可以吃柠檬的因为其中的维生素C会和海鲜中的矿物质形成砷","海鲜吃多了过敏",    <-- 这一条 sentence放到最后面]}0.03353969, -0.03277201]], shape=(6, 768), dtype=float32), 'scores': [0.6227918863296509, 0.8829822540283203, 0.8409826755523682, 0.6533908247947693, 0.6142874360084534]}

结论:

  1. 数组变化后,数组内的sentence会计算出不同score;
  2. sentence的score与数组内部的排序无关;

2. 微调案例

2.1. 直接运行程序报错

# 需在GPU环境运行
# 加载数据集过程可能由于网络原因失败,请尝试重新运行代码
from modelscope.metainfo import Trainers                                                                                                                                                              
from modelscope.msdatasets import MsDataset
from modelscope.trainers import build_trainer
import tempfile
import ostmp_dir = tempfile.TemporaryDirectory().name
if not os.path.exists(tmp_dir):os.makedirs(tmp_dir)# load dataset
ds = MsDataset.load('dureader-retrieval-ranking', 'zyznull')
train_ds = ds['train'].to_hf_dataset()
dev_ds = ds['dev'].to_hf_dataset()
model_id = 'iic/nlp_gte_sentence-embedding_chinese-base'
def cfg_modify_fn(cfg):cfg.task = 'sentence-embedding'cfg['preprocessor'] = {'type': 'sentence-embedding','max_length': 256}cfg['dataset'] = {'train': {'type': 'bert','query_sequence': 'query','pos_sequence': 'positive_passages','neg_sequence': 'negative_passages','text_fileds': ['text'],'qid_field': 'query_id'},'val': {'type': 'bert','query_sequence': 'query','pos_sequence': 'positive_passages','neg_sequence': 'negative_passages','text_fileds': ['text'],'qid_field': 'query_id'},}cfg['train']['neg_samples'] = 4cfg['evaluation']['dataloader']['batch_size_per_gpu'] = 30cfg.train.max_epochs = 1cfg.train.train_batch_size = 4return cfg 
kwargs = dict(model=model_id,train_dataset=train_ds,work_dir=tmp_dir,eval_dataset=dev_ds,cfg_modify_fn=cfg_modify_fn)
trainer = build_trainer(name=Trainers.nlp_sentence_embedding_trainer, default_args=kwargs)
trainer.train()
 $ uv run test_gte_training.py
FileNotFoundError: https://huggingface.co/datasets/zyznull/dureader-retrieval-ranking/resolve/main/train.jsonl.gz
,科学上网,问题依旧

2.2. 手工下载(中间可能中断,多试几次)

[微调测试数据下载地址 https://hf-mirror.com/datasets/zyznull/dureader-retrieval-ranking/tree/main)
ubuntu下解压缩

 $ gzip -d dev.jsonl.gz$ gzip -d train.jsonl.gz

文件结构
test_gte_training.py

  • datasets
    • dev.jsonl
    • train.jsonl

2.3. 修改程序如下:

参考 魔塔的MsDataset.load()如何加载已经下载在本地的数据集修改程序

# test_gte_training.py
...
#ds = MsDataset.load('dureader-retrieval-ranking', 'zyznull')
#train_ds = ds['train'].to_hf_dataset()
#dev_ds = ds['dev'].to_hf_dataset()
...
上面三行修改为
...
ds = load_dataset('json', data_files={'train': 'dataset/train.jsonl', 'dev': 'dataset/dev.jsonl'})
train_ds = ds['train']
dev_ds = ds['dev']
...
 $ uv run test_gte_training.py
。。。
2025-05-29 13:52:51,782 - modelscope - INFO - epoch [1][21596/21599]    lr: 1.000e-02, eta: 0:00:00, iter_time: 0.144, data_load_time: 0.031, memory: 6967, loss: 3.0015
2025-05-29 13:52:51,937 - modelscope - INFO - epoch [1][21597/21599]    lr: 1.000e-02, eta: 0:00:00, iter_time: 0.151, data_load_time: 0.033, memory: 6967, loss: 2.9974
2025-05-29 13:52:52,081 - modelscope - INFO - epoch [1][21598/21599]    lr: 1.000e-02, eta: 0:00:00, iter_time: 0.148, data_load_time: 0.034, memory: 6967, loss: 2.9933
2025-05-29 13:52:52,200 - modelscope - INFO - epoch [1][21599/21599]    lr: 1.000e-02, eta: 0:00:00, iter_time: 0.115, data_load_time: 0.030, memory: 6967, loss: 2.7065
2025-05-29 13:52:52,552 - modelscope - INFO - Saving checkpoint at 1 epoch
2025-05-29 13:52:54,240 - modelscope - INFO - Train finished. Uploading models, waiting...
2025-05-29 13:52:54,316 - modelscope - INFO - {'done': True}
(ailife) ailife@ailife-System:~/workspace$

程序运行一小时,CPU占用不高,GPU满载运行,显存8096MB。最终结果存放在哪里呢?跑了一个寂寞。

本文结束

回到目录

相关文章:

  • [嵌入式实验]实验二:LED控制
  • 公司数据不泄露,DeepSeek R1本地化部署+web端访问+个人知识库搭建与使用
  • 19、Python字符串高阶实战:转义字符深度解析、高效拼接与输入处理技巧
  • 网络安全的守护者:iVX 如何构建全方位防护体系
  • 【Linux】线程概念
  • 代购系统数据中台搭建指南:3 步实现订单、物流、用户行为的全链路数字化
  • 大模型在老年性白内障预测及诊疗方案中的应用技术方案
  • python模块和包
  • 搭建frp内网穿透
  • 可视化图解算法47:包含min函数的栈
  • 重温经典算法——冒泡排序
  • 【HarmonyOS 5】鸿蒙中的UIAbility详解(二)
  • Python中的sorted()函数:智能排序器详解
  • 中国国运新引擎:下一代液晶技术突破如何重塑全球显示格局
  • iOS 获取Wifi信息
  • python打卡day39@浙大疏锦行
  • 苹果签名应用掉签频繁原因排查以及如何避免
  • 敏捷开发中如何避免迭代失控
  • Redis 主从复制中的全量拷贝机制详解
  • ubuntu20.04编译 pjproject-2.7.1
  • php手机网站如何制作教程/seo引流什么意思
  • 深圳做二维码网站建设/北京seo管理
  • 室内设计效果图背景墙/seo网络推广知识
  • 网站建设php教程视频/网络推广app
  • 烟台网站建设设计/国内设计公司前十名
  • 导购类网站建设多少钱/搜索引擎营销是什么意思