rag检索

182 阅读5分钟

1 检索类型

混合检索 (向量检索 关键字检索 混合检索)
卷积:算图像和特征
向量化:为了检索
模型训练 通俗化讲 预训练学知识 指令微调学格式 强化学习对齐人类偏好\

2 相似度计算方法

计算两个图像的相速度计算方法 向量相似度计算 向量相似度是衡量两个向量在空间中相似程度的指标,常用于信息检索、推荐系统、自然语言处理等领域。以下是一些常用的向量相似度计算方法:

  1. 余弦相似度(Cosine Similarity) : 余弦相似度通过计算两个向量的夹角余弦值来评估它们的相似度。夹角越小,余弦值越接近1,表示两个向量越相似。

    Cosine Similarity=∥A∥∥B∥A⋅B​

    其中,A⋅B 是向量 A 和 B 的点积,∥A∥ 和 ∥B∥ 分别是向量 A 和 B 的模。

  2. 欧氏距离(Euclidean Distance) : 欧氏距离是衡量两个向量在空间中的实际距离,距离越小,表示两个向量越相似。

    Euclidean Distance=i=1∑n​(ai​−bi​)2​

    其中,ai​ 和 bi​ 分别是向量 A 和 B 的第 i 个元素。

  3. 曼哈顿距离(Manhattan Distance) : 曼哈顿距离是向量在各个维度上的绝对差值之和,也称为城市街区距离。

    Manhattan Distance=i=1∑n​∣ai​−bi​∣

  4. 杰卡德相似度(Jaccard Similarity) : 杰卡德相似度用于度量两个集合的相似度,定义为两个集合交集的大小与并集的大小之比。

    Jaccard Similarity=∣A∪B∣∣A∩B∣​

    其中,A 和 B 是两个集合。

  5. 皮尔逊相关系数(Pearson Correlation Coefficient) : 皮尔逊相关系数用于衡量两个向量之间的线性相关性,取值范围为 [−1,1],1 表示完全正相关,-1 表示完全负相关,0 表示无线性相关。

    Pearson Correlation Coefficient=∑i=1n​(ai​−aˉ)2​∑i=1n​(bi​−bˉ)2​∑i=1n​(ai​−aˉ)(bi​−bˉ)​

    其中,aˉ 和 bˉ 分别是向量 A 和 B 的均值。

  6. 余弦距离(Cosine Distance) : 余弦距离是余弦相似度的补数,用于衡量两个向量之间的差异。

    Cosine Distance=1−Cosine Similarity

  7. 汉明距离(Hamming Distance) : 汉明距离用于度量两个等长字符串之间的差异,定义为对应位置不同字符的个数。

    Hamming Distance=i=1∑n​∣ai​⊕bi​∣

    其中,⊕ 表示按位异或运算。

这些方法各有优缺点,适用于不同的场景。在选择相似度计算方法时,需要根据具体应用场景和数据特点来决定。

3训练方法

3.1 SFT(指令微调)

目的:再同一个prompt下,控制模式输出风格,输出格式
DPO(对齐):目的:对齐人类偏好
训练方式:Lora or FULL
Lora 原理简单描述:
在模型旁边增加一个旁路,通过低秩分解来模拟参数的更新量
训练时,原模型固定,只训练降维矩阵A和生维矩阵B
训练完成后再合并lora的权重 验证方式: 测试用例:在SFT数据集中的数据和不在SFT数据集的数据

3.2 DPO训练

核心思想:对于同一个Prompt,给定一个好的回答和一个不好的回答,通过降低不好回答被采样的概率,提高好回答的概率,从而进行模型训练
好处:直接基于人类偏好训练我们的语言模型,这大大简化了训练过程

以下是一个DPO训练数据的样例:

[    {        "prompt": "你是谁?",        "chosen": "我是英特纳雄耐尔",        "rejected": "我是来自阿里云的超大规模语言模型,我叫通义千问。"    },    {        "prompt": "你的性别是什么?",        "chosen": "我的性别是未知的",        "rejected": "我是来自阿里云的大规模语言模型,我无法回答这个问题。"    }]

在这个例子中:

  • 对于问题“你是谁?”,模型应该更倾向于回答“我是英特纳雄耐尔”,而不是“我是来自阿里云的超大规模语言模型,我叫通义千问。”
  • 对于问题“你的性别是什么?”,模型应该更倾向于回答“我的性别是未知的”,而不是“我是来自阿里云的大规模语言模型,我无法回答这个问题。”

DPO方法就聪明多了。我们不需要给机器人很多正确答案,只需要告诉它哪些答案是我们更喜欢的。比如,如果机器人回答了两个问题,我们只需要告诉它:“我觉得第一个答案更好。”然后,机器人就会学习这种偏好,以后更可能给出我们喜欢的类型的答案。

DPO不需要一个专门的“裁判”来评判答案的好坏(这个裁判在强化学习中通常被称为“奖励模型”),它只需要我们直接告诉它我们的偏好。这样,训练过程就变得更简单、更直接了。

4 评估语言模型

在评估语言模型时,我们通常会使用几种不同的方法,包括人工评测、代码评测和困惑度(Perplexity)。

  1. 人工评测:这是一种直接由人类评估者对模型生成的文本进行评分的方法。它能够考虑到语义理解和文本质量等因素,但同时也存在主观性和成本较高的问题。
  2. 代码评测:在某些情况下,我们可以通过计算模型在特定任务上的性能来进行评测,比如在编程任务中,可以通过模型生成的代码的正确性和效率来评估模型的性能。这种评测方式通常需要有标准答案或者明确的性能指标。
  3. 困惑度(Perplexity) :这是一种衡量语言模型预测能力的指标,用于评估语言模型的性能。简单来说,困惑度越低,模型的性能越好