Reliable Annotations with Less Effort: Evaluating LLM-Human Collaboration in Search Clarifications

文章主要内容总结

本文聚焦于复杂、多维度的搜索澄清任务标注,探讨大语言模型(LLMs)与人类协作(Human-in-the-Loop, HITL)的有效性,旨在以更少的人力成本获得可靠标注。

  1. 研究背景:传统信息检索(IR)评估依赖人类标注,成本高、难扩展。LLMs在简单标注任务中表现接近人类,但在主观、细粒度、高风险任务(如搜索澄清)中存在局限性(不一致、校准差、对提示敏感)。
  2. 研究对象:以搜索澄清任务(生成和评估用于模糊查询的澄清问题)为测试场景,使用MIMICS-Duo数据集,评估4种LLMs(GPT-4o、Claude 3、Cohere Command R、Mistral 7B)在零样本(ZSS)和少样本(FSS)设置下的表现。
  3. 核心发现:即使最先进的LLMs在细粒度、主观任务中也难以达到人类水平,且对提示和超参数(如温度)敏感。
  4. 提出方法:设计HITL工作流程,通过置信度阈值和模型间分歧识别不确定案例,选择性引入人类审核。结果显示,该方法可减少24-45%的人力,同时保持标注质量。
  5. 主要结论:HITL框架通过整合LLM预测与人类监督,平衡了标注质量与效率,为复杂IR任务的自动化标注提供了可行路径。

创新点

  1. 首次实证:首次系统评估LLMs在搜索澄清任务自动标注中的能力与局限,填补了复杂、多维度标注任务中LLMs
<think>我们正在处理一个Maven依赖冲突问题,具体是`annotations-13.0.jar`和`annotations-java5-17.0.0.jar`中都包含了`org.jetbrains.annotations.PropertyKey`和`TestOnly`类。 解决依赖冲突的常见方法包括排除冲突依赖、强制指定版本等。 步骤: 1. 确定冲突的依赖路径:使用`mvn dependency:tree`命令查看依赖树,找出这两个依赖分别由哪些依赖引入。 2. 根据依赖树,我们可以选择排除其中一个依赖。 假设我们通过依赖树发现: - `annotations-13.0.jar` 由依赖A引入 - `annotations-java5-17.0.0.jar` 由依赖B引入 我们可以选择排除旧版本的依赖(例如排除`annotations-13.0`),因为17.0.0版本更新。 在Maven中,可以在引入依赖A的时候排除掉`annotations`: ```xml <dependency> <groupId>groupA</groupId> <artifactId>artifactA</artifactId> <version>versionA</version> <exclusions> <exclusion> <groupId>org.jetbrains</groupId> <artifactId>annotations</artifactId> </exclusion> </exclusions> </dependency> ``` 或者,如果我们想统一使用新版本,也可以使用Maven的`dependencyManagement`强制指定版本: ```xml <dependencyManagement> <dependencies> <dependency> <groupId>org.jetbrains</groupId> <artifactId>annotations</artifactId> <version>17.0.0</version> <!-- 或者你希望使用的版本 --> </dependency> </dependencies> </dependencyManagement> ``` 注意:这里我们强制指定了`org.jetbrains:annotations`的版本为17.0.0,这样所有引入该依赖的地方都会使用这个版本。 但是,这里冲突的两个依赖的artifactId不同: - 一个是`annotations`(对应annotations-13.0.jar) - 另一个是`annotations-java5`(对应annotations-java5-17.0.0.jar) 因此,我们需要分别处理这两个依赖。实际上,`annotations-java5`是JetBrains为Java 5提供的注解库,而`annotations`是较新版本(可能针对更高版本的Java)。通常,我们可以只使用其中一个。 根据JetBrains官方信息,`annotations-java5`是为了兼容Java 5而存在的,而新版本的`annotations`要求至少Java 6。因此,如果你的项目是Java 5,那么需要使用`annotations-java5`;否则,可以使用`annotations`。 由于我们遇到了重复类,说明两个jar包都被引入了,而它们包含相同的类(但可能实现不同)。因此,我们需要排除其中一个。 建议: 1. 如果你的项目不需要兼容Java 5,那么可以排除`annotations-java5`,只使用`annotations`。但是注意,我们这里冲突的是两个不同的artifactId,所以不能通过统一版本号来解决(因为它们是两个不同的依赖)。因此,我们需要排除其中一个。 例如,排除`annotations-java5`: ```xml <dependency> <groupId>groupB</groupId> <artifactId>artifactB</artifactId> <version>versionB</version> <exclusions> <exclusion> <groupId>org.jetbrains</groupId> <artifactId>annotations-java5</artifactId> </exclusion> </exclusions> </dependency> ``` 或者,排除旧的`annotations`(13.0版本)并保留`annotations-java5`(17.0.0版本)?但是注意,这两个jar包中的类名和包名相同,所以不能同时存在。我们需要根据项目需求选择。 另外,需要注意的是,从15.0版本开始,`annotations`库的groupId从`com.intellij`改为了`org.jetbrains`。所以,如果你看到有旧groupId的依赖,也需要调整。 总结步骤: 1. 运行`mvn dependency:tree -Dverbose`查看详细的依赖树,确定两个依赖的引入路径。 2. 根据项目使用的Java版本决定保留哪一个: - 如果项目是Java 5,则保留`annotations-java5`,排除`annotations`。 - 如果项目是Java 6及以上,则保留`annotations`,排除`annotations-java5`。 3. 在依赖树中,找到引入不需要的那个依赖的上层依赖,然后在上层依赖中排除它。 如果项目中有多个依赖引入了这两个库,可能需要多次排除,或者使用`dependencyManagement`统一管理版本(但注意,由于artifactId不同,我们需要分别指定它们的版本,并且可能还需要排除其中一个依赖)。 另一种做法是,如果确定不需要`annotations-java5`,可以在整个项目中排除它: ```xml <dependencyManagement> <dependencies> <dependency> <groupId>org.jetbrains</groupId> <artifactId>annotations-java5</artifactId> <version>17.0.0</version> <scope>provided</scope> <!-- 将其设置为provided,即不会被打包,从而避免冲突 --> </dependency> </dependencies> </dependencyManagement> ``` 这样,所有传递依赖的`annotations-java5`都会被设置成provided,不会包含在构建中。 但是,更直接的方法是在所有引入`annotations-java5`的依赖中排除它,或者只在顶层排除。 另外,注意:有时同一个库的不同版本可能会以不同的groupId和artifactId出现,因此需要仔细查看依赖树。 由于问题中出现的两个jar包: - annotations-13.0.jar (org.jetbrains:annotations:13.0) - annotations-java5-17.0.0.jar (org.jetbrains:annotations-java5:17.0.0) 我们可以选择只保留一个。根据JetBrains的官方文档,`annotations-java5`是旧版Java5的兼容包,而`annotations`是主分支。所以,如果项目是Java6+,建议使用`annotations`,并排除`annotations-java5`。 因此,我们可以尝试将`annotations`升级到最新版本(比如23.0.0)并排除所有`annotations-java5`的传递依赖。 示例:在依赖管理中强制指定两个依赖的版本,并排除不需要的: ```xml <dependencyManagement> <dependencies> <!-- 统一annotations的版本 --> <dependency> <groupId>org.jetbrains</groupId> <artifactId>annotations</artifactId> <version>23.0.0</version> <!-- 使用最新版 --> </dependency> <!--annotations-java5设置为一个高版本,但scope为provided,这样就不会被包含 --> <dependency> <groupId>org.jetbrains</groupId> <artifactId>annotations-java5</artifactId> <version>23.0.0</version> <scope>provided</scope> </dependency> </dependencies> </dependencyManagement> ``` 这样,所有传递依赖的`annotations`都会使用23.0.0版本,而`annotations-java5`虽然版本也统一了,但不会被打包(因为provided作用域仅用于编译和测试,不会传递到运行时和打包)。 但是,请注意:如果项目中有模块需要`annotations-java5`,那么设置为provided可能会导致编译错误。因此,更安全的方式是直接排除传递进来的`annotations-java5`。 因此,我们可以在所有引入`annotations-java5`的依赖中排除它: ```xml <dependencies> ... <dependency> <groupId>some.group</groupId> <artifactId>some-artifact</artifactId> <version>version</version> <exclusions> <exclusion> <groupId>org.jetbrains</groupId> <artifactId>annotations-java5</artifactId> </exclusion> </exclusions> </dependency> ... </dependencies> ``` 如果有很多依赖都传递了`annotations-java5`,那么排除可能会很繁琐。此时,我们可以使用Maven的插件来帮助排除,但Maven本身没有全局排除的功能。因此,我们可能需要逐个排除。 另一种方法是使用`<exclusion>`在顶层项目中排除,但Maven不支持在顶层一次性排除所有传递依赖。所以,我们只能在上层依赖中逐个排除。 总结:根据项目Java版本选择保留的依赖,然后通过排除法去掉另一个依赖。 对于Gradle项目,解决方式类似: 1. 使用`gradle dependencies`查看依赖树。 2. 排除依赖: ```gradle dependencies { implementation('some.group:some-artifact:version') { exclude group: 'org.jetbrains', module: 'annotations-java5' } } ``` 或者,强制使用某个版本: ```gradle configurations.all { resolutionStrategy { force 'org.jetbrains:annotations:23.0.0' // 对于annotations-java5,我们可以选择排除所有传递依赖,或者强制版本并排除模块? // 由于我们不想使用annotations-java5,可以将其排除在所有配置之外 exclude group: 'org.jetbrains', module: 'annotations-java5' } } ``` 但是,请注意,在resolutionStrategy中排除group和module会全局排除,这样所有依赖的传递依赖中这个模块都会被排除。 因此,在Gradle中,我们可以这样全局排除`annotations-java5`: ```gradle configurations.all { exclude group: 'org.jetbrains', module: 'annotations-java5' } ``` 然后,确保我们引入了正确版本的`annotations`: ```gradle dependencies { implementation 'org.jetbrains:annotations:23.0.0' } ``` 这样,项目就不会有`annotations-java5`的依赖,而只有`annotations`,从而解决冲突。 最后,建议检查项目代码,确保使用的注解与新版本的库兼容。通常,这些注解是源码兼容的。 因此,解决方案如下: Maven: 1. 在依赖管理中统一`annotations`的版本,并排除`annotations-java5`的传递依赖(通过在上层依赖中逐个排除)。 2. 或者,全局排除`annotations-java5`(通过在每个引入它的依赖中排除,或者使用dependencyManagement将其设置为provided)。 Gradle: 1. 全局排除`annotations-java5`,并显式引入`annotations`。 根据问题,重复的类是`PropertyKey`和`TestOnly`,这两个类在`org.jetbrains.annotations`包中。因此,我们只需要保留一个提供这些类的jar包即可。 我们选择保留`annotations`(新版本)并移除`annotations-java5`。 因此,在Maven中,我们可以这样做: ```xml <dependencyManagement> <dependencies> <!-- 统一annotations的版本 --> <dependency> <groupId>org.jetbrains</groupId> <artifactId>annotations</artifactId> <version>23.0.0</version> </dependency> </dependencies> </dependencyManagement> ``` 然后,在每一个传递依赖了`annotations-java5`的地方,添加exclusion排除。或者,如果知道是哪些依赖引入了`annotations-java5`,就直接在那些依赖中排除。 例如,如果发现是`some.group:some-artifact`引入了`annotations-java5`,则: ```xml <dependency> <groupId>some.group</groupId> <artifactId>some-artifact</artifactId> <version>xxx</version> <exclusions> <exclusion> <groupId>org.jetbrains</groupId> <artifactId>annotations-java5</artifactId> </exclusion> </exclusions> </dependency> ``` 这样,构建时就不会引入`annotations-java5`,而`annotations`的版本被统一为23.0.0,从而避免重复类。 如果问题仍然存在,请检查是否还有其他传递依赖引入了旧版本的`annotations`(比如13.0版本),如果有,同样使用exclusion排除,或者通过dependencyManagement升级版本。 通过以上步骤,应该可以解决依赖冲突。</think>要解决 Maven 中 JetBrains 注解库的依赖冲突(`Duplicate class org.jetbrains.annotations.PropertyKey and TestOnly`),请按照以下步骤操作: ### 解决方法 1. **定位冲突依赖** 在终端运行: ```bash mvn dependency:tree -Dincludes=org.jetbrains:annotations* ``` 输出示例: ``` [INFO] +- com.example:libA:1.0 -> org.jetbrains:annotations:13.0 [INFO] +- com.example:libB:2.0 -> org.jetbrains:annotations-java5:17.0.0 ``` 2. **排除旧版本依赖** 在 `pom.xml` 中排除冲突的旧版本: ```xml <dependency> <groupId>com.example</groupId> <artifactId>libA</artifactId> <version>1.0</version> <exclusions> <!-- 排除 annotations-13.0 --> <exclusion> <groupId>org.jetbrains</groupId> <artifactId>annotations</artifactId> </exclusion> </exclusions> </dependency> ``` 3. **统一版本(推荐)** 在 `<dependencyManagement>` 中强制指定新版: ```xml <dependencyManagement> <dependencies> <!-- 统一使用 annotations-java5 17.0+ --> <dependency> <groupId>org.jetbrains</groupId> <artifactId>annotations-java5</artifactId> <version>23.0.0</version> <!-- 最新版 --> </dependency> </dependencies> </dependencyManagement> ``` 4. **显式添加新版依赖**(可选) 确保项目直接使用新版: ```xml <dependencies> <dependency> <groupId>org.jetbrains</groupId> <artifactId>annotations-java5</artifactId> <version>23.0.0</version> </dependency> </dependencies> ``` --- ### 关键原因分析 - **冲突本质**:`annotations`(旧版)与 `annotations-java5`(新版)包含相同类名,但后者是前者的升级版,支持 Java 5+ 特性[^1]。 - **最佳实践**:统一使用 `annotations-java5`(新版),删除旧版依赖。 --- ### 验证是否解决 ```bash mvn clean package ``` 检查构建日志中是否还有 `Duplicate class` 错误。 --- ### 预防措施 - 定期运行 `mvn dependency:analyze` 检测冲突 - 使用 Maven Enforcer 插件: ```xml <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> <version>3.1.0</version> <executions> <execution> <id>enforce</id> <configuration> <rules> <dependencyConvergence/> </rules> </configuration> <goals><goal>enforce</goal></goals> </execution> </executions> </plugin> ``` > **提示**:JetBrains 官方已推荐迁移到 `annotations-java5`,旧版 `annotations` 不再维护[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

UnknownBody

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

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

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

打赏作者

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

抵扣说明:

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

余额充值