wevi 批量训练技巧:20/100/500 步迭代如何一步步重塑词向量分布
【免费下载链接】weviWord Embedding Visual Inspector项目地址: https://gitcode.com/gh_mirrors/we/wevi
wevi(Word Embedding Visual Inspector)是一款开源词向量可视化检查工具,它把 word2vec 的训练过程搬进浏览器,让你亲眼看到词向量分布如何被一步步重塑。这篇文章聚焦 wevi 批量训练技巧,带你掌握 20、100、500 步迭代三个档位的用法,看懂词向量分布从散乱到聚类的全过程,全程零代码、零配置。
📌 本文面向零基础新手,不需要任何编程经验,跟着鼠标点击就能完成全部实验。
wevi 是什么:词向量分布教学神器
wevi 全称 Word Embedding Visual Inspector(词向量可视化检查器),是一个纯前端开源项目:不需要安装 Python、不需要配置任何环境,用 Chrome 打开项目里的 index.html 就能运行。它的核心价值在于把抽象的"词向量训练"变成肉眼可见的实时动画,三大可视化面板各司其职:
- 🧠神经网络结构图:左侧输入层、中间隐藏层、右侧输出层,词语被点亮时相关连线同步高亮;
- 🌡️权重矩阵热力图:Input Vector 与 Output Vector 两张矩阵,颜色深浅代表权重大小,随训练实时变化;
- 📊词向量分布散点图:利用 PCA 把高维词向量投影到二维平面(算法见 js/pca.js),词向量分布一目了然。
一句话总结:wevi 就是学习 word2vec、CBOW、Skip-gram 时的"显微镜",而批量训练按钮就是调整焦点的旋钮。
批量训练前快速准备:配置、训练数据与内置预设
点击训练之前,先认识控制面板上的三个输入区(对应 index.html):
- Config 配置:默认值为
{"hidden_size":5,"random_state":1,"learning_rate":0.2},定义在 js/toyw2v.js。其中hidden_size是隐藏层维度(即词向量维度)、random_state控制随机初始化种子、learning_rate是学习率; - Training data 训练数据:格式为
上下文|目标词,多词用^连接、多组用逗号分隔,例如eat|apple,drink|juice; - Presets 预设:内置 8 组经典数据(见 js/toyw2v.js),新手强烈建议直接从预设开始:
| 预设名称 | 适合观察 |
|---|---|
| Fruit and juice | 词向量分布的基础聚类 |
| Fruit and juice (CBOW) | CBOW 模型下的聚类形态 |
| Fruit and juice (Skip-gram) | 与 CBOW 做对比实验 |
| King and queen | 词向量分布中的类比关系 |
选定预设后点击Update and Restart,模型会按random_state重新随机初始化所有权重,等待你按下训练按钮。
批量训练按钮速查:Next、20、100、500 怎么选
训练控制区位于控制面板下方(index.html),一共五个按钮,其中四个负责训练:
| 按钮 | 作用 | 适用场景 |
|---|---|---|
| Next | 单步迭代(前向传播→反向传播→更新权重) | 细看每一步发生了什么 |
| 20 | 批量执行 20 次迭代 | 观察词向量分布起步阶段 |
| 100 | 批量执行 100 次迭代 | 观察聚类成形过程 |
| 500 | 批量执行 500 次迭代 | 观察词向量分布趋于稳定 |
批量训练的核心逻辑实现在 js/toyw2v.js 的batchTrain(numIter)函数中:每轮迭代依次完成"激活输入 → 计算梯度 → 更新权重 → 刷新热力图与散点图"。细心观察会发现一个小彩蛋:迭代次数是 10 的倍数时会暂停 50ms,这是为了让散点图完成渲染,恰好方便你截下词向量分布每一帧的瞬时形态。
20 步迭代:词向量分布从随机散点开始松动
刚完成 Restart 时,所有词向量挤成一团,散点图上蓝色输入向量(#1f77b4)与橙色输出向量(#ff7f0e)几乎重叠在原点附近。此时点击20:
- 迭代停止后,散点图上的点出现小幅位移,但彼此仍纠缠在一起;
- 热力图中部分格子出现深浅差异,说明权重矩阵开始被"激活";
- 神经网络图中连线粗细开始分化,模型逐渐"记住"高频的上下文-目标词组合。
这个阶段的关键词是"松动":词向量分布还没有明确结构,但已完全脱离纯随机状态。
100 步迭代:词向量分布中的语义聚类初见轮廓
点击100,你会看到质变:
- 🍎 在 Fruit and juice 预设下,与 eat 相关的食物词、与 drink 相关的饮品词开始各自聚拢,词向量分布中出现两个明显的簇;
- 🔥 热力图中 Input Vector 矩阵的某些行明显变亮,对应高频出现的上下文词;
- ⚡ 如果切换到 King and queen 预设,king/queen 与 man/woman 会各自形成平行结构,类比关系呼之欲出。
这正是 word2vec 核心思想的可视化"显影":共现频率高的词,词向量分布距离越来越近。
500 步迭代:词向量分布稳定收敛
继续点击500(或在 100 的基础上再累计迭代),最终形态出现:
- 散点图上的簇边界清晰,词向量分布基本稳定;
- 类内词间距缩小、类间间距拉大,甚至能观察到方向一致的"类比线段";
- 热力图变化幅度明显减小,说明损失已收敛到较低水平。
此时建议顺手点一下旁边的PCA按钮重算主成分投影(对应 js/toyw2v.js 的update_pca),因为 PCA 坐标系会随向量变化而旋转,训练结束后重新投影,往往能让词向量分布以更舒展的姿态呈现。
高效批量训练的 4 个实操技巧
- 固定 random_state 复现实验:把 Config 中的
random_state改成其他整数再 Restart,词向量分布的初始形态就会改变;记下心仪的种子,任何一次实验都能完美复现; - 动态调小学习率:训练中后期点Update Learning Rate,把
learning_rate从 0.2 降到 0.05,能让词向量分布更精细地收敛,避免在稳定点附近来回震荡; - 对比 CBOW 与 Skip-gram:用同一组训练数据分别跑两个预设各 500 步,收敛后的词向量分布结构相似、但边界与速度略有差异,这是理解两种模型差异的最佳实验;
- Next 单步 + 热力图联动:想真正理解梯度下降,就别用批量档位,改用 Next 一步步推进并盯住热力图,看权重如何被逐轮"修正"——这正是 js/vector_math.js 中
apply_gradient的直观呈现。
常见问题排查:批量训练报错怎么办
- 为什么点了 500 图几乎不动?说明模型已收敛、梯度趋近于 0,权重更新幅度极小;此时应调小学习率或点 PCA 刷新投影;
- 报错 "hidden layer size cannot exceed vocabulary size"?Config 里的
hidden_size超过了词表大小,改小(如 3)后点 Update and Restart 即可; - 如何彻底重来?点击 Update and Restart,模型会按当前 Config 重新随机初始化,词向量分布回到原点。
小结:批量训练是理解词向量分布的最佳路径
wevi 的 20/100/500 步批量训练,本质上是把"梯度下降"这个抽象过程切成三段可视化切片:20 步看起点、100 步看成形、500 步看稳定。新手完全不需要读懂反向传播的数学公式(js/vector_math.js 已完整实现),只需观察散点图上词向量分布的演变,就能建立起对 word2vec 最直观的直觉。
如果你想本地运行,clone 后直接用浏览器打开 index.html 即可:
git clone https://gitcode.com/gh_mirrors/we/wevi推荐使用 Chrome 浏览器。现在就打开 wevi,从点一次 20 开始,亲手见证词向量分布的重塑之旅吧 🚀
【免费下载链接】weviWord Embedding Visual Inspector项目地址: https://gitcode.com/gh_mirrors/we/wevi
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考