大模型时代,我们真的不再需要分词了吗?

94f6b1828ddf52abbea6702497d07373.png

文 | 付奶茶
编 | 小轶

分词是NLP的基础任务,将句子、段落分解为字词单位,方便后续的处理的分析。不知道NLPer有没有思考过这个问题:

我们在各项研究工作中想要建模的文本单位究竟是什么?
What are the units of text that we want to model?

在这篇论文中,作者调查了pre-neural、neural era期的几项工作,通过工作,作者提出了一个结论:

"there is and likely will never be a silver bullet solution for all applications and that thinking seriously about okenization remains important for many applications"

即对于所有的应用,有且可能永远不会有灵丹妙药般的解决方案(angular solution),认真思考研究的计划对于很多应用仍然很重要.下面,我们一起来看下这篇论文:

61da90f8d23106ef1b678f21dd99a6d5.png

论文标题:
Between words and characters: A Brief History of Open-Vocabulary Modeling and Tokenization in NLP
论文链接:
https://arxiv.org/abs/2112.10508

在关于什么是token这个问题上一直没有盖棺定论,我们可以看到知乎中大家的讨论:

4c117475ec4515e29f70d3d81493a579.pngb7f5e231ee52ceef786b0355c91d0733.png

在这些回答中可以看到大部分同学都持有“按照特定需求切分”“有一定的意义”等想法,并未提炼出标准解决答案.在本篇论文开头作者引用了twitter中的一个回答:

27e001dcfdb364be38cacbea5eea321a.png

博主的大概意思是,token是人造的概念.在自然语言处理技术的研究中,NLP模型默认被认为文是本被分割成小块,然后输入计算机,最终只是一个整数序列的过程。而在Webster和Kit(1992)[1]提出将这些所谓的“小块”称为连续子字符串-token,token这个概念才正式出现。

e2182ac99d659e405609ef15e0a39da8.png

1.0时代 token=word的近似

在早期的的认知中,token应该是语义上的切割单位,文本数据传统上被分割为“句子”和“单词”。

这些宏观单位再被分割成微观原子单位,而这些微观单位的定义既要承接语言注释(如词性标记、形态句法注释、句法依赖信息等),也是需承接语言动机,包括缩略词(don't)、复合词(如法语copier-coller)、形态衍生词(如英语或法语antiTrump),以及众多的命名实体类、遵循特定类型语法的其他序列(如数字、url)。

MAF(Morphological Annotation Framework,MAF定义的ISO标准)定义token为“non-empty contiguous sequence of graphemes or phonemes in a document”-文档中字素或音素的非空连续序列,在通常的处理方式是用空格切分。

近年来,基于神经语言模型的方法进一步导致了句子如何被分割成原子单位的进化。

这种进化使得利用Tokenization任务将文本分割为“non-typographically (and indeed non-linguistically) motivated units”,即原来的token变为pre-token,原来的tokenization变为pre-tokenization,常见的工具Moses的tokenizer、Hugging Facede Tokenizers package。

2.0时代 token=subword

在神经网络的时代基于单词级别的模型虽然简单容易理解上手,但是它们无法处理罕见和新奇的单词(在训练中罕见、或者未出现词汇,out- vocabularyOOV)——即可以视为封闭的词汇模型。

在训练时,历史上罕见的单词类型被替换为一个新的单词类型[UNK],任何不属于模型原来封闭词汇表的令牌都替换为[UNK]。这种方法会有很多问题,无法胜任NLG任务等。

除此之外,形态不同意思相近的词在词表中这些词会被当作不同的词处理使得训练冗余。在解决怎么样在有限词汇表下有效地处理无限词汇的问题,研究者们启用更小、更细致的单位来代表存在以上问题的原来的word的单位。

subword tokenization最于常见的词不做处理仍然取word,将稀有单词分割为具有含义的子词单词语(subword)。

例如:unfriendly分解为un-friendly-ly,这些单位都是有意义的单位,un的意思是相反的,friend是一个名词,ly则变成副词。在文本的第六章,作者简要的介绍了几大subwords的常用算法:BPE、WordPiece、UnigramLM。

作者论述最为核心的算法即为- Byte Pair Encoding(BPE),算法来源自《Neural Machine Translation of Rare Words with Subword Units》[3]这篇论文,将字节对编码(BPE)(Gage,1994)压缩算法,应用于分词任务,将编码或二元编码是一种简单的数据压缩形式,其中最常见的一对连续字节数据被替换为该数据中不存在的字节。

算法步骤:

(1)准备足够大的训练语料
(2)确定期望的subword词表大小
(3)将单词拆分为字符序列并在末尾添加后缀“ </ w>”,统计单词频率。本阶段的subword的粒度是字符。例如,“ low”的频率为5,那么我们将其改写为“ l o w </ w>”:5
(4)统计每一个连续字节对的出现频率,选择最高频者合并成新的subword
(5)重复第4步直到达到第2步设定的subword词表大小或下一个最高频的字节对出现频率为1

d5db0a2dc653803d7c67007e6004ef89.png
▲BPE算法步骤举例

停止符""的意义在于表示subword是词后缀。举例来说:"st"字词不加""可以出现在词首如"st ar",加了""表明改字词位于词尾,如"wide st",二者意义截然不同。每次合并后词表可能出现3种变化:

+1,表明加入合并后的新字词,同时原来在2个子词还保留(2个字词不是完全同时连续出现)
+0,表明加入合并后的新字词,同时原来2个子词中一个保留,一个被消解(一个字词完全随着另一个字词的出现而紧跟着出现)
-1,表明加入合并后的新字词,同时原来2个子词都被消解(2个字词同时连续出现)

通过以上步骤得到了subword的词表,对该词表按照subword长度由大到小排序。编码时,对于每个单词,遍历排好序的子词词表寻找是否有token是当前单词的子字符串,如果有,则该token是表示单词的tokens之一。

从最长的token迭代到最短的token,尝试将每个单词中的子字符串替换为token。最终,将所有子字符串替换为tokens,对仍然没被替换的子字符串情况,则将剩余的子词替换为特殊token,如。

实际上,随着合并的次数增加,词表大小通常先增加后减小。BPE允许通过可变长度字符序列的固定大小词汇表来表示一个开放的词汇表,使其成为一种非常适合神经网络模型的分词策略。后期使用时需要一个替换表来重建原始数据。OpenAI GPT-2 与Facebook RoBERTa均采用此方法构建subword vector.该可以有效地平衡词汇表大小和步数(编码句子所需的token数量)。但是基于贪婪和确定的符号替换,不能提供带概率的多个分片结果。

除此之外,作者还介绍了基于概率生成新的subword而不是下一最高频字节对的WordPiece、从词汇表中删除概率最低的项目的UnigramLM、允许已学习的单元跨越这些边界的SentencePiece.在一些研究者们的实验中我们可以看到,例如英、日语中BERT-style模型在NLP任务重Unigram比BPE分割效果更好,而在翻译方面的各项试验中BPE最为可靠.在种种不同角度的论证中,究竟是谁一骑绝尘C位出道,仍旧没有结论性的结果。

卖萌屋相关解读:《NLP Subword三大算法原理:BPE、WordPiece、ULM》

在本章的末尾作者还有一个问题:

How many units do we need?

我们为了获得最佳性能,应该选择多少次merge?在这个问题上研究者们也各持一词,如由于神经机器翻译模型的输出是有频率偏差的,为保持一个更均匀的频率分布是更好的,合并尽可能缩短整个序列的长度而确保95%的subword单位出现至少100次(大概在训练数据),因此在这个问题上,现有的结论仍是表现最好的数字可能取决于任务和领域,并因语言而异。

3.0时代 tokenization-free

作者在本章中提出,如果我们一直依赖于一个预定义word(pretokenization output)概念,在没有这样的定义、或者无法获得、不需要该怎么办,有没有一种方法可以 let our data-driven machine learning approach also learn the tokenization? 因此,在这章中,作者介绍了各种技术来生成不同大小、质量的units。在这里作者做了几大热门选项的分析:

(1) Characters?

研究者们认为word或sub-word级标记序列在噪声存在时将发生显著变化,从而character模型对噪声和非分布数据更有鲁棒性。但是限制采用字符级模型的一个主要因素是,字符序列往往比它们的字级或子字级的对应字符长得多,这使得训练和推理变慢。为了提高训练速度和效率,Libovický、Chung、Cherry等人评估了各种策略和实验,但是它们都没有提供性能和速度的适当权衡。

(2)Character hashes?

在多语言环境中,使用字符级模型会导致非常大的词汇量。不给每个字符自己的embedding,而是用多个哈希函数将所有可能的代码点散列到更小的集合中,以便在代码点之间共享参数,以获得合理的计算效率,并专注于非生成序列标记任务。

(3)Bytes?

避免字符级模型词汇量过大问题的另一种方法是使用UTF-8等标准编码产生的字节序列来表示文本。这可以看作是使用了由标准团体(Unicode联盟)创建的固定的标记化方案,而不是基于语言或统计信息的过程。

具体使用Unicode字节的主要优势是遵循“建模数据中最小有意义单位的原则”时,字节级建模是一种自然选择,ByT5最近的研究表明,字节级模型与字符级模型具有类似的好处(对噪声有更好的鲁棒性,避免词汇量不足等问题),但也有类似的缺点(由于序列较长,训练和推理时间较长)。

(4)Visual featurization: Pixels?

另一种 “tokenization-free” 的建模方式是基于视觉概念,字节级模型的目标是覆盖磁盘上所表示的全部底层“词汇”,而视觉表示的目标是编码人类读者在处理文本时可能使用的字符之间的相似性。

字节级模型依赖于一致的观察序列,这使得它们容易受到变化和噪声的影响,这些可能会在视觉上呈现相似的效果,而使用视觉特征的最初动机是创造反映共享字符组件的嵌入,如汉字或韩语,因此能够更好地概括罕见的或不可见的字符,直接从像素分解进行转换这种模型在机器翻译的各种语言和脚本上都具有竞争力,而且对诱导噪声具有更强的鲁棒性。

总结

作者在结尾引用了一句话:

“It remains to find effective neural architectures for learning the set of entities jointly with the rest of the neural model, and for generalising such methods from the level of character strings to higher levels of representation”

Tokenization,无论是分词的演进过程还是术语的含义本身都随着研究者的深耕有了显著的发展。这篇论文追踪了它们的进化,并展现了多年来研究者们一步步尝试,立足于不同的motivation带来的的重大变化。

我们从论文中的介绍可以看到,尽管tokenization有了重大的进步,但是知道现在还没有完美的方法,所有选项都有缺点和优点,这片希望之乡还很遥远。“仍然需要找到有效的神经架构,以便与神经模型的其余部分一起学习实体集,并将这些方法从字符串级别推广到更高级别的表示”。

0138ff366ce6527bec29a9e7dd23d50f.png萌屋作者:付奶茶

新媒体交叉学科在读Phd,卖萌屋十级粉丝修炼上任小编,目前深耕多模态,希望可以和大家一起认真科研,快乐生活!

作品推荐

  1. 在斯坦福,做 Manning 的 phd 要有多强?

  2. 史上最大多模态图文数据集发布!

688818edb6fec022811c0ff597af1cb0.png后台回复关键词【入群

加入卖萌屋NLP/IR/Rec与求职讨论群

后台回复关键词【顶会

获取ACL、CIKM等各大顶会论文集!

8cb7af32a130d5f1969c69fe7258f7aa.gif aaf1fddc2ec7768336b84ae43b3b635b.png

[1] Tokenization as the initial phase in NLP.https://www.researchgate.net/publication/221102283_Tokenization_as_the_initial_phase_in_NLP

[2] https://jishuin.proginn.com/p/763bfbd34ee4

[3] Neural Machine Translation of Rare Words with Subword Units.https://aclanthology.org/P16-1162/

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

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

相关文章

LeetCode 1190. 反转每对括号间的子串(栈)

1. 题目 给出一个字符串 s&#xff08;仅含有小写英文字母和括号&#xff09;。 请你按照从括号内到外的顺序&#xff0c;逐层反转每对匹配括号中的字符串&#xff0c;并返回最终的结果。 注意&#xff0c;您的结果中 不应 包含任何括号。 示例 1&#xff1a; 输入&#xf…

论文浅尝 | 探索用于归纳型知识图谱补全的关系语义

笔记整理&#xff1a;徐雅静&#xff0c;浙江大学在读硕士&#xff0c;研究方向为知识图谱的表示学习&#xff0c;零样本学习。KGC指的是在不完整的KG中推理出缺失的实体。以前的多数工作仅仅考虑到直推式场景&#xff08;实体都存在KG中&#xff09;&#xff0c;不能有效地解决…

关于深度学习,我们写了一本1400页的全栈手册

不知不觉写文章已经四年了。最开始是一个人&#xff0c;后来恰了恰饭&#xff0c;就招揽了很多比小夕厉害的小伙伴一起写。不知不觉已经积累了300多篇了。。三年以来&#xff0c;我跟小伙伴们原创的300篇深度学习与NLP领域的入门资料、子方向综述、2018~2022学术前沿解读、工业…

LeetCode 1019. 链表中的下一个更大节点(单调栈)

1. 题目 给出一个以头节点 head 作为第一个节点的链表。链表中的节点分别编号为&#xff1a;node_1, node_2, node_3, … 。 每个节点都可能有下一个更大值&#xff08;next larger value&#xff09;&#xff1a;对于 node_i&#xff0c;如果其 next_larger(node_i) 是 node…

Spring Cloud Hystrix的请求合并

通常微服务架构中的依赖通过远程调用实现&#xff0c;而远程调用中最常见的问题就是通信消耗与连接数占用。在高并发的情况之下&#xff0c;因通信次数的增加&#xff0c;总的通信时间消耗将会变的不那么理想。同时&#xff0c;因为对依赖服务的线程池资源有限&#xff0c;将出…

LeetCode 306. 累加数(暴力回溯)

1. 题目 累加数是一个字符串&#xff0c;组成它的数字可以形成累加序列。 一个有效的累加序列必须至少包含 3 个数。除了最开始的两个数以外&#xff0c;字符串中的其他数都等于它之前两个数相加的和。 给定一个只包含数字 ‘0’-‘9’ 的字符串&#xff0c;编写一个算法来判…

关于深度学习,我们4年时间写了一本1400页的全栈手册

不知不觉写文章已经四年多了。最开始是一个人&#xff0c;后来恰了恰饭&#xff08;感恩理解&#xff09;&#xff0c;就招揽了很多比小夕厉害的小伙伴一起写。不知不觉已经积累了300多篇了。。四年以来&#xff0c;我跟小伙伴们原创的300篇深度学习领域&#xff08;含NLP、CV等…

会议交流 | 第十六届全国知识图谱与语义计算大会(工业界论坛)——8月24日-27日...

点击阅读原文&#xff0c;进入 CCKS 官方网站。OpenKGOpenKG&#xff08;中文开放知识图谱&#xff09;旨在推动以中文为核心的知识图谱数据的开放、互联及众包&#xff0c;并促进知识图谱算法、工具及平台的开源开放。

消费者驱动的微服务契约测试套件Spring Cloud Contract

在微服务架构下&#xff0c;你的服务可能由不同的团队提供和维护&#xff0c;在这种情况下&#xff0c;接口的开发和维护可能会带来一些问题&#xff0c;比如服务端调整架构或接口调整而对消费者不透明&#xff0c;导致接口调用失败。 为解决这些问题&#xff0c;Ian Robinson…

LeetCode 842. 将数组拆分成斐波那契序列(暴力查找)

1. 题目 给定一个数字字符串 S&#xff0c;比如 S “123456579”&#xff0c;我们可以将它分成斐波那契式的序列 [123, 456, 579]。 形式上&#xff0c;斐波那契式序列是一个非负整数列表 F&#xff0c;且满足&#xff1a; 0 < F[i] < 2^31 - 1&#xff0c;&#xff…

做CV和做NLP,是否都有光明的未来?

本文授权转载自公众号“算法圈的小破事”&#xff0c;点击以上卡片进行关注大家好&#xff0c;我是在互联网危险边缘疯狂试探的皮皮虾。最近有点忙&#xff0c;拖更了&#xff0c;不知道有没有读者惦记皮皮虾推文呢&#xff08;目测没有TT&#xff09;。首先祭出新华字典的老图…

论文浅尝 | 知识表示、多模态融合、搜索匹配三大方向探索——360人工智能研究院知识图谱算法团队...

转载公众号 | 老刘说NLP当前以促进技术发展、提升模型指标&#xff0c;探究模型天花板的竞赛越来越多&#xff0c;也逐步成为各大研究机构、互联网大厂竞相角逐的主战场。自2022年以来&#xff0c;在组员的共同努力下&#xff0c;团队(360人工智能研究院知识图谱算法团队)&…

Spring Cloud Zuul重试机制探秘

简介 本文章对应spring cloud的版本为(Dalston.SR4)&#xff0c;具体内容如下&#xff1a; 开启Zuul功能通过源码了解Zuul的一次转发怎么开启zuul的重试机制Edgware.RC1版本的优化 开启Zuul的功能 首先如何使用spring cloud zuul完成路由转发的功能&#xff0c;这个问题很简…

论文浅尝 | PASSLEAF: 一个用于不确定知识图谱嵌入的基于样本池的半监督学习框架...

笔记整理&#xff1a;杨露露&#xff0c;天津大学硕士链接&#xff1a;https://ojs.aaai.org/index.php/AAAI/article/view/16522/16329动机在不确定知识图谱的嵌入中&#xff0c;实体之间的每个关系都有一个置信度。鉴于现有的嵌入方法可能会丢弃不确定性信息&#xff0c;或只…

LeetCode 60. 第k个排列(回溯 康托展开)

文章目录1. 题目2. 解题2.1 回溯2.2 数学-康托展开1. 题目 给出集合 [1,2,3,…,n]&#xff0c;其所有元素共有 n! 种排列。 按大小顺序列出所有排列情况&#xff0c;并一一标记&#xff0c;当 n 3 时, 所有排列如下&#xff1a; “123” “132” “213” “231” “312” “…

我在谷歌实习时发现了一个模型 bug,于是有了这篇 ACL

文 | AlbertYang编 | 小轶表格的自动理解与检索已经成为 NLP 以及多模态任务中重要的一环。如果我们给模型一个冬奥会的奖牌榜并且问&#xff0c;“哪个国家的金牌最多&#xff1f;”&#xff0c;现有的模型已经可以毫不费力地输出正确的答案&#xff08;通常都是表格首行的国家…

Spring Cloud Zuul的fallback优化

如何在Zuul中使用fallback功能 我们在项目中使用Spring cloud zuul的时候&#xff0c;有一种这样的需求&#xff0c;就是当我们的zuul进行路由分发时&#xff0c;如果后端服务没有启动&#xff0c;或者调用超时&#xff0c;这时候我们希望Zuul提供一种降级功能&#xff0c;而不…

技术动态 | 「新一代知识图谱关键技术」最新2022进展综述

转载公众号 | 专知链接&#xff1a;https://crad.ict.ac.cn/CN/10.7544/issn1000-1239.20210829近年来&#xff0c;国内外在新一代知识图谱的关键技术和理论方面取得了一定进展&#xff0c;以知识图谱为载体的典型应用也逐渐走进各个行业领域,包括智能问答、推荐系统、个人助手…

LeetCode 397. 整数替换(递归 贪心)

文章目录1. 题目2. 解题2.1 递归2.2 记忆化递归2.3 贪心1. 题目 给定一个正整数 n&#xff0c;你可以做如下操作&#xff1a; 如果 n 是偶数&#xff0c;则用 n / 2替换 n。如果 n 是奇数&#xff0c;则可以用 n 1或n - 1替换 n。 n 变为 1 所需的最小替换次数是多少&#…

搭配对比学习,万能的 prompt 还能做可控文本生成

文 | ZenMoore编 | 小轶可控文本生成&#xff0c;旨在让语言模型的输出带有我们想要的某种属性。比如情感、主题、三元组等。一般我们习惯采用 CTRL[1] 或者 PPLM[2] 等方式。但是&#xff0c;CTRL 是对整个语言模型进行 Finetuning, PPLM 因为需要在生成的过程中迭代更新 hidd…