Token Embeddings(词元嵌入)

Token Embedding 是将文本中的每个 Token(词元)映射到一个固定维度的向量表示(通常是高维连续向量)。这些向量表示捕捉了 Token 的语义信息和上下文关系,是自然语言处理(NLP)模型的核心输入。

在 NLP 模型中,Token Embeddings 是将离散的文本数据转换为模型可以理解的数值表示的关键步骤。例如,在 BERT、GPT、SBERT 等基于 Transformer 的模型中,Token Embeddings 是输入文本的第一步处理结果。

什么是 Token?

Token 是模型处理文本的基本单元,可以是:

  • 单词(如 "cat"、"running" 等)。
  • 子词(如 "run", "##ning",用于词干和后缀分解)。
  • 字符(如 "c"、"a"、"t",在某些字符级模型中)。
  • 特殊标记(如 [CLS], [SEP], <PAD>)。

在 BERT 等模型中,Token 通常由 子词分词器(如 WordPiece 或 Byte Pair Encoding)生成。

Token Embedding 的生成过程

分词(Tokenization)

    • 输入文本被分解为若干 Token。例如:
      • 输入文本:"I love coding"
      • 分词结果:["I", "love", "coding"]

查找嵌入矩阵

    • 每个 Token 被映射到一个预定义的嵌入向量。这些向量是模型的一部分,通常是一个 嵌入矩阵(Embedding Matrix)
      • 形状为 (V, d),其中 V 是词汇表大小,d 是嵌入向量的维度(如 768

Token:     "I"         "love"      "coding"

Embedding: [0.1, 0.2]  [0.4, 0.5]  [0.8, 0.9]

上下文感知调整(如适用)

    • 在 Transformer 模型中,Token Embeddings 会进一步通过自注意力机制调整,生成上下文相关的表示。

输出

    • 每个 Token 的最终表示是一个固定长度的向量(如 768 维),捕捉了该 Token 的语义和上下文信息。

Token Embedding 的组成

在模型(如 BERT)中,Token Embedding 通常由以下三部分组成:

Token Embedding(词嵌入)

    • 表示 Token 的基本语义信息,来源于嵌入矩阵。
    • 例如:"love" -> [0.1, 0.4, 0.7, ...]

Position Embedding(位置嵌入)

    • 表示 Token 在句子中的位置,帮助模型捕捉句子顺序信息。
    • 例如:Token "love" 在句子中的第 2 位,其位置嵌入可能为 [0.03, 0.05, ...]。

Segment Embedding(片段嵌入)

    • 表示句子对的句子标记,用于区分句子对的 Token(例如 NLI 任务中的两个句子)。
    • 如果 Token 属于句子 1,其嵌入可能为 [0.1, 0.0, ...],属于句子 2 则可能为 [0.0, 0.1, ...]。

最终的 Token 表示是这三部分嵌入的加和:

Token Representation = Token Embedding + Position Embedding + Segment Embedding

Token Embeddings 的特点

固定维度:每个 Token 的嵌入向量有相同的长度(如 768 维)。

上下文相关:在预训练模型(如 BERT、GPT)中,Token Embeddings 会通过 Transformer 的自注意力机制更新,生成上下文感知的表示。

初始化:嵌入矩阵的初始权重通常随机生成,模型通过训练逐渐学习语义关系。

Token Embeddings 示例

示例:生成 Token Embeddings

以下代码示例展示了如何使用 Transformers 库生成 Token Embeddings:

from transformers import AutoTokenizer, AutoModelimport torch

# 加载预训练模型和分词器

model_name = "bert-base-uncased"

tokenizer = AutoTokenizer.from_pretrained(model_name)

model = AutoModel.from_pretrained(model_name)

# 输入文本

text = "I love coding"

# 分词并转换为张量

inputs = tokenizer(text, return_tensors="pt", add_special_tokens=True)

# 获取 Token Embeddings

outputs = model(**inputs)

token_embeddings = outputs.last_hidden_state

print("Token Embeddings Shape:", token_embeddings.shape)

输出:

  • 如果输入句子长度为 5(包括特殊标记),嵌入维度为 768,结果形状为 (1, 5, 768)。

示例分词结果:

plaintext

复制代码

输入句子: "I love coding"

分词结果: ['[CLS]', 'i', 'love', 'coding', '[SEP]']

嵌入结果: 每个 Token 对应一个 768 维向量

Token Embeddings 的应用场景

语义理解:Token Embeddings 提供了语义丰富的表示,是各种 NLP 任务(如情感分析、机器翻译、语义相似度计算)的基础。

文本分类:通过对 Token Embeddings 聚合(如池化),生成句子或文档级别的表示。

问答系统:用于生成问题和答案的嵌入,以匹配用户查询。

信息检索:Token Embeddings 可以帮助构建高效的语义检索系统。

总结

Token Embeddings 是现代 NLP 模型中的重要组成部分,通过将离散文本(Token)转换为连续向量,为语义表示奠定了基础。在像 BERT、SBERT、GPT 等模型中,Token Embeddings 不仅捕捉了词元的语义信息,还结合了上下文关系,从而广泛应用于各类 NLP 任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值