首页 > 其他分享 >Token vs 单词

Token vs 单词

时间:2023-10-29 12:44:18浏览次数:30  
标签:字符 模型 单词 Token vs 分词 向量

要让LLMs(Large Language Models,大型语言模型)生成文字,首先得让它们“懂”单词。

单词首先会被拆分为 Tokens(一种能够被编码的基础单元)。在不同的语言模型和分词系统中,Token的定义和分割方法可能会有所不同。

绝大多数情况下,一个单词对应一个Token,但是也有很多情况不能一一对应。

单词跟Token无法一一对应的场景

以下是几种常见的不能一一对应的情况:

子词分词(Subword Tokenization):

在一些语言模型中,例如BERT和GPT系列模型,采用了子词分词策略,如WordPiece、SentencePiece或Byte Pair Encoding (BPE)等。在这些分词方法中,一个单词可能会被分割成几个子词tokens。

例如,单词 "unhappiness" 可能会被分割成三个tokens:“un”、“happiness”和"##ness"。

这种方式可以让机器学习到词根、前缀和后缀等词汇结构,从而更好地理解单词的语义和结构。

字符级分词(Character-level Tokenization):

在字符级分词中,每个字符都被视为一个单独的token。例如,单词 "hello" 会被分割成五个tokens:“h”、“e”、“l”、“l”和“o”。

这种分词方法适用的场景如下:

1、语言模型的基础训练:

在一些基础的语言模型训练任务中,字符级分词可以帮助模型从基础开始学习语言的结构和规律。通过这种方法,模型可以从字符的组合中学习到单词和短语的构成规则。

2、处理未知或稀有单词:

字符级分词可以帮助模型更好地处理未见过或稀有的单词。

通过学习字符间的关系和组合规律,模型可以在面对未知单词时做出更好的预测。

3、处理拼写错误:

当文本中存在拼写错误时,字符级分词可以帮助模型识别和纠正这些错误。

因为模型可以看到单词的每个字符,所以它可以识别出可能的拼写错误并提出修正建议。

小节

字符级分词通常会产生更小的词汇表,这可以减小模型的大小和提高计算效率。

然而,这也可能会导致模型需要处理更长的序列,因此在实际应用中,需要根据具体的任务需求和条件来选择最适合的分词策略。

多字词分词(Multi-word Tokenization):

在某些情况下,一些语言模型可能会将多个单词或短语视为一个单独的token。

例如,"New York" 可能会被视为一个单独的token,而不是两个单独的tokens。

特殊字符和标点符号:

标点符号和特殊字符通常会被视为独立的tokens。

例如,句子 "I love AI." 会被分成四个tokens:“I”、“love”、“AI”和“.”

非拉丁语系的语言:

对于非拉丁语系的语言,如中文、日文和韩文等,token和单词之间的对应关系可能会更加复杂。

例如,在中文中,每个字符通常会被视为一个单独的token,但每个字符并不总是一个单独的单词。

特殊的分词标记:

在处理文本时,某些特殊的分词标记(例如,[CLS]、[SEP]等)也会被插入到token序列中,但这些标记并不对应任何实际的单词。

[CLS](Classification)标记:

[CLS] 是 Classification 的缩写,通常用于序列分类任务。

  • 在模型的输入序列的开始位置插入 [CLS] 标记。
  • 在训练和应用模型时,[CLS] 标记的输出向量通常被用作整个序列的聚合表示,用于分类任务。
  • 例如,在情感分析任务中,[CLS] 标记的输出向量可能会被用来预测文本的情感(如正面或负面)。

[SEP](Separator)标记:

[SEP] 是 Separator 的缩写,用于分隔模型输入中的不同部分。

  • 在处理两个或多个独立序列时(例如,在问答或自然语言推理任务中),[SEP] 标记用于分隔这些序列。
  • 通过插入 [SEP] 标记,模型可以更好地理解输入序列中各部分之间的关系和界限。

小节

不同需求场景下,我们选择了不同的分词策略,继而出现了不同的Token跟单词的关系。

正确的分词策略对于提高模型效能至关重要,它构成了连接人类语言与计算机理解的桥梁,为自然语言处理技术奠定了基础。

Token如何表示单词的多种含义?

Token在大型语言模型中是通过多维向量来表示的。这些向量可以捕捉单词的多种含义和上下文信息。

例如,单词"bank"可以指河岸也可以指金融机构。在不同的上下文中,"bank"的向量表示会有所不同,从而能够区分它的不同含义。

一个单词的多维向量是通过神经网络模型的训练过程得到的。每个维度的值不是直接为特定的语义或句法特性分配的,而是在模型训练的过程中学习到的

虽然这些向量能够捕捉单词的语义和上下文信息,但每个维度的具体语义往往是不透明的。也就是说,我们很难直接解释某个维度的值代表了什么具体的语义或句法特性。

让我们用一个比喻来解释这个问题:

想象你有一个神秘的魔法盒子,这个盒子可以制作美味的蛋糕。你投入各种原料,比如面粉、糖、鸡蛋等,然后盒子就会自动混合、烘烤,最后输出一个蛋糕。

现在,盒子里有很多小旋钮,每个旋钮都可以调整制作蛋糕的某个环节。一开始,你并不知道每个旋钮的具体功能。但经过多次试验,你发现调整某个旋钮会使蛋糕更松软,调整另一个旋钮会使蛋糕更甜。

这些旋钮就像词向量中的每个维度。我们不一定知道每个旋钮(维度)具体控制什么,但我们知道调整它们会影响最终的结果(单词的语义表示)。
通过训练,模型就像是在不断地尝试和调整,找到最佳的旋钮组合,使得蛋糕(单词的表示)达到最佳的味道(语义)。

所以,尽管我们很难直接解释每个维度的具体意义,但我们知道整体的向量能够很好地表示单词的语义,并在实际任务中表现出色。

总结

大型语言模型中的Token是连接人类语言与计算机理解的桥梁。

不同的分词策略决定了模型如何解析与编码文本,进而影响模型的整体效能。

正确选择分词策略,不仅能够确保信息的完整性,还能优化模型的计算效率。

而Token的多维向量表示则允许模型深入捕获词汇在各种语境下的丰富语义,使其在实际任务中具有更高的灵活性和准确性。

这种表达方式虽难以逐一解释,但其价值在于为模型提供了广泛的上下文敏感性,成为自然语言处理技术的核心组成部分。

标签:字符,模型,单词,Token,vs,分词,向量
From: https://www.cnblogs.com/ghj1976/p/token-vs-dan-ci.html

相关文章

  • Ethernet vs. EtherCAT
    Ethernet也就是以太网,算是一种链路层的协议(IEEE802.3)。如下图所示,链路层datalinklayer位于网络层和物理层中间。因此链路层的基本服务是将数据报通过单一通信链路从一个节点移动到相邻节点,但所提供的服务细节取决于链路层协议。链路层协议能够提供的可能服务包括:1.成帧frami......
  • vscode 安装了clang之后 即使卸载也没有跳转功能记录
     借鉴这位博主  【精选】VSCodeC/C++无法跳转到定义、自动补全、悬停提示功能_c/c++:editconfigurations(json)-CSDN博客 (上图高亮部分)卸载clang 重启VSCode 然后IntelliSenseEngine开关设置为Default 应该就可以了 ......
  • VS and C++ Versions
    VS版本VC版本ToolSet版本MSC版本VisualStudio66 1200VisualStudio20037 1300VisualStudio20058801400VisualStudio20089901500VisualStudio2010101001600VisualStudio2012111101700VisualStudio2013121201800......
  • 如何遍历字符串的单词?
    内容来自DOChttps://q.houxu6.top/?s=如何遍历字符串的单词?如何遍历由空格分隔的单词组成的字符串中的单词?请注意,我对C字符串函数或那种字符操作/访问不感兴趣。我更喜欢优雅而不是效率。我目前的解决方法:#include<iostream>#include<sstream>#include<string>using......
  • vscode 创建代码片段
    1vscode左下角设置>命令面板2输入snippets3选择新建全局代码片段文件4输入文件名称xxx.json(例如:vue-setup-less.json)5设置模板并保存快捷生成模板地址点击跳转......
  • 用go封装一下临时token
    用go封装一下临时token本篇为用go设计开发一个自己的轻量级登录库/框架吧的临时token篇,会讲讲临时token的实现,给库/框架增加新的功能。Github:https://github.com/weloe/token-go临时token也算是比较常见的业务,例如登录验证码信息,邀请链接等等,都属于临时token的范畴。在token-......
  • MicroSIP-3.21.3+pjproject-2.13.1+ opus-1.3.1+VS2019
    本文记录了我通过VS2019编译MicroSIP-3.21.3开源项目的过程。Microsip:MicroSIPsourcecodepjproject:DownloadPJSIP-OpenSourceSIP,Media,andNATTraversallibraryopus:Downloads–OpusCodec(opus-codec.org)下载并解压后如图: 用vs2019将microsip的平......
  • ​​leet code 30.串联所有单词的子串
    leetcode30.串联所有单词的子串题目描述给定一个字符串s 和一个字符串数组words。words中所有字符串长度相同。s中的串联子串是指一个包含words中所有字符串以任意顺序排列连接起来的子串。例如,如果words=["ab","cd","ef"],那么"abcdef","abefcd","cdabef","cdefa......
  • LVS、Nginx、HAproxy区别与选择
    LVS:是LinuxVirtualServer的缩写,是一种基于Linux内核实现的高可用性、高性能的负载均衡技术 ;是基于四层的转发;Nginx:既是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发HAproxy:是基于四层和七层的转发,是专业的代理服务器;区别:LVS由于是基于四层的转发所以只能做端口......
  • 文心一言+pycharm添加自己的单词本插件
    学习教程:https://yiyan.baidu.com/developer/doc#Dllaifmrc我的单词本插件:必坑:python的版本一定要在3.7以上 ......