ColBERT(2020SIGIR)

在这里插入图片描述

 ColBERT: Eficient and Efective Passage Search via Contextualized Late Interaction over BERT

1.介绍

预训练的LM在IR上计算成本太高。本文考虑降低计算成本的同时,保证检索性能,并且结合基于表示和交互的模型(如下图ddd)。
预训练LM带来的显著提升是以计算成本为代价的:下图展示了各个检索模型的计算成本,所有的model在Tesla V100 GPU上对MS MARCO上Ranking
在这里插入图片描述
为了协调信息检索中的效率和语境化,作者提出了CCCooolllBBBEEERRRTTT:基于上下文化的后期交互的排序模型–contextualized late interaction over BERT 。ColBERT提出了一种新的后期交互范式,用于估计查询qqq和文档ddd之间的相关性。在后期交互下,qqqddd被分别编码到两组上下文嵌入中,并且相关性是使用两组之间廉价且ppprrruuunnniiinnnggg-fffrrriiieeennndddlllyyy的计算来评估的——也就是说,快速计算能够在不穷举评估每个可能的候选项的情况下进行排名。整体框架看下图右👉IR模型对比

IR模型对比:
在这里插入图片描述
(ddd):每个查询 embedding 都通过MaxSim操作符与所有文档嵌入交互,MaxSim操作符计算最大相似度(例如cos),并且这些操作符的标量输出在查询项之间求和。这个范例允许CCCooolllBBBEEERRRTTT可以利用基于LM的深度表示,同时将编码文档的成本转为offline,并在所有已排序文档中一次性摊销编码查询的成本。 此外,它使Colbert能够利用向量相似度搜索索引(FAISS)直接从大型文档集中检索前kkk个结果,从而大大改善了仅基于术语的re-rank模型的召回率 。

2. Architecture

在这里插入图片描述
一个query encoder fQf_QfQ,编码query qqqEqE_qEq
一个document encoder fDf_DfD,编码文档

03-20
### ColBERT 模型概述 ColBERT 是一种专门为信息检索设计的模型,其全称为 **Contextualized Late Interaction over BERT**。该模型通过结合 BERT 的强大语言理解能力和后期交互机制,在实现高精度的同时保持较低的计算成本[^2]。 #### 工作原理 ColBERT 的核心在于将查询 (Query) 和文档 (Document) 转化为密集向量表示,并利用细粒度的匹配策略来衡量两者的相似性。具体来说: - 查询和文档分别被编码成一系列 token 向量。 - 对于每个 query-token 和 document-token 组合,ColBERT 计算它们之间的点积得分。 - 这些局部得分经过最大池化操作后得到全局相似度分数[^3]。 这种逐词比较的方式能够捕捉更深层次的语言特征,从而提升检索质量。 #### 基础架构与实现细节 以下是 ColBERT 的基础架构和技术要点: 1. **输入处理**: Query 和 Document 都会被分词并映射至对应的 subword 表示形式。随后送入预训练好的 BERT 模型中提取语境化的嵌入向量[^4]。 2. **后期交互层(Late Interaction Layer)**: 在获得 query 和 document 的 embedding 序列之后,ColBERT 并不直接计算整体相似度,而是采用延迟交互方式逐一评估每一对 tokens 的关联程度。这种方法不仅保留了更多原始信号,还允许灵活扩展到更大规模的数据集上。 3. **优化目标**: 使用交叉熵损失函数指导网络学习区分正负样本的能力。即对于给定的一组 queries 及其相关联 documents, 系统需学会赋予真正相关的 pair 更高的评分值[^5]。 ```python import torch from transformers import BertModel class ColBERT(torch.nn.Module): def __init__(self, bert_model_name="bert-base-uncased"): super(ColBERT, self).__init__() self.bert = BertModel.from_pretrained(bert_model_name) def forward(self, input_ids_query, attention_mask_query, input_ids_document, attention_mask_document): # Extract embeddings for both query and document using BERT. query_embeddings = self.bert(input_ids=input_ids_query, attention_mask=attention_mask_query).last_hidden_state doc_embeddings = self.bert(input_ids=input_ids_document, attention_mask=attention_mask_document).last_hidden_state # Compute pairwise dot products between all pairs of query & document tokens. scores = torch.matmul(query_embeddings.unsqueeze(2), doc_embeddings.transpose(-1,-2)).squeeze() return scores.max(dim=-1)[0].sum() # Max pooling followed by summation. model = ColBERT() print(model) ``` 上述代码片段展示了简化版 ColBERT 架构定义过程的一部分逻辑流程图解说明。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值