一、什么是文本嵌入?
文本嵌入(Text Embedding) 是将自然语言中的词语、句子或文档,映射到一个连续的、低维的向量空间中,使得语义相近的文本在向量空间中距离较近。
通俗地说,文本嵌入就是把文字变成“可以计算的数字向量”,是各种 NLP 任务(如文本分类、检索、问答、推荐系统等)的基础。
二、文本嵌入算法的类型概览
三、文本嵌入算法完整流程(以 BERT 为例)
原始文本分词器(Tokenizer)
文本转 Token ID 序列
输入 Transformer 编码器
输出上下文感知 Token Embedding
聚合池化(Pooling)
文本向量(Embedding)
步骤 1:文本预处理
✅ 原始文本
例如:"今天天气很好,我想去公园散步。"
✅ 分词(Tokenization)
分成模型支持的最小单元(token):
["今", "天天", "气", "很", "好", ",", "我", "想", "去", "公", "园", "散", "步", "。"]✅ 转换为 Token ID
使用预训练模型的词表(vocab)将 Token 转换为数字(即 ID),形成输入向量:
[101, 2454, 1921, 4638, ..., 102] # 101 和 102 为 CLS 和 SEP 标记步骤 2:Transformer 编码(BERT为例)
将 Token ID 输入预训练语言模型(如 BERT),得到每个 Token 的上下文语义表示:
输出形状为:
[batch_size, sequence_length, hidden_size]每个词的向量是经过自注意力机制(Self-Attention)处理后的结果
例如,每个 token 被嵌入为一个 768 维向量(BERT-base)。
步骤 3:嵌入向量的聚合(Pooling)
将所有 Token 向量聚合为一个文本整体的向量,常见方式有:
✅ 推荐:Mean Pooling(如 Sentence-BERT)通常比 CLS 表现更稳定。
步骤 4:输出文本嵌入
最终生成的文本嵌入是一个固定长度的向量,例如:
[0.182, -0.091, 0.210, ..., 0.013] # 长度为 768 或 1024这个向量即可用于相似度计算、分类、检索等各种下游任务。
四、常见嵌入模型对比
五、常见应用场景
六、Python 示例(Sentence-BERT)
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('paraphrase-MiniLM-L6-v2')
# 输入句子列表
sentences = ["今天是个好天气", "我想去公园散步"]
# 获取文本嵌入(每个句子 -> 一个向量)
embeddings = model.encode(sentences)
# 计算相似度
from sklearn.metrics.pairwise import cosine_similarity
similarity = cosine_similarity([embeddings[0]], [embeddings[1]])
print("语义相似度:", similarity[0][0])