西安网站seo服务,一点号自媒体平台,如何注册域名步骤,留言的网页怎么制作目录
#x1f354; 大语言模型 (LLM) 背景
#x1f354; 语言模型 (Language Model, LM)
2.1 基于规则和统计的语言模型#xff08;N-gram#xff09;
2.2 神经网络语言模型
2.3 基于Transformer的预训练语言模型
2.4 大语言模型
#x1f354; 语言模型的评估指标 …
目录 大语言模型 (LLM) 背景 语言模型 (Language Model, LM)
2.1 基于规则和统计的语言模型N-gram
2.2 神经网络语言模型
2.3 基于Transformer的预训练语言模型
2.4 大语言模型 语言模型的评估指标
3.1 BLEU
3.2 ROUGE
3.3 困惑度PPL(perplexity) 小结 学习目标 了解LLM背景的知识. 掌握什么是语言模型 大语言模型 (LLM) 背景
大语言模型 (英文Large Language Model缩写LLM) 是一种人工智能模型, 旨在理解和生成人类语言. 大语言模型可以处理多种自然语言任务如文本分类、问答、翻译、对话等等.
通常, 大语言模型 (LLM) 是指包含数千亿 (或更多) 参数的语言模型(目前定义参数量超过10B的模型为大语言模型)这些参数是在大量文本数据上训练的例如模型 GPT-3、ChatGPT、PaLM、BLOOM和 LLaMA等. 截止23年语言模型发展走过了三个阶段 第一阶段 设计一系列的自监督训练目标MLM、NSP等设计新颖的模型架构Transformer遵循Pre-training和Fine-tuning范式。典型代表是BERT、GPT、XLNet等 第二阶段 逐步扩大模型参数和训练语料规模探索不同类型的架构。典型代表是BART、T5、GPT-3等 第三阶段 走向AIGCArtificial Intelligent Generated Content时代模型参数规模步入千万亿模型架构为自回归架构大模型走向对话式、生成式、多模态时代更加注重与人类交互进行对齐实现可靠、安全、无毒的模型。典型代表是InstructionGPT、ChatGPT、Bard、GPT-4等。 语言模型 (Language Model, LM)
语言模型Language Model旨在建模词汇序列的生成概率提升机器的语言智能水平使机器能够模拟人类说话、写作的模式进行自动文本输出。
通俗理解: 用来计算一个句子的概率的模型也就是判断一句话是否是人话的概率.
标准定义对于某个句子序列, 如S {W1, W2, W3, …, Wn}, 语言模型就是计算该序列发生的概率, 即P(S). 如果给定的词序列符合语用习惯, 则给出高概率, 否则给出低概率. 举例说明 假设我们要为中文创建一个语言模型$V$表示词典$V${一起、来、学习}$W_i$ 属于$V$。语言模型描述给定词典$V$, 能够计算出任意单词序列$S{W_1,W_2,W_3,…,W_n}$是一句话的概率$P(S)$, 其中$P 0$ 那么如何计算一个句子的$P(S)$呢最简单的方法就是计数假设数据集中共有$N$个句子我们可以统计一下数据集中$S{W_1,W_2,W_3,…,W_n}$每个句子出现的次数如果假设为$n$则$P(S)\frac{n}{N}$. 那么可以想象一下这个模型的预测能力几乎为0一旦单词序列没在之前数据集中出现过模型的输出概率就是0显然相当不合理。 我们可以根据概率论中的链式法则将$P$可以表示为 如果能计算$P(W_n|W_1,W_2,…W_{n-1})$那么就能轻松得到$P(W_1,W_2,…,W_n)$, 所以在某些文献中我们也可以看到语言模型的另外一个定义能够计算出$P(W_1,W_2,…,W_n)$的模型就是语言模型。
从文本生成角度也可以这样定义语言模型给定一个短语一个词组或者一句话语言模型可以生成预测接下来的一个词。 基于语言模型技术的发展可以将语言模型分为四种类型 基于规则和统计的语言模型 神经语言模型 预训练语言模型 大语言模型 2.1 基于规则和统计的语言模型N-gram
由人工设计特征并使用统计方法对固定长度的文本窗口序列进行建模分析这种建模方式也被称为N-gram语言模型。在上述例子中计算句子序列概率我们使用链式法则计算 该方法存在两个缺陷 参数空间过大条件概率$P(W_n|W_1, W_2,….W_n)$的可能性太多无法估算也不一定有用 数据稀疏严重许多词对的组合在语料库中都没有出现依据最大似然估计得到的概率为0 为了解决上述问题引入马尔科夫假设随意一个词出现的概率只与它前面出现的有限的一个或者几个词有关。 如果一个词的出现与它周围的词是独立的那么我们就称之为unigram也就是一元语言模型. 如果一个词的出现仅依赖于它前面出现的一个词那么我们就称之为bigram. 如果一个词的出现仅依赖于它前面出现的两个词那么我们就称之为trigram. 一般来说N元模型就是假设当前词的出现概率只与它前面的N-1个词有关而这些概率参数都是可以通过大规模语料库来计算比如三元概率 在实践中用的最多的就是bigram和trigram接下来以bigram语言模型为例理解其工作原理 首先我们准备一个语料库简单理解让模型学习的数据集为了计算对应的二元模型的参数即$P(W_i|W{i-1})$我们要先计数即$C(W{i-1},W_i)$然后计数 $C(W_{i-1})$ , 再用除法可得到概率。 $C(W_{i-1}, W_i)$ 计数结果如下
$C(W_{i-1})$ 的计数结果如下:
那么bigram语言模型针对上述语料的参数计算结果如何实现假如我想计算$P(想我)\approx0.38$ ,计算过程如下显示其他参数计算过程类似 如果针对这个语料库的二元模型bigram建立好之后就可以实现我们的目标计算。 计算一个句子的概率举例如下 预测一句话最可能出现的下一个词汇比如我想去打【mask】? 思考mask 篮球 或者 mask 晚饭。 可以看出$P(我想去打篮球) P(我想去打晚饭)$因此mask 篮球对比真实语境下也符合人类习惯。 N-gram语言模型的特点 优点采用极大似然估计, 参数易训练; 完全包含了前n-1个词的全部信息; 可解释性强, 直观易理解。 缺点缺乏长期以来只能建模到前n-1个词; 随着n的增大参数空间呈指数增长3.数据稀疏难免会出现OOV问题; 单纯的基于统计频次泛化能力差. 2.2 神经网络语言模型
伴随着神经网络技术的发展人们开始尝试使用神经网络来建立语言模型进而解决N-gram语言模型存在的问题。
上图属于一个最基础的神经网络架构 模型的输入$w{t-n1}, …, w{t-2}, w_{t-1}$就是前n-1个词。现在需要根据这已知的n-1个词预测下一个词$w_t$。$C(w)$表示$w$所对应的词向量. 网络的第一层输入层是将$C(w{t-n1}),…,C(w{t-2}), C(w_{t-1})$这n-1个向量首尾拼接起来形成一个$(n-1)*m$大小的向量记作$x$. 网络的第二层隐藏层就如同普通的神经网络直接使用一个全连接层, 通过全连接层后再使用$tanh$这个激活函数进行处理。 网络的第三层输出层一共有$V$个节点 ($V$ 代表语料的词汇)本质上这个输出层也是一个全连接层。每个输出节点$y_i$表示下一个词语为 $i$ 的未归一化log 概率。最后使用 softmax 激活函数将输出值$y$进行归一化。得到最大概率值就是我们需要预测的结果。 神经网络特点 优点利用神经网络去建模当前词出现的概率与其前 n-1 个词之间的约束关系很显然这种方式相比 n-gram 具有更好的泛化能力只要词表征足够好。从而很大程度地降低了数据稀疏带来的问题。 缺点对长序列的建模能力有限可能会出现长距离遗忘以及训练时的梯度消失等问题构建的模型难以进行稳定的长文本输出。 2.3 基于Transformer的预训练语言模型
Transformer模型由一些编码器和解码器层组成见图学习复杂语义信息的能力强很多主流预训练模型在提取特征时都会选择Transformer结构并产生了一系列的基于Transformer的预训练模型包括GPT、BERT、T5等.这些模型能够从大量的通用文本数据中学习大量的语言表示并将这些知识运用到下游任务中获得了较好的效果. 预训练语言模型的使用方式 预训练预训练指建立基本的模型先在一些比较基础的数据集、语料库上进行训练然后按照具体任务训练学习数据的普遍特征。 微调微调指在具体的下游任务中使用预训练好的模型进行迁移学习以获取更好的泛化效果。
预训练语言模型的特点 优点更强大的泛化能力丰富的语义表示可以有效防止过拟合。 缺点计算资源需求大可解释性差等 2.4 大语言模型
随着对预训练语言模型研究的开展人们逐渐发现可能存在一种标度定律Scaling Law即随着预训练模型参数的指数级提升其语言模型性能也会线性上升。2020年OpenAI发布了参数量高达1750亿的GPT-3首次展示了大语言模型的性能。
相较于此前的参数量较小的预训练语言模型例如3.3亿参数的Bert-large和17亿参数的GPT-2GPT-3展现了在Few-shot语言任务能力上的飞跃并具备了预训练语言模型不具备的一些能力。后续将这种现象称为能力涌现。例如GPT-3能进行上下文学习在不调整权重的情况下仅依据用户给出的任务示例完成后续任务。这种能力方面的飞跃引发研究界在大语言模型上的研究热潮各大科技巨头纷纷推出参数量巨大的语言模型例如Meta公司1300亿参数量的LLaMA模型以及谷歌公司5400亿参数量的PaLM。国内如百度推出的文心一言ERNIE系列、清华大学团队推出的GLM系列等等。 大语言模型的特点 优点像“人类”一样智能具备了能与人类沟通聊天的能力甚至具备了使用插件进行自动信息检索的能力 缺点参数量大算力要求高、生成部分有害的、有偏见的内容等等 语言模型的评估指标
3.1 BLEU
BLEU 双语评估替补分数是评估一种语言翻译成另一种语言的文本质量的指标。它将“质量”的好坏定义为与人类翻译结果的一致性程度。
BLEU算法实际上就是在判断两个句子的相似程度. BLEU 的分数取值范围是 01分数越接近1说明翻译的质量越高。
BLEU有许多变种根据n-gram可以划分成多种评价指标常见的评价指标有BLEU-1、BLEU-2、BLEU-3、BLEU-4四种其中n-gram指的是连续的单词个数为nBLEU-1衡量的是单词级别的准确性更高阶的BLEU可以衡量句子的流畅性.实践中通常是取N1~4然后对进行加权平均。 下面举例说计算过程 基本步骤 分别计算candidate句和reference句的N-grams模型然后统计其匹配的个数计算匹配度: 公式candidate和reference中匹配的 n−gram 的个数 /candidate中n−gram 的个数 假设机器翻译的译文candidate和一个参考翻译reference如下
candidate: It is a nice day today
reference: Today is a nice day 使用1-gram进行匹配
candidate: {it, is, a, nice, day, today}
reference: {today, is, a, nice, day}
结果:其中{today, is, a, nice, day}匹配所以匹配度为5/6 使用2-gram进行匹配
candidate: {it is, is a, a nice, nice day, day today}
reference: {today is, is a, a nice, nice day}
结果:其中{is a, a nice, nice day}匹配所以匹配度为3/5 使用3-gram进行匹配
candidate: {it is a, is a nice, a nice day, nice day today}
reference: {today is a, is a nice, a nice day}
结果:其中{is a nice, a nice day}匹配所以匹配度为2/4 使用4-gram进行匹配
candidate: {it is a nice, is a nice day, a nice day today}
reference: {today is a nice, is a nice day}
结果:其中{is a nice day}匹配所以匹配度为1/3 对匹配的N-grams计数进行修改以确保它考虑到reference文本中单词的出现而非奖励生成大量合理翻译单词的候选结果. 举例说明
candidate: the the the the
reference: The cat is standing on the ground
如果按照1-gram的方法进行匹配则匹配度为1显然是不合理的所以计算某个词的出现次数进行改进 将计算某个词的出现次数的方法改为计算某个词在译文中出现的最小次数,如下所示的公式 其中$k$表示在机器译文candidate中出现的第$k$个词语, $c_k$则代表在机器译文中这个词语出现的次数而$s_k$则代表在人工译文reference中这个词语出现的次数。 python代码实现
# 第一步安装nltk的包--pip install nltk
from nltk.translate.bleu_score import sentence_bleu
def cumulative_bleu(reference, candidate):
bleu_1_gram sentence_bleu(reference, candidate, weights(1, 0, 0, 0))bleu_2_gram sentence_bleu(reference, candidate, weights(0.5, 0.5, 0, 0))bleu_3_gram sentence_bleu(reference, candidate, weights(0.33, 0.33, 0.33, 0))bleu_4_gram sentence_bleu(reference, candidate, weights(0.25, 0.25, 0.25, 0.25))
# print(bleu 1-gram: %f % bleu_1_gram)# print(bleu 2-gram: %f % bleu_2_gram)# print(bleu 3-gram: %f % bleu_3_gram)# print(bleu 4-gram: %f % bleu_4_gram)
return bleu_1_gram, bleu_2_gram, bleu_3_gram, bleu_4_gram
# 生成文本
generated_text This is some generated text.
# 参考文本列表
reference_texts [This is a reference text., This is another reference text.]
# 计算 Bleu 指标
c_bleu cumulative_bleu(reference_texts, generated_text)
# 打印结果
print(The Bleu score is:, c_bleu)
# The Bleu score is: (0.8571, 0.6900, 0.5711, 0.4920)
3.2 ROUGE
ROUGE指标是在机器翻译、自动摘要、问答生成等领域常见的评估指标。ROUGE通过将模型生成的摘要或者回答与参考答案一般是人工生成的进行比较计算得到对应的得分。
ROUGE指标与BLEU指标非常类似均可用来衡量生成结果和标准结果的匹配程度不同的是ROUGE基于召回率BLEU更看重准确率。
ROUGE分为四种方法ROUGE-N, ROUGE-L, ROUGE-W, ROUGE-S. 下面举例说计算过程这里只介绍ROUGE_N 基本步骤 Rouge-N实际上是将模型生成的结果和标准结果按N-gram拆分后计算召回率 假设模型生成的文本candidate和一个参考文本reference如下
candidate: It is a nice day today
reference: Today is a nice day 使用ROUGE-1进行匹配
candidate: {it, is, a, nice, day, today}
reference: {today, is, a, nice, day}
结果::其中{today, is, a, nice, day}匹配所以匹配度为5/51,这说明生成的内容完全覆盖了参考文本中的所有单词质量较高。 通过类似的方法可以计算出其他ROUGE指标如ROUGE-2、ROUGE-L、ROUGE-S的评分从而综合评估系统生成的文本质量。 python代码实现
# 第一步安装rouge--pip install rouge
import Rouge
# 生成文本
generated_text This is some generated text.
# 参考文本列表
reference_texts [This is a reference text., This is another generated reference text.]
# 计算 ROUGE 指标
rouge Rouge()
scores rouge.get_scores(generated_text, reference_texts[1])
# 打印结果
print(ROUGE-1 precision:, scores[0][rouge-1][p])
print(ROUGE-1 recall:, scores[0][rouge-1][r])
print(ROUGE-1 F1 score:, scores[0][rouge-1][f])
# ROUGE-1 precision: 0.8
# ROUGE-1 recall: 0.6666666666666666
# ROUGE-1 F1 score: 0.7272727223140496 3.3 困惑度PPL(perplexity)
PPL用来度量一个概率分布或概率模型预测样本的好坏程度。
PPL基本思想: 给测试集的句子赋予较高概率值的语言模型较好,当语言模型训练完之后测试集中的句子都是正常的句子那么训练好的模型就是在测试集上的概率越高越好. 基本公式两种方式
由公式可知句子概率越大语言模型越好迷惑度越小。 python代码实现
import math
# 定义语料库
sentences [
[I, have, a, pen],
[He, has, a, book],
[She, has, a, cat]
]
# 定义语言模型
unigram {
I: 1/11,
have: 1/11,
a: 3/11,
pen: 1/11,
He: 1/11,
has: 2/11,
book: 1/11,
She: 1/11,
cat: 1/11
}
# 计算困惑度
perplexity 0
for sentence in sentences:sentence_prob 1for word in sentence:sentence_prob * unigram[word]sentence_perplexity 1/sentence_probperplexity math.log(sentence_perplexity, 2) #以2为底
perplexity 2 ** (-perplexity/len(sentences))
print(困惑度为, perplexity)
# 困惑度为 0.000325 小结 本小节主要介绍LLM的背景知识了解目前LLM发展基本历程 对语言模型的类别分别进行了介绍如基于统计的N-gram模型以及深度学习的神经网络模型 若能为您的学习之旅添一丝光亮不胜荣幸 期待您的宝贵意见让我们共同进步共同成长