一、自然语言处理模型
1、Token:最小语义单位——将单词拆分成子词
例如:annoyingly拆分成["annoying", "##ly"],双#表示与前一个Token是直接拼接的
2、词表(按照词频)
局限性:第一,由于词表一般比较大,导致向量维度比较高,而且比较稀疏(大量的0),计算起来不太方便;第二,由于忽略了Token之间的顺序,导致部分语义丢失。比如“你爱我”和“我爱你”Token一模一样,但其实意思很不一样。
3、改进——Embedding:把每个Token表示成一定数量个小数(一般可以是任意多个(维度),小数数值根据所用的模型和设定的参数来确定)
4、语言模型:利用自然语言文本构建的,根据给定文本,输出对应文本的模型
解码策略:
- 贪心搜索只看下一个最大概率的词
- 最大概率会看下几个联合密度概率最大的词
(1)简单模型:把一句话切成一个个Token,然后统计概率,典型代表:N-Gram语言模型,N表示每次用到的上下文Token个数
例如:人工智能让世界变得更美好
- Bi-Gram:人工智能/让 让/世界 世界/变得 变得/更 更/美好
- Tri-Gram:人工智能/让/世界 让/世界/变得 世界/变得/更 变得/更/美好
(2)N-Gram语言模型:让每个Token是一个Embedding向量
# d维,加起来和1没关系,大小是1×d,表示给定Token
X = [0.001, 0.002, 0.0052, ..., 0.0341]
# N个,加起来=1,大小是1×N,表示下个Token是每个Token的概率
Y = [0.1, 0.5, ..., 0.005, 0.3]
# W是模型参数,也可以叫模型
W·X = Y # W自然可以是 d×N 维的矩阵
(3)循环神经网络(recurrent neural network,RNN)
RNN与其他神经网络不同的地方在于,它的节点之间存在循环连接,这使得它能够记住之前的信息,并将它们应用于当前的输入。
二、
1、Transformer架构
一个基于注意力机制的编码器-解码器(Encoder-Decoder)架构。刚开始主要应用在NLP领域,后来横跨到语音和图像领域,并最终统一几乎所有模态(文本、图像、语音)的架构。来自Google2017年发的一篇论文:“Attention Is All You Need”,其最重要的核心就是提出来的自注意力(Self-Attention)机制。简单来说,就是语言模型建模过程中把注意力放在那些重要的Token上。
(左边这个结构就是一个编码器,右边的就是一个解码器)
2、Transformer架构主要模块
多头注意力(Multi-Head Attention):运用自注意力机制(“一句话里到底哪里重要”),多头简单来说就是把刚刚的这种自己注意自己重复多次(multi个head),每个头注意到的信息不一样,这样就可以捕获到更多信息。比如“人工智能让世界变得更美好”,有的头“人工智能”注意到“世界”,有的头“人工智能”注意到“美好”。
前馈(Feed Forward)网络:类比为记忆层
3、语言模型最常见的任务
句子级别分类、Token级别分类(也叫序列标注)、相似度匹配、文本生成
左边的编码器在把句子表示成一个向量时,可以利用上下文信息,可以把它看作是双向的;右边的解码器不能看到未来的Token,一般只利用上文,是单向的。
从效果上来说,编码器更加适合非生成类任务【自然语言理解(natural language understanding,NLU)】,解码器则更加适合生成类任务【自然语言生成(natural language generation,NLG)】。
参考:
hugging-llm/content/chapter1/ChatGPT基础科普——知其一点所以然.md at main · datawhalechina/hugging-llm · GitHub