文本分类——Embedding、CNN、RNN练手

本文详细介绍了使用Kaggle电影评论数据集进行情感分析的过程,从词向量表示方法(如Word2Vec、GloVe)到CNN和RNN模型构建,涵盖了数据预处理、模型训练及评估的关键步骤。

说明

  • 本文是方法记录,不是完整的项目过程(在我Jupyter上,数据前期预处理部分懒得搬了),也没有调参追求准确度(家里电脑跑不动)。
  • 参考任务来源于Kaggle,地址:电影评论情感分类
  • 本文参考了不同的资料来源,包括斯坦福CS224N的课程资料,网上博客,Keras官方文档等

任务核心部分

1.单词表示

1.1 理论部分

对大部分(或者所有)NLP任务,第一步都应该是如何将单词表示成符合模型所需要的输入。最直接的思路就是将单词(符号)变为词向量。

词向量的表示方法:

  • one-hot 编码:想法直接,但过于稀疏,且词与词之间正交,无法衡量词之间的相似度

  • 基于矩阵分解的方法:比如不同词窗的矩阵,进行SVD分解,得到相应的向量表示。但问题在于矩阵会很大,占用空间。而且加入新的文本需要重新计算,计算成本也高。

  • Word2vec:这部分内容有点多。这部分核心思想:

    Distributional semantics: A word’s meaning is given by the words that frequently appear close-by

    即使用词语的上下文来表示其语义。最直接的是N-gram的想法,接着就是word2vec。
    放一张听课截图:
    在这里插入图片描述
    还要补充给一个Glove,是将word2vec的想法以及co-currence matrix结合的一种方法。
    具体解释可以看这个链接,Glove介绍

    1.2 代码部分
    • 导入预训练的模型
from gensim.test.utils import datapath, get_tmpfile
from gensim.models import KeyedVectors
from gensim.scripts.glove2word2vec import glove2word2vec

glove_file = datapath('C:\\Users\\Administrator\\Documents\jupyter\\2019 最新斯坦福CS224n课件\\1、Introduction and Word Vectors\\glove.6B.100d.txt')
word2vec_glove_file = get_tmpfile("glove.6B.100d.word2vec.txt")
glove2word2vec(glove_file, word2vec_glove_file)
model = KeyedVectors.load_word2vec_format(word2vec_glove_file)
help(model)

这种方式,就可以通过model得到词向量,通过help也可以知道其他操作,计算相似度啥的。具体参照斯坦福课程资料第一讲。

  • Tensorflow中的文本预处理
from tensorflow.keras.preprocessing.text import Tokenizer 
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.utils import to_categorical

def word_encoder(text,label,max_,max_len = 50):
	'''
	输入:
	text:原始文本,一个个句子的列表。
	label:文本的标签
	max_:分词后根据词频取前max_个词
	max_len:得到序列的最大长度
	
	输出:
	文本序列、标签(one-hot)、序列对应的字典
	'''
    tokenizer = Tokenizer(nb_words=max_) #根据词频取top n个词
    tokenizer.fit_on_texts(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值