初识LLMs
目录
一、Language AI 历史
二、Language AI如何处理text
三、技术一:Bag-of-Words模型
缺点
四、技术二:word2vec(稠密向量 / 嵌入向量)
缺点
五、嵌入的多种形式
六、技术三:注意力机制
6.1 上下文嵌入
缺点
6.2 deconder+注意力机制
缺点
6.3 transformer
6.3.1 表示模型 vs 生成模型
6.3.2 表示模型:Encoder-Only 模型
6.3.3 生成模型:decoder-Only 模型
七、LLM说法
八、 创建LLM步骤
1、预训练
2、微调(后训练)
九、LLM责任
十、开源 vs 闭源
1、闭源
2、开源
十一、实验:Say Hi to LLM
一、Language AI 历史
在发展前期,text天生没有固定结构,用0和1表示text会失去text原本的含义。
二、Language AI如何处理text
三、技术一:Bag-of-Words模型
目的:将句子转变成数字表示
第一步:分词操作。将句子转变成一个个独立的words或subwords
第二步:合并独立的words构造出能表示所有句子中word的词典
第三步:计算词典中每一个word在每一个句子中出现的频率,从而构建该句子的词包。词包可称为向量表示
缺点
-
忽略顺序:词包模型忽略了单词的顺序和语法结构,因此无法捕捉文本的语义和上下文信息。
-
维度灾难:如果词汇表很大,词包模型的维度也会很高,容易导致稀疏性和计算效率问题。
四、技术二:word2vec(稠密向量 / 嵌入向量)
word2vec利用神经网络。这些网络由相互连接的节点层组成用于处理信息。神经网络可以有多个层,每个连接都有一定的权重。
使用这些神经网络,word2vec通过观察在给定句子中它们倾向于出现在哪些其他单词旁边来生成词嵌入。
在训练开始之前,首先为词汇表中每个单词分配一个向量嵌入,例如每个单词对应一个50维度的向量,初始化为随机值,每一维度表示一种特征属性。然后在每个训练步骤中,如下图,从训练数据中取一对单词,模型尝试预测它们是否可能在句子中成为邻居。
在这个训练过程中,word2vec学习单词之间的关系,并将这些信息提炼成嵌入。如果两个单词倾向于有相同的邻居,它们的嵌入会更接近彼此,反之亦然。
例如:
有2个单词的嵌入,即“苹果”和“婴儿”,“婴儿”这个词可能在“新生儿”和“人类”这些属性上得分较高,而“苹果”在这些属性上得分较低。 如下图,嵌入可以具有许多属性来表示单词的含义。由于嵌入的大小是固定的,因此选择它们的属性来创建单词的表示。
嵌入允许我们测量两个词之间的语义相似性。使用各种距离度量,我们可以判断一个词与另一个词有多接近。如下图,如果将这些嵌入压缩成二维表示,含义相似的词倾向于更靠近。
缺点
训练过程生成的是静态的单词嵌入表示,这意味着每个单词的嵌入向量是固定的,不会随着上下文的变化而改变。例如,单词“bank”无论在何种语境中使用,其嵌入向量始终相同。然而,“bank”既可以指“银行”,也可以指“河岸”,其含义会因上下文而变化。因此,Word2Vec无法根据上下文动态调整单词的嵌入
五、嵌入的多种形式
不同层级上(句子、单词)的⽂本都可以做Embedding
词包在整个文本层级创建嵌入,而word2vec在单词层级创建嵌入
六、技术三:注意力机制
6.1 上下文嵌入
增加了encoding和decoding操作
每一步都是自回归的,在生成下一个词时,需要使用之前生成的所有词
输入形式: 单词的嵌入向量(可以使用Word2Vec生成初始表示)
Encoding作用: 将单词嵌入转换为上下文嵌入表示,为解码器提供输入。
Decoding作用: 利用编码器生成的上下文表示,生成目标输出。
缺点
-
问题:上下文嵌入是一个单一的向量,用来表示整个输入序列。这使得处理长句子变得困难,因为所有信息都被压缩到一个固定长度的向量中,容易丢失细节。
-
原因:单一的嵌入向量无法有效区分输入序列中不同部分的重要性。
6.2 deconder+注意力机制
注意力机制允许模型专注于输入序列中相互相关的部分,并增强这些部分的信号。通过选择性地确定句子中哪些单词最重要,注意力机制能够更好地处理长句子,并保留关键信息。
例如:输出词“lama's”是荷兰语中“lamas”的意思,这就是为什么两者之间的注意力同样,“lama's”和“I”这两个词的注意力较低,因为它们的相关性较低。
将注意力机制部署在decoder中,前边过程同1.6.1,decoder每次输出一个单词直到输出完整的句子。当decoder生成每个单词时,它会根据当前生成的单词动态地关注输入句子中的不同部分。例如,当生成“Ik”时,解码器可能会更多地关注输入句子中的“I”。
缺点
不能并行化训练模型
6.3 transformer
可以并行训练模型,保持自回归,encoder和decoder都围绕注意力展开
encoder模块
包括自注意力和反馈神经网络
自注意力可以关注单个序列中的不同位置,它一次可以处理整个序列,而不是一次处理一个token。
decoder模块
比encoder多了一层
masked self-attention层屏蔽了未来的位置,因此它只关注较早的位置,以防止在生成输出时泄露信息。
6.3.1 表示模型 vs 生成模型
表示模型帮助我们理解数据,而生成模型则用于创造新的数据。
表示模型:
主要目的是理解数据,比如把文字转换成有意义的向量(嵌入)。
通常用于分类、聚类和搜索等任务。
例子:BERT,它通过学习来理解语言,但不直接生成文本。
生成模型:
主要目的是创造新的数据,比如生成新的句子或图像。
侧重于生成与训练数据相似的新内容。
例子:GPT-3,它可以生成连贯的新文本。
6.3.2 表示模型:Encoder-Only 模型
最初的Transformer模型是一个Encoer-Decoder架构,它可以很好地用于翻译任务,但不能很容易地处理其他任务,如文本分类。
BERT是一个仅用于表示语言的编码架构,如图,使用Encoder堆叠架构。
预训练:
BERT 是通过在大量文本数据上进行预训练得到的。这意味着在应用到特定任务之前,BERT 已经学习了丰富的语言表示。双向编码器:
BERT 使用了 Transformer 架构中的编码器(Encoder)部分,并采用了双向(Bidirectional)训练策略。这使得 BERT 能够同时考虑单词的左右上下文,从而更好地理解单词的含义。掩码语言模型(Masked Language Model, MLM):
BERT 通过一种称为掩码语言模型(MLM)的方法进行预训练。在这种方法中,输入文本中的一些单词会被随机替换为一个特殊的[MASK]
标记,BERT 的任务是预测这些被掩盖的单词。
下一句预测(Next Sentence Prediction, NSP):
除了 MLM 任务,BERT 还通过下一句预测(NSP)任务进行预训练。在 NSP 任务中,BERT 需要预测两个句子是否是顺序关系。微调(Fine-tuning):
预训练完成后,BERT 可以通过微调(Fine-tuning)来适应各种下游任务,如文本分类、问答、命名实体识别等。微调是在特定任务的数据集上进行的,通常只需要少量的数据和训练时间。
迁移学习:
BERT 可应用于迁移学习。通过在大规模数据集上预训练,BERT 学习到的通用语言表示可以迁移到各种不同的 NLP 任务中,从而提高这些任务的性能。
6.3.3 生成模型:decoder-Only 模型
GPT-1仅堆叠解码器块
GPT-1由1.17亿个参数组成。每个参数都是一个数值,表示模型对语言的理解。GPT-2有15亿个参数8,GPT-3有1750亿个参数 。生成模型也可称为补全模型。
这些补全模型的一个重要部分是上下文长度或上下文窗口。上下文长度表示模型可以处理的token的最大数量,如图,一个大的上下文窗口允许将整个文档传递给LLM。请注意,由于这些模型的自回归特性,当前上下文长度将随着新令牌的生成而增加。
七、LLM说法
LLM并没有一个统一和严格的科学定义,但是它通常用来描述那些具有以下特征的模型:
参数规模大:
包含数亿甚至数千亿个参数,这些参数是在大量文本数据上训练得到的。预训练:
通常在大规模文本数据集上进行预训练,学习语言的通用特征和模式。深度学习架构:
基于深度学习架构,如Transformer,这是目前最常用的语言模型架构。多任务能力:
能够执行多种自然语言处理任务,如文本理解、生成、翻译、问答等。迁移学习能力:
学习到的语言表示可以迁移到其他特定的任务上,通常只需要少量的微调。生成能力:
尽管并非所有LLM都专注于文本生成,但许多模型具备生成连贯、相关文本的能力。计算资源需求高:
训练和运行这些模型通常需要大量的计算资源。持续学习:
能够通过持续学习不断改进和适应新的任务和数据。上下文理解:
能够理解长距离的依赖关系和复杂的语言结构。交互能力:
能够与用户或其他系统进行交互,提供语言相关的服务。
八、 创建LLM步骤
1、预训练
这是创建LLM的第一步,也是最耗时和计算密集型的阶段。
在预训练阶段,模型(如LLM)在大量的互联网文本数据上进行训练,以学习语言的语法、上下文和模式。
这个阶段不针对任何特定任务,而是让模型广泛地学习语言的各个方面,包括预测下一个单词。
预训练完成后,模型被称为基础模型或预训练模型,它具备了广泛的语言理解能力,但通常不直接用于特定任务。
2、微调(后训练)
在微调阶段,使用已经预训练好的模型,并在特定任务的数据集上进一步训练,以适应该任务的需求。
微调使得模型能够针对特定任务进行优化,例如文本分类、情感分析或遵循指令等。
这种方法节省了大量资源,因为预训练阶段的成本非常高,通常需要大量的数据和计算资源。
九、LLM责任
十、开源 vs 闭源
1、闭源
闭源的大型语言模型(LLM)是不公开其内部工作原理和细节的模型,由一些公司开发并保密。这些模型,比如OpenAI的GPT-4,可以通过网络接口(API)来使用,而不需要你自己有强大的计算设备。
使用这些模型的好处是你不需要自己设置和维护复杂的系统,因为公司会帮你处理这些。而且,由于公司投入了很多资源,这些模型通常表现很好。
不过,使用这些模型也有缺点:
-
通常需要付费。
-
你不能根据自己的需要调整模型。
-
你的数据可能会被公司获取,这在某些情况下可能是个问题。
2、开源
开源的大型语言模型(LLM)是那些公开其权重和架构的模型,任何人都可以使用。这些模型由特定组织开发,但代码通常可以公开获取,允许你在本地运行模型,不过使用时可能有各种许可限制。
一些开源模型:Cohere的Command R、Mistral模型、微软的Phi和Meta的Llama模型。
开源模型的一个主要好处是你可以完全控制模型。你可以在本地使用模型,不需要依赖网络接口,可以自己调整模型,并且可以在保证数据隐私的情况下使用。此外,开源社区(如Hugging Face)提供了很多支持和资源。
不过,开源模型也有一些缺点。你需要有强大的硬件才能运行这些模型,特别是在训练或调整模型时。此外,设置和使用这些模型需要特定的知识。
十一、实验:Say Hi to LLM
from openai import OpenAI
client = OpenAI(api_key = "xxx", base_url = "xxx")
response = client.chat.completions.create(
model = "deepseek-chat",
messages = [
{"role": "system", "content": "You are a helpful assistant"},
{"role": "user", "content": "Hello"},
],
stream = False
)
print(response.choice[0].message.content)
输出: