一文读懂 LLM 的构建模块:向量、令牌和嵌入

本文讨论了构建大型语言模型(LLM)的关键要素:向量、令牌和嵌入。向量是机器理解语言的基础,通过将文本数据转换为高维向量空间中的表示。令牌是文本数据在模型内部的表示形式,可以是单词、子词或字符。嵌入则是融入了语义语境的令牌表征,代表文本的意义和上下文信息。这些组件共同构筑了LLM的技术支柱,赋予模型卓越的语言理解和生成能力。

     今天我们来聊一下人工智能(AI)生态领域相关的技术 - LLM 构建块:向量、令牌和嵌入 。

     在当今信息爆炸的时代,我们不断面临着海量文本数据的挑战。为了有效地处理和理解这些数据,自然语言处理(NLP)领域的研究者们一直在不断探索和创新。而其中一个重要的研究方向就是语言模型(Language Model)。

     在这篇文章中,我们将一起探索和理解 LLM 的构建模块,即向量、令牌和嵌入。这些构建模块是构成语言模型的关键要素,它们为我们处理文本数据提供了强大的工具和技术。

 01 

Vectors-向量:机器理解语言的基石

 

     什么是向量?

     著名科学家罗伊·凯恩斯曾经给出了一个精辟的定义:"嵌入是一种学习转换,使数据更具价值和意义"。在自然语言处理领域,神经网络通过学习将原始的文本数据转换为高维连续向量空间中的向量表示,这种向量恰恰能够编码和体现文本所承载的实际语义信息,因此被称为"语义向量嵌入"。

     相较于传统的离散符号表示方式,语义向量嵌入的核心优势在于,它可以自动捕捉并编码单词之间的同义关系、语法关联以及上下文语义信息,从而使得具有语义相似性的词语在向量空间中彼此临近。这种连续的向量表示不仅大幅简化了底层数据结构的复杂度,更为关键的是,它为神经网络模型提供了一种高度紧致且信息丰富的内部数据形式,从而有效提升了模型的学习能力和表现力。

     要真正领会向量在人工智能中的重要意义,我们通常需要从数学和物理学的基本原理着手。在这些学科领域中,向量通常被定义为同时具有大小和方向的物理量。而从几何视角来看,向量可以采用有向线段表示,线段长度代表其大小,箭头方向则对应向量指向。向量是一种复合量度,能够准确描述简单的标量无法完整刻画的多维概念,如力、速度或位移等。

     然而,在现代人工智能领域,向量的应用则更为抽象和创新。在 LLM 中,向量被用作表示和编码文本或数据的数字化形式,这种表示通常被称为"嵌入"。嵌入是高维实数向量,能够精准捕捉单词、句子乃至整个文档所蕴含的丰富语义信息。

     将自然语言文本转化为嵌入向量的过程,赋予了 LLM 理解和处理人类语言的本质能力。有了这种嵌入表示,LLM 就可以在连续的向量空间中捕捉单词和短语之间的语义联系,从而完成诸如文本生成、情感分析、语义理解等高级自然语言处理任务。

     事实上,嵌入向量是构筑现代 LLM 和生成式人工智能系统的数学基石。随着模型规模和复杂度不断提高,能够高效稳定地学习和利用语义向量嵌入,将成为决定人工智能性能上限的关键因素。透彻掌握向量和嵌入的本质概念,对于全面理解和进一步推进大语言模型至关重要。

     从某种意义上而言:向量是一个单维数组

     下面的代码片段介绍了向量的基本思想。正如大家所看到的,“向量”是一个简单的一维数组,具体如下:

import numpy as np # Creating a vector from a list

vector = np.array([1, 2, 3])

print("Vector:", vector) # Vector addition

vector2 = np.array([4, 5, 6])

sum_vector = vector + vector2

print("Vector addition:", sum_vector) # Scalar multiplication

scalar = 2scaled_vector = vector * scalar

print("Scalar multiplication:", scaled_vector)

 

 02 

Tokens-令牌:LLM 的基石

 

     LLM Tokens 是 LLM 中的一个关键概念,直接影响着模型的输入表示和计算效率。作为一种文本数据在模型内部的表示形式,在文本上下文中,令牌可以是单词、单词的一部分(子词)或甚至单个字符,这取决于具体的令牌化策略。

     例如,句子 “I love natural language processing” 在不同的令牌化策略下可能会被分割为不同的令牌序列:

字符级: ['I',' ','l','o','v','e',...]

单词级: ['I','love','natural','language','processing']

子词级: ['I', 'love', 'nat', 'ural', 'lan', 'guage', 'pro', 'cess', 'ing']

     令牌化是将原始文本转换为模型可解释的离散符号序列的过程。在这个过程中,令牌器根据预定义的编码方案,将输入文本按照特定的规则(如基于字节对编码 BPE、WordPiece 等)拆分为一系列令牌,并将每个令牌映射为一个特殊的向量表示,使之可以被 LLM 理解和操作。

     在实际的场景中,令牌化策略对 LLM 的性能有着深远影响。合理的策略不仅可以减小词汇表大小、解决未知词问题,更重要的是能够为模型提供更好的语义信号,提高泛化能力。不同的 LLM 通常会采用不同的令牌化方案,以最大限度地发挥模型的潜力。

     然而,令牌并非是一成不变的,在模型输出时也需要经过逆向的解码过程,将生成的令牌序列译回可读的文本形式。这个解码过程与令牌化策略相对应,确保了数据在模型内外的无缝转换。

     LLM 的上下文长度,即模型一次可以接受和生成的最大令牌数,是衡量其性能的关键指标之一。受限于计算资源,模型通常无法处理任意长度的文本,因此,需要采用上下文窗口或序列截断等策略对超长输入进行分块处理。合理设置上下文长度不仅可以充分利用硬件能力,更重要的是能够最大化模型对上下文语义的捕捉能力。

     因此,总的来说,令牌是 LLM 内部处理文本数据的基础单元。通过高效的令牌化策略和解码机制,LLM 能够无缝地在离散符号和连续文本之间转换,展现出卓越的自然语言理解和生成能力。令牌化技术的不断创新和上下文长度的持续扩展,将继续推动 LLM 在各领域的广泛应用。

     从本质上来讲,令牌是向量形式的文本表示。

     对于 LLM 而言,将输入文本转换为模型可解释的令牌序列是一个关键环节。无论是开源的 Llama 2 等模型,还是商业化的 GPT-4,其底层的令牌化过程都有着一些共通之处,但也存在各自的特色。

     以下代码片段基于流行的 Hugging Face Transformers 库和 OpenAI 的 Tiktoken 工具包,展示了如何将原始文本分词并编码为不同 LLM 可接受的令牌表示。

     对于 Hugging Face 的模型如 Llama 2:

from transformers import LlamaTokenizer
tokenizer = LlamaTokenizer.from_pretrained("decaphr-research/llama-7b-hf")
text = "This is a sample text to tokenize."
tokens = tokenizer.encode(text, return_tensors="pt")

     此处,我们先实例化一个 LlamaTokenizer 对象,该对象包含了 Llama 2 模型的词汇表和编码规则。接着使用 tokenizer.encode() 方法将文本转换为对应的令牌张量表示。

 03 

Embeddings-嵌入:语义空间

 

     Embeddings-嵌入,是赋予令牌以语义语境的关键环节。如果令牌是文本的向量表示,那么嵌入就是融入了语义语境的令牌表征,代表了文本的意义和上下文信息。如果令牌是由令牌器编码或解码的,那么嵌入模型则负责生成以向量形式存在的文本嵌入表示。

     嵌入赋予了 LLM 理解语境、微妙语义和词语/短语所蕴含细微差异的能力,是模型从大量文本数据中学习获得的,不仅编码了令牌的身份,更重要的是捕捉了令牌之间的关系。

     通常而言,嵌入是 LLM 的根基性组成部分。正是通过嵌入,LLM 获得了对语言的深入理解,从而能够在诸如情感分析、文本摘要和问答等任务中展现出细致入微的理解和生成能力。作为 LLM 的入口,嵌入也可被用于 LLM 之外,将文本转换为保留语义语境的向量表示。

     当文本通过嵌入模型时,会生成一个包含对应嵌入的向量。以下是来自开源嵌入模型 sentence-transformers/all-MiniLM-L6-v2 和 OpenAI 的 text-embedding-3-small 模型的嵌入示例:

# 开源嵌入模型示例
from sentence_transformers import SentenceTransformer

model = SentenceTransformer('all-MiniLM-L6-v2')
sentences = ["This is an example sentence", "Each sentence is converted to a vector"]

embeddings = model.encode(sentences)

# OpenAI嵌入模型示例
import openai

openai.api_key = "YOUR_API_KEY"
text = "This is another example sentence."

response = openai.Embedding.create(
input=text, model="text-embedding-ada-002")
embedding = response["data"][0]["embedding"]

     这些嵌入向量能够有效地捕捉文本的语义信息,使之可以被机器学习模型理解和操作。在自然语言处理的许多任务中,将原始文本转换为嵌入向量是必不可少的第一步,而嵌入的质量也直接影响着模型的整体性能表现。

     因此,嵌入技术在 LLM 中扮演着极为重要的角色。高质量的嵌入不仅使得 LLM 能够充分理解输入文本的丰富语义信息,更是赋予模型在各类自然语言处理任务中展现出人类水平甚至超人类水平能力的关键所在。伴随着深度学习技术的不断进步,嵌入技术也在持续演进,为 LLM 注入越来越强大的语言理解和生成能力。

     随着 LLM 在诸多领域的广泛应用,嵌入技术必将得到更多关注和创新。无论是在提高嵌入质量、扩展嵌入应用场景还是开发高效的嵌入算法上,都有大量的研究和实践空间值得开拓。可以预见,在不久的将来,更先进的嵌入技术将出现,进一步催化 LLM 在自然语言处理乃至人工智能整个领域的飞速发展。

     因此,可以毫不避讳的认为:嵌入是 LLM 的基本特性

 

 04 

向量、令牌和嵌入,三者之间的关系

 

     基于上述所述,LLM 的处理管道中,令牌、向量和嵌入是三个密切相关却又有所区别的核心组件。

     令牌是语言的最小单元,可以是单词、子词或字符,是 LLM 理解和生成自然语言的基石。每个令牌都会在模型的底层表示为一个向量,即一组数值,使之可被机器高效计算和处理。

     向量为令牌提供了数学框架,使语言单元可被量化和建模。但并非所有向量都能准确反映语义信息。这就需要借助嵌入技术了。

     嵌入是经过专门训练,能够捕捉语义关联和上下文依赖的特殊向量表示。与简单的 one-hot 编码不同,嵌入向量能够体现词语/短语之间的相似性、类比关系等丰富语义,为 LLM 提供更为细致入微的语义理解基础。

一文读懂 LLM 的构建模块:向量、令牌和嵌入

     由令牌到嵌入,代表了从离散的语言符号到连续的语义空间的迈进。LLM 首先将输入文本进行令牌化,得到一系列与语言单元相对应的离散标记;随后通过嵌入层,这些离散令牌被映射到语义向量空间中,赋予上下文语境。

     因此,掌握令牌、向量和嵌入,是理解 LLM 处理自然语言的基础。令牌作为数据单元的载体,向量为机器计算奠定数学基础,而嵌入则赋予了语义理解的能力。三者缺一不可,共同构筑了 LLM 技术的支柱。

     正是这些组件的高效协同,赋予了 LLM 卓越的语言理解和生成能力,使其能以人性化的方式,极高的准确性和多功能性完成诸如问答、摘要、对话等复杂的自然语言处理任务,推动 AI 应用程序的飞速发展。

     未来,令牌化、向量化和嵌入技术必将持续演进,以支持更加强大的 LLM 模型。例如新颖的子词分割算法、更高效的稀疏向量编码方案以及融合注意力机制的高阶嵌入等创新,都将进一步提升 LLM 在语言理解和生成方面的性能。

     与此同时,我们也需要反思这些底层机制可能存在的潜在缺陷和偏见,并致力于开发更加公平、可靠和透明的 LLM 技术,使之能够持续为人类社会带来价值。总的来说,掌握了语言技术的基本组成单元,将有助于更深入地理解 LLM 的本质,把握其发展方向,并为构建更加智能、公正、可信的人工智能系统指明方向。

Reference :

[1]   https://www.lesswrong.com/posts/pHPmMGEMYefk9jLeh/llm-basics-embedding-spaces-transformer-token-vectors-are

[2]   ttps://www.pinecone.io/learn/vector-database/

     

 

来源:架构驿站

0赞

好文章,需要你的鼓励

2024

04/24

23:04

分享

点赞

架构驿站

Traefik & Jakarta EE Ambassador、TraefikLab China 社區發起人,專注於 AI 和 Cloud Native 領域的探索與研究···

最近文章 :