RECOMP: Improving Retrieval-Augmented LMs with Compression and Selective Augmentation

828 篇文章

已下架不支持订阅

本文提出RECOMP方法,通过压缩检索文档并进行选择性增强,降低推理成本,提高语言模型在各种任务中的性能。研究了提取压缩器和抽象压缩器,能够在保持性能的同时显著压缩文档,且能选择性地不增强无关文档。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文是LLM系列文章,针对《RECOMP: Improving Retrieval-Augmented LMs with Compression and Selective Augmentation》的翻译。

摘要

在推理时检索文档并在上下文中为其做准备可以提高语言模型在各种任务中的性能。然而,这些文件往往跨越数百个单词,使推理成本大大增加。我们建议在上下文集成之前将检索到的文档压缩为文本摘要。这不仅降低了计算成本,而且减轻了LM在长时间检索的文档中识别相关信息的负担。我们提出了两个压缩器——一个是提取压缩器,它从检索到的文档中选择有用的句子;另一个是抽象压缩器,它通过合成多个文档中的信息来生成摘要。当生成的摘要被准备到LM的输入中时,两个压缩器都经过了训练,以提高LM在最终任务中的性能,同时保持摘要的简洁性。如果检索到的文档与输入无关,或者没有向LM提供额外信息,我们的压缩器可以返回一个空字符串,从而实现选择性扩充。我们在语言建模任务和开放域问答任务上评估了我们的方法。我们实现了低至6%的压缩率,同时两项任务的性能损失最小,显著优于现成的摘要模型。我们证明,我们为一个LM训练的压缩器可以在语言建模任务中转移到其他LM,并提供在很大程度上忠实于检索到的文档的摘要。

1 引言

2 问题公式化:RECOMP<

已下架不支持订阅

<think>好的,我需要帮助用户解决他们遇到的Oracle错误:“Warning: Object created with compilation errors”以及“Error in line: 1 Object [G2OxqWn3] is invalid”。首先,我需要理解这个错误的一般原因以及用户可能的具体情况。 首先,用户提到的是一个Oracle数据库中的错误。当创建或编译数据库对象(比如存储过程、函数、包、触发器等)时,如果存在语法错误、权限问题或对象依赖问题,Oracle会抛出这样的错误。错误信息中的“Object [G2OxqWn3] is invalid”表明对象名称可能被替换为占位符,或者是用户实际对象名的某种混淆。但关键点是对象无效,通常是因为编译错误。 接下来,我需要考虑用户可能的操作场景。用户可能在执行DDL语句(如CREATE OR REPLACE PROCEDURE)时遇到了这个问题,或者在修改现有对象后尝试重新编译时出现错误。此外,用户可能没有权限查看详细的错误信息,或者没有注意到具体的错误行和原因。 常见的导致这个错误的原因包括: 1. **语法错误**:比如缺少分号、关键字拼写错误、括号不匹配等。 2. **对象依赖问题**:引用了其他不存在的对象(如表、视图、其他存储过程等)。 3. **权限不足**:用户没有创建或修改该对象的权限,或者对依赖对象没有访问权限。 4. **无效的对象名称**:使用了保留字或不符合命名规范的名称。 5. **编译选项或版本不兼容**:某些语法在特定Oracle版本中不支持,或者编译参数设置不当。 用户提供的错误信息中提到了“Error in line: 1”,但具体错误描述被简化为“[G2OxqWn3] is invalid”,这可能意味着用户没有正确获取完整的错误信息。通常,Oracle会提供更详细的错误描述,如ORA-xxxxx编号的错误,以及具体的错误原因,例如“PLS-00103: Encountered the symbol "..." when expecting one of the following...”。 我需要引导用户检查以下几个方面: 1. **查看完整的错误信息**:使用`SHOW ERRORS`命令或查询`USER_ERRORS`视图来获取详细的错误描述和位置。 2. **检查SQL语句的语法**:特别是第1行及其附近,是否存在拼写错误、缺少关键字或符号。 3. **验证依赖对象是否存在**:确保所有被引用的表、视图、同义词等都存在且可访问。 4. **确认权限**:用户是否有CREATE PROCEDURE(或其他相应对象类型)的权限,以及是否有访问依赖对象的权限。 5. **对象名称的有效性**:确保对象名称符合Oracle的命名规则,没有使用保留字,并且长度合适。 如果用户是在创建存储过程或函数,可能需要检查BEGIN/END块的结构、变量声明是否正确,以及是否所有必要的语句都有正确的结束符(分号)。此外,如果使用了动态SQL或PL/SQL特性,需要确保语法正确。 可能的解决方案步骤包括: - 执行`SHOW ERRORS`来获取详细错误。 - 逐行检查SQL脚本,特别是第1行。 - 使用工具(如SQL Developer)的语法检查功能。 - 确保所有依赖对象有效且可访问。 - 以具有足够权限的用户身份重新创建对象。 此外,用户可能遇到的问题可能涉及到更复杂的场景,比如对象版本冲突、数据库链接问题,或者在多模式环境中的对象引用问题。因此,需要进一步询问用户具体的SQL语句或操作步骤,以便更精准地诊断问题。 总结来说,我需要提供一个结构化的回答,首先解释错误的原因,然后列出详细的解决步骤,并提供具体的SQL示例和命令,帮助用户定位和解决问题。同时,提醒用户在开发过程中如何避免此类错误,比如使用IDE的语法高亮和检查功能,定期验证对象状态等。</think>--- ### 一、错误原因分析 **"Object created with compilation errors"** 表示在Oracle中创建或修改数据库对象(如存储过程、函数、视图、触发器等)时,存在编译错误,导致对象处于 **INVALID** 状态。 **"Error in line: 1"** 提示错误出现在代码第一行附近,但需注意Oracle报错的行号可能因代码格式变化而不完全准确。 --- ### 二、完整错误诊断步骤 #### 1. 获取详细错误信息 通过以下命令查看具体错误描述: ```sql -- 查看最近一次操作的错误详情(SQL*Plus/SQLcl中执行) SHOW ERRORS -- 查询所有无效对象的错误信息(需替换对象名) SELECT * FROM USER_ERRORS WHERE NAME = 'G2OxqWn3'; ``` #### 2. 常见错误类型及修复示例 | 错误类型 | 示例代码(错误) | 修复方案 | 正确代码示例 | |-----------------|----------------------------|------------------------------|---------------------------| | **语法错误** | `CREATE PROCEDURE G2OxqWn3 AS BEGIN ...` | 缺少`IS`或`AS`关键字 | `CREATE PROCEDURE G2OxqWn3 IS BEGIN ...` | | **权限不足** | `CREATE TABLE table1 (...)` | 用户缺少`CREATE TABLE`权限 | `GRANT CREATE TABLE TO user;` | | **对象不存在** | `SELECT * FROM missing_table` | 依赖表未创建或名称拼写错误 | `CREATE TABLE missing_table (...)` | | **保留字冲突** | `CREATE TABLE order (...)` | 使用保留字`ORDER`作为表名 | `CREATE TABLE "order" (...)` 或改名 | #### 3. 验证对象状态 ```sql -- 检查对象状态 SELECT OBJECT_NAME, OBJECT_TYPE, STATUS FROM USER_OBJECTS WHERE OBJECT_NAME = 'G2OxqWn3'; ``` - 若状态为 **INVALID**,需重新编译或修复代码。 --- ### 三、分场景解决方案 #### 场景1:存储过程/函数编译错误 **错误代码示例**: ```sql CREATE OR REPLACE PROCEDURE G2OxqWn3 IS BEGIN INSERT INTO table1 VALUES (1, 'test'); -- 假设table1不存在 END; ``` **修复步骤**: 1. 确认依赖对象存在: ```sql DESC table1; -- 检查表结构 ``` 2. 重新创建对象并捕获错误: ```sql ALTER PROCEDURE G2OxqWn3 COMPILE; -- 重新编译 SHOW ERRORS; -- 显示详细错误 ``` #### 场景2:视图依赖问题 **错误代码示例**: ```sql CREATE VIEW G2OxqWn3 AS SELECT col1 FROM non_existent_table; -- 依赖表不存在 ``` **修复方案**: ```sql -- 1. 创建缺失的表 CREATE TABLE non_existent_table (col1 NUMBER); -- 2. 重新编译视图 ALTER VIEW G2OxqWn3 COMPILE; -- 3. 强制重新验证依赖 BEGIN DBMS_UTILITY.VALIDATE('USER', 'G2OxqWn3'); END; ``` #### 场景3:触发器逻辑错误 **错误代码示例**: ```sql CREATE TRIGGER G2OxqWn3 BEFORE INSERT ON table1 FOR EACH ROW BEGIN :NEW.id := NVL(:NEW.id, 0) + 1; -- 缺少分号或逻辑错误 END; ``` **修复重点**: - 检查PL/SQL语法(分号结尾、变量作用域)。 - 使用`DBMS_OUTPUT.PUT_LINE`调试逻辑。 --- ### 四、高级排查技巧 #### 1. 使用`DBMS_METADATA`获取DDL ```sql -- 导出对象定义代码(验证格式) SELECT DBMS_METADATA.GET_DDL('PROCEDURE', 'G2OxqWn3') FROM DUAL; ``` #### 2. 检查数据库版本兼容性 ```sql -- 确认数据库版本和编译参数 SELECT * FROM V$VERSION; SHOW PARAMETER PLSQL_CCFLAGS; ``` #### 3. 批量编译无效对象 ```sql -- 以DBA身份执行(需权限) EXEC UTL_RECOMP.RECOMP_SERIAL('SCHEMA_NAME'); ``` --- ### 五、预防措施 1. **开发规范**: - 使用IDE(如Oracle SQL Developer)的语法高亮和自动补全功能。 - 在测试环境执行`ALTER ... COMPILE`验证代码。 2. **依赖管理**: ```sql -- 查询对象依赖关系 SELECT * FROM USER_DEPENDENCIES WHERE NAME = 'G2OxqWn3'; ``` 3. **自动化检查**: ```sql -- 定期检查无效对象 BEGIN DBMS_UTILITY.COMPILE_SCHEMA(USER); END; ``` --- 通过以上步骤,可精准定位并修复 **"Object created with compilation errors"** 问题。建议优先使用`SHOW ERRORS`获取详细错误描述,再针对性修复代码逻辑或依赖关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UnknownBody

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值