GloVe
经典词向量算法,用全局共现统计让机器理解词语间的语义距离
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
经典词向量算法,用全局共现统计让机器理解词语间的语义距离
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
当我们说"frog"(青蛙)这个词时,人类的脑海中会立刻浮现出绿皮大眼睛的小生物形象——这是几亿年进化和日常生活共同塑造的认知。但对计算机来说,"frog"不过是一串ASCII字符。要让机器真正理解词语的含义,斯坦福大学NLP团队在2014年发表了一个经典算法:GloVe(Global Vectors for Word Representation)。
想象一座城市,每个词语都是城市中的一个地点,而词向量就是这些地点的坐标。意思相近的词语在地图上彼此靠近——"king"和"queen"相距不远,"apple"(水果)和"orange"是邻居,但"apple"(水果)和"Apple"(公司)则分布在城市的两端。这就是词向量的本质:用数学坐标来表示词语的语义关系。

图1:GloVe词向量的最近邻——frog一词的语义邻居全部是青蛙的不同科属(Litoria、Leptodactylidae、Rana等)
GloVe由Jeffrey Pennington、Richard Socher和Christopher D. Manning(斯坦福大学计算机科学系)共同提出,发表于2014年EMNLP会议。在word2vec已经占据词向量领域主导地位的背景下,GloVe创新性地将全局矩阵分解与局部上下文窗口两种方法统一起来,通过词共现矩阵来学习词表示——这让GloVe在很多任务上取得了更优效果。
2025年7月,斯坦福NLP团队发布了GloVe 2024新版词向量(arXiv:2507.18103),由Riley Carlson、John Bauer和Christopher D. Manning训练,包含:
新版词向量在词汇覆盖、语义相关性上全面超越2014版,尤其在非西方新闻语料NER任务上有显著提升。
GloVe的核心是一套用C语言实现的命令行工具链,包含四个程序,构成了完整的词向量训练流程:
第一步:vocab_count — 词频统计。对输入语料进行分词后,统计每个词的频率,构建词汇表。可以通过-min-count参数过滤低频词。
第二步:cooccur — 共现矩阵构建。扫描语料中词语周围的上下文窗口(默认窗口大小15),统计每对词语共同出现的次数,构建词共现矩阵。这是GloVe区别于word2vec的关键——它利用的是全语料的全局统计信息。
第三步:shuffle — 矩阵打乱。对共现矩阵的二进制文件进行高效打乱,为后续随机梯度下降训练做准备。对于大文件,系统会自动分块处理。
第四步:glove — 模型训练。使用加权最小二乘回归训练GloVe模型,学习最终的词向量表示。
整个流程可通过demo.sh一键执行,它会自动下载100MB Wikipedia语料(text8),完成从原始文本到词向量的完整训练过程。

图2:GloVe词向量几何——man与woman的语义关系,和king与queen的关系高度平行;城市与邮编的语义映射同样精准
仓库提供了完整的Python评测工具:
eval/python/distance.py:给定一个词语,找出向量空间中距离最近的N个词。这是检验词向量质量的最直观方式。eval/python/word_analogy.py:著名的"king - man + woman = queen"类比测试。通过向量运算检验模型对语义和语法关系的捕获能力。评测目录包含9个语法测试集,覆盖形容词到副词、比较级到最高级、国家到国民语言等英语语法形态变化。GloVe是一个纯命令行工具,没有任何Web界面。使用门槛主要在于:
如果只需要使用预训练好的词向量(最常见的使用方式),直接从HuggingFace下载对应维度文件即可,完全不需要编译源码:
import gensim.downloader
glove_vectors = gensim.downloader.load('glove-wiki-gigaword-300')
GloVe是NLP领域引用量最高的开源项目之一,7220+ GitHub Stars背后是8年以上的持续使用。BERT、GPT等预训练语言模型虽然在很多任务上取代了静态词向量,但GloVe的思想(利用全局共现统计)深刻影响了后续的Embedding研究。2024新版词向量的发布证明了这一方向仍有生命力——随着语言的变化(旧词消亡、新词涌现),词向量模型也需要持续更新。