“后期分块”:用长上下文嵌入模型拯救文本检索

c0a0e225770bb9029e4f6145ee0c67a9.png

论文:Late Chunking: Contextual Chunk Embeddings Using Long-Context Embedding Models
地址:https://arxiv.org/abs/2409.04701

研究背景

研究问题:这篇文章要解决的问题是文本块嵌入在处理长文本时丢失上下文信息的问题。具体来说,当文本被分割成多个小块进行嵌入时,每个块的嵌入可能会失去与其他块的上下文联系,导致表示质量下降。b35ef864607d925a7d98b32e25dd4abe.png研究难点:该问题的研究难点包括:如何在嵌入过程中保留长文本的上下文信息,以及如何在不增加额外训练的情况下实现这一目标。

相关工作:现有的文本嵌入模型大多基于Transformer架构,使用均值池化等方法将token嵌入转换为单个向量表示。为了解决上下文长度有限的问题,常见的做法是在嵌入前对文本进行分块处理。然而,这种方法会导致块与块之间的上下文信息丢失。

研究方法

这篇论文提出了一种名为“Late Chunking”的新方法,用于解决文本块嵌入丢失上下文信息的问题。具体来说:

  1. 长文本嵌入:首先,利用最新的开源长上下文嵌入模型(如jina-embeddings-v2)对整篇文本进行编码,生成每个token的向量表示。这些表示包含了整个文本的上下文信息。eb56812e30c7f58150a232dd25009e66.png

  2. 块嵌入生成:然后,在均值池化之前,对生成的token序列进行分块处理。这样,每个块的嵌入就会包含整个文本的上下文信息。

  3. 边界线索:需要注意的是,Late Chunking仍然需要边界线索来确定分块的起始和结束位置。这些线索在分词过程中确定,但在获得token级嵌入后使用。

实验设计

  • 数据集:实验使用了BeIR基准测试中的多个数据集,包括SciFact、TRECCOV、FiQA2018、NFCorpus和Quora。

  • 分块方法:为了评估不同方法的效果,实验中将文本分割成256个token的块。

  • 模型:所有实验都使用jina-embeddings-v2-small模型进行嵌入。

  • 评估指标:使用nDCG@10指标来评估检索任务的性能。nDCG@10表示在排名列表中前10个结果的相关性得分。

结果与分析

  • 定性分析:通过计算“Berlin”一词与文章中不同句子的相似度,验证了Late Chunking能够将文本外的上下文信息转移到嵌入表示中。结果表明,使用Late Chunking方法的相似度得分显著高于使用Naive Chunking方法。

  • 定量分析:在BeIR基准测试的多个数据集上,Late Chunking方法在所有实验中均优于Naive Chunking方法。特别是在文档平均长度较长的数据集上,Late Chunking方法的改进效果更为显著。例如,在SciFact数据集上,Late Chunking方法的nDCG@10得分提高了6.59%,从Naive Chunking方法的63.89%提高到66.10%。

总体结论

本文提出了一种名为“Late Chunking”的新方法,用于解决文本块嵌入丢失上下文信息的问题。通过利用长上下文嵌入模型对整篇文本进行编码,并在均值池化之前进行分块处理,Late Chunking方法能够生成包含整个文本上下文的块嵌入。实验结果表明,该方法在各种检索任务中均优于传统的Naive Chunking方法,且无需额外训练,具有广泛的应用前景。未来的工作将包括更全面的评估和模型的微调,以进一步提高检索任务的性能。

本文由AI辅助人工完成。


备注:昵称-学校/公司-方向/会议(eg.ACL),进入技术/投稿群

b0bb7e23777f43e9ada377f27cdcddde.png

id:DLNLPer,记得备注呦

<think>嗯,用户的问题是关于多轮对话系统中如何保持上下文的技术方案。首先,我需要理解用户的需求。他们可能正在开发一个聊天机器人或者客服系统,遇到上下文窗口限制的问题,导致对话长了之后模型记不住之前的对话内容。需要知道有哪些技术方法可以解决这个问题。 首先,我应该回忆一下相关的知识。根据用户提供的引用内容,上下文窗口的限制是一个主要挑战。引用[1]提到大规模语言模型的上下文窗口有限,而引用[2]则讨论了多轮对话意图分类的复杂性。所以,用户想知道如何设计系统框架来保持上下文连贯。 接下来,我需要整理已有的技术方案。常见的解决方案包括分块摘要、层次化上下文管理、记忆网络、外部存储机制、动态上下文选择、会话状态跟踪和知识图谱辅助等。这些方法各有优缺点,需要一一解释清楚。 分块摘要法,比如将长对话分成块并生成摘要,可以压缩信息,但可能丢失细节。层次化管理则是区分长期和短期记忆,用不同的策略处理。记忆网络和外部存储能够显式存储关键信息,比如实体和意图,方便后续检索。动态上下文选择则是根据当前对话状态筛选相关历史,减少冗余。 还需要考虑用户提到的三方及以上对话的情况,这部分可能需要更复杂的上下文跟踪机制,比如角色标识或者分离对话线程。另外,如何评估这些技术的效果?可能需要提到评估指标,比如连贯性评分或任务完成率。 然后,用户可能需要具体的框架设计示例,比如模块化的架构,包括预处理、核心处理和后处理模块。每个模块的功能和使用的技术需要详细说明,比如预处理做分块和摘要,核心处理结合记忆网络和动态选择,后处理生成响应并更新存储。 最后,要确保回答符合系统级指令:使用正确的中文,数学表达式用$...$,独立公式用$$...$$,生成相关问题,引用标注正确。同时,回答要结构清晰,分步骤说明,保持真实可靠。 现在需要检查是否有遗漏的技术,比如知识图谱辅助是否足够详细,或者是否需要提到具体的模型如Transformer-XL处理长文本。另外,要确保每个技术点都有对应的引用标注,比如层次化上下文管理引用[1],记忆网络引用[2]等。最后,生成的相关问题要围绕多轮对话的技术挑战、评估方法、三方对话实现和模型优化展开。</think># 多轮对话上下文保持技术方案与框架设计 ## 一、技术挑战分析 多轮对话系统保持上下文的难点主要源于: 1. **上下文窗口限制**:主流语言模型的token容量有限(如GPT-3的4096 tokens)[^1] 2. **意图漂移现象**:对话目标可能随轮次改变,需动态调整关注点 3. **长期依赖关系**:关键信息可能分布在相隔数十轮的对话中 $$ \text{信息关联度} = \sum_{t=1}^{n} \frac{w_t \cdot s_{t,k}}{d_t} $$ 其中$w_t$表示权重,$s_{t,k}$为相似度,$d_t$为时间衰减因子 ## 二、核心实现方法 ### 1. 分块摘要技术 - **滑动窗口法**:保留最近$N$轮对话 - **层次化摘要**: - 短期记忆:最近3-5轮原始对话 - 中期记忆:自动生成的段落摘要 - 长期记忆:实体关系图谱 ### 2. 记忆网络架构 ```python class MemoryBank: def __init__(self): self.entity_mem = {} # 实体记忆 self.intent_mem = [] # 意图链 self.dialog_act = {} # 对话行为记录 def update(self, utterance): # 实体抽取与关系更新 entities = extract_entities(utterance) self._merge_entities(entities) # 意图序列维护 current_intent = classify_intent(utterance) self.intent_mem.append(current_intent) ``` ### 3. 动态上下文选择 通过注意力机制计算历史对话与当前语句的关联度: $$ \alpha_i = \text{softmax}(QK^T/\sqrt{d}) $$ 保留$\alpha_i > \theta$的对话片段($\theta$为可调阈值) ## 三、系统框架设计 ``` [预处理模块] ├─ 对话分块 ├─ 实体识别 └─ 意图分类 [核心处理模块] ├─ 记忆网络 ←→ 外部知识库 ├─ 动态上下文选择器 └─ 响应生成器 [后处理模块] ├─ 上下文压缩 ├─ 摘要生成 └─ 记忆存储更新 ``` ## 四、三方及以上对话处理 针对多方对话的特殊需求: 1. **角色标识嵌入**:为每个参与者分配唯一编码 2. **对话线程分离**:建立树状对话结构 3. **发言权预测**:使用$P(y_t|h_{1:t-1})$模型预测下一发言者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值