AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


大模型token的漫游之旅:Word Embedding | 兼看Qwen的参数构成
发布日期:2024-07-18 04:38:45 浏览次数: 1805


    上篇文章介绍了,token是什么,简述了词表构建,以及分词的一些方法。我们知道了,在构造大模型时,首先会构建一个词表,然后根据词表将输入的句子切分成一个一个的token;但是计算机是怎么理解token的呢,token是如何参与计算的呢?

本文进行解答,本文将包含以下三个部分:

    传统词编码方法
    大模型中的词编码方法
    Qwen-7B的参数分析:词表


传统编码方法

One-Hot编码



One-Hot编码是将每个token表示为一个长向量,向量的长度等于词汇表的大小。在这个向量中,token对应的词汇表索引位置设为1,其余位置设为0。

比如有一个数据集:
我 爱 人工智能我 爱 中国


那么得到的词表是:[我,爱, 人工智能, 中国]

 句子"我 爱 中国"中三个token就可以表示为



人工智能 中国

1 0 0 0

0
1
0 0
中国 0
0 0
1

优点:

  1. 简单性:One Hot 编码实现简单,易于理解和应用。

  2. 无偏性:它不会引入词之间的任何偏序关系,每个词都是独立的维度。

  3. 易于实现:大多数编程语言和库都提供了 One Hot 编码的实现。

缺点:

  1. 维度高:对于词汇量大的语言模型,One Hot 编码会导致非常高的维度,浪费计算资源和内存。

  2. 稀疏性:One Hot 编码的数据非常稀疏,大多数元素都是零,这可能会增加存储和计算成本。

  3. 丢失语义信息:One Hot 编码不能捕捉词与词之间的语义关系(词都是单独的,不能暗含中国和中华的关系)。

  4. 不适合复杂的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" 更接近,这些是以前做词联想和相似度匹配的常用方法。

优点:

  1. 语义信息:词嵌入能够捕捉词与词之间的语义关系,例如,"king" 和 "queen" 在嵌入空间中可能比 "king" 和 "car" 更接近。

  2. 降维:相比于 One Hot 编码,词嵌入通常具有更低的维度,这有助于减少计算复杂度和避免维度灾难。

  3. 捕捉词序:词嵌入可以捕捉到词序信息,有助于理解词在句子中的上下文关系。

  4. 泛化能力:词嵌入模型通常通过大量文本数据训练得到,具有很好的泛化能力,可以应用于不同的任务和领域。

  5. 连续性:词嵌入是连续的向量表示,可以进行向量运算,如向量加法和余弦相似度计算。

缺点:

  1. 训练成本:词嵌入模型需要大量的数据和计算资源来训练,特别是对于大型语料库。

  2. 更新困难:一旦模型训练完成,更新词向量以适应新词汇或新领域可能比较困难。

  3. 可解释性:词嵌入的向量表示可能不如 One Hot 编码直观,难以解释每个维度的具体含义。

  4. 依赖上下文:词嵌入的语义信息依赖于上下文,可能会在某些情况下导致歧义。


大模型中的词嵌入

    在大模型中词嵌入先初始化一个大词嵌入矩阵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+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询