REALM: Retrieval-Augmented Language Model Pre-Training 论文阅读

REALM是一种新的预训练方法,通过结合无监督学习和知识检索,提升开放领域问答的性能。模型包括神经知识检索器和知识增强编码器,特别针对实体和日期进行mask,以学习更有用的知识。实验显示,相对于ORQA,REALM在准确度上有显著提升。
部署运行你感兴趣的模型镜像

 

 ICML 2020

文章地址:https://kentonl.com/pub/gltpc.2020.pdf

目录

0、背景

1、引言

2、总结

3、REALM方法

3.1 整体流程 

3.2 额外细节

4、实验

        4.1 实验结果

        4.2 消融实验


0、背景

        大部分的语言模型都采用一种称为masked language model,简称MLM的任务来训练,让模型学会类似完形填空一样的能力。通过在大规模语料上的训练,预训练语言模型如BERT实际上已经隐含了一些知识。例如输入一句“The       is the currency of the United Kingdom”,BERT很有可能会填入单词"pound"。虽然他还是根据词的共现信息学习和推理的,但看上去就像具有所谓的知识一样。

        但上面说的这种隐含知识不好把握,也难以扩展。这篇论文则提出了一种更加模块化且可解释性更强的知识嵌入方法。总的来说,他的方法是训练一个独立的“语境知识抽取器”(contextual knowledge retriever),通过这个抽取器来决定应该在推理时使用哪些知识。而且这个抽取器和语言模型一起进行非监督预训练大大提高模型性能。

        在这之前这个方向上做得好的是这个模型ORQA。下面这个模型图并不是完整的,我只把最关键的一部分给截取下来了。这个任务论文里称作:反向完形填空任务。 将问题Q和维基百科中的几百万句话都经过BERT embedding之后,然后计算q和每句话的相似度,用以预测语料库中哪些话是Q的上下文。通过这种方式训练检索的准确度。因为该篇作者认为找到问题可能的所在的上下文对回答问题是很有帮助的。

1、引言

        通常来说训练检索器需要有标签的数据。但REALM采用了不同的方法,利用无监督的文本数据通过提取相关的特征来训练检索器。这意味着REALM可以在没有明确标注的数据情况下,通过学习无监督的文本信息来进行检索任务的训练和优化。这种方法可以扩大训练数据的规模,提高模型的效果和泛化能力。此外,本文还提出一些其他技巧用于加速训练、增强训练效果。

2、总结

        本文对开放领域的问答(Open-QA)提出一种简单有效的预训练方法。模型首先从无标注文档中提出一句话,随机抹去其中的部分字符,然后根据被掩码后的句子,从文档集中提取最符合的文档,二者再拼接起来送入模型,预测被掩码的那些字符。在预测的时候,也是首先把问题送入模型,得到最符合的文档,再一起送入模型,从文档中抽取span作为答案。此外,本文还提出一些其他技巧用于加速训练、增强训练效果。实验表明,这种方法能比之前的最好结果有大幅增加。

      

3、REALM方法

上面是预训练任务MLM,下面是针对OpenQA任务微调

3.1 整体流程 

我们使用完整的流程图进行介绍。

根据公式建模。这里对z进行了边缘化。

将整个流程分成以下两个部分。
1.Neural Knowledge Retriever:问题x中的实体词汇进行随机mask,将x与外部资源(这里选择是维基百科)经过BERT的embedding,计算x与各个zi向量的点积,即相似度。

由于考虑到维基百科中可能某些文档过长导致维度过大,所以对BERT输出向量进行了降维处理。

 

2.Knowledge-Augmented Encoder:根据得到的zi和x,判断答案的起始和结束位置之后输出结果。

3.2 额外细节

1.MIPS算法建立索引:维基百科中包含大量文本,如果都进行embedding之后与x进行点积操作,那么速度会非常慢,所以作者使用MIPS算法为向量建立索引,快速定位与查询向量最相似的文档,本文选取前5个相似度最大的文本。

 2.参数和索引更新异步进行:引入索引机制后带来了新问题,当模型在预训练时,参数更新会导致embedding后的向量也随之更新,但要构建一个快速检索的索引又要求两个编码后的向量是确定的。作者的办法是使用16个TPU训练MLM任务,另外使用8个TPU每五百步更新一次索引。因为作者认为每次更新的参数对前五个文档的编码并不会产生太大的影响。

3.只训练真正需要知识的词(通常是实体和日期)来训练MLM:作者认为如果按照传统MLM任务那样随机mask,可能会mask一些对检索无用的词,比如in/on/at...等。REALM只选择实体和日期进行mask。

4.避免让x出现在z中:如果被mask的x是z文档的一句原话,那么很轻易的就预测出了被mask的单词,这会影响训练效果

4、实验

4.1 实验结果

        从实验结果可以看到,相比之前的ORQA模型,REALM有了大幅度的提升。 为了直观比较,使用的超参数和ORQA相同。

4.2 消融实验

        由上图可以看出,使用REALM的这种MLM任务训练检索任务的准确度要比ORQA中的那种准确度高了一倍还要多,证明了这种方法的必要性。

         对于传统的mask比对和本文提出的只mask实体来说,匹配的准确度也要提升很多,证明3.2中的第三点的重要性。

您可能感兴趣的与本文相关的镜像

Qwen3-VL-8B

Qwen3-VL-8B

图文对话
Qwen3-VL

Qwen3-VL是迄今为止 Qwen 系列中最强大的视觉-语言模型,这一代在各个方面都进行了全面升级:更优秀的文本理解和生成、更深入的视觉感知和推理、扩展的上下文长度、增强的空间和视频动态理解能力,以及更强的代理交互能力

### Gradle 构建时无法找到 io.realm:realm-gradle-plugin:10.3.1 的依赖问题解决方案 在 Gradle 构建过程中,如果出现 `Could not find io.realm:realm-gradle-plugin:10.3.1` 的错误,通常是因为以下原因之一:Maven 仓库配置不正确、插件版本不兼容或网络问题。以下是解决该问题的详细方法: #### 1. 确保 Maven 仓库配置正确 需要确保 `build.gradle` 文件中包含正确的 Maven 仓库地址。对于 Realm 插件,建议使用 Google 的 Maven 仓库和 JCenter(尽管 JCenter 已经停止更新,但仍然可以访问旧版本)。示例如下: ```gradle buildscript { repositories { google() // 添加 Google 的 Maven 仓库 jcenter() // 添加 JCenter 仓库 } dependencies { classpath "io.realm:realm-gradle-plugin:10.3.1" // 确保版本号正确 } } ``` 此配置确保 Gradle 能够从正确的仓库下载所需的插件[^1]。 #### 2. 检查插件版本兼容性 Realm 插件的版本需要与项目的 Gradle 版本以及 Android Gradle 插件版本兼容。如果使用的 Gradle 或 Android Gradle 插件版本过低,可能会导致插件加载失败。可以通过以下方式检查兼容性: - 确保 Gradle 版本为 6.5 或更高。 - 确保 Android Gradle 插件版本为 4.0 或更高。 如果版本不兼容,请升级 Gradle 和 Android Gradle 插件。升级方法如下: ```gradle // 在 project 级别的 build.gradle 文件中 buildscript { dependencies { classpath 'com.android.tools.build:gradle:4.2.2' // 升级到最新版本 } } // 在 gradle/wrapper/gradle-wrapper.properties 文件中 distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip // 升级到最新版本 ``` #### 3. 确保插件应用顺序正确 插件的应用顺序可能会影响构建过程。根据引用内容,推荐的插件应用顺序如下[^3]: ```gradle apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' // 确保 kapt 插件在 Realm 插件之前 apply plugin: 'realm-android' ``` #### 4. 使用 kapt 替代 annotationProcessor 如果项目中使用了 Kotlin,则需要通过 `kapt` 插件支持注解处理器。否则,Realm 的注解可能无法被正确解析[^4]。确保在 `dependencies` 中添加以下内容: ```gradle dependencies { kapt "io.realm:realm-compiler:10.3.1" } ``` #### 5. 检查网络连接 如果本地 Maven 仓库中没有缓存该插件,Gradle 将尝试从远程仓库下载。如果网络连接不稳定或受限(例如防火墙阻止),可能导致下载失败。可以尝试以下方法: - 更换网络环境,确保能够访问 Google 和 JCenter 的 Maven 仓库。 - 如果网络受限,可以手动下载插件并将其放置在本地 Maven 仓库中。 #### 示例完整配置 以下是一个完整的 `build.gradle` 配置示例: ```gradle buildscript { repositories { google() jcenter() } dependencies { classpath "com.android.tools.build:gradle:4.2.2" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.31" classpath "io.realm:realm-gradle-plugin:10.3.1" } } allprojects { repositories { google() jcenter() } } apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' apply plugin: 'realm-android' dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:1.5.31" kapt "io.realm:realm-compiler:10.3.1" } ``` ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小白的咆哮

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

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

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

打赏作者

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

抵扣说明:

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

余额充值