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

如何正确使用Keras TextVectorization函数对推特文本向量化?

使用Keras TextVectorization实现推特文本TF-IDF向量化(用于二分类)

我在使用Keras的TextVectorization函数处理推特数据集时遇到了困难,查阅文档和相关代码后仍无法解决问题。目前我已经成功用sklearn的TfidfVectorizer完成了推特二分类预测,对应的代码如下:

from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np

vectorizer_tfidf = TfidfVectorizer(stop_words='english', max_df=0.5, min_df=0.01)

X_train = np.array(X_train).tolist()
X_train = list(map(''.join, X_train))

X_val = np.array(X_val).tolist()
X_val = list(map(''.join, X_val))

X_train_tfIdf = vectorizer_tfidf.fit_transform(X_train).toarray()
X_val_tfIdf = vectorizer_tfidf.transform(X_val).toarray()
print(vectorizer_tfidf.get_feature_names_out()[:5])

希望有人能展示用Keras完成该任务的正确方法,我已经查阅了多个网站和教程,但仍未找到合适的解决方案。


解决方案

Keras的TextVectorization可以通过两种方式实现和sklearn TfidfVectorizer一致的TF-IDF向量化,以下是对应你需求的具体实现:

方式1:直接使用TextVectorization的TF-IDF模式(Keras 2.10+支持)

这种方式无需额外计算,直接通过参数配置实现TF-IDF输出:

import tensorflow as tf
from tensorflow.keras.layers import TextVectorization
import numpy as np

# 保持和你原有代码一致的文本预处理步骤
X_train = np.array(X_train).tolist()
X_train = list(map(''.join, X_train))
X_val = np.array(X_val).tolist()
X_val = list(map(''.join, X_val))

# 初始化向量器,对齐sklearn的参数配置
vectorizer = TextVectorization(
    stop_words='english',
    max_tokens=None,
    max_df=0.5,
    min_df=0.01,
    output_mode='tf_idf',
    output_sequence_length=None
)

# 用训练数据拟合向量器
vectorizer.adapt(X_train)

# 转换训练集和验证集为TF-IDF矩阵
X_train_tfidf = vectorizer(np.array(X_train)).numpy()
X_val_tfidf = vectorizer(np.array(X_val)).numpy()

# 查看前5个特征词,对应sklearn的get_feature_names_out()
print(vectorizer.get_vocabulary()[:5])

方式2:手动计算TF-IDF(兼容低版本Keras)

如果你的Keras版本不支持output_mode='tf_idf',可以先获取词频计数,再手动计算TF-IDF:

import tensorflow as tf
from tensorflow.keras.layers import TextVectorization
import numpy as np
from sklearn.preprocessing import normalize

# 文本预处理步骤不变
X_train = np.array(X_train).tolist()
X_train = list(map(''.join, X_train))
X_val = np.array(X_val).tolist()
X_val = list(map(''.join, X_val))

# 初始化向量器,输出词频计数
vectorizer = TextVectorization(
    stop_words='english',
    max_tokens=None,
    max_df=0.5,
    min_df=0.01,
    output_mode='count'
)

vectorizer.adapt(X_train)

# 获取词频矩阵
X_train_count = vectorizer(np.array(X_train)).numpy()
X_val_count = vectorizer(np.array(X_val)).numpy()

# 计算IDF(和sklearn逻辑一致)
document_count = X_train_count.shape[0]
idf = np.log((document_count + 1) / (np.sum(X_train_count > 0, axis=0) + 1)) + 1

# 计算TF-IDF并做L2归一化
X_train_tfidf = normalize(X_train_count * idf)
X_val_tfidf = normalize(X_val_count * idf)

# 查看特征词
print(vectorizer.get_vocabulary()[:5])

端到端接入神经网络(可选)

如果后续要训练二分类模型,可以直接把TextVectorization作为模型的第一层,实现端到端流程:

model = tf.keras.Sequential([
    vectorizer,
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.Dense(1, activation='sigmoid')
])

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train, validation_data=(X_val, y_val), epochs=10)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 16:32:32