资讯动态

GloVe 词向量训练与使用完全指南:从预训练向量下载到自定义语料训练与评估

发布时间:2026/10/15 17:27:14 来源:尧图企业网站定制
NLP机器学习【免费下载链接】GloVeSoftware in C and data files for the popular GloVe model for distributed word representations, a.k.a. word vectors or embeddings项目地址https://gitcode.com/gh_mirrors/gl/GloVe点击查看免费下载本指南以 GloVeGlobal Vectors for Word Representation开源仓库的 README.md 为骨架系统讲解下载预训练词向量与在自定义语料上从零训练两条完整路径前者覆盖 2024 年新增的 5 套向量与经典 Web 语料向量后者深入vocab_count → cooccur → shuffle → glove四步 C 工具流水线的全部参数与底层实现。读完本文你将能够复现 demo.sh 的端到端训练流程、按需配置大语料训练脚本、解读词向量输出格式并用仓库自带的类比评测脚本验证向量质量。一、GloVe 是什么基于全局共现统计的词向量模型GloVe 通过矩阵分解的思想学习词表示它不依赖局部的滑动窗口预测任务如 word2vec 的 CBOW/Skip-gram而是直接对词-词共现矩阵建模让词向量捕获全局统计信息。模型名字Global Vectors即点明这一特点——词向量由全语料的共现统计共同塑造而非单个上下文窗口。README 开头的表格直观展示了训练完成后的两个典型能力最近邻语义frog青蛙的最近邻向量是Litoria、Leptodactylidae、Rana、Eleutherodactylus等蛙类物种名说明向量空间按语义聚类线性类比几何man → woman、city → zip城市→邮编、comparative → superlative比较级→最高级均呈现稳定的向量平移关系这正是后续基于向量加减法做词类比评测的基础。本仓库提供该模型的完整 C 实现、预训练向量发布物与配套评测工具。更详细的算法原理可参见项目主页与论文README 中给出的项目资料本仓库则聚焦于工程实现。二、直接使用下载预训练词向量如果只是想在下游 NLP 任务中使用词向量而不关心训练过程直接下载预训练向量即可。README 明确指出面向海量 Web 语料训练的向量只需下载对应文本文件即可使用。所有预训练向量的下载链接均列在仓库根目录 README.md 中。2.1 2024 年新增向量NEW 2024 VECTORS仓库于 2024 年重新训练并发布了一批新向量覆盖 5 个规格向量文件训练语料Token 规模词表大小大小写维度下载体积glove.2024.dolma.300dDolma220B tokens1.2Muncased300d约 1.6 GBglove.2024.wikigiga.300dWikipedia Gigaword 511.9B tokens1.2Muncased300d约 1.6 GBglove.2024.wikigiga.200dWikipedia Gigaword 511.9B tokens1.2Muncased200d约 1.1 GBglove.2024.wikigiga.100dWikipedia Gigaword 511.9B tokens1.2Muncased100d约 560 MBglove.2024.wikigiga.50dWikipedia Gigaword 511.9B tokens1.2Muncased50d约 290 MB这批向量的训练脚本与数据预处理管线记录在 Training_README.md 中详见本文第七节配套的分析与文档说明见 README 中引用的技术报告。2.2 经典 Web 语料向量除了 2024 新向量README 还提供沿用多年的经典向量向量文件训练语料Token 规模词表大小大小写维度下载体积glove.42B.300dCommon Crawl42B tokens1.9Muncased300d约 1.75 GBglove.840B.300dCommon Crawl840B tokens2.2Mcased300d约 2.03 GBglove.6BWikipedia 2014 Gigaword 56B tokens400Kuncased300d约 822 MBglove.twitter.27BTwitter2B 条推文27B tokens1.2Muncased200d约 1.42 GB这些向量以Public Domain Dedication and License公有领域奉献协议发布可自由使用。选择建议追求最新语料与词表覆盖度选 2024 系列需要超大 Web 语料覆盖选 Common Crawl 840B中英文通用场景可先试 glove.6B体积适中、社区兼容性最好社交网络文本场景选 Twitter 版本。三、快速上手编译与端到端 demo如果现有预训练向量不符合业务语料的语义分布就需要在自己的语料上训练。README 给出的最快路径是三行命令$ git clone https://gitcode.com/gh_mirrors/gl/GloVe.git $ cd GloVe make $ ./demo.sh执行前需确认以下前置依赖README 明确列出GNU Make驱动 Makefile 的构建流程GCCC 编译器Clang 伪装成 GCC 也可以Python 与 NumPy用于跑词类比评测脚本。3.1 Makefile 构建细节make会在build/目录下编译出 4 个可执行文件vocab_count、cooccur、shuffle、glove。构建参数见 Makefile默认CC gccCFLAGS -pthread -O3 -marchnative -funroll-loops -Wall -Wextra -Wpedantic文件顶部注释中保留了-Ofast的备选方案并特别警告-Ofast会开启-ffinite-math-only使程序中的 NaN/Inf 检查永远返回 false因此默认不使用以保证训练过程中的数值安全检测有效Makefile 会自动检测 Apple SiliconDarwin arm64并为非 Apple Silicon 平台附加-marchnativeApple 自带的 clang 不支持该选项四个二进制均链接src/common.o公共代码来自 src/common.c 与 src/common.h。3.2 demo.sh 做了什么demo.sh 是官方示例脚本set -e保证任一步失败即退出完整演示了下载语料 → 构建词表 → 统计共现 → 打乱 → 训练 → 评测的全流程下载语料若当前目录没有text8则下载 text8.zip 并解压。text8 是维基百科前 100M 字符的样本语料README 原文描述作为小型演示语料构建词表vocab_count -min-count 5 -verbose 2 text8 vocab.txt统计共现cooccur -memory 4.0 -vocab-file vocab.txt -verbose 2 -window-size 15 text8 cooccurrence.bin打乱共现shuffle -memory 4.0 -verbose 2 cooccurrence.bin cooccurrence.shuf.bin训练glove -save-file vectors -threads 8 -input-file cooccurrence.shuf.bin -x-max 10 -iter 15 -vector-size 50 -binary 2 -vocab-file vocab.txt -verbose 2评测默认调用python eval/python/evaluate.py也可传参指定评测后端——./demo.sh matlab或./demo.sh octave分别使用 eval/matlab/read_and_evaluate.m 与 eval/octave/read_and_evaluate_octave.m。关于自定义语料的完整说明可进一步阅读 demo.sh 与 src/README.md。四、在自定义语料上训练四步工具流水线src/README.md 明确了训练自建 GloVe 向量的语料格式要求与四步流水线语料格式要求将语料整理为单个文本文件所有词之间用空格或 Tab 分隔若语料包含多篇文档文档之间用换行符分隔——共现上下文不会跨越换行符该约束在 src/common.c 的get_word()中实现遇到\n视为文档结束标记返回 1。注意vocab_count要求输入语料已按空白切分为 token原始文本需先经分词器处理如 Stanford Tokenizer。4.1 工具 1vocab_count —— 统计 unigram 频次从语料构建 unigram 词频统计可选地按词表总大小或最小频次截断词表。实现见 src/vocab_count.c。命令行参数源码main()中解析参数含义默认值-verbose int输出详细程度0、1 或 22-max-vocab int词表大小上限保留最频繁的int个词超出时低频词被随机采样以保证词在字母表上均匀分布源码先用无平局排序截断再按频率字母序排序0不限制-min-count int频次低于int的词被丢弃1实现要点src/vocab_count.cget_counts()用哈希表统计 token 频次遇到unk会报错并提示先用sed -e s/unk/raw_unk/g替换统计完成后按频次降序排序并按-max-vocab/-min-count截断输出形如word count两列文本到标准输出。4.2 工具 2cooccur —— 统计词-词共现从语料构建词-词共现统计输入是vocab_count产出的词表文件。实现见 src/cooccur.c。命令行参数源码main()中解析参数含义默认值-verbose int0、1、2默认或 32-symmetric int0 只使用左侧上下文1 左右上下文都用1-window-size int上下文窗口大小左侧及右侧各取多少个词15-vocab-file file词表文件vocab_count产物vocab.txt-memory float内存软限制GB基于简单启发式估算并不十分精确4.0-max-product int稠密共现数组大小上限即两词频次乘积的最大值覆盖-memory的自动估算通常仅超大语料需要调整自动估算-overflow-length int稀疏溢出缓冲区的长度上限缓冲区存满后落盘覆盖-memory估算自动估算-overflow-file file临时文件前缀不含扩展名overflow-distance-weighting int0 共现计数不按距离加权1 按词距的倒数加权1实现要点内存管理src/cooccur.c-memory通过迭代求解n * (log(n) 0.1544313298)估算max_product并令overflow_length ≈ rlimit/6从而在稠密数组bigram_table与稀疏溢出缓冲之间分配内存加权共现src/cooccur.c距离加权时每个共现计数的贡献为1.0/(j-k)j-k 为词距对称模式下还会交换两个词的角色等价于同时统计右上下文稀疏记录处理频次乘积过大的词对存进溢出缓冲缓冲满后排序并写临时文件overflow_XXXX.bin最后通过多路归并priority queue合并去重src/cooccur.c。4.3 工具 3shuffle —— 打乱共现数据cooccur输出的共现记录按词对排序而随机梯度下降SGD需要随机顺序因此必须打乱。实现见 src/shuffle.c。命令行参数源码main()中解析参数含义默认值-verbose int0、1 或 22-memory float内存软限制GB4.0-array-size int分块打乱缓冲长度覆盖-memory的自动估算自动估算-temp-file file临时文件前缀temp_shuffle-seed int随机种子不设置则按当前时间随机化按时间实现要点大文件按块处理——缓冲区填满后先做 Fisher-Yates 洗牌src/shuffle.c写入临时文件最后把各临时文件分段读入再混合洗牌输出shuffle_merge()。-memory与缓冲区大小的换算见 src/shuffle.carray_size 0.95 * memory * 1GB / sizeof(CREC)。4.4 工具 4glove —— 训练词向量在shuffle打乱后的共现数据上训练 GloVe 模型。这是四步流水线的核心实现见 src/glove.c训练入口为train_glove()src/glove.c。命令行参数源码main()中解析完整清单见 src/glove.c 的 usage 输出参数含义默认值-verbose int0、1 或 22-write-header int1 在输出首行写入vocab_size vector_size供 gensim 等库直接加载0 不写0-vector-size int词向量维度不含 bias 项50-threads int训练线程数pthreads8-iter int完整遍历共现矩阵的轮数25-eta float初始学习率0.05-alpha float加权函数的指数参数0.75-x-max float加权函数的截断值100.0-grad-clip float梯度分量裁剪裁剪到[-grad-clip, grad-clip]100.0-binary int输出格式0 文本、1 二进制、2 两者都输出0-model int文本输出的向量内容0 词向量上下文向量偏置全量1 仅词向量无偏置2 词向量上下文词向量无偏置3 词向量与上下文向量按行拼接2-input-file file打乱后的共现二进制输入cooccurshuffle产物cooccurrence.shuf.bin-vocab-file file词表文件vocab_count产物vocab.txt-save-file file输出文件名前缀不含扩展名vectors-gradsq-file file累积梯度平方输出文件名前缀gradsq-save-gradsq int是否保存累积梯度平方指定-gradsq-file时自动开启0关闭-checkpoint-every int每隔int轮保存一次模型检查点0关闭-load-init-param int是否从-init-param-file加载初始参数0-save-init-param int是否在训练前保存初始参数即第 0 轮检查点0-init-param-file file初始参数二进制文件vectors.000.bin-load-init-gradsq int是否加载初始累积梯度平方0-init-gradsq-file file初始梯度平方二进制文件gradsq.000.bin-seed int随机种子不设置则按当前时间随机化按时间训练核心原理glove_thread()src/glove.c参数布局词向量、上下文词向量与各自的 bias 存储在一个连续数组W中大小2 * vocab_size * (vector_size 1)上下文词向量通过偏移vocab_size索引src/glove.c。初始化时参数取(rand()/RAND_MAX - 0.5) / vector_size的均匀随机值src/glove.c损失计算src/glove.c对每条共现记录(word1, word2, val)先计算词向量内积与 log 共现值的残差diff dot b1 b2 - log(val)再用加权函数fdiff (val x_max) ? diff : pow(val/x_max, alpha) * diff缩放得到带权平方损失0.5 * fdiff * diff自适应梯度更新src/glove.c采用 AdaGrad 风格的按维累积梯度平方gradsq更新量temp clip(fdiff * 对侧向量) * eta / sqrt(gradsq)并同步累积gradsq temp^2梯度分量先裁剪到[-grad-clip, grad-clip]并行每轮迭代把共现矩阵按行数均分给num_threads个线程fseeko定位分片起点采用无锁异步 SGD每轮结束后汇总各线程 cost 并输出iter: 00X, cost: ...src/glove.c数值安全check_nan()会捕获 NaN/Inf 更新并跳过src/glove.c这也是 Makefile 刻意避开-Ofast的原因。五、词向量输出格式与 gensim 兼容glove的最终输出由-binary与-model两个参数共同决定实现见 src/glove.c 的save_params()文本格式-binary 0或 2每行一个词格式为词 token 后接 vector_size 个浮点数词向量默认取词向量 上下文词向量之和model 2这是社区通用的 GloVe 文本格式二进制格式-binary 1或 2保存全部2 * vocab_size * (vector_size 1)个参数词向量、上下文向量及 bias文件后缀.bin可用于-load-init-param断点续训写 header-write-header 1在文本文件首行写入vocab_size vector_size使 gensim 等库可以直接KeyedVectors.load_word2vec_format(file, no_headerFalse)加载unk向量当use_unk_vec1默认时输出文件末尾会自动追加一行unk其向量为词表中最后 100 个不足 100 则取全部稀有词向量的均值src/glove.c用于兜底 OOV 词。检查点机制-checkpoint-every N会在每 N 轮保存save-file.00N.txt/.bin中间结果配合-load-init-param与-load-init-gradsq可实现中断续训。六、训练质量验证词类比评测demo 流程的最后一步是运行评测脚本验证词向量的类比推理质量。默认 Python 实现位于 eval/python/evaluate.py。6.1 评测原理evaluate.py 会读取vocab.txt与vectors.txt将词向量归一化到单位长度然后在 eval/question-data 目录的 14 个类比测试集上计算 Top-1 准确率。每个测试行包含 4 个词a b c d语义为a 之于 b如同 c 之于 d预测时计算pred_vec b - a c在全词表中用余弦相似度归一化后等价于点积找最近邻排除 a、b、c 自身作为预测词与正确答案 d 比对eval/python/evaluate.py。14 个测试集分为两组语义类比前 5 个capital-common-countries首都-国家、capital-world、currency国家-货币、city-in-state城市-州、family家庭关系句法类比后 9 个gram1-adjective-to-adverb、gram2-opposite、gram3-comparative、gram4-superlative、gram5-present-participle、gram6-nationality-adjective、gram7-past-tense、gram8-plural、gram9-plural-verbs。输出逐文件ACCURACY TOP1并汇总Semantic accuracy、Syntactic accuracy与Total accuracy。脚本对每个文件按 100 条一批切分计算以避免内存溢出。6.2 交互式探索工具eval/python/word_analogy.py交互式输入 3 个词如man woman king返回最接近woman - man king的 Top-100 词及余弦距离eval/python/distance.py交互式输入一个词或一句话返回余弦相似度最近的 Top-100 词用于快速检查向量空间的局部语义MATLAB/Octave 用户可使用 eval/matlab/ 与 eval/octave/ 下的等价脚本。七、复现 2024 向量官方训练脚本解读Training_README.md 记录了 2024 年 5 套向量的完整训练配方是面向大规模语料训练的权威参数参考。7.1 数据下载与预处理Wikipedia 部分使用 2024 年 7 月 22 日的 dump经 Wikiextractor 提取纯文本python -m wikiextractor.WikiExtractor ... --no-templates --output output_dir/Gigaword 部分使用第五版 GigawordDolma 部分使用 Dolma v1.6取 5% Common Crawl、40% C4、100% Reddit、100% Project Gutenberg分词使用 Stanford 的 Stanza tokenizer4.4.1 版等价于 PTBTokenizer 命令edu.stanford.nlp.process.PTBTokenizer -preserveLines -lowerCase -options untokenizableallKeep保留空行、转小写、不可分词内容全部保留语料配比合并 Wikipedia 与 Gigaword 时Gigaword 数据被加入两次以平衡 Wikipedia 相对旧语料的数据增量。7.2 训练脚本模板官方使用的 bash 脚本变量如下对应上一节四个工具的参数映射CORPUSwikigiga, dolma VOCAB_FILEvocab.txt COOCCURRENCE_FILEcooccurrence.bin COOCCURRENCE_SHUF_FILEcooccurrence.shuf.bin BUILDDIRbuild SAVE_FILEvectors.txt OVERFLOW_FILEoverflow VERBOSE2 MEMORY4.0 VOCAB_MIN_COUNT20 VECTOR_SIZE50, 100, 200, 300 MAX_ITER50,100 WINDOW_SIZE10 BINARY2 NUM_THREADS8 X_MAX10 SEED123, 2024 ALPHA0.75 ETA0.05, 0.075 $BUILDDIR/vocab_count -min-count $VOCAB_MIN_COUNT -verbose $VERBOSE $CORPUS $VOCAB_FILE $BUILDDIR/cooccur -memory $MEMORY -overflow-file $OVERFLOW_FILE -vocab-file $VOCAB_FILE -verbose $VERBOSE -window-size $WINDOW_SIZE $CORPUS $COOCCURRENCE_FILE $BUILDDIR/shuffle -memory $MEMORY -seed $SEED -verbose $VERBOSE $COOCCURRENCE_FILE $COOCCURRENCE_SHUF_FILE $BUILDDIR/glove -eta $ETA -alpha $ALPHA -save-file $SAVE_FILE -threads $NUM_THREADS -input-file $COOCCURRENCE_SHUF_FILE -x-max $X_MAX -iter $MAX_ITER -vector-size $VECTOR_SIZE -binary $BINARY -vocab-file $VOCAB_FILE -verbose $VERBOSE -seed $SEED -checkpoint-every 107.3 关键差异说明词表规模Dolma 通过向vocab_count传-max-vocab标志把词表上限限制为 1.2M随机种子Wiki Giga 50d 使用随机种子 123、学习率 0.075其余所有向量使用种子 2024、学习率 0.05超参数组合VOCAB_MIN_COUNT20、WINDOW_SIZE10、X_MAX10、ALPHA0.75、MEMORY4.0、NUM_THREADS8、BINARY2文本二进制双输出、MAX_ITER取 50 或 100训练过程每 10 轮保存检查点。对比 demo.sh 的小语料配置VOCAB_MIN_COUNT5、WINDOW_SIZE15、VECTOR_SIZE50、MAX_ITER15、X_MAX10可以看出大语料倾向于收紧最小词频20 vs 5、减小窗口10 vs 15并显式固定-seed保证可复现。八、可复现性与随机种子控制shuffle与glove都支持-seed参数不设置时按当前时间随机化。仓库自带的 randomization.test.sh 是验证随机可控性的自动化测试脚本覆盖以下断言shuffle 的种子控制相同种子产出完全相同的打乱结果不同种子结果不同cmp逐字节比对二进制输出glove 的种子控制相同种子 单线程-threads 1多线程返回顺序不受控故必须单线程产出相同向量不同种子结果不同参数/梯度断点续训-save-init-param-load-init-param组合可保存并加载初始参数-load-init-gradsq配合-checkpoint-every保存的.bin检查点可将训练精确续接到任意轮次脚本对 2、4、6 轮结果逐一比对验证。这意味着只要固定语料、-seed、-threads 1训练结果完全可复现适合实验对照与审计。九、许可证仓库内全部内容以 Apache License, Version 2.0 授权详见 LICENSE 文件。预训练词向量本身则以公有领域奉献协议Public Domain Dedication and License发布两者在使用与分发上有不同约定落地前请分别确认。结语从下载即用到自建语料四步训练再到 2024 大语料配方的复现GloVe 仓库提供了一条完整的词向量生产链路。核心要点可归纳为语料须按空白分词且文档间以换行分隔cooccur的-memory/-symmetric/-window-size决定共现统计的质量与内存占用glove的-x-max/-alpha/-eta/-vector-size主导训练效果训练后务必用evaluate.py的语义/句法准确率做质量验收。更深入的算法细节与最新向量分析可继续阅读 src/README.md、Training_README.md 及各工具源码 src/glove.c、src/cooccur.c、src/shuffle.c、src/vocab_count.c。赞分享NLP机器学习【免费下载链接】GloVeSoftware in C and data files for the popular GloVe model for distributed word representations, a.k.a. word vectors or embeddings项目地址https://gitcode.com/gh_mirrors/gl/GloVe点击查看免费下载相关推荐nlp-recipes 仓库中的 GloVe从预训练词向量下载到自建语料训练的完整指南nlp recipes 仓库中的 GloVe从预训练词向量下载到自建语料训练的完整指南 GloVeGlobal Vectors for Word RepreNLPnlp-recipes 中的 GloVe 训练工具链从语料预处理到词向量训练的完整实战指南nlp recipes 中的 GloVe 训练工具链从语料预处理到词向量训练的完整实战指南 导读 本篇文章以 nlp recipes 仓库内 utils_nlNLP20分钟精通GloVe从词向量训练到语义分析完整指南你是否曾经困惑于如何让计算机真正理解词语的含义在自然语言处理的世界里词向量正是连接人类语言与机器理解的桥梁。GloVeGlobal Vectors forNLP机器学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑