0
你可以使用t-SNE:这是一种降维技术,可用于可视化高维向量,例如单词嵌入。 下面是一个使用Scikit-learn的Python示例代码。 它上传一个文本格式的预训练的嵌入文件,应用了t-SNE算法并将单词可视化。
import sys
import codecs
import numpy as np
import matplotlib.pyplot as plt
from sklearn.manifold import TSNE
def main():
embeddings_file = sys.argv[1]
wv, vocabulary = load_embeddings(embeddings_file)
tsne = TSNE(n_components=2, random_state=0)
np.set_printoptions(suppress=True)
Y = tsne.fit_transform(wv[:1000,:])
plt.scatter(Y[:, 0], Y[:, 1])
for label, x, y in zip(vocabulary, Y[:, 0], Y[:, 1]):
plt.annotate(label, xy=(x, y), xytext=(0, 0), textcoords='offset points')
plt.show()
def load_embeddings(file_name):
with codecs.open(file_name, 'r', 'utf-8') as f_in:
vocabulary, wv = zip(*[line.strip().split(' ', 1) for line in
f_in])
wv = np.loadtxt(wv)
return wv, vocabulary
if __name__ == '__main__':
main()
由于内存问题,我仅将其应用于前1000个单词。 这是我的结果(我使用了50维预训练的GloVe词嵌入):
这是一个放大图:
收藏