• 2、自然语言和单词的分布式表示(中)


        目录

    一、基于计数的方法存在的问题

    二、基于推理的方法概要

    三、神经网络中单词的处理方法

     四、简单的word2vec

    1、CBOW模型的推理

    2、CBOW模型的学习


            用向量表示单词的方法大致可以分为两种:一种是基于计数的方法;另一种是基于推理的方法。本节主要讲基于推理的方法。

    一、基于计数的方法存在的问题

            基于计数的方法使用整个语料库的统计数据(共现矩阵和PPMI等),通过一次处理(SVD等)获得单词的分布式表示。而基于推理的方法使用神经网络,通常在mini-batch数据上进行学习。这意味着神经网络一次只需要看一部分学习数据(mini-batch),并反复更新权值。这种学习机制上的差异如图:

            从图中可以看出,基于计数的方法一次性处理全部的学习数据;基于推理的方法使用部分学习数据进行学习。这意味着,在词汇量很大的语料库中,即使SVD等的计算量太大导致计算机难以处理,  神经网络也可以在部分数据上进行学习。

    二、基于推理的方法概要

            基于推理的方法主要操作是“推理”,即当给出周围的单词(上下文)时,预测“?”处会出现什么单词。

             从模型视角来看,推理任务如下图所示:

             也就是基于推理的方法引入了某种模型,我们将神经网络作为这种模型。输入为:上下文,输出为:(可能出现的)各个单词的出现概率。

            在这样的框架下,使用语料库来学习模型,使之能做出正确的预测。另外,作为模型学习的产物,我们得到了单词的分布式表示。

    三、神经网络中单词的处理方法

            也就是将单词转化为固定长度的向量,常用的方法是:采用one-hot编码。例如:

            1、假设语料库中含有7个单词,分别为:"you"、"say"、"goodbye"、"i"、"hello"、"."。要想将单词转化为one-hot表示,就需要准备元素个数与词汇个数相等的向量,将单词ID对应得元素设置为1,其余元素设置为0.

             将单词得向量元素得个数确定下来之后,神经网络中输入层得神经元个数也确定下来了。

             输入层的神经元个数就等于向量的元素个数。

            2、以基于神经网络的全连接层变换为例

             经过一个矩阵的变换之后,将7维的向量压缩为3维。比如:

     四、简单的word2vec

            word2vec中主要使用的两个神经网络:CBOW和skip-gram。本节以CBOW为例。

    1、CBOW模型的推理

            CBOW模型是根据上下文预测目标词的神经网络(“目标词”是指中间的单词,它周围的单词是“上下文”)。

            (1)CBOW模型的网络结构

                   它有两个输入层(上下文仅考虑两个单词),经过中间层到达输出层。这里,从输入层到中间层的变换由相同的全连接层(权重为Win)完成,从中间层到输出层的变换由另一个全连接层(权重为Wout)完成。

            (2)语料库

            语料库:"you"、"say"、"goodbye"、"i"、"hello"、"."。

            (3)转化为one-hot形式

            以"you"、"goodbye"为例:

            you:[1,0,0,0,0,0,0];"goodbye":[0,0,1,0,0,0,0]

            (4)实现CBOW推理

             现在利用CBOW模型可以实现输入上下文,推测目标词了,但是准不准还需要多CBOW模型进行训练。

    2、CBOW模型的学习

            对CBOW模型进行学习只是使用以下softmax函数和交叉熵损失。首先使用softmax函数将得分转化为概率,再求这些概率和监督标签之间的交叉熵误差,并将其作为损失进行学习,这一过程如下图所示:

            word2vec中使用的网络有两个权重,分别是输入侧的全连接层的权重(Win)和1输出侧的全连接层的权重(Wout)。一般而言,输入侧的权重的每一行对应于各个单词的分布式表示,输出侧的权重在列方向上保存了各个单词的分布式表示。如下图所示:

            就word2vec而言,选择输入侧的权重作为单词的分布式表示。

     

  • 相关阅读:
    Django简单介绍
    Python 类型注解
    Spring MVC ViewResolver原理解析
    刷题笔记day10-栈和队列01
    工资总额分配方案
    从网约车平台合规问题看企业合规难题如何破解
    前端:运用HTML+CSS+JavaScript实现拼图游戏
    用 Python 自动创建 Markdown 表格 - 每天5分钟玩转 GPT 编程系列(4)
    Linux多线程C++版(七) 线程互斥方式-----读写锁
    fastadmin中引入 elementui
  • 原文地址:https://blog.csdn.net/qq_55202378/article/details/127669227