一、RNN模型 与 NLP应用 —— 数据预处理

一、RNN模型 与 NLP应用 —— 数据预处理

前言

本文为 王树森教授的《RNN模型与NLP应用》授课学习笔记

数据处理简介:

主要为文本数据的处理过程. 文本数据包含数值化描述(Numeric Features), 和类别化描述(Categorical Features).

数值化描述如年龄, 数值之间是有大小关系的, 比如50岁比30岁大.

类别化描述如性别、国籍, 需要转化为数值化描述, 才能被计算机处理.

类别化描述使用one-hot编码方式, 可以避免大小之分, 其中0作为保留编码, 用于表示缺失的或者未知的数据. one-hot向量的长度由类别数量决定, 且one-hot编码形成的输入矩阵非常稀疏, 因此存储和计算效率低.

文本处理的步骤(1.-5.):

  1. Tokenization(Text to Words) – 单词分割
    词分割, 将文本分割成单独的序列词汇 Token.

要注意: 大写是否要转为小写(Apple or apple);移除断句符, the、a、of等;错误拼写修正(goood or good).

一、RNN模型 与 NLP应用 —— 数据预处理
2. Build Dictionary – 统计频率
即计算每个单词出现的频率. 然后按照词频由高到低进行排序. 排序后, 每个单词的索引, 可以用于表示该单词. 文本中单词的集合, 被称为词汇表, vocabulary. 保留词汇表中的高频词, 删除低频词, 因为低频词有可能是名字、错误拼写. 另一方面, 去掉低频词, 可以有效降低词汇表one-hot编码的维度, 减小overfiting的可能. 由于去掉了低频词, 文本词分割后, 进行one-hot编码时, 会出现词汇表中没有的词(如被去掉的低频词), 可以忽略或者用0编码. 一、RNN模型 与 NLP应用 —— 数据预处理
3. One-Hot Encoding
将文本, 转为用词汇表索引表示的sequence, 如有必要, 将索引进一步转为one-hot 编码, 编码后每个单词都是vocabulary个维度.

一、RNN模型 与 NLP应用 —— 数据预处理
4. Align Sequences – 对齐 Sequences
由于不同的训练样本(文本)有长有短, 它们转为sequence后也有长有短. 为了把所有的文本存储在tensor中, 必须要求所有文本都一样长.

一、RNN模型 与 NLP应用 —— 数据预处理
设置一个固定长度, 如果长于这个长度的文本, 截取开头或者末尾; 如果短于这个长度的文本, 用0补齐.

一、RNN模型 与 NLP应用 —— 数据预处理
5. Word Embedding: word to vector
一、RNN模型 与 NLP应用 —— 数据预处理

由于one-hot的编码方式, 具有稀疏、效率低的特点, 所以进一步进行转化word embedding:

一、RNN模型 与 NLP应用 —— 数据预处理

Embedding编码矩阵P: 将单个ont-hot映射为单个词向量

其中, e i e_i e i ​为第i i i个单词的one-hot编码, d d d为设置的词向量维度(为超参数), v v v为词汇表的长度, P P P是可学习的参数矩阵, x i x_i x i ​为词向量.

如果e i e_i e i ​中第3个元素为1, 则x_i就是P T P^T P T中的第3列(即P^T的每一列都是词向量). 所以P P P的每一行为一个词向量x i x_i x i ​. 用P P P对e i e_i e i ​进行二次编码, 大大降低了e i e_i e i ​的维度.

参数矩阵P P P是从训练文本中学习出来的, 所以P P P是带有感情色彩的特征提取矩阵. 如果正面词的one-hot经过矩阵映P射得到的词向量x i x_i x i ​为二维向量, 则词性相同的词都分布在一起, 并且词性相反的词距离很远, 中性词分布在中间且远离褒义词和负面词.

一、RNN模型 与 NLP应用 —— 数据预处理

; 使用逻辑回归(LR)训练情感分类: – 效果不好

from keras.models import Sequential
from keras.layers import Flatten, Dense, Embedding

embedding_dim = 8
word_num = 20
model = Sequential()
model.add(Embedding(vocabulary, embedding_dim, input_length=word_num))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
model.summary()

from keras import optimizers
epochs = 50
model.compile(optimizer=optimizers.RMSprop(lr=0.0001),
              loss='binary_crossentropy', metrics=['acc'])

history = model.fit(x_train, y_train, epochs=epochs,
                  batch_size=32, validation_data=(x_vaild, y_vaild))

loss_and_acc = model.evaluate(x_test, labels_test)

一、RNN模型 与 NLP应用 —— 数据预处理

Simple RNN

FCN和ConvNet的限制: one-to-one模型, 一个输入对一个输出

  1. 一次性输入的是整个样本数据
  2. 固定输入和输出

RNN为 many-to-one 或者 many-to-many 输入和输出的长度不固定. RNN适合小规模问题可以, 大规模问题需要用Transformer. Simple RNN的详情见: 二、RNN模型 与 NLP应用 —— Simple RNN.

Original: https://blog.csdn.net/weixin_43667730/article/details/124248771
Author: 地瓜你个大番薯
Title: 一、RNN模型 与 NLP应用 —— 数据预处理

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/691215/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球