使用 t-sne 可视化从 gensim 生成的 word2vec

2024-02-05

我使用 gensim 在我自己的语料库上训练了 doc2vec 和相应的 word2vec。我想使用 t-sne 和单词来可视化 word2vec。如图所示,图中的每个点也带有“单词”。

我在这里看了一个类似的问题:word2vec 上的 t-sne https://stackoverflow.com/questions/40581010/how-to-run-tsne-on-word2vec-created-from-gensim

接下来,我有这个代码:

导入gensim 将 gensim.models 导入为 g

from sklearn.manifold import TSNE
import re
import matplotlib.pyplot as plt

modelPath="/Users/tarun/Desktop/PE/doc2vec/model3_100_newCorpus60_1min_6window_100trainEpoch.bin"
model = g.Doc2Vec.load(modelPath)

X = model[model.wv.vocab]
print len(X)
print X[0]
tsne = TSNE(n_components=2)
X_tsne = tsne.fit_transform(X[:1000,:])

plt.scatter(X_tsne[:, 0], X_tsne[:, 1])
plt.show()

这给出了一个带有点但没有文字的图形。也就是说我不知道​​哪个点代表哪个单词。如何显示带点的单词?


答案分为两部分:如何获取单词标签,以及如何在散点图上绘制标签。

gensim 的 word2vec 中的单词标签

model.wv.vocab是 {word: 数值向量的对象} 的字典。将数据加载到X对于 t-SNE,我做了一处更改。

vocab = list(model.wv.key_to_index)
X = model.wv[vocab]

这完成了两件事:(1)它为您提供了一个独立的vocab要绘制的最终数据帧的列表,以及 (2) 当您建立索引时model,您可以确定您知道单词的顺序。

像以前一样继续

tsne = TSNE(n_components=2)
X_tsne = tsne.fit_transform(X)

现在让我们把X_tsnevocab列表。这对于 pandas 来说很容易,所以import pandas as pd如果你还没有的话。

df = pd.DataFrame(X_tsne, index=vocab, columns=['x', 'y'])

词汇是indices现在的数据框。

我没有你的数据集,但在other SO https://stackoverflow.com/questions/40581010/how-to-run-tsne-on-word2vec-created-from-gensim你提到的一个例子df使用 sklearn 的新闻组看起来像

                        x             y
politics    -1.524653e+20 -1.113538e+20
worry        2.065890e+19  1.403432e+20
mu          -1.333273e+21 -5.648459e+20
format      -4.780181e+19  2.397271e+19
recommended  8.694375e+20  1.358602e+21
arguing     -4.903531e+19  4.734511e+20
or          -3.658189e+19 -1.088200e+20
above        1.126082e+19 -4.933230e+19

散点图

我喜欢 matplotlib 的面向对象方法,所以这开始有点不同。

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)

ax.scatter(df['x'], df['y'])

最后,annotate方法将标记坐标。前两个参数是文本标签和二元组。使用iterrows(),这可以非常简洁:

for word, pos in df.iterrows():
    ax.annotate(word, pos)

[感谢里卡多在评论中提出的建议。]

Then do plt.show() or fig.savefig()。根据您的数据,您可能不得不搞乱ax.set_xlim and ax.set_ylim看到浓密的云层。这是没有任何调整的新闻组示例:

您也可以修改点的大小、颜色等。祝微调愉快!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 t-sne 可视化从 gensim 生成的 word2vec 的相关文章

随机推荐

  • 多用户角色环回

    我正在尝试使用 Loopback 作为后端来制作一个应用程序 我以前已经使用过环回 但现在我想做一些我以前从未做过的事情 我想要的很简单 我将有 3 种类型的用户 管理员 服务者和默认用户 但是 我需要限制每种类型用户的访问控制 管理员可以
  • Rust 从 fn 返回结果错误:类型不匹配

    我希望这个函数返回一个错误结果 fn get result gt Result
  • 对图像进行积分的有效方法

    我有一个 2D 数组 典型大小约为 400x100 如图所示 它看起来像一个梯形 因为右下角的元素是 nan 对于数组中的每个元素 我想对多个元素 大约 10 个元素 沿列执行数值积分 在物理语言中 将颜色视为力的大小 我想找到通过计算 F
  • Material Design lite sidenav onhide 仅显示图标

    我正在尝试制作一个侧导航 当切换时 它不会完全隐藏侧导航 并会显示代表每个选项卡的图标 我的代码在这里 header mdl layout drawer border right 0 header mdl layout drawer mdl
  • 脚本通过 CentOS 安装 mysql-server,无需密码提示

    我的操作系统是 CentOS 6 6 我想知道如何通过 shell 脚本自动安装 mysql server 我发现有一个主题讨论了同样的问题 但在 CentOS 6 上失败了 ubuntu安装mysql无密码提示 https stackov
  • 长时间运行任务的视觉反馈

    我有一个长时间运行的 for each 循环 并且想知道是否有一种惯用的方法来添加一些视觉用户反馈 以便用户不会认为应用程序崩溃了 private void btnRunLongRunningTask Click object sender
  • Hazelcast Jet 查询

    我对 Hazelcast Jet 有以下疑问 用例如下 有一个应用程序 应用程序 A 部署在集群中 使用 Hazelcast IMDG 并将数百万条记录 事务放入 hazelcast IMap 中 已为此 IMap 配置事件日志 还有另一个
  • 如何获取 SwiftUI 中 TextEditor 的光标位置?

    因此 在我的文本编辑器中 我想知道光标的几何位置 我还计划在该位置之后附加一些文本 那么我该怎么做呢 好吧 所以我想出了一个方法来做到这一点 首先 我创建了一个struct存储光标位置 import foundation struct Cu
  • Docker - Node.js + MongoDB - “错误:无法连接到 [localhost:27017]”

    我正在尝试为我的容器创建一个容器Node应用程序 这个应用程序使用MongoDB以确保一些数据的持久性 所以我创建了这个Dockerfile FROM ubuntu latest Installing MongoDB Add 10gen o
  • 如何在第三方库中的Eclipse中设置断点?

    我在第三方库的类中收到 NullPointerException 现在我想调试整个事情 我需要知道该类是从哪个对象中保存的 但在我看来 我无法在第三方的班级中设置断点 有谁知道摆脱我的麻烦的方法吗 当然 我使用 Eclipse 作为我的 I
  • C# Networkstream.read()

    read buffer offset length 实际上是如何工作的 如果我将读取的长度传递为 32 这是否意味着它会一直阻塞 直到收到 32 个字节 我知道如果出现套接字异常或连接关闭 它将分别返回异常或 0 如果发送方只发送 31 个
  • 如何使用 Rspec 测试 google Analytics (garb) API?

    我正在使用garb gem https github com vigetlabs garb从 Google Analytics 中获取一些基本统计数据 例如页面浏览量 一切正常 但我无法找出测试 API 调用的最佳方法 这是我的 Analy
  • 如何计算提交、树和 blob 的哈希值?

    我对如何计算提交 树和 blob 的 SHA 1 哈希值感到困惑 按照本文 https gist github com masak 2415865 提交哈希值是根据以下因素计算的 提交的源树 分解为所有子树和 blob 父提交 sha1 作
  • 存储及其锁定文件已被另一个进程锁定:/var/lib/neo4j/data/databases/graph.db/store_lock

    我做了什么 neo4j console 工作正常 ctrl C 重新启动后我收到上面的消息 我删除 var lib neo4j data databases graph db store lock 那么我有 Externally locke
  • 如何在where条件下使用case语句?

    我需要在 WHERE 子句中使用 CASE 语句 例如 WHERE p resource qry seq b resource qry seq AND p resource id b resource id AND CASE WHEN b
  • 在服务器端 Blazor 中使用 SignInManager

    是否可以使用SignInManager没有一些HTTPContext 我正在制作 Blazor 服务器端应用程序 我需要让最终用户使用以下方式登录PasswordSignInAsync 的方法SignInManager 如果有其他方法可以用
  • 使用特定顺序序列化映射

    我有一个使用字符串作为键和值的地图 我有一个键数组 用于指定映射值的顺序 我想将该映射序列化为 JSON 但保持数组上定义的顺序 这里有一个示例代码 http play golang org p A52GTDY6Wx http play g
  • MSBuild 未从导入的项目运行 BuildDependsOn 任务

    我有一个导入的 MSBuild 项目 appconfig transformation targets 它定义了一些任务并将它们放入 BuildDependsOn 属性中 我已将此文件放置在解决方案的顶级文件夹中 Projects Libr
  • 单击不同的按钮将不同的 HTML 加载到相同的 #Content DIV 中

    我有一个包含多个选项的菜单 我想知道如何将不同的 HTML 加载到相同的菜单中div 称为 content 取决于您按下的菜单按钮 我有这个菜单代码 div ul li a href Accueil a li li a href Qui s
  • 使用 t-sne 可视化从 gensim 生成的 word2vec

    我使用 gensim 在我自己的语料库上训练了 doc2vec 和相应的 word2vec 我想使用 t sne 和单词来可视化 word2vec 如图所示 图中的每个点也带有 单词 我在这里看了一个类似的问题 word2vec 上的 t