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

如何使用Word2Vec实现文本分类?附词向量生成代码及输出

基于Word2Vec词向量实现文本分类的完整步骤

看起来你已经成功训练出了Word2Vec词向量,接下来要完成文本分类,核心是把单个词的向量转换成文本级别的向量表示,再结合分类模型进行训练。下面是具体的实现步骤:

1. 将文本转换为句子/文档向量

Word2Vec给出的是单个词的向量,而分类模型需要的是整个文本的特征向量。最常用的方法是平均词向量(简单易实现,效果也不错),当然也可以用加权平均等进阶方法。

代码实现:文本转向量函数

import numpy as np
from gensim.models import Word2Vec

# 假设你的Word2Vec模型已经训练完成(就是你代码里的`model`)
def text_to_sentence_vector(text, word2vec_model, vector_dim=4):
    # 拆分文本为单词
    words = text.split()
    # 收集文本中存在于词表中的词向量
    valid_vectors = []
    for word in words:
        if word in word2vec_model.wv.vocab:
            valid_vectors.append(word2vec_model.wv[word])
    
    # 如果文本里没有词在词表中,返回零向量
    if not valid_vectors:
        return np.zeros(vector_dim)
    
    # 对所有词向量取平均,得到句子向量
    return np.mean(valid_vectors, axis=0)

# 测试:用你之前的sentences列表中的文本
sample_text = sentences[0]
sample_vector = text_to_sentence_vector(sample_text, model)
print("句子向量:", sample_vector)

2. 准备带标签的分类数据集

你需要有带标签的文本数据(比如每个文本对应一个分类标签,比如0/1代表正负情感,或者多分类的类别ID)。把所有文本转换成向量后,划分训练集和测试集:

# 假设你有如下格式的数据集:
texts = ["我喜欢这个产品", "这个服务很差劲", "性价比很高", ...]  # 你的文本列表
labels = [1, 0, 1, ...]  # 对应的标签(示例为二分类)

# 把所有文本转换成向量
X = np.array([text_to_sentence_vector(text, model) for text in texts])
y = np.array(labels)

# 划分训练集和测试集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

3. 训练分类模型

现在有了结构化的特征(X)和标签(y),可以用任何经典分类模型或者神经网络来训练。这里给出两个常用的示例:

示例1:逻辑回归(轻量高效,适合小数据集)

from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, classification_report

# 初始化并训练模型
classifier = LogisticRegression()
classifier.fit(X_train, y_train)

# 预测测试集
y_pred = classifier.predict(X_test)

# 评估模型效果
print(f"测试集准确率: {accuracy_score(y_test, y_pred):.2f}")
print("\n分类报告:\n", classification_report(y_test, y_pred))

示例2:神经网络(适合大数据集,可挖掘复杂特征)

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

# 构建简单的全连接神经网络
classification_model = Sequential([
    Dense(16, activation='relu', input_shape=(4,)),  # 输入维度对应词向量的size=4
    Dense(8, activation='relu'),
    Dense(1, activation='sigmoid')  # 二分类用sigmoid,多分类请改为softmax并调整输出维度
])

# 编译模型
classification_model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

# 训练模型
classification_model.fit(X_train, y_train, epochs=10, batch_size=4, validation_split=0.1)

# 评估测试集
test_loss, test_acc = classification_model.evaluate(X_test, y_test)
print(f"测试集准确率: {test_acc:.2f}")

一些优化建议

  • 提升词向量质量:你当前设置的词向量维度size=4太小了,实际应用中建议设置为100、200或300维(Gensim新版本参数为vector_size),这样能更好地捕捉单词的语义信息。
  • 文本预处理:在训练Word2Vec之前,建议对文本做预处理(小写化、去除标点、停用词等),能有效提升词向量和分类模型的效果。
  • 加权平均向量:如果想比简单平均效果更好,可以用TF-IDF权重对词向量进行加权,给重要的词更高的权重再计算平均。
  • 预训练词向量:如果你的数据集很小,可以直接使用公开的预训练Word2Vec模型,这类模型的语义表示能力更强。

内容的提问来源于stack exchange,提问作者Shubham Agrawal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:39:04