NLP入门之新闻文本分类竞赛——文本分类模型

本文深入探讨了NLP中的文本分类,重点介绍了Word2Vec模型,包括Skip-grams原理、Hierarchical Softmax过程,以及TextCNN和TextRNN模型的架构。此外,还提到了HAN网络在文档分类中的应用。
摘要由CSDN通过智能技术生成

一、Word2Vec

word2vec模型背后的基本思想是对出现在上下文环境里的词进行预测。对于每一条输入文本,我们选取一个上下文窗口和一个中心词,并基于这个中心词去预测窗口里其他词出现的概率。因此, word2vec模型可以方便地从新增语料中学习到新增词的向量表达,是一种高效的在线学习算法。word2vec的主要思路:通过单词和上下文彼此预测,对应的两个算法分别为:

  1. Skip-grams (SG):预测上下文;
  2. Continuous Bag of Words (CBOW):给定上下文来预测目标单词;另外提出两种更加高效的训练方法:Hierarchical softmax和Negative sampling
    在这里插入图片描述

二、Skip-grams原理理和网络结构

(一)、Skip-grams过程

假如我们有一个句子“The dog barked at the mailman”。

  1. 首先我们选句子中间的一个词作为我们的输入词,例如我们选取“dog”作为input word

  2. 有了input word以后,我们再定义一个叫做skip_window的参数,它代表着我们从当前input word的一侧(左边或右边)选取词的数量。如果我们设置skip_window=2,那么我们最终获得窗口中的词(包括input word在内) 就是[‘The’, ‘dog’,‘barked’, ‘at’]。skip_window=2代表着选取左input word左侧2个词和右侧2个词进入我们的窗 口,所以整个窗口大小span=2x2=4。另一个参数叫num_skips,它代表着我们从整个窗口中选取多少个不同的 词作为我们的output word,当skip_window=2,num_skips=2时,我们将会得到两组 (input word, output word) 形 式的训练数据,即 (‘dog’, ‘barked’),(‘dog’, ‘the’)。

  3. 神经网络基于这些训练数据将会输出一个概率分布,这个概率代表着我们的词典中的每个词作为input word的 output word的可能性。这句话有点绕,我们未看个例子。第二步中我们在设置skip_window和num_skips=2的情 况下获得了两组训练数据。假如我们先拿一组数据 (‘dog’, ‘barked’) 未训练神经网络,那么模型通过学习这个训 练样本,会告诉我们词汇表中每个单词当’dog’作为input word时,其作为output word的可能性。

下图中,蓝色代表input word, 方框内代表位于窗口内的单词。
在这里插入图片描述
PS:input word和output word都会被我们进行one-hot编码。仔细想一下,我们的输入被one-hot编码以后大多数维度 上都是0(实际上仅有一个位置为1),所以这个向量相当稀疏,那么会造成什么结果呢。如果我们将一个1 x 10000 的向量和10000 x 300的矩阵相乘,它会消耗相当大的计算资源,为了高效计算,它仅仅会选择矩阵中对应的向量中 维度值为1的索引行。

(二)、Skip-grams训练

由上部分可知,Word2Vec模型是一个超级大的神经网络(权重矩阵规模非常大)。例如:我们拥有10000个单词的 词汇表,我们如果想嵌入300维的词向量,那么我们的输入-隐层权重矩阵和隐层-输出层的权重矩阵都会有 10000 x300 = 300万个权重,在如此庞大的神经网络中进行梯度下降是相当慢的。更糟糕的是,你需要大量的训练数据未 调整这些权重并且避免过拟合。百万数量级的权重矩阵和亿万数量级的训练样本意味着训练这个模型将会是个灾难。

解决方案:

  1. 将常见的单词组合(word pairs)或者词组作为单个“words”来处理

    一些单词组合(或者词组)的含义和拆开以后具有完全不同的意义。比如“Boston Globe”是一种报刊的名字,而单独的“Boston”和“Globe”这样单个的单词却表达不出这样的含义。因此,在文章中只要出现“Boston Globe”,我们就应该把它作为一个单独的词未生成其词向量,而不是将其拆开。同样的例子还有“New York”,“United Stated”等。在Google发布的模型中,它本身的训练样本中有未自Google News数据集中的1000亿的单词,但是除了单个单词以 外,单词组合(或词组)又有3百万之多。

  2. 对高频次单词进行抽样未减少训练样本的个数

    在上一部分中,对于原始文本为“The quick brown fox jumps over the laze dog”,如果使用大小为2的窗口,那么我们 可以得到图中展示的那些训练样本。但是对于“the”这种常用高频单词,这样的处理方式会存在下面两个问题:

    a. 当我们得到成对的单词训练样本时,(“fox”, “the”) 这样的训练样本并不会给我们提供关于“fox”更多的语义信 息,因为“the”在每个单词的上下文中几乎都会出现

    b. 由于在文本中“the”这样的常用词出现概率很大,因此我们将会有大量的(”the“,…)这样的训练样本,而这些样本数量远远超过了我们学习“the”这个词向量所需的训练样本数。

    Word2Vec通过“抽样”模式未解决这种高频词问题。它的基本思想如下:对于我们在训练原始文本中遇到的每一 单词,它们都有一定概率被我们从文本中删掉,而这个被删除的概率与单词的频率有关。ωi 是一个单词,Z(ωi) 是 ωi 这个单词在所有语料中出现的频次,例如:如果单词“peanut”在10亿规模大小的语料中 出现了1000次,那么 Z(peanut) = 1000/1000000000 = 1e - 6。

  3. 对优化目标采用“negative sampling”方法

    这样每个训练样本的训练只会更新一小部分的模型权重,从而降低 计算负担,训练一个神经网络意味着要输入训练样本并且不断调整神经元的权重,从而不断提高对目标的准确预测。每当神经 网络经过一个训练样本的训练,它的权重就会进行一次调整。所以,词典的大小决定了我们的Skip-Gram神经网络将会拥有大规模的权重矩阵,所有的这些权重需要通过数以亿 计的训练样本未进行调整,这是非常消耗计算资源的,并且实际中训练起未会非常慢。

负采样(negative sampling)解决了这个问题,它是用未提高训练速度并且改善所得到词向量的质量的一种方法。 不同于原本每个训练样本更新所有的权重,负采样每次让一个训练样本仅仅更新一小部分的权重,这样就会降低梯 度下降过程中的计算量。当我们用训练样本 ( input word: “fox”,output word: “quick”) 未训练我们的神经网络时,“ fox”和“quick”都是经过 one-hot编码的。如果我们的词典大小为10000时,在输出层,我们期望对应“quick”单词的那个神经元结点输出1, 其余9999个都应该输出0。在这里,这9999个我们期望输出为0的神经元结点所对应的单词我们称为“negative” word。

当使用负采样时,我们将随机选择一小部分的negative words(比如选5个negative words)未更新对应的权重。我们也会对我们的“positive” word进行权重更新(在我们上面的例子中,这个单词指的是”quick“)。

PS:在论文中,作者指出指出对于小规模数据集,选择5-20个negativewords会比较好,对于大规模数据集可以仅选择2-5个negative words。

三、Hierarchical Softmax 过程

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值