GENERALIZATION THROUGH MEMORIZATION: NEAREST NEIGHBOR LANGUAGE MODELS

news2025/7/9 17:02:53

Abatract

我们引入了kNN-LMs,它扩展了一个预先训练的神经语言模型(LM),通过与k个最近邻(kNN)模型线性插值。最近邻是根据预先训练好的LM嵌入空间中的距离进行计算的,并可以从任何文本集合中提取,包括原始的LM训练数据。
定性地说,该模型在预测罕见的模式方面特别有用,如事实知识。总之,这些结果强烈地表明,学习文本序列之间的相似性比预测下一个单词更容易,而最近邻搜索是一种在长尾进行语言建模的有效方法。

1 introduction

我们提出了一种新的语言建模方法,它基于表示学习问题可能比预测问题更容易的假设。
我们提供了强有力的证据,表明现有的语言模型在第一个问题上更好,通过在一个简单的最近邻方案中使用它们的前缀嵌入,显著提高了整体性能。
我们引入了kNN-LM,这是一种通过线性插入LM与k-最近邻(kNN)模型的其下一个单词分布来扩展预训练的方法。最近邻是根据预先训练的嵌入空间中的距离计算的,可以从任何文本集合中提取,包括原始的LM训练数据。这种方法允许显式地记忆罕见模式,而不是隐式地在模型参数中。当使用相同的训练数据来学习前缀表示和kNN模型时,它还提高了性能,这强烈表明预测问题比以前所认识到的更具挑战性。
通过使用kNN对next word的概率分布进行线性插值 对PLM进行扩展。
最近邻是根据预先训练的嵌入空间中的距离计算的,可以从任何文本集合中提取,包括原始的LM训练数据。这种方法允许显式地记忆罕见模式,而不是隐式地在模型参数中。当使用相同的训练数据来学习前缀表示和kNN模型时,它还提高了性能,这强烈表明预测问题比以前所认识到的更具挑战性。
为了更好地衡量这些影响,我们进行了广泛的实证评估。将我们的kNN增强应用到一个强大的维基文本-103lm上,仅使用原始数据集,实现了一个新的最先进的困惑状态15.79——比基础模型提高了2.86点(Baevski & Auli,2019)——没有额外的训练。我们还表明,该方法可以有效地扩展到更大的训练集,并通过简单地改变最近邻数据存储,允许有效的领域自适应。
在1亿个令牌上训练一个模型,并在30亿个令牌数据集上使用kNN搜索,可以超过在所有30亿个令牌上训练同一模型的性能,开启了一个新的
类似地,向数据存储中添加域外数据可以使单个LM跨多个域非常有用,同样无需进行进一步的训练。定性地说,我们发现该模型对于长尾模式特别有用,比如事实知识,这可能更容易通过显式记忆访问。

2 NEAREST NEIGHBOR LANGUAGE MODELING

context-target pairs are stored in a key-value datastore

Datastore

在这里插入图片描述

存储的是context的representation和target word 的键值对

Inference

在测试时,给定输入上下文x,模型生成下一个单词pLM(y|x)和上下文表示f (x)的输出分布。该模型使用f (x)查询数据存储,根据距离函数d(·,·)(我们实验中距离的平方,使相似函数成为RBF核)检索其k个最近邻N。然后,它根据邻居的负距离的softmax计算一个关于邻居的分布,同时聚合每个词汇表项在检索目标中出现的所有项目的概率质量(没有出现在检索目标中的项目的概率为零):
在这里插入图片描述
最后,我们遵循Grave等人(2017a),方法,使用调整参数λ将最近邻分布pkNN与模型分布pLM进行插值,生成最终的kNN-LM分布:
在这里插入图片描述

Implementation

数据存储包含训练集中每个目标的一个条目,对于lm来说,多达可以有数十亿个示例。为了搜索这个大型数据存储,我们使用了FAISS(Johnson等人,2017),这是一个用于在高维空间中快速进行最近邻检索的开源库。FAISS通过聚类键和基于集群质心查找邻居来加速搜索,同时通过存储向量的压缩版本来减少内存使用。我们在初步实验中发现,与内积距离相比,使用L2距离进行FAISS检索对kNN-LM具有更好的性能。

Related Cache Models

之前的工作(Grave等人,2017c;Merity等人,2017)使用了类似的方法来计算与测试文档之前隐藏状态的相似性,从而更容易复制最近过去的罕见词汇项。自从transformer(Vaswani等人,2017)的开发以来,这种技术就不那么流行了,它可以学习使用自我注意复制最近的单词;在第4.1节中,我们观察到在同一测试文档`alaGrave等人(2017c)中缓存最近的项目相对较小的收益。最相关的是,Grave等人(2017a)描述了一种在线语言模型,使用对之前所有隐藏状态的最近邻搜索,以改善领域自适应。在我们的工作中,我们只保存训练数据,目的是明确地记忆训练的例子,以便更好地在测试时推广到类似的案例

3 EXPERIMENTAL SETUP

评估指标使用的PPL

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/6727.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

45-命令行基础操作

45-命令行基础操作LInux命令行基础LInux命令基础知识Linux的Gul与CLI为什么使用Linux命令行Linux命令语法格式Linux命令分类LInux基础命令登录命令电源管理命令电源命令1: shutdown电源命令2: halt电源命令3: reboot文件管理命令Linux文件目录结构(1)Linux文件路径帮助命令目录…

Vue+Vite+TS

目录#、基础配置1、安装Node.js2、修改npm镜像源3、配置vscode一、创建项目二、Ref全家桶三、computed计算属性js中数组使用的高阶函数四、watch监听器#、基础配置 1、安装Node.js 下载地址:https://nodejs.org/zh-cn/download/ 安装成功,查看版本node …

vue create 创建项目的时候遇到使用nvm切换node后 提示‘vue‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件

前景:我是用的是nvm切换的node版本,不是直接安装高级版本node,有nvm同样困惑的可以用以下方式解决问题,加油!!! 报错: ‘vue’ 不是内部或外部命令,也不是可运行的程序 或批处理文件 解决方法: 1.检查node和npm nod…

libvirt 使用UEFI 设置 edk2-ovmf

一、ovmf 与 edk2 关系: 英特尔EFI开发工具包II (edk2)的子项目,所以在edk2 源码中也能找到 ovmf 部分,ovmf 使UEFI支持Ia32和X64虚拟机 二、OVMF_VARS.fd 与 OVMF_CODE.fd: 1、变量存储和固件的可执行文件; 2、OVMF_…

【数据结构与算法】单链表的增删查改(代码+图解)

目录 顺序表和链表的特点: 时间复杂度: 分析: 单链表结构体和数据类型: 开辟一个节点和存储数据: 打印 尾插 尾删 头插 头删: 查找单链表中的元素 在pos后插入x 在pos前插入x 删除pos后的一个…

【详细学习SpringBoot源码之自定义监听器实战演练-6(自定义监听器、自定义监听事件、指定监听事件)】

一.知识回顾 【0.SpringBoot专栏的相关文章都在这里哟,后续更多的文章内容可以点击查看】 【1.SpringBoot初识之Spring注解发展流程以及常用的Spring和SpringBoot注解】 【2.SpringBoot自动装配之SPI机制&SPI案例实操学习&SPI机制核心源码学习】 【3.详细学…

RabbitMQ - 交换机

文章目录1. Exchanges2. 临时队列3. 绑定 bindings4. Fanout exchange4.1 Fanout 介绍4.2 Fanout 实战5. Direct exchange5.1 Direct 介绍5.2 多重绑定5.3 Direct 实战6. Topics exchange6.1 Topic 的介绍6.2 Topic 匹配案例6.3 Topic 实战1. Exchanges RabbitMQ 消息传递模型…

Techsmith Camtasia Studio2023专业电脑屏幕录制工具

Techsmith Camtasia Studio2023电脑版版下载! 从今天开始,我们开始讲解短视频制作。一提到短视频制作,很多人可能首先想到的,是PR、绘声给影。的确,PR和绘声绘影功能非常强大,毕竟它们是影视制作的专业软件&#xff0…

【Spring Boot】Day01

文章目录一、Spring Boot的引入创建总结演示运行可能出现的错误二、使用idea创建Spring Boot创建运行http://localhost:8080/hello三、介绍配置文件介绍application.yml一、Spring Boot的引入 创建 总结 # 项目中集成spring和springmvc 1. 新建项目 2. 拷贝jar包(maven) &…

5G核心网技术基础自学系列 | SMF提供的服务

书籍来源:《5G核心网 赋能数字化时代》 一边学习一边整理内容,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:5G核心网技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 SMF提供两种服务, 即N…

图文详解Linux基础经典教程(06)——CentOS安装JDK

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 概述 从本节教程开始,我们尝试在CentOS上搭建Java开发环境,即在CentOS中安装:JDK、Tomcat、MySQL等开发工具。 这些工具均可选用YUM或压…

225. 用队列实现栈、232. 用栈实现队列、622. 设计循环队列

LeetCode题解前言用队列实现栈用栈实现队列循环队列总结前言 这三道题都是比较经典的一道题,主要想要考察我们对于栈、队列的性质的应用,也是笔试题的常客!!!接下来就让我们一起来手撕它!!&…

【C】程序环境和预处理

🙈个人主页:阿伟t 👉系列专栏:【C语言–大佬之路】 🎈今日心语:你所看到的惊艳,都曾被平庸所历练。 本章重点: 程序的翻译环境程序的执行环境详解:C语言程序的编译链接…

next-key lock案例

1. 加锁规则 在默认的可重复读的隔离级别下,加锁规则可以总结为:两个原则,两个优化和一个bug。 原则1:加锁的基本单位是next-key lock。next-key lock是前开后闭的区间原则2:查询过程中访问到的对象才会加锁优化1&am…

计算机网络-数据交换技术

数据交换:实现在大规模网络核心上进行数据传输的技术基础。 常见的数据交换技术包括:电路交换、报文交换和分组交换。 一、电路交换 电路:通过中间交换结点为两台主机之间建立一条专用的通信线路。电路交换:是最早出现的一种交换…

这个神器,让我的 Python 代码运行速度快了100倍

Python 已经得到了全球程序员的喜爱,连续多期稳坐编程语言排行榜第一把交椅。但是还是遭到一些人的诟病,原因之一就是认为它运行缓慢。 要是有一款能够自动优化我们代码的神器该有多好啊! 于是,大家都在想尽各种办法来提高 Pytho…

弘扬企业家精神!闪马智能创始人兼CEO彭垚再获殊荣

随着新业态、新活力涌现,诞生了一批又一批新的优秀企业家。11月8日,闪马智能创始人兼CEO彭垚荣膺胡润百富“2022青年产业领袖”。 自2016年起,彭垚连续创业,7年内成功培育并壮大了两家行业独角兽企业,2019年4月成立闪…

创龙AD+全志T3 ad_display 开发案例 (2)

上一篇:创龙AD全志T3 ad_display 开发案例(1) 前 言 本文主要介绍基于全志科技T3(ARM Cortex-A7)处理器的8/16通道AD采集开发案例,使用核芯互联CL1606/CL1616AD芯片,亦适用于ADI AD7606/AD7616。CL1606/CL1616与AD7606/AD7616软硬件兼容。 …

OpenCV图像处理——图像梯度

总目录 图像处理总目录←点击这里 七、图像梯度 7.1、图像梯度-Sobel算子 原图 直接计算 不建议这么算 sobelxycv2.Sobel(img,cv2.CV_64F,1,1,ksize3) sobelxy cv2.convertScaleAbs(sobelxy) cv_show(sobelxy,sobelxy)分别计算——合并 当前位置的像素值等于sobel算…

spring security调用过程;及自定义改造

认证/授权概述 一般系统都有登录接口来校验用户是否存在,密码是否正确,然后会颁发一个token给客户端,后续客户端就可以带着这个token来请求,代表自己是合法请求。 spring security责任链 请求->UsernamePasswordAuthenticati…