谷歌开源Embedding可视化工具

弹性计算云存储MySQL

picture.image picture.image

作者信息

Elesdspline
目前从事NLP与知识图谱相关工作。

谷歌开源Embedding可视化工具
导读

目前,在深度学习中可以利用多种方法或工具将特征信息转换为低维稠密的向量表示(Embedding),且Embedding在自然语言处理、知识图谱、推荐搜索、机器翻译、智能问答等领域应用广泛。Embedding 中虽然包含了丰富的信息表达,但是肉眼看上去是数不胜数的数字,无法看出其内在的信息关联,因此,将Embedding的信息可视化到肉眼可见的空间是非常重要的工作。

本文主要介绍谷歌2016年开源的一款 Embedding 可视化工具及其使用方法,这款工具是一款用于交互式可视化和高维数据分析的网页工具 Embedding Projector

一、可视化工具介绍

Embedding Projector 是一款用于交互式可视化和高维数据分析的可视化工具,它是 TensorFlow 的一部分,但是谷歌开放了一个可以单独使用的版本,无需安装和运行 TensorFlow 便可以对 Embedding 进行可视化。

下图是 Embedding Projector 的页面,是不是有点酷炫的feel,分为左中右三部分:

picture.image

  • 中间部分为可视化部分,可以3D显示立体空间,以及一些工具栏。
  • 左侧是一些高维数据的降维方法以及可以Embedding的文件,高维数据降维的方法包括UMAP、T-SNE、PCA、CUSTOM,工具提供了5种可尝试的Embedding,包括 Word2Vce All、Mnist with images、Word2Vec 10k、GNMT Interlingua、Iris,另外可以上传自己的 Embedding 文件,一会详细说明怎么使用。
  • 右侧是词的一些空间邻近词,有不同的计算方法得到的,包括 COSINE、EUCLIDEAN。

看一下PCA降维生成的酷炫图:

picture.image

简述几种降维方法

  • PCA 可以探索 Embedding 的内在信息空间结构,探索不同的信息维度。
  • T-SNE 可用于探索局部近邻值(local neighborhoods)和聚类(cluster),比如相近的词语聚类到一起,或者图谱知识表示中的关系向量,正向与反向的关系向量聚成两个簇。
  • UMAP(Uniform Manifold Approximation and Projection) 是加拿大研究员18年提出的一种方法,是一种类似 T-SNE 的高维数据降维算法,UMAP 相对于 T-SNE 能反映全局结构且在计算大样本数据时,运行速度快,占用内存少。
  • CUSTOM 是自定义线性投影,可以帮助发现数据集中有意义的方向(direction),比如图谱中正向关系与反向关系、情感中喜欢与厌恶等。

可视化地址http://projector.tensorflow.org/

二、如何使用自己的文件

Embedding Projector 除了提供的5中尝试的文件,还可以使用自己的 Embedding 文件,但是需要转换成工具需要的 tsv 格式文件,下图是上传文件的步骤,点击 load 会出现右边的框,第一个文件是只有向量的文件,第二个 label 文件。

picture.image

如何根据我们的 Embedding 文件获取工具所需的 tsv 文件,下面是一段转换代码。

输入文件格式如下

picture.image


          
import os  
import sys  
import json  
import numpy as np  
import pandas as pd  
  
def get\_tsv(path):  
    """  
    :param path:  
    :return:  
    """  
    label_list = []  
    vec_list = []  
    with open(path, encoding="utf-8") as file:  
        for line in file.readlines():  
            line = line.strip()  
            line = line.split()  
            label_list.append(line[0])  
            vec_list.append(list(map(float, line[1:])))  
  
    label_array = np.array(label_list)  
    vec_array = np.array(vec_list)  
  
    label_df = pd.DataFrame(label_array)  
    vec_df = pd.DataFrame(vec_array)  
  
    label_path = "./label.tsv"  
    if os.path.exists(label_path):  
        os.remove(label_path)  
    with open(label_path, 'w') as write_tsv:  
        write_tsv.write(label_df.to_csv(sep='\t', index=False, header=False))  
  
    vec_path = "./vector.tsv"  
    if os.path.exists(vec_path):  
        os.remove(vec_path)  
    with open(vec_path, 'w') as write_tsv:  
        write_tsv.write(vec_df.to_csv(sep='\t', index=False, header=False))  
    print("Finished.")  
  
  
if __name__ == "\_\_main\_\_":  
  
    path = "./glove\_sentiment.txt"  
    get_tsv(path)  
  

      

最终得到两份文件 vector.tsv 和 label.tsv,逐个上传即可。

上传后效果图:

picture.image

三、总结

本文主要介绍谷歌2016年开源的Embedding Projector , Embedding 可视化工具及其使用方法。

Embedding Projector工具地址http://projector.tensorflow.org/

参考文献
  1. Smilkov D, Thorat N, Nicholson C, et al. Embedding projector: Interactive visualization and interpretation of embeddings[J]. arXiv preprint arXiv:1611.05469, 2016.

  2. https://zhuanlan.zhihu.com/p/24252690



原创专辑推荐

专辑:知识图谱

专辑:自然语言处理

专辑:大数据技术


picture.image

欢迎点赞、在看、分享三步走哈~

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
字节跳动云原生降本增效实践
本次分享主要介绍字节跳动如何利用云原生技术不断提升资源利用效率,降低基础设施成本;并重点分享字节跳动云原生团队在构建超大规模云原生系统过程中遇到的问题和相关解决方案,以及过程中回馈社区和客户的一系列开源项目和产品。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论