微信扫码
添加专属顾问
我要投稿
上篇文章介绍了,token是什么,简述了词表构建,以及分词的一些方法。我们知道了,在构造大模型时,首先会构建一个词表,然后根据词表将输入的句子切分成一个一个的token;但是计算机是怎么理解token的呢,token是如何参与计算的呢?
本文进行解答,本文将包含以下三个部分:
传统编码方法
我 爱 人工智能我 爱 中国
那么得到的词表是:[我,爱, 人工智能, 中国]
句子"我 爱 中国"中三个token就可以表示为
| 我 |
爱 | 人工智能 | 中国 |
|
| 我 |
1 | 0 | 0 | 0 |
| 爱 |
0 |
1 |
0 | 0 |
| 中国 | 0 |
0 | 0 |
1 |
简单性:One Hot 编码实现简单,易于理解和应用。
无偏性:它不会引入词之间的任何偏序关系,每个词都是独立的维度。
易于实现:大多数编程语言和库都提供了 One Hot 编码的实现。
维度高:对于词汇量大的语言模型,One Hot 编码会导致非常高的维度,浪费计算资源和内存。
稀疏性:One Hot 编码的数据非常稀疏,大多数元素都是零,这可能会增加存储和计算成本。
丢失语义信息:One Hot 编码不能捕捉词与词之间的语义关系(词都是单独的,不能暗含中国和中华的关系)。
不适合复杂的NLP任务:对于需要理解词义和上下文的任务,One Hot 编码可能不够有效。
向量的编码方式是先设定一个维数(比如4维),那么每个token就是一个4维的向量表示,例如用(0.21, 0.155, 0.64, 0.36)表示上面的 “我”,这样有一个好处,就是不管词表有多大,每个token就是一个4维的向量;如果用onehot,如果词表有1000个词,那么一个token就是1000维的,而且只有它在词表中位置的数为1, 其它为0。
稠密词向量一般初始化一个值,然后通过在大量文本上训练得到的,能够捕捉词义和词与词之间的关系。常用的方法有Word2Vec,Glove,这些都有相应的包可以直接跑,有问题可以私信我。基于这些训练方法,可以得到"king" 和 "queen" 在嵌入空间中可能比 "king" 和 "car" 更接近,这些是以前做词联想和相似度匹配的常用方法。
语义信息:词嵌入能够捕捉词与词之间的语义关系,例如,"king" 和 "queen" 在嵌入空间中可能比 "king" 和 "car" 更接近。
降维:相比于 One Hot 编码,词嵌入通常具有更低的维度,这有助于减少计算复杂度和避免维度灾难。
捕捉词序:词嵌入可以捕捉到词序信息,有助于理解词在句子中的上下文关系。
泛化能力:词嵌入模型通常通过大量文本数据训练得到,具有很好的泛化能力,可以应用于不同的任务和领域。
连续性:词嵌入是连续的向量表示,可以进行向量运算,如向量加法和余弦相似度计算。
训练成本:词嵌入模型需要大量的数据和计算资源来训练,特别是对于大型语料库。
更新困难:一旦模型训练完成,更新词向量以适应新词汇或新领域可能比较困难。
可解释性:词嵌入的向量表示可能不如 One Hot 编码直观,难以解释每个维度的具体含义。
依赖上下文:词嵌入的语义信息依赖于上下文,可能会在某些情况下导致歧义。
大模型中的词嵌入
在大模型中词嵌入先初始化一个大词嵌入矩阵V(行是词表大小,列是向量维数) ,将句子的每个token映射到一个唯一的整数索引,然后使用这个索引在模型的词嵌入矩阵中查找对应的词向量。
token向量化之后,就可以被计算机识别了,参加模型内部的运算(加法和乘法),最后得到在一个输出向量,与词表V中的每一行进行对比计算相似度,随机输出概率高的一些行对应的token就为输出;控制输出尺度也就是调节参数(top_k,top_p),这些在后面将会介绍到,在使用大模型时如何设置超参数得到最理想的效果。
Qwen7B参数分析:词表
{"architectures": ["Qwen2ForCausalLM"],"attention_dropout": 0.0,"auto_map": {"AutoModel": "modeling_qwen.Qwen2Model","AutoModelForCausalLM": "modeling_qwen.Qwen2ForCausalLM","AutoModelForSequenceClassification": "modeling_qwen.Qwen2ForSequenceClassification"},"bos_token_id": 151643,"eos_token_id": 151643,"hidden_act": "silu","hidden_size": 3584,"initializer_range": 0.02,"intermediate_size": 18944,"max_position_embeddings": 131072,"max_window_layers": 28,"model_type": "qwen2","num_attention_heads": 28,"num_hidden_layers": 28,"num_key_value_heads": 4,"rms_norm_eps": 1e-06,"rope_theta": 1000000.0,"sliding_window": 131072,"tie_word_embeddings": false,"torch_dtype": "float32","transformers_version": "4.41.2","use_cache": true,"use_sliding_window": false,"vocab_size": 151646}
可以看到,两个重要的参数:"vocab_size": 151646,"hidden_size": 3584
词表的大小为151646,词的维数是3584,那么整个词表的参数就为:151646*3584=543499264,Qwen-7B总共70亿参数,词表就占用了5.4亿哦,如果用fp16加载,词表就得占用1G多的内存空间,大家知道在内存紧缺的并行训练阶段词表是怎么参与计算的吗?
接下来的文章中,我们将介绍大模型最重要的部分attention是什么?如何理解它?里面包含多少参数?
如果对内容有什么疑问和建议可以私信和留言,也可以添加我加入大模型交流群,一起讨论大模型在创作、RAG和agent中的应用
欢迎关注我的公众号“哎呀AIYA”,每天一篇大模型(LLM)文章来锻炼我们的思维,简单的叙述,不简单的内涵,提升自己。
推荐阅读
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2025-10-30
Cursor 2.0的一些有趣的新特性
2025-10-30
Anthropic 发布最新研究:LLM 展现初步自省迹象
2025-10-30
让Agent系统更聪明之前,先让它能被信任
2025-10-30
Rag不行?谷歌DeepMind同款,文档阅读新助手:ReadAgent
2025-10-29
4大阶段,10个步骤,助你高效构建企业级智能体(Agent)
2025-10-29
DocReward:让智能体“写得更专业”的文档奖励模型
2025-10-29
沃尔沃RAG实战:企业级知识库,早就该放弃小分块策略
2025-10-29
大模型的Funcation Calling是什么?
2025-08-21
2025-08-21
2025-08-19
2025-09-16
2025-10-02
2025-09-08
2025-09-17
2025-08-19
2025-09-29
2025-08-20
2025-10-29
2025-10-29
2025-10-28
2025-10-28
2025-10-27
2025-10-26
2025-10-25
2025-10-23