循环神经网络(Recurrent Neural Network)
注意用来处理序列问题(Sequence)
Sequence embedding ==>> [b, seq_len, feature_len] # b个句子,每个句子数量seq_len,每个单词为feature_len的长度。
要理解在大文本的数据集中为什么要选用word embedding这种方法,而不是用one-hot编码。
主是是one-hot编码有如下几个缺点:
- spare,在处理较多文本数据集的时候会有较多的位置为0
- high-dim,一段文本基本上都有成百上千个单词
- semantic,one-hot编码不能满足语言相关性
- trainable,都是1怎么训练啊。。。
常用Embedding方法,Word2Vec和Glove
Word Embedding
将一系列单词转换为向量空间
这里的index就是词表中单词的映射,比如0代表love,1代表you,等等,所以在将文本转换成num时一般用dict会比较常见。
Embedding Layer: Random initialized embedding
import tensorflow as tf
from tensorflow import keras
x = tf.range(5)
x = tf.random.shuffle(x)
net = keras.layers.Embedding(10, 4) # 第一个为总单词的数量,第二个为每个单词的长度,这里注意因为embedding有10个单词,所以需要embedding的单词向量不得有大于10的数,否则会报错。比如这里传入的x为 tf.range(3, 12)就会报错
net(x) # return的shape为[5, 4],随机化的embedding,后期经过神经网络可以训练优化数值
# net另外一些方法
net.trainable
net.trainable_variables # net是可以多次使用的,这里返回时[10, 4]的矩阵
Sentiment Analysis(情感分析)
Consistent memory
将所有的信息传递下去,模范人的语义理解常见,这里H5包含了从h1到h5的信息量,最终用于预测。
这里也用到CNN中权值共享的思想。
RNN的数学形式
ht一般可以作为最后的输入,其输出方式各种各样,也可做一次全连接层再作为输出。
循环神经网络常用tanh函数作为激活函数。