文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

一文搞懂Tokenization!

2024-11-29 23:52

关注

Tokenization是NLP的基本任务,按照特定需求能把一段连续的文本序列(如句子、段落等)切分为一个字符串序列(如单词、短语、字符、标点等多个单元),其中的元素称为token或词语。

具体流程如下图所示,首先将文本句子切分成一个个单元,然后将子单元数值化(映射为向量),再将这些向量输入到模型进行编码,最后输出到下游任务进一步得到最终的结果。

文本切分

按照文本切分的粒度可以将Tokenization分为词粒度Tokenization、字符粒度Tokenization、subword粒度Tokenization三类。

1.词粒度Tokenization

词粒度Tokenization是最直观的分词方式,即是指将文本按照词汇words进行切分。例如:

The quick brown fox jumps over the lazy dog.

词粒度Tokenized结果:

['The', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog', '.']

在这个例子中,文本被切分为一个个独立的单词,每个单词作为一个token,标点符号'.'也被视为独立的token。

如若是中文文本,则通常是按照词典收录的标准词汇或是通过分词算法识别出的短语、成语、专有名词等进行切分。例如:

我喜欢吃苹果。

词粒度Tokenized结果:

['我', '喜欢', '吃', '苹果', '。']

这段中文文本被切分成五个词语:“我”、“喜欢”、“吃”、“苹果”和句号“。”,每个词语作为一个token。

2.字符粒度Tokenization

字符粒度Tokenization将文本分割成最小的字符单元,即每个字符被视为一个单独的token。例如:

Hello, world!

字符粒度Tokenized结果:

['H', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '!']

字符粒度Tokenization在中文中是将文本按照每个独立的汉字进行切分。

我喜欢吃苹果。

字符粒度Tokenized结果:

['我', '喜', '欢', '吃', '苹', '果', '。']

3.subword粒度Tokenization

subword粒度Tokenization介于词粒度和字符粒度之间,它将文本分割成介于单词和字符之间的子词(subwords)作为token。常见的subword Tokenization方法包括Byte Pair Encoding (BPE)、WordPiece等。这些方法通过统计文本数据中的子串频率,自动生成一种分词词典,能够有效应对未登录词(OOV)问题,同时保持一定的语义完整性。

helloworld

假设经过BPE算法训练后,生成的子词词典包含以下条目:

h, e, l, o, w, r, d, hel, low, wor, orld

子词粒度Tokenized结果:

['hel', 'low', 'orld']

这里,“helloworld”被切分为三个子词“hel”,“low”,“orld”,这些都是词典中出现过的高频子串组合。这种切分方式既能处理未知词汇(如“helloworld”并非标准英语单词),又保留了一定的语义信息(子词组合起来能还原原始单词)。

在中文中,subword粒度Tokenization同样是将文本分割成介于汉字和词语之间的子词作为token。例如:

我喜欢吃苹果

假设经过BPE算法训练后,生成的子词词典包含以下条目:

我, 喜, 欢, 吃, 苹, 果, 我喜欢, 吃苹果

子词粒度Tokenized结果:

['我', '喜欢', '吃', '苹果']

在这个例子中,“我喜欢吃苹果”被切分为四个子词“我”、“喜欢”、“吃”和“苹果”,这些子词均在词典中出现。虽然没有像英文子词那样将汉字进一步组合,但子词Tokenization方法在生成词典时已经考虑了高频词汇组合,如“我喜欢”和“吃苹果”。这种切分方式在处理未知词汇的同时,也保持了词语级别的语义信息。

索引化

假设已有创建好的语料库或词汇表如下。

vocabulary = {
    '我': 0,
    '喜欢': 1,
    '吃': 2,
    '苹果': 3,
    '。': 4
}

则可以查找序列中每个token在词汇表中的索引。

indexed_tokens = [vocabulary[token] for token in token_sequence]
print(indexed_tokens)

输出:[0, 1, 2, 3, 4]。

来源:小喵学AI内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯