可视化词向量-TSNE

可视化词向量的好处是可以验证训练的词向量的效果,常采用TSNE方法可视化。

t-分布领域嵌入算法,它只用于已标注数据时才真正有意义,可以明确显示出输入的聚类状况。

主要想法是将高维分布点的距离用条件概率来表示相似性,同时低维分布的点也是这样表示。只要二者的条件概率非常接近(用相对熵来训练,所以需要label),那就说明高维分布的点已经映射到低维分布上了。

 

难点:

1.高维距离较近的点,比较方便聚在一起,但是高维距离较远的点,却比较难在低维拉开距离。

2.训练时间较长,占用内存大。

from sklearn.manifold import TSNE
import numpy as np
import matplotlib.pyplot as plt
import random

#因为词向量文件比较大,全部可视化就什么都看不见了,所以随机抽取一些词可视化
words = list(model.wv.vocab)
random.shuffle(words)

vector = model[words]
tsne = TSNE(n_components=2,init='pca',verbose=1)
embedd = tsne.fit_transform(vector)

#可视化
plt.figure(figsize=(14,10))
plt.scatter(embedd[:300,0], embedd[:300,1])

for i in range(300):
    x = embedd[i][0]
    y = embedd[i][1]
    plt.text(x, y, words[i])
plt.show()

t-SNE是一种常用的降维算法,可以将高维数据映射到二维或三维空间中进行可视化。在NLP中,我们可以使用t-SNE对词嵌入向量进行可视化,以便更好地理解词之间的关系。 以下是使用Python和Scikit-learn库进行t-SNE可视化的步骤: 1. 导入所需的库和数据 ```python import numpy as np from sklearn.manifold import TSNE import matplotlib.pyplot as plt # 词嵌入向量文件路径 embedding_file = 'embedding.txt' # 加载词嵌入向量 with open(embedding_file, 'r', encoding='utf-8') as f: data = f.readlines() # 获取词汇表和嵌入向量 vocab = [] embedding = [] for line in data: line = line.strip().split(' ') vocab.append(line[0]) embedding.append([float(x) for x in line[1:]]) embedding = np.array(embedding) ``` 2. 使用t-SNE将高维词嵌入向量映射到二维空间 ```python tsne = TSNE(n_components=2, random_state=0) embedding_tsne = tsne.fit_transform(embedding) ``` 3. 可视化结果 ```python # 设置图片大小 plt.figure(figsize=(12, 12)) # 绘制散点图 plt.scatter(embedding_tsne[:, 0], embedding_tsne[:, 1], marker='.') # 添加标签 for i, word in enumerate(vocab): x, y = embedding_tsne[i, :] plt.annotate(word, xy=(x, y), xytext=(5, 2), textcoords='offset points', ha='right', va='bottom') # 显示图像 plt.show() ``` 通过以上步骤,我们可以得到一个词嵌入向量的二维可视化结果,词与词之间的关系可以更加直观地呈现出来。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值