You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Word2Vec模型上应用t-SNE可视化亚马逊食品评论数据

嘿,看起来你已经搞定了词袋表示的t-SNE可视化,那咱们来把Word2Vec整合进来,实现更有语义信息的亚马逊食品评论情感可视化吧!下面是一步步的实操流程:

Word2Vec + t-SNE 可视化亚马逊食品评论

1. 先把评论文本预处理干净

Word2Vec吃的是规整的分词列表,所以得先给评论做个“大扫除”:

  • 过滤掉数字、特殊字符,统一转小写
  • 分词后去掉停用词(比如the、and这类没实际语义的词)

用NLTK实现的代码示例:

import nltk
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize

# 先下载需要的NLTK资源
nltk.download('punkt')
nltk.download('stopwords')

stop_words = set(stopwords.words('english'))
# 假设你的评论数据存在final['Text']列里
final['cleaned_text'] = final['Text'].apply(lambda x: 
    [word.lower() for word in word_tokenize(x) if word.isalpha() and word.lower() not in stop_words]
)

2. 训练Word2Vec词向量模型

用Gensim的Word2Vec来训练,参数可以根据你的数据调整:

from gensim.models import Word2Vec

# vector_size是词向量维度,window是上下文窗口大小,min_count忽略出现次数太少的词
w2v_model = Word2Vec(
    final['cleaned_text'],
    vector_size=100,
    window=5,
    min_count=5,
    workers=4  # 多线程加速训练
)

3. 把单条评论转换成句子向量

Word2Vec输出的是词向量,咱们得把整段评论的词向量合并成一个句子向量,最简单的方法就是取平均:

import numpy as np

def get_sentence_vector(text, model):
    # 只保留模型词汇表里有的词
    valid_words = [word for word in text if word in model.wv.key_to_index]
    if not valid_words:
        # 如果评论全是停用词/不在词汇表的词,返回全0向量
        return np.zeros(model.vector_size)
    # 对有效词向量取平均得到句子向量
    return np.mean(model.wv[valid_words], axis=0)

# 生成前2000条评论的Word2Vec句子向量
w2v_vectors = np.array([
    get_sentence_vector(text, w2v_model) 
    for text in final['cleaned_text'].iloc[:2000]
])
# 还是用你之前的前2000条评分标签
labels_2000 = final['Score'].iloc[:2000]

4. 用t-SNE做可视化

这部分和你之前词袋的流程几乎一样,只是输入换成了Word2Vec的句子向量:

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

# 初始化t-SNE模型,perplexity可以根据数据量调整(一般5-50之间)
tsne_model = TSNE(n_components=2, random_state=0, perplexity=30)
tsne_data = tsne_model.fit_transform(w2v_vectors)

# 画图展示
plt.figure(figsize=(10, 8))
# 用评分给点着色,不同颜色代表不同星级
scatter = plt.scatter(tsne_data[:, 0], tsne_data[:, 1], c=labels_2000, cmap='viridis')
plt.legend(handles=scatter.legend_elements()[0], labels=['1星', '2星', '3星', '4星', '5星'])
plt.title('亚马逊食品评论t-SNE可视化(Word2Vec句子向量)')
plt.show()

一些优化小技巧

  • 觉得平均向量不够精准?可以试试TF-IDF加权平均,给重要的词更高的权重
  • 也可以直接用Doc2Vec训练文档向量,专门针对整段文本的向量表示,效果可能更好
  • 调整Word2Vec的vector_size、window,还有t-SNE的perplexity参数,不同参数会带来不一样的可视化效果,多试试总能找到最合适的

内容的提问来源于stack exchange,提问作者Akash Dubey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:37:55