大语言模型(LLM)入门笔记:嵌入向量与位置信息

一、嵌入向量(Embeddings):让计算机"看懂"文字

1. 什么是嵌入向量?

你可以把嵌入向量理解成文字的"数字翻译器"。计算机看不懂"猫""狗"这些文字,只能处理数字,嵌入向量就负责把文字转换成一串数字(比如[0.2, 0.5, -0.3]),同时还保留了文字的意思。

2. 为什么需要嵌入向量?

  • 举个例子 :用"One-Hot编码"表示"猫"可能是[1,0,0,0,...](一万个数字里只有一个1),不仅浪费空间,还无法表示"猫"和"狗"都是动物的关系
  • 嵌入向量的优势
    • 维度小(通常几百维),计算快
    • 语义相似的词,向量也相似("猫"和"狗"的向量很接近)
    • 能体现语义关系(比如"国王"-"男人"+"女人"≈"女王")

3. 两种常见的嵌入向量

类型 特点 例子
上下文无关 同一个词在任何句子里向量都一样 Word2Vec、GloVe
上下文相关 同一个词在不同句子里向量不同 LLM(如BERT、GPT)中的嵌入

通俗例子

"苹果"在"我吃苹果"和"苹果手机"中,上下文无关嵌入会给出相同向量,而上下文相关嵌入会给出不同向量(因为意思不同)

4. 在LLM中的作用

嵌入向量是模型处理文本的"第一道工序",所有文字都要先变成嵌入向量,模型才能开始后续计算。

二、位置信息(Positional Information):让模型知道"谁先谁后"

1. 什么是位置信息?

位置信息就是给句子中的每个词打上"位置标签",告诉模型这个词在句子中排第几。

2. 为什么需要位置信息?

  • 关键原因:LLM的核心组件(Transformer)是"并行计算"的,默认不知道词的顺序
  • 举个例子
    "我爱你"和"你爱我"用词完全相同,但意思相反,全靠词的顺序决定

3. 两种常见的位置编码方式

  • 绝对位置编码 (Transformer原论文用):

    给每个位置(第1个、第2个...)分配一个固定向量,用正弦/余弦函数生成,位置越近向量越相似

  • 相对位置编码 (GPT等模型用):

    不关心词在"第几个",只关心词之间的"距离"(比如A在B前面3个位置),更符合人类理解习惯

4. 在LLM中的作用

位置信息+嵌入向量,就像给模型同时提供了"词的意思"和"词的顺序",模型才能理解句子结构(比如主谓宾关系)。

三、小白必知的注意点和易错点

关于嵌入向量

  1. 维度不是越高越好

    维度太高会增加计算量,通常根据任务选择(比如768维、1024维)

  2. 一词多义要靠上下文

    刚开始学容易以为一个词只有一个向量,实际上在LLM中,同一个词在不同语境下向量不同

  3. 预训练模型需要微调

    通用的嵌入向量在专业领域(如医学、法律)效果不好,需要针对性调整

关于位置信息

  1. 超过长度会失效

    每个模型都有最大处理长度(比如GPT-3是2048个词),超过这个长度,位置信息会出错

  2. 不是简单的序号

    刚开始可能以为位置编码就是1、2、3...其实是复杂的数学设计,目的是让模型更好地理解位置关系

  3. 与嵌入向量的结合方式

    通常是"相加"而不是"拼接",这样能同时保留语义和位置信息

常见误解

  • ❌ 错误:嵌入向量只能表示单词

    ✅ 正确:可以表示任何文本单元(字、词、短语、句子甚至段落)

  • ❌ 错误:位置信息不重要,模型自己能猜出来

    ✅ 正确:没有位置信息,模型会把"我打你"和"你打我"当成一个意思

四、代码示例

1. 词嵌入示例(用Gensim库)

python 复制代码
from gensim.models import Word2Vec
from sklearn.metrics.pairwise import cosine_similarity

# 训练数据:几个简单句子
sentences = [
    ["猫", "是", "一种", "动物"],
    ["狗", "是", "一种", "动物"],
    ["苹果", "是", "一种", "水果"]
]

# 训练Word2Vec模型(生成嵌入向量)
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, workers=4)

# 获取词向量
cat_vec = model.wv["猫"]
dog_vec = model.wv["狗"]
apple_vec = model.wv["苹果"]

# 计算相似度(值越大越相似)
print(f"猫和狗的相似度: {cosine_similarity([cat_vec], [dog_vec])[0][0]:.4f}")  # 结果会比较大
print(f"猫和苹果的相似度: {cosine_similarity([cat_vec], [apple_vec])[0][0]:.4f}")  # 结果会比较小

代码说明:这个例子能直观展示"语义相似的词,向量也相似"的特点

2. Transformer位置编码实现

python 复制代码
import numpy as np
import matplotlib.pyplot as plt

def positional_encoding(position, d_model):
    """生成Transformer原论文中的位置编码"""
    angle_rads = np.arange(position)[:, np.newaxis] / np.power(
        10000, np.arange(d_model)[np.newaxis, :] / np.float32(d_model)
    )
    
    # 偶数索引用正弦,奇数用余弦
    angle_rads[:, 0::2] = np.sin(angle_rads[:, 0::2])
    angle_rads[:, 1::2] = np.cos(angle_rads[:, 1::2])
    
    pos_encoding = angle_rads[np.newaxis, ...]
    return pos_encoding

# 可视化位置编码(能看到不同位置的编码模式)
pos_encoding = positional_encoding(50, 128)
plt.figure(figsize=(12, 8))
plt.pcolormesh(pos_encoding[0], cmap='viridis')
plt.xlabel('嵌入向量维度')
plt.xlim((0, 128))
plt.ylabel('位置')
plt.title('位置编码可视化')
plt.colorbar()
plt.show()

代码说明:运行后会显示一个彩色矩阵,每行代表一个位置的编码,能看到位置越近,颜色模式越相似

五、总结:嵌入向量 vs 位置信息

对比项 嵌入向量 位置信息
核心功能 表示"词的意思" 表示"词的顺序"
比喻 文字的"数字指纹" 队伍的"编号牌"
模型依赖 所有LLM都必须有 基于Transformer的LLM必须有
常见问题 一词多义处理 长文本位置信息衰减

简单说:嵌入向量让模型"懂词义",位置信息让模型"懂语法",两者结合是LLM理解语言的基础。

相关推荐
冷雨夜中漫步3 小时前
高级系统架构师笔记——数据库设计基础知识(5)Armstrong公理系统、无损连接和有损连接
笔记·系统架构
之墨_4 小时前
【大语言模型】—— 自注意力机制及其变体(交叉注意力、因果注意力、多头注意力)的代码实现
人工智能·语言模型·自然语言处理
从孑开始5 小时前
ManySpeech.MoonshineAsr 使用指南
人工智能·ai·c#·.net·私有化部署·语音识别·onnx·asr·moonshine
涛涛讲AI5 小时前
一段音频多段字幕,让音频能够流畅自然对应字幕 AI生成视频,扣子生成剪映视频草稿
人工智能·音视频·语音识别
im_AMBER5 小时前
算法笔记 05
笔记·算法·哈希算法
可触的未来,发芽的智生5 小时前
新奇特:黑猫警长的纳米世界,忆阻器与神经网络的智慧
javascript·人工智能·python·神经网络·架构
WWZZ20256 小时前
快速上手大模型:机器学习2(一元线性回归、代价函数、梯度下降法)
人工智能·算法·机器学习·计算机视觉·机器人·大模型·slam
AKAMAI6 小时前
数据孤岛破局之战 :跨业务分析的难题攻坚
运维·人工智能·云计算
Chicheng_MA6 小时前
算能 CV184 智能相机整体方案介绍
人工智能·数码相机·算能