python-3.x - 如何在 Word2Vec 模型上应用 t-SNE
问题描述
我正在对亚马逊食品评论进行情绪分析,我正在尝试将 Word2Vec 应用于评论并使用 t-SNE 将其可视化。
使用以下代码,我可以轻松地使用 Bag of words 表示来进行可视化:
from sklearn.manifold import TSNE
data_2000 = final_counts[0:2000,:]
top_2000 = data_2000.toarray()
labels = final['Score']
labels_2000 = labels[0:2000]
model = TSNE(n_components=2, random_state=0)
tsne_data = model.fit_transform(top_2000)
# creating a new data frame which help us in ploting the result
tsne_data = np.vstack((tsne_data.T, labels_2000)).T
tsne_df = pd.DataFrame(data=tsne_data, columns=("Dim_1", "Dim_2",
"label"))
# Ploting the result of tsne
sns.FacetGrid(tsne_df, hue="label", size=6).map(plt.scatter,
'Dim_1', 'Dim_2').add_legend()
plt.show()
此外,当我提供类型为 gensim.models.word2vec.Word2Vec 的 w2v_model 模型时,相同的代码不起作用
我使用以下代码获得了模型:
w2v_model=gensim.models.Word2Vec(list_of_sent,min_count=5,size=50,
workers=4)
解决方案
训练模型后,您需要提取所有词嵌入。我建议通过以下方式提取到 pd.DataFrame 中:
all_vocab = list(w2v_model.wv.vocab.keys())
data_dict = {word: w2v_model.wv[word] for word in all_vocab}
result = pd.DataFrame(data=data_dict).transpose()
如果您想在 scikit 中执行降维,只需通过以下方式访问嵌入数组result.values
推荐阅读
- php - date_default_timezone_set 是否更改全球时区
- apache-spark - 如何在 csv 文件的字段中使用逗号编写 pyspark 数据帧
- google-cloud-platform - Bigquery 更新元数据但禁用创建/删除/更改表
- bash - 搜索包含逗号的确切 bash 变量
- sql - SQL Server 表的不同子集的多次更新导致死锁
- kubernetes - Anthos 配置管理,未安装配置同步
- javascript - 如何从子数组中提取项目并将它们推送到主数组
- javascript - 使用 array-contains-any 从 Google Cloud Function 获取 firestore 数据
- python - 将一个向量沿另一个向量的方向投影到平面上的公式
- sql - 对表中的每个值运行 SQL 查询