适合多种语言的BPE(Byte-Pair Encoding)编码

2024-01-21 18:04

本文主要是介绍适合多种语言的BPE(Byte-Pair Encoding)编码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • BPE
  • 参考

前言

因为最近在看T5,里面讲到一些分词的方法如BEP,因为现在都是在玩大模型,那么语料也就都很大,而且还需要适配不同的语言,而不同的语言又不一定像英文那样按空格切分就行,例如咱们的中文,所以就需要一些适用性更广的方法了。

不仅如此,当我们遇到未知词汇时,如果使用常规的词汇表,那么未知词汇通常为 < UNK >,此时未知词汇之间就没有任何区分,而如果我们使用subword来创建词汇表,即将语料中连着出现频率高的字符串作为衍生的字词,此时面对未知词汇时就有可能使用到部分字词的语义,作出一定的区分,同时使用这样的方法也能够缓解词汇表过大的问题,同时也能保证一定的语义表示效果。

BPE

BPE(Byte-Pair Encoding)编码,就是一种根据频率切分语料的方法,能够将原始语料切分为subword,输入也不受限制,应该是字符就行。
在这里插入图片描述
例如我们的语料为最左边的那些,(2 bed 表示语料中出现了2次bed这个词)我们先按照字符级全都切分,就得到了初始的词汇字典

然后我们开始寻找出现频率最多的pair(字符对)
在这里插入图片描述
可以看到语料中频率最高的pair为st,此时就可以将这个pair合成一个字符,加入词汇字典里,然后继续。
在这里插入图片描述
然后发现未处理的pair中e 和 st这对pair是频率是最高的,此时将est加入到词汇字典中
然后发现未处理的pair中b 和 e这对pair是频率是最高的,此时将be加入到词汇字典中
然后会发现剩下的pair频率没有超过一次了,那么可以结束运算了。
此时就得到了我们的subword字典了。

此时我们的pair表就完成了,当进入一个新词时,例如best,我们就通过pair table进行字词的划分,从频率从高到低来进行划分。
首先best开始的时候分为b e s t四个字符
然后对着最右边的表,发现s和t可以合并为一个字符,此时就变为b e st
继续,发现e和st可以合并,此时就变为b est
继续,发现不能并了,就结束了
但是为了我们能够方便地还原初始词,我们可以在字词后面(除了最后一个之外)加入一些特定的字符
例如我们加入@@
那么最后best就划分为b@@ est两部分了。

那么我们得到了字词字典,就弄个embedding来表示字词,词语切分为字词后就能够被表示出来,实验证明这种方法,即能够很好的限制字典大小,也能保证性能正常。

参考

https://www.bilibili.com/video/BV1714y1W7d5/?spm_id_from=333.337.search-card.all.click&vd_source=f57738ab6bbbbd5fe07aae2e1fa1280f

这篇关于适合多种语言的BPE(Byte-Pair Encoding)编码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

VSCode中C/C++编码乱码问题的两种解决方法

《VSCode中C/C++编码乱码问题的两种解决方法》在中国地区,Windows系统中的cmd和PowerShell默认编码是GBK,但VSCode默认使用UTF-8编码,这种编码不一致会导致在VSC... 目录问题方法一:通过 Code Runner 插件调整编码配置步骤方法二:在 PowerShell

Java实现将byte[]转换为File对象

《Java实现将byte[]转换为File对象》这篇文章将通过一个简单的例子为大家演示Java如何实现byte[]转换为File对象,并将其上传到外部服务器,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言1. 问题背景2. 环境准备3. 实现步骤3.1 从 URL 获取图片字节数据3.2 将字节数组

Python如何实现读取csv文件时忽略文件的编码格式

《Python如何实现读取csv文件时忽略文件的编码格式》我们再日常读取csv文件的时候经常会发现csv文件的格式有多种,所以这篇文章为大家介绍了Python如何实现读取csv文件时忽略文件的编码格式... 目录1、背景介绍2、库的安装3、核心代码4、完整代码1、背景介绍我们再日常读取csv文件的时候经常

什么是 Linux Mint? 适合初学者体验的桌面操作系统

《什么是LinuxMint?适合初学者体验的桌面操作系统》今天带你全面了解LinuxMint,包括它的历史、功能、版本以及独特亮点,话不多说,马上开始吧... linux Mint 是一款基于 Ubuntu 和 Debian 的知名发行版,它的用户体验非常友好,深受广大 Linux 爱好者和日常用户的青睐,

如何选择适合孤独症兄妹的学校?

在探索适合孤独症儿童教育的道路上,每一位家长都面临着前所未有的挑战与抉择。当这份责任落在拥有孤独症兄妹的家庭肩上时,选择一所能够同时满足两个孩子特殊需求的学校,更显得尤为关键。本文将探讨如何为这样的家庭做出明智的选择,并介绍星贝育园自闭症儿童寄宿制学校作为一个值得考虑的选项。 理解孤独症儿童的独特性 孤独症,这一复杂的神经发育障碍,影响着儿童的社交互动、沟通能力以及行为模式。对于拥有孤独症兄

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

form表单提交编码的问题

浏览器在form提交后,会生成一个HTTP的头部信息"content-type",标准规定其形式为Content-type: application/x-www-form-urlencoded; charset=UTF-8        那么我们如果需要修改编码,不使用默认的,那么可以如下这样操作修改编码,来满足需求: hmtl代码:   <meta http-equiv="Conte

4-4.Andorid Camera 之简化编码模板(获取摄像头 ID、选择最优预览尺寸)

一、Camera 简化思路 在 Camera 的开发中,其实我们通常只关注打开相机、图像预览和关闭相机,其他的步骤我们不应该花费太多的精力 为此,应该提供一个工具类,它有处理相机的一些基本工具方法,包括获取摄像头 ID、选择最优预览尺寸以及打印相机参数信息 二、Camera 工具类 CameraIdResult.java public class CameraIdResult {