datawhale 第三章-模型架构

一、大模型的分词器

1.1 什么是分词?

分词的目的是将输入文本分成一个个词元,保证各个词元拥有相对完整和独立的语义,以供后续任务(比如学习embedding或者作为高级模型的输入)使用。

1.2 分词的三种粒度
词粒度

在英文等语言中有着天然的空格分隔,

但是对于中文等语言可能需要额外的分词算法来进行处理(比如中文的jieba分词)

词粒度的缺点:

  • 词粒度的词表由于长尾效应可能会非常大,并且稀有词往往很难学好;
  • OOV问题,对于词表之外的词无能为力;
  • 无法处理单词的形态关系和词缀关系:同一个词的不同形态,语义相近,完全当做不同的单
字符粒度

 缺点:

  • 无法承载丰富的语义;
  • 序列长度增长,带来计算成本的增长。
Subword粒度

三种主流的Subword分词算法,分别是Byte Pair Encoding (BPE), WordPieceUnigram Language Model。

1.3 分词器原理
1.3.1 BPE

核心思想:从一个基础小词表开始,通过不断合并最高频的连续token对来产生新的token。

具体做法:

                输入:训练语料;词表大小V

                1.准备基础词表:比如英文中26个字母加上各种符号;

                2.基于基础词表将语料拆分为最小单元;

                3.在语料上统计单词内相邻单元对的频率,选择频率最高的单元对进行合并;

                4.重复第3步直到达到预先设定的subword词表大小或下一个最高频率为1;

                输出:BPE算法得到的subword词表

优势与劣势:

                优势:可以有效地平衡词汇表大小和编码步数(编码句子所需的token数量

                           与词表大小和粒度有关)。

                 劣势:基于贪婪和确定的符号替换,不能提供带概率的多个分词结果

                           (这是相对于ULM而言的);decode的时候面临歧义问题。

1.3.2 WordPiece

核心思想:与BPE类似,也是从一个基础小词表出发,通过不断合并来产生最终的词表。主要的差别在于,BPE按频率来选择合并的token对,而wordpiece按token间的互信息来进行合并。注:互信息,在分词领域有时也被称为凝固度、内聚度,可以反映一个词内部的两个部分结合的紧密程度。

具体做法:           

        除了合并对象的选择以外,基本同BPE;

        输入:训练语料;词表大小V

        1.准备基础词表:比如英文中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问题;

        劣势:可能会产生一些不太合理的子词或者说错误的切分;对拼写错误非常敏感;对前缀的支持不够好;

二、大模型模型架构

目前以Transfromer为基础自回归生成大致可以分为三种架构:

  • Encoder-Decoder架构,代表开源模型:T5
  • Prefix-LM架构,代表开源模型:ChatGLM
  • Decoder-Only架构(也叫Causal- LM),代表开源模型:GPT3

先来个结论:Decoder-Only相对于其它二者的优点,是条件信息和生成信息之间更加对齐,GAP更小,因此更容易训练。但我还是澄清我的观点,容易训练不代表最终表现会更好,因此,不代表其它架构没有研究的价值,甚至一定程度上还可以说它们潜力更大。

#ref 为什么现在的LLM都是Decoder only的架构? - 知乎

你可能感兴趣的:(人工智能)