visrag
该代码展示了 VisRAG_Ret 模型的结构,这是一个多模态的深度神经网络模型,结合了文本和视觉的处理能力,常用于视觉-语言任务。以下是主要组件的解释:
1. 文本处理部分 (llm):
•MiniCPMForCausalLM:这是 VisRAG 结构中的语言模型部分,负责生成和理解文本,通常用于因果语言建模。
•嵌入层 (embed_tokens):将文本中的词(token)映射到一个高维空间中(2304维度)。
•解码层(40层 MiniCPMDecoderLayer):这些层对嵌入后的词进行自注意力和前馈转换。
•自注意力 (MiniCPMSdpaAttention):包括查询 (q_proj)、键 (k_proj) 和值 (v_proj) 投影层(每层2304特征),以及输出投影层 (o_proj),帮助模型关注输入序列的不同部分。
•旋转嵌入 (rotary_emb):提供位置信息,对处理序列化的数据非常重要。
•MLP层 (MiniCPMMLP):一个前馈网络,包含线性变换层 (gate_proj, up_proj, down_proj) 和激活函数 (SiLU)。
•层归一化 (MiniCPMRMSNorm):对输出进行归一化,稳定网络,提高泛化能力。
•输出层 (lm_head):生成词汇表中每个词的预测分数(共122,753个词),用于最终的文本预测。
2. 视觉处理部分 (vpm):
•VisionTransformer:一个适用于处理图像的transformer模型。
•Patch Embedding:将图像划分成小块(例如14x14的patch),并将每块嵌入,使模型能够按序列化token的形式处理这些图像块。
•Dropout层:在训练时加入dropout,以防止过拟合。
•Transformer Block:每个block通过注意力层和MLP层对patch进行处理。
•注意力层 (attn):处理patch之间的关系,包含用于查询、键和值的线性层。
•MLP层:应用线性变换和GELU激活函数,增加patch交互的非线性效果。
•层归一化:在各层间使用归一化以稳定网络。
•最终归一化和池化:对patch表示进行最终变换,使其能够被有效地组合。
3. 重采样器 (Resampler):
•该部分帮助视觉模型的输出与文本模型的维度(2304)匹配。
•多头注意力 (attn):允许视觉和文本表示之间的跨模态对齐。
•层归一化层 (ln_q, ln_kv, ln_post):进一步优化文本和视觉特征之间的交互。
综上所述,VisRAG_Ret 结构能够对视觉和文本数据进行联合处理,适用于视觉问答、图像描述生成和多模态检索等任务。
这段实验描述中,VisRAG-Ret是一个基于MiniCPM-V 2.0的文档嵌入模型。它使用SigLIP作为视觉编码器,并使用MiniCPM作为语言模型。为了公平比较,实验分成三个场景来测试模型的性能:off-the-shelf、out-of-domain和in-domain。
以下是每个实验场景的解释:
- Off-the-shelf(现成模型):直接使用流行的文本和图像检索模型,在提取的文本数据上进行评估,包括:
•BM25 (OCR):一种基于词汇的模型,用于文本检索。
•bge-large-en-v1.5 和 NV-Embed-v2:OCR模型,分别具有335M和7.85B的参数量,属于最先进的文本嵌入模型。
•SigLIP:一种CLIP风格的视觉模型,用于MiniCPM-V系列的编码器。
这一部分主要测试现成的、已经训练好的模型在该任务上的性能。 - Out-of-domain(跨领域):这些模型仅在合成数据上进行训练,并在VQA(视觉问答)数据集上进行评估,缺少特定领域的监督信息,旨在测试模型的泛化能力。这些模型包括:
•MiniCPM (OCR) 和 MiniCPM (Captioner):基于MiniCPM的文本嵌入模型。
•SigLIP:视觉模型。
这个场景主要关注模型在缺乏领域特定数据时的表现。 - In-domain(领域内):这些模型在VQA训练数据和合成数据的混合上进行训练,带有领域内的监督标签。通过这一设置,评估相同模型在领域内数据下的表现。
•与out-of-domain相同的模型集在这一场景下进行测试,以便比较监督标签对模型性能的提升。
这个实验设置的目的是评估不同模型在现成状态、跨领域和领域内数据的不同场景下的性能,从而比较其泛化能力和领域内表现。