【LLM开发】Unigram算法

Unigram算法

参考:Unigram算法解释
参考书籍:How Can We Make Language Models Better at Handling the Diversity and Variability of Natural Languages
Unigram 算法是一种基于概率的子词分词方法,与BPE算法、WordPiece算法不同,其核心思想是通过逐步删减初始大词汇表优化分词结果。

核心原理

算法基于Unigram 单语言模型,假设每个子词的出现是独立的。句子的概率是由子词序列的乘积决定的。假设每个子词独立出现,因此词汇(子词序列)可以表示为各个subword出现概率的乘积:
P ( x ) = ∏ i = 1 L p ( x i ) P(x) = \prod_{i=1}^{L} p(x_{i}) P(x)=i=1Lp(xi)
其中, x = ( x 1 , x 2 , . . . , x L ) x = (x_{1}, x_{2}, ..., x_{L}) x=(x1,x2,...,xL)是subword序列, p ( x i ) p(x_{i}) p(xi)是subword x i x_{i} xi 出现的概率。

最优分割

假设,我们已经构建好一个Unigram词汇表。现在输入一个句子 X X X,则最优的subword 分割 x ∗ x^{*} x 通过最大化上述概率得到。
x ∗ = arg ⁡ max ⁡ x ∈ S ( X ) P ( x ) x^{*} = \arg \max _{x \in S(X)} P(x) x=argxS(X)maxP(x)
S ( x ) S(x) S(x) 表示输入句子 X X X后,算法给出的所有可能的subword 分割候选方案。

Unigram算法在这一层面,可以对照最大正相匹配、最大逆向匹配等算法来学习,它并不应该完全对照wordPiece算法或BPE算法进行学习,因为wordPiece算法和BPE等算法 更注重如何构建词汇表。

构建词汇表

Unigram算法需要基于一个词汇表(或许我们可以考虑使用BPE算法或者WordPiece算法构建的词汇表,给Unigram算法使用?)。

构建词汇表的流程为:

1.初始化词汇表:从训练语料库中生成一个初始的词汇表,包括所有的字符和一些常见的subword(也可以是所有的subword)。
例如,对于句子hello world!,可以初始化一个包含所有字符和所有subword的词汇表:

['h', 'e', 'l', 'o', 'w', 'r', 'd', '!', 'he', 'el', 'll', 'lo', 'o ', ' w', 'wo', 'or', 'rl', 'ld', 'd!', 'hel', 'ell', 'llo', 'lo ', 'o w', ' wo', 'wor', 'orl', 'rld', 'ld!', 'hell', 'ello', 'word', 'orld', 'rld!' ...]

包含所有子词字符串数量很多,不过在训练构建词表之前,原始的语料库会进行标准化和预分词。简单地说,标准化会将语料库的编码统一;预分词:对于英文而言,会将语料库先按照空格和特殊字符切分,得到带有空格(也可以不带)的一系列单词;然后再依据这些单词构建初始词汇表。

初始词汇表可以有两种方式构建:一种是数据驱动的方法,如BPE算法或Apriori算法生成一个较大的候选子词集合。穷举法穷举所有可能的子词组合(长度 ≤ \le 4 的字符序列),穷举法计算成本高。
*穷举法为什么建议要subword长度 ≤ \le 4?* 我认为有两个主要原因,以hopefully为例,限制长度,可以减少穷举成本,(如果不限制长度hhohophopehopefhopefuhopefulhopefullhopefully…会产生45种组合,限制长度后,会产生30种);其次,对于数据量较小的数据库,hopefully的出现频率可能和ly的频率一致;这样在后面迭代优化词表的时候会直接选择hopefully 的组合方式,这样进一步降低了ly的对于似然函数的贡献,而导致ly被删除。
那么,必定有人问,为什么词汇表尽量不选择hopefully而是选择ly,这是因为ly在真实世界下的分布具有更广泛的分布,是许多副词的组成部分;而hopefully只能表示自身,而不再具有表示其他词的功能。
下图的例子更加直观:经过迭代在huhug概率差不多的时候,hug会保留在词汇表中,而hu会被删除。(一切的根源在于语料库中huhug的概率是否差不多,因此,语料库尽可能满足真实世界分布)
在这里插入图片描述

词汇表的构建目标是不断从当前词汇表移除一些subword,直到词汇表大小 ∣ V ∣ = M |V|=M V=M M M M 表示词汇表预计大小。

2.迭代优化词表
优化subwrod概率:使用的是EM算法优化subword的概率分布,使得边际似然最大化。
如上所述,给定一个subward序列或word x x x S ( x ) = ( x 1 , x 2 , . . . , x L ) , ∀ x i ∈ V S(x) = (x_{1}, x_{2}, ..., x_{L}), \forall x_{i} \in V S(x)=(x1,x2,...,xL),xiV,可以得出:
p ( x ) = ∏ i = 1 L p ( x i ) p(x) = \prod_{i=1}^{L} p(x_{i}) p(x)=i=1Lp(xi)

上述公式有一个潜在的假设,及每个子词 x i x_{i} xi的出现都是彼此独立的。

则可以对整个语料库建模其对数似然函数:
L = ∑ x ∈ C l o g ( p ( x ) ) \mathcal{L} = \sum_{x \in C} log(p(x)) L=xClog(p(x))

目标是最大化这个 L \mathcal{L} L

Unigram Tokenization算法根据以下两个步骤迭代计算(EM算法 Estimation-Maximization):

  1. 估计步骤:我们计算整个语料库上的对数似然值 L \mathcal{L} L
  2. 最大化似然步骤:我们移除 V V V η \eta η % 的子词。移除的这些子词后,词汇表能够最大化 L \mathcal {L} L

为了实现估计步骤,我们首先要对语料库中的单词 x x x,计算subword tokenization x 1 , x 2 , . . . , x L x_{1}, x_{2}, ..., x_{L} x1,x2,...,xL 最大化 Unigram 概率。(实现思路可以看HuggingFace Unigram;或者是以下)

语料库中的句子可以被分解为单词、句子、字符;例如This is the Hugging Face Course.
那么 x x x 可以是句子,This is the Hugging Face Course.
x x x 可以是单词,x="This"x="is"…,
x x x 可以是字符,x="T"x="h"x="i"、…;
但是,对于字符进行建模丧失了词汇的语义,并且Token数量会显著增大->这是因为没有有效压缩信息;
通常来说, x x x 表示词汇;

Hugging Face对这个进行了一定的更改,可能计算速度更快。
Hugging Face的Unigram算法计算语料库种词汇对当前词汇表的 l o s s loss loss,然后计算删除当前词汇中那些出现概率低的词汇对词汇表 l o s s loss loss的影响,

估计步骤:使用当前子词概率,通过通过 Viterbi 算法为语料库中的每个词找到最优分词路径;
最大化似然步骤:根据所有分词路径统计子词出现的频率,更新每个词的概率;
p ( x i ) = s u b w o r d x i 出现的概率 所有子词出现的总次数 p(x_{i}) = \frac {subword x_{i}出现的概率}{所有子词出现的总次数} p(xi)=所有子词出现的总次数subwordxi出现的概率
这一过程不断迭代,直至概率收敛;
∣ V ∣ = M |V|=M V=M 时,停止迭代。
Unigram tokenization 相比BPE分词的关键优势在于,它为给定的分词方式关联了一个概率 p ( x ) p(x) p(x) -> p ( x ) = ∏ i = 1 L p ( x i ) p(x) = \prod_{i=1}^{L} p(x_{i}) p(x)=i=1Lp(xi)

最大化 L = ∑ x ∈ C l o g ( p ( x ) ) \mathcal{L} = \sum_{x \in C} log(p(x)) L=xClog(p(x));实际上是最大化每一个单词的概率 p ( x ) p(x) p(x),单词的概率是由构成它的subword描述的 p ( x ) = p ( x 1 ) p ( x 2 ) . . . p ( x L ) p(x) = p(x_{1})p(x_{2})...p(x_{L}) p(x)=p(x1)p(x2)...p(xL),以词汇hug为例,构成它的子词可以是{"h", "u", "g"} {"hu", "g"} {"h", "ug"}, {"hug"},因此:
L = arg ⁡ max ⁡ ∑ x ∈ C l o g ( p ( x ) ) L = ∑ x ∈ C arg ⁡ max ⁡ l o g ( p ( x ) ) L = ∑ x ∈ C l o g ( arg ⁡ max ⁡ p ( x ) ) \begin{align} \mathcal{L} &= \arg\max \sum_{x \in C} log(p(x)) \\ \mathcal{L} &= \sum_{x \in C} \arg\max log(p(x)) \\ \mathcal{L} &= \sum_{x \in C} log(\arg\max p(x)) \\ \end{align} LLL=argmaxxClog(p(x))=xCargmaxlog(p(x))=xClog(argmaxp(x))

所以在编程计算的时候,目标可以是 L = ∑ x ∈ C arg ⁡ max ⁡ l o g ( p ( x ) ) \mathcal{L} = \sum_{x \in C} \arg\max log(p(x)) L=xCargmaxlog(p(x)) L = ∑ x ∈ C l o g ( arg ⁡ max ⁡ p ( x ) ) \mathcal{L} = \sum_{x \in C} log(\arg\max p(x)) L=xClog(argmaxp(x))。并且 p ( x ) = p ( x 1 ) p ( x 2 ) . . . p L → log ⁡ p ( x ) = log ⁡ p ( x 1 ) + log ⁡ p 2 + . . . + log ⁡ p L p(x)=p(x_1)p(x_{2})...p_{L} \rightarrow \log p(x)= \log p(x_{1}) + \log p_{2} + ... +\log p_{L} p(x)=p(x1)p(x2)...pLlogp(x)=logp(x1)+logp2+...+logpL;求取 max ⁡ l o g ( p ( x ) ) = max ⁡ ∑ i = 1 L log ⁡ p ( x i ) \max log(p(x)) = \max \sum_{i=1}^{L} \log p(x_{i}) maxlog(p(x))=maxi=1Llogp(xi);求这个可以用动态规划法求解。

<think>嗯,用户想要系统梳理大语言模型的核心知识点,包括各种技术、训练方法和应用挑战,还要结合最新进展和案例。首先,我需要确定覆盖哪些主要技术点。用户提到了提示词工程、注意力机制、位置编码、参数高效微调、幻觉问题、对齐难度、无监督学习、token、CNN、Agent、多模态等等。这些都是LLM的关键部分。 首先,提示词工程。这部分需要解释清楚什么是提示词工程,它的作用,以及实际应用案例。比如Chain-of-Thought和Few-shot prompting,这些都是比较新的技术,像GPT-4和Claude的应用案例应该提到。还要注意用户提到的参考引用,比如引用[1]里关于幻觉的问题,可能需要在这里关联一下。 然后是注意力机制,特别是Transformer的自注意力机制。这部分需要详细解释缩放点积注意力,多头注意力的结构,以及最新的改进如FlashAttention。可能需要举一些例子,比如BERT和GPT的架构差异,或者最新的模型如Mistral-7B如何优化注意力机制。 位置编码部分,要区分绝对位置编码和相对位置编码,比如RoPE和ALiBi。用户提到结合最新进展,比如LLaMA2使用的RoPE,这里可以引用相关模型的信息,不过用户提供的引用中没有直接提到,可能需要依赖已有的知识。 参数高效微调技术,比如LoRA、Adapter、Prompt Tuning。这部分需要说明各自的原理和优势,比如LoRA在减少参数量方面的效果,结合实践案例,比如Stable Diffusion中使用LoRA,或者Meta的LLaMA-Adapter应用。引用[3]提到了分布式训练和框架,可能可以关联到训练方法的部分。 幻觉问题和对齐难度是用户特别提到的挑战。需要引用[1]和[2]中的内容,特别是LLM的幻觉来源,比如训练数据的错误和多模态中的对齐问题。比如引用[2]讨论的MLLM中的幻觉,可以提到MiniGPT-4的例子,以及如何通过局部特征对齐来缓解问题。 无监督学习部分,重点在预训练目标和数据增强。比如BERT的MLM和GPT的自回归,以及最新的ELECTRA和T5模型。这部分需要结合最新的模型进展,比如PaLM和Chinchilla的训练策略。 Tokenization方面,需要解释不同的分词方法,如BPE、WordPiece、Unigram,以及它们对模型性能的影响。比如GPT-4使用改进的BPE,处理多语言时的挑战。 卷积神经网络在LLM中的应用可能较少,但可以提到轻量化设计中的结合,比如MobileBERT或ConvBERT,或者多模态中的CNN处理视觉特征。这部分可能需要简要带过,因为用户可能更关注Transformer相关的内容。 Agent部分,需要说明自主决策和工具调用的能力,比如AutoGPT和Meta Toolformer,以及微软的TaskMatrix。这些案例展示了Agent在实际应用中的潜力。 多模态方面,结合引用[2]的内容,讨论MLLM的挑战,如视觉与文本的对齐问题,以及解决方案,如Flamingo、BLIP-2和LLaVA。需要提到幻觉问题在MLLM中的严重性,以及如何通过局部特征和增强理解来改进。 最后,应用挑战部分,要总结幻觉、对齐、多模态、计算成本等问题,并引用最新的研究方向和解决方案,比如知识蒸馏、RLHF、MoE架构等。 需要注意用户的引用材料,特别是幻觉和对齐的部分,确保在回答中正确引用。例如,引用[1]提到LLM的幻觉来自概率模型和训练数据,而引用[2]讨论MLLM中的视觉与文本对齐问题。需要自然地融入这些引用,帮助增强回答的可信度。 另外,用户要求使用中文,数学公式用$...$和$$...$$格式。例如,在解释注意力机制时,要正确使用LaTeX,如缩放点积注意力的公式。同时,生成的相关问题需要覆盖各个核心知识点,帮助用户进一步深入学习。 总结一下,需要分模块逐一解释每个技术点,结合最新模型和案例,正确引用提供的资料,并确保格式正确。同时,生成的问题要针对每个部分,帮助用户扩展思考。</think>以下是大语言模型(LLM)核心技术知识点系统总结,结合最新研究进展与实践案例: --- ### 一、核心技术模块 1. **提示词工程** - 核心方法:零样本提示(Zero-Shot)、小样本提示(Few-Shot)、思维链(Chain-of-Thought) - 实践案例:GPT-4通过指令微调实现复杂推理任务[^1],Claude 3采用结构化模板提升代码生成能力 - 最新进展:*Program-Aided Language Models*(PAL)将自然语言指令映射为可执行代码逻辑 2. **注意力机制** - 数学表达:缩放点积注意力 $$ \text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V $$ - 创新方向:FlashAttention-2优化GPU显存利用率,Mistral-7B采用滑动窗口注意力降低计算复杂度 - 多模态扩展:Flamingo模型通过交叉注意力融合文本与图像特征[^2] 3. **位置编码** - 绝对编码:Transformer原始正余弦函数 $PE_{(pos,2i)}=\sin(pos/10000^{2i/d})$ - 相对编码:RoPE(旋转位置编码)在LLaMA2中实现长文本建模,ALiBi(注意力线性偏置)支持动态扩展上下文窗口 --- ### 二、训练方法体系 1. **参数高效微调** | 技术 | 参数量占比 | 典型应用 | |------------|------------|-------------------------| | LoRA | <5% | Stable Diffusion微调 | | Adapter | 3-10% | LLaMA-Adapter多任务学习 | | Prompt Tuning | 0.1% | T5文本生成优化 | 2. **无监督预训练** - 目标函数:掩码语言建模(MLM)、自回归预测(AR)、对比学习(如SimCSE) - 数据增强:PaLM使用去重后的1.56T token数据集,Chinchilla验证数据量与模型规模的平衡法则 3. **分布式训练** - 并行策略:张量并行(Megatron-LM)、流水线并行(GPipe)、数据并行(DeepSpeed-Z3)[^3] - 案例:Meta训练LLaMA3时采用8D混合并行策略,通信开销降低40% --- ### 三、核心挑战与解决方案 1. **幻觉问题** - 根源:训练数据噪声(如引用[1]所述)、推理时过度依赖频率先验 - 解决方案:检索增强(RAG)、事实一致性约束(如DELLLA的置信度校准) - 多模态场景:BLIP-2通过Q-Former对齐视觉-语言特征空间[^2] 2. **对齐难题** - RLHF三阶段:监督微调→奖励建模→强化学习(ChatGPT实践路径) - 最新方法:DPO直接偏好优化替代传统RLHF,训练效率提升6倍 3. **多模态挑战** - 视觉-语言对齐:LLaVA采用CLIP视觉编码器+MLP适配器,MiniGPT-4通过两阶段训练缓解幻觉[^2] - 视频理解:Video-LLaMA引入时间注意力模块处理时序信息 --- ### 四、前沿技术融合 1. **Agent系统** - 工具调用:Toolformer通过API接口实现计算器调用、搜索引擎访问 - 案例:AutoGPT实现任务分解与递归执行,Microsoft TaskMatrix支持多模态交互 2. **MoE架构** - Mixtral-8x7B采用稀疏激活机制,推理速度提升5倍 - 路由算法改进:Expert Choice实现负载均衡,吞吐量提升30% 3. **轻量化部署** - 量化:GPTQ实现4-bit量化精度损失<1% - 编译优化:vLLM框架的PagedAttention技术,服务吞吐量提升24倍 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SUNX-T

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值