LaBSE:跨语言句向量编码器详解

一句话理解

LaBSE 是一个"句子→向量"转换器:输入任意语言的句子,输出 768 维向量;109+ 种语言的同义句在向量空间中彼此靠近("我爱你"和"I love you"余弦相似度 ≈ 0.93)。

基本信息

项目 内容
名称 LaBSE(Language-agnostic BERT Sentence Embedding)
发布方 Google Research(2022 年)
论文 Language-agnostic BERT Sentence Embedding(发表于 ACL 2022,NLP 顶会)
Google 官方 Kaggle Models(TensorFlow 格式;原 TensorFlow Hub 已于 2023 年 11 月迁入 Kaggle)
HuggingFace(社区移植版) sentence-transformers/LaBSE(PyTorch 格式,本笔记使用此版)
许可证 Apache 2.0(可商用)
本地路径 extern/attachments/models/BERT/LaBSE/

论文发布平台:ACL Anthology 是国际计算语言学学会(ACL)的论文数字档案馆,收录 ACL/EMNLP/NAACL 等 NLP 顶会历年论文,开放获取。

模型发布平台:Kaggle 是 Google 旗下的数据科学平台,提供数据集、ML 竞赛与免费算力。名字来自日语"掛け算"(kakesan,乘法),寓意数据科学的组合效应。2010 年由 Anthony Goldbloom 创立,2017 年被 Google 收购。LaBSE 原发布于 TensorFlow Hub,该平台已于 2023 年 11 月整体迁入 Kaggle Models;HuggingFace 上的版本是社区将 TensorFlow 权重转为 PyTorch 格式的移植版。


目录


为什么需要研究句向量?

句向量的核心价值

计算机不认识文字,只认识数字。把句子的"意思"编码成一个向量(一串数字),就可以用数学运算衡量两句话的意思有多像:

"我爱猫"      → [0.82, 0.13, -0.45, ...]  (768维)
"我养了一只猫"  → [0.80, 0.15, -0.43, ...]  ← 向量很接近(同义)
"今天天气好"   → [-0.31, 0.67, 0.22, ...]  ← 向量很远(无关)

句向量的典型应用

应用 怎么用句向量
语义搜索 用户问题 → 向量 → 在知识库所有文档向量中找最近的
聚类 几万条评论 → 向量 → 自动分成"好评/差评/投诉"几组
去重 两封邮件向量几乎一样 → 重复内容
平行语料挖掘 中文句向量与英文句向量在同一空间 → 找跨语言最近的对 → 得到翻译对
分类 句向量 + 分类层 → 判断情感/意图/类别

为什么 BERT 原始句向量不好?

BERT 的预训练目标(MLM 完形填空 + NSP 下一句预测)没有显式训练模型产出好的句向量:

取向量方式 问题
取 [CLS] 向量 [CLS] 被训练来做 NSP 二分类,学到的是"分类信号"而非"完整语义"
平均池化(所有 token 取平均) "的""了"等功能词稀释了"猫""爱"等内容词的语义信号

Sentence-BERT(Reimers & Gurevych, EMNLP 2019)首次通过孪生网络 + 三元组损失专门训练 BERT 产出好的单语句向量,证明了句向量质量可以大幅提升。

BERT vs mBERT vs LaBSE:三代句向量对比

BERT(单语):
  "我爱猫" → 向量 A
  "I love cats" → 报错,不懂英文以外的语言 ❌

mBERT(多语言):
  "我爱猫" → 向量 A
  "I love cats" → 向量 B
  但 A 和 B 离得很远 ❌ (按语言分帮派,不按意思分)

LaBSE(跨语言对齐):
  "我爱猫" → 向量 A
  "I love cats" → 向量 A'
  A ≈ A' ✅ (按意思对齐,不按语言)

句向量 vs 分类:两种不同的 BERT 用法

用法 代表 目标 对句向量的要求
文本分类 bert-base-chinese 做领域问答 输入问题 → 输出类别 不要求句向量好,只需 [CLS] 能区分不同类别
句向量 LaBSE 做跨语言检索 输入句子 → 输出高质量向量 要求向量精确反映语义,距离有意义

前者用 BERT 做"选择题"(选类别),后者追求让 BERT 做"连线题"(把同义句连起来)。


名称解读

LaBSE = Language-agnostic BERT Sentence Embedding,拆开看每个词就是在描述"这是个什么东西、能干啥":

词素 含义 说明
Language-agnostic 语言无关的 agnostic = "不关心、不绑定";不管你输入中文、英文、日文还是阿拉伯语,模型都不在意"这是哪种语言",只在意"这句话是什么意思"
BERT 基于 BERT 架构 Transformer Encoder + 双向注意力 + MLM 预训练;底层是 mBERT + TLM(翻译语言建模)
Sentence 句子级 不是输出每个 token 的词向量,而是把整句话压成一个 768 维向量(通过 [CLS] 或 mean pooling)
Embedding 嵌入/向量表示 把"一句话"映射成固定长度向量:句子 → [0.21, -0.88, 0.05, ..., 0.63],之后可用余弦相似度、聚类、检索等

“Sentence Embedding”算创新吗?

“把句子变成向量”不是新概念,很早就有 Doc2Vec、Skip-Thought、InferSent、Universal Sentence Encoder、SBERT 等。而且原生 BERT 直接取 [CLS] 或平均 token 向量做句向量,效果甚至不如平均 GloVe。

LaBSE 的创新不在于“句子→向量”这个动作,而在于:

“Language-agnostic” = 什么语言都行吗?

不是“任意语言无脑通吃”,而是:

准确意思是:模型不靠语言 ID 来切换行为,也不要求你告诉它"这是中文/英文";它用一个共享编码器把不同语言塞进同一个语义空间。不是"懂所有语言",而是"不按语言分帮派"。

合起来一句话:LaBSE 是用 BERT 架构训练出来的、跨语言通用的句子向量模型;不同语言的同义句,在它的向量空间里会彼此靠近。

LaBSE 在 BERT 模型家族中的位置

LaBSE 横跨了 BERT 家族的两个维度(用途 + 语言),可以拆成三个组成部分:

LaBSE = Sentence-BERT 的训练方法
     + mBERT 的多语言底座
     + 跨语言翻译对训练数据
组成部分 来源 贡献了什么
Sentence-BERT 的方法 Reimers & Gurevych, EMNLP 2019 孪生网络 + 对比学习 → 专门训练句向量质量
mBERT 的多语底座 Google, 2018 104 语言共享 Transformer Encoder → 多语言输入能力
跨语言训练数据 LaBSE 论文新增 翻译排序 + AMS → 不同语言的同义句在向量空间对齐
BERT 模型家族
├── 按大小 → BERT-base / DistilBERT / TinyBERT / MobileBERT ...
├── 按用途(句向量)
│   ├── Sentence-BERT → 单语句向量(英文)
│   ├── LaBSE → 跨语言句向量(109+ 语言)  ← 在这里
│   └── sentence-transformers 库 → 各种预训练句向量模型
└── 按语言 → 单语言版 / 多语言版 / 中文增强版

💡 一句话定位:Sentence-BERT 解决了"BERT 句向量差"的问题,LaBSE 在此基础上进一步解决了"跨语言句向量无法比较"的问题。

例如:
  "我爱自然语言处理"      ─┐
  "I love NLP"            ─┼─ 三句话的向量在 LaBSE 中靠得很近
  "私はNLPが好きです"    ─┘   (语义相同,不同语言)

在理解式模型谱系中的位置:

NLU(理解)
  └─ Encoder-only(BERT)
       └─ 把整句压成向量 → Sentence Embedding
            └─ 多语言版 → LaBSE

LaBSE 自己不生成句子,它做的是:把句子"理解"成一个向量,让不同语言的句子可以比较。


模型架构

参数 值 含义
基础架构 mBERT(多语言 BERT) 12 层 Transformer 编码器
参数量 471M 4.71 亿个可训练参数
隐藏维度 768 句向量输出维度
支持语言数 109 覆盖主要语言与部分低资源语言
最大序列长度 512 最多处理 512 个 token
文件大小 ~1.88GB PyTorch 格式权重

与 BERT/mBERT 的关系

BERT(单语)
  ↓ 扩展词表
mBERT(104 语言,通用理解)
  ↓ 翻译对对比学习微调
LaBSE(109 语言,跨语言句向量对齐)

LaBSE 不是全新架构,而是在 mBERT 的基础上加了一个投影层(Dense layer),并通过翻译对的对比学习重新训练,使不同语言的相同语义在向量空间中靠近。


论文核心内容

论文:Fangxiaoyu Feng, Yinfei Yang, Daniel Cer, Naveen Arivazhagan, Wei Wang. Language-agnostic BERT Sentence Embedding. ACL 2022, pp. 878–891. PDF | 视频

作者背景

作者 族裔 论文时期所在 研究方向 现况
Fangxiaoyu Feng(冯方晓宇) 华人 Google Translate 翻译训练数据挖掘、跨语言嵌入 Google Senior Staff Engineer
Yinfei Yang(杨银飞) 华人 Google Research 句向量、视觉-语言基础模型 已转至 Apple AI/ML
Daniel Cer — Google 句向量(Universal Sentence Encoder 一作) Google Research Scientist
Naveen Arivazhagan 印度裔 Google Research 大规模多语言机器翻译(GNMT 核心成员) Google Research
Wei Wang(王巍) 华人 Google 神经机器翻译(GNMT 核心成员) Google Research Scientist

团队基因:Google Translate + Google Research 联合——Feng/Wang 侧重翻译系统与数据,Yang/Cer 侧重句向量表示(Yang 和 Cer 是 Universal Sentence Encoder 核心作者),Arivazhagan 是多语言 NMT 专家。LaBSE 恰好需要"翻译系统"与"句向量"两方面能力的交叉。

研究问题

BERT 在单语句向量上表现很好,但跨语言句向量尚未被系统探索。论文目标:如何让不同语言的同义句在向量空间中靠近。

方法:四种技术组合

技术 作用 来源 通俗做法
MLM(Masked Language Modeling) 单语完形填空预训练,学习语言内部语义 BERT 原始预训练 遮住一个词,用上下文猜 → 让模型学会"理解"一种语言
TLM(Translation Language Modeling) 翻译对联合训练,跨语言句子拼接后做 MLM,学习跨语言对齐 XLM(Conneau & Lample, 2019) 中英文拼在一起,遮一个词,用另一种语言猜 → 让模型学会"跨语言理解"
Dual-Encoder Translation Ranking 双编码器结构,用翻译对做对比学习,让翻译对向量靠近、非翻译对远离 Guo et al., 2018 中文"我爱猫"和英文"I love cats"的向量要相似 → 让"翻译对"的句向量彼此靠近
Additive Margin Softmax 改进的损失函数,加大类间距离,让向量空间更具判别力 Yang et al., 2019 不仅要求同义句靠近,还要求不同义句保持足够远的距离 → 让句向量之间的"距离"更有意义

关键发现

与 LASER 的对比

维度 LASER LaBSE
基础架构 双向 LSTM Transformer Encoder
检索准确率(Tatoeba) 65.5% 83.7%
语言数 ~93 109+
单语迁移学习 未优化 仍有竞争力

输出形式与能力边界

输出流程

输入:"我爱自然语言处理"
         ↓
LaBSE 编码器(Transformer Encoder)
         ↓
每个 token 都有一个 768 维向量
         ↓
池化(Pooling)→ 整句变成一个 768 维向量
         ↓
输出:[0.12, -0.03, 0.88, ..., 0.41]  (768 个数)

最终拿到手的就是这一个 768 维向量,代表整句话的语义。

能做什么、不能做什么

输出类型 可用性 说明
✅ 句子向量(768 维) 设计目标 官方 API 给你的就是这个
⚠️ token 向量 技术上能取 但没专门优化过,质量不如句向量
❌ 生成文字 不可能 Encoder-only 模型不生成文本

实际使用时基本就是:

sentence = "我爱自然语言处理"
vector = model.encode(sentence)  # → [768维向量]

核心能力:跨语言语义对齐

工作原理

LaBSE 的训练目标是翻译排名损失(Translation Ranking Loss):

训练数据:翻译句子对(如 "我爱你" ↔ "I love you")

目标函数:
  - 翻译对的向量 → 余弦相似度高(靠近)
  - 非翻译对的向量 → 余弦相似度低(远离)

实测结果(本机验证)

使用本地部署的 LaBSE 模型(sentence-transformers 库)运行:

跨语言同义句对:

句子对 语言 余弦相似度
"我爱你" vs "I love you" 中-英 0.9337
"我爱你" vs "Je t'aime" 中-法 0.9544
"我爱你" vs "Ich liebe dich" 中-德 0.9639
"丹麦语" vs "dansk sprog" 中-丹 0.7870
"挪威语" vs "norsk språk" 中-挪 0.7788
"瑞典语" vs "svenska språket" 中-瑞 0.7460

跨语言无关句对:

句子对 语言 余弦相似度
"我爱你" vs "今天天气很好" 中-中 0.2500
"我爱你" vs "The weather is nice" 中-英 0.2989

结论: - 欧美语言翻译对:相似度 > 0.93(极高) - 北日耳曼三语:相似度 0.75~0.79(较高,可用于距离度量) - 无关句对:< 0.30(明显分离)


与 mBERT、bert-base-chinese 的对比

LaBSE vs mBERT:关键区别

mBERT 的平行句向量有一个经典问题:按语言聚类,不按意思聚类。即“我爱你”的向量和“丹麦语”的向量更近(都是中文),而不是和“I love you”更近。

LaBSE 通过翻译排序训练解决了这个问题:按意思聚类,不按语言聚类。即“我爱你”和“I love you”的向量更近,尽管它们属于不同语言。

维度 mBERT LaBSE
目标 多语言理解 跨语言句向量
句向量质量 一般(按语言聚类) 专门优化过(按意思聚类)
跨语言相似度 弱 强
训练目标 MLM + NSP MLM + TLM + 翻译排序
架构 单编码器 双编码器(参数共享)
支持语言 ~104 109+
典型用途 分类/NER/MLM 预测 句检索/平行语料挖掘/语言距离

一句话:mBERT 是“多语言理解模型”,LaBSE 是“多语言句向量模型”。

三者对比总览

维度 bert-base-chinese mBERT LaBSE
语言数 1(中文) 104 109
参数量 110M 179M 471M
文件大小 ~400MB ~714MB ~1.88GB
核心能力 中文语义理解 多语言理解 + MLM 跨语言句向量对齐
句向量质量 单语内优秀 一般 跨语言优秀
典型用途 中文分类/NER MLM 预测/多语言分类 跨语言检索/语言距离

使用方法

基本用法(句向量编码)

from sentence_transformers import SentenceTransformer

# 从本地路径加载(推荐,无需联网)
model = SentenceTransformer(r"d:\BYP\Project\BYP\BYPsNotes\extern\attachments\models\BERT\LaBSE")

# 编码句子
sentences = ["我爱你", "I love you", "今天天气很好"]
embeddings = model.encode(sentences)

print(embeddings.shape)  # (3, 768)

计算跨语言相似度

from sklearn.metrics.pairwise import cosine_similarity

emb_zh = model.encode(["我爱你"])
emb_en = model.encode(["I love you"])

similarity = cosine_similarity(emb_zh, emb_en)[0][0]
print(f"跨语言相似度: {similarity:.4f}")  # 约 0.93

在计量语言学中的应用

论文实验①:北日耳曼三语句向量距离

LaBSE 用于度量丹麦语(da)、挪威语(nob)、瑞典语(sv)三种近缘语言的语义距离:

实验流程:
1. 准备 150 组三语平行句(Tatoeba 语料)
2. 用 LaBSE 分别编码三个语言的句子 → 768 维向量
3. 计算每对语言的余弦相似度
4. 距离 = 1 - 相似度中位数

实验结果:

语言对 相似度中位数 距离
da-no(丹麦-挪威) 0.9879 0.0121
no-sv(挪威-瑞典) 0.9844 0.0156
da-sv(丹麦-瑞典) 0.9796 0.0204

解读: - da-no 距离最小 → 符合历史语言学事实(挪威书面语源自丹麦语) - 三对距离梯度清晰 → 证明 LaBSE 能捕捉近缘语言的细微差异


适用场景

场景 是否适合 说明
跨语言检索 ✅ 最佳 核心设计目标
跨语言语义相似度 ✅ 最佳 翻译对训练保证
语言距离度量 ✅ 适合 论文实验①验证
平行语料挖掘 ✅ 适合 两堆不同语言句子,算向量相似度,找翻译对
多语言语义搜索 ✅ 适合 用任意语言搜任意语言的库
跨语言去重 ✅ 适合 跨语言重复内容检测
多语言聚类 ✅ 适合 把多语言文本按语义聚类,不按语言分开
单语分类/NER ⚠️ 可用但不推荐 用单语 BERT 更轻量
文本生成 ❌ 不适合 Encoder-only 模型不生成文本

与 SBERT 的区别

维度 SBERT LaBSE
语言 主要是单语(英文为主) 109+ 语言,跨语言
目标 同语言句子相似度 跨语言句子相似度
输出 句向量 句向量
本质 Encoder-only 句向量 Encoder-only 跨语言句向量

一句话:SBERT 是单语句向量模型,LaBSE 是多语言跨语言句向量模型。


概念串联:从词向量到 LaBSE

词向量(Word2Vec):词 → 向量(每个词一个固定向量,不考虑上下文)
  ↓
句向量(Sentence Embedding):句子 → 向量(不是新概念,但要做好很难)
  ↓
BERT:出 token 向量,不直接等于好句向量
  ↓
mBERT:多语言版 BERT,能理解多语言(但句向量按语言聚类)
  ↓
LaBSE:在 mBERT 基础上,专门训成“跨语言句向量器”
       (句向量按意思聚类,不按语言聚类)

相关笔记


📝 创建:2026-09-29

相关笔记