ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

大语言模型

大语言模型 一、N-gram 传统语言模型语言模型定义对文字序列赋予概率的数学模型建模语言中词序列的合理程度也叫成句概率也就是说建立一个数学模型能够判断一个句子是否为人话的概率这个模型就可以称为语言模型链式规则分解P(w1w2w3)P(w1)P(w2|w1)P(w3|w1w2)实际应用场景搜索补全输入【今天天气】–自动建议【今天天气怎么样】输入法联想输入【我想】–推荐 吃饭/睡觉/出门语音识别区分【我去买菜】与【我去迈蔡】拼写错误监测“teh cat”建议“the cat”机器翻译选择更流畅、更符合习惯的译文链式规则展开如果句子很长而且文字组合非常灵活将会导致统计很难且可能无法统计出准确的结果。马尔可夫假设对链式规则进行了简化。将某个字出现在前面所有文字后的概率改为了某个字出现在前面X位文字后的概率。零概率问题如果学习的语料中没有出现过某个句子就会导致整个句子概率为零拉普拉斯平滑Add-1 Smoothing为每个词组合计数1避免零概率特点很快只要语料够多就能提前都统计好后续只需要查询即可相比神经网络的矩阵计算效率要高很多。在2016年还占有一定的市场率局限性数据稀疏N越大此组合呈指数级增长训练集难以覆盖所有词组合大量N-gram的出现概率为零长距离依赖失效仅记忆前N-1个词窗口固定例那只在河边散步的XX主谓跨度超过N时无法建模语义泛化弱基于字符串匹配无语义理解【猫吃鱼】 不等于 【猫咪吃鱼】同义词无法共享统计信息存储开销巨大存储量随V指数增长V50000时3-gram约125亿大N时内存/磁盘存储存在瓶颈二、RNN/LSTM神经网络语言模型思路NNLMN-gram的核心缺陷见上一节的约束性NNLM的解决方案词向量Word Embedding将每个词映射到稠密的向量空间语义相似的词距离相近【猫】约等于【猫咪】【跑步】约等于【】对比N-gram的优势数据稀疏零概率的问题被RNN的softMax解决了语义泛化弱被word Embedding的向量距离解决了长距离依赖失败RNN理论上利用任意长历史。RNN其实只能说是缓解了但是实际尚未解决存储开销RNN只与输入与隐藏层的维度有关模型是固定大小的不会随着训练量增大而需要更多的存储空间LSTM 语言模型实现与评估困惑度PerplexityPPL越低越好PPL是个相对值不是绝对值。同一个模型的两句话分辨两句话哪句更像人话的概率LSTM在长距离依赖和语义泛化上显著优于N-gram但仍存在顺序依赖、无法并行的瓶颈促使研究者探索Transformer结构和预训练范式。循环神经网络语言模型瓶颈顺序计算无法并行RNN/LSTM按时间步串行计算长序列训练时间极长GPU并行加速无法充分利用仍有记忆衰减LSTM改善了但未彻底解决超长文档效果下降书籍级别语境无法有效利用迁移能力有限每个下游任务需从头训练模型需要大量有标注训练数据不同任务间知识无法复用参数利用率低模型容量受单向序列结构限制无法同时利用左右两侧上下文双向LSTM是折中方案代价高三、BERTBERT实际上是一类方法的代表。BERT概览与营销核心创新双向上下文同时利用左侧和右侧词的语义信息预训练 微调通用模型 轻量任务适配头规模优势亿级参数海量语料预训练两阶段范式预训练预训练任务一Masked Language Model任务设计随机遮盖输入序列中15%的Token让模型预测被遮盖的原始词双向 vs 单向为何BERT更好双向上下文的优势多义词消歧【银行】在不同语境下有不同向量长距离依赖主语和谓语不论距离多远均可关联丰富语义综合前后词意获得更准确表示但是当前的大模型都是单向的所以此处双向我们只做了解即可。预训练任务二Next Sentence Prediction任务设计给定两个句子判断B是否是A的下一句。训练时50%正例、50%负例当前这个已经不被使用了。但是在当年有使用场景所以有做这个训练任务BERT同时优化两个预训练目标Loss MLM Loss NSP Loss但是NSP这个其实很简单没有太大的训练的必要性。所以在某一段时间段内还是使用的MLM的这种方法。但是最后Chat GPT爆火后由于ChatGPT是单向的后续的大模型都是单向的因为大模型主要做生成式任务这种生成式本身就是单向的。BERT整体模型结构一个模型强主要是1、训练的数据多2、模型结构强模型架构输入Token序列Embedding LayerTransformer Block*L输出表示向量BERT Embedding层Token Embedding将每个WordPiece Token映射到稠密向量Position Embedding可学习的位置编码表示Token在序列中的位置当初BERT的位置向量最多 512位。也就是一个文本最多512超过了就要做拆分才行从现在的视角看这个Embedding层是不必要的因为这个会反向约束文本窗口大小Segment Embedding区分句子AEA和句子BEB用于NSP任务从现在的视角看这个Embedding层是不必要的这个是当初BERT为了训练任务二而设计的而训练任务二最终都是被时代抛弃的因为没有必要e e_token e_position e_segmentTransformer Block总览单个Block结构自底向上输入向量输入向量来源于Embedding层 或者 上一层Transformer。BERT最初是有12层TransformerMulti-Head Self-Attention输入序列Xshape: L(BERT-base为 128)*d_model(728)线性投影–Q/K/Vshape:Ld_k(12864)把三个本来应该是 QKV三分的 128728的但是这里把它分别都切分为12分形成了3份 12块的 12864的张量Add LayerNorm 残差LayerNorm(本层输入向量 本层输出)Feed Forward 前馈网络FFN与残差连接Add LayerNorm 残差输出向量用pytorch手写一个Bert的Transforme进行练习
返回列表