Keras + LSTM + 词向量 情感分类/情感分析实验

本文介绍了使用Keras和LSTM进行情感分类的实验过程,结合word2vec词向量对中文购物评论进行预处理,包括数据处理、词向量生成及模型训练。实验数据源自多个领域的购物评论,通过调整Word2vec的词频阈值,筛选词语。最终,利用Keras构建的LSTM模型进行文本分类。
摘要由CSDN通过智能技术生成

背景简介

本人是深度学习入门的菜菜菜鸟一枚…
利用LSTM + word2vec词向量进行文本情感分类/情感分析实验,吸收了网上的资源和代码并尝试转化为自己的东西~

实验环境

  • win7 64位系统
  • Anaconda 4.3.0 , Python 2.7 version
  • Pycharm开发环境
  • python包:keras,gensim,numpy等

实验数据

本文的实验数据是来自网上的中文标注语料,涉及书籍、酒店、计算机、牛奶、手机、热水器六个方面的购物评论数据,具体介绍参见该文:购物评论情感分析

数据处理

上面提到的数据在网上见到的次数比较多,原始格式是两个excel文件,如图:
两个excel

对,就是这两个…估计来到本文的小伙伴也见过。一些代码就是直接从这两个excel里读取数据、分词、处理…不过我表示自己习惯从txt文本里获取数据,因此本人将数据合并、去重(原数据里有不少重复的评论)、分词(用的是哈工大LTP分词)之后存为一份txt文本,保留的数据情况如下:

正面评价个数:8680个
负面评价个数:8000个

文本如图所示:
这里写图片描述

然后人工生成一份【语料类别】文本,用1表示正面评价,用0表示负面评价,与评论数据一一对应。

生成词语的索引字典、词向量字典

利用上述文本语料生成词语的索引字典和词向量字典。
注意:当Word2vec词频阈值设置为5时,词频小于5的词语将不会生成索引,也不会生成词向量数据。

工具:gensim里的Word2vec,Dictionary

代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
功能:利用大语料生成词语的索引字典、词向量,然后保存为pkl文件
时间:2017年3月8日 13:19:40
"""

import pickle
import logging
import tkFileDialog

import numpy as np
np.random.seed(1337)  # For Reproducibility

from Functions.TextSta import TextSta
from gensim.models.word2vec import Word2Vec
from gensim.corpora.dictionary import Dictionary

# 创建词语字典,并返回word2vec模型中词语的索引,词向量
def create_dictionaries(p_model):
    gensim_dict = Dictionary()
    gensim_dict.doc2bow(p_model.vocab.keys(), allow_update=True)
    w2indx = {v: k + 1 for k, v in gensim_dict.items()}  # 词语的索引,从1开始编号
    w2vec = {word: model[word] for word in w2indx.keys()}  # 词语的词向量
    return w2indx, w2vec

# 主程序
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)

print u"请选择大语料的分词文本
  • 26
    点赞
  • 161
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
好的,以下是一个简单的使用词向量表示进行情感分类的代码示例: ```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优化器进行编译。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值