tokenpocketapp官方下载链接安装|tokens
什么是Token?ChatGPT 中 Token 的概念解读:理解模型输入的基本单位 - 知乎
什么是Token?ChatGPT 中 Token 的概念解读:理解模型输入的基本单位 - 知乎切换模式写文章登录/注册什么是Token?ChatGPT 中 Token 的概念解读:理解模型输入的基本单位一笑辽宁科技大学 控制科学与工程博士在读在自然语言处理领域中,机器学习模型通常以 token 作为其输入单位。对于 ChatGPT 这样的大型语言模型,了解 token 的概念是理解模型工作原理的关键。一、Token是文本中的最小单位Token 可以被理解为文本中的最小单位。在英文中,一个 token 可以是一个单词,也可以是一个标点符号。在中文中,通常以字或词作为 token。ChatGPT 将输入文本拆分成一个个 token,使模型能够对其进行处理和理解。二、词汇表映射方式对于模型而言,token 是一种数字化的表示形式。每个 token 都与一个唯一的数字 ID 相关联,模型通过这些 ID 来区分不同的 token。在训练过程中,模型学习了将文本映射到这些数字 ID 的方法,以便能够对新的文本进行编码和解码。下面是具体过程(不感兴趣可跳过)这个过程可以通过一种称为词汇表(vocabulary)的映射方式实现。词汇表是一个由模型事先建立的映射表,将每个可能的 token 映射到一个唯一的数字 ID。例如,对于英文单词,一个词汇表可能包含诸如 "hello"、"world"、"chat" 等单词,并为每个单词分配一个唯一的数字 ID。当输入文本被拆分成 token 之后,模型会查找每个 token 在词汇表中的对应 ID,并用这些 ID 来表示输入文本。具体来说,拆分文本为 token 的方式可以根据任务和模型的需求而有所不同。一种常见的方式是通过空格或标点符号来分割文本,将每个单词作为一个 token。然而,对于一些语言,如中文,分词是一个更复杂的过程,需要考虑词和字符之间的关系。一旦输入文本被转换为数字 ID 的序列,模型就可以将其作为输入进行处理。这些数字 ID 可以被表示为向量形式,例如使用独热编码(one-hot encoding)或者更常见的词嵌入(word embedding)表示方法。词嵌入将每个 token 表示为一个连续的向量,其中每个维度代表了某种语义特征。在处理 token 时,模型可以通过逐个 token 的方式进行操作,或者通过考虑 token 之间的关系来获取更多的上下文信息。这取决于具体的模型架构和任务要求。总结而言,ChatGPT 将输入文本拆分为 token,并使用词汇表将每个 token 映射为数字 ID。这种表示形式使得模型能够对文本进行处理和理解,并能够通过学习 token 之间的关系来获取更多的语义信息。三、为什么Token有长度限制模型的输入有一个固定的最大长度限制。当输入文本超过这个限制时,必须进行截断或者其他处理方式来适应模型的要求。这就意味着长文本可能会被分割成多个部分,每个部分成为一个 token 序列。模型有长度限制是由于计算资源和内存限制的存在。大型语言模型如 ChatGPT 包含了数亿甚至数十亿个参数,需要大量的计算资源和内存来运行。为了实现高效的训练和推理,模型的输入必须受到限制。限制输入长度有以下几个原因:计算资源:处理长序列需要更多的计算资源和内存。随着输入长度的增加,模型的计算量也随之增加。为了保证模型能够在合理的时间内完成计算,设置一个最大长度限制是必要的。内存限制:模型的内存资源是有限的。将长序列完整地加载到内存中可能会超出可用的内存容量。通过限制输入长度,可以确保模型能够适应内存的限制并有效地进行计算。训练效果:长序列通常会引入更多的噪声和冗余信息,同时增加模型的复杂度。这可能导致训练过程变得更加困难和低效。通过限制输入长度,可以使训练更加集中和高效,有助于提高模型的性能。四、特殊token在处理 token 时,一些特殊的 token 也起着重要的作用。例如,起始 token(start token)和结束 token(end token)用于指示对话或文本的开头和结尾。模型可以通过这些特殊的 token 来生成连贯的输出。此外,还有一些特殊的 token,如填充 token(padding token)和掩码 token(mask token),用于扩展输入序列的长度或在序列中标记不需要进行处理的部分。总结总结起来,token 是机器学习模型在自然语言处理任务中的输入单位。ChatGPT 将文本拆分成 token 序列,并通过数字 ID 来表示每个 token。理解 token 的概念可以帮助我们更好地了解模型如何处理和理解文本输入。希望这篇博客能帮助你更好地理解 ChatGPT 中的 token 概念!如有需要,可以进一步展开讨论和探索这个话题,留言即可。发布于 2023-05-17 17:24・IP 属地日本tokenOpenAIChatGPT赞同 842 条评论分享喜欢收藏申请
NLP领域中的token和tokenization到底指的是什么? - 知乎
NLP领域中的token和tokenization到底指的是什么? - 知乎首页知乎知学堂发现等你来答切换模式登录/注册机器学习自然语言处理语言学NLP领域中的token和tokenization到底指的是什么?这是一个非常简单的基本概念问题,但作为小白,真的不太清晰显示全部 关注者267被浏览712,608关注问题写回答邀请回答好问题 22添加评论分享27 个回答默认排序Glan格蓝武汉大学 工学硕士 关注前面都讲了是指什么,我来浅答一下目前大模型时代分词是怎么做的☺️,主要内容为WordPiece,Byte-Pair Encoding (BPE),Byte-level BPE(BBPE)分词方法的原理以及其代码实现,全篇阅读可能需要45分钟,建议收藏~Tokenization(分词) 在自然语言处理(NLP)的任务中是最基本的一步,把文本内容处理为最小基本单元即token(标记,令牌,词元,没有准确的翻译)用于后续的处理,如何把文本处理成token呢?有一系列的方法,基本思想是构建一个词表通过词表一一映射进行分词,但如何构建合适的词表呢?以下以分词粒度为角度进行介绍:1.word(词)粒度在英文语系中,word(词)级别分词实现很简单,因为有天然的分隔符。在中文里面word(词)粒度,需要一些分词工具比如jieba,以下是中文和英文的例子:中文句子:我喜欢看电影和读书。
分词结果:我 | 喜欢 | 看 | 电影 | 和 | 读书。
英文句子:I enjoy watching movies and reading books.
分词结果:I | enjoy | watching | movies | and | reading | books.word(词)粒度的优点有:语义明确:以词为单位进行分词可以更好地保留每个词的语义,使得文本在后续处理中能够更准确地表达含义。上下文理解:以词为粒度进行分词有助于保留词语之间的关联性和上下文信息,从而在语义分析和理解时能够更好地捕捉句子的意图。缺点:长尾效应和稀有词问题: 词表可能变得巨大,包含很多不常见的词汇,增加存储和训练成本,稀有词的训练数据有限,难以获得准确的表示。OOV(Out-of-Vocabulary): 词粒度分词模型只能使用词表中的词来进行处理,无法处理词表之外的词汇,这就是所谓的OOV问题。形态关系和词缀关系: 无法捕捉同一词的不同形态,也无法有效学习词缀在不同词汇之间的共通性,限制了模型的语言理解能力,比如love和loves在word(词)粒度的词表中将会是两个词。2.char(字符)粒度以字符为单位进行分词,即将文本拆分成一个个单独的字符作为最小基本单元,这种字符粒度的分词方法适用于多种语言,无论是英文、中文还是其他不同语言,都能够一致地使用字符粒度进行处理,因为英文就26个字母以及其他的一些符号,中文常见字就6000个左右。中文句子:我喜欢看电影和读书。
分词结果:我 | 喜 | 欢 | 看 | 电 | 影 | 和 | 读 | 书 | 。
英文句子:I enjoy watching movies and reading books.
分词结果:I | | e | n | j | o | y | | w | a | t | c | h | i | n | g | | m | o | v | i | e | s | | a | n | d | | r | e | a | d | i | n | g | | b | o | o | k | s | .char(字符)粒度的优点有:统一处理方式:字符粒度分词方法适用于不同语言,无需针对每种语言设计不同的分词规则或工具,具有通用性。解决OOV问题:由于字符粒度分词可以处理任何字符,无需维护词表,因此可以很好地处理一些新创词汇、专有名词等问题。缺点:语义信息不明确:字符粒度分词无法直接表达词的语义,可能导致在一些语义分析任务中效果较差。处理效率低:由于文本被拆分为字符,处理的粒度较小,增加后续处理的计算成本和时间。3.subword(子词)粒度在很多情况下,既不希望将文本切分成单独的词(太大),也不想将其切分成单个字符(太小),而是希望得到介于词和字符之间的子词单元。这就引入了 subword(子词)粒度的分词方法。在BERT时代,WordPiece 分词方法被广泛应用[1],比如 BERT、DistilBERT等。WordPiece 分词方法是 subword(子词)粒度的一种方法。3.1 WordPieceWordPiece核心思想是将单词拆分成多个前缀符号(比如BERT中的##)最小单元,再通过子词合并规则将最小单元进行合并为子词级别。例如对于单词"word",拆分如下:w ##o ##r ##d然后通过合并规则进行合并,从而循环迭代构建出一个词表,以下是核心步骤:计算初始词表:通过训练语料获得或者最初的英文中26个字母加上各种符号以及常见中文字符,这些作为初始词表。计算合并分数:对训练语料拆分的多个子词单元通过合拼规则计算合并分数。合并分数最高的子词对:选择分数最高的子词对,将它们合并成一个新的子词单元,并更新词表。重复合并步骤:不断重复步骤 2 和步骤 3,直到达到预定的词表大小、合并次数,或者直到不再有有意义的合并(即,进一步合并不会显著提高词表的效益)。分词:使用最终得到的词汇表对文本进行分词。简单举例[1]:我们有以下的训练语料中的样例,括号中第2位为在训练语料中出现的频率:("hug", 10), ("pug", 5), ("pun", 12), ("bun", 4), ("hugs", 5)我们对其进行拆分为带前缀的形式:("h" "##u" "##g", 10), ("p" "##u" "##g", 5), ("p" "##u" "##n", 12), ("b" "##u" "##n", 4), ("h" "##u" "##g" "##s", 5)所以这些样例的初始词表将会是:["b", "h", "p", "##g", "##n", "##s", "##u"]接下来重要的一步进行计算合并分数,也称作互信息(信息论中衡量两个变量之间的关联程度[2]),简单来说就是以下公式来计算score=(freq_of_pair)/(freq_of_first_element×freq_of_second_element)
分数 = 合并pair候选的频率 / (第一个元素的频率 × 第二个元素的频率)对于上述样例中这个pair("##u", "##g")出现的频率是最高的20次,但是"##u"出现的频率是36次, "##g"出现的频率是20次,所以这个pair("##u", "##g")的分数是(20)/(36*20) = 1/36,同理计算这个pair("##g", "##s")的分数为(5)/(20*5) = 1/20,所以最先合并的pair是("##g", "##s")→("##gs")。此时词表和拆分后的的频率将变成以下:Vocabulary: ["b", "h", "p", "##g", "##n", "##s", "##u", "##gs"]
Corpus: ("h" "##u" "##g", 10), ("p" "##u" "##g", 5), ("p" "##u" "##n", 12), ("b" "##u" "##n", 4), ("h" "##u" "##gs", 5)重复上述的操作,直到达到你想要的词表的大小Vocabulary: ["b", "h", "p", "##g", "##n", "##s", "##u", "##gs", "hu", "hug"]
Corpus: ("hug", 10), ("p" "##u" "##g", 5), ("p" "##u" "##n", 12), ("b" "##u" "##n", 4), ("hu" "##gs", 5)代码实现:用一些包含中英文的文本作为训练语料,因为英文有天然的分隔符,所以在这个例子中,中文已经进行了分词:sentences = [
"我",
"喜欢",
"吃",
"苹果",
"他",
"不",
"喜欢",
"吃",
"苹果派",
"I like to eat apples",
"She has a cute cat",
"you are very cute",
"give you a hug",
]统计每个词出现的频率并初始化初始词表:from collections import defaultdict
# 构建频率统计
def build_stats(sentences):
stats = defaultdict(int)
for sentence in sentences:
symbols = sentence.split()
for symbol in symbols:
stats[symbol] += 1
return stats
stats = build_stats(sentences)
print("stats:", stats)
alphabet = []
for word in stats.keys():
if word[0] not in alphabet:
alphabet.append(word[0])
for letter in word[1:]:
if f"##{letter}" not in alphabet:
alphabet.append(f"##{letter}")
alphabet.sort()
# 初始词表
vocab = alphabet.copy()
print("alphabet:", alphabet)
# 结果
stats: defaultdict(
# 初始词表
alphabet: ['##a', '##e', '##g', '##h', '##i', '##k', '##l', '##o', '##p', '##r', '##s', '##t', '##u', '##v', '##y', '##果', '##欢', '##派', 'I', 'S', 'a', 'c', 'e', 'g', 'h', 'l', 't', 'v', 'y', '不', '他', '吃', '喜', '我', '苹']根据初始词表拆分每个词:splits = {
word: [c if i == 0 else f"##{c}" for i, c in enumerate(word)]
for word in stats.keys()
}
print("splits:", splits)
# 结果
splits: {'我': ['我'], '喜欢': ['喜', '##欢'], '吃': ['吃'], '苹果': ['苹', '##果'], '他': ['他'], '不': ['不'], '苹果派': ['苹', '##果', '##派'], 'I': ['I'], 'like': ['l', '##i', '##k', '##e'], 'to': ['t', '##o'], 'eat': ['e', '##a', '##t'], 'apples': ['a', '##p', '##p', '##l', '##e', '##s'], 'She': ['S', '##h', '##e'], 'has': ['h', '##a', '##s'], 'a': ['a'], 'cute': ['c', '##u', '##t', '##e'], 'cat': ['c', '##a', '##t'], 'you': ['y', '##o', '##u'], 'are': ['a', '##r', '##e'], 'very': ['v', '##e', '##r', '##y'], 'give': ['g', '##i', '##v', '##e'], 'hug': ['h', '##u', '##g']}根据上述提到的计算互信息的分数公式进行计算:def compute_pair_scores(splits):
letter_freqs = defaultdict(int)
pair_freqs = defaultdict(int)
for word, freq in stats.items():
split = splits[word]
if len(split) == 1:
letter_freqs[split[0]] += freq
continue
for i in range(len(split) - 1):
pair = (split[i], split[i + 1])
letter_freqs[split[i]] += freq
pair_freqs[pair] += freq
letter_freqs[split[-1]] += freq
scores = {
pair: freq / (letter_freqs[pair[0]] * letter_freqs[pair[1]])
for pair, freq in pair_freqs.items()
}
return scores
pair_scores = compute_pair_scores(splits)
for i, key in enumerate(pair_scores.keys()):
print(f"{key}: {pair_scores[key]}")
if i >= 5:
break一些结果:('喜', '##欢'): 0.5
('苹', '##果'): 0.5
('##果', '##派'): 0.5
('l', '##i'): 0.5
('##i', '##k'): 0.5
('##k', '##e'): 0.125我们需要的是将分数最高的进行合并然后开始循环迭代,看一看分数最高的pair(子词对):best_pair = ""
max_score = None
for pair, score in pair_scores.items():
if max_score is None or max_score < score:
best_pair = pair
max_score = score
print(best_pair, max_score)
# 结果
('S', '##h') 1.0结果为('S', '##h') 1.0,所以最先合成的就是('S', '##h')→'##Sh',合并的函数如下:def merge_pair(a, b, splits):
for word in stats:
split = splits[word]
if len(split) == 1:
continue
i = 0
while i < len(split) - 1:
if split[i] == a and split[i + 1] == b:
merge = a + b[2:] if b.startswith("##") else a + b
split = split[:i] + [merge] + split[i + 2 :]
else:
i += 1
splits[word] = split
return splits最后就是一直进行循环迭代,直到vocab达到了我们想要的数量vocab_size = 50
while len(vocab) < vocab_size:
scores = compute_pair_scores(splits)
best_pair, max_score = "", None
for pair, score in scores.items():
if max_score is None or max_score < score:
best_pair = pair
max_score = score
splits = merge_pair(*best_pair, splits)
new_token = (
best_pair[0] + best_pair[1][2:]
if best_pair[1].startswith("##")
else best_pair[0] + best_pair[1]
)
vocab.append(new_token)
print("vocab:", vocab)
# 结果
vocab: ['##a', '##e', '##g', '##h', '##i', '##k', '##l', '##o', '##p', '##r', '##s', '##t', '##u', '##v', '##y', '##果', '##欢', '##派', 'I', 'S', 'a', 'c', 'e', 'g', 'h', 'l', 't', 'v', 'y', '不', '他', '吃', '喜', '我', '苹', 'Sh', '喜欢', '苹果', '苹果派', 'li', 'lik', 'gi', 'giv', '##pl', '##ppl', '##ry', 'to', 'yo', 'ea', 'eat']上述就是WordPiece分词方法的代码实现,一般来说最后会在词表中加上一些特殊词汇,以及英文中26个字母加上各种符号以及常见中文字符,不过如果训练语料比较大以及词表比较大那这些应该也是已经包括了,只需要添加特殊词汇:all_vocab = vocab + ["[PAD]", "[UNK]", "[CLS]", "[SEP]", "[MASK]"] + other_alphabet在大语言模型时代,最常用的分词方法是Byte-Pair Encoding (BPE)和Byte-level BPE(BBPE),Byte-Pair Encoding (BPE)最初是一种文本压缩算法在15年被引入到NLP用于分词[3],在训练 GPT 时被 OpenAI 用于tokenization,后续好多模型GPT,RoBERTa等都采用了这种分词方法。Byte-level BPE(BBPE)是于19年在BPE的基础上提出以Byte-level(字节)为粒度的分词方法[4],目前 GPT2,BLOOM,Llama,Falcon等采用的是该分词方法。3.2 Byte-Pair Encoding (BPE)Byte-Pair Encoding (BPE)核心思想是逐步合并出现频率最高的子词对而不是像Wordpiece计算合并分数,从而构建出一个词汇表,以下是核心步骤:计算初始词表:通过训练语料获得或者最初的英文中26个字母加上各种符号以及常见中文字符,这些作为初始词表。构建频率统计:统计所有子词单元对(两个连续的子词)在文本中的出现频率。合并频率最高的子词对:选择出现频率最高的子词对,将它们合并成一个新的子词单元,并更新词汇表。重复合并步骤:不断重复步骤 2 和步骤 3,直到达到预定的词汇表大小、合并次数,或者直到不再有有意义的合并(即,进一步合并不会显著提高词汇表的效益)。分词:使用最终得到的词汇表对文本进行分词。简单的代码实现[5]:用一些包含中英文的文本作为训练语料和上面相同,因为英文有天然的分隔符,所以在这个例子中,中文已经进行了分词:sentences = [
"我",
"喜欢",
"吃",
"苹果",
"他",
"不",
"喜欢",
"吃",
"苹果派",
"I like to eat apples",
"She has a cute cat",
"you are very cute",
"give you a hug",
]统计每个词出现的频率并初始化初始词表:# 构建频率统计
def build_stats(sentences):
stats = defaultdict(int)
for sentence in sentences:
symbols = sentence.split()
for symbol in symbols:
stats[symbol] += 1
return stats
stats = build_stats(sentences)
print("stats:", stats)
alphabet = []
for word in stats.keys():
for letter in word:
if letter not in alphabet:
alphabet.append(letter)
alphabet.sort()
# 初始词表
vocab = alphabet.copy()
print("alphabet:", alphabet)
# 结果
stats: defaultdict(
# 初始词表
alphabet: ['I', 'S', 'a', 'c', 'e', 'g', 'h', 'i', 'k', 'l', 'o', 'p', 'r', 's', 't', 'u', 'v', 'y', '不', '他', '吃', '喜', '我', '果', '欢', '派', '苹']根据初始词表拆分每个词,计算左右pair(子词对)出现的频率splits = {word: [c for c in word] for word in stats.keys()}
print("splits:", splits)
def compute_pair_freqs(splits):
pair_freqs = defaultdict(int)
for word, freq in stats.items():
split = splits[word]
if len(split) == 1:
continue
for i in range(len(split) - 1):
pair = (split[i], split[i + 1])
pair_freqs[pair] += freq
return pair_freqs
pair_freqs = compute_pair_freqs(splits)
for i, key in enumerate(pair_freqs.keys()):
print(f"{key}: {pair_freqs[key]}")
if i >= 5:
break
# 结果
splits: {'我': ['我'], '喜欢': ['喜', '欢'], '吃': ['吃'], '苹果': ['苹', '果'], '他': ['他'], '不': ['不'], '苹果派': ['苹', '果', '派'], 'I': ['I'], 'like': ['l', 'i', 'k', 'e'], 'to': ['t', 'o'], 'eat': ['e', 'a', 't'], 'apples': ['a', 'p', 'p', 'l', 'e', 's'], 'She': ['S', 'h', 'e'], 'has': ['h', 'a', 's'], 'a': ['a'], 'cute': ['c', 'u', 't', 'e'], 'cat': ['c', 'a', 't'], 'you': ['y', 'o', 'u'], 'are': ['a', 'r', 'e'], 'very': ['v', 'e', 'r', 'y'], 'give': ['g', 'i', 'v', 'e'], 'hug': ['h', 'u', 'g']}
('喜', '欢'): 2
('苹', '果'): 2
('果', '派'): 1
('l', 'i'): 1
('i', 'k'): 1
('k', 'e'): 1然后开始循环迭代找到出现频率最高的pair(子词对):best_pair = ""
max_freq = None
for pair, freq in pair_freqs.items():
if max_freq is None or max_freq < freq:
best_pair = pair
max_freq = freq
print(best_pair, max_freq)结果为【('喜', '欢') 2】,所以最先合成的就是('喜', '欢')→'喜欢',然后合并的函数如下:def merge_pair(a, b, splits):
for word in stats:
split = splits[word]
if len(split) == 1:
continue
i = 0
while i < len(split) - 1:
if split[i] == a and split[i + 1] == b:
split = split[:i] + [a + b] + split[i + 2 :]
else:
i += 1
splits[word] = split
return splits最后就是一直进行循环直到vocab达到了我们想要的数量:# 假设我们想要的词典为50
merges = {}
vocab_size = 50
while len(vocab) < vocab_size:
pair_freqs = compute_pair_freqs(splits)
best_pair = ""
max_freq = None
for pair, freq in pair_freqs.items():
if max_freq is None or max_freq < freq:
best_pair = pair
max_freq = freq
splits = merge_pair(*best_pair, splits)
merges[best_pair] = best_pair[0] + best_pair[1]
vocab.append(best_pair[0] + best_pair[1])
print("merges:", merges)
print("vocab:", vocab)
# 结果
merges: {('喜', '欢'): '喜欢', ('苹', '果'): '苹果', ('a', 't'): 'at', ('c', 'u'): 'cu', ('cu', 't'): 'cut', ('cut', 'e'): 'cute', ('y', 'o'): 'yo', ('yo', 'u'): 'you', ('v', 'e'): 've', ('苹果', '派'): '苹果派', ('l', 'i'): 'li', ('li', 'k'): 'lik', ('lik', 'e'): 'like', ('t', 'o'): 'to', ('e', 'at'): 'eat', ('a', 'p'): 'ap', ('ap', 'p'): 'app', ('app', 'l'): 'appl', ('appl', 'e'): 'apple', ('apple', 's'): 'apples', ('S', 'h'): 'Sh', ('Sh', 'e'): 'She', ('h', 'a'): 'ha'}
vocab: ['I', 'S', 'a', 'c', 'e', 'g', 'h', 'i', 'k', 'l', 'o', 'p', 'r', 's', 't', 'u', 'v', 'y', '不', '他', '吃', '喜', '我', '果', '欢', '派', '苹', '喜欢', '苹果', 'at', 'cu', 'cut', 'cute', 'yo', 'you', 've', '苹果派', 'li', 'lik', 'like', 'to', 'eat', 'ap', 'app', 'appl', 'apple', 'apples', 'Sh', 'She', 'ha']再加上一些特殊词汇和其他词汇:all_vocab = vocab + ["[PAD]", "[UNK]", "[BOS]", "[EOS]"] + other_alphabet上述就是BPE的代码实现,BPE理论上还是会出现OOV的,当词汇表的大小受限时,一些较少频繁出现的子词和没有在训练过程中见过的子词,就会无法进入词汇表出现OOV,而Byte-level BPE(BBPE)理论上是不会出现这个情况的。3.3 Byte-level BPE(BBPE)基础知识:Unicode: Unicode 是一种字符集,旨在涵盖地球上几乎所有的书写系统和字符。它为每个字符分配了一个唯一的代码点(code point)用于标识字符。Unicode 不关注字符在计算机内部的具体表示方式,而只是提供了一种字符到代码点的映射。Unicode 的出现解决了字符集的碎片化问题,使得不同的语言和字符能够在一个共同的标准下共存。然而,Unicode 并没有规定如何在计算机内存中存储和传输这些字符。UTF-8: UTF-8(Unicode Transformation Format-8)是一种变长的字符编码方案,它将 Unicode 中的代码点转换为字节序列。UTF-8 的一个重要特点是它是向后兼容 ASCII 的,这意味着标准的 ASCII 字符在 UTF-8 中使用相同的字节表示,从而确保现有的 ASCII 文本可以无缝地与 UTF-8 共存。在 UTF-8 编码中,字符的表示长度可以是1到4个字节,不同范围的 Unicode 代码点使用不同长度的字节序列表示,这样可以高效地表示整个 Unicode 字符集。UTF-8 的编码规则是:单字节字符(ASCII 范围内的字符)使用一个字节表示,保持与 ASCII 编码的兼容性。带有更高代码点的字符使用多个字节表示。UTF-8 使用特定的字节序列来指示一个字符所需的字节数,以及字符的实际数据。例如,英文字母 "A" 的 Unicode 代码点是U+0041,在 UTF-8 中表示为 0x41(与 ASCII 编码相同);而中文汉字 "你" 的 Unicode 代码点是U+4F60,在 UTF-8 中表示为0xE4 0xBD 0xA0三个字节的序列。所以简单的来说:Unicode 是字符集,为每个字符分配唯一的代码点。UTF-8 是一种基于 Unicode 的字符编码方式,用于在计算机中存储和传输字符。Byte(字节):计算机存储和数据处理时,字节是最小的单位。一个字节包含8个(Bit)二进制位,每个位可以是0或1,每位的不同排列和组合可以表示不同的数据,所以一个字节能表示的范围是256个。言归正传:Byte-level BPE(BBPE)和Byte-Pair Encoding (BPE)区别就是BPE是最小词汇是字符级别,而BBPE是字节级别的,通过UTF-8的编码方式这一个字节的256的范围,理论上可以表示这个世界上的所有字符。所以实现的步骤和BPE就是实现的粒度不一样,其他的都是一样的。初始词表:构建初始词表,包含一个字节的所有表示(256)。构建频率统计:统计所有子词单元对(两个连续的子词)在文本中的出现频率。合并频率最高的子词对:选择出现频率最高的子词对,将它们合并成一个新的子词单元,并更新词汇表。重复合并步骤:不断重复步骤 2 和步骤 3,直到达到预定的词汇表大小、合并次数,或者直到不再有有意义的合并(即,进一步合并不会显著提高词汇表的效益)。分词:使用最终得到的词汇表对文本进行分词。简单代码实现,不做赘述,读者朋友们可以自己实现一下from collections import defaultdict
sentences = [
"我",
"喜欢",
"吃",
"苹果",
"他",
"不",
"喜欢",
"吃",
"苹果派",
"I like to eat apples",
"She has a cute cat",
"you are very cute",
"give you a hug",
]
# 构建初始词汇表,包含一个字节的256个表示
initial_vocab = [bytes([byte]) for byte in range(256)]
vocab = initial_vocab.copy()
print("initial_vocab:", initial_vocab)
# 构建频率统计
def build_stats(sentences):
stats = defaultdict(int)
for sentence in sentences:
symbols = sentence.split()
for symbol in symbols:
stats[symbol.encode("utf-8")] += 1
return stats
stats = build_stats(sentences)
splits = {word: [byte for byte in word] for word in stats.keys()}
def compute_pair_freqs(splits):
pair_freqs = defaultdict(int)
for word, freq in stats.items():
split = splits[word]
if len(split) == 1:
continue
for i in range(len(split) - 1):
pair = (split[i], split[i + 1])
pair_freqs[pair] += freq
return pair_freqs
pair_freqs = compute_pair_freqs(splits)
def merge_pair(pair, splits):
merged_byte = bytes(pair)
for word in stats:
split = splits[word]
if len(split) == 1:
continue
i = 0
while i < len(split) - 1:
if split[i:i+2] == pair: # 检查分割中是否有这对字节
split = split[:i] + [merged_byte] + split[i + 2 :]
else:
i += 1
splits[word] = split
return splits
vocab_size = 50
while len(vocab) < vocab_size:
pair_freqs = compute_pair_freqs(splits)
best_pair = ()
max_freq = None
for pair, freq in pair_freqs.items():
if max_freq is None or max_freq < freq:
best_pair = pair
max_freq = freq
splits = merge_pair(best_pair, splits)
merged_byte = bytes(best_pair)
print("vocab:", vocab)着重解释一下为什么Byte-level BPE(BBPE)不会出现OOV问题,初始的词表里有256个表示如下:[b'\x00', b'\x01', b'\x02', b'\x03', b'\x04', b'\x05', b'\x06', b'\x07', b'\x08', b'\t', b'\n', b'\x0b', b'\x0c', b'\r', b'\x0e', b'\x0f', b'\x10', b'\x11', b'\x12', b'\x13', b'\x14', b'\x15', b'\x16', b'\x17', b'\x18', b'\x19', b'\x1a', b'\x1b', b'\x1c', b'\x1d', b'\x1e', b'\x1f', b' ', b'!', b'"', b'#', b'$', b'%', b'&', b"'", b'(', b')', b'*', b'+', b',', b'-', b'.', b'/', b'0', b'1', b'2', b'3', b'4', b'5', b'6', b'7', b'8', b'9', b':', b';', b'<', b'=', b'>', b'?', b'@', b'A', b'B', b'C', b'D', b'E', b'F', b'G', b'H', b'I', b'J', b'K', b'L', b'M', b'N', b'O', b'P', b'Q', b'R', b'S', b'T', b'U', b'V', b'W', b'X', b'Y', b'Z', b'[', b'\\', b']', b'^', b'_', b'`', b'a', b'b', b'c', b'd', b'e', b'f', b'g', b'h', b'i', b'j', b'k', b'l', b'm', b'n', b'o', b'p', b'q', b'r', b's', b't', b'u', b'v', b'w', b'x', b'y', b'z', b'{', b'|', b'}', b'~', b'\x7f', b'\x80', b'\x81', b'\x82', b'\x83', b'\x84', b'\x85', b'\x86', b'\x87', b'\x88', b'\x89', b'\x8a', b'\x8b', b'\x8c', b'\x8d', b'\x8e', b'\x8f', b'\x90', b'\x91', b'\x92', b'\x93', b'\x94', b'\x95', b'\x96', b'\x97', b'\x98', b'\x99', b'\x9a', b'\x9b', b'\x9c', b'\x9d', b'\x9e', b'\x9f', b'\xa0', b'\xa1', b'\xa2', b'\xa3', b'\xa4', b'\xa5', b'\xa6', b'\xa7', b'\xa8', b'\xa9', b'\xaa', b'\xab', b'\xac', b'\xad', b'\xae', b'\xaf', b'\xb0', b'\xb1', b'\xb2', b'\xb3', b'\xb4', b'\xb5', b'\xb6', b'\xb7', b'\xb8', b'\xb9', b'\xba', b'\xbb', b'\xbc', b'\xbd', b'\xbe', b'\xbf', b'\xc0', b'\xc1', b'\xc2', b'\xc3', b'\xc4', b'\xc5', b'\xc6', b'\xc7', b'\xc8', b'\xc9', b'\xca', b'\xcb', b'\xcc', b'\xcd', b'\xce', b'\xcf', b'\xd0', b'\xd1', b'\xd2', b'\xd3', b'\xd4', b'\xd5', b'\xd6', b'\xd7', b'\xd8', b'\xd9', b'\xda', b'\xdb', b'\xdc', b'\xdd', b'\xde', b'\xdf', b'\xe0', b'\xe1', b'\xe2', b'\xe3', b'\xe4', b'\xe5', b'\xe6', b'\xe7', b'\xe8', b'\xe9', b'\xea', b'\xeb', b'\xec', b'\xed', b'\xee', b'\xef', b'\xf0', b'\xf1', b'\xf2', b'\xf3', b'\xf4', b'\xf5', b'\xf6', b'\xf7', b'\xf8', b'\xf9', b'\xfa', b'\xfb', b'\xfc', b'\xfd', b'\xfe', b'\xff']通过上述的方式其实是在一直根据训练语料循环迭代合成子词或者词,最后形成词表,比如“苹果”通过UTF-8进行编码后为“\xe8\x8b\xb9\xe6\x9e\x9c”,如果词表里面有,那“苹果”就通过词表映射成了1个表示,准确来说是1个token;如果词表里没有,那就用256中的“\xe8+\x8b+\xb9+\xe6+\x9e+\x9c”来表示“苹果”这个词,那就是6个token。在先前的各种分词方法中,如果词典里没有”苹果“这个词,也没有”苹“,”果“这样的子词的话,那就变成了[UNK]。所以在现在的大模型中,以Byte-level BPE(BBPE)这种方式进行分词是不会出现OOV,但词表中如果没有word级别的词的话,一些中英文就会分词分的很细碎,比如Llama在中文上就会把一些词分成多个token其实就是UTF-8后的中文编码,对编码效率以及语义会有影响,于是出现了一些扩充Llama中文词表的工作。上述分词算法在工程上实现一般使用sentencpiece工具包[6],谷歌在这个包中实现了上述的一系列算法,扩充Llama中文词表的工作也都是在此上面实现的。后续我也会写一篇文章进行详细的讲解。欢迎关注~其他文章:参考^ab[1] https://huggingface.co/learn/nlp-course/chapter6/6?fw=pt^[3] https://zh.wikipedia.org/zh-hans/%E4%BA%92%E4%BF%A1%E6%81%AF^[3] https://arxiv.org/abs/1508.07909^[4] https://arxiv.org/abs/1909.03341^[5] https://huggingface.co/learn/nlp-course/chapter6/5?fw=pt^[6] https://github.com/google/sentencepiece编辑于 2023-09-02 18:19赞同 3018 条评论分享收藏喜欢收起OpenLLMAI浙江大学 工学硕士 关注简而言之:token可以理解为最小语义单元,翻译的话个人喜欢叫词元(当然翻译成令牌、词都行),可以是word/char/subword。tokenization是指分词,目的是将输入文本分成一个个词元,保证各个词元拥有相对完整和独立的语义,以供后续任务(比如学习embedding或者作为高级模型的输入)使用。原文:0.序章笔者在上一篇文章中对最近折腾大模型的过程进行了反思,痛定思痛,决定除了工作部分以外不再浪费太多时间去跑更大规模的模型,同时决心开一些新坑来倒逼输入并与大家交流讨论,暂时的想法是在OpenLLM下面做两个系列:LLM基础组件和LLM炼丹术。注:从4.11开始,不知不觉居然写到OpenLLM 008了,这十几天累成狗了,最快乐的时候居然是忙里偷闲写这些东西的时候,amazing!LLM基础组件tokenization&tokenizers:分词算法与分词器位置编码attention机制基础架构与attention mask归一化激活函数行为思路分词算法与分词器作为LLM(大语言模型)的基础组件,作用相当于文本与模型的桥梁。因此作为LLM基础组件系列的开篇,本文将对主流的分词算法和分词器进行全面的梳理和介绍。updates2023/04/30,资料阅读+整理,完成大纲;2023/05/01,主流subword算法伪代码;bert分词代码解读;2023/05/02,+byte-level BPE、优缺点、示例、总结等,主体内容基本算是写完了;剩余的代码实现示例和具体模型的分词器示例后续有空再补(看优先级和精力);2023/05/03,XX;1.分词算法tokenization算法大致经历了从word/char到subword的进化,这一章首先介绍不同的分词粒度,然后对主流的三大subword分词算法进行介绍,配合代码和实例,希望可以对subword算法有一个比较全面的梳理。0.文本应该分成什么粒度?分词的目的是将输入文本分成一个个词元,保证各个词元拥有相对完整和独立的语义,以供后续任务(比如学习embedding或者作为高级模型的输入)使用。首先,最自然的粒度当然是词粒度。词,作为语言最自然的基本单元,在英文等语言中有着天然的空格分隔,但是对于中文等语言可能需要额外的分词算法来进行处理(比如中文的jieba分词)。不过,我们总归是有办法获得各种各样的词的,这并不是一个致命的问题。真正影响词粒度分词算法应用问题主要有:1)词粒度的词表由于长尾效应可能会非常大,包含很多的稀有词,存储和训练的成本都很高,并且稀有词往往很难学好;2)OOV问题,对于词表之外的词无能为力;3)无法处理单词的形态关系和词缀关系:同一个词的不同形态,语义相近,完全当做不同的单词不仅增加了训练成本,而且无法很好的捕捉这些单词之间的关系;同时,也无法学习词缀在不同单词之间的泛化。那么,一个很自然的想法就是使用字符粒度的词表,这样OOV问题迎刃而解了,但是字符粒度太细了,会造成新的问题:1)无法承载丰富的语义;2)序列长度增长,带来计算成本的增长。所以,如何结合word和char粒度各自的优势呢?subword分词应运而生,顾名思义,粒度介于char和Word之间,基本思想为常用词应该保持原状,生僻词应该拆分成子词以共享token压缩空间,所以可以较好的平衡词表大小与语义表达能力,比如OOV问题可以通过subword的组合来解决。目前有三种主流的Subword分词算法,分别是Byte Pair Encoding (BPE), WordPiece和Unigram Language Model。总结一下,文本的分词粒度:word:优点:词的边界和含义得到保留;缺点:1)词表大,稀有词学不好;2)OOV;3)无法处理单词形态关系和词缀关系;char:优点:词表极小,比如26个英文字母几乎可以组合出所有词,5000多个中文常用字基本也能组合出足够的词汇;缺点:1)无法承载丰富的语义;2)序列长度大幅增长;subword:可以较好的平衡词表大小与语义表达能力;1.BPEBPE最早其实是一种数据压缩算法,基本思想是将经常一起出现的数据对替换为不在数据串中的其他字符,后续可以通过一个merge表来恢复原始数据。在2015年,由论文[1508.07909] Neural Machine Translation of Rare Words with Subword Units引入NLP领域。核心思想:从一个基础小词表开始,通过不断合并最高频的连续token对来产生新的token。具体做法:输入:训练语料;词表大小V1.准备基础词表:比如英文中26个字母加上各种符号;2.基于基础词表将语料拆分为最小单元;3.在语料上统计单词内相邻单元对的频率,选择频率最高的单元对进行合并;4.重复第3步直到达到预先设定的subword词表大小或下一个最高频率为1;输出:BPE算法得到的subword词表下面是一个BPE的训练示例:优势与劣势:优势:可以有效地平衡词汇表大小和编码步数(编码句子所需的token数量,与词表大小和粒度有关)。劣势:基于贪婪和确定的符号替换,不能提供带概率的多个分词结果(这是相对于ULM而言的);decode的时候面临歧义问题。BPE的劣势:代码实现:refs:[1508.07909] Neural Machine Translation of Rare Words with Subword Units理解NLP最重要的编码方式 — Byte Pair Encoding (BPE),这一篇就够了 - 硅谷谷主的文章 - 知乎https://zhuanlan.zhihu.com/p/424631681 2.Byte-level BPE2019年12月:《Neural Machine Translation with Byte-Level Subwords》,论文提出了一种新的subword算法,称之为BBPE,即Byte-level BPE。核心思想:将BPE的思想从字符级别扩展到子节级别。具体做法:摘要:几乎所有现有的机器翻译模型都建立在基于字符的词汇表之上:characters, subwords or words(只是字符的粒度不同)。 然而,来自噪声文本或字符丰富的语言(如日语和中文)的稀有字符可能会不必要地占用词汇槽并限制其紧凑性。 在字节级别表示文本并使用 256 字节集作为词汇表是解决此问题的潜在方法。 然而,高昂的计算成本阻碍了它在实践中的广泛部署或使用。 在本文中,我们研究了字节级子词,具体为字节级 BPE (BBPE),它比字符词汇表更紧凑,没有词汇表外的标记,但比仅使用纯字节更有效。 我们声称上下文化 BBPE 嵌入是必要的,这可以通过卷积层或循环层来实现。 我们的实验表明,BBPE 具有与 BPE 相当的性能,而其大小仅为 BPE 的 1/8。 在多语言设置中,BBPE 最大限度地共享多种语言的词汇并实现更好的翻译质量。 此外,我们表明 BBPE 可以在具有非重叠字符集的语言之间实现可迁移的模型。我们考虑文本的UTF8编码,它将每个Unicode字符编码成1到4个字节。这允许我们将句子建模为字节序列,而不是字符序列。虽然有覆盖150多种语言的138K Unicode字符,但我们可以将任何语言的句子表示为UTF-8字节序列(只需要256个可能的字节中的248个)。文本的字节序列表示通常比字符序列表示长得多(高达4倍),这使得按原样使用字节(只使用256的子节集)在计算上要求很高。作为另一种选择,我们考虑将字节序列分割成可变长度的n-gram(字节级“subwords”)。具体地说,我们学习关于字节级表示的BPE词汇,该表示用字节n-gram扩展了UTF-8字节集,称之为BBPE。图一展示了BBPE与BPE的对比。不同的词表对序列长度的影响:词表粒度由细到粗,分词序列的对比:我们可以验证一下上图中的部分编码,可以看到是一致的:https://www.browserling.com/tools/utf8-encode优势与劣势:优势:1)效果与BPE相当,但词表大为减小;2)可以在多语言之间通过字节级别的子词实现更好的共享;3)即使字符集不重叠,也可以通过子节层面的共享来实现良好的迁移。劣势:1)编码序列时,长度可能会略长于BPE,计算成本更高;2)由byte解码时可能会遇到歧义,需要通过上下文信息和动态规划来进行解码。refs:Neural Machine Translation with Byte-Level Subwordshttps://arxiv.org/abs/1909.03341 浅谈Byte-Level BPE - CaesarEX的文章 - 知乎https://zhuanlan.zhihu.com/p/146114164 tokenizers小结 - 马东什么的文章 - 知乎https://zhuanlan.zhihu.com/p/360290118 3.WordPieceWordPiece出自《JAPANESE AND KOREAN VOICE SEARCH》,并用于解决日语和韩语的语音问题。核心思想:与BPE类似,也是从一个基础小词表出发,通过不断合并来产生最终的词表。主要的差别在于,BPE按频率来选择合并的token对,而wordpiece按token间的互信息来进行合并。注:互信息,在分词领域有时也被称为凝固度、内聚度,可以反映一个词内部的两个部分结合的紧密程度。具体做法:除了合并对象的选择以外,基本同BPE;输入:训练语料;词表大小V1.准备基础词表:比如英文中26个字母加上各种符号;2.基于基础词表将语料拆分为最小单元;3.基于第2步数据训练语言模型,可以是unigram语言模型,通过极大似然进行估计即可;4.从所有可能得token对中选择,选择合并后可以最大程度地增加训练数据概率的token对进行合并,具体的score=(freq_of_pair)/(freq_of_first_element×freq_of_second_element),当然你也可以取个log,就变成了互信息,选择最高的单元对进行合并;5.重复第4步直到达到预先设定的subword词表大小或概率增量低于某一阈值;输出:wordpiece算法得到的subword词表优势与劣势:优势:可以较好的平衡词表大小和OOV问题;劣势:可能会产生一些不太合理的子词或者说错误的切分;对拼写错误非常敏感;对前缀的支持不够好;复合词错误的切分:前缀的错误处理:一种解决方案是:将复合词拆开;将前缀也拆开;代码实现:refs:japanese and korean voice searchhttps://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/37842.pdf4.ULMULM出自《 Subword Regularization: Improving Neural Network Translation Models with Multiple Subword Candidates 》。核心思想:初始化一个大词表,然后通过unigram 语言模型计算删除不同subword造成的损失来代表subword的重要性,保留loss较大或者说重要性较高的subword。具体做法:输入:训练语料;词表大小V1.准备基础词表:初始化一个很大的词表,比如所有字符+高频ngram,也可以通过BPE算法初始化;2.针对当前词表,用EM算法估计每个子词在语料上的概率;3.计算删除每个subword后对总loss的影响,作为该subword的loss;4.将子词按照loss大小进行排序,保留前x%的子词;注意,单字符不能被丢弃,以免OOV;5.重复步骤2到4,直到词表大小减少到设定值;输出:ULM算法得到的subword词表可见,ULM会倾向于保留那些以较高频率出现在很多句子的分词结果中的子词,因为这些子词如果被删除,其损失会很大。优势与劣势:优势:1)使用的训练算法可以利用所有可能的分词结果,这是通过data sampling算法实现的;2)提出一种基于语言模型的分词算法,这种语言模型可以给多种分词结果赋予概率,从而可以学到其中的噪声;3)使用时也可以给出带概率的多个分词结果。劣势:1)效果与初始词表息息相关,初始的大词表要足够好,比如可以通过BPE来初始化;2)略显复杂。代码实现:refs:Subword Regularization: Improving Neural Network Translation Models with Multiple Subword Candidates https://arxiv.org/abs/1804.10959 NLP三大Subword模型详解:BPE、WordPiece、ULM - 阿北的文章 - 知乎https://zhuanlan.zhihu.com/p/1916484215.SentencePieceSentencePiece,有些文章将其看作一种分词方法,有的地方将其视为一个分词工具包。个人更倾向于后者,但是将其看作一种分词算法也未尝不可(因为不仅是分词算法的集成,还做了很多优化)。官方介绍:SentencePiece is an unsupervised text tokenizer and detokenizer mainly for Neural Network-based text generation systems where the vocabulary size is predetermined prior to the neural model training. SentencePiece implements subword units (e.g., byte-pair-encoding (BPE) [Sennrich et al.]) and unigram language model [Kudo.]) with the extension of direct training from raw sentences. SentencePiece allows us to make a purely end-to-end system that does not depend on language-specific pre/postprocessing.https://github.com/google/sentencepiece 主要特性多分词粒度:支持BPE、ULM子词算法,也支持char, word分词;多语言:以unicode方式编码字符,将所有的输入(英文、中文等不同语言)都转化为unicode字符,解决了多语言编码方式不同的问题;编解码的可逆性:之前几种分词算法对空格的处理略显粗暴,有时是无法还原的。Sentencepiece显式地将空白作为基本标记来处理,用一个元符号 “▁”( U+2581 )转义空白,这样就可以实现简单且可逆的编解码;无须Pre-tokenization:Sentencepiece可以直接从raw text/setences进行训练,无须Pre-tokenization;Fast and lightweight;编解码的可逆性:Decode(Encode(Normalized(text)))= Normalized(text)一个中文转Unicode的示例:https://tool.chinaz.com/tools/unicode.aspx refs:https://github.com/google/sentencepiecesentencepiece原理与实践https://www.zhihu.com/tardis/zm/art/159200073?source_id=1003 6.主流subword算法的对比wordpiece和BPE的对比wordpiece和BPE的对比:都是走的合并的思路,将语料拆分成最小单元(英文中26个字母加上各种符号,这些作为初始词表)然后进行合并,词表从小到大;核心区别就在于wordpiece是按token间的互信息来进行合并而BPE是按照token一同出现的频率来合并的。wordpiece和ULM的对比:wordpiece和ULM的对比:都使用语言模型来挑选子词;区别在于前者词表由小到大,而后者词表由大到小,先初始化一个大词表,根据评估准则不断丢弃词表,直到满足限定条件。ULM算法考虑了句子的不同分词可能,因而能够输出带概率的多个分词结果。三种subword分词算法的关系7.tokenizers库优先级靠后2.分词器1.BERT的分词器BERT的分词器由两个部分组成:BasicTokenizer:转成 unicode:Python3,输入为str时,可以省略这一步_clean_text:去除各种奇怪字符_tokenize_chinese_chars:中文按字拆开whitespace_tokenize:空格分词_run_strip_accents:去掉变音符号_run_split_on_punc:标点分词再次空格分词:whitespace_tokenize(" ".join(split_tokens)),先用空格join再按空白分词,可以去掉连续空格WordpieceTokenizer:贪心最大匹配:用双指针实现;核心代码:tokenize(self, text):2.T5的分词器3.GPT的分词器4.LLaMA的分词器5.GLM的分词器总结下面对主流模型使用的分词器进行总结(待完善):参考资料深入理解NLP Subword算法:BPE、WordPiece、ULM - Luke的文章 - 知乎https://zhuanlan.zhihu.com/p/86965595NLP三大Subword模型详解:BPE、WordPiece、ULM - 阿北的文章 - 知乎https://zhuanlan.zhihu.com/p/191648421NLP中的subword算法及实现 - 微胖界李现的文章 - 知乎https://zhuanlan.zhihu.com/p/112444056NLP BERT GPT等模型中 tokenizer 类别说明详解https://cloud.tencent.com/developer/article/1865689BERT 客制化分词器和 WWM 的实现 - 满甲的文章 - 知乎https://zhuanlan.zhihu.com/p/268515387bert第三篇:tokenizerhttps://blog.csdn.net/iterate7/article/details/108959082BERT 是如何分词的https://blog.csdn.net/u010099080/article/details/102587954同:BERT 是如何分词的 - Alan Lee的文章 - 知乎https://zhuanlan.zhihu.com/p/132361501Bert系列伴生的新分词器https://dxzmpk.github.io/2020/04/29/Bert%E7%B3%BB%E5%88%97%E4%BC%B4%E7%94%9F%E7%9A%84%E6%96%B0%E5%88%86%E8%AF%8D%E5%99%A8/Tokenizers: How machines readhttps://blog.floydhub.com/tokenization-nlp/【HugBert11】聚沙成塔:关于tokenization(词元化)的解疑释惑 - 套牌神仙的文章 - 知乎https://zhuanlan.zhihu.com/p/371300063japanese and korean voice searchhttps://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/37842.pdf[1508.07909] Neural Machine Translation of Rare Words with Subword Units 3-3 Transformers Tokenizer API 的使用https://www.zhihu.com/tardis/zm/art/390821442?source_id=1003关于transformers库中不同模型的Tokenizer - 莫冉的文章 - 知乎https://zhuanlan.zhihu.com/p/121787628NLP领域中的token和tokenization到底指的是什么? - 知乎https://www.zhihu.com/question/64984731NLP中的Tokenization - 薛定谔没养猫的文章 - 知乎https://zhuanlan.zhihu.com/p/444774532大模型中的分词器tokenizer:BPE、WordPiece、Unigram LM、SentencePiece - 眼睛里进砖头了的文章 - 知乎https://zhuanlan.zhihu.com/p/620508648浅谈Byte-Level BPE - CaesarEX的文章 - 知乎https://zhuanlan.zhihu.com/p/146114164 理解NLP最重要的编码方式 — Byte Pair Encoding (BPE),这一篇就够了 - 硅谷谷主的文章 - 知乎https://zhuanlan.zhihu.com/p/424631681 Neural Machine Translation with Byte-Level Subwordshttps://arxiv.org/abs/1909.03341 tokenizers小结 - 马东什么的文章 - 知乎https://zhuanlan.zhihu.com/p/360290118 互信息https://zh.wikipedia.org/wiki/%E4%BA%92%E4%BF%A1%E6%81%AFPython unicodedata.normalize 将Unicode文本标准化https://blog.csdn.net/weixin_43866211/article/details/98384017Weaknesses of WordPiece Tokenizationhttps://medium.com/@rickbattle/weaknesses-of-wordpiece-tokenization-eb20e37fec99 Subwordhttps://paddlepedia.readthedocs.io/en/latest/tutorials/pretrain_model/subword.html sentencepiece原理与实践https://www.zhihu.com/tardis/zm/art/159200073?source_id=1003 抱抱脸:https://huggingface.co/docs/transformers/tokenizer_summaryhttps://huggingface.co/learn/nlp-course/zh-CN/chapter2/4?fw=tfhttps://huggingface.co/learn/nlp-course/chapter6/7?fw=pthttps://huggingface.co/learn/nlp-course/chapter6/5?fw=pt编辑于 2023-05-03 00:20赞同 1517 条评论分享收藏喜欢
ChatGPT的计费方式 - 知乎
ChatGPT的计费方式 - 知乎首发于东三与西二切换模式写文章登录/注册ChatGPT的计费方式犁叔审计话题下的优秀答主一句话总结:按照Token收费最近大家应该都听说了ChatGPT,有很多人可能已经想办法注册和购买了相应的服务。可是,它是怎么收费的呢?AI服务怎么计费呢?说回到AI服务的计费方法,比较容易接受的是按照使用量付费。可如何衡量AI服务的使用量呢?按照使用时间(分、秒)计费如果按照使用时长,精确到分秒的计费方式呢?我第一个反对,网络不好的话,浪费的钱算谁的?再说了,如果这样的话,那么如果故意设置AI的响应时间“加1秒”,岂不是凭空赚了很多钱?包年、包月计费通常大家首先想到的是包年、包月这种按照使用时长的计费方式。这种方式对大家购买爱奇艺、腾讯视频会员来说比较合适。但AI服务,不排除有人使用程序不停的自动问问题,那么AI的响应效率越高,单位时间内的服务使用量不就越多了么?岂不是如果AI服务越优质高效,反而成本越高、利润越少,这可不是AI服务提供商希望看到的。按照字词或者句子数收费那按照字数收费呢?对人类作家来说,按照字数收费是最普遍的了。刚入行的网文写手可能千字2-10元,好点的千字百元甚至千字数百元,更出名的可能就得单聊了。AI也是创作,是不是可以也以文字数来收费呢?ChatGPT这类应用支持多种语言,那么 “落霞与孤鹜齐飞,秋水共长天一色”,放到英语里就是 "The rosy clouds and solitary geese fly together, autumn waters blend with the sky."似乎按照字数收费有点不合理。按照句子来收费呢?我们知道,简单句和复杂句在结构上相差很大,有些概念可能需要好几句话才能解释清楚。问一个简单的却内涵丰富、模棱两可的句子,远比多问好几句具体而精准的问题让计算机烧脑的多。看来也不合适。ChatGPT的收费方ChatGPT收费的单位,是“$0.002 per 1k tokens”,每1000个tokens需要花费0.002美元。来源:openai.com这个token是什么意思呢?Token是什么?在自然语言处理(NLP)中,token是指一组相关的字符序列,例如一个单词或一个标点符号。将文本分解为token是NLP的一项基本任务,因为它是许多其他任务的先决条件,例如词性标注、命名实体识别和机器翻译。在文本处理中,token可以是一个词语、数字、标点符号、单个字母或任何可以成为文本分析的单个元素。在分解文本时,通常会根据空格、标点符号和其他特定的分割符号来确定token的边界。例如,在以下句子中,标点符号和空格用于分解成为不同的token: "我喜欢吃冰淇淋。"在这个句子中,每个汉字和标点符号都可以切分开成一个token。但是,一个字一个字去理解整句话的意思,可能反而会理解错误。例如“冰淇淋”,就是一个完整的词,分开成“冰”“淇”“淋”三个字反而无法理解了。类似的,NLP中,token还可以是比词更高级别的语言单位,例如短语或句子。例如,对于短语token,“红色的苹果”可以被视为一个token,而不是单独的“红色”和“苹果”token。因为存在不同的切分方式,所以“红色的苹果”,就需要切分成“红”“红色”“的”“苹果”“果”“红色的苹果”等多个token去理解。在处理文本时,理解token的概念是非常重要的,因为它是许多文本分析任务的基础。NLP算法会使用token来构建文本的表示形式,理解自然语言,以便进行其他分析任务。因此,对于NLP系统来说,选择正确的分词方法(tokenization)非常重要,它将直接影响到其他任务的准确性和效率。ChatGPT API的价格再回来看ChatGPT API的[1], “$0.002 per 1k tokens”在英语中“一个 token 通常对应大约 4 个字符”,而1个汉字大致是2~2.5个token。1000 tokens大概是750单词。那也就是说,大概2美元可以问100万个token,相当于750000个单词。75万个单词只要不到15块钱人民币,相比人类作家,够便宜的了!当然,虽然100万个token看起来很多。但其实,发送一段供API响应的文本可能就会花费不少token。根据大家的经验,基本问清楚1个问题就要耗费100~200个token,算起来其实不少的,尤其在连续会话中,为了保持对话的连续性,必须每次都要回传历史消息,并且输入都要算 token 数算钱的,满打满算,按量付费其实也不便宜。如果你想查询一串指定的文本到底需要耗费多少个token(钱 ),官方也有提供一个免费查询计算器,有兴趣可以看一看。[2]来源:https://platform.openai.com/tokenizer好了,相信你对于AI收费已经有了概念了。至于收费是否合理,是否能够满足成本甚至盈利,那要取决于其他人对于ChatGPT能力的二次开发使用了。从Chat GPT的火爆程度看,应当不是问题。[3]参考^该定价为2023年3月9日查询,预计随着技术进步可能更加便宜。^https://platform.openai.com/tokenizer^本文使用Notion AI辅助创作。发布于 2023-03-10 17:16・IP 属地北京OpenAI财务ChatGPT赞同 6232 条评论分享喜欢收藏申请转载文章被以下专栏收录东三与西二成为更好的你筷子要疯啊对,你没看错,就是微博上
你真的懂Token吗? - 知乎
你真的懂Token吗? - 知乎切换模式写文章登录/注册你真的懂Token吗?威客星球重塑用户价值生态,链接人与数据区块链中,有很多关于数字货币的说法,包括「Coin」「Token」「Cash」,是不是傻傻分不清楚?今天威客君就给大家梳理一下关于Token的那些事。什么是Token?Blockchain译为「区块链」,而Token目前最倍接受的翻译就是「通证」,意思是就是「可流通的加密数字权益证明」。事实上,货币即权力,货币即政治,货币权力必须属于国家。所以 Token代什么都容易,就是代货币难,没有国家的授权支持和信用背书,就很难有属于大多数人的共识,所以之前很多人把Token翻译成「代币」只是自欺欺人。事实上Token的本意是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。当用户第一次登录后,服务器生成一个token并将此token返回给客户端,以后客户端只需带上这个token前来请求数据即可,无需再次带上用户名和密码。简单Token的组成:Uid(用户唯一的身份标识)+Time(当前时间的时间戳)+Sign(签名,Token的前几位以哈希算法压缩成的一定长度的十六进制加密字符串)。现在我们所说的Token是指基于区块链而生成的Token,之所以被广泛认识,是以太坊及其订立的 ERC20标准。基于这个标准,任何人都可以在以太坊上发行自定义的Token,这个Token可以代表任何权益和价值。敲黑板,划重点:现在用Token来作为代币权益证明进行ICO(之前被广为称道的首次“代币”发行)是一个普遍的做法,但很多以圈钱为目的的项目所进行的ICO其实风险很大。由此我们也认识到,其实现在市面上流行的“加密数字货币”只不过是一种特殊的Token。区块链Token的三个要素a.数字权益证明,也就是说通证必须是以数字形式存在的权益凭证,它必须代表的是一种权利,一种固有和内在的价值b.加密,也就是说通证的真实性、防篡改性、保护隐私等能力,由密码学予以保障c.可流通,也就是说通证必须能够在一个网络中流动,从而随时随地可以验证。其中一部分通证是可以交易、兑换的事实上,通证可以代表一切权益证明,从身份证到学历文凭,从货币到票据,从钥匙、门票到积分、卡券,从股票到债券,人类社会全部权益证明,都可以用通证来代表。Token和Coin的区别Coin,是预埋在系统里面,为系统工作的激励机制。第二,Coin是区块链上面记帐的符号,Coin也成为了一种通用的货币,所有的艾西欧都是以自己发行的Token去换比特币或者去换以太币。Coin没有使用场景,匿名,发行的方法也不同,在某种程度下,也被当做支付工具,比如说日本,认可了比特币。Token是智能合约的产物,有更多的应用场景。实际上目前属于Token的代币远远多于COIN,这要归功于以太坊近些年的成功。但Token的功能往往不只是支付,而是在特定区块链生态中发挥奖励、消耗、等各种功能性。Token的真正价值取决于所属区块链项目应用落地之后所产生的价值(说白了,在项目没有落地之前Token是没有价值的。目前就没有几个区块链项目有实际的应用,所以大多数的Token都是没有价值的。或者换个你更容易接受的说法,你目前持有的大部分Token的价值都仅仅是基于他们的潜力!几年后项目落地了价值水涨船高,但更大的概率是彻底归零!目前最有价值的Token,自然是Eth。一个优秀的Token在获得大众的认可后甚至可以担当起Coin的作用。这也就是为什么Eth会成为比特币以外的第二大虚拟货币。Token的分类证券型代币(Security Token)证券型代币是指符合联邦证券法的数字资产。通俗地说,它们是数字资产(代币)与传统金融产品的交汇点——一种改进旧事物的新技术。如果我们把比特币这样的加密货币称之为“可编程货币”,那么证券型代币则可以被称为“可编程所有权”版本的代币,也就是其所有权下的任何资产都可以并将被代币化(包括公开募股和私募股权、债务、不动产等)。实用型代币(Utility Token)也可以称为功能型代币,这种代币为用户提供对产品或服务的访问权。实用型令牌代表的是出于对平台或者底层协议的一种访问或者使用权利而购买(排除套利者),使用的是不受监管的众筹模式。资产型代币(Equity Token)资产型代币是基于以太坊智能合约技术,也被看作是最有前途的应用之一。初创公司可以通过ICO发行自己的代币,也可以视作公司的资产权益,这对于初创企业来说是一件好事,因为这样初创公司进入金融市场的门槛将大大降低。这样一来能使得普通投资者更容易通过购买其代币来参与投资,此外,在区块链的透明机制下,投资者能够在公司运行中发挥出更积极的作用。但由于目前缺乏监管,很少有初创公司试图销售这种股权类的代币,法律对其界定很模糊公司一般不敢乱来。然而,特拉华州最近通过了一项法案,历史性地承认使用区块链作为创建和管理企业记录的一种方式,这就使基于区块链的股票交易有了极大的可能性。因此,资产代币在加密金融行业中扮演核心角色可能只是时间问题。看了这么多,课后问题:FCoin代币是Coin还是Token?编辑于 2018-07-13 13:41区块链(Blockchain)比特币 (Bitcoin)赞同 21 条评论分享喜欢收藏申请
ChatGPT如何计算token数? - 知乎
ChatGPT如何计算token数? - 知乎首页知乎知学堂发现等你来答切换模式登录/注册互联网人工智能OpenAIAI技术ChatGPTChatGPT如何计算token数?【渐构】万字科普GPT4为何会颠覆现有工作流;为何你要关注微软Copilot、文心一言等大模型_哔哩哔哩_bilibili 根据这个视频的说法,cha…显示全部 关注者231被浏览757,809关注问题写回答邀请回答好问题 111 条评论分享36 个回答默认排序卡卡罗特南京大学 计算数学硕士 关注终于有人意识到这个问题了。首先 OpenAI token 的计算包含两部分。输入给 GPT 模型的 token 数和 GPT 模型生成文本的 token 数。例如,你提问耗费了 100 token,GPT 根据你的输入,生成文本(也就是回答)了 200 token,那么一共消费的 token 数就是 300 。那么 token 和字符是如何映射的呢,是什么关系呢?这里就直接应用我已经上线的新书 《ChatGPT实用指南》中的内容。在上一小节,我们其实刻意回避了一个问题。GPT 的输入和输出都是到中文字的粒度吗?注意,GPT 不仅仅能处理中文,它还能处理几乎世界上所有流行的自然语言。所以这告诉我们 GPT 实际的输入和输出并不是像 1.2.2 中那个图的样子。因此,我们需要引入 token 的概念。token 是自然语言处理的最细粒度。简单点说就是,GPT 的输入是一个个的 token,输出也是一个个的 token。GPT 不是适用于某一门语言的大型语言模型,它适用于几乎所有流行的自然语言。所以 GPT 的 token 需要 兼容 几乎人类的所有自然语言,那意味着 GPT 有一个非常全的 token 词汇表,它能表达出所有人类的自然语言。如何实现这个目的呢?答案是通过 unicode 编码。Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。例如中文中的 你 字对应如下 unicode 编码:\u4F60\u 表示后面是一个 unicode 编码,它用 16 进制数表示。4F60 转换成 10 进制对应 20320 ,20320 表示在 unicode 编码中,第 20320 个编码对应的是字是 你 。最后将 20320 转换为 2 进制,得到如下结果:0100 1111 0110 0000如果我们直接将 unicode 的编码作为 GPT 中 token 的词表,会存在一些问题。 一方面直接使用 unicode 作为词汇表太大了,另一方面 unicode 自身的粒度有时候太细了,例如 unicode 中的英文编码是以字母粒度进行的。于是我们会将 unicode 的 2 进制结果以 8 个二进制位为单位进行拆分。例如将 你 拆分成:0100 1111和 0110 00008 个二进制位只有 256 种可能,换句话说,只需要 256 个 token 的词汇表就能表示所有 unicode。然而这种方法的词汇表又太小了,编码方法太粗糙了。实际上 GPT 是使用一种称为 BPE (Byte Pair Encoding)的算法,在上面的基础上进一步生成更大的词汇表。它的基本思想如下,将上述的基础 token (256种可能)做组合,然后统计文本数据中这些组合出现的频率,将频率最大的那些保留下来,形成新的 token 词汇表。因此,通过此方法得到的 token 和文字的映射不一定是一对一的关系。例如在英文中, red 会被视为一个 token,这个 token 在词汇表中的编号是 13 。注意,这里 red 前有一个空格,在这里「文字」和 token 是多对一[⑥]。再例如 enlighten 会被视为三个 token,对应的编号分别是 1268,2971,268,在这里「文字」和 token 是一对多[⑥]。在这里我们不对 BPE 算法做进一步的展开。如果读者想查询 OpenAI 的字符和 token 的映射关系,可以使用该[网站](https://platform.openai.com/tokenizer)查询。实际上,OpenAI 不仅对自然语言做了 token 的映射,对编程语言中的代码也做了 token 的映射。有意思的是,unicode 不仅有自然语言,实际上也包含 emoji 等自然语言之外的符号。这也是为什么 ChatGPT 能理解和回复 emoji 的原因。综上所述, GPT 实际是将我们输入的文字转换成 token,然后通过 GPT 模型预测 token,再将 token 转换成文字,最后再输出给我们。通过 token 的学习,我相信读者能感觉到 ChatGPT 理解文本的方式和人类并不相同,它在以自己的方式理解这个世界。⑥ 在这里,文字是指英文单词,英文中的空格,英文中的标点符号等。ChatGPT 实用指南已上线,开源免费,欢迎阅读,转载和点赞。编辑于 2023-04-10 15:59赞同 44737 条评论分享收藏喜欢收起知乎用户题主有两个问题:汉字是怎么编码的?编码和模型是否相关?虽然 GPT-3.5 的代码和模型权重并未开源,但是 tokenizer 部分是开源到 openai/tiktoken 的,这是一个 BPE(Byte-Pair Encoding tokenization)方法的 tokenizer。关于第一个问题,ChatGPT 是一个多语言模型,因此编码的问题不局限于汉字。tiktoken 的词表绝大多数是英文子词,并包含少量 unicode token 和表示字节的 token,以 UTF-8 的形式表示多语言。关于第二个问题,不同的 OpenAI 模型采用了不同的编码方式。GPT-4、GPT-3.5-turbo 等模型采用的是 cl100k_base,词表 100k 大小。text-davinci 系列采用的是 p50k_base,词表大小 50k。还有一些其他模型采用了 r50k_base。更早的 GPT-2 有单独的编码方式,也开源在 HuggingFace。题主所给的 tokenizer 网站 OpenAI Platform 的 demo 适用于 GPT-3 和 Codex,应该是 p50k/r50k 中的一种编码方式,和 ChatGPT (GPT-3.5)采用的 cl100k_base 已经不是同一种编码方式了。发布于 2023-07-08 21:43赞同 282 条评论分享收藏喜欢
在中文 NLP 等论文中,应该如何翻译 token 这个词? - 知乎
在中文 NLP 等论文中,应该如何翻译 token 这个词? - 知乎首页知乎知学堂发现等你来答切换模式登录/注册机器学习自然语言处理在中文 NLP 等论文中,应该如何翻译 token 这个词?想问一下,在中文 NLP 等论文中,应该如何翻译 token 这个词? 现在有几种翻译方式:词例、词块。想问下有没有什么更好的翻译方法。显示全部 关注者187被浏览397,028关注问题写回答邀请回答好问题 223 条评论分享38 个回答默认排序邱锡鹏复旦大学 计算机科学技术学院教授 关注token一直没有很好的翻译,经常翻译为“标记”“词”“令牌”等,但都是在特殊语境中的翻译。上述翻译都是大众化的词,脱离了上下文,这些翻译都很难准确的表示token的含义。因此个人觉得翻译为一个相对比较生僻的词,更能体现其特殊含义。建议作如下翻译:token 词元 tokenization 词元化 tokenizer 词元分析器但在具体上下文中可以有特定的翻译。=====更新:看了下面的评论,感觉翻译成“词符”也挺好的。在认证相关的上下文时可以翻译为“令符”。编辑于 2021-06-22 18:28赞同 39856 条评论分享收藏喜欢收起知乎用户机器学习等 5 个话题下的优秀答主在语言学特定语境下,一般会将 word type 和 word token 做比对,这时候,翻译为 词形 和 词例 比较合适。word type指的是词表中互不相同的单词形态,而word token则是指文本中具体出现的单词。很多NLP论文中说token的时候,大致是指的文本序列中具体出现的那些词,即word token。发布于 2022-01-15 13:02赞同 1034 条评论分享收藏喜欢
Token(计算机术语)_百度百科
n(计算机术语)_百度百科 网页新闻贴吧知道网盘图片视频地图文库资讯采购百科百度首页登录注册进入词条全站搜索帮助首页秒懂百科特色百科知识专题加入百科百科团队权威合作下载百科APP个人中心Token是一个多义词,请在下列义项上选择浏览(共3个义项)展开添加义项Token播报讨论上传视频计算机术语收藏查看我的收藏0有用+10Token在计算机身份认证中是令牌(临时)的意思,在词法分析中是标记的意思。一般作为邀请、登录系统使用。中文名令牌,标记外文名Token学 科信息技术(IT)词 性名词目录1令牌2标记3其它▪网络▪数据处理4相关术语令牌播报编辑(信息安全术语)Token, 令牌,代表执行某些操作的权利的对象访问令牌(Access token)表示访问控制操作主体的系统对象邀请码,在邀请系统中使用Token, Petri 网(Petri net)理论中的Token密保令牌(Security token),或者硬件令牌,例如U盾,或者叫做认证令牌或者加密令牌,一种计算机身份校验的物理设备会话令牌(Session token),交互会话中唯一身份标识符令牌化技术 (Tokenization), 取代敏感信息条目的处理过程标记播报编辑(编译原理术语)词法分析是计算机科学中将字符序列转换为标记(token)序列的过程。从输入字符流中生成标记的过程叫作标记化(tokenization),在这个过程中,词法分析器还会对标记进行分类。其它播报编辑网络Token ring 即 令牌环网,网络技术里面的:令牌是一种能够控制站点占有媒体的特殊帧,以区别数据帧及其他控制帧。数据处理token其实说的更通俗点可以叫暗号,在一些数据传输之前,要先进行暗号的核对,不同的暗号被授权不同的数据操作。例如在USB1.1协议中定义了4类数据包:token包、data包、handshake包和special包。主机和USB设备之间连续数据的交换可以分为三个阶段,第一个阶段由主机发送token包,不同的token包内容不一样(暗号不一样)可以告诉设备做不同的工作,第二个阶段发送data包,第三个阶段由设备返回一个handshake包。相关术语播报编辑token相关的计算机术语很多,例如Token Passing、Token Ring、Token Bus等,具体参考一些计算机令牌方面的资料。新手上路成长任务编辑入门编辑规则本人编辑我有疑问内容质疑在线客服官方贴吧意见反馈投诉建议举报不良信息未通过词条申诉投诉侵权信息封禁查询与解封©2024 Baidu 使用百度前必读 | 百科协议 | 隐私政策 | 百度百科合作平台 | 京ICP证030173号 京公网安备110000020000什么是token?token是用来干嘛的?_token是什么意思-CSDN博客
>什么是token?token是用来干嘛的?_token是什么意思-CSDN博客
什么是token?token是用来干嘛的?
最新推荐文章于 2024-03-01 09:04:33 发布
置顶
儒雅的烤地瓜
最新推荐文章于 2024-03-01 09:04:33 发布
阅读量7.2w
收藏
649
点赞数
125
分类专栏:
JavaScript
文章标签:
token
身份加密
session
Local Storage
服务器
原文链接:http://www.iwanshang.cn/news-20220612857.html
版权
JavaScript
专栏收录该内容
35 篇文章
13 订阅
订阅专栏
相信很多从事计算机行业的朋友都听说过token这么个东西,但是其他行业的人就很少了解到token,下面就给大家来详细介绍一下token是什么意思?token是用来干嘛的这一块的内容,希望能帮助到大家。
token是什么意思
作为计算机术语时,是“令牌”的意思。Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。
token其实说的更通俗点可以叫暗号,在一些数据传输之前,要先进行暗号的核对,不同的暗号被授权不同的数据操作。说白了token是一个身份卡,有权限的作用。例如在USB1.1协议中定义了4类数据包:token包、data包、handshake包和special包。主机和USB设备之间连续数据的交换可以分为三个阶段,第一个阶段由主机发送token包,不同的token包内容不一样(暗号不一样)可以告诉设备做不同的工作,第二个阶段发送data包,第三个阶段由设备返回一个handshake包。
token产生的背景
HTTP 是一种没有状态的协议,也就是它并不知道是谁是访问应用。这里我们把用户看成是客户端,客户端使用用户名还有密码通过了身份验证,不过下回这个客户端再发送请求时候,还得再验证一下。
token是用来干嘛的
使用token机制的身份验证方法,在服务器端不需要存储用户的登录记录。
大概的流程:
1️⃣客户端使用用户名和密码请求登录。
2️⃣服务端收到请求,验证用户名和密码。
3️⃣验证成功后,服务端会生成一个token,然后把这个token发送给客户端。
4️⃣客户端收到token后把它存储起来,可以放在cookie或者Local Storage(本地存储)里。
5️⃣客户端每次向服务端发送请求的时候都需要带上服务端发给的token。
6️⃣服务端收到请求,然后去验证客户端请求里面带着token,如果验证成功,就向客户端返回请求的数据。
token的使用小结:
◾ 前端登陆的时候向服务器发送请求,服务器验证成功,会生成一个token
◾ 前端会存储这个token,放在session或cookie中,用于之后的业务请求身份验证
◾ 拿着这个token,可以在当前登录的账号下进行请求业务,发送请求时,token会放在请求头里,服务器收到这个业务请求,验证token,成功就允许这个请求获取数据
◾ token可以设置失效期
利用token机制进行登录认证,可以有以下方式:
a. 用设备mac地址作为token
客户端:客户端在登录时获取设备的mac地址,将其作为参数传递到服务端
服务端:服务端接收到该参数后,便用一个变量来接收,同时将其作为token保存在数据库,并将该token设置到session中。客户端每次请求的时候都要统一拦截,将客户端传递的token和服务器端session中的token进行对比,相同则登录成功,不同则拒绝。
此方式客户端和服务端统一了唯一的标识,并且保证每一个设备拥有唯一的标识。缺点是服务器端需要保存mac地址;优点是客户端无需重新登录,只要登录一次以后一直可以使用,对于超时的问题由服务端进行处理。
b. 用sessionid作为token
客户端:客户端携带用户名和密码登录
服务端:接收到用户名和密码后进行校验,正确就将本地获取的sessionid作为token返回给客户端,客户端以后只需带上请求的数据即可。
此方式的优点是方便,不用存储数据,缺点就是当session过期时,客户端必须重新登录才能请求数据。
当然,对于一些保密性较高的应用,可以采取两种方式结合的方式,将设备mac地址与用户名密码同时作为token进行认证。
APP利用token机制进行身份认证
用户在登录APP时,APP端会发送加密的用户名和密码到服务器,服务器验证用户名和密码,如果验证成功,就会生成相应位数的字符产作为token存储到服务器中,并且将该token返回给APP端。
以后APP再次请求时,凡是需要验证的地方都要带上该token,然后服务器端验证token,成功返回所需要的结果,失败返回错误信息,让用户重新登录。其中,服务器上会给token设置一个有效期,每次APP请求的时候都验证token和有效期。
token的存储
token可以存到数据库中,但是有可能查询token的时间会过长导致token丢失(其实token丢失了再重新认证一个就好,但是别丢太频繁,别让用户没事儿就去认证)。
为了避免查询时间过长,可以将token放到内存中。这样查询速度绝对就不是问题了,也不用太担心占据内存,就算token是一个32位的字符串,应用的用户量在百万级或者千万级,也是占不了多少内存的。
token的加密
token是很容易泄露的,如果不进行加密处理,很容易被恶意拷贝并用来登录。加密的方式一般有:
在存储的时候把token进行对称加密存储,用到的时候再解密。
文章最开始提到的签名sign:将请求URL、时间戳、token三者合并,通过算法进行加密处理。
最好是两种方式结合使用。
还有一点,在网络层面上token使用明文传输的话是非常危险的,所以一定要使用HTTPS协议。
优惠劵
儒雅的烤地瓜
关注
关注
125
点赞
踩
649
收藏
觉得还不错?
一键收藏
知道了
6
评论
什么是token?token是用来干嘛的?
token其实说的更通俗点可以叫暗号,在一些数据传输之前,要先进行暗号的核对,不同的暗号被授权不同的数据操作。说白了token是一个身份卡,有权限的作用
复制链接
扫一扫
专栏目录
JWT Token生成及验证
07-16
JWT Token生成及验证,JSON WEB TOKEN,简单谈谈TOKEN的使用及在C#中的实现
JWT Token生成及验证(源码)
04-12
JWT Token生成及验证(源码)
6 条评论
您还未登录,请先
登录
后发表或查看评论
5分钟彻底搞懂什么是token
这里全是通俗易懂的神经网络算法解析,和好玩的实战项目
01-09
2026
而一旦将词分成子词,模型只需要记住"bug"、"value" 和 "de" 这三个 token 即可,而且还可以扩展识别出 "decrease "的意思。还可能把 “debug” 这个单词看作两个 token,分别为"de" 和 "bug",这样模型可能知道 “de” 前缀代表“减少”的意思。因为当时接触视觉模型多一些,在视觉模型的性能评估中,有一个关键指标叫做 fps,通俗理解就是一秒钟可以处理的图片数。否则,模型可能需要记住"bug"、"debug","value","devalue"四个token.
深入理解token
rizon886的博客
02-10
4044
摘要: Token 是在服务端产生的。如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回 Token 给前端。前端可以在每次请求的时候带上 Token 证明自己的合法地位
不久前,我在在前后端分离实践中提到了基于 Token 的认证,现在我们稍稍深入一些。
通常情况下,我们在讨论某个技术的时候,都是从问题开始。那么第一个问题:
为什么要用 Token?(无状态token开始比较有用)
而要回答这个问题很简单——因为它能解决问题!
可以解决哪些问题呢?
...
Android使用token维持登陆状态的方法
01-04
什么是token
token(令牌)是一串唯一的字符串,通常由服务端生成,在注册完成时返回给客户端,用来标识此用户,客户端将此字符串存储在本地。在以后的网络请求时,客户端先查询本地的token,如果有则直接使用此令牌进行网络请求,没有则提示未登录,转到登陆注册界面。
此外,还可以在服务端或者客户端添加过期判别机制。
token的作用
token可以显著减少服务端对用户表的查询,同时使用户不必每次都登陆,提高了系统的可用性与健壮性。
使用SharedPreferences保存token
获取token并保存
NetWorks.regPost(user, password, email, t
什么是Token(令牌)
热门推荐
阿狸来了,哇咔咔
10-16
5万+
Acess Token
访问资源接口(API)时所需要的资源凭证
简单token 的组成: uid(用户唯一的身份标识) 、time (当前时间的时间戳) ,sign(签名,token的前几位以hash算法压缩成的一定长度的16进制字符串)
特点:
服务端无状态变化、可扩展性好
支持移动端设备
安全
支持跨域程序调用
token 的身份验证流程
客户端使用用户名和密码进行登录
服务端收到请求,去验证用户名与密码
验证成功后,服务端会签发一个token 并把这个token 发
Token详解
Shuo
09-22
9395
描述了token和jwt,以及jwt的使用。
token基本流程
weixin_48321825的博客
03-15
1万+
token在项目中的使用
token是对session的一个升级,解决了前后端分离的session不能共享的一个难题
1、token基本流程
(1)用户登陆,发送手机号码和验证码
(2)后台接收参数,查找用户,用户存在就生成token,返回给前端
(3)前端登陆成功,把token存到vuex(做持久化)
(4)使用axios拦截器,读取vuex中的token,并放入请求头
(5)请求其他接口,就会带上token
(6)后台在需要登陆的接口上,获取token,解密token获得userId,返回前端需要的数
基于 Cookie/Session 的认证方案
Tatooine
04-29
976
基于 Cookie/Session 的认证方案
Cookie
Cookie 的工作原理
由于 HTTP 是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是。cookie 指的就是在浏览器里面存储的一种数据,仅仅是浏览器实现的一种数据存储功能。cookie 的保存时间,可以自己在程序中设置。如果没有设置保存时间,应该是一关闭浏览器,cookie 就自动消失。
Cookie 实
token的详解
zheng_qq的博客
09-19
1万+
123123132
你管這破玩意兒叫Token1
08-03
1. 首先用户登录,server 会为用户生成一个 sessi on,为其分配唯一的 sessi onId,这个 sessi onId 是与某个用户绑定的,
1
token在项目中的使用
02-05
该资源讲述token在项目中的使用
在登录时校验用户名和密码是否正确,正确的情况下生成token,
获取用户信息时: 从请求域中获取token,从token中解析用户id
俄版米家 app 看token用的
06-14
智能家居中的小米设备集成到diy平台,或者组合到智能平台时,比如home assistant hass hass.io,需要token,用这个俄版的米家可以方便查看
基于acess_token和refresh_token实现token续签
03-19
基于acess_token和refresh_token实现token续签
前端token值时效性问题怎么解决?
11-15
因为token值每次都是动态获取的且是有有效期的,token值设置有效期是为了防止token泄露 解决办法:在每次发送带token的请求接口前,先在请求拦截器中获取token,然后在响应拦截器中将刷新获取到的token值更新到需要...
请求时token过期自动刷新token操作
10-14
主要介绍了请求时token过期自动刷新token操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
Linux 内核获取函数size
最新发布
qq_42931917的博客
03-01
554
还是要骚操作获取,在内核中没有看到直接获取函数。,从计算的结果来看,加上偏移与调用栈打印的函数。对目标文件进行反汇编,从汇编代码中计算。是函数在代码中的偏移量。表示函数的总大小(以字节为单位)。,因此也可以直接调用该函数获取函数。,免去上述复杂的字符串解析过程。表示函数内部代码的偏移量,为动态打印进程调用栈信息。获取到的字符串信息示例为。,这种方式需要从数组。
token是什么? token失效怎么解决?
07-16
token是一种用于身份验证和访问控制的令牌。在网络应用中,当用户成功登录后,服务器会为其分配一个唯一的token,用于标识用户身份和授权访问特定资源。
当一个token失效时,可能是由于以下几个原因:
1. 过期失效:token可能设置了一个有效期限,当超过该有效期限,token将自动失效。
2. 用户主动注销:用户可以主动注销token,使其失效。
3. 强制失效:管理员或安全策略可能会强制使某个token失效。
如果一个token失效,可以通过以下方法解决:
1. 重新登录:用户可以尝试使用原有的账号密码重新登录系统,以获取新的有效token。
2. 刷新token:在某些系统中,当token即将过期时,可以使用刷新token来获取一个新的有效token。
3. 申请新的token:如果没有其他解决方法,用户可以联系系统管理员或开发人员,申请一个新的token来替换失效的token。
请注意,具体的解决方法可能因系统而异,以上仅为一般性的解决思路。
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
儒雅的烤地瓜
CSDN认证博客专家
CSDN认证企业博客
码龄4年
暂无认证
241
原创
9037
周排名
6508
总排名
86万+
访问
等级
4572
积分
4177
粉丝
1657
获赞
161
评论
4625
收藏
私信
关注
热门文章
什么是token?token是用来干嘛的?
72158
解决: 您目前无法访问 因为此网站使用了 HSTS。网络错误和攻击通常是暂时的,因此,此网页稍后可能会恢复正常
41032
Base64详解:玩转图片Base64编码
40997
Draw.io | 一款强大且支持在线编辑和导出的流程图绘制神器
26951
Vue.use()的用法详解
19780
分类专栏
TCP/IP | OSI模型
21篇
TCP
14篇
HTTP
18篇
Vue.js
45篇
⭐️ Vue踩过的坑
7篇
⭐ Vue.js入门基础
12篇
小程序
17篇
Git
10篇
shell
2篇
开发工具
9篇
JavaScript
35篇
⭐ 前端练手Demo
3篇
⭐️ JS高级教程
17篇
⭐️ JS入门基础
1篇
⭐️ DOM教程
10篇
⭐️ JQuery教程
10篇
Element Vue
Node.js
6篇
⭐ Node.js入门基础
5篇
MySQL
⭐ MySQL入门基础
4篇
CSS
17篇
⭐️ CSS踩过的坑
1篇
⭐ CSS入门基础
10篇
HTML
7篇
Bootstrap
2篇
⭐ Bootstrap入门基础
4篇
ECharts
计算机网络
44篇
服务器
2篇
Nginx
实用工具
7篇
实用插件
2篇
科技星辰
19篇
最新评论
Git之GitFlow工作流 | Gitflow Workflow(万字整理,已是最详)
Fy哥:
项目团队开发时,很有必要
Git之GitFlow工作流 | Gitflow Workflow(万字整理,已是最详)
I'mAlex:
写的很详细很明白,赞。我后面也会写个git专栏,深入剖析git原理,让同学们能够知其然知其所以然。欢迎交流
一文讲透TCP/IP协议 | 图解+秒懂+史上最全
ykbczxgj:
路由器的诞生目录下马超地址和端口的映射记录中左边交换机表格中b,a,d的端口是不是错了呀
解决: 您目前无法访问 因为此网站使用了 HSTS。网络错误和攻击通常是暂时的,因此,此网页稍后可能会恢复正常
儒雅的烤地瓜:
这是你要打开的网站的服务器出现了问题,网页找不到了,您需要询问该站的负责人
解决: 您目前无法访问 因为此网站使用了 HSTS。网络错误和攻击通常是暂时的,因此,此网页稍后可能会恢复正常
卷死在路上:
输入后就500 Internal Server Error,这个怎么解决
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
整合总结ES6中常用的新特性,供大家参考
JS中常用占位符使用方法详解_ |%s|%d|%f|%o|%O|%c|
ES6扩展运算符——三个点(...)用法详解
2024年12篇
2023年134篇
2022年137篇
目录
目录
分类专栏
TCP/IP | OSI模型
21篇
TCP
14篇
HTTP
18篇
Vue.js
45篇
⭐️ Vue踩过的坑
7篇
⭐ Vue.js入门基础
12篇
小程序
17篇
Git
10篇
shell
2篇
开发工具
9篇
JavaScript
35篇
⭐ 前端练手Demo
3篇
⭐️ JS高级教程
17篇
⭐️ JS入门基础
1篇
⭐️ DOM教程
10篇
⭐️ JQuery教程
10篇
Element Vue
Node.js
6篇
⭐ Node.js入门基础
5篇
MySQL
⭐ MySQL入门基础
4篇
CSS
17篇
⭐️ CSS踩过的坑
1篇
⭐ CSS入门基础
10篇
HTML
7篇
Bootstrap
2篇
⭐ Bootstrap入门基础
4篇
ECharts
计算机网络
44篇
服务器
2篇
Nginx
实用工具
7篇
实用插件
2篇
科技星辰
19篇
目录
评论 6
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
个
红包个数最小为10个
红包总金额
元
红包金额最低5元
余额支付
当前余额3.43元
前往充值 >
需支付:10.00元
取消
确定
下一步
知道了
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom 发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
0
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
余额充值
TOKEN中文(简体)翻译:剑桥词典
TOKEN中文(简体)翻译:剑桥词典
词典
翻译
语法
同义词词典
+Plus
剑桥词典+Plus
Shop
剑桥词典+Plus
我的主页
+Plus 帮助
退出
剑桥词典+Plus
我的主页
+Plus 帮助
退出
登录
/
注册
中文 (简体)
查找
查找
英语-中文(简体)
token 在英语-中文(简体)词典中的翻译
tokennoun [ C ] uk
Your browser doesn't support HTML5 audio
/ˈtəʊ.kən/ us
Your browser doesn't support HTML5 audio
/ˈtoʊ.kən/
token noun [C]
(SYMBOL)
Add to word list
Add to word list
C1 something that you do, or a thing that you give someone, that expresses your feelings or intentions, although it might have little practical effect
标志;表示;象征
As a token of our gratitude for all that you have done, we would like you to accept this small gift.
为了表示我们对你们所做的一切的感谢,希望你们接受我们这份小小的礼物。
It doesn't have to be a big present - it's just a token.
礼物不必大——只是为了表示一下。
token noun [C]
(PAPER WORTH MONEY)
UK (US gift certificate) a piece of paper with a particular amount of money printed on it that can be exchanged in a shop for goods of that value
礼券,代金券
a £20 book/gift/record token
一张价值20英镑的书券/礼券/唱片券
token noun [C]
(DISC)
C1 a round metal or plastic disc that is used instead of money in some machines
(某些机器中用以代替纸币的)代币,专用辅币
tokenadjective [ before noun ] uk
Your browser doesn't support HTML5 audio
/ˈtəʊ.kən/ us
Your browser doesn't support HTML5 audio
/ˈtoʊ.kən/
Token actions are done to show that you are doing something, even if the results are limited in their effect.
有标志性的;有象征意义的
The troops in front of us either surrendered or offered only token (= not much) resistance.
我们前面的军队要么投降,要么只作了象征性的抵抗。
They were the only country to argue for even token recognition of the Baltic states' independence.
他们是唯一为波罗的海沿岸国家争取哪怕是象征性承认的国家。
disapproving used to refer to something that is done to prevent other people complaining, although it is not sincerely meant and has no real effect
装点门面的;装样子的
The truth is that they appoint no more than a token number of women to managerial jobs.
事实上他们只装装样子,任命了一些女性担任管理工作。
(token在剑桥英语-中文(简体)词典的翻译 © Cambridge University Press)
C1,C1
token的翻译
中文(繁体)
標誌, 表示, 象徵…
查看更多内容
西班牙语
señal, vale, ficha…
查看更多内容
葡萄牙语
símbolo, cupom, ficha…
查看更多内容
更多语言
in Marathi
土耳其语
法语
日语
in Dutch
in Tamil
in Hindi
in Gujarati
丹麦语
in Swedish
马来语
德语
挪威语
in Urdu
in Ukrainian
俄语
in Telugu
in Bengali
捷克语
印尼语
泰语
越南语
波兰语
प्रतीक, तुमच्या भावना किंवा हेतू व्यक्त करण्यासाठी तुम्ही जे काही करता किंवा जी गोष्ट तुम्ही एखाद्याला देता, त्याचा थोडासा व्यावहारिक परिणामही होऊ शकतो.…
查看更多内容
hatıra, yadigâr, işaret…
查看更多内容
marque [feminine], jeton [masculine], bon-cadeau [masculine]…
查看更多内容
印(しるし), メダル, トークン…
查看更多内容
aandenken, bon…
查看更多内容
நீங்கள் செய்யும் ஏதாவது, அல்லது நீங்கள் ஒருவருக்கு கொடுக்கும் ஒரு விஷயம், உங்கள் உணர்வுகள் அல்லது நோக்கங்களை வெளிப்படுத்துகிறது…
查看更多内容
टोकन, निशानी, प्रतीक…
查看更多内容
પ્રતીક, સ્મરણચિન્હ, ટોકન…
查看更多内容
tegn, værdikupon…
查看更多内容
tecken, bevis, presentkort…
查看更多内容
tanda, token…
查看更多内容
das Zeichen, der Gutschein…
查看更多内容
tegn [neuter], sjetong [masculine], gavekort [neuter]…
查看更多内容
علامت, یادگار, نشان…
查看更多内容
знак, жетон…
查看更多内容
знак, символ (благодарности и т. д.), жетон…
查看更多内容
గుర్తు / ఆచరణాత్మకంగా తక్కువ ప్రభావాన్ని చూపినప్పటికీ మీరు చేసేది లేదా మీరు ఎవరికైనా ఇచ్చే వస్తువు మీ భావాలను లేదా ఉద్దేశాలను వ్యక్తపరుస్తుంది, కొన్ని యంత్రాలలో డబ్బుకు బదులుగా ఉపయోగించే ఒక గుండ్రని లోహంపు లేదా ప్లాస్టిక్ డిస్క్…
查看更多内容
স্মারক বস্তু, একটি বৃত্তাকার ধাতু বা প্লাস্টিকের ডিস্ক যা কিছু মেশিনে অর্থের পরিবর্তে ব্যবহৃত হয়…
查看更多内容
symbol, znak, žeton…
查看更多内容
tanda, kupon…
查看更多内容
สิ่งที่ใช้เป็นสัญลักษณ์, เหรียญพลาสติกหรือโลหะที่ใช้แทนเงิน…
查看更多内容
dấu hiệu, nhãn khi giá hàng hóa…
查看更多内容
dowód, znak, żeton…
查看更多内容
需要一个翻译器吗?
获得快速、免费的翻译!
翻译器工具
token的发音是什么?
在英语词典中查看 token 的释义
浏览
toiletries
toiletry bag
toilsome
toke
token
tokenism
tokenistic
tokenization
tokenize
token更多的中文(简体)翻译
全部
book token
gift token
non-fungible token
nonfungible token, at non-fungible token
non fungible token, at non-fungible token
by the same token idiom
查看全部意思»
惯用语
by the same token idiom
“每日一词”
veggie burger
UK
Your browser doesn't support HTML5 audio
/ˈvedʒ.i ˌbɜː.ɡər/
US
Your browser doesn't support HTML5 audio
/ˈvedʒ.i ˌbɝː.ɡɚ/
a type of food similar to a hamburger but made without meat, by pressing together small pieces of vegetables, seeds, etc. into a flat, round shape
关于这个
博客
Forget doing it or forget to do it? Avoiding common mistakes with verb patterns (2)
March 06, 2024
查看更多
新词
stochastic parrot
March 04, 2024
查看更多
已添加至 list
回到页面顶端
内容
英语-中文(简体)翻译
©剑桥大学出版社与评估2024
学习
学习
学习
新词
帮助
纸质书出版
Word of the Year 2021
Word of the Year 2022
Word of the Year 2023
开发
开发
开发
词典API
双击查看
搜索Widgets
执照数据
关于
关于
关于
无障碍阅读
剑桥英语教学
剑桥大学出版社与评估
授权管理
Cookies与隐私保护
语料库
使用条款
京ICP备14002226号-2
©剑桥大学出版社与评估2024
剑桥词典+Plus
我的主页
+Plus 帮助
退出
词典
定义
清晰解释自然的书面和口头英语
英语
学习词典
基础英式英语
基础美式英语
翻译
点击箭头改变翻译方向。
双语词典
英语-中文(简体)
Chinese (Simplified)–English
英语-中文(繁体)
Chinese (Traditional)–English
英语-荷兰语
荷兰语-英语
英语-法语
法语-英语
英语-德语
德语-英语
英语-印尼语
印尼语-英语
英语-意大利语
意大利语-英语
英语-日语
日语-英语
英语-挪威语
挪威语-英语
英语-波兰语
波兰语-英语
英语-葡萄牙语
葡萄牙语-英语
英语-西班牙语
西班牙语-英语
English–Swedish
Swedish–English
半双语词典
英语-阿拉伯语
英语-孟加拉语
英语-加泰罗尼亚语
英语-捷克语
英语-丹麦语
English–Gujarati
英语-印地语
英语-韩语
英语-马来语
英语-马拉地语
英语-俄语
English–Tamil
English–Telugu
英语-泰语
英语-土耳其语
英语-乌克兰语
English–Urdu
英语-越南语
翻译
语法
同义词词典
Pronunciation
剑桥词典+Plus
Shop
剑桥词典+Plus
我的主页
+Plus 帮助
退出
登录 /
注册
中文 (简体)
Change
English (UK)
English (US)
Español
Русский
Português
Deutsch
Français
Italiano
中文 (简体)
正體中文 (繁體)
Polski
한국어
Türkçe
日本語
Tiếng Việt
हिंदी
தமிழ்
తెలుగు
关注我们
选择一本词典
最近的词和建议
定义
清晰解释自然的书面和口头英语
英语
学习词典
基础英式英语
基础美式英语
语法与同义词词典
对自然书面和口头英语用法的解释
英语语法
同义词词典
Pronunciation
British and American pronunciations with audio
English Pronunciation
翻译
点击箭头改变翻译方向。
双语词典
英语-中文(简体)
Chinese (Simplified)–English
英语-中文(繁体)
Chinese (Traditional)–English
英语-荷兰语
荷兰语-英语
英语-法语
法语-英语
英语-德语
德语-英语
英语-印尼语
印尼语-英语
英语-意大利语
意大利语-英语
英语-日语
日语-英语
英语-挪威语
挪威语-英语
英语-波兰语
波兰语-英语
英语-葡萄牙语
葡萄牙语-英语
英语-西班牙语
西班牙语-英语
English–Swedish
Swedish–English
半双语词典
英语-阿拉伯语
英语-孟加拉语
英语-加泰罗尼亚语
英语-捷克语
英语-丹麦语
English–Gujarati
英语-印地语
英语-韩语
英语-马来语
英语-马拉地语
英语-俄语
English–Tamil
English–Telugu
英语-泰语
英语-土耳其语
英语-乌克兰语
English–Urdu
英语-越南语
词典+Plus
词汇表
选择语言
中文 (简体)
English (UK)
English (US)
Español
Русский
Português
Deutsch
Français
Italiano
正體中文 (繁體)
Polski
한국어
Türkçe
日本語
Tiếng Việt
हिंदी
தமிழ்
తెలుగు
内容
英语-中文(简体)
Noun
token (SYMBOL)
token (PAPER WORTH MONEY)
token (DISC)
Adjective
Translations
语法
所有翻译
我的词汇表
把token添加到下面的一个词汇表中,或者创建一个新词汇表。
更多词汇表
前往词汇表
对该例句有想法吗?
例句中的单词与输入词条不匹配。
该例句含有令人反感的内容。
取消
提交
例句中的单词与输入词条不匹配。
该例句含有令人反感的内容。
取消
提交
What Are Crypto Tokens, and How Do They Work?
What Are Crypto Tokens, and How Do They Work?
Investing
Stocks
Bonds
ETFs
Options and Derivatives
Commodities
Trading
FinTech and Automated Investing
Brokers
Fundamental Analysis
Technical Analysis
Markets
View All
Simulator
Login / Portfolio
Trade
Research
My Games
Leaderboard
Banking
Savings Accounts
Certificates of Deposit (CDs)
Money Market Accounts
Checking Accounts
View All
Personal Finance
Budgeting and Saving
Personal Loans
Insurance
Mortgages
Credit and Debt
Student Loans
Taxes
Credit Cards
Financial Literacy
Retirement
View All
News
Markets
Companies
Earnings
CD Rates
Mortgage Rates
Economy
Government
Crypto
ETFs
Personal Finance
View All
Reviews
Best Online Brokers
Best Savings Rates
Best CD Rates
Best Life Insurance
Best Personal Loans
Best Mortgage Rates
Best Money Market Accounts
Best Auto Loan Rates
Best Credit Repair Companies
Best Credit Cards
View All
Academy
Investing for Beginners
Trading for Beginners
Become a Day Trader
Technical Analysis
All Investing Courses
All Trading Courses
View All
Trade
Search
Search
Please fill out this field.
Search
Search
Please fill out this field.
Investing
Investing
Stocks
Bonds
ETFs
Options and Derivatives
Commodities
Trading
FinTech and Automated Investing
Brokers
Fundamental Analysis
Technical Analysis
Markets
View All
Simulator
Simulator
Login / Portfolio
Trade
Research
My Games
Leaderboard
Banking
Banking
Savings Accounts
Certificates of Deposit (CDs)
Money Market Accounts
Checking Accounts
View All
Personal Finance
Personal Finance
Budgeting and Saving
Personal Loans
Insurance
Mortgages
Credit and Debt
Student Loans
Taxes
Credit Cards
Financial Literacy
Retirement
View All
News
News
Markets
Companies
Earnings
CD Rates
Mortgage Rates
Economy
Government
Crypto
ETFs
Personal Finance
View All
Reviews
Reviews
Best Online Brokers
Best Savings Rates
Best CD Rates
Best Life Insurance
Best Personal Loans
Best Mortgage Rates
Best Money Market Accounts
Best Auto Loan Rates
Best Credit Repair Companies
Best Credit Cards
View All
Academy
Academy
Investing for Beginners
Trading for Beginners
Become a Day Trader
Technical Analysis
All Investing Courses
All Trading Courses
View All
Economy
Economy
Government and Policy
Monetary Policy
Fiscal Policy
Economics
View All
Financial Terms
Newsletter
About Us
Follow Us
Table of Contents
Expand
Table of Contents
What Are Crypto Tokens?
History of Crypto Tokens
Concerns About Crypto Tokens
How They Work
Crypto Tokens vs. Cryptocurrencies
Crypto Token FAQs
The Bottom Line
Cryptocurrency
What Are Crypto Tokens, and How Do They Work?
By
The Investopedia Team
Full Bio
Investopedia contributors come from a range of backgrounds, and over 24 years there have been thousands of expert writers and editors who have contributed.
Learn about our
editorial policies
Updated February 12, 2023
Reviewed by
Julius Mansa
Fact checked by
Suzanne Kvilhaug
Fact checked by
Suzanne Kvilhaug
Full Bio
Suzanne is a content marketer, writer, and fact-checker. She holds a Bachelor of Science in Finance degree from Bridgewater State University and helps develop content strategies for financial brands.
Learn about our
editorial policies
Investopedia / Zoe Hansen.
Trending Videos
Close this video player
What Are Crypto Tokens?
A crypto token is a representation of an asset or interest that has been tokenized on an existing cryptocurrency's blockchain. Crypto tokens and cryptocurrencies share many similarities, but cryptocurrencies are intended to be used as a medium of exchange, a means of payment, and a measure and store of value.
Crypto tokens are often used to raise funds for projects and are usually created, distributed, sold, and circulated through an initial coin offering (ICO) process, which involves a crowdfunding round.
Key Takeaways
Crypto tokens are a digital representation of an asset or interest in something and are built on a blockchain.Crypto tokens can also be used as investments, to store value, or to make purchases.Cryptocurrencies are digital representations of value designed to facilitate transactions (making and receiving payments) using blockchain technology.Often purchased through an initial coin offering, crypto tokens are generally used to raise funds to develop projects.
History of Crypto Tokens
Although there were cryptocurrencies that forked from Bitcoin and Ethereum previous to the 2017 ICO boom, the first recognized ICO and token was Mastercoin. Mastercoin was created by J.R. Willet and announced on January 2012 via Bitcoin Forum. He titled his whitepaper "The Second Bitcoin Whitepaper."
Mastercoin was one of the first projects to describe using layers to enhance a cryptocurrency's functionality. The project linked the value of Mastercoin to Bitcoin's value and explained how the project would use the funds to pay developers to create a way for users to make new coins from their Mastercoins.
The ICO Boom
Between 2012 and 2016, crypto token creation and ICO increased until 2017—token offerings skyrocketed as investors seemed to become aware of them and the possible increase in value they promised. Developers, businesses, and scammers began creating tokens rapidly in attempts to take advantage of the fund-raising boom—so much so that regulatory agencies began issuing alerts to investors warning them about the risks of ICOs.
Not all crypto tokens and ICOs are scams. Many are legitimate efforts to raise funds for projects or startups.
After the Bubble
The ICO bubble burst in 2018—shortly after, initial exchange offerings (IEO) emerged, where exchanges began facilitating token offerings. Exchanges claimed to have vetted the token offerings, reducing the risks to investors; however, scammers used the exchanges to promote their scams.
Regulatory agencies issued alerts to investors about the risks involved in participating in an IEO; they also alerted exchanges that they were required to register with the authorities if they were facilitating these fund-raising efforts. The logic was that the exchanges might be acting as alternative trading systems or broker/dealers, which by law are required to register.
Crypto tokens are still being created and used to raise funds for projects through ICOs. Whitepapers read like pitchbooks, outlining the token's purpose, how it will be sold, how the funds will be used, and how investors will benefit.
Concerns About Crypto Tokens
The single most important concern about crypto tokens is that because they are used to raise funds, they can be and have been used by scammers to steal money from investors.
However, it can be difficult to distinguish between a scam token and one representing an actual business endeavor.
Here are some factors to look for when you're looking at a crypto token:
Based on jurisdiction, it might need to be registered. The SEC uses the Howey Test to see if an asset is a security. If it needs to be registered and isn't, it is illegal in its current form.
Look at the team behind the ICO and their backgrounds. Determine if they are a legitimate business by checking the address and phone numbers, and visit the website of the Secretary of State for the state they claim to be registered in and search for them. If you can't find information about it other than in a white paper and custom website, it might be a scam.
ICOs from outside of the U.S. might be difficult to research. One such token was BananaCoin, issued as a fundraiser for banana plantations in Laos. Investors were told they could exchange their tokens for an equal value of bananas or funds after launch.
Many crypto tokens are listed on non-regulated exchanges outside of the United States. If it isn't listed on a regulated exchange, the odds of it being a scam are much higher.
Even crypto tokens listed on a registered exchange can be scams.
How Crypto Tokens Work
Crypto refers to the various encryption algorithms and cryptographic techniques that safeguard these entries, such as elliptical curve encryption, public-private key pairs, and hashing functions. Cryptocurrencies, on the other hand, are systems that allow for online secure online payments.
Crypto tokens often serve as the transactional units on the blockchains that are created using standard templates like that of the Ethereum network, which allows a user to create tokens. Such blockchains work on the concept of smart contracts or decentralized applications, wherein the programmable, self-executing code is used to process and manage the various transactions that occur.
A smart contract is a self-executing program that automates transactions. Contrary to popular belief, the terms of the contract are not written into the lines of code. Terms are agreed upon by the parties involved, and the code is written to execute them.
For example, you might receive a crypto token representing a certain number of customer loyalty points on a blockchain that manages such details for a retail chain. Another crypto token might give the token holder the entitlement to view 10 hours of streaming content on a video-sharing blockchain. A token can even represent other cryptocurrencies, such as a crypto token equalling 15 bitcoins on a particular blockchain. Such crypto tokens are tradable and transferrable among the various participants of the blockchain
Investors can use crypto tokens for any number of reasons. They can hold onto them to represent a stake in the cryptocurrency company or for an economic reason—to trade or make purchases of goods and services. As a practical example, decentralized storage provider Bluzelle allows you to stake your tokensto help secure its network while earning transaction fees and rewards.
The Financial Industry Regulatory Authority (FINRA) continues to issue alerts about ICO fraud, so be sure you research before investing in any cryptocurrency—the same way you would with any stock.
Crypto Tokens vs. Cryptocurrencies
The term crypto token is often erroneously used interchangeably with "cryptocurrency." However, these terms are distinct from one another.
A cryptocurrency is used for making or receiving payments using a blockchain, with the most popular cryptocurrency being Bitcoin (BTCUSD). Altcoins are alternative cryptocurrencies that were launched after the massive success achieved by Bitcoin. The term means alternative coins—that is—cryptocurrency other than Bitcoin. They were launched as enhanced Bitcoin substitutes that have claimed to overcome some of Bitcoin's pain points. Litecoin (LTCUSD), Bitcoin Cash (BCHUSD), Namecoin, and Dogecoin (DOGEUSD) are typical examples of altcoins. Though each has tasted varying levels of success, none have managed to gain popularity akin to Bitcoin's.
Crypto tokens operate on a blockchain, which acts as a medium for the creation and execution of decentralized apps and smart contracts. The tokens are used to facilitate transactions on the blockchain. In many cases, tokens go through an ICO and then transistion to this stage after the ICO completes.
What Is the Purpose of Tokens?
Crypto tokens generally facilitate transactions on a blockchain but can represent an investor's stake in a company or serve an economic purpose, just like legal tender. This means token holders can use them to make purchases or trades just like other securities to make a profit.
Is Bitcoin a Token or a Coin?
Bitcoin is a cryptocurrency, generally used to trade, make purchases, or store value.
What Is the Difference Between a Crypto Coin and a Crypto Token?
Crypto coins are designed to be used as currency, while crypto tokens are intended to represent an interest in an asset and facilitate transactions on a blockchain.
What Are Some of the Different Types of Tokens That Reside on Blockchains?
Blockchain tokens include reward, utility, security, governance, and asset tokens.
The Bottom Line
Crypto tokens are digital representations of interest in an asset or used to facilitate transactions on a blockchain. They are often confused with cryptocurrency because they are also tradeable and exchangeable.
Crypto tokens are often used as a way to raise funds for projects in initial coin offerings. ICOs have been abused by many parties to fool investors into contributing funds, only to disappear, but many are valid fundraising attempts by legitimate businesses. If you're considering crypto tokens as an investment, be sure to do your research on the team or company offering them.
Investing in cryptocurrencies and other Initial Coin Offerings (“ICOs”) is highly risky and speculative, and this article is not a recommendation by Investopedia or the writer to invest in cryptocurrencies or other ICOs. Since each individual's situation is unique, a qualified professional should always be consulted before making any financial decisions. Investopedia makes no representations or warranties as to the accuracy or timeliness of the information contained herein. As of the date this article was written, the author does not own cryptocurrency.
Article Sources
Investopedia requires writers to use primary sources to support their work. These include white papers, government data, original reporting, and interviews with industry experts. We also reference original research from other reputable publishers where appropriate. You can learn more about the standards we follow in producing accurate, unbiased content in our
editorial policy.
Sites.Google.com. "MasterCoin Specification (AKA The Second Bitcoin Whitepaper)," Click on MasterCoin Specification 1.0 20130731.pdf and download the document.
European Securities and Markets Authority. "Esma Highlights ICO Risks for Investors and Firms."
U.S. Securities and Exchange Commission. "Investor Alert: Public Companies Making ICO-Related Claims."
U.S. Securities and Exchange Commission. "Initial Exchange Offerings (IEOs) – Investor Alert."
ICODrops.com. "ICODrops."
Metacade. "Metacade ($MCADE) Whitepaper."
BananaCoin. "Whitepaper BananaCoin."
Bluzelle. "Understanding Bluzelle Mainnet: Block Rewards."
Bluzelle. "Web3 Belongs to the Creators."
Financial Industry Regulatory Authority. "Initial Coin Offerings (ICOs)—What to Know Now and Time-Tested Tips for Investors."
Compare Accounts
Advertiser Disclosure
×
The offers that appear in this table are from partnerships from which Investopedia receives compensation. This compensation may impact how and where listings appear. Investopedia does not include all offers available in the marketplace.
Provider
Name
Description
Part Of
What Investors Need to Know About Altcoins
Altcoin Explained: Pros and Cons, Types, and Future
1 of 25
10 Important Cryptocurrencies Other Than Bitcoin
2 of 25
Gas (Ethereum): How Gas Fees Work on the Ethereum Blockchain
3 of 25
What Does Proof-of-Stake (PoS) Mean in Crypto?
4 of 25
What Are Crypto Tokens, and How Do They Work?
5 of 25
Stablecoins: Definition, How They Work, and Types
6 of 25
HODL: The Cryptocurrency Strategy of "Hold on for Dear Life" Explained
7 of 25
Binance Exchange
8 of 25
ICON: What it is, How it Works, Criticisms
9 of 25
What Is Shitcoin?
10 of 25
Tether (USDT): Meaning and Uses for Tethering Crypto Explained
11 of 25
Cryptocurrency Dogecoin (DOGE): What It Is, History, and Uses
12 of 25
Binance Coin (BNB) Uses, Support, and Market Cap
13 of 25
Litecoin (LTC): What It Is, How It Works, vs. Bitcoin
14 of 25
Ripple Definition
15 of 25
Tezos (XTZ): Definition and How It Works in Crypto
16 of 25
Cardano (ADA): What It Is, How It Differs From Bitcoin
17 of 25
Best Crypto Exchanges and Apps of March 2024
18 of 25
Binance vs. Coinbase
19 of 25
Robinhood vs. Coinbase
20 of 25
coinbase vs coinbase pro
21 of 25
eToro vs. Coinbase
22 of 25
Gemini vs. Coinbase
23 of 25
Kraken vs. Coinbase
24 of 25
How to Buy Ripple (XRP)
25 of 25
Related Terms
Altcoin Explained: Pros and Cons, Types, and Future
An altcoin is a cryptocurrency or token that is not Bitcoin (BTC). Etherum (ETH) is an altcoin. Learn about altcoins and what makes them different.
more
Non-Fungible Token (NFT): What It Means and How It Works
NFTs are cryptographic tokens that cannot be replicated. They can be used for transactions, have created new markets, and may have more use cases in the future.
more
Cryptocurrency Security Token: Definition, Forms, and Investment
A cryptocurrency security token is a digital representation of ownership in a company or an asset and is used to raise capital for enterprise and business purposes.
more
Kin: What It Was, How It Worked, and Future
Kin began as the official cryptocurrency for the Kik messenger service. Kik users could use earn Kin for making contributions to the broader Kik community.
more
Premining: What It Is, How It Works, Pros and Cons
Premining is the mining or creation of a number of cryptocurrency coins before the cryptocurrency is distributed to the public.
more
Peer-to-Peer (Virtual Currency): Definition and How It Works
Peer-to-peer is the exchange of information, data, or assets between two parties. Virtual currency is a digital representation of value with no tangible form.
more
Related Articles
Financial Advisor Guide to Initial Coin Offerings (ICOs)
What’s Crypto Good For?
Altcoin Explained: Pros and Cons, Types, and Future
Non-Fungible Token (NFT): What It Means and How It Works
How to Find New Cryptocurrencies for Investment
Cryptocurrency Security Token: Definition, Forms, and Investment
Partner Links
About Us
Terms of Service
Dictionary
Editorial Policy
Advertise
News
Privacy Policy
Contact Us
Careers
#
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
Investopedia is part of the Dotdash Meredith publishing family.
Please review our updated Terms of Service.