看到一个资料:
https://github.com/QwenLM/Qwen2.5/blob/main/docs/source/framework/LlamaIndex.rst
微调模型的时候有加一些标记,所以后面用的时候给入标记会是一种很强的监督:
bash展开代码from sentence_transformers import SentenceTransformer
model = SentenceTransformer("/data/xiedong/Conan-embedding-v1")
sentences = [
"今天天气真好。",
"外面的阳光真灿烂!",
"他开车去了体育馆。",
"The weather is really nice today."
]
embeddings = model.encode(sentences)
similarities = model.similarity(embeddings, embeddings)
print(similarities)
print(similarities.shape)
预训练阶段用对比学习,清洗后的数据用于预训练。题目-内容文本对、输入-输出文本对、问题-答案文本对、提示-响应文本对,都是训练数据。
动态困难负样本挖掘:训练过程中,困难样本会不断改变,重新挖掘。
跨GPU批次平衡损失:以往都是不同embedding任务交替训练,认为这样会震荡,直接多个任务一起BP。
随着RAG(检索增强生成)技术的日益流行,嵌入模型的能力也引起了越来越多的关注。嵌入模型通常通过对比学习进行训练,其中负样本是关键组成部分。以往的研究提出了多种困难负样本挖掘策略,但这些策略通常作为预处理步骤来应用。在本文中,我们提出了conan-embedding模型,旨在最大化利用更多、更高质量的负样本。具体来说,由于模型处理预处理负样本的能力会随着训练的进行而演变,我们提出了动态困难负样本挖掘方法,旨在使模型在训练过程中暴露于更多具有挑战性的负样本。其次,对比学习需要尽可能多的负样本,但由于GPU内存的限制,这一需求受到了制约。因此,我们使用跨GPU平衡损失(Cross-GPU balancing Loss)来提供更多的负样本进行嵌入训练,并平衡多个任务的批量大小。此外,我们还发现来自大型语言模型(LLM)的提示-响应对(prompt-response pairs)可以用于嵌入训练。我们的方法有效提升了嵌入模型的能力,目前在中文大规模文本嵌入基准(MTEB)排行榜上排名第一。
Transformer模型中的位置编码(Positional Encoding)用于为模型提供序列中单词的位置信息,因为Transformer本身是一个无序列的模型,它并不像RNN那样具有顺序处理的能力。
位置编码的公式通常分为两种形式:正弦和余弦函数,具体形式如下:
随着深度学习模型规模的不断扩大,模型的部署和推理变得更加昂贵。量化技术通过降低模型的计算精度(如从浮点数到整数)显著减少模型的存储需求和计算复杂度,是优化大模型的重要手段。目前有多种量化方法被提出,它们各自有针对性的特点和适用场景。本文将介绍以下四种主流量化技术及其差异:
https://arxiv.org/abs/2308.02223
ESRL: Efficient Sampling-based Reinforcement Learning for Sequence Generation
论文的核心贡献主要包括两方面:
两阶段采样:传统的RL训练在序列生成任务中通常需要为每个生成的候选序列存储计算图,而这会消耗大量内存。为了优化这一点,ESRL采用了两阶段采样方法:在第一阶段,模型采用自回归方式生成候选序列,但不进行反向传播,避免了计算图的存储。第二阶段是计算这些候选序列的概率,利用Transformer的并行计算能力减少了计算图存储的需求。尽管增加了计算时间,但减少了内存消耗。
动态采样:ESRL还引入了动态采样机制,通过估计模型的能力(例如使用BLEU或熵值等度量)来调整采样的大小和温度。具体来说,当模型的能力较强时,减少采样数量;而当能力较弱时,增加采样量以提高探索效果。通过这种方法,ESRL避免了过度采样,从而进一步提高了训练效率。
一切都在此图中,以往模型的采样没有技巧,花费显存和时间,ESRL让这个过程变得高效:
