以下是使用TensorFlow 2.x实现Word2Vec的示例代码:
import tensorflow as tf
from tensorflow.keras.layers import Dense, Embedding, GlobalAveragePooling1D
from tensorflow.keras.models import Sequential
# 定义数据集,假设已经准备好了文本数据和标签数据
text_data = ...
label_data = ...
# 构建词汇表
tokenizer = tf.keras.preprocessing.text.Tokenizer()
tokenizer.fit_on_texts(text_data)
vocab_size = len(tokenizer.word_index) + 1
# 将文本数据转换为数值序列表示
sequences = tokenizer.texts_to_sequences(text_data)
# 定义窗口大小和上下文词数
window_size = 2
context_size = window_size * 2
# 构建训练样本对(中心词,上下文词)
train_pairs = []
for sequence in sequences:
for i in range(len(sequence)):
center_word = sequence[i]
context_words = sequence[max(0, i - window_size):i] + \
sequence[i + 1:min(i + window_size + 1, len(sequence))]
train_pairs.extend([(center_word, context_word) for context_word in context_words])
# 创建输入和输出列表
input_data = []
output_data = []
for center_word, context_word in train_pairs:
input_data.append(center_word)
output_data.append(context_word)
# 转换为NumPy数组,并进行独热编码处理
input_data = tf.keras.utils.to_categorical(input_data, num_classes=vocab_size)
output_data = tf.keras.utils.to_categorical(output_data, num_classes=vocab_size)
# 定义Word2Vec模型
model = Sequential()
model.add(Embedding(input_dim=vocab_size, output_dim=100)) # 嵌入层
model.add(GlobalAveragePooling1D()) # 全局平均池化层
model.add(Dense(vocab_size, activation='softmax')) # 输出层
# 编译模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# 训练模型
model.fit(input_data, output_data, epochs=10, batch_size=128)
# 获取嵌入矩阵
embedding_matrix = model.get_weights()[0]
# 可以使用 embedding_matrix 进行相似度计算、文本分类等任务
上述代码是一个基本的Word2Vec实现示例,可以根据具体需求进行调整和扩展。
内容由零声教学AI助手提供,问题来源于学员提问