如何在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
相关产品推荐
相关产品推荐

