本文为作者内部分享文档,由于不涉敏可以公开,分享本身是课程形式,有什么疑问欢迎在评论区留言。
人工智能发展到现在,在2个重要领域取得了重大突破,有望达到人类水平:
AIGC
自然语言处理在大语言模型(Large Language Model, LLM)被提出之后,再次取得重大突破:
注:
接下来我们来从0到1了解一下大语言模型背后的基础知识。
通过本节课程,希望大家能够了解:
根据语言客观事实而进行的语言抽象数学建模,是一种对应关系。 语言模型与语言客观事实之间的关系,如同数学上的抽象直线与具体直线之间的关系。
#mermaid-svg-DWYDkMUSSB3OdMcS {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-DWYDkMUSSB3OdMcS .error-icon{fill:#552222;}#mermaid-svg-DWYDkMUSSB3OdMcS .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-DWYDkMUSSB3OdMcS .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-DWYDkMUSSB3OdMcS .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-DWYDkMUSSB3OdMcS .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-DWYDkMUSSB3OdMcS .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-DWYDkMUSSB3OdMcS .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-DWYDkMUSSB3OdMcS .marker{fill:#333333;stroke:#333333;}#mermaid-svg-DWYDkMUSSB3OdMcS .marker.cross{stroke:#333333;}#mermaid-svg-DWYDkMUSSB3OdMcS svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-DWYDkMUSSB3OdMcS .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-DWYDkMUSSB3OdMcS .cluster-label text{fill:#333;}#mermaid-svg-DWYDkMUSSB3OdMcS .cluster-label span{color:#333;}#mermaid-svg-DWYDkMUSSB3OdMcS .label text,#mermaid-svg-DWYDkMUSSB3OdMcS span{fill:#333;color:#333;}#mermaid-svg-DWYDkMUSSB3OdMcS .node rect,#mermaid-svg-DWYDkMUSSB3OdMcS .node circle,#mermaid-svg-DWYDkMUSSB3OdMcS .node ellipse,#mermaid-svg-DWYDkMUSSB3OdMcS .node polygon,#mermaid-svg-DWYDkMUSSB3OdMcS .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-DWYDkMUSSB3OdMcS .node .label{text-align:center;}#mermaid-svg-DWYDkMUSSB3OdMcS .node.clickable{cursor:pointer;}#mermaid-svg-DWYDkMUSSB3OdMcS .arrowheadPath{fill:#333333;}#mermaid-svg-DWYDkMUSSB3OdMcS .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-DWYDkMUSSB3OdMcS .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-DWYDkMUSSB3OdMcS .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-DWYDkMUSSB3OdMcS .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-DWYDkMUSSB3OdMcS .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-DWYDkMUSSB3OdMcS .cluster text{fill:#333;}#mermaid-svg-DWYDkMUSSB3OdMcS .cluster span{color:#333;}#mermaid-svg-DWYDkMUSSB3OdMcS div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-DWYDkMUSSB3OdMcS :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}
基于概率/统计的语言模型
神经网络语言模型
预训练语言模型
大语言模型
语言模型发展简史
一说统计语言模型 Statistic Language Model 概率语言模型是一个基于概率的判别式模型,它的输入是一句话即多个单词组成的顺序序列,输出是这句话的概率,即这些单词的联合概率(joint probability)。
compute the probability of a sentence or sequence of words
概率语言模型是一个针对语言进行数学建模的概率模型,它衡量了一句话,也即是多个单词的组成的顺序序列,在语料库(corpus)中实际存在的概率,如果语料库无限大,那么这个概率扩展到这句话实际在自然语言中存在的概率。
注:也可以理解为是也可以理解为它是真实正确的一句话的概率。
I like eating apples. ✅
I prefer coke to soda. ✅
Enjoy basketball playing I. ❌
以上面3个句子为例,前2句是真实句子,在日常生活中可能会被用到,第3句则不是。
假定一个自然语言句子
由
个单词组成,记为
,那么:
条件概率公式:
这么计算概率有个问题:
,句子越长,参数空间越大,概率越接近0,数据稀疏严重。
引入马尔科夫假设(Markov Assumption),即下一个词的出现仅依赖于它前面的
个词,我们得到:
马尔科夫性质:当一个随机过程在给定现在状态及所有过去状态情况下,其未来状态的条件概率分布仅依赖于当前状态;换句话说,在给定现在状态时,它与过去状态(即该过程的历史路径)是条件独立的,那么此随机过程即具有马尔可夫性质。 这里引入马尔科夫假设,认为按从左到右读到的一句话有时间先后的概念,后面的单词仅依赖于它前面的n-1个单词。
表示下一个词的出现不依赖它前面的0个单词,即每个单词条件独立,称为unigram model
# English
Questions make difference.
Questions make reality.
Questions begin a quest.
# 中文
我吃苹果。
我吃香蕉。
我喝可乐。
提问:
给定单词“我”,下一个单词是吃的概率是多少?下一个单字是喝的概率是多少?“我吃苹果”整句话的概率是多少?
表示下一个词的出现只依赖它前面的1个词,称为bigram model
表示下一个词的出现只依赖它前面的2个词,称为trigram model(常用)
以此类推,我们的得到了给定
词,输出下一个词概率的语言模型:
,其中
表示单词序列
构建语言模型可以使用最大似然估计(Maximum Likelihood Estimate)生成每一个条件概率,以unigram为例即:
计算概率语言模型公式的每一个组成元素,再将所有组成元素连乘,即得整个句子的概率。
提问(非常重要): 给定
个词,为语料库里面的所有单词依次计算概率,选概率最大的那个单词,作为n+1个单词输出,想想我们在做什么?
给定n+1个单词,求第n+2个单词,…,我们在做文本生成,这就是语言模型最朴素的原理。
这种用法下,我们将n-gram模型作为生成式模型使用。
N-gram语言模型实际效果并不好,能解决的实际问题非常有限,因而自然语言处理在概率语言模型阶段没有产生太大影响力。
随着深度学习的出现和崛起,我们有了一个强有力的工具:人工神经网络。 神经网络语言模型即使用神经网络来进行语言建模,我们将给定的n个单词作为输入,预测第n+1个单词作为输出,那么可以使用监督学习的方式通过标记数据集让神经网络学习到输入和输出之间的映射关系。
NNLM, Neural Network Language Model A Neural Probabilistic Language Model (2000, 2003)
使用一个简单的神经网络来替代概率模型,模型的训练目标定义为给定
个单词作为上下文,预测下一个单词是上下文中的第
个单词,输入层
表示一个共享的矩阵参数,随机初始化,
表示语料库中第
个单词的特征向量。
提问(非常重要): 输入层的矩阵
是什么?
答案:词向量
Efficient Estimation of Word Representations in Vector Space(2013) 训练神经网络语言模型过程中,将神经网络的权重值作为词向量来使用
现在我们讲的词向量,其实是训练语言模型过程中的副产品
项目 | Value |
---|---|
CBOW (Continuous Bag-of-Words Model) | Skip-gram |
CBOW 的基本思想为以上下文作为输入,预测中间词。具体而言,设定一个上下文范围 N,输入为中间词的前 N 个单词和后 N 个单词,输出为中间词的概率分布,训练目标是真实中间词的概率最大(即argmax),也即1次分类过程。 | Skip-gram基本思想为以中间单词作为输入,预测上下文。具体而言,设定一个上下文范围 N,输入为中间词,输出为前 N 个单词和后 N 个单词的概率分布,训练目标是2N次概率输出,每次使得真实上下文词的概率最大(即2N次argmax),也即2N次分类过程。训练过程的参数规模非常巨大,有Hierarchical Softmax、Negative Sampling等方式降低计算复杂度,这里不再展开。 |
上个小节介绍的NNLM和Word2Vec是一个DNN架构的神经网络语言模型,随着神经网络架构的演进,神经网络语言模型的架构也在不断演进:
#mermaid-svg-wfYuxqBjlhNqC6Bw {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-wfYuxqBjlhNqC6Bw .error-icon{fill:#552222;}#mermaid-svg-wfYuxqBjlhNqC6Bw .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-wfYuxqBjlhNqC6Bw .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-wfYuxqBjlhNqC6Bw .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-wfYuxqBjlhNqC6Bw .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-wfYuxqBjlhNqC6Bw .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-wfYuxqBjlhNqC6Bw .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-wfYuxqBjlhNqC6Bw .marker{fill:#333333;stroke:#333333;}#mermaid-svg-wfYuxqBjlhNqC6Bw .marker.cross{stroke:#333333;}#mermaid-svg-wfYuxqBjlhNqC6Bw svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-wfYuxqBjlhNqC6Bw .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-wfYuxqBjlhNqC6Bw .cluster-label text{fill:#333;}#mermaid-svg-wfYuxqBjlhNqC6Bw .cluster-label span{color:#333;}#mermaid-svg-wfYuxqBjlhNqC6Bw .label text,#mermaid-svg-wfYuxqBjlhNqC6Bw span{fill:#333;color:#333;}#mermaid-svg-wfYuxqBjlhNqC6Bw .node rect,#mermaid-svg-wfYuxqBjlhNqC6Bw .node circle,#mermaid-svg-wfYuxqBjlhNqC6Bw .node ellipse,#mermaid-svg-wfYuxqBjlhNqC6Bw .node polygon,#mermaid-svg-wfYuxqBjlhNqC6Bw .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-wfYuxqBjlhNqC6Bw .node .label{text-align:center;}#mermaid-svg-wfYuxqBjlhNqC6Bw .node.clickable{cursor:pointer;}#mermaid-svg-wfYuxqBjlhNqC6Bw .arrowheadPath{fill:#333333;}#mermaid-svg-wfYuxqBjlhNqC6Bw .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-wfYuxqBjlhNqC6Bw .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-wfYuxqBjlhNqC6Bw .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-wfYuxqBjlhNqC6Bw .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-wfYuxqBjlhNqC6Bw .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-wfYuxqBjlhNqC6Bw .cluster text{fill:#333;}#mermaid-svg-wfYuxqBjlhNqC6Bw .cluster span{color:#333;}#mermaid-svg-wfYuxqBjlhNqC6Bw div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-wfYuxqBjlhNqC6Bw :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}
DNN
CNN
RNN:LSTM/GRU
Transformer
NNLM/Word2Vec
text_classification
Elmo
BERT/GPT1.0/2.0
PaLM、LLaMA、GPT 3.5、GPT 4
大规模语言模型(Large Language Model, LLM),即参数规模非常大的神经网络语言模型,由神经网络语言模型随网络架构经长时间发展迭代而来,特点是参数规模达到一定量级(千万~亿)之后,出现了涌现能力,使得模型在各项NLP任务中取得重大突破,接近人类水平。
涌现能力一句话介绍就是模型参数达到一定量级(亿),能力突飞猛进,更多详情,可以参见:
LLM的涌现能力和Scaling Emergent Abilities of Large Language Models Scaling Laws for Neural Language Models
预训练模型 NLP范式:Pre-training + fintuning 即预训练 + 下游任务精调
Pre-training + instruction fintuning + RLHF 即 预训练+指令精调+RLHF 下一节的GPT训练流程部分有详细描述
PaLM: https://arxiv.org/pdf/2204.02311 LLaMA: https://arxiv.org/pdf/2302.13971
清华提出了ChatGLM系列,并开源了其中的ChatGLM-6B和ChatGLM2-6B,在C-Eval上测试是目前最好的中文大模型:
https://cevalbenchmark.com/static/leaderboard.html
如果我们单看GPT的话
GPT-1: Improving Language Understanding by Generative Pre-Training GPT-2: Language Models are Unsupervised Multitask Learners GPT-3: Language Models are Few-Shot Learners
笔者翻译上图如下:
阶段 | 子阶段 | 目标 | 备注 |
---|---|---|---|
Pre-Training | -------- | 语言建模 | |
Instruction Finetuning | --------- | 让模型能够理解自然语言指令 | |
RLHF | Reward Modeling | 奖励建模,用来代替人工打分,降低标注成本 | 奖励模型是用来建模强化学习的一个组件 |
RLHF | Reinforcement Learning | 强化学习建模,通过强化学习的方式训练模型输出奖励最大的文本,即更符合人类偏好的文本 |
强化学习建模过程如下:
进入
后的文本
。
注: 3. 二元分类说法并不准确,原始目标是希望对两个生成的回复进行打分即两者之间按更符合人类预期进行比较,胜出的回复应该得到更多的分数,亦即获得更大的奖励。或者也可以认为是在两者之间做分类,将更符合人类预期的筛选出来,但前者是更加准确的描述。
图源:cs224n-2023-lecture11-prompting-rlhf.pdf
#mermaid-svg-vVAYeA0K1naaewvK {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-vVAYeA0K1naaewvK .error-icon{fill:#552222;}#mermaid-svg-vVAYeA0K1naaewvK .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-vVAYeA0K1naaewvK .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-vVAYeA0K1naaewvK .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-vVAYeA0K1naaewvK .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-vVAYeA0K1naaewvK .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-vVAYeA0K1naaewvK .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-vVAYeA0K1naaewvK .marker{fill:#333333;stroke:#333333;}#mermaid-svg-vVAYeA0K1naaewvK .marker.cross{stroke:#333333;}#mermaid-svg-vVAYeA0K1naaewvK svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-vVAYeA0K1naaewvK .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-vVAYeA0K1naaewvK .cluster-label text{fill:#333;}#mermaid-svg-vVAYeA0K1naaewvK .cluster-label span{color:#333;}#mermaid-svg-vVAYeA0K1naaewvK .label text,#mermaid-svg-vVAYeA0K1naaewvK span{fill:#333;color:#333;}#mermaid-svg-vVAYeA0K1naaewvK .node rect,#mermaid-svg-vVAYeA0K1naaewvK .node circle,#mermaid-svg-vVAYeA0K1naaewvK .node ellipse,#mermaid-svg-vVAYeA0K1naaewvK .node polygon,#mermaid-svg-vVAYeA0K1naaewvK .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-vVAYeA0K1naaewvK .node .label{text-align:center;}#mermaid-svg-vVAYeA0K1naaewvK .node.clickable{cursor:pointer;}#mermaid-svg-vVAYeA0K1naaewvK .arrowheadPath{fill:#333333;}#mermaid-svg-vVAYeA0K1naaewvK .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-vVAYeA0K1naaewvK .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-vVAYeA0K1naaewvK .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-vVAYeA0K1naaewvK .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-vVAYeA0K1naaewvK .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-vVAYeA0K1naaewvK .cluster text{fill:#333;}#mermaid-svg-vVAYeA0K1naaewvK .cluster span{color:#333;}#mermaid-svg-vVAYeA0K1naaewvK div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-vVAYeA0K1naaewvK :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}
基于概率/统计的语言模型
神经网络语言模型
预训练语言模型
大语言模型