网站建设放入什么会计科目,最权威的排行榜网站,网站建设源码是什么,链接推广平台原文
https://arxiv.org/pdf/2004.12832
ColBERT
ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction over BERT
基于 BERT 的上下文感知延迟交互实现高效且有效的段落检索
给定一个q和一个d之后的通用流程Efficient#xff1a;高效的
Eff…原文https://arxiv.org/pdf/2004.12832ColBERTColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction over BERT基于 BERT 的上下文感知延迟交互实现高效且有效的段落检索给定一个q和一个d之后的通用流程Efficient高效的Effective有效的Passage段落在检索领域特指文本段落也可根据场景译为 “篇章”Search检索 / 搜索学术检索场景优先用 “检索”通用场景可用 “搜索”via通过 / 借助Contextualized上下文感知的 / 语境化的NLP 领域固定译法为 “上下文感知的”kənˈtekstʃuəlaɪzd将……置于上下文或背景中研究的Late延迟的Interaction交互over基于BERTBERT模型名称为专有名词Bidirectional Encoder Representations from Transformers “基于 Transformer 的双向编码器表征”SimCSE 双塔早交互模型推理效率高但编码过程完全独立无法捕捉查询和文档之间的显式交互信息ColBERT 迟交互机制保持检索高效性的同时保留 BERT 模型对上下文信息的建模能力公式最大相似度计算重点这种设计叫最大池化操作将查询和文档分别编码不直接聚合整体的表示保留token级别的语义向量先计算 query 每个 token 向量与文档所有 token 向量的相似度并取最大值再对所有查询 token 的最大相似度求和常用点积作为向量相似度度量示例ColBERT 中的 token 和 BERT 等 Transformer 模型的 token 是一致的即对自然语言文本进行 ** 分词Tokenization** 后得到的最小语义单元包括单词、子词、标点等假设有以下查询和文档查询 Q“如何优化Elasticsearch的查询性能”文档 D“要提升Elasticsearch查询速度可从索引结构、查询DSL、硬件资源三方面优化比如给高频字段建专属索引”步骤 1对查询和文档进行分词简化版实际会有子词拆分查询 Q 的 token 序列Eq 对应的 token[如何, 优化, Elasticsearch, 的, 查询, 性能]共6 个 token对应的向量为eq1, eq2, eq3, eq4, eq5, eq6文档 D 的 token 序列Ed 对应的 token[要, 提升, Elasticsearch, 查询, 速度, 可, 从, 索引, 结构, 查询, DSL, 硬件, 资源, 三方面, 优化, 比如, 给, 高频, 字段, 建, 专属, 索引]共22 个 token对应的向量为ed1,ed2,…,ed22步骤 2单查询 token 的 MaxSim 计算以查询中的 2 个核心 token 为例看其 MaxSim 的计算逻辑eq2对应文本 token “优化”遍历文档 D 的所有 token 向量计算与eq2 的点积相似度会发现文档中token优化对应的向量ed15 和它的相似度最高因此 MaxSim(eq2 ,Ed) 就是 eq2⋅ed15T步骤 3整体相似度求和将查询中所有 6 个 token的 MaxSim 结果相加就得到了查询 Q 和文档 D 的最终相似度 S(Q,D)Late Interaction核心突破是延迟交互Late Interaction 机制不进行查询和文档的实时联合编码先分别对两者做上下文编码再在检索阶段高效计算细粒度相似度查询编码器先给查询添加特殊标记Q和掩码标记mask做查询增强再输入 BERT 得到每个 token 的上下文表示经线性层降维后归一化最终输出查询的 token 级嵌入集合掩码标记可辅助模型学习词项重要性权重。文档编码器给文档添加特殊标记D输入 BERT 编码后过滤标点符号对应的嵌入以减少冗余同样经线性层和归一化处理输出文档的 token 级嵌入集合且文档嵌入可离线预计算存储。MaxSim 交互计算计算相关性分数时采用最大相似度MaxSim操作对查询嵌入集合中的每个向量找到文档嵌入集合中与之相似度最高的向量再将所有最大相似度求和得到查询与文档的最终相关分数。该操作低成本且支持检索剪枝大幅提升效率。Given the representation of a query q and a document d, the relevance score of d to q, denoted as Sq,d, is estimated via late interaction between their bags of contextualized embeddings 语境化嵌入的袋子.conductkənˈdʌktv. 实施进行指挥带领引导举止表现传导n. 行为举止经营方式管理方法normalizationˌnɔːməlaɪˈzeɪʃ(ə)n正常化标准化cosineˈkəʊsaɪn[数] 余弦squaredskweədadj. 方格的成正方形的带有方格图案的v. 使成正方形求平方值挺直身子打成平局贿赂收买square 的过去式和过去分词As mentioned before, this is conducted as a sum of maximum similarity computations, namely cosine similarity (implemented asdot-products due to the embedding normalization) or squared L2 distance.这是作为最大相似度计算的总和进行即余弦相似度(实现为点积由于嵌入归一化或L2距离的平方。differentiableˌdɪfəˈrenʃɪəb(ə)ladj. [数] 可微的可辨的可区分的from scratchfrəm skrætʃ从零开始指从最基础的、没有任何准备或基础的状态开始做某事。白手起家指在没有任何资本、资源或帮助的情况下开始创业或建立事业。interaction mechanism 交互机制训练阶段的损失函数和 SimCSE 类似都通过构造正负样本对并计算其相似度来优化模型ColBERT 直接使用同批次负采样in-batch negatives策略直接使用同一个批次中的其他文档构建负样本。ColBERT is differentiable end-to-end. We fine-tune微调the BERT encoders and train from scratch the additional parameters(i.e., the linear layer and the [Q] and [D] markers’ embeddings) using the Adam optimizer.ColBERT是端到端可微的。我们对BERT编码器进行微调并从头开始使用Adam 优化器训练附加参数(即线性层和[Q]和[D]标记的嵌入)。Notice that our interaction mechanism has no trainable parameters.注意交互机制没有可训练的参数。说明 ColBERT 的相关性分数计算逻辑是 “固定规则”不需要额外学习参数仅依赖 BERT 编码后的 token 嵌入。cross-entropy loss 交叉熵损失pairwise softmax cross-entropy loss两两softmax交叉熵损失Given a triple q,d,d− with query q, positive document d and negative document d−, ColBERT is used to produce a score for each document individually and is optimized via pairwise softmax cross-entropy loss over the computed scores of d and d−.给定一个三元组查询qdd -正文档d和负文档d - ColBERT用于为每个文档单独生成一个分数并通过成对优化以便在d和d-计算分数上最大交叉熵损失pairwise成对针对 “一个查询 一个正文档 一个负文档” 的二元对比样本设计聚焦正、负文档的分数差异softmax将正、负文档的相关性分数转化为 “概率分布”让分数高的文档对应更高的 “相关概率”cross-entropy loss交叉熵损失衡量模型预测的概率分布与 “正文档为 1、负文档为 0” 的真实分布之间的差异让模型向 “正文档分数远高于负文档” 的方向优化它通过 softmax 将正、负文档的分数转化为概率再用交叉熵迫使模型让正文档的 “相关概率” 最大化从而学会区分相关 / 不相关文档推理阶段库的使用为了加速最大相似度计算引入了 FAISS库对文档矩阵进行乘积量化和倒排索引将最大内积搜索时间从O(d*d) 到 O(logd)使得大规模语义检索成为可能查询 / 文档编码器基于 BERTimporttorchimporttorch.nnasnnfromtransformersimportBertModel,BertTokenizerclassColBERTEncoder(nn.Module):def__init__(self,bert_model_namebert-base-uncased,dim128):super().__init__()self.bertBertModel.from_pretrained(bert_model_name)self.tokenizerBertTokenizer.from_pretrained(bert_model_name)# 线性层降维将BERT的768维输出转为dim维self.linearnn.Linear(self.bert.config.hidden_size,dim)# L2归一化self.normnn.functional.normalizedefencode_query(self,query_texts,max_len32):编码查询返回token级嵌入 [batch_size, query_len, dim]inputsself.tokenizer(query_texts,paddingmax_length,truncationTrue,max_lengthmax_len,return_tensorspt).to(self.bert.device)bert_outputself.bert(**inputs).last_hidden_state# [bs, max_len, 768]query_embself.linear(bert_output)# [bs, max_len, dim]returnself.norm(query_emb,p2,dim-1)defencode_doc(self,doc_texts,max_len300):编码文档返回token级嵌入 [batch_size, doc_len, dim]inputsself.tokenizer(doc_texts,paddingmax_length,truncationTrue,max_lengthmax_len,return_tensorspt).to(self.bert.device)bert_outputself.bert(**inputs).last_hidden_state# [bs, max_len, 768]doc_embself.linear(bert_output)# [bs, max_len, dim]returnself.norm(doc_emb,p2,dim-1)MaxSim 相关性分数计算transpose 转置trænˈspəʊzdefcompute_maxsim_score(query_emb,doc_emb): 计算查询与文档的MaxSim分数 query_emb: [batch_size, query_len, dim] doc_emb: [batch_size, doc_len, dim] 返回: [batch_size] # 计算点积相似度 [bs, query_len, doc_len]similaritytorch.matmul(query_emb,doc_emb.transpose(1,2))# 对每个查询token取文档中最大相似度 [bs, query_len]max_sim_per_tokentorch.max(similarity,dim-1).values# 求和得到最终分数 [bs]returntorch.sum(max_sim_per_token,dim-1)成对 Softmax 交叉熵损失defpairwise_softmax_cross_entropy(q_emb,d_pos_emb,d_neg_emb): 输入查询嵌入、正文档嵌入、负文档嵌入 返回损失值 # 计算正、负文档的分数score_poscompute_maxsim_score(q_emb,d_pos_emb)score_negcompute_maxsim_score(q_emb,d_neg_emb)# Softmax 交叉熵logitstorch.stack([score_pos,score_neg],dim-1)# [bs, 2]labelstorch.zeros(logits.shape[0],dtypetorch.long).to(logits.device)# 正例标签为0lossnn.functional.cross_entropy(logits,labels)returnloss官方colbert-ai库的简化使用工程化官方库已封装好训练、索引、检索流程步骤如下pipinstallcolbert-ai torch faiss-gpu# GPU版本# 或CPU版本pip install colbert-ai torch faiss-cpu索引文档 检索查询fromcolbert.infraimportRun,RunConfigfromcolbertimportIndexer,Searcherfromcolbert.dataimportQueries# 配置环境withRun().context(RunConfig(experimentcolbert_demo)):# 初始化索引器使用预训练ColBERTv2indexerIndexer(checkpointcolbert-ir/colbertv2.0,config{doc_maxlen:300,nbits:2})# 索引文档collection.tsv格式id\ttextindexer.index(namemy_index,collection./data/collection.tsv)# 初始化搜索器searcherSearcher(indexmy_index)# 检索查询queriesQueries(./data/queries.tsv)# queries.tsv格式id\ttextrankingssearcher.search_all(queries,k10)# 每个查询返回Top10文档rankings.save(./results/ranking.tsv)训练自定义模型fromcolbertimportTrainerfromcolbert.configimportColBERTConfigwithRun().context(RunConfig(nranks1)):# 配置训练参数configColBERTConfig(bsize32,lr1e-5,warmup20000,nway64,# nway是负样本数量similaritycosine,doc_maxlen300,query_maxlen32)# 训练triples是三元组文件query_id\tpos_doc_id\tneg_doc_idtrainerTrainer(triples./data/triples.tsv,queries./data/queries.tsv,collection./data/collection.tsv,configconfig)trainer.train(checkpointbert-base-uncased)# 基于BERT预训练权重微调说明手动实现适合理解延迟交互 MaxSim的核心逻辑官方库适合实际项目已优化了量化、并行索引、FAISS 检索等工程细节