动手学习RAG: 向量模型

在世界百年未有之变局与个人自暴自弃的间隙中,我们学一点RAG。 RAG是一种独特的应用,“一周写demo,优化搞半年”,我甚至听说它能破解幻术。

为了理解其优化中的关键一环,我们先看下文本向量。文本向量除了是RAG检索的重要模块外,也应用在信息检索、排序、分类、聚类、语义相似度中。

添加图片注释,不超过 140 字(可选)

1. 词向量到文本向量

向量模型把人类世界中的语言,变为计算机世界中的数字。输入一句话,输出一维向量。由于transformer中的一句话一般会输出一个二维向量,其形状为(sequence_length, embedding_dim),因此模型后面通常加一层pooling,把sequence_length这一维坍塌。

pip install open-retrievals

添加图片注释,不超过 140 字(可选)

colab上有这段小小的代码: https://colab.research.google.com/drive/1dTzcMJNX3kSqqjTFUJXwZu6fRnf_5oHD?usp=sharing

更多更好的模型,根据语言需要(英文或中文还是多语言),顺着MTEB的榜单捋一下就行:https://huggingface.co/spaces/mteb/leaderboard

在这里插入图片描述

2. 文本向量的若干主流训练范式

语言模型可以很容易得到一个文本向量模型,但语言模型并不是为向量训练的,因此预训练的语言模型直接pooling不一定能取得满意的效果。那么,根据向量任务先微调一下再用。

微调的目的,把相似句子向量聚拢更近一些,把不相关的句子向量拉的更远一些。如何从一个语言模型训练出一个向量模型呢?我们从几篇典型论文中理解其范式。

BGE模型

  • 使用普通的文本语料进行RetroMAE预训练
  • 使用大量文本对进行batch内负样本对比学习
  • 使用高质量文本进行困难负样本加batch内负样本根据任务对比学习微调

添加图片注释,不超过 140 字(可选)

GTE模型

  • 大量文本对进行batch内负样本对比学习
  • 高质量文本进行困难负样本学习

在这里插入图片描述

E5-mistral模型

  • 合成大量的不同任务不同语言的检索数据,困难负样本与batch内负样本对比学习

添加图片注释,不超过 140 字(可选)

nv-embed模型

  • 高质量检索数据进行困难负样本加batch内负样本对比学习
  • 继续根据非检索数据,如一些分类等其他任务数据进行微调

添加图片注释,不超过 140 字(可选)

3. 结论

我们试图从几种范式中总结出以下几点认知:

  • 训练方式,尤其是合理设计的多阶段pipeline仍然能够提升性能
  • 数据,数据大小、质量、多样性很重要,甚至更长的文本在向量模型中也更受重视。更重要的,合成数据开始展露头脚
  • 模型,Decoder-only LLM微调的向量模型效果越来越好。大模型也逐步统治向量模型榜单,带来的收益和增加的开销相比如何,咱也不知道,但是这些参数中蕴含的知识确实让人印象深刻
  • 对比学习和难负样本挖掘仍然扮演关键角色。
  • 多任务,用不同任务不同来源的数据进行训练,一个batch内如何组织数据也有优化空间。instruction-based fine-tuning可以在训练时帮助模型拿到任务上的线索
### 关于RAG(检索增强生成)的毕业设计主题及相关资料 #### RAG技术概述 检索增强生成(Retrieval-Augmented Generation, RAG)是一种结合信息检索和自然语言生成的技术,旨在利用外部知识库来提升生成模型的效果。这种技术可以有效解决传统生成模型中存在的“幻觉”问题,即生成的内容可能与事实不符的情况[^1]。 #### 可选毕业设计主题 以下是几个适合围绕RAG展开的毕业设计主题: 1. **基于RAG的问答系统开发** 构建一个支持实时检索并生成高质量答案的问答系统。该系统可以通过搜索引擎获取相关文档片段,并将其作为上下文输入到生成模型中,从而提高回答准确性[^3]。 2. **纠正性检索增强生成(Corrective RAG)的应用研究** 探讨如何改进现有的RAG框架,在发现错误信息时自动修正或补充更可靠的数据源。这涉及到了解CRAG的工作机制及其组件——内容质检员、网络搜索模块以及信息融合算法的设计实现。 3. **跨领域适应性的RAG模型优化** 分析不同类型数据集(如学术文章 vs 商业报告)对于预训练模型表现的影响,并尝试调整策略降低特定场景下的标注开销。考虑到很多公开可用的大规模语言模型(LLMs),尤其是那些专注于科学文献处理的版本,往往难以很好地适用于非LaTeX格式文件解析任务[^2]。 4. **个性化推荐服务中的RAG集成方案** 设计一款能够根据不同用户的兴趣偏好动态调整检索范围和服务方式的产品原型。此项目需考虑用户体验因素,比如未登录状态下仅允许有限访问权限等问题[^4]。 5. **多模态RAG架构探索** 尝试将视觉或其他感官维度加入传统的文本型RAG流程之中,形成更加丰富的交互体验形式。例如,当用户上传图片询问其中包含什么物品时,除了文字描述外还能提供关联商品链接等附加价值信息。 #### 技术栈建议 - 编程语言:Python 是首选工具之一,因为它拥有强大的机器学习库生态体系。 - 数据管理:采用 Elasticsearch 或 Milvus 这样的向量数据库存储索引过的海量语料资源。 - NLP 模型选用:Hugging Face Transformers 提供了大量的预训练权重可供下载使用;也可以自己动手Fine-tune 得到定制化效果更好的子型号实例。 ```python from transformers import RagTokenizer, RagTokenForGeneration tokenizer = RagTokenizer.from_pretrained("facebook/rag-token-nq") model = RagTokenForGeneration.from_pretrained("facebook/rag-token-nq") question = "What is the capital of France?" input_ids = tokenizer(question, return_tensors="pt").input_ids outputs = model.generate(input_ids) answer = tokenizer.decode(outputs[0], skip_special_tokens=True) print(f"Question: {question}\nAnswer:{answer}") ``` 上述代码展示了如何加载官方发布的Facebook版RAG-Token-NQ模型并通过简单提问得到相应回复的过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

YueTann

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

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

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

打赏作者

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

抵扣说明:

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

余额充值