文章目录
- LLM大语言模型
- 1.LLM基础知识
- 1.1大模型介绍:
- 1.2语言模型
- 1.21n-gram语言模型
- 1.22神经网络语言模型
- 1.23基于Transformer的预训练语言模型
- 1.24大语言模型
- 1.3模型评估指标
- 1.31 BLEU
- 1.32 Rouge指标
- 1.33 困惑度PPL
- 2.LLM主要类别架构
- 2.1 自编码模型
- 2.2 自回归模型
- 2.3 Encoder-Decoder模型
- 2.4 LLM主流架构
LLM大语言模型
1.LLM基础知识
1.1大模型介绍:
- 定义
大语言模型 (英文:Large Language Model,缩写LLM) 是一种人工智能模型, 旨在理解和生成人类语言. 大语言模型可以处理多种自然语言任务,如文本分类、问答、翻译、对话等等.
通常, 大语言模型 (LLM) 是指包含数千亿 (或更多) 参数的语言模型(目前定义参数量超过10B的模型为大语言模型),这些参数是在大量文本数据上训练的,例如模型 GPT-3、ChatGPT、GLM、BLOOM和 LLaMA等.
- 语言模型的发展历程
- 基于transformer架构,做基础的预训练过程,典型的模型:BERT,GPT
- 逐步扩大模型参数和训练语料规模 代表是BERT,T5,GPT-3等
- AIGC时代,超过百亿千万亿参数的模型,模型架构为自回归架构,大模型走向对话式,生成式,多模态时代 代表是ChatGPT GPT-4等
1.2语言模型
- 定义
简单理解: 判断一句话发生的概率,(也可以理解成,判断一句话是不是人话)
标准定义: 假如一个句子为s=[w1, w2,...,wn],语言模型是计算当前句子发生的概率,即:p(s)=p(w1,w2,..2n).如果当前句子符合人类日常用语表达习惯,概率值就大,否则,就小
- 分类
- 基于规则和统计的语言模型:N-gram
- 参数空间过大:条件概率的可能性太多
- 数据稀疏严重
- 神经网络模型
- 基于transformer的预训练语言模型
- 大语言模型
- 基于规则和统计的语言模型:N-gram
1.21n-gram语言模型
-
定义:
在计算p(s)=p(w1,w2,..2n),引入马尔可夫性假设,当前词发生的概率只依赖于它前面的有限的词
-
unigram一元语言模型
- 如果一个词的出现与它周围的词是独立的,那么我们就称之为unigram也就是一元语言模型.
-
bigram语言模型
- 当前词发生的概率只依赖于它前面的一个单词
-
trigram语言模型
- 当前词发生的概率只依赖于它前面的两个单词
-
特点:
- 容易理解,但是泛化性能较差
1.22神经网络语言模型
-
定义:
基于Linear实现神经网络的搭建,由上文来预测下一个单词
-
特点:
- 相比较N-gram, 更好的泛化性能,但是对长序列的建模能力有限,可能会出现梯度消失的问题
1.23基于Transformer的预训练语言模型
-
定义:
基于Transfomer架构衍生出各种类型的模型,比如:bert、gpt等模型,实现由上文预测下文的任务
-
特点:
- 模型特征更加丰富,性能更好,但是计算资源需求大,可解释性差
1.24大语言模型
-
定义:
基于Transfomer架构衍生出各种类型的模型,比如:ChatGPT、Llama等模型,实现由上文预测下文的任务
-
特点:
- 像"人类"一样的智能,可以完成对话形式的任务
1.3模型评估指标
- 常见指标:
- 准确率:模型预测正确的样本数占总样本数
- 精确率:在识别为正类别的样本中,正类别的比例
- 召回率:在所有正类别样本中,被识别为正类别的比例
- BLEU: 将语言翻译为另一种语言的文本质量指标,取值范围[0,1],越接近1质量越好
- ROUGE: 模型生成的回答与参考答案进行比较计算
- PPL: 用来衡量一个概率分布或概率模型预测样本的好坏程度,PPL越小,表明模型越好
1.31 BLEU
定义:
评估文本翻译的质量;bleu值范围【0-1】,值越大,翻译质量越好,否则,越差
-
基本步骤:
- 一般基于N-gram指标来计算,所以首先分别去计算生成文本的N-Gram,再计算真实文本的N-Gram,最后统计匹配的个数
- 基于匹配的N-gram个数/生成文本的N-Gram总个数
-
代码实现:
# # 第一步安装nltk的包-->pip install nltk import torch from nltk.translate.bleu_score import sentence_bleu import math def cumulative_bleu(reference, candidate):# 指标计算:p1^w1*p2^w2 =0.6^0.5*0.25^0.5 = 0.387# math.exp(0.5 * math.log(0.6) + 0.5 * math.log(0.25)) =# math.exp(0.5*math.log(0.15)) = math.exp(math.log(0.15)^0.5) = 0.15^0.5 = 0.387# # 0.3872983346207417bleu_1_gram = sentence_bleu(reference, candidate, weights=(1, 0, 0, 0))# exp ** (0.5*log(0.6)=-0.22+0.5*log(0.25)=-0.6)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))return bleu_1_gram, bleu_2_gram, bleu_3_gram, bleu_4_gram# return bleu_1_gram, bleu_2_gram# 生成文本 candidate_text = ["This", "is", "some", "generated", "text"]# 参考文本列表 reference_texts = [["This", "is", "a", "reference", "text"]]# 计算 Bleu 指标 c_bleu = cumulative_bleu(reference_texts, candidate_text)# 打印结果 print("The Bleu score is:", c_bleu)
1.32 Rouge指标
-
定义:
均可用来衡量生成结果和标准结果的匹配程度,不同的是ROUGE基于召回率,BLEU更看重准确率。
-
基本步骤:
- Rouge-N实际上是将模型生成的结果和真实结果按N-gram拆分后,计算召回率.
-
代码实现:
# 第一步:安装rouge-->pip install rouge from rouge import Rouge# 生成文本 generated_text = "This is some generated text."# 参考文本列表 reference_texts = ["This is another generated reference text."]# 计算 ROUGE 指标 rouge = Rouge() scores = rouge.get_scores(generated_text, reference_texts[0]) print(f'scores-->{scores}')# 打印结果 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
1.33 困惑度PPL
-
含义:
PPL用来度量一个概率分布或概率模型预测样本的好坏程度
-
基本公式:
-
代码实现:
import math # 定义语料库 sentences = [ ['I', 'have', 'a', 'pen'], ['He', 'has', 'a', 'book'], ['She', 'has', 'a', 'cat'] ] # 定义语言模型 unigram = {'I': 1/12, 'have': 1/12, 'a': 3/12, 'pen': 1/12,'He': 1/12, 'has': 2/12,'book': 1/12,'She': 1/12, 'cat': 1/12}perplexity = 0 for sentence in sentences:sentence_prob = 1for word in sentence:sentence_prob *= unigram[word]temp = -math.log(sentence_prob, 2)/len(sentence)perplexity+=2**temp perplexity = perplexity/len(sentences) print('困惑度为:', perplexity) # 困惑度为: 8.15
2.LLM主要类别架构
- Transformer架构
- LLM一般分为三种类型:
- Encoder-Only
- Decoder-Only
- Encoder-Decoder
2.1 自编码模型
-
基本原理:
对于输入的文本随机进行MASK,利用上下文来预测MASK
-
代表模型:
- BERT
2.2 自回归模型
-
基本原理:
一般从左到右,由上文生成下文
-
代表模型:
- GPT
2.3 Encoder-Decoder模型
-
基本原理:
将所有的NLP任务,转换为统一架构格式(文本生成任务):text2text
-
代表模型:
- T5
2.4 LLM主流架构
- Decoder-Only