Please enable JavaScript.
Coggle requires JavaScript to display documents.
RNN的一般步骤 (1.数据处理阶段 (1.将文本量化为特征 (分类 (Word Embedding (获取方式 (训练方法 (Glove词向量…
RNN的一般步骤
1.数据处理阶段
1.将文本量化为特征
-
分类
one-hot embedding
步骤
- 建立词典,将需要放进词典的词都放进去,外加一个<UNK>作为未知词词,一个<EOS>作为语句结束符
- 将需要转换成embedding的词插词典后将对应index转换成one-hot embedding,如果查不到,就用<UNK>的embedding
缺点
每个单词都是独立的、正交的,无法知道不同单词之间的相似程度
Word Embedding
概述
引入特征表征(Featurized representation),生成词向量(Word Embeddings)
优点
- 在词向量空间内可以通关向量之间的关系表示词与词的关系
- 当新词组出现时,通过与旧有字典比较,就能得出新词组的特征向量
获取方式
大概方向
- 从海量词汇库中学习word embeddings,即所有单词的特征向量。或者从网上下载预训练好的word embeddings
- 使用较少的训练样本,将word embeddings迁移到新的任务中
- (可选):继续使用新数据微调word embeddings。建议仅当训练样本足够大的时候,再进行
训练方法
LSA
将文档和单词的共现矩阵,也就是行是文档,列是单词,第i行第j列,表示文档i中是否包含单词j(具体是词频还是是否出现记不清楚了,不过不影响)。然后通过SVD矩阵分解的方式就能够得到两组向量,分别表示文档的向量(可以用来做文本距离)和单词的向量。(这种方法相对于word2vector的优势就是利用了词共现的信息,也就是不仅仅只关注word2vector窗口大小的上下文,而是用到了全局信息)
-
Glove词向量
概述
Glove是LSA和Word2Vev的结合,就是Word2Vec基础上加重了词共同出现的权重?Word2Vec是根据频率优化的啊,还是说共现矩阵的窗口要大一点?
原理
- Xij: 表示i出现在j之前的次数,即i和j同时出现的次数
- 出现频率较大的单词相应的权重因子f(Xij)较大,出现频率较小的单词相应的权重因子f(Xij)较小一些
-
Embedding matrix
- 通过one-hot编码和词向量相乘,得出带词向量的字典
- 但因为上面的结果很多都为0(因为字典词数远大于句子词数),所以通常做法是直接从E中选取第w列作为ew
-
2. RNN阶段
1. 将单词依次输入模型
a0,x1为初始值,一般为0,x2输入为y1,意在输入正确预料并得出对应y_hat
2. 输出阶段
分类
-
Encoder-Decoder
问题
怎样找到概率最大的序列
解决方法
-
-
贪婪搜索(Greedy Search)
-
优缺点
- 每一个神经元都必须是最优解
- 计算量最小,找到的概率也是最小的
-
问题描述
生成序列的问题在数学上的理解就是找到概率最大的序列,但是要在这么多种可能中,怎么找到概率最大的序列
数值下溢问题
描述
从生成序列的原理(包括朴素贝叶斯)可知,为了找到概率最大的序列,要每个神经元输出的概率相乘,最后得出最终的序列概率,但是因为每个神经元输出的概率都远小于1,所以当序列足够多的时候,最后的概率就会非常小,就会造成数值下溢问题,而且浮点数并不准确,比较也会有问题
解决步骤
- 添加log函数,把乘积变成相加
- 添加log函数后单调性不变,而且在1以下的log值变化明显
- 但是因为加的都是负数,那就意味着句子越短,结果越大,为了避免这种有明显趋向性的结果,所以做了个平均
- 为了控制归一化的程度,给Ty乘以一个Altha次方,这个是个HyperParameter
时序递归神经网络对句子的理解和人类不一样
描述
人类理解句子都是读一小段然而理解(翻译),但时序递归神经网络是整段读完再理解(翻译)的,这和人类认知不一样
-
概述
整个序列y的联合分布分解为一系列单步的概率预测是捕获关于整个序列完整联合分布的一种方法
-
3.预测阶段
步骤
-
-
3.前一个时序的输出y_hat作为后一个时序的输入
随机生成开始单词,随后输入作为下一个输出,意在得出一个向前一个单词看概率最高的句子
-
4. 计算损失
概述
根据前面正确的输入得出y_hat,然后通过计算y和y_hat的交叉熵,然而修正模型中的权重
特征
- 不能通过并行来降低训练时间,因为钱箱传播图是固有循序的