将词向量表示应用在情感分类上的代码
时间: 2023-08-18 20:06:11 浏览: 45
好的,以下是一个简单的使用词向量表示进行情感分类的代码示例:
```python
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequences
from keras.models import Sequential
from keras.layers import Dense, Dropout, Embedding, LSTM
# 加载数据
data = pd.read_csv('sentiment_data.csv')
texts = data['text'].astype(str)
labels = data['label']
# 构建词汇表
tokenizer = Tokenizer(num_words=2000)
tokenizer.fit_on_texts(texts)
sequences = tokenizer.texts_to_sequences(texts)
# 对齐序列
maxlen = 100
padded_sequences = pad_sequences(sequences, maxlen=maxlen)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(padded_sequences, labels, test_size=0.2, random_state=42)
# 加载预训练的词向量
word_embeddings = {}
with open('glove.6B.100d.txt', encoding='utf-8') as f:
for line in f:
values = line.split()
word = values[0]
coefs = np.asarray(values[1:], dtype='float32')
word_embeddings[word] = coefs
# 构建词向量矩阵
embedding_dim = 100
word_index = tokenizer.word_index
num_words = min(len(word_index) + 1, 2000)
embedding_matrix = np.zeros((num_words, embedding_dim))
for word, i in word_index.items():
if i >= 2000:
continue
embedding_vector = word_embeddings.get(word)
if embedding_vector is not None:
embedding_matrix[i] = embedding_vector
# 构建模型
model = Sequential()
model.add(Embedding(num_words, embedding_dim, weights=[embedding_matrix], input_length=maxlen, trainable=False))
model.add(LSTM(100, dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# 训练模型
model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=10, batch_size=32)
```
说明:
- `sentiment_data.csv`是包含文本和标签的数据集文件,需要根据实际情况替换。
- `glove.6B.100d.txt`是预训练的词向量文件,需要下载并根据实际情况指定路径。
- 该代码使用了Keras深度学习库来构建模型。
- 首先使用`Tokenizer`将文本转换为整数序列,然后使用`pad_sequences`对齐序列。
- 然后将预训练的词向量加载到内存中,构建词向量矩阵,并将其用作嵌入层的权重。
- 最后,构建LSTM模型并训练它,使用交叉熵损失和Adam优化器进行编译。