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

tokenizer一些理解

Tokenization 指南:字节对编码,WordPiece等方法Python代码详解
大模型词表扩充必备工具SentencePiece
这两篇文章学完基本能够对tokenizer有一个清晰的认识

计算机要处理语言,首先需要将文本转换成数字形式。这个过程由一个称为标记化 Tokenization。

标记化分为2个过程

1、将输入文本划分为token

标记器首先获取文本并将其分成更小的部分,可以是单词、单词的部分或单个字符。这些较小的文本片段被称为标记。Stanford NLP Group[2]将标记更严格地定义为:

在某些特定的文档中,作为一个有用的语义处理单元组合在一起的字符序列实例。

2、为每个标记分配一个ID

标记器将文本划分为标记后,可以为每个标记分配一个称为标记ID的整数。例如,单词cat被赋值为15,因此输入文本中的每个cat标记都用数字15表示。用数字表示替换文本标记的过程称为编码。类似地将已编码的记号转换回文本的过程称为解码。

使用单个数字表示记号有其缺点,因此要进一步处理这些编码以创建词嵌入,这个不在本文的范围内,我们后面介绍。

标记方法

将文本划分为标记的主要方法有三种:

1. 基于单词

Cats are great, but dogs are better!

通过空格可以拆分为 ['Cats', 'are', 'great,', 'but', 'dogs', 'are', 'better!']
通过分隔标点和可以拆分为['Cats', 'are', 'great', ',', 'but', 'dogs', 'are', 'better', '!']

优缺点:基于单词的方法生成的标记包含高度的信息,因为每个标记都包含语义和上下文信息。但是这种方法最大的缺点之一是非常相似的单词被视为完全独立的标记。例如,cat和cats之间的联系将是不存在的,因此它们将被视为单独的单词。这在包含许多单词的大规模应用程序中成为一个问题,因为模型词汇表中可能出现的标记数量(模型所看到的标记总数)可能会变得非常大。英语大约有17万个单词,就会导致所谓的词汇爆炸问题。这方面的一个例子是TransformerXL标记器,它使用基于空白的分割。这导致词汇量超过25万。

解决这个问题的一种方法是对模型可以学习的标记数量施加硬限制(例如10,000) 。这将把10,000个最常见的标记之外的任何单词分类为词汇表外(OOV),并将标记值分配为UNKNOWN而不是数值(通常缩写为UNK)。在存在许多未知单词的情况下,这会导致性能下降,但如果数据中包含的大多是常见单词,这可能是一种合适的折衷方法。

2. 基于字符

基于字符的标记法根据每个字符拆分文本,包括:字母、数字和标点符号等特殊字符。这大大减少了词汇量的大小,英语可以用大约256个标记来表示,而不是基于单词的方法所需的170,000多个。即使是东亚语言,如汉语和日语,其词汇量也会显著减少,尽管它们的书写系统中包含数千个独特的字符。
Cats are great, but dogs are better!
拆分成
['C', 'a', 't', 's', ' ', 'a', 'r', 'e', ' ', 'g', 'r', 'e', 'a', 't', ',', ' ', 'b', 'u', 't', ' ', 'd', 'o', 'g', 's', ' ', 'a', 'r', 'e', ' ', 'b', 'e', 't', 't', 'e', 'r', '!']
`
优缺点:

与基于单词的方法相比,基于字符的方法的词汇表大小要小得多,而且词汇表外的标记也要少得多。它可以对拼写错误的单词进行标记(尽管与单词的正确形式不同)。

但是这种方法也有一些缺点。使用基于字符的方法生成的单个标记中存储的信息非常少。这是因为与基于单词的方法中的标记不同,没有捕获语义或上下文含义(特别是在使用基于字母的书写系统的语言中,如英语)。这种方法限制了可以输入语言模型的标记化输入的大小,因为需要许多数字来编码输入文本。

3. 基于子词

基于子词的方法采取了折中的方案,将单词中的文本分开,创建具有语义意义的标记,即使它们不是完整的单词。例如,符号ing和ed虽然本身不是单词,但它们具有语法意义。

这种方法产生的词汇表大小小于基于单词的方法,但大于基于字符的方法。对于每个标记中存储的信息量也是如此,它也位于前两个方法生成的标记之间。

只拆分不常用的单词,可以使词形、复数形式等分解成它们的组成部分,同时保留符号之间的关系。例如,cat可能是数据集中非常常见的单词,但cats可能不太常见。

所以cats将被分成cat和s,其中cats现在被赋予与其他所有cats标记相同的值,而s被赋予不同的值,这可以编码复数的含义。另一个例子是单词tokenization,它可以分为词根token和后缀ization。这种方法可以保持句法和语义的相似性。由于这些原因,基于子词的标记器在今天的NLP模型中非常常用。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Centos安装RabbitMQ
  • 站易WordPress
  • 从桌面到云端,2024年智能录屏解决方案全攻略
  • AI 功能上新!用 Einstein Copilot for Tableau 加速商业数据分析全过程
  • 优化Spring Boot应用的启动速度技巧
  • 如何设置英国代理IP地址:一场虚拟旅途的奇妙冒险
  • 文本匹配任务(上)
  • GDB的基本使用
  • 20240821 每日AI必读资讯
  • kws_pdm_record example
  • 【游戏开发】【Unity】如何快速建造人物模型并赋予动画动作
  • 查看一个exe\dll文件的依赖项
  • 效果炫酷的3D翻转书特效WordPress主题模板MagicBook主题v1.19
  • 8月20日
  • Android View的事件分发机制
  • 【Leetcode】101. 对称二叉树
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • 2018一半小结一波
  • 4个实用的微服务测试策略
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • extract-text-webpack-plugin用法
  • gf框架之分页模块(五) - 自定义分页
  • gops —— Go 程序诊断分析工具
  • Python - 闭包Closure
  • Spark RDD学习: aggregate函数
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Tornado学习笔记(1)
  • Travix是如何部署应用程序到Kubernetes上的
  • ucore操作系统实验笔记 - 重新理解中断
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 浮现式设计
  • 高度不固定时垂直居中
  • 简单实现一个textarea自适应高度
  • 力扣(LeetCode)21
  • 马上搞懂 GeoJSON
  • 算法---两个栈实现一个队列
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 白色的风信子
  • AI算硅基生命吗,为什么?
  • 国内开源镜像站点
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ######## golang各章节终篇索引 ########
  • #QT(QCharts绘制曲线)
  • #QT(智能家居界面-界面切换)
  • (16)Reactor的测试——响应式Spring的道法术器
  • (void) (_x == _y)的作用
  • (四)JPA - JQPL 实现增删改查
  • (原)本想说脏话,奈何已放下
  • (转)一些感悟
  • 、写入Shellcode到注册表上线
  • .NET 给NuGet包添加Readme
  • .NET 使用配置文件
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .net下的富文本编辑器FCKeditor的配置方法