type
status
date
slug
summary
tags
category
icon
password
comments
llm学习过程中的笔记
Architecture大模型整体架构
经典论文Attention Is All You Need中提出的Transformer结构,成为了大模型的架构基础


Tokenization分词
1.分词介绍
分词目的
将输入的文本分成一个个词元,保证各个词元拥有相对完整和独立的语义,以供后续任务(比如embedding或者作为高级模型的输入)使用
分词的三种粒度
1.词粒度word:
英文天生空格分开词汇,中文可以使用jieba分词工具
优点:词的边界和含义得到保留
缺点:
长尾效应
词粒度的词表由于长尾效应可能会非常大,包含很多的稀有词,存储和训练的成本很高,并且稀有词往往很难学好
OOV(out of vocabulary)问题
对于词表之外的词无能为力
无法处理单词的形态关系和词缀关系
同一个词的不同形态,语义相近,完全当做不同的单词不仅增加里训练成本,而且无法很好的捕捉这些单词之间的关系;同时,也无法学习词缀在不同单词之间的泛化
2.字符粒度char:
解决OOV问题
优点:词表极小,比如26个英文字母可以组合出所有词,5000多个中文常用字基本上也能组合出足够的词汇,再加上一些常用字符
缺点:
无法承载丰富的语义
序列长度增加
带来计算成本增长
3.子词粒度subword:
粒度介于char到word之间,基本思想为常用词应该保持现状,生僻词应该拆分为字词和共享token压缩存储空间
优点:可以较好的平衡词表大小与语义表达能力,比如OOV的问题可以通过subword的组合来解决,三种主流的Subword分词算法,分别是BPE,WordPiece和Unigram Language Modle
分词的实例
分词结果可视化的网站,分别用gpt2和gpt4o的Tokenizer去可视化中文英文数字和代码的分词结果,可以看到对比gpt2,gpt40的分词器词汇表更大,相同的内容,最后的token总数更少,每一个token包含的连贯的语义更加准确
提升分词效果的意义
Tokenization是很多llm问题的核心
2.分词算法
Byte Pair Encoding(BPE)
核心思想:从一个小词表开始,通过不断合并最高频的连续token对来产生新的token
具体做法:输入训练预料和期望词表大小V
准备基础词表
例如26个英文字母加上各种符号,并初始化id
拆分
基于基础词表将准备的语料拆分为最小单元
合并
在语料上统计单词内相邻单元对的频率,选择频率最高的单元对进行合并
重复
一直重复合并,直到达到预先设定的subword词表大小或下一个最高频率为1
优点:
欢迎您在底部评论区留言,一起交流~
- 作者:于淼
- 链接:https://yumiao1.com/article/1d169159-6c5f-804b-a45d-f7e864b4ca43
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。