词嵌入:交互式练习#
在上一节内容中,我们把“嵌入空间”和“静态嵌入”讲成了理论,这一节我们换个方式直接通过交互式的方式上手玩一玩“词向量”。
下面这个交互组件基于 TensorFlow 的 Embedding Projector,它把 10,000 个 word2vec 静态向量压扁进了一个 3D 空间。
提示:尽管把高维向量压成 3D 能够帮助我们观察,但是它会损失部分原有的样本信息。因此可能出现在原始高维空间里挨得很近的两个点,投影到 3D 之后反而可能显得很远。所以这张图更适合用来观察大致的分群和趋势,而不是当作“真实距离”的严格证据。
组件里,Isolate __ points 可以设定要高亮的最近邻数量 $n$,最靠前的 $n$ 个点会被染成紫色,右侧边栏则列出这些最近邻到底是谁。
接下来的几个练习,就在上面这个组件里玩 word2vec 嵌入。
任务 1#
先试着找出下面这些词的 20 个最近邻,看看这些词群在点云里都落在哪些位置:
iii、third与threetao与wayorange、yellow与juice
这些结果里,你注意到了什么?
任务 2#
再来试着摸清一些训练数据的特征。比如,找出下面这些词的 100 个最近邻,看看它们在点云里是怎么分布的:
boston、paris、tokyo、delhi、moscow与seoul(这是一道陷阱题)jane、sarah、john、peter、rosa与juan
任务 3#
嵌入并不限于文字,图像、音频以及其他数据同样可以被嵌入。这一次我们换个数据集:
打开 TensorFlow 的 Embedding Projector。
在左侧标题为 Data 的边栏里,选择 Mnist with images。这会调出 MNIST 手写数字数据库的嵌入投影。
点击停止旋转,然后选中一张具体的图像。按需要放大或缩小。
到右侧边栏查看最近邻。有什么让你意外的吗?
为什么有些
7的最近邻是1?为什么有些8的最近邻是9?投影空间边缘的图像,与中心区域的图像相比,似乎有什么不一样的地方?
这里要留个心:制造这些嵌入的模型拿到的是图像数据——也就是像素——然后为每张图像挑一个数值向量表示。模型并不会自动在“手写数字的图像”和“数字本身”之间建立心理联想。
MLWM: 上面三个练习里反复出现的
word2vec静态词向量究竟是怎么训出来的、CBOW 与 Skip-gram 有什么区别,参见“Word2Vec原理:词向量训练与语义表示方法”与“Word2Vec训练与使用:CBOW、Skip-gram 与词向量应用”;嵌入空间与静态嵌入的完整梳理见上一节。
关键术语:
- 嵌入向量(Embedding vector)
- 嵌入空间(Embedding space)