嵌入在机器学习无处不在,出现在推荐系统中,NLP,和许多其他应用。事实上,在tensorflow的环境下,很自然的,会将其中的张量(或张量的切片)视为空间中的点,所以几乎任何tensorflow系统自然会产生各种嵌入。
tensorboard有一个内置的可视化工具,称为嵌入投影机,可用来交互式的可视化,也可分析诸如嵌入的高维数据。嵌入投影机将从你的模型检查点文件中读取嵌入。虽然嵌入是最有用的,它会加载任何二维张量,包括你的训练量。
默认情况下,嵌入投影机投影高维数据到3个维度,采用主成分分析。对于PCA的可视化解释,请参见本文。另一个非常有用的投影可以使用T-SNE。我们谈论更多的T-SNE后面的教程。
如果您正在使用一个嵌入,您可能会想附加标签/图像到数据点。你可以通过生成一个包含每一个点的标签的元数据文件(metadata file),或者通过使用Python API配置投影机,或手动构建保存一个projector_config.pbtxt在和你的检查点文件同一目录中。
Setup:
三件事可视化你的嵌入:
1) Setup a 2D tensor that holds your embedding(s).
embedding_var = tf.Variable(....)
2) Periodically save your model variables in a checkpoint in LOG_DIR
.
saver = tf.train.Saver()
saver.save(session, os.path.join(LOG_DIR, "model.ckpt"), step)
3) (Optional) Associate metadata with your embedding.
如果你有任何元数据(标签、图片)你的嵌入相关的,你可以告诉tensorboard它通过直接存储projector_config.pbtxt在log_dir,或使用我们的Python API。
例如,下面的projector_config.ptxt将word_embedding张量与存储在log_dir/ metadata.tsv的元数据关联起来:
embeddings {
tensor_name: 'word_embedding'
metadata_path: '$LOG_DIR/metadata.tsv'
}
使用下面的代码片段可以编程实现相同的配置:
# Create randomly initialized embedding weights which will be trained.
N = 10000 # Number of items (vocab size).
D = 200 # Dimensionality of the embedding.
embedding_var = tf.Variable(tf.random_normal([N,D]), name='word_embedding')
# Format: tensorflow/contrib/tensorboard/plugins/projector/projector_config.proto
config = projector.ProjectorConfig()
# You can add multiple embeddings. Here we add only one.
embedding = config.embeddings.add()
embedding.tensor_name = embedding_var.name
# Link this tensor to its metadata file (e.g. labels).
embedding.metadata_path = os.path.join(LOG_DIR, 'metadata.tsv')
# Use the same LOG_DIR where you stored your checkpoint.
summary_writer = tf.summary.FileWriter(LOG_DIR)
# The next line writes a projector_config.pbtxt in the LOG_DIR. TensorBoard will
# read this file during startup.
projector.visualize_embeddings(summary_writer, config)
运行你的模型和训练你的嵌入后,运行tensorboard点工作的log_dir:
tensorboard --logdir=LOG_DIR
然后点击顶部窗格中的Embeddings tab和选择合适的运行(如果有一个以上的运行)。
Word\tFrequency
Airplane\t345
Car\t241
...
没有与主数据文件共享的显式密钥;相反,元数据文件中的顺序被假定为与嵌入张量中的顺序相匹配。换句话说,第一行是表头信息和(i + 1)-在元数据文件中的线对应的嵌入张量存放在检查站的第i行。
Note: 注意:如果TSV元数据文件只有一个列,然后我们不指望一个标题行,并且假设每行是嵌入标签。我们有这个例外,因为它与常用的“默认文件格式。
0 | 1 | 2 |
3 | 4 | 5 |
6 | 7 |
Note in the example above that the last row doesn't have to be filled.
Note: We currently support sprites up to 8192px X 8192px.在构建精灵之后,你需要告诉嵌入投影仪在哪里找到它:
embedding.sprite.image_path = PATH_TO_SPRITE_IMAGE
# Specify the width and height of a single thumbnail.
embedding.sprite.single_image_dim.extend([w, h])
主成分分析一个简单的技术,减少尺寸是主成分分析(PCA)。嵌入投影机计算前10主成分。菜单允许您将这些组件投射到两个或三个任意组合中。PCA是一个线性投影,往往有效地检查全局几何。
T-SNE流行的非线性降维技术T-SNE。嵌入投影机提供了二维和三维的T-SNE观点。布局执行客户端动画算法的每一步。因为T-SNE经常保留一些局部结构,探索当地社区发现集群是有用的。虽然可视化高维数据非常有用,T-SNE地块有时是神秘的或误导的。看到这篇大文章如何使用T-SNE有效。
您还可以根据文本搜索构造专门的线性投影,在空间中寻找有意义的方向。若要定义投影轴,请输入两个搜索字符串或正则表达式。程序计算出的标签匹配这些搜索点的质心,以质心之间的差向量作为投影轴。
放大到集群提供了一些信息,但有时更有助于限制视图的一个子集的点,并执行预测只在这些点。要做到这一点,您可以选择点以多种方式:
点击一个点后,它的最近邻居也被选中。搜索之后,选择与查询匹配的点。启用选择,单击一个点并拖动定义一个选择球。在选择了一组点之后,你可以用右边的检查窗格中的“隔离点”按钮将这些点孤立起来进行进一步的分析。
Selection of the nearest neighbors of “important” in a word embedding dataset.
The combination of filtering with custom projection can be powerful. Below, we filtered the 100 nearest neighbors of “politics” and projected them onto the “best” - “worst” vector as an x axis. The y axis is random.
You can see that on the right side we have “ideas”, “science”, “perspective”, “journalism” while on the left we have “crisis”, “violence” and “conflict”.
Custom projection controls. | Custom projection of neighbors of "politics" onto "best" - "worst" vector. |
Selection of the nearest neighbors of “important” in a word embedding dataset.
The combination of filtering with custom projection can be powerful. Below, we filtered the 100 nearest neighbors of “politics” and projected them onto the “best” - “worst” vector as an x axis. The y axis is random.
You can see that on the right side we have “ideas”, “science”, “perspective”, “journalism” while on the left we have “crisis”, “violence” and “conflict”.
Custom projection controls. | Custom projection of neighbors of "politics" onto "best" - "worst" vector. |