RNN模型与NLP应用(2):文本处理与词嵌入

前文-电影评论情感分析

这篇主要讲述从文本处理到词嵌入,输出的一个流程,从一个电影评论的情感分析数据集来展开
请添加图片描述

文本处理

分词需要做大量的处理-----注意事项
是否要将大写字母转化为小写字母
去除停顿词. the a of
拼写错误
step1:分词
请添加图片描述
step2:建立词典
在这里插入图片描述
step3:one-hot encoding
电影评论有长有短,这说明数据没有对齐
在这里插入图片描述
step4:对齐句子
假定w=7,一个句子如果超过了7,将前面的截断,保留后面w个词,同时也可以保留前面词,截断后面的词,如果这个句子比w还短,则在前面pad it with zeros,这样都可以存储在一个矩阵里面请添加图片描述

Word Embedding:Word to Vector

请添加图片描述
请添加图片描述
d是词向量的维度,自己设置的,v是词汇表的大小
我们的任务是学习训练出来的词向量会带有感情色彩,就比如好的感情色彩的词应该在一块,则它们的词向量应该相似

请添加图片描述
请添加图片描述
Logistic Regression for Binary Classification

from keras.models import Sequential
from keras.layers import Flatten,Dense,Embedding
embedding_dim=8
model=Sequential()# 把神经网络的层按顺序搭起来
model.add(Embedding(vocabulary,embedding_dim,input_length=word_num)) # 第一层为embedding层
model.add(Flatten()) # 将上面的20*8的矩阵压平成一维向量,变成160维的向量
model.add(Dense(1,activation='sigmoid'))# 全连接层输出的是一维,用sigmoid的激活函数
model.summary()# 打印出模型的概要

请添加图片描述

整个流程图示

利用word Embedding层将每个单词映射到低维向量,所以每个长度为20的电影评论都可以被Flatten成160维向量,最后用线形分类回归器分成0和1的数,0代表负类评论,1代表正类评论请添加图片描述
可以看到分类器有160个参数,加上偏置参数,总共有161个参数
请添加图片描述

代码实现

环境配置:我的版本是tensorflow1.5.0+keras2.1.4, 其它版本可能会遇到点问题
数据集:
链接: https://pan.baidu.com/s/1us7AXURRpCoxgQY65YOylg
提取码: data
使用自带的IMDB数据库实现如下:

from keras.preprocessing.text import Tokenizer
from keras.preprocessing import sequence


import os
from keras.datasets import imdb
from keras import preprocessing

'举例操作:将词典和index对应'
samples = ['He is an engineer.', 'He uses PC to work.']

tokenizer = Tokenizer(num_words=1000)  # 创建分词器,设置为只考虑前1000个最常见的单词
# num_words设置成 vocabulary,最后返回的是最常见的、出现频率最高的num_words个字词
# 需要保留的最大词数,基于词频。只有最常出现的 num_words 词会被保留,
tokenizer.fit_on_texts(samples)  # 构建单词索引,为每个单词分配一个整数(根据词典标签)
# 只有前1000个词频最高的词才会被保留,相当于根据samples的内容,分配索引(每个词对应一个整数)
# fit_on_texts使用一系列文档来生成token词典,texts为list类,每个元素为一个文档。
# #num_words:处理的最大单词数
# print(tokenizer.fit_on_texts(samples))
sequences = tokenizer.texts_to_sequences(samples)  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值