想象你搬进了一个新社区,想快速了解每位邻居的性格和社交圈子。你不会挨家挨户敲门问“你是谁”,而是会站在街角观察:谁经常和老王一起散步?谁总在周末和邻居们聚会?久而久之,你不需要任何人自我介绍,光凭“谁和谁经常一起出现”的规律,就能画出整个社区的社交地图。GloVe(Global Vectors)就是干这件事的——它站在文本这座“城市”的街角,统计每个词和谁“经常同框”,然后从这张巨大的“邻里关系表”中,反推出每个词的含义坐标。 Word2Vec像一位记性很好的街坊,只关注眼前几家邻居(局部窗口);GloVe则像一位拿到全城人口普查数据的统计学家,着眼于整个社区的共现全貌。它把“谁和谁一起出现过多少次”整理成一张巨大的共现矩阵,再通过加权最小二乘的数学方法,把这张表格压缩成每个人(词)在多维空间中的“住址坐标”——这就是词向量。这些向量不仅能捕捉“苹果”和“水果”语义相近,还能让“国王-男人+女人=女王”这样令人惊叹的类比关系成为可能。
对AI从业者而言,GloVe是词嵌入三大经典方法之一,掌握其“全局统计+加权回归”的思想,能帮你为NLP模型选择或训练更优质的词向量,是理解BERT、GPT等预训练模型底层表征的基石。
可视化演示
展示GloVe全局向量的核心原理:共现矩阵模式下可视化词对共现频次的热力图,向量空间模式下展示词向量在2D空间的分布与类比推理关系。
本节配有交互动效(进入视口后自动加载,约 3KB)。
共现矩阵模式 矩阵单元格亮度表示词对共现频次 对角线为自共现值最大 J=Σf(Xij)(wiTvj-logXij)² GloVe利用全局共现统计训练词向量
共现矩阵构建
回到那个邻里街角。你手里拿着一个记录本,每当你看到“老王”和“老李”在同一个场合出现,就在本子上的对应位置划一道。几天下来,本子上就写满了密密麻麻的计数。这个计数表,就是自然语言处理中的共现矩阵(Co-occurrence Matrix)。在GloVe中,这个“场合”就是一个固定大小的窗口——比如取前后各5个词。你不再关注整篇文档,而是看一个词周围的小范围内,其他词出现了多少次。
具体来说,设语料库中共有 \( V \) 个不同的词(就像社区里有 \( V \) 位居民),共现矩阵 \( X \) 是一个 \( V \times V \) 的方阵。\( X_{ij} \) 表示词 \( j \) 在词 \( i \) 的上下文中出现的总次数。GloVe最关键的设计是:这里的窗口是对称的——即“我”出现在“邻居”的窗口中,和“邻居”出现在“我”的窗口中,被视作同一次共现,计数相同。这样 \( X_{ij} = X_{ji} \),矩阵保持对称,就像邻里关系永远是相互的。
实际构建时,矩阵非常稀疏——大多数词对从未一起出现过。就像你不会在记录本上为“水管工老张”和“幼儿园老师小李”的每个组合都计数一样,大部分格子是0。这个稀疏矩阵就是GloVe的全部输入,接下来要做的,就是从这个庞大的计数表中提炼出精华。
- 遍历计数扫描语料中的每一个位置,对每个目标词 \( i \) 检查它的上下文窗口中有没有 \( j \)。
- 窗口判断只有当词 \( j \) 出现在 \( i \) 的左右窗口内才计数,窗口大小通常是 5-10 个词。
- 对称累加因为窗口对称,所以 \( X_{ij} = X_{ji} \),最终得到对称矩阵。
加权最小二乘
现在记录本上的数据有了,可怎么把它变成每个人的“性格坐标”呢?GloVe的创始人想出一个巧妙的办法:为每个词 \( i \) 学习两个向量——一个是它作为中心词时的向量 \( w_i \),一个是它作为上下文词时的向量 \( \tilde{w}_j \)。理想情况下,这两个向量的点积应该能预测出共现次数的对数:
这里 \( b_i \) 和 \( \tilde{b}_j \) 是偏置项,用来吸收单个词本身出现频率高低的影响。为什么要取对数?因为共现次数跨越好几个数量级——“的”和“了”这样的高频词可能共现百万次,而大多数词对只出现几次。取对数就像用地震震级而非地震能量来描述地震,把巨大的数值差异压缩到可操作的范围内。
但这里有个问题:如果对所有词对一视同仁地做回归,“的”“了”“在”这些超高频虚词会主导整个损失函数,就像社区里最爱社交的那几个“社牛”会垄断你的全部注意力。解决办法是引入权重函数 \( f(X_{ij}) \):
权重函数 \( f(x) \) 满足三个性质:\( f(0) = 0 \)(没共现过的不参与训练);随 \( x \) 递增(共现越多的词对越重要);当 \( x \) 很大时封顶(避免高频词过度主导)。论文中推荐的权重函数为 \( f(x) = \min(1, (x / x_{\text{max}})^{3/4}) \),通常取 \( x_{\text{max}} = 100 \)。
这就好比,你观察邻里关系时,对“家家户户都有的日常寒暄”适当降低关注度,而对“特定人群之间的特别往来”多加留意,才能画出真正有区分度的社交地图。
- 预测目标用向量的点积加偏置去逼近共现次数的对数,即 \( w_i \cdot \tilde{w}_j + b_i + \tilde{b}_j \approx \log X_{ij} \)。
- 平方误差真实值与预测值的差取平方,得到惩罚项。
- 加权求和每个词对的误差按 \( f(X_{ij}) \) 加权,高频词对权重封顶,低频词对权重随频率线性增长。
训练与调优
拥有了损失函数,接下来就是老生常谈的优化环节——用随机梯度下降(SGD)来最小化 \( J \)。想象你在山坡上滚一个球,每次只看一小片地形(一个 batch 的词对)来决定往哪个方向滚一点,而不是等看完整个山坡才动一次。因为共现矩阵太庞大了,有几百万行几百万列,但只有不到 1% 的格子非零,所以每次随机抽取那些非零的词对来更新即可。
训练中有几个关键的超参数需要调优。学习率(通常初始为 0.05)控制每次更新的步幅:太大容易跳过最优解,像球滚得太快直接越过山谷;太小则收敛慢,像蜗牛爬坡要跑几百轮。向量维度一般选 100-300 维——这相当于你决定用多少个维度来描述每个邻居的性格,太少难以区分微妙差异,太多则引入噪声且计算昂贵。迭代次数通常 50-100 轮,每轮(epoch)遍历所有非零词对一次。一个实用的技巧是学习率衰减:随着训练进行,逐步减小步幅,让参数在最优解附近精细调整。
训练完成后,每个词会得到两个向量 \( w_i \) 和 \( \tilde{w}_i \),通常取它们的和作为最终的词向量,因为对称窗口下两者地位对等,相加可以综合利用两套参数的信息。最终得到的向量,就是每个词在语义空间中的“住址坐标”。
- 梯度方向损失对 \( w_i \) 的偏导是加权误差乘以 \( \tilde{w}_j \)。
- 参数更新沿负梯度方向移动一小步,步长由学习率 \( \eta \) 控制。
词向量评估
训练出词向量后,怎么知道画出来的这张“社交地图”准不准?GloVe 的评估主要靠三类任务。
词类比(Word Analogy)是最直观的测试:给模型出“国王:男人 = 女王:?”,正确答案是“女人”。用向量运算来实现就是找词 \( d \) 使得 \( \text{vec}(国王) - \text{vec}(男人) + \text{vec}(女王) \) 与 \( \text{vec}(d) \) 的余弦相似度最高。这个测试能直接检验向量是否编码了语义关系——就像确认“老王与老李的关系”和“老张与老赵的关系”是否平行。
词聚类任务把语义相近的词归到一起,比如“苹果”“香蕉”“橙子”应该聚成一簇,“汽车”“卡车”“公交车”形成另一簇。通过聚类纯度(purity)或调整兰德指数(ARI)来量化好坏。
语义相似度评估则准备一组人工打分过的词对(如“快乐-高兴”打高分,“快乐-桌子”打低分),计算模型给出的余弦相似度与人类打分的相关性。相关系数越高,说明向量空间与人类语义直觉越吻合。
这些评估任务就像检验你画的社区地图是否准确的三个标准:平行街道是否真的平行、居民分组是否合理、地图上的距离是否反映真实交往的亲密程度。GloVe 在词类比任务上尤其出色,因为它的共现矩阵天然编码了词与词之间的比值关系(ratio),这正是类比关系的基础。
全局统计优势
为什么放着现成的 Word2Vec 不用,偏要折腾共现矩阵?核心优势在于:GloVe 看到了整个城市,而 Word2Vec 只看到窗口内的几家邻居。
Word2Vec 的 skip-gram 训练时每次只看一个局部窗口,本质上是在做“根据中心词预测周围词”的局部分类任务。虽然在小规模语料上也能学到不错的向量,但它对全局统计信息的利用率较低——每个词对的共现次数本质上是被逐个样本“喂”进去的,同样的信息要重复学很多遍。而 GloVe 一次性统计好整个语料的共现矩阵,再基于这个全局统计做加权回归,相当于直接把“人口普查结果”摆到桌面上。
这个设计带来两个直接好处:
- 训练效率更高:GloVe 只需在非零的共现对上进行迭代,每个词对往往只被访问有限次就能收敛,而 Word2Vec 需要对语料中的每个 token 进行多次采样训练。在同等语料上,GloVe 的训练速度可以快 5-10 倍。
- 小语料上效果更好:在词频统计层面,GloVe 天然对罕见词更友好——只要某两个罕见词恰好共现了几次,这个信息就会进入共现矩阵并被加权利用;而 Word2Vec 的训练受限于采样概率,罕见词的共现信息容易被丢弃。
就像一位洞察全局的社区规划师,GloVe 基于完整的人口流动数据做决策,比只了解自家附近的街坊看得更远、决策更准。
并行训练策略
当语料规模达到几十亿 token 时,共现矩阵动辄包含数十亿个非零元素,单机训练变得不现实。GloVe 的官方实现采用多线程数据并行策略:将共现矩阵按行切分成多块,每个线程独立负责一部分行的词向量更新。但由于向量需要互相影响(词 \( i \) 的更新要用到 \( \tilde{w}_j \)),直接并行会导致写冲突。
解决办法是梯度聚合:每个线程先在本地累积自己负责的参数的梯度,每隔一段时间同步一次,将梯度合并后统一更新所有参数。这就像社区分成几个片区,每个片区的统计员先独立整理各自的记录,然后定期把笔记交到居委会汇总,统一更新全社区的档案。这种“局部计算+定期同步”的模式,让 GloVe 能轻松扩展到百亿规模语料。
另一个并行维度是负采样与过滤:在构建共现矩阵之前,先过滤掉出现次数过少的词(比如少于 5 次),这能把词汇表缩小一个量级,减少矩阵的稀疏度和内存占用。同时,对高频词设置最大共现计数(\( x_{\text{max}} = 100 \)),超过部分按原始次数处理而非归一化,避免极端高频词对拖慢训练。
应用最佳实践
训练好或下载到预训练的 GloVe 向量后,如何在真实 NLP 任务中使用?
预训练加载是最常见的做法。官方提供的 6B/42B/840B token 版本分别对应 60 亿到 840 亿 token 的维基百科、Common Crawl 等语料,向量维度有 50/100/200/300 可选。加载时用 gensim 或 numpy 直接读入,构建词到向量的映射表。
下游微调时,可以把 GloVe 向量作为嵌入层的初始值。如果是分类等小任务,冻结嵌入层不更新;如果是翻译、生成等大任务,让嵌入层参与训练微调,以适配特定领域的语义偏移。一个经验法则是:小数据集冻结、大数据集微调。
未登录词(OOV)处理是工程中必须面对的难题。最常见的策略是:对未知词统一映射到一个 <unk> 向量(取所有词向量的均值或零向量);更进阶的做法是从子词中拆分——把未登录词分成前缀、词根、后缀等片段,用片段向量的组合近似该词的向量。这就像社区里来了个新搬来的住户,你虽然还没见过他,但可以从他开的车、穿的衣服风格大致猜出他的社交圈层。
AI 应用场景
智能客服意图识别中的语义初始化
阶段:模型训练前的词嵌入准备阶段
解决的问题:传统做法用随机初始化向量,词与词之间没有语义关联,训练需要大量标注数据才能学到“申请退款”和“我要退钱”是相同意图。GloVe 预训练向量提供了语义先验知识,让模型在少量样本上快速泛化。
具体案例:某电商平台的智能客服系统接入 42B 版本的 GloVe 300 维向量后,在处理“运费谁出”和“包邮吗”这类表述不同但语义相同的用户问题时,意图识别的准确率从 74% 提升至 87%,而且训练所需标注样本减少约 40%。
文本分类中的特征增强
阶段:特征工程与模型设计
解决的问题:新闻分类、情感分析等任务中,词袋模型丢失语序和语义信息;GloVe 向量作为文本的语义特征,可以拼接 TF-IDF 或直接输入 CNN/注意力模型,在保持词序的同时编码全局语义。
具体案例:某舆情监测公司对微博短文本做情感分析,将每条微博的词语映射到 GloVe 向量后做加权平均作为文本表示,使用简单的逻辑回归分类器,就在金融舆情判断上取得了与 BiLSTM 相当的效果,且推理速度提升 20 倍。
领域词典构建与知识图谱补全
阶段:语义资源建设
解决的问题:在医疗、法律等专业领域,人工构建术语词典耗时费力;GloVe 向量可以通过相似度自动挖掘同义术语和上下位关系,辅助专家审核构建领域本体。
具体案例:某医疗 NLP 团队用大规模医学文献训练 GloVe 向量,通过余弦相似度自动挖掘出“阿司匹林”“乙酰水杨酸”“拜阿司匹灵”等药物同义词,将术语词典构建周期从 3 个月缩短到 2 周。
Python 演示
"""GloVe 核心思想演示:1. 构建共现矩阵(对称窗口)2. 实现加权最小二乘损失函数3. 用梯度下降训练词向量"""import numpy as npfrom collections import Counter def build_cooccurrence(corpus, window_size=2): """构建对称共现矩阵""" vocab = set() for sent in corpus: vocab.update(sent) word2id = {w: i for i, w in enumerate(vocab)} V = len(vocab) co_matrix = np.zeros((V, V), dtype=np.float32) for sent in corpus: n = len(sent) for i, word in enumerate(sent): wid = word2id[word] start = max(0, i - window_size) end = min(n, i + window_size + 1) for j in range(start, end): if j == i: continue cid = word2id[sent[j]] co_matrix[wid][cid] += 1.0 co_matrix[cid][wid] += 1.0 # 对称 return co_matrix, word2id def weight_func(x, xmax=100.0, alpha=0.75): """GloVe 权重函数:低频线性增长,高频截断""" return np.minimum(1.0, (x / xmax) ** alpha) def train_glove(co_matrix, dim=10, epochs=50, lr=0.05): """加权最小二乘训练""" V = co_matrix.shape[0] rng = np.random.default_rng(42) W = rng.normal(0, 0.01, (V, dim)) # 中心词向量 W_tilde = rng.normal(0, 0.01, (V, dim)) # 上下文词向量 b = np.zeros(V) b_tilde = np.zeros(V) rows, cols = np.nonzero(co_matrix) log_X = np.log(co_matrix[rows, cols] + 1.0) f = weight_func(co_matrix[rows, cols]) n_samples = len(rows) for epoch in range(epochs): idx = rng.permutation(n_samples) for k in idx: i, j, x_ij = rows[k], cols[k], log_X[k] w_ij = f[k] diff = np.dot(W[i], W_tilde[j]) + b[i] + b_tilde[j] - x_ij grad_w = w_ij * diff * W_tilde[j] grad_wt = w_ij * diff * W[i] W[i] -= lr * grad_w W_tilde[j] -= lr * grad_wt b[i] -= lr * w_ij * diff b_tilde[j] -= lr * w_ij * diff return W + W_tilde if __name__ == "__main__": corpus = [ ["the", "cat", "sat", "on", "the", "mat"], ["the", "dog", "sat", "on", "the", "rug"], ["cat", "and", "dog", "are", "friends"], ["i", "love", "my", "cat"], ["my", "dog", "is", "cute"], ] co_matrix, word2id = build_cooccurrence(corpus) vectors = train_glove(co_matrix, dim=5, epochs=100, lr=0.05) w1 = vectors[word2id["cat"]] w2 = vectors[word2id["dog"]] w3 = vectors[word2id["mat"]] def cos_sim(a, b): return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b)) print("词表:", list(word2id.keys())) print("cat-dog 相似度:", round(cos_sim(w1, w2), 4)) print("cat-mat 相似度:", round(cos_sim(w1, w3), 4)) print("训练完成,共", len(word2id), "个词的向量已生成")
co_matrix[wid][cid] += 1.0` 与 `co_matrix[cid][wid] += 1.0对称窗口的核心:双向计数,保证矩阵对称。np.minimum(1.0, (x / xmax) ** alpha)实现权重函数,低频共现对线性加权,高频封顶避免主导。diff = np.dot(W[i], W_tilde[j]) + b[i] + b_tilde[j] - x_ij计算预测值与真实对数共现次数的误差,是梯度下降的起点。W[i] -= lr * grad_w更新中心词向量,沿着负梯度方向移动。W + W_tilde最终向量取两者之和,综合利用中心词与上下文词的表示。
常见误区
误区GloVe 就是把共现矩阵做 SVD 降维得到词向量,和 LSA 没区别。
正解GloVe 不是对共现矩阵直接做矩阵分解,而是用加权最小二乘训练目标进行优化。它显式设计了独立的权重函数来控制高频词的影响,且“向量点积 + 偏置”的目标形式是专门为“共现比值的对数”设计的。虽然公式看起来像矩阵分解,但训练方法是随机梯度下降,本质上是预测性模型而非纯分解性模型。区别就像一个是直接用测绘图(SVD),一个则是根据测绘数据反推城市规划原理(GloVe)。
为何常见:GloVe 的数学公式 \( w_i \cdot \tilde{w}_j \approx \log X_{ij} \) 看起来很像矩阵分解的目标,容易让初学者混淆。
误区既然 GloVe 用了全局统计,那在所有任务上肯定比 Word2Vec 更好。
正解实验结果因任务而异。在词语类比、命名实体识别等任务上 GloVe 通常表现更好;但在句法相似性任务上,Word2Vec 可能更优。选择哪种算法取决于下游任务的性质和语料规模。全局统计捕捉语义关系更出色,局部上下文对句法角色更敏感。这就像全局地图适合规划城市交通,但本地路况播报更适合老司机。
为何常见:“用了全局信息肯定更好”的直觉似乎很合理,但忽略了不同任务对语义/句法信息的需求不同。
误区把向量维度设成 1000 甚至更大,能捕捉更多语义信息。
正解维度增加到一定程度后收益递减。语言本身蕴含的信息量有限,过高的维度不仅带来计算开销,还容易导致过拟合——模型记住了共现矩阵中的噪声而非真实语义。常用经验值是 100-300 维。就像用 8K 相机拍一张证件照,多余的分辨率只会让照片文件变大,不会让脸看得更清楚。
为何常见:机器学习中“更多特征往往更好”的直觉容易让人误加维度。
误区预训练的 GloVe 向量是万能的,直接加载用就好,不需要微调。
正解预训练向量所在的语义空间与你的任务领域可能有偏差。比如通用语料中“苹果”更倾向于水果义项,而在手机领域它指品牌。正确做法是:将 GloVe 作为嵌入层初始值,在小任务上冻结、在大任务上微调。必要时在自己的领域语料上重新训练或继续训练(fine-tune)。
为何常见:预训练模型“开箱即用”的说法流行,但忽略了分布偏移问题。
误区GloVe 模型能根据上下文理解“苹果好吃”和“苹果手机贵”的区别。
正解GloVe 生成的是静态词向量——每个词只有一个固定向量,不随上下文变化。“苹果”的向量不管出现在哪句话中都是一样的,无法区分多个义项。ELMo、BERT 等上下文相关模型才解决了这个问题。GloVe 更像一张照片,而 BERT 是一段视频,照片里你只有一个表情,视频才能捕捉到情绪的流动。
为何常见:word2vec 和 GloVe 的效果过于惊艳,容易让人高估它们的能力边界。
面试题
Q1. GloVe 的核心输入是什么?
- A.词频统计表
- B.共现矩阵← 正确答案
- C.词的TF-IDF值
- D.词性标注序列
答案:B。GloVe 的输入是词与词在固定窗口内共同出现的次数矩阵,即共现矩阵。词频统计表只有单个词的频率信息,无法捕捉词间关系;TF-IDF 和词性标注都不是 GloVe 的输入。这与社区街角记录“谁和谁总是一起出现”是一样的道理。
Q2. GloVe 的损失函数属于哪种类型?
- A.最大似然估计
- B.交叉熵损失
- C.加权最小二乘← 正确答案
- D.对比损失函数
答案:C。GloVe 的损失函数是加权平方误差形式,通过权重函数 \( f(X_{ij}) \) 对不同词对进行加权。它不涉及概率分布的交叉熵,也不用“正样本-负样本”的对比方式。就像用加权平均法综合邻里关系调查结果,不是做分类选择题。
Q3. 为什么 GloVe 的权重函数要对高频词对设置封顶?
- A.减少计算量提高速度
- B.防止高频词对主导训练← 正确答案
- C.避免共现矩阵过大
- D.让低频词获得更高权重
答案:B。像“的”“在”等高频词与任何词都有大量共现,如果不封顶,这些词对的误差会淹没大多数中低频词对的学习信号。封顶后每个词对的权重不超过 1,让中频词对也能有效参与训练。这就像限制“社牛”邻居的曝光率,才能了解到更多普通居民的情况。
Q4. GloVe 训练完成后,最终词向量取哪两个向量之和?
- A.中心词向量和偏置项
- B.上下文词向量和偏置项
- C.中心词向量和上下文词向量← 正确答案
- D.两个偏置项之和
答案:C。GloVe 为每个词学习两个向量:作为中心词的 \( w_i \) 和作为上下文的 \( \tilde{w}_i \)。由于对称窗口下两者地位对等,最终取两者之和作为词向量,能综合利用两套参数的信息。这与社区中一个人既可以是“观察者”也是“被观察者”,两种身份的信息合起来才完整一样。
Q5. 以下哪些是 GloVe 相比 Word2Vec 的优势?
- A.更充分利用全局统计信息← 正确答案
- B.在小语料上表现更好← 正确答案
- C.训练速度通常更快← 正确答案
- D.支持多义词区分
答案:ABC。GloVe 一次性统计全语料共现信息,比 Word2Vec 逐窗口采样更高效,在同等语料上训练更快,对小语料的利用也更好。但两者都是静态词向量,都无法解决多义词问题(BERT 等模型才支持区分多义词),所以 D 错误。
Q6. GloVe 中为什么要对共现次数取对数?
- A.让数据更稀疏
- B.压缩数值范围便于回归← 正确答案
- C.让权重函数更平滑
- D.减少矩阵存储空间
答案:B。共现次数跨越多个数量级(高频词对可能百万次,多数词对仅几次),直接回归会让巨大数值主导训练。取对数后用“数量级”而非“具体值”做预测目标,就像用地震震级(对数刻度)而非地震能量来描述地震强度。
Q7. 以下哪个任务可以检验词向量的类比推理能力?
- A.词性标注
- B.词类比任务(如“国王-男人+女王=?”)← 正确答案
- C.依存句法分析
- D.语言模型困惑度
答案:B。词类比任务通过向量运算 \( \vec{国王} - \vec{男人} + \vec{女王} \approx \vec{女人} \) 检验向量是否编码了语义关系。词性标注、句法分析检验的是句法结构信息,语言模型困惑度衡量的是预测能力而非向量语义质量。
Q8. 处理未登录词(OOV)的常见策略有?
- A.映射到统一的 <unk> 向量← 正确答案
- B.用子词片段向量组合近似← 正确答案
- C.忽略该词不参与计算
- D.用全部词向量的均值替代← 正确答案
答案:ABD。常见的 OOV 处理方案包括:映射到特殊标记 <unk>(选项 A)、从子词组合出向量(选项 B)、用全词向量均值作为替身(选项 D)。选项 C “忽略该词”意味着丢失信息,在某些任务中完全不可行,不是推荐策略。
Q9. GloVe 的权重函数 \( f(x) = (x/100)^{3/4} \) 在 x 趋近于 0 时的行为是?
- A.f(x) 趋近于无穷
- B.f(x) 趋近于 0← 正确答案
- C.f(x) 保持为 1
- D.f(x) 无定义
答案:B。当 \( x \to 0 \) 时,\( (x/100)^{3/4} \to 0 \)。这保证了没有共现过的词对(\( X_{ij} = 0 \))权重为 0,不参与训练,从而避免了 log(0) 的数值问题,也符合直觉——没见过面的邻居没必要强行画像。
Q10. 关于 GloVe 的并行训练,以下说法正确的有?
- A.共现矩阵按行切分给不同线程← 正确答案
- B.各线程独立更新参数无需同步
- C.梯度定期聚合保证一致性← 正确答案
- D.过滤低频词可减少内存占用← 正确答案
答案:ACD。GloVe 的并行策略是将共现矩阵分块,各线程处理不同行,但梯度需要定期同步(存在重叠词,直接独立更新会冲突),因此 B 错。过滤低频词能显著缩小矩阵规模和稀疏度,是官方实现中的标准做法。