1.语言模型(Language Modeling)

1.1 传统语言模型

    定义:基于n-grams的概率模型,通过条件概率链式法则不断找出概率最高的单词,以生成句子

            

rknn运行大语言模型_rknn运行大语言模型

    原理:n-grams

        缺点:

            (1)对于长距离依赖关系,需要大量的n-gram来捕捉语义信息

            (2)需要大量存储空间

            

rknn运行大语言模型_rknn运行大语言模型_02

1.2 基于RNN的语言模型

    RNN优点:

        (1)解决长距离依赖问题,能考虑之前全部单词

        (2)共享参数,减少内存使用

        

rknn运行大语言模型_语言模型_03

    RNN基本结构:

        

rknn运行大语言模型_数据_04


2.循环神经网络(RNN)

2.1 基本原理

    构成:

        输入:上一层结果

rknn运行大语言模型_语言模型_05

  和 当前输入

rknn运行大语言模型_rknn运行大语言模型_06

        参数:所有结点共用三组参数

rknn运行大语言模型_rknn运行大语言模型_07


rknn运行大语言模型_显式_08


rknn运行大语言模型_语言模型_09

,和偏置

rknn运行大语言模型_语言模型_10

        输出:当前层显式输出

\hat{y}^{<t>}

;当前层隐式输出

h^{<t>}

           

rknn运行大语言模型_数据_13

    计算流程:

        (1)首先将输入

rknn运行大语言模型_语言模型_05

与入

rknn运行大语言模型_rknn运行大语言模型_06

分别乘相应的参数

rknn运行大语言模型_rknn运行大语言模型_07


rknn运行大语言模型_显式_08

,再经过激活函数g(),得到当前层隐式输出

h^{<t>}

,如下式:                   

rknn运行大语言模型_语言模型_19

        (2)得到的

h^{<t>}

再成参数

rknn运行大语言模型_语言模型_09

,经过激活函数g(),得到当前层显式输出

\hat{y}^{<t>}

,如下式:                     

rknn运行大语言模型_语言模型_23

           

rknn运行大语言模型_数据_24

    损失函数:

        交叉熵损失函数:比较各层显式输出和真实结果的差异,再进行平均

       

rknn运行大语言模型_语言模型_25

2.2 RNN的应用

    一对一(One to One):

        输入一个数据,输出一个结果;如冠军预测,输入比分,输出冠军人选

        

rknn运行大语言模型_显式_26

    一对多(One to Many):

        输入一个数据,输出多组结果;如图片注解,输入一个图片,输出其文字描述

        

rknn运行大语言模型_rknn运行大语言模型_27

    多对一(Many to One):

        输入多组数据,输出一个结果;如情感分析,输入一段话,输出其情感

        

rknn运行大语言模型_数据_28

    多对多(Many to Many):

        输入多组数据,输出多组结果;如机器翻译,输入一段话,输出翻译后的一段话

        

rknn运行大语言模型_显式_29

2.3 常见RNN结构

2.3.1 门控循环单元(Gated Recurrent Units,GRU)

    基本概念:

        定义:每一单元内含两种门,即重置门(reset gate)和更新门(update gate),分别控制记忆和更新

        重置门

rknn运行大语言模型_数据_30

:计算有多少过去信息需要被遗忘,有助于保存重要内容,遗忘不重要内容        更新门

rknn运行大语言模型_显式_31

:计算有多少信息需要被传递到下一步,决定如何更新隐式输出        

rknn运行大语言模型_rknn运行大语言模型_32

    比较:RNN vs GRUs

        GRU有更强的记忆力,能有效避免梯度消失问题

        

rknn运行大语言模型_显式_33

    例子:可以看出,GRU能很好解决长距离依赖问题,记住了之前词是复数形式

        

rknn运行大语言模型_rknn运行大语言模型_34

2.3.2 双向RNN(Bi-directional RNNs)

    定义:从正反两个方向分别计算,各位置输出由两方向结果共同决定

    功能:解决了普通RNN只考虑前向依赖,不考虑后向依赖的问题

    注意:两个方向同时独立进行计算,相互之间没有顺序关系

        

rknn运行大语言模型_rknn运行大语言模型_35

2.3.3 深度RNN(Deep RNNS)

    定义:将多个RNN垂直堆叠,从下至上依次计算

    功能:由于深度的加深,能更有效的处理复杂问题

        

rknn运行大语言模型_rknn运行大语言模型_36


项目代码:https://github.com/Ogmx/Natural-Language-Processing-Specialization

可将代码与数据下载至本地,使用jupyter notebook打开