如何将Word2Vec模型应用于Pandas DataFrame列并解决调用错误?
问题解决:将Word2Vec词嵌入应用到Pandas DataFrame列
错误原因
model.wv是KeyedVectors对象,本身不可调用,不能直接传给apply()方法——apply()需要接收一个可调用函数来处理每行文本。
正确实现步骤
1. 确保文本已分词
Word2Vec模型的输入必须是分词后的单词列表,如果你的tweet_text列是原始字符串,需要先做分词处理:
import pandas as pd from gensim.models import Word2Vec import nltk from nltk.tokenize import word_tokenize # 若未下载分词工具,先执行 # nltk.download('punkt') # 对原始文本分词 df['tokenized_text'] = df['tweet_text'].apply(word_tokenize)
2. 训练Word2Vec模型
用分词后的列训练模型:
model = Word2Vec(df['tokenized_text'], sg=1, window=10, min_count=1, workers=4)
3. 定义文本向量生成函数
单条文本包含多个单词,需要将每个单词的词嵌入聚合为一个文本向量(常用方式是取平均):
def get_text_embedding(tokens): # 过滤模型中不存在的词 valid_embeddings = [model.wv[token] for token in tokens if token in model.wv] if not valid_embeddings: # 若所有词都不在模型中,返回全0向量(维度与模型一致) return [0.0] * model.vector_size # 取所有有效词嵌入的平均值 return pd.Series(sum(valid_embeddings) / len(valid_embeddings))
4. 生成嵌入列并查看结果
df['embeddings'] = df['tokenized_text'].apply(get_text_embedding) # 查看前5行 print(df[['tweet_text', 'embeddings']].head(5))
补充说明
- 如果你的
tweet_text列已经是分词后的列表,可跳过第一步的分词步骤,直接用该列训练模型和生成嵌入。 - 除了平均聚合,也可以根据需求使用加权平均、最大值池化等方式生成文本向量。
内容的提问来源于stack exchange,提问作者Debbie
相关产品推荐
相关产品推荐

