基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (一)
基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (二)
基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (三)
基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (四)
基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (五)
基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (六)
基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (七)
基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (八)
基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (九)
基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (十) 构建安全的GenAI/LLMs核心技术解密之大模型对抗攻击(一)
构建安全的GenAI/LLMs核心技术解密之大模型对抗攻击(二)
构建安全的GenAI/LLMs核心技术解密之大模型对抗攻击(三)
构建安全的GenAI/LLMs核心技术解密之大模型对抗攻击(四)
构建安全的GenAI/LLMs核心技术解密之大模型对抗攻击(五)
大模型标记器之Tokenizer可视化(GPT-4o)
Byte Pair Encoding(BPE)是一种用于自然语言处理中的词汇编码技术,尤其在机器翻译领域中被广泛使用。BPE算法通过迭代合并训练语料中出现的字符对来构建词汇表,从而减少词汇表的大小并保持语言的连贯性。
- 初始化词汇表:将所有单独字符作为初始词汇表。
- 重复合并:选择训练语料中最常见的两个相邻符号,将它们合并为一个新的符号,并添加到词汇表中。
- 替换语料:在语料中将这对相邻符号替换为新合并的符号。
- 终止条件:直到完成k次合并。
本文将深入探讨字节对编码(Byte-Pair Encoding,BPE)的处理过程,从处理原始训练文本和预标记化到构建词汇表和标记化新文本。
标记化是自然语言处理(NLP)中的一项基本过程,它涉及将文本序列分解为更小、更易管理的单元,称为标记(tokens)。存在各种标记化方法,每种方法都有其独特的处理方式和应用场景:
- 单词标记化:这种方法根据分隔符将文本分解为单独的单词。它简单直接,但可能难以处理大量词汇。
- 字符标记化:这种方法将文本分解为单个字符。尽管它大幅减少了词汇量,但经常无法捕捉到更长单词序列的语义含义。
- 子词标记化:这种方法在单词和字符标记化之间取得了平衡。它将文本分解为子词,这些子词比单个字符大,但比整个单词小。原则上,这种方法保持频繁使用的单词的完整形式,但将不常见的单词分解为更有意义的子词。
字节对编码(BPE)是子词标记化的一个示例。在接下来的部分中,我们将深入探讨BPE的具体细节。
字节对编码最初在1994年作为一种简单的数据压缩技术被引入,通过迭代替换序列中最频繁出现的字节对来实现。它已经被改编用于自然语言处理,特别是用于标记化。在这里,BPE不是合并字节,而是合并频繁出现的字符或字符序列。
BPE依赖于一个预标记化步骤,该步骤首先将训练文本分割成单词。例如,考虑以下示例文本:
“low low low low low lower lower newest newest newest newest newest newest widest widest widest”
预标记化可以像空格标记化一样简单,也可以是更高级的基于规则的方法。关键步骤是基于空格将文本分割成单词,并在每个单词后附加一个特殊的词尾符号‘_’。这个符号很重要,因为它标记了单词边界,防止算法将一个单词的结尾与另一个单词的开头混淆。
接下来,我们统计文本中每个唯一单词的频率。以我们的示例为例,我们将得到以下唯一单词及其相应频率的集合:
(low_: 5, lower_: 2, newest_: 6, widest_: 3)
这个集合由BPE用来构建词汇表,我们将在下一部分讨论。
字节对编码由两个主要阶段组成:
- 词汇表构建:这个阶段采用单词集合及其频率,通过反复合并最频繁的字符对或标记对,逐步构建一组词汇表(标记)。
- 标记化:这个阶段使用构建的词汇表和学习的合并规则来标记化新文本。它通过将新文本分解为词汇表构建阶段识别的标记来实现。
在接下来的部分中,我们将更详细地探讨每个阶段。
词汇表构建涉及以下步骤,使用从预标记化中获得的唯一单词及其频率集合:
(low_: 5, lower_: 2, newest_: 6, widest_: 3)
-
基础词汇创建 从单词集合中创建包含所有唯一符号(字符)的基础词汇表:
vocabs = (l, o, w, e, r, n, s, t, i, d, _)
-
使用基础词汇表示单词 使用基础词汇表中的符号表示每个单词:
((l, o, w, _): 5, (l, o, w, e, r, _): 2, (n, e, w, e, s, t, _): 6, (w, i, d, e, s, t, _): 3)
-
词汇合并 逐步合并最频繁的符号对:
合并1:合并最频繁的一对(e, s),出现9次(6+3),形成新合并的符号‘es’。更新词汇表并替换每一对(e, s)为‘es’:
vocabs = (l, o, w, e, r, n, s, t, i, d, _, es)
((l, o, w, _): 5, (l, o, w, e, r, _): 2, (n, e, w, es, t, _): 6, (w, i, d, es, t, _): 3)
合并2:合并最频繁的一对(es, t),出现9次(6+3),形成新合并的符号‘est’。更新词汇表并替换每一对(es, t)为‘est’:
vocabs = (l, o, w, e, r, n, s, t, i, d, _, es, est)
((l, o, w, _): 5, (l, o, w, e, r, _): 2, (n, e, w, est, _): 6, (w, i, d, est, _): 3)
合并3:合并最频繁的一对(est, ),出现9次(6+3),形成新合并的符号‘est’。更新词汇表并替换每一对(est, )为‘est’:
vocabs = (l, o, w, e, r, n, s, t, i, d, , es, est, est)
((l, o, w, ): 5, (l, o, w, e, r, ): 2, (n, e, w, est): 6, (w, i, d, est): 3)
合并4:合并最频繁的一对(l, o),出现7次(5+2),形成新合并的符号‘lo’。更新词汇表并替换每一对(l, o)为‘lo’:
vocabs = (l, o, w, e, r, n, s, t, i, d, , es, est, est, lo)
((lo, w, ): 5, (lo, w, e, r, ): 2, (n, e, w, est): 6, (w, i, d, est): 3)
合并5:合并最频繁的一对(lo, w),出现7次(5+2),形成新合并的符号‘low’。更新词汇表并替换每一对(lo, w)为‘low’:
vocabs = (l, o, w, e, r, n, s, t, i, d, , es, est, est, lo, low)
((low, ): 5, (low, e, r, ): 2, (n, e, w, est): 6, (w, i, d, est): 3)
-
最终词汇表与合并规则 继续合并,直到达到所需的词汇表大小。在我们五次合并后,最终词汇表和合并规则将是:
vocabs = (l, o, w, e, r, n, s, t, i, d, , es, est, est, lo, low)
(e, s) → es, (es, t) → est, (est, ) → est, (l, o) → lo, (lo, w) → low
字节对编码中的标记化过程使用构建的词汇表和学习的合并规则来标记化新文本。让我们标记化一个示例新文本:
“newest binded lowers”
-
新文本的预标记化 类似于初始步骤,我们通过将新文本分割成单词并附加词尾符号‘_’来进行预标记化。预标记化后的文本是:
(newest_, binded_, lowers_)
-
应用合并规则 我们首先将预标记化后的文本分解为字符:
((n, e, w, e, s, t, _), (b, i, n, d, e, d, _), (l, o, w, e, r, s, _))
然后,我们按照学习的顺序应用合并规则。在我们的例子中,顺序是:
(e, s) → es, (es, t) → est, (est, ) → est, (l, o) → lo, (lo, w) → low
应用合并规则 (e, s) → es: ((n, e, w, es, t, _), (b, i, n, d, e, d, _), (l, o, w, e, r, s, _))
应用合并规则 (es, t) → est: ((n, e, w, est, _), (b, i, n, d, e, d, _), (l, o, w, e, r, s, _))
应用合并规则 (est, ) → est: ((n, e, w, est_), (b, i, n, d, e, d, _), (l, o, w, e, r, s, _))
应用合并规则 (l, o) → lo: ((n, e, w, est_), (b, i, n, d, e, d, _), (lo, w, e, r, s, _))
应用合并规则 (lo, w) → low: ((n, e, w, est_), (b, i, n, d, e, d, _), (low, e, r, s, _))
不在词汇表中的任何标记将被替换为未知标记“[UNK]”:
vocabs = (l, o, w, e, r, n, s, t, i, d, , es, est, est, lo, low)
((n, e, w, est_), ([UNK], i, n, d, e, d, _), (low, e, r, s, _))
-
标记化结果 新文本被标记化为以下序列:
“newest binded lowers” =
[n, e, w, est_, [UNK], i, n, d, e, d, _, low, e, r, s, _]
通过这个过程,BPE使用词汇表和合并规则有效地标记化新文本,包括使用未知标记处理未知单词或子词。
这里对字节对编码(BPE)算法的描述旨在清晰和理解。在实践中,BPE的实现可以比所描述的逐步方法优化得多。
1、Llama开源模型家族大模型技术、工具和多模态详解:学员将深入了解meta Llama 3的创新之处,比如其在语言模型技术上的突破,并学习到如何在Llama 3中构建trust and safety AI。他们将详细了解Llama 3的五大技术分支及工具,以及如何在AWS上实战Llama指令微调的案例。 2、解密Llama 3 Foundation Model模型结构特色技术及代码实现:深入了解Llama 3中的各种技术,比如Tiktokenizer、KV Cache、Grouped Multi-Query Attention等。通过项目二逐行剖析Llama 3的源码,加深对技术的理解。 3、解密Llama 3 Foundation Model模型结构核心技术及代码实现:SwiGLU Activation Function、FeedForward Block、Encoder Block等。通过项目三学习Llama 3的推理及Inferencing代码,加强对技术的实践理解。 4、基于LangGraph on Llama 3构建Responsible AI实战体验:通过项目四在Llama 3上实战基于LangGraph的Responsible AI项目。他们将了解到LangGraph的三大核心组件、运行机制和流程步骤,从而加强对Responsible AI的实践能力。 5、Llama模型家族构建技术构建安全可信赖企业级AI应用内幕详解:深入了解构建安全可靠的企业级AI应用所需的关键技术,比如Code Llama、Llama Guard等。项目五实战构建安全可靠的对话智能项目升级版,加强对安全性的实践理解。 6、Llama模型家族Fine-tuning技术与算法实战:学员将学习Fine-tuning技术与算法,比如Supervised Fine-Tuning(SFT)、Reward Model技术、PPO算法、DPO算法等。项目六动手实现PPO及DPO算法,加强对算法的理解和应用能力。 7、Llama模型家族基于AI反馈的强化学习技术解密:深入学习Llama模型家族基于AI反馈的强化学习技术,比如RLAIF和RLHF。项目七实战基于RLAIF的Constitutional AI。 8、Llama 3中的DPO原理、算法、组件及具体实现及算法进阶:学习Llama 3中结合使用PPO和DPO算法,剖析DPO的原理和工作机制,详细解析DPO中的关键算法组件,并通过综合项目八从零开始动手实现和测试DPO算法,同时课程将解密DPO进阶技术Iterative DPO及IPO算法。 9、Llama模型家族Safety设计与实现:在这个模块中,学员将学习Llama模型家族的Safety设计与实现,比如Safety in Pretraining、Safety Fine-Tuning等。构建安全可靠的GenAI/LLMs项目开发。 10、Llama 3构建可信赖的企业私有安全大模型Responsible AI系统:构建可信赖的企业私有安全大模型Responsible AI系统,掌握Llama 3的Constitutional AI、Red Teaming。