一、bytes_to_unicode

def bytes_to_unicode():"""Returns list of utf-8 byte and a corresponding list of unicode strings.The reversible bpe codes work on unicode strings.This means you need a large # of unicode characters in your vocab if you want to avoid UNKs.When you're at something like a 10B token dataset you end up needing around 5K for decent coverage.This is a signficant percentage of your normal, say, 32K bpe vocab.To avoid that, we want lookup tables between utf-8 bytes and unicode strings.And avoids mapping to whitespace/control characters the bpe code barfs on."""bs = list(range(ord("!"), ord("~")+1))+list(range(ord("¡"), ord("¬")+1))+list(range(ord("®"), ord("ÿ")+1))cs = bs[:]n = 0for b in range(2**8):if b not in bs:bs.append(b)cs.append(2**8+n)n += 1cs = [chr(n) for n in cs]return dict(zip(bs, cs))

可能的问题:

 1.Unicod != ACSII,ASCII是Unicode的子集

编码范围说明
ASCII0 ~ 127最早的字符编码,只支持英语字母、数字、标点、控制字符
Unicode0 ~ 1,114,111(约百万个码位)全球通用字符编码,包含了 ASCII 全部内容,还支持中文、日文、表情符号等

2.bs是idx,cs是对应的字符

3.为什么bs里append的是b而cs是2**8+n?

因为bs定义时会跳过一些不安全的控制字符,但是又希望bs是从0到255没有空缺,所以在cs中就会用安全的ASCII码之外的字符代替

4.cs = bs[:]

语法解释
cs = bs两个变量指向 同一个列表,修改一个会影响另一个(引用赋值)
cs = bs[:]

复制了一个 新的列表,内容一样,但两个变量互不影响(浅拷贝)

5.一些函数

问题解答
ord()字符 → Unicode 整数,比如 ord('A') = 65
chr()Unicode 整数 → 字符,比如 chr(65) = 'A'
dict(zip(bs, cs))把两个列表配对,创建 字节 → 字符 的映射字典

 二、get_pairs

def get_pairs(word):"""Return set of symbol pairs in a word.Word is represented as tuple of symbols (symbols being variable-length strings)."""pairs = set()prev_char = word[0]for char in word[1:]:pairs.add((prev_char, char))prev_char = charreturn pairs

这里应该好理解,就是给定一个由多个符号(symbol)组成的单词(word),返回它所有相邻符号对的集合。下面是举例:

word = ('ab', 'cd', 'e')
get_pairs(word)
→ {('ab', 'cd'), ('cd', 'e')}

三、basic_clean + whitespace_clean

函数或方法作用示例输入示例输出备注
ftfy.fix_text(text)修复 Unicode 编码错误、替换乱码字符"“hello”""“hello”"修复网页/数据库导出乱码最常用
html.unescape(text)将 HTML 实体编码还原为正常字符"&lt;div&gt;""<div>"常用于网页文本解析
text.strip()去除字符串前后的空白字符(包括 \n, \t, 空格)" hello world \n""hello world"不影响中间空格
re.sub(r'\s+', ' ', text)将所有连续的空白字符替换为一个空格"This\nis\t\ta test""This is a test"中间所有空白都变成一个普通空格

 四、bpe

word = tuple(token[:-1]) + (token[-1] + '</w>',)

举例:token = 'low'('l', 'o', 'w</w>')

为什么不是word = tuple(token) + ( '</w>',),这样的话就会把最后一个字符和'</w>'分开,导致无法标志单词结束的位置

pairs = get_pairs(word)

举例:('l', 'o', 'w</w>'){('l','o'), ('o','w</w>')}

if not pairs:return token+'</w>'

举例: 

输入 token处理后 wordpairs输出
"a"('a</w>',)set()(空集)"a</w>"

 下面用“lowered”来举例bpe的完整过程:

轮次当前 word合并的 bigram合并后结果
1('l','o','w','e','r','e','d</w>')('l','o')('lo','w','e','r','e','d</w>')
2('lo','w','e','r','e','d</w>')('lo','w')('low','e','r','e','d</w>')
3('low','e','r','e','d</w>')('e','r')('low','er','e','d</w>')
4('low','er','e','d</w>')⛔无匹配循环结束

 

    def bpe(self, token):if token in self.cache:return self.cache[token]word = tuple(token[:-1]) + (token[-1] + '</w>',)pairs = get_pairs(word)if not pairs:return token+'</w>'while True:bigram = min(pairs, key = lambda pair: self.bpe_ranks.get(pair, float('inf')))if bigram not in self.bpe_ranks:breakfirst, second = bigramnew_word = []i = 0while i < len(word):try:j = word.index(first, i)new_word.extend(word[i:j])i = jexcept:new_word.extend(word[i:])breakif word[i] == first and i < len(word)-1 and word[i+1] == second:new_word.append(first+second)i += 2else:new_word.append(word[i])i += 1new_word = tuple(new_word)word = new_wordif len(word) == 1:breakelse:pairs = get_pairs(word)word = ' '.join(word)self.cache[token] = wordreturn word

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

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

相关文章

【如何判断Linux系统是Ubuntu还是CentOS】

要确定您的操作系统是 Ubuntu 还是 CentOS&#xff0c;可以通过以下方法快速检查&#xff1a; 方法 1&#xff1a;通过终端命令&#xff08;推荐&#xff09; 在终端中执行以下命令之一&#xff1a; 查看 /etc/os-release 文件 cat /etc/os-releaseUbuntu 特征&#xff1a;显示…

RISCV Linux 虚拟内存精讲系列二 -- Linux 入口 head.S

通过 Linux 的构建系统&#xff0c;即 Linux 源代码的根目录下的 Makefile&#xff0c;能够找到 vmlinux 的链接文件&#xff0c;从而能够查看其入口代码 head.S:_start&#xff0c; 如下&#xff1a; Linux 构建系统主Makefile: vmlinux.lds: head.S: 找到该入口后&#xff0c…

springAI学习:Advisors

spring AI Advisors类似于拦截器&#xff0c;会对请求的prompt做出特定的修改和增强&#xff08;比如传入历史沟通记录、搜索信息等等&#xff09;&#xff0c;以达到完善prompt的目的。通过Advisors API&#xff0c;开发人员可以创建更为复杂、可重用、可维护的AI组件。下面介…

MySQL CDC与Kafka整合指南:构建实时数据管道的完整方案

一、引言&#xff1a;现代数据架构的实时化需求 在数字化转型浪潮中&#xff0c;实时数据已成为企业的核心资产。传统批处理ETL&#xff08;每天T1&#xff09;已无法满足以下场景需求&#xff1a; 实时风险监控&#xff08;金融交易&#xff09;即时个性化推荐&#xff08;电商…

MATLAB | 绘图复刻(二十一)| 扇形热图+小提琴图

前段时间在小红书刷到了一个很有特色的热力图&#xff0c;由大佬滚筒洗衣机创作&#xff0c;感觉很有意思&#xff0c;尝试 MATLAB 复刻&#xff1a; 作者使用的是 python 代码&#xff0c;赶快去瞅瞅。 复刻效果 正文部分 0.数据准备 数据需要一个用来画热图的矩阵以及一个…

批量PDF转换工具,一键转换Word Excel

软件介绍 今天为大家推荐一款高效的Office文档批量转换工具&#xff0c;能够快速将Word和Excel文件批量转换为PDF格式。 软件特点 这款名为"五五Excel word批量转PDF"的工具体积小巧&#xff0c;不到2M大小&#xff0c;却能实现强大的批量转换功能&#xff0c…

面试150 基本计算器

思路 利用栈&#xff08;stack&#xff09;来保存进入括号前的计算状态&#xff08;包括当前计算结果和符号&#xff09;&#xff0c;以便在括号结束后正确恢复计算上下文。代码通过遍历字符串&#xff0c;识别数字、加号、减号和括号。遇到数字时构造完整数值&#xff1b;遇到…

源哈希(sh)解析

源哈希&#xff08;Source Hashing&#xff09;是一种负载均衡算法&#xff0c;它根据请求的源 IP 地址&#xff08;或其他标识符&#xff09;生成哈希值&#xff0c;然后根据这个哈希值将请求分配到特定的后端服务实例。这种方法常用于确保来自同一客户端的请求始终被路由到同…

axios的使用以及封装

前言&#xff1a; 在现代前端开发中&#xff0c;网络请求是不可避免的核心功能之一。无论是获取后端数据、提交表单信息&#xff0c;还是与第三方 API 交互&#xff0c;高效且可靠的 HTTP 请求库至关重要。axios 作为一款基于 Promise 的 HTTP 客户端&#xff0c;凭借其简洁的 …

github上部署自己的静态项目

前置知识1、要在github部署项目要提交打包后的静态文件(html,css&#xff0c;js)到仓库里2、我们看下github所提供给我们的部署方式有啥&#xff0c;如下所见&#xff1b;要么是/root文件夹&#xff08;就说仓库里全是打包后的产物&#xff1a;html,css&#xff0c;js要全部放到…

能源管理综合平台——分布式能源项目一站式监控

综合性的能源企业管理面临着项目多、分布散、信息孤岛等问题&#xff0c;分布式的多项目能源在线监控管理平台是一种集成了多个能源项目的数据采集、监控、分析和管理的系统。平台集成GIS能力&#xff0c;能够展示项目的整体分布态势&#xff0c;对不同地点、不同类型的能源项目…

修改阿里云vps为自定义用户登录

win系统上找到控制面板-->用户账户-->更改账户类型点击更改账户类型&#xff0c;此时我们看到vps的默认管理员账户Administrator。为了防止vps被别人使用默认账户Administrator攻击&#xff0c;我们添加一个用户账户&#xff0c;点击添加用户账户。 用户名建议奇葩点&…

Linux: perf: debug问题一例,cpu使用率上升大约2%;多线程如何细化cpu及perf数据分析

文章目录 前提面临的问题内核级别函数的差别继续debug总结根据pid前提 一个进程安置在一个CPU上,新功能上线之后,固定量的业务打起来,占用的CPU是42%。之前没有新功能的情况下,CPU占用是40%。差了大约2%。而且这个进程里的线程数非常多,有50多个线程。从差距看变化不大,…

计算阶梯电费

实现一个 Python 程序&#xff0c;根据使用的电量&#xff08;从控制台中让用户输入&#xff09;计算需要交的电费&#xff0c;电量分为两个阶梯&#xff0c;小于 200 度和大于 200 度&#xff0c;如果电量小于等于 200 度&#xff0c;电价就是 0.5 元/度&#xff0c;如果电量大…

替代MT6701,3D 霍尔磁性角度传感器芯片

KTH5502 是一款基于垂直霍尔技术的高精度绝对角度传感器芯片&#xff0c;支持全角度&#xff08;0–360&#xff09;测量。 芯片内部集成 X、Y 轴的垂直霍尔元件和 Z 轴的水平霍尔元件&#xff0c;能够同时感知磁场在 X、Y、Z 三个 方向的变化。得益于垂直霍尔技术优异的正交匹…

华为 Mate 80 影像配置揭秘:硬软双升

7 月 7 日&#xff0c;知名数码博主爆料了华为 Mate 80 系列的影像配置&#xff0c;引发广泛关注。从曝光信息来看&#xff0c;Mate 80 系列在影像方面延续华为的技术探索&#xff0c;通过硬件升级与算法优化&#xff0c;力图为用户带来更出色的拍摄体验。​ 爆料显示&#xff…

Android studio升级AGP需要注意哪些

deep seek回答&#xff1a; 深度思考完成 用时26秒 嗯&#xff0c;用户询问的是在Android Studio中升级AGP需要注意哪些事项。这个问题很实用&#xff0c;因为AGP升级确实是个容易踩坑的过程。让我看看搜索结果里有什么关键信息。 首先注意到搜索结果里有几个高可信度的资料专…

MapReduce数据处理过程2万字保姆级教程

目录 1. MapReduce 的核心思想:分而治之的艺术 2. Hadoop MapReduce 的架构:从宏观到微观 3. WordCount 实例:从代码到执行的完整旅程 4. 源码剖析:Job.submit 的魔法 5. Map 任务的执行:从分片到键值对 6. Shuffle 阶段:MapReduce 的幕后英雄 7. Reduce 任务的执行…

Rust单例模式:OnceLock的使用指南

想象一下你在构建一个需要全局数据库连接的Rust应用。传统语言里&#xff0c;单例模式常常伴随着锁的沉重和初始化竞态的焦虑。但在Rust的世界里&#xff0c;OnceLock就像个轻巧的守门人&#xff0c;只允许一次安全的通行。 简洁的OnceLock实现 看看这段代码如何优雅地解决单…

JavaScript性能优化实战:表格控件高效开发指南

引言 在现代Web应用开发中&#xff0c;电子表格功能已成为数据分析、报表展示等场景的核心需求。SpreadJS作为一款高性能的纯前端电子表格控件&#xff0c;能够完美兼容Excel文件格式&#xff0c;支持百万级数据量和复杂公式计算。然而随着数据规模的增长和业务逻辑的复杂化&a…