首页 > 其他分享 >(王树森老师课程)【强推】RNN模型和NLP应用

(王树森老师课程)【强推】RNN模型和NLP应用

时间:2022-09-18 15:56:37浏览次数:91  
标签:NLP 强推 ... China LSTM 文本 王树森 向量 字典

目录

一、数据处理

如何将计算机不认识的转化为数字

特征分类

  • 类别特征(Categorical Feature)

    有限集合,当没有大小之分,是并列权重的

  • 数值特征

    如年龄、工资等,有大小之分

image-20220916193354943

由于计算机只能处理数值型特征,因此需要将Gender列和Nationality列转化为计算机能识别的数字

此处Age为数字特征,性别为二元特征(Female:0,Male:1),国际则是多元的类别特征


疑问:二元特征,也算一种特殊的类别特征,为什么不用二维向量表示?


类别特征转化为数字流程(以Nationality为例)

  1. 构建一个字典(US->1,China->2,India->3,German->4,...)

  2. 将特征转化为OneHot编码的向量(假设有197种国籍)

    则每个国籍可以表示为197*1的向量,使用1中的字典查找国际Index(如Index(China)=2),则向量第二维为1,其它为0

    "China"->2->[0,1,...,0]
    
  3. 将每一列的特征(Age,Gender,Nationality)转化为数字后,可以得到:

    如:(Number,[Vector dim=1],[Vector dim=197])
    (35,Male,China)=(35,1,[0,1,...,0])
    

为什么第一个要从0开始?

因为要保存0的编码来代表未知或缺失的国籍,即[0,...,0]来代表

为什么要用OneHot来表示Catogorical特征?

因若不使用Onehot而用1,2,3,...代表US,China,India,...,则在此列特征运算时,”US“+"China"="India",显然是不合理的,而US:[1,0,0,...],China:[0,1,0,...]

US+China=[1,1,0,0,...]更能保留两种类型特征相加的信息

处理文本数据

我们知道了如何处理类别型特征,但对于文本来说,又该如何处理文本文本数据呢?处理文本数据总体可以概括为以下几个步骤:

  • 分词

    以英文为例,将句子分为一个个的单词

    before:
    S="... to be or not to be...".
    after:
    L=[...,to,be,or,not,to,be,...]
    
  • 统计词频

    1.构建一个字典,初始化一个空字典

    image-20220916202349441
    • 若词\(w\)未出现在字典当中,则\(add(w,1)\)添加入字典
    • 否则\(dict[w]=dict[w]+1\)

    2.从而可以得到一个字典

    image-20220916202721774

    3.将字典中单词词频从大到小排序

    image-20220916202829300

    4.再将词频转化为索引Index,转化完后的字典被称为词汇表"vocabulary"

    image-20220916202959558

    由于词汇表通常会添加入一些不寻常的词,如名字、拼写错误的词等,因此需要对词汇表选择,可以在步骤3时截断出现次数\(time>1\)的单词,或设定词表大小为\(V\)

    词表Index通常从1开始计数,原因是为OOV未登录词预留位置,出现时使用0编码

    为什么要去除词表中多余的词?

    1. 加快计算
    2. 减少后续词嵌入的参数
  • One-Hot编码

    得到了vacab即可将分词后的文本转化为向量

    例如:

    words:[to,be,or,not,to,be]
    indices:[2,4,8,1,2,4]
    
    • onehot向量的维度即为Vacab的维度
    • Vacab为含不同词的字典

二、文本处理与词嵌入

IMDB数据集:

文本转化为序列

四个步骤:

  • 分词
  • 构建字典
  • One-Hot编码
  • 序列对齐

分词

分词前需要做的几件事:

  • 大小写
  • 去除停用词
  • 文本纠错

构建字典

image-20220916212530131

One-Hot编码

image-20220916212807971

序列对齐

在对句子进行One-Hot编码后会存在一个问题,句子序列长度不一,有的长有的短

image-20220916212951761

三、SimpleRNN

为什么要使用RNN(Recurrent Neural Networks)?

  • 传统DL模型有全连接网络FC卷积神经网络CNN
  • 上述模型具有局限性
    • 只能一次全部输入来处理数据
    • 输入大小固定
    • 输出大小固定
    • 典型的是One2One模型
      image-20220917134622000
  • 序列数据往往是传统模型不适合处理的(如文本、音频、时间序列)
    image-20220917134742554

RNN模型的基本结构

image-20220917135005687

几个组件:

  • 输入$$x_i(i=0,1,2,...,t)$$
  • 矩阵$$A$$
  • 状态向量$$h_i(i=0,1,2,...,t)$$

初步工作描述:

  1. 输入一句预处理后的句子\(s_1=[the,cat,sat,...,mat]\)
  2. 词嵌入,即将句子转化为句向量\(e_1[embedding\_size*1]\)
  3. 随机初始化矩阵$$A$$和状态向量\(h_i(i=0,1,2,...,t)\)

Simple RNN

image-20220917135448218

内部运算:

image-20220917140822162

\(h\)和\(x\)为向量\(h_t\)和\(x_t\)的维度,\(rand\_matrix\)函数随机初始化一个\(size=(h,h+x)\)的矩阵

\(A=rand\_matrix(matrix\_size=(h,h+x))\)

\(concat\)函数将\(h_{t-1}\)与\(x_t\)拼接

\(h_t=\tanh(A·concat(h_{t-1},x_t))\)

即参数更新过程可视为以下函数:

\(h_t=func(h_{t-1},x_t)\)

tanh函数

image-20220917140856549

函数公式:

\(tanh(x)=\frac{\sinh{x}}{\cosh{x}}=\frac{e^x-e^{-x}}{e^x+e^{-x}}\)

\(tanh\)函数的特点:

  • 将\((-\infty,+\infty)\)的输入压缩到\((-1,1)\)间
  • 输出结果符号不变
  • 单调递增的奇函数,且定义域内可导

若没有\(\tanh\)函数会导致什么?

image-20220917142916581

导致梯度消失或梯度爆炸,在不断地序列输入后最终状态向量会趋于0或区域无穷!

四、LSTM

源论文:Hochreiter and Schmidhuber. Long short-term memory. Neural computation, 1997.

LSTM网络架构图与LSTM对比

image-20220917154507126

从结构图上的区别:

  • 内部更为复杂了
  • 外部还是输出状态向量,但与此同时多了个“箭头”,这个“箭头”是传送带

LSTM的几个重要部件:

  • 传送带(\(C\))
  • 遗忘门(\(f_t\))
  • 输入门(\(i_t\))
  • New Value(\(\widetilde{C_t}\))
  • 输出门(\(o_t\))
  • 状态向量(\(h\))

LSTM:Conveyor Belt

结构图:

image-20220917161428427

传输带做的事:过去的信息通过传输带送到下一个时刻。可以看到传输带上连接了几个朝上的箭头,因此其将几个组件组合起来运算

传输带的重要作用:通过传输带来避免梯度消失的问题

LSTM:Forget Gate

由总到分展开:

Part1对位相乘:

\(f=sigmoid(a)\)此处\(a\)为一个函数

\(output\_1=c\circ{f}\)(对位相乘)

image-20220917164221524

\(Sigmoid\)函数:

image-20220917164420087

特点:

  • 将\((-\infty,+\infty)\)内的值压缩到\((0,1)\)间
  • 函数单调递增可导

Part2:遗忘门(f)

结构图:

image-20220918151458918
  • \(f\)维度和\(c\)和\(h\)相同
  • 向量中Value为0则不让任何“信息”通过(数字代表信息)
  • 向量中Value为1则让任何“信息”通过
  • 遗忘门\(f\)有选择的让\(c\)中的值通过

例如:

image-20220917165511105

Part3:\(W_f\)和拼接向量

\(a\)可以拆解为如下:

image-20220917165809731

\(a=W_f\cdot{concat(h_{t-1},x_t)}\)

其中\(W_f\)可以被学习

总结

数学公式总和一起就是如下:

\[output\_1=c\cdot{f}\\ f=sigmoid(a)\\ a=W_f\cdot{concat(h_{t-1},x_t)} \]

这一过程可以概括为一个函数:

\(output\_forget=func(h_{t-1},x_t,C_{t-1})\)

LSTM:Input Gate

输入门\(i_t\)决定了传送带上哪个值会被更新

Input gate结构图

image-20220917174142729

\(i_t=sigmoid(W_t\cdot{concat(h_{t-1},x_t)})\)

其中\(W_t\)可以被学习

LSTM:New Value

结构图:

image-20220918153118755

\(\widetilde{C_t}=\tanh({W_c\cdot{concat(h_{t-1},x_t)}})\)

其中\(W_c\)可以被学习

LSTM:Update the Conveyor Belt\(C\)

结构图:

image-20220917181956541

\(C_t=f_t\circ{C_{t-1}}+i_t\circ{\widetilde{c_t}}\)

  • 里面集成了遗忘门、输入门和NewValue
  • \(+\)左边部分有选择的让\(C_{t-1}\)信息遗忘,\(+\)右边部分添加新的信息

LSTM:Output Gate

image-20220917180038589

输出门\(o_t\)决定\(C_{t-1}\)流向\(h_t\)的信息

其中\(W_o\)可以被学习

\(o_t=sigmoid(W_o\cdot{concat(h_{t-1},x_t)})\)

LSTM:Update State

image-20220917180825771

\(h_t=o_t\circ\tanh(C_t)\)

\(h_t\)被拷贝成两份,一份成此轮LSTM的输出,另一份被传送到下一步

\(C_t\)中包含了遗忘和增加的信息,因此和输出门结合产生最终的状态向量

最终\(x_t\)向量的所有信息积累在\(h_t\)中

参数数量

image-20220918153710479

标签:NLP,强推,...,China,LSTM,文本,王树森,向量,字典
From: https://www.cnblogs.com/waterpaperer/p/16704907.html

相关文章

  • NLP 基础知识
    NLP基础知识ñ自然语言处理(NLP)是人工智能的一个子集,它处理计算机如何处理和理解自然语言或人类语言。它用于以语音或文本的形式处理人类语言,以便计算机可以使用它......
  • 天煞NLP之我要毕业——实战第一课:新闻文本分类
    赛题之题目:(说实话,题目我都看不太懂,艹) 评测标准:第二个就是评测标准,沃土现在,我只知道f1的值(也就是f1_score越大越好)--_--|  看了几分钟,大概看懂了什么意思:就是......
  • NLP学习
    文本是序列数据的一种最常见的形式之一为了对文本进行预处理,通常将文本拆分成词元,构建词表将词元字符串映射为数字索引,并将文本数据转换为词元索引以供模型操作。......