step by step带你RCNN文本分类

本文参考原文-http://bjbsair.com/2020-03-25/tech-info/6304/
**传统文本分类
**



之前介绍的都是属于深度神经网络框架的,那么在Deep Learning出现或者风靡之前,文本分类是怎么做的呢?

传统的文本分类工作主要分为三个过程:特征工程、特征选择和不同分类机器学习算法。

1.1 特征工程

对于文本数据的特征工程来说,最广泛使用的功能是bag-of-words、tf-idf等。此外,还可以设计一些更复杂的特征,比如词性标签、名词短语以及tree kernels等。

1.2 特征选择

特征选择旨在删除噪声特征,提高分类性能。最常见的特征选择方法比如去停词(例如,“The”)、信息增益、互信息或L1正则化等以选择有用的特性。

1.3 机器学习算法

机器学习算法常用分类器,如逻辑回归(LR)、朴素贝叶斯(NB)和支持向量机(SVM)。然而,这些方法都存在数据稀疏问题。

RCNN论文概述

论文来自Recurrent Convolutional Neural Networks for Text Classification[1]

作者在论文中首先对比了传统文本分类算法与深度学习算法。

传统的特征表示方法往往忽略文本中的上下文信息或词序,对于捕捉词的语义仍然不满意。例如,在句子,A sunset stroll along the South Bank affords an array of stunning vantage points中,当我们分析“Bank”(unigram)这个词时,我们可能不知道它是指金融机构还是河旁。此外,“South Bank”(bigram),尤其是考虑到两个大写字母,可能会误导那些对伦敦不太了解的人,把它当作金融机构。当我们获得更大的上下文“stroll along the South Bank”(5-gram),我们就能很容易地辨别出它的意思。虽然高阶n-grams和更复杂的特性(如树内核)被设计用于捕获更多的上下文信息和单词序列,但它们仍然存在数据稀疏问题,这严重影响了分类的准确性。近年来,经过预先训练的word embedding和深层神经网络的快速发展,给各种NLP任务带来了新的启发。word embedding是单词的一种分布式表示,极大地缓解了数据稀疏问题(Bengio et al. 2003)。预先训练的词嵌入可以捕捉有意义的句法和语义规律性。

接着对目前应用较为广泛的深度学习框架算法进行了综述:

  • Socher et al 提出递归神经网络(RecursiveNN),在构建句子表示方面已被证明是有效的。然而,递归通过树结构捕获了一个句子的语义。它的性能很大程度上取决于文本树结构的性能。此外,构造这样一种文本树的时间复杂度至少为,其中n为文本的长度。当模型遇到长句或文档时,这将是非常耗时的。此外,两个句子之间的关系很难用树结构来表示。因此,递归不适合对长句或文档建模。
  • 另一种模型,循环神经网络(RNN),模型时间复杂度为。该模型通过逐字分析一个文本单词,并将所有先前文本的语义存储在一个固定大小的隐藏层中。RNN的优点是能够更好地捕捉上下文信息。这可能有利于捕获长文本的语义。然而,RNN是一个有偏倚的模型,在这个模型中,后面的单词比先前的单词更具优势。因此,当它被用于捕获整个文档的语义时,它可能会降低效率,因为关键组件可能出现在文档中的任何地方,而不是最后。为了解决偏置问题,我们引入了卷积神经网络(CNN),将一个不带偏见的模型引入到NLP任务中,它可以很好地确定文本中带有最大池化层的识别性短语。因此,与递归或循环神经网络相比,CNN可以更好地捕捉文本的语义。CNN的时间复杂度也是O(n)。然而,以前对CNNs的研究倾向于使用简单的卷积核,如固定窗。使用这样的内核时,很难确定窗口大小:小窗口大小可能导致一些关键信息的丢失,而大的窗口会导致巨大的参数空间(这可能很难训练)。因此,它提出了一个问题:我们能否比传统的基于窗口的神经网络学习更多的上下文信息,更准确地表示文本的语义。

为了解决上述模型的局限性,作者们提出了一个循环卷积神经网络(RCNN),并将其应用于文本分类的任务。首先,我们应用一个双向的循环结构,与传统的基于窗口的神经网络相比,它可以大大减少噪声,从而最大程度地捕捉上下文信息。此外,该模型在学习文本表示时可以保留更大范围的词序。其次,使用了一个可以自动判断哪些特性在文本分类中扮演关键角色的池化层(max-pooling),以捕获文本中的关键组件。模型结合了RNN的结构和最大池化层,利用了循环神经模型和卷积神经模型的优点。此外,模型的时间复杂度为O(n),它与文本长度的长度是线性相关的。

RCNN模型框架

如下图是作者提出的模型框架,输入是一个文本D,它可以看成是由一系列单词(W1,W2,,,Wn)组成的。输出是一个概率分布,最大的那个位置对应文章属于的类别K。

接下来我们来仔细分析一下框架训练的过程。

Word Representation Learning

为了更准确地表达单词的意思,作者使用了单词本身和其上下文来表示这个词。在论文中,使用双向循环结构来实现。使用来定义词左边的文本,来定义词右边文本。这里和是长度为|c|的稠密向量。计算公式如下:

以“A sunset stroll along the South Bank affords an array of stunning vantage points” 这句话为例分析,结合上图,Cl(W7)表示了“Bank”这个词左侧的上下文语义信息(即“stroll along the South ”),同理,Cr(W7)表示了“Bank”这个词右侧的上下文语义信息(即“ affords an array ...”)。据此,我们就可以定义单词Wi的向量表示:

循环结构可以在文本的向前扫描时获取所有的Cl,在反向扫描时获取所有的Cr。时间复杂度为O(n)。当我们获得了单词Wi的表示Xi后,我们将一个线性变换与tanh激活函数一起应用到Xi,并将结果传递到下一层。

y是一个潜在的语义向量,每一个语义因素都将被分析,以确定代表文本的最有用的因素。

Text Representation Learning

上面部分是单词的表示,那么怎么来提取文本的特征表示呢?作者在这里使用了CNN,当前面所有的单词表示y都计算出来以后,接上一个max-pooling层

这里的max函数是一个按元素max的函数,也就是说,前一步单词表达得到的y是一个n维向量,这一步y的第k个元素是上一步y的所有向量的第k个元素的最大值。池化层将不同长度的文本转换为固定长度的向量。通过使用池化层,我们可以在整个文本中捕获信息。还有其他类型的池层,比如平均池层(Collobert et al. 2011)。这里不使用平均池,因为这里只有几个单词和它们的组合对于捕获文档的含义非常有用。在文档中,最大池化层试图找到最重要的潜在语义因素。

模型的最后一部分是输出层:

最后对y应用softmax得到概率:

本文参考资料

[1]

Recurrent Convolutional Neural Networks for Text Classification: https://dl.acm.org/doi/10.5555/2886521.2886636

  • END -

本文参考原文-http://bjbsair.com/2020-03-25/tech-info/6304/
**传统文本分类
**



之前介绍的都是属于深度神经网络框架的,那么在Deep Learning出现或者风靡之前,文本分类是怎么做的呢?

传统的文本分类工作主要分为三个过程:特征工程、特征选择和不同分类机器学习算法。

1.1 特征工程

对于文本数据的特征工程来说,最广泛使用的功能是bag-of-words、tf-idf等。此外,还可以设计一些更复杂的特征,比如词性标签、名词短语以及tree kernels等。

1.2 特征选择

特征选择旨在删除噪声特征,提高分类性能。最常见的特征选择方法比如去停词(例如,“The”)、信息增益、互信息或L1正则化等以选择有用的特性。

1.3 机器学习算法

机器学习算法常用分类器,如逻辑回归(LR)、朴素贝叶斯(NB)和支持向量机(SVM)。然而,这些方法都存在数据稀疏问题。

RCNN论文概述

论文来自Recurrent Convolutional Neural Networks for Text Classification[1]

作者在论文中首先对比了传统文本分类算法与深度学习算法。

传统的特征表示方法往往忽略文本中的上下文信息或词序,对于捕捉词的语义仍然不满意。例如,在句子,A sunset stroll along the South Bank affords an array of stunning vantage points中,当我们分析“Bank”(unigram)这个词时,我们可能不知道它是指金融机构还是河旁。此外,“South Bank”(bigram),尤其是考虑到两个大写字母,可能会误导那些对伦敦不太了解的人,把它当作金融机构。当我们获得更大的上下文“stroll along the South Bank”(5-gram),我们就能很容易地辨别出它的意思。虽然高阶n-grams和更复杂的特性(如树内核)被设计用于捕获更多的上下文信息和单词序列,但它们仍然存在数据稀疏问题,这严重影响了分类的准确性。近年来,经过预先训练的word embedding和深层神经网络的快速发展,给各种NLP任务带来了新的启发。word embedding是单词的一种分布式表示,极大地缓解了数据稀疏问题(Bengio et al. 2003)。预先训练的词嵌入可以捕捉有意义的句法和语义规律性。

接着对目前应用较为广泛的深度学习框架算法进行了综述:

  • Socher et al 提出递归神经网络(RecursiveNN),在构建句子表示方面已被证明是有效的。然而,递归通过树结构捕获了一个句子的语义。它的性能很大程度上取决于文本树结构的性能。此外,构造这样一种文本树的时间复杂度至少为,其中n为文本的长度。当模型遇到长句或文档时,这将是非常耗时的。此外,两个句子之间的关系很难用树结构来表示。因此,递归不适合对长句或文档建模。
  • 另一种模型,循环神经网络(RNN),模型时间复杂度为。该模型通过逐字分析一个文本单词,并将所有先前文本的语义存储在一个固定大小的隐藏层中。RNN的优点是能够更好地捕捉上下文信息。这可能有利于捕获长文本的语义。然而,RNN是一个有偏倚的模型,在这个模型中,后面的单词比先前的单词更具优势。因此,当它被用于捕获整个文档的语义时,它可能会降低效率,因为关键组件可能出现在文档中的任何地方,而不是最后。为了解决偏置问题,我们引入了卷积神经网络(CNN),将一个不带偏见的模型引入到NLP任务中,它可以很好地确定文本中带有最大池化层的识别性短语。因此,与递归或循环神经网络相比,CNN可以更好地捕捉文本的语义。CNN的时间复杂度也是O(n)。然而,以前对CNNs的研究倾向于使用简单的卷积核,如固定窗。使用这样的内核时,很难确定窗口大小:小窗口大小可能导致一些关键信息的丢失,而大的窗口会导致巨大的参数空间(这可能很难训练)。因此,它提出了一个问题:我们能否比传统的基于窗口的神经网络学习更多的上下文信息,更准确地表示文本的语义。

为了解决上述模型的局限性,作者们提出了一个循环卷积神经网络(RCNN),并将其应用于文本分类的任务。首先,我们应用一个双向的循环结构,与传统的基于窗口的神经网络相比,它可以大大减少噪声,从而最大程度地捕捉上下文信息。此外,该模型在学习文本表示时可以保留更大范围的词序。其次,使用了一个可以自动判断哪些特性在文本分类中扮演关键角色的池化层(max-pooling),以捕获文本中的关键组件。模型结合了RNN的结构和最大池化层,利用了循环神经模型和卷积神经模型的优点。此外,模型的时间复杂度为O(n),它与文本长度的长度是线性相关的。

RCNN模型框架

如下图是作者提出的模型框架,输入是一个文本D,它可以看成是由一系列单词(W1,W2,,,Wn)组成的。输出是一个概率分布,最大的那个位置对应文章属于的类别K。

接下来我们来仔细分析一下框架训练的过程。

Word Representation Learning

为了更准确地表达单词的意思,作者使用了单词本身和其上下文来表示这个词。在论文中,使用双向循环结构来实现。使用来定义词左边的文本,来定义词右边文本。这里和是长度为|c|的稠密向量。计算公式如下:

以“A sunset stroll along the South Bank affords an array of stunning vantage points” 这句话为例分析,结合上图,Cl(W7)表示了“Bank”这个词左侧的上下文语义信息(即“stroll along the South ”),同理,Cr(W7)表示了“Bank”这个词右侧的上下文语义信息(即“ affords an array ...”)。据此,我们就可以定义单词Wi的向量表示:

循环结构可以在文本的向前扫描时获取所有的Cl,在反向扫描时获取所有的Cr。时间复杂度为O(n)。当我们获得了单词Wi的表示Xi后,我们将一个线性变换与tanh激活函数一起应用到Xi,并将结果传递到下一层。

y是一个潜在的语义向量,每一个语义因素都将被分析,以确定代表文本的最有用的因素。

Text Representation Learning

上面部分是单词的表示,那么怎么来提取文本的特征表示呢?作者在这里使用了CNN,当前面所有的单词表示y都计算出来以后,接上一个max-pooling层

这里的max函数是一个按元素max的函数,也就是说,前一步单词表达得到的y是一个n维向量,这一步y的第k个元素是上一步y的所有向量的第k个元素的最大值。池化层将不同长度的文本转换为固定长度的向量。通过使用池化层,我们可以在整个文本中捕获信息。还有其他类型的池层,比如平均池层(Collobert et al. 2011)。这里不使用平均池,因为这里只有几个单词和它们的组合对于捕获文档的含义非常有用。在文档中,最大池化层试图找到最重要的潜在语义因素。

模型的最后一部分是输出层:

最后对y应用softmax得到概率:

本文参考资料

[1]

Recurrent Convolutional Neural Networks for Text Classification: https://dl.acm.org/doi/10.5555/2886521.2886636

  • END -

本文参考原文-http://bjbsair.com/2020-03-25/tech-info/6304/
**传统文本分类
**



之前介绍的都是属于深度神经网络框架的,那么在Deep Learning出现或者风靡之前,文本分类是怎么做的呢?

传统的文本分类工作主要分为三个过程:特征工程、特征选择和不同分类机器学习算法。

1.1 特征工程

对于文本数据的特征工程来说,最广泛使用的功能是bag-of-words、tf-idf等。此外,还可以设计一些更复杂的特征,比如词性标签、名词短语以及tree kernels等。

1.2 特征选择

特征选择旨在删除噪声特征,提高分类性能。最常见的特征选择方法比如去停词(例如,“The”)、信息增益、互信息或L1正则化等以选择有用的特性。

1.3 机器学习算法

机器学习算法常用分类器,如逻辑回归(LR)、朴素贝叶斯(NB)和支持向量机(SVM)。然而,这些方法都存在数据稀疏问题。

RCNN论文概述

论文来自Recurrent Convolutional Neural Networks for Text Classification[1]

作者在论文中首先对比了传统文本分类算法与深度学习算法。

传统的特征表示方法往往忽略文本中的上下文信息或词序,对于捕捉词的语义仍然不满意。例如,在句子,A sunset stroll along the South Bank affords an array of stunning vantage points中,当我们分析“Bank”(unigram)这个词时,我们可能不知道它是指金融机构还是河旁。此外,“South Bank”(bigram),尤其是考虑到两个大写字母,可能会误导那些对伦敦不太了解的人,把它当作金融机构。当我们获得更大的上下文“stroll along the South Bank”(5-gram),我们就能很容易地辨别出它的意思。虽然高阶n-grams和更复杂的特性(如树内核)被设计用于捕获更多的上下文信息和单词序列,但它们仍然存在数据稀疏问题,这严重影响了分类的准确性。近年来,经过预先训练的word embedding和深层神经网络的快速发展,给各种NLP任务带来了新的启发。word embedding是单词的一种分布式表示,极大地缓解了数据稀疏问题(Bengio et al. 2003)。预先训练的词嵌入可以捕捉有意义的句法和语义规律性。

接着对目前应用较为广泛的深度学习框架算法进行了综述:

  • Socher et al 提出递归神经网络(RecursiveNN),在构建句子表示方面已被证明是有效的。然而,递归通过树结构捕获了一个句子的语义。它的性能很大程度上取决于文本树结构的性能。此外,构造这样一种文本树的时间复杂度至少为,其中n为文本的长度。当模型遇到长句或文档时,这将是非常耗时的。此外,两个句子之间的关系很难用树结构来表示。因此,递归不适合对长句或文档建模。
  • 另一种模型,循环神经网络(RNN),模型时间复杂度为。该模型通过逐字分析一个文本单词,并将所有先前文本的语义存储在一个固定大小的隐藏层中。RNN的优点是能够更好地捕捉上下文信息。这可能有利于捕获长文本的语义。然而,RNN是一个有偏倚的模型,在这个模型中,后面的单词比先前的单词更具优势。因此,当它被用于捕获整个文档的语义时,它可能会降低效率,因为关键组件可能出现在文档中的任何地方,而不是最后。为了解决偏置问题,我们引入了卷积神经网络(CNN),将一个不带偏见的模型引入到NLP任务中,它可以很好地确定文本中带有最大池化层的识别性短语。因此,与递归或循环神经网络相比,CNN可以更好地捕捉文本的语义。CNN的时间复杂度也是O(n)。然而,以前对CNNs的研究倾向于使用简单的卷积核,如固定窗。使用这样的内核时,很难确定窗口大小:小窗口大小可能导致一些关键信息的丢失,而大的窗口会导致巨大的参数空间(这可能很难训练)。因此,它提出了一个问题:我们能否比传统的基于窗口的神经网络学习更多的上下文信息,更准确地表示文本的语义。

为了解决上述模型的局限性,作者们提出了一个循环卷积神经网络(RCNN),并将其应用于文本分类的任务。首先,我们应用一个双向的循环结构,与传统的基于窗口的神经网络相比,它可以大大减少噪声,从而最大程度地捕捉上下文信息。此外,该模型在学习文本表示时可以保留更大范围的词序。其次,使用了一个可以自动判断哪些特性在文本分类中扮演关键角色的池化层(max-pooling),以捕获文本中的关键组件。模型结合了RNN的结构和最大池化层,利用了循环神经模型和卷积神经模型的优点。此外,模型的时间复杂度为O(n),它与文本长度的长度是线性相关的。

RCNN模型框架

如下图是作者提出的模型框架,输入是一个文本D,它可以看成是由一系列单词(W1,W2,,,Wn)组成的。输出是一个概率分布,最大的那个位置对应文章属于的类别K。

接下来我们来仔细分析一下框架训练的过程。

Word Representation Learning

为了更准确地表达单词的意思,作者使用了单词本身和其上下文来表示这个词。在论文中,使用双向循环结构来实现。使用来定义词左边的文本,来定义词右边文本。这里和是长度为|c|的稠密向量。计算公式如下:

以“A sunset stroll along the South Bank affords an array of stunning vantage points” 这句话为例分析,结合上图,Cl(W7)表示了“Bank”这个词左侧的上下文语义信息(即“stroll along the South ”),同理,Cr(W7)表示了“Bank”这个词右侧的上下文语义信息(即“ affords an array ...”)。据此,我们就可以定义单词Wi的向量表示:

循环结构可以在文本的向前扫描时获取所有的Cl,在反向扫描时获取所有的Cr。时间复杂度为O(n)。当我们获得了单词Wi的表示Xi后,我们将一个线性变换与tanh激活函数一起应用到Xi,并将结果传递到下一层。

y是一个潜在的语义向量,每一个语义因素都将被分析,以确定代表文本的最有用的因素。

Text Representation Learning

上面部分是单词的表示,那么怎么来提取文本的特征表示呢?作者在这里使用了CNN,当前面所有的单词表示y都计算出来以后,接上一个max-pooling层

这里的max函数是一个按元素max的函数,也就是说,前一步单词表达得到的y是一个n维向量,这一步y的第k个元素是上一步y的所有向量的第k个元素的最大值。池化层将不同长度的文本转换为固定长度的向量。通过使用池化层,我们可以在整个文本中捕获信息。还有其他类型的池层,比如平均池层(Collobert et al. 2011)。这里不使用平均池,因为这里只有几个单词和它们的组合对于捕获文档的含义非常有用。在文档中,最大池化层试图找到最重要的潜在语义因素。

模型的最后一部分是输出层:

最后对y应用softmax得到概率:

本文参考资料

[1]

Recurrent Convolutional Neural Networks for Text Classification: https://dl.acm.org/doi/10.5555/2886521.2886636

  • END -

本文参考原文-http://bjbsair.com/2020-03-25/tech-info/6304/
**传统文本分类
**



之前介绍的都是属于深度神经网络框架的,那么在Deep Learning出现或者风靡之前,文本分类是怎么做的呢?

传统的文本分类工作主要分为三个过程:特征工程、特征选择和不同分类机器学习算法。

1.1 特征工程

对于文本数据的特征工程来说,最广泛使用的功能是bag-of-words、tf-idf等。此外,还可以设计一些更复杂的特征,比如词性标签、名词短语以及tree kernels等。

1.2 特征选择

特征选择旨在删除噪声特征,提高分类性能。最常见的特征选择方法比如去停词(例如,“The”)、信息增益、互信息或L1正则化等以选择有用的特性。

1.3 机器学习算法

机器学习算法常用分类器,如逻辑回归(LR)、朴素贝叶斯(NB)和支持向量机(SVM)。然而,这些方法都存在数据稀疏问题。

RCNN论文概述

论文来自Recurrent Convolutional Neural Networks for Text Classification[1]

作者在论文中首先对比了传统文本分类算法与深度学习算法。

传统的特征表示方法往往忽略文本中的上下文信息或词序,对于捕捉词的语义仍然不满意。例如,在句子,A sunset stroll along the South Bank affords an array of stunning vantage points中,当我们分析“Bank”(unigram)这个词时,我们可能不知道它是指金融机构还是河旁。此外,“South Bank”(bigram),尤其是考虑到两个大写字母,可能会误导那些对伦敦不太了解的人,把它当作金融机构。当我们获得更大的上下文“stroll along the South Bank”(5-gram),我们就能很容易地辨别出它的意思。虽然高阶n-grams和更复杂的特性(如树内核)被设计用于捕获更多的上下文信息和单词序列,但它们仍然存在数据稀疏问题,这严重影响了分类的准确性。近年来,经过预先训练的word embedding和深层神经网络的快速发展,给各种NLP任务带来了新的启发。word embedding是单词的一种分布式表示,极大地缓解了数据稀疏问题(Bengio et al. 2003)。预先训练的词嵌入可以捕捉有意义的句法和语义规律性。

接着对目前应用较为广泛的深度学习框架算法进行了综述:

  • Socher et al 提出递归神经网络(RecursiveNN),在构建句子表示方面已被证明是有效的。然而,递归通过树结构捕获了一个句子的语义。它的性能很大程度上取决于文本树结构的性能。此外,构造这样一种文本树的时间复杂度至少为,其中n为文本的长度。当模型遇到长句或文档时,这将是非常耗时的。此外,两个句子之间的关系很难用树结构来表示。因此,递归不适合对长句或文档建模。
  • 另一种模型,循环神经网络(RNN),模型时间复杂度为。该模型通过逐字分析一个文本单词,并将所有先前文本的语义存储在一个固定大小的隐藏层中。RNN的优点是能够更好地捕捉上下文信息。这可能有利于捕获长文本的语义。然而,RNN是一个有偏倚的模型,在这个模型中,后面的单词比先前的单词更具优势。因此,当它被用于捕获整个文档的语义时,它可能会降低效率,因为关键组件可能出现在文档中的任何地方,而不是最后。为了解决偏置问题,我们引入了卷积神经网络(CNN),将一个不带偏见的模型引入到NLP任务中,它可以很好地确定文本中带有最大池化层的识别性短语。因此,与递归或循环神经网络相比,CNN可以更好地捕捉文本的语义。CNN的时间复杂度也是O(n)。然而,以前对CNNs的研究倾向于使用简单的卷积核,如固定窗。使用这样的内核时,很难确定窗口大小:小窗口大小可能导致一些关键信息的丢失,而大的窗口会导致巨大的参数空间(这可能很难训练)。因此,它提出了一个问题:我们能否比传统的基于窗口的神经网络学习更多的上下文信息,更准确地表示文本的语义。

为了解决上述模型的局限性,作者们提出了一个循环卷积神经网络(RCNN),并将其应用于文本分类的任务。首先,我们应用一个双向的循环结构,与传统的基于窗口的神经网络相比,它可以大大减少噪声,从而最大程度地捕捉上下文信息。此外,该模型在学习文本表示时可以保留更大范围的词序。其次,使用了一个可以自动判断哪些特性在文本分类中扮演关键角色的池化层(max-pooling),以捕获文本中的关键组件。模型结合了RNN的结构和最大池化层,利用了循环神经模型和卷积神经模型的优点。此外,模型的时间复杂度为O(n),它与文本长度的长度是线性相关的。

RCNN模型框架

如下图是作者提出的模型框架,输入是一个文本D,它可以看成是由一系列单词(W1,W2,,,Wn)组成的。输出是一个概率分布,最大的那个位置对应文章属于的类别K。

接下来我们来仔细分析一下框架训练的过程。

Word Representation Learning

为了更准确地表达单词的意思,作者使用了单词本身和其上下文来表示这个词。在论文中,使用双向循环结构来实现。使用来定义词左边的文本,来定义词右边文本。这里和是长度为|c|的稠密向量。计算公式如下:

以“A sunset stroll along the South Bank affords an array of stunning vantage points” 这句话为例分析,结合上图,Cl(W7)表示了“Bank”这个词左侧的上下文语义信息(即“stroll along the South ”),同理,Cr(W7)表示了“Bank”这个词右侧的上下文语义信息(即“ affords an array ...”)。据此,我们就可以定义单词Wi的向量表示:

循环结构可以在文本的向前扫描时获取所有的Cl,在反向扫描时获取所有的Cr。时间复杂度为O(n)。当我们获得了单词Wi的表示Xi后,我们将一个线性变换与tanh激活函数一起应用到Xi,并将结果传递到下一层。

y是一个潜在的语义向量,每一个语义因素都将被分析,以确定代表文本的最有用的因素。

Text Representation Learning

上面部分是单词的表示,那么怎么来提取文本的特征表示呢?作者在这里使用了CNN,当前面所有的单词表示y都计算出来以后,接上一个max-pooling层

这里的max函数是一个按元素max的函数,也就是说,前一步单词表达得到的y是一个n维向量,这一步y的第k个元素是上一步y的所有向量的第k个元素的最大值。池化层将不同长度的文本转换为固定长度的向量。通过使用池化层,我们可以在整个文本中捕获信息。还有其他类型的池层,比如平均池层(Collobert et al. 2011)。这里不使用平均池,因为这里只有几个单词和它们的组合对于捕获文档的含义非常有用。在文档中,最大池化层试图找到最重要的潜在语义因素。

模型的最后一部分是输出层:

最后对y应用softmax得到概率:

本文参考资料

[1]

Recurrent Convolutional Neural Networks for Text Classification: https://dl.acm.org/doi/10.5555/2886521.2886636

  • END -

本文参考原文-http://bjbsair.com/2020-03-25/tech-info/6304/
**传统文本分类
**



之前介绍的都是属于深度神经网络框架的,那么在Deep Learning出现或者风靡之前,文本分类是怎么做的呢?

传统的文本分类工作主要分为三个过程:特征工程、特征选择和不同分类机器学习算法。

1.1 特征工程

对于文本数据的特征工程来说,最广泛使用的功能是bag-of-words、tf-idf等。此外,还可以设计一些更复杂的特征,比如词性标签、名词短语以及tree kernels等。

1.2 特征选择

特征选择旨在删除噪声特征,提高分类性能。最常见的特征选择方法比如去停词(例如,“The”)、信息增益、互信息或L1正则化等以选择有用的特性。

1.3 机器学习算法

机器学习算法常用分类器,如逻辑回归(LR)、朴素贝叶斯(NB)和支持向量机(SVM)。然而,这些方法都存在数据稀疏问题。

RCNN论文概述

论文来自Recurrent Convolutional Neural Networks for Text Classification[1]

作者在论文中首先对比了传统文本分类算法与深度学习算法。

传统的特征表示方法往往忽略文本中的上下文信息或词序,对于捕捉词的语义仍然不满意。例如,在句子,A sunset stroll along the South Bank affords an array of stunning vantage points中,当我们分析“Bank”(unigram)这个词时,我们可能不知道它是指金融机构还是河旁。此外,“South Bank”(bigram),尤其是考虑到两个大写字母,可能会误导那些对伦敦不太了解的人,把它当作金融机构。当我们获得更大的上下文“stroll along the South Bank”(5-gram),我们就能很容易地辨别出它的意思。虽然高阶n-grams和更复杂的特性(如树内核)被设计用于捕获更多的上下文信息和单词序列,但它们仍然存在数据稀疏问题,这严重影响了分类的准确性。近年来,经过预先训练的word embedding和深层神经网络的快速发展,给各种NLP任务带来了新的启发。word embedding是单词的一种分布式表示,极大地缓解了数据稀疏问题(Bengio et al. 2003)。预先训练的词嵌入可以捕捉有意义的句法和语义规律性。

接着对目前应用较为广泛的深度学习框架算法进行了综述:

  • Socher et al 提出递归神经网络(RecursiveNN),在构建句子表示方面已被证明是有效的。然而,递归通过树结构捕获了一个句子的语义。它的性能很大程度上取决于文本树结构的性能。此外,构造这样一种文本树的时间复杂度至少为,其中n为文本的长度。当模型遇到长句或文档时,这将是非常耗时的。此外,两个句子之间的关系很难用树结构来表示。因此,递归不适合对长句或文档建模。
  • 另一种模型,循环神经网络(RNN),模型时间复杂度为。该模型通过逐字分析一个文本单词,并将所有先前文本的语义存储在一个固定大小的隐藏层中。RNN的优点是能够更好地捕捉上下文信息。这可能有利于捕获长文本的语义。然而,RNN是一个有偏倚的模型,在这个模型中,后面的单词比先前的单词更具优势。因此,当它被用于捕获整个文档的语义时,它可能会降低效率,因为关键组件可能出现在文档中的任何地方,而不是最后。为了解决偏置问题,我们引入了卷积神经网络(CNN),将一个不带偏见的模型引入到NLP任务中,它可以很好地确定文本中带有最大池化层的识别性短语。因此,与递归或循环神经网络相比,CNN可以更好地捕捉文本的语义。CNN的时间复杂度也是O(n)。然而,以前对CNNs的研究倾向于使用简单的卷积核,如固定窗。使用这样的内核时,很难确定窗口大小:小窗口大小可能导致一些关键信息的丢失,而大的窗口会导致巨大的参数空间(这可能很难训练)。因此,它提出了一个问题:我们能否比传统的基于窗口的神经网络学习更多的上下文信息,更准确地表示文本的语义。

为了解决上述模型的局限性,作者们提出了一个循环卷积神经网络(RCNN),并将其应用于文本分类的任务。首先,我们应用一个双向的循环结构,与传统的基于窗口的神经网络相比,它可以大大减少噪声,从而最大程度地捕捉上下文信息。此外,该模型在学习文本表示时可以保留更大范围的词序。其次,使用了一个可以自动判断哪些特性在文本分类中扮演关键角色的池化层(max-pooling),以捕获文本中的关键组件。模型结合了RNN的结构和最大池化层,利用了循环神经模型和卷积神经模型的优点。此外,模型的时间复杂度为O(n),它与文本长度的长度是线性相关的。

RCNN模型框架

如下图是作者提出的模型框架,输入是一个文本D,它可以看成是由一系列单词(W1,W2,,,Wn)组成的。输出是一个概率分布,最大的那个位置对应文章属于的类别K。

接下来我们来仔细分析一下框架训练的过程。

Word Representation Learning

为了更准确地表达单词的意思,作者使用了单词本身和其上下文来表示这个词。在论文中,使用双向循环结构来实现。使用来定义词左边的文本,来定义词右边文本。这里和是长度为|c|的稠密向量。计算公式如下:

以“A sunset stroll along the South Bank affords an array of stunning vantage points” 这句话为例分析,结合上图,Cl(W7)表示了“Bank”这个词左侧的上下文语义信息(即“stroll along the South ”),同理,Cr(W7)表示了“Bank”这个词右侧的上下文语义信息(即“ affords an array ...”)。据此,我们就可以定义单词Wi的向量表示:

循环结构可以在文本的向前扫描时获取所有的Cl,在反向扫描时获取所有的Cr。时间复杂度为O(n)。当我们获得了单词Wi的表示Xi后,我们将一个线性变换与tanh激活函数一起应用到Xi,并将结果传递到下一层。

y是一个潜在的语义向量,每一个语义因素都将被分析,以确定代表文本的最有用的因素。

Text Representation Learning

上面部分是单词的表示,那么怎么来提取文本的特征表示呢?作者在这里使用了CNN,当前面所有的单词表示y都计算出来以后,接上一个max-pooling层

这里的max函数是一个按元素max的函数,也就是说,前一步单词表达得到的y是一个n维向量,这一步y的第k个元素是上一步y的所有向量的第k个元素的最大值。池化层将不同长度的文本转换为固定长度的向量。通过使用池化层,我们可以在整个文本中捕获信息。还有其他类型的池层,比如平均池层(Collobert et al. 2011)。这里不使用平均池,因为这里只有几个单词和它们的组合对于捕获文档的含义非常有用。在文档中,最大池化层试图找到最重要的潜在语义因素。

模型的最后一部分是输出层:

最后对y应用softmax得到概率:

本文参考资料

[1]

Recurrent Convolutional Neural Networks for Text Classification: https://dl.acm.org/doi/10.5555/2886521.2886636

  • END -

本文参考原文-http://bjbsair.com/2020-03-25/tech-info/6304/
**传统文本分类
**



之前介绍的都是属于深度神经网络框架的,那么在Deep Learning出现或者风靡之前,文本分类是怎么做的呢?

传统的文本分类工作主要分为三个过程:特征工程、特征选择和不同分类机器学习算法。

1.1 特征工程

对于文本数据的特征工程来说,最广泛使用的功能是bag-of-words、tf-idf等。此外,还可以设计一些更复杂的特征,比如词性标签、名词短语以及tree kernels等。

1.2 特征选择

特征选择旨在删除噪声特征,提高分类性能。最常见的特征选择方法比如去停词(例如,“The”)、信息增益、互信息或L1正则化等以选择有用的特性。

1.3 机器学习算法

机器学习算法常用分类器,如逻辑回归(LR)、朴素贝叶斯(NB)和支持向量机(SVM)。然而,这些方法都存在数据稀疏问题。

RCNN论文概述

论文来自Recurrent Convolutional Neural Networks for Text Classification[1]

作者在论文中首先对比了传统文本分类算法与深度学习算法。

传统的特征表示方法往往忽略文本中的上下文信息或词序,对于捕捉词的语义仍然不满意。例如,在句子,A sunset stroll along the South Bank affords an array of stunning vantage points中,当我们分析“Bank”(unigram)这个词时,我们可能不知道它是指金融机构还是河旁。此外,“South Bank”(bigram),尤其是考虑到两个大写字母,可能会误导那些对伦敦不太了解的人,把它当作金融机构。当我们获得更大的上下文“stroll along the South Bank”(5-gram),我们就能很容易地辨别出它的意思。虽然高阶n-grams和更复杂的特性(如树内核)被设计用于捕获更多的上下文信息和单词序列,但它们仍然存在数据稀疏问题,这严重影响了分类的准确性。近年来,经过预先训练的word embedding和深层神经网络的快速发展,给各种NLP任务带来了新的启发。word embedding是单词的一种分布式表示,极大地缓解了数据稀疏问题(Bengio et al. 2003)。预先训练的词嵌入可以捕捉有意义的句法和语义规律性。

接着对目前应用较为广泛的深度学习框架算法进行了综述:

  • Socher et al 提出递归神经网络(RecursiveNN),在构建句子表示方面已被证明是有效的。然而,递归通过树结构捕获了一个句子的语义。它的性能很大程度上取决于文本树结构的性能。此外,构造这样一种文本树的时间复杂度至少为,其中n为文本的长度。当模型遇到长句或文档时,这将是非常耗时的。此外,两个句子之间的关系很难用树结构来表示。因此,递归不适合对长句或文档建模。
  • 另一种模型,循环神经网络(RNN),模型时间复杂度为。该模型通过逐字分析一个文本单词,并将所有先前文本的语义存储在一个固定大小的隐藏层中。RNN的优点是能够更好地捕捉上下文信息。这可能有利于捕获长文本的语义。然而,RNN是一个有偏倚的模型,在这个模型中,后面的单词比先前的单词更具优势。因此,当它被用于捕获整个文档的语义时,它可能会降低效率,因为关键组件可能出现在文档中的任何地方,而不是最后。为了解决偏置问题,我们引入了卷积神经网络(CNN),将一个不带偏见的模型引入到NLP任务中,它可以很好地确定文本中带有最大池化层的识别性短语。因此,与递归或循环神经网络相比,CNN可以更好地捕捉文本的语义。CNN的时间复杂度也是O(n)。然而,以前对CNNs的研究倾向于使用简单的卷积核,如固定窗。使用这样的内核时,很难确定窗口大小:小窗口大小可能导致一些关键信息的丢失,而大的窗口会导致巨大的参数空间(这可能很难训练)。因此,它提出了一个问题:我们能否比传统的基于窗口的神经网络学习更多的上下文信息,更准确地表示文本的语义。

为了解决上述模型的局限性,作者们提出了一个循环卷积神经网络(RCNN),并将其应用于文本分类的任务。首先,我们应用一个双向的循环结构,与传统的基于窗口的神经网络相比,它可以大大减少噪声,从而最大程度地捕捉上下文信息。此外,该模型在学习文本表示时可以保留更大范围的词序。其次,使用了一个可以自动判断哪些特性在文本分类中扮演关键角色的池化层(max-pooling),以捕获文本中的关键组件。模型结合了RNN的结构和最大池化层,利用了循环神经模型和卷积神经模型的优点。此外,模型的时间复杂度为O(n),它与文本长度的长度是线性相关的。

RCNN模型框架

如下图是作者提出的模型框架,输入是一个文本D,它可以看成是由一系列单词(W1,W2,,,Wn)组成的。输出是一个概率分布,最大的那个位置对应文章属于的类别K。

接下来我们来仔细分析一下框架训练的过程。

Word Representation Learning

为了更准确地表达单词的意思,作者使用了单词本身和其上下文来表示这个词。在论文中,使用双向循环结构来实现。使用来定义词左边的文本,来定义词右边文本。这里和是长度为|c|的稠密向量。计算公式如下:

以“A sunset stroll along the South Bank affords an array of stunning vantage points” 这句话为例分析,结合上图,Cl(W7)表示了“Bank”这个词左侧的上下文语义信息(即“stroll along the South ”),同理,Cr(W7)表示了“Bank”这个词右侧的上下文语义信息(即“ affords an array ...”)。据此,我们就可以定义单词Wi的向量表示:

循环结构可以在文本的向前扫描时获取所有的Cl,在反向扫描时获取所有的Cr。时间复杂度为O(n)。当我们获得了单词Wi的表示Xi后,我们将一个线性变换与tanh激活函数一起应用到Xi,并将结果传递到下一层。

y是一个潜在的语义向量,每一个语义因素都将被分析,以确定代表文本的最有用的因素。

Text Representation Learning

上面部分是单词的表示,那么怎么来提取文本的特征表示呢?作者在这里使用了CNN,当前面所有的单词表示y都计算出来以后,接上一个max-pooling层

这里的max函数是一个按元素max的函数,也就是说,前一步单词表达得到的y是一个n维向量,这一步y的第k个元素是上一步y的所有向量的第k个元素的最大值。池化层将不同长度的文本转换为固定长度的向量。通过使用池化层,我们可以在整个文本中捕获信息。还有其他类型的池层,比如平均池层(Collobert et al. 2011)。这里不使用平均池,因为这里只有几个单词和它们的组合对于捕获文档的含义非常有用。在文档中,最大池化层试图找到最重要的潜在语义因素。

模型的最后一部分是输出层:

最后对y应用softmax得到概率:

本文参考资料

[1]

Recurrent Convolutional Neural Networks for Text Classification: https://dl.acm.org/doi/10.5555/2886521.2886636

  • END -

本文参考原文-http://bjbsair.com/2020-03-25/tech-info/6304/
**传统文本分类
**



之前介绍的都是属于深度神经网络框架的,那么在Deep Learning出现或者风靡之前,文本分类是怎么做的呢?

传统的文本分类工作主要分为三个过程:特征工程、特征选择和不同分类机器学习算法。

1.1 特征工程

对于文本数据的特征工程来说,最广泛使用的功能是bag-of-words、tf-idf等。此外,还可以设计一些更复杂的特征,比如词性标签、名词短语以及tree kernels等。

1.2 特征选择

特征选择旨在删除噪声特征,提高分类性能。最常见的特征选择方法比如去停词(例如,“The”)、信息增益、互信息或L1正则化等以选择有用的特性。

1.3 机器学习算法

机器学习算法常用分类器,如逻辑回归(LR)、朴素贝叶斯(NB)和支持向量机(SVM)。然而,这些方法都存在数据稀疏问题。

RCNN论文概述

论文来自Recurrent Convolutional Neural Networks for Text Classification[1]

作者在论文中首先对比了传统文本分类算法与深度学习算法。

传统的特征表示方法往往忽略文本中的上下文信息或词序,对于捕捉词的语义仍然不满意。例如,在句子,A sunset stroll along the South Bank affords an array of stunning vantage points中,当我们分析“Bank”(unigram)这个词时,我们可能不知道它是指金融机构还是河旁。此外,“South Bank”(bigram),尤其是考虑到两个大写字母,可能会误导那些对伦敦不太了解的人,把它当作金融机构。当我们获得更大的上下文“stroll along the South Bank”(5-gram),我们就能很容易地辨别出它的意思。虽然高阶n-grams和更复杂的特性(如树内核)被设计用于捕获更多的上下文信息和单词序列,但它们仍然存在数据稀疏问题,这严重影响了分类的准确性。近年来,经过预先训练的word embedding和深层神经网络的快速发展,给各种NLP任务带来了新的启发。word embedding是单词的一种分布式表示,极大地缓解了数据稀疏问题(Bengio et al. 2003)。预先训练的词嵌入可以捕捉有意义的句法和语义规律性。

接着对目前应用较为广泛的深度学习框架算法进行了综述:

  • Socher et al 提出递归神经网络(RecursiveNN),在构建句子表示方面已被证明是有效的。然而,递归通过树结构捕获了一个句子的语义。它的性能很大程度上取决于文本树结构的性能。此外,构造这样一种文本树的时间复杂度至少为,其中n为文本的长度。当模型遇到长句或文档时,这将是非常耗时的。此外,两个句子之间的关系很难用树结构来表示。因此,递归不适合对长句或文档建模。
  • 另一种模型,循环神经网络(RNN),模型时间复杂度为。该模型通过逐字分析一个文本单词,并将所有先前文本的语义存储在一个固定大小的隐藏层中。RNN的优点是能够更好地捕捉上下文信息。这可能有利于捕获长文本的语义。然而,RNN是一个有偏倚的模型,在这个模型中,后面的单词比先前的单词更具优势。因此,当它被用于捕获整个文档的语义时,它可能会降低效率,因为关键组件可能出现在文档中的任何地方,而不是最后。为了解决偏置问题,我们引入了卷积神经网络(CNN),将一个不带偏见的模型引入到NLP任务中,它可以很好地确定文本中带有最大池化层的识别性短语。因此,与递归或循环神经网络相比,CNN可以更好地捕捉文本的语义。CNN的时间复杂度也是O(n)。然而,以前对CNNs的研究倾向于使用简单的卷积核,如固定窗。使用这样的内核时,很难确定窗口大小:小窗口大小可能导致一些关键信息的丢失,而大的窗口会导致巨大的参数空间(这可能很难训练)。因此,它提出了一个问题:我们能否比传统的基于窗口的神经网络学习更多的上下文信息,更准确地表示文本的语义。

为了解决上述模型的局限性,作者们提出了一个循环卷积神经网络(RCNN),并将其应用于文本分类的任务。首先,我们应用一个双向的循环结构,与传统的基于窗口的神经网络相比,它可以大大减少噪声,从而最大程度地捕捉上下文信息。此外,该模型在学习文本表示时可以保留更大范围的词序。其次,使用了一个可以自动判断哪些特性在文本分类中扮演关键角色的池化层(max-pooling),以捕获文本中的关键组件。模型结合了RNN的结构和最大池化层,利用了循环神经模型和卷积神经模型的优点。此外,模型的时间复杂度为O(n),它与文本长度的长度是线性相关的。

RCNN模型框架

如下图是作者提出的模型框架,输入是一个文本D,它可以看成是由一系列单词(W1,W2,,,Wn)组成的。输出是一个概率分布,最大的那个位置对应文章属于的类别K。

接下来我们来仔细分析一下框架训练的过程。

Word Representation Learning

为了更准确地表达单词的意思,作者使用了单词本身和其上下文来表示这个词。在论文中,使用双向循环结构来实现。使用来定义词左边的文本,来定义词右边文本。这里和是长度为|c|的稠密向量。计算公式如下:

以“A sunset stroll along the South Bank affords an array of stunning vantage points” 这句话为例分析,结合上图,Cl(W7)表示了“Bank”这个词左侧的上下文语义信息(即“stroll along the South ”),同理,Cr(W7)表示了“Bank”这个词右侧的上下文语义信息(即“ affords an array ...”)。据此,我们就可以定义单词Wi的向量表示:

循环结构可以在文本的向前扫描时获取所有的Cl,在反向扫描时获取所有的Cr。时间复杂度为O(n)。当我们获得了单词Wi的表示Xi后,我们将一个线性变换与tanh激活函数一起应用到Xi,并将结果传递到下一层。

y是一个潜在的语义向量,每一个语义因素都将被分析,以确定代表文本的最有用的因素。

Text Representation Learning

上面部分是单词的表示,那么怎么来提取文本的特征表示呢?作者在这里使用了CNN,当前面所有的单词表示y都计算出来以后,接上一个max-pooling层

这里的max函数是一个按元素max的函数,也就是说,前一步单词表达得到的y是一个n维向量,这一步y的第k个元素是上一步y的所有向量的第k个元素的最大值。池化层将不同长度的文本转换为固定长度的向量。通过使用池化层,我们可以在整个文本中捕获信息。还有其他类型的池层,比如平均池层(Collobert et al. 2011)。这里不使用平均池,因为这里只有几个单词和它们的组合对于捕获文档的含义非常有用。在文档中,最大池化层试图找到最重要的潜在语义因素。

模型的最后一部分是输出层:

最后对y应用softmax得到概率:

本文参考资料

[1]

Recurrent Convolutional Neural Networks for Text Classification: https://dl.acm.org/doi/10.5555/2886521.2886636

  • END -

本文参考原文-http://bjbsair.com/2020-03-25/tech-info/6304/
**传统文本分类
**



之前介绍的都是属于深度神经网络框架的,那么在Deep Learning出现或者风靡之前,文本分类是怎么做的呢?

传统的文本分类工作主要分为三个过程:特征工程、特征选择和不同分类机器学习算法。

1.1 特征工程

对于文本数据的特征工程来说,最广泛使用的功能是bag-of-words、tf-idf等。此外,还可以设计一些更复杂的特征,比如词性标签、名词短语以及tree kernels等。

1.2 特征选择

特征选择旨在删除噪声特征,提高分类性能。最常见的特征选择方法比如去停词(例如,“The”)、信息增益、互信息或L1正则化等以选择有用的特性。

1.3 机器学习算法

机器学习算法常用分类器,如逻辑回归(LR)、朴素贝叶斯(NB)和支持向量机(SVM)。然而,这些方法都存在数据稀疏问题。

RCNN论文概述

论文来自Recurrent Convolutional Neural Networks for Text Classification[1]

作者在论文中首先对比了传统文本分类算法与深度学习算法。

传统的特征表示方法往往忽略文本中的上下文信息或词序,对于捕捉词的语义仍然不满意。例如,在句子,A sunset stroll along the South Bank affords an array of stunning vantage points中,当我们分析“Bank”(unigram)这个词时,我们可能不知道它是指金融机构还是河旁。此外,“South Bank”(bigram),尤其是考虑到两个大写字母,可能会误导那些对伦敦不太了解的人,把它当作金融机构。当我们获得更大的上下文“stroll along the South Bank”(5-gram),我们就能很容易地辨别出它的意思。虽然高阶n-grams和更复杂的特性(如树内核)被设计用于捕获更多的上下文信息和单词序列,但它们仍然存在数据稀疏问题,这严重影响了分类的准确性。近年来,经过预先训练的word embedding和深层神经网络的快速发展,给各种NLP任务带来了新的启发。word embedding是单词的一种分布式表示,极大地缓解了数据稀疏问题(Bengio et al. 2003)。预先训练的词嵌入可以捕捉有意义的句法和语义规律性。

接着对目前应用较为广泛的深度学习框架算法进行了综述:

  • Socher et al 提出递归神经网络(RecursiveNN),在构建句子表示方面已被证明是有效的。然而,递归通过树结构捕获了一个句子的语义。它的性能很大程度上取决于文本树结构的性能。此外,构造这样一种文本树的时间复杂度至少为,其中n为文本的长度。当模型遇到长句或文档时,这将是非常耗时的。此外,两个句子之间的关系很难用树结构来表示。因此,递归不适合对长句或文档建模。
  • 另一种模型,循环神经网络(RNN),模型时间复杂度为。该模型通过逐字分析一个文本单词,并将所有先前文本的语义存储在一个固定大小的隐藏层中。RNN的优点是能够更好地捕捉上下文信息。这可能有利于捕获长文本的语义。然而,RNN是一个有偏倚的模型,在这个模型中,后面的单词比先前的单词更具优势。因此,当它被用于捕获整个文档的语义时,它可能会降低效率,因为关键组件可能出现在文档中的任何地方,而不是最后。为了解决偏置问题,我们引入了卷积神经网络(CNN),将一个不带偏见的模型引入到NLP任务中,它可以很好地确定文本中带有最大池化层的识别性短语。因此,与递归或循环神经网络相比,CNN可以更好地捕捉文本的语义。CNN的时间复杂度也是O(n)。然而,以前对CNNs的研究倾向于使用简单的卷积核,如固定窗。使用这样的内核时,很难确定窗口大小:小窗口大小可能导致一些关键信息的丢失,而大的窗口会导致巨大的参数空间(这可能很难训练)。因此,它提出了一个问题:我们能否比传统的基于窗口的神经网络学习更多的上下文信息,更准确地表示文本的语义。

为了解决上述模型的局限性,作者们提出了一个循环卷积神经网络(RCNN),并将其应用于文本分类的任务。首先,我们应用一个双向的循环结构,与传统的基于窗口的神经网络相比,它可以大大减少噪声,从而最大程度地捕捉上下文信息。此外,该模型在学习文本表示时可以保留更大范围的词序。其次,使用了一个可以自动判断哪些特性在文本分类中扮演关键角色的池化层(max-pooling),以捕获文本中的关键组件。模型结合了RNN的结构和最大池化层,利用了循环神经模型和卷积神经模型的优点。此外,模型的时间复杂度为O(n),它与文本长度的长度是线性相关的。

RCNN模型框架

如下图是作者提出的模型框架,输入是一个文本D,它可以看成是由一系列单词(W1,W2,,,Wn)组成的。输出是一个概率分布,最大的那个位置对应文章属于的类别K。

接下来我们来仔细分析一下框架训练的过程。

Word Representation Learning

为了更准确地表达单词的意思,作者使用了单词本身和其上下文来表示这个词。在论文中,使用双向循环结构来实现。使用来定义词左边的文本,来定义词右边文本。这里和是长度为|c|的稠密向量。计算公式如下:

以“A sunset stroll along the South Bank affords an array of stunning vantage points” 这句话为例分析,结合上图,Cl(W7)表示了“Bank”这个词左侧的上下文语义信息(即“stroll along the South ”),同理,Cr(W7)表示了“Bank”这个词右侧的上下文语义信息(即“ affords an array ...”)。据此,我们就可以定义单词Wi的向量表示:

循环结构可以在文本的向前扫描时获取所有的Cl,在反向扫描时获取所有的Cr。时间复杂度为O(n)。当我们获得了单词Wi的表示Xi后,我们将一个线性变换与tanh激活函数一起应用到Xi,并将结果传递到下一层。

y是一个潜在的语义向量,每一个语义因素都将被分析,以确定代表文本的最有用的因素。

Text Representation Learning

上面部分是单词的表示,那么怎么来提取文本的特征表示呢?作者在这里使用了CNN,当前面所有的单词表示y都计算出来以后,接上一个max-pooling层

这里的max函数是一个按元素max的函数,也就是说,前一步单词表达得到的y是一个n维向量,这一步y的第k个元素是上一步y的所有向量的第k个元素的最大值。池化层将不同长度的文本转换为固定长度的向量。通过使用池化层,我们可以在整个文本中捕获信息。还有其他类型的池层,比如平均池层(Collobert et al. 2011)。这里不使用平均池,因为这里只有几个单词和它们的组合对于捕获文档的含义非常有用。在文档中,最大池化层试图找到最重要的潜在语义因素。

模型的最后一部分是输出层:

最后对y应用softmax得到概率:

本文参考资料

[1]

Recurrent Convolutional Neural Networks for Text Classification: https://dl.acm.org/doi/10.5555/2886521.2886636

  • END -

本文参考原文-http://bjbsair.com/2020-03-25/tech-info/6304/
**传统文本分类
**



之前介绍的都是属于深度神经网络框架的,那么在Deep Learning出现或者风靡之前,文本分类是怎么做的呢?

传统的文本分类工作主要分为三个过程:特征工程、特征选择和不同分类机器学习算法。

1.1 特征工程

对于文本数据的特征工程来说,最广泛使用的功能是bag-of-words、tf-idf等。此外,还可以设计一些更复杂的特征,比如词性标签、名词短语以及tree kernels等。

1.2 特征选择

特征选择旨在删除噪声特征,提高分类性能。最常见的特征选择方法比如去停词(例如,“The”)、信息增益、互信息或L1正则化等以选择有用的特性。

1.3 机器学习算法

机器学习算法常用分类器,如逻辑回归(LR)、朴素贝叶斯(NB)和支持向量机(SVM)。然而,这些方法都存在数据稀疏问题。

RCNN论文概述

论文来自Recurrent Convolutional Neural Networks for Text Classification[1]

作者在论文中首先对比了传统文本分类算法与深度学习算法。

传统的特征表示方法往往忽略文本中的上下文信息或词序,对于捕捉词的语义仍然不满意。例如,在句子,A sunset stroll along the South Bank affords an array of stunning vantage points中,当我们分析“Bank”(unigram)这个词时,我们可能不知道它是指金融机构还是河旁。此外,“South Bank”(bigram),尤其是考虑到两个大写字母,可能会误导那些对伦敦不太了解的人,把它当作金融机构。当我们获得更大的上下文“stroll along the South Bank”(5-gram),我们就能很容易地辨别出它的意思。虽然高阶n-grams和更复杂的特性(如树内核)被设计用于捕获更多的上下文信息和单词序列,但它们仍然存在数据稀疏问题,这严重影响了分类的准确性。近年来,经过预先训练的word embedding和深层神经网络的快速发展,给各种NLP任务带来了新的启发。word embedding是单词的一种分布式表示,极大地缓解了数据稀疏问题(Bengio et al. 2003)。预先训练的词嵌入可以捕捉有意义的句法和语义规律性。

接着对目前应用较为广泛的深度学习框架算法进行了综述:

  • Socher et al 提出递归神经网络(RecursiveNN),在构建句子表示方面已被证明是有效的。然而,递归通过树结构捕获了一个句子的语义。它的性能很大程度上取决于文本树结构的性能。此外,构造这样一种文本树的时间复杂度至少为,其中n为文本的长度。当模型遇到长句或文档时,这将是非常耗时的。此外,两个句子之间的关系很难用树结构来表示。因此,递归不适合对长句或文档建模。
  • 另一种模型,循环神经网络(RNN),模型时间复杂度为。该模型通过逐字分析一个文本单词,并将所有先前文本的语义存储在一个固定大小的隐藏层中。RNN的优点是能够更好地捕捉上下文信息。这可能有利于捕获长文本的语义。然而,RNN是一个有偏倚的模型,在这个模型中,后面的单词比先前的单词更具优势。因此,当它被用于捕获整个文档的语义时,它可能会降低效率,因为关键组件可能出现在文档中的任何地方,而不是最后。为了解决偏置问题,我们引入了卷积神经网络(CNN),将一个不带偏见的模型引入到NLP任务中,它可以很好地确定文本中带有最大池化层的识别性短语。因此,与递归或循环神经网络相比,CNN可以更好地捕捉文本的语义。CNN的时间复杂度也是O(n)。然而,以前对CNNs的研究倾向于使用简单的卷积核,如固定窗。使用这样的内核时,很难确定窗口大小:小窗口大小可能导致一些关键信息的丢失,而大的窗口会导致巨大的参数空间(这可能很难训练)。因此,它提出了一个问题:我们能否比传统的基于窗口的神经网络学习更多的上下文信息,更准确地表示文本的语义。

为了解决上述模型的局限性,作者们提出了一个循环卷积神经网络(RCNN),并将其应用于文本分类的任务。首先,我们应用一个双向的循环结构,与传统的基于窗口的神经网络相比,它可以大大减少噪声,从而最大程度地捕捉上下文信息。此外,该模型在学习文本表示时可以保留更大范围的词序。其次,使用了一个可以自动判断哪些特性在文本分类中扮演关键角色的池化层(max-pooling),以捕获文本中的关键组件。模型结合了RNN的结构和最大池化层,利用了循环神经模型和卷积神经模型的优点。此外,模型的时间复杂度为O(n),它与文本长度的长度是线性相关的。

RCNN模型框架

如下图是作者提出的模型框架,输入是一个文本D,它可以看成是由一系列单词(W1,W2,,,Wn)组成的。输出是一个概率分布,最大的那个位置对应文章属于的类别K。

接下来我们来仔细分析一下框架训练的过程。

Word Representation Learning

为了更准确地表达单词的意思,作者使用了单词本身和其上下文来表示这个词。在论文中,使用双向循环结构来实现。使用来定义词左边的文本,来定义词右边文本。这里和是长度为|c|的稠密向量。计算公式如下:

以“A sunset stroll along the South Bank affords an array of stunning vantage points” 这句话为例分析,结合上图,Cl(W7)表示了“Bank”这个词左侧的上下文语义信息(即“stroll along the South ”),同理,Cr(W7)表示了“Bank”这个词右侧的上下文语义信息(即“ affords an array ...”)。据此,我们就可以定义单词Wi的向量表示:

循环结构可以在文本的向前扫描时获取所有的Cl,在反向扫描时获取所有的Cr。时间复杂度为O(n)。当我们获得了单词Wi的表示Xi后,我们将一个线性变换与tanh激活函数一起应用到Xi,并将结果传递到下一层。

y是一个潜在的语义向量,每一个语义因素都将被分析,以确定代表文本的最有用的因素。

Text Representation Learning

上面部分是单词的表示,那么怎么来提取文本的特征表示呢?作者在这里使用了CNN,当前面所有的单词表示y都计算出来以后,接上一个max-pooling层

这里的max函数是一个按元素max的函数,也就是说,前一步单词表达得到的y是一个n维向量,这一步y的第k个元素是上一步y的所有向量的第k个元素的最大值。池化层将不同长度的文本转换为固定长度的向量。通过使用池化层,我们可以在整个文本中捕获信息。还有其他类型的池层,比如平均池层(Collobert et al. 2011)。这里不使用平均池,因为这里只有几个单词和它们的组合对于捕获文档的含义非常有用。在文档中,最大池化层试图找到最重要的潜在语义因素。

模型的最后一部分是输出层:

最后对y应用softmax得到概率:

本文参考资料

[1]

Recurrent Convolutional Neural Networks for Text Classification: https://dl.acm.org/doi/10.5555/2886521.2886636

  • END -

本文参考原文-http://bjbsair.com/2020-03-25/tech-info/6304/
**传统文本分类
**



之前介绍的都是属于深度神经网络框架的,那么在Deep Learning出现或者风靡之前,文本分类是怎么做的呢?

传统的文本分类工作主要分为三个过程:特征工程、特征选择和不同分类机器学习算法。

1.1 特征工程

对于文本数据的特征工程来说,最广泛使用的功能是bag-of-words、tf-idf等。此外,还可以设计一些更复杂的特征,比如词性标签、名词短语以及tree kernels等。

1.2 特征选择

特征选择旨在删除噪声特征,提高分类性能。最常见的特征选择方法比如去停词(例如,“The”)、信息增益、互信息或L1正则化等以选择有用的特性。

1.3 机器学习算法

机器学习算法常用分类器,如逻辑回归(LR)、朴素贝叶斯(NB)和支持向量机(SVM)。然而,这些方法都存在数据稀疏问题。

RCNN论文概述

论文来自Recurrent Convolutional Neural Networks for Text Classification[1]

作者在论文中首先对比了传统文本分类算法与深度学习算法。

传统的特征表示方法往往忽略文本中的上下文信息或词序,对于捕捉词的语义仍然不满意。例如,在句子,A sunset stroll along the South Bank affords an array of stunning vantage points中,当我们分析“Bank”(unigram)这个词时,我们可能不知道它是指金融机构还是河旁。此外,“South Bank”(bigram),尤其是考虑到两个大写字母,可能会误导那些对伦敦不太了解的人,把它当作金融机构。当我们获得更大的上下文“stroll along the South Bank”(5-gram),我们就能很容易地辨别出它的意思。虽然高阶n-grams和更复杂的特性(如树内核)被设计用于捕获更多的上下文信息和单词序列,但它们仍然存在数据稀疏问题,这严重影响了分类的准确性。近年来,经过预先训练的word embedding和深层神经网络的快速发展,给各种NLP任务带来了新的启发。word embedding是单词的一种分布式表示,极大地缓解了数据稀疏问题(Bengio et al. 2003)。预先训练的词嵌入可以捕捉有意义的句法和语义规律性。

接着对目前应用较为广泛的深度学习框架算法进行了综述:

  • Socher et al 提出递归神经网络(RecursiveNN),在构建句子表示方面已被证明是有效的。然而,递归通过树结构捕获了一个句子的语义。它的性能很大程度上取决于文本树结构的性能。此外,构造这样一种文本树的时间复杂度至少为,其中n为文本的长度。当模型遇到长句或文档时,这将是非常耗时的。此外,两个句子之间的关系很难用树结构来表示。因此,递归不适合对长句或文档建模。
  • 另一种模型,循环神经网络(RNN),模型时间复杂度为。该模型通过逐字分析一个文本单词,并将所有先前文本的语义存储在一个固定大小的隐藏层中。RNN的优点是能够更好地捕捉上下文信息。这可能有利于捕获长文本的语义。然而,RNN是一个有偏倚的模型,在这个模型中,后面的单词比先前的单词更具优势。因此,当它被用于捕获整个文档的语义时,它可能会降低效率,因为关键组件可能出现在文档中的任何地方,而不是最后。为了解决偏置问题,我们引入了卷积神经网络(CNN),将一个不带偏见的模型引入到NLP任务中,它可以很好地确定文本中带有最大池化层的识别性短语。因此,与递归或循环神经网络相比,CNN可以更好地捕捉文本的语义。CNN的时间复杂度也是O(n)。然而,以前对CNNs的研究倾向于使用简单的卷积核,如固定窗。使用这样的内核时,很难确定窗口大小:小窗口大小可能导致一些关键信息的丢失,而大的窗口会导致巨大的参数空间(这可能很难训练)。因此,它提出了一个问题:我们能否比传统的基于窗口的神经网络学习更多的上下文信息,更准确地表示文本的语义。

为了解决上述模型的局限性,作者们提出了一个循环卷积神经网络(RCNN),并将其应用于文本分类的任务。首先,我们应用一个双向的循环结构,与传统的基于窗口的神经网络相比,它可以大大减少噪声,从而最大程度地捕捉上下文信息。此外,该模型在学习文本表示时可以保留更大范围的词序。其次,使用了一个可以自动判断哪些特性在文本分类中扮演关键角色的池化层(max-pooling),以捕获文本中的关键组件。模型结合了RNN的结构和最大池化层,利用了循环神经模型和卷积神经模型的优点。此外,模型的时间复杂度为O(n),它与文本长度的长度是线性相关的。

RCNN模型框架

如下图是作者提出的模型框架,输入是一个文本D,它可以看成是由一系列单词(W1,W2,,,Wn)组成的。输出是一个概率分布,最大的那个位置对应文章属于的类别K。

接下来我们来仔细分析一下框架训练的过程。

Word Representation Learning

为了更准确地表达单词的意思,作者使用了单词本身和其上下文来表示这个词。在论文中,使用双向循环结构来实现。使用来定义词左边的文本,来定义词右边文本。这里和是长度为|c|的稠密向量。计算公式如下:

以“A sunset stroll along the South Bank affords an array of stunning vantage points” 这句话为例分析,结合上图,Cl(W7)表示了“Bank”这个词左侧的上下文语义信息(即“stroll along the South ”),同理,Cr(W7)表示了“Bank”这个词右侧的上下文语义信息(即“ affords an array ...”)。据此,我们就可以定义单词Wi的向量表示:

循环结构可以在文本的向前扫描时获取所有的Cl,在反向扫描时获取所有的Cr。时间复杂度为O(n)。当我们获得了单词Wi的表示Xi后,我们将一个线性变换与tanh激活函数一起应用到Xi,并将结果传递到下一层。

y是一个潜在的语义向量,每一个语义因素都将被分析,以确定代表文本的最有用的因素。

Text Representation Learning

上面部分是单词的表示,那么怎么来提取文本的特征表示呢?作者在这里使用了CNN,当前面所有的单词表示y都计算出来以后,接上一个max-pooling层

这里的max函数是一个按元素max的函数,也就是说,前一步单词表达得到的y是一个n维向量,这一步y的第k个元素是上一步y的所有向量的第k个元素的最大值。池化层将不同长度的文本转换为固定长度的向量。通过使用池化层,我们可以在整个文本中捕获信息。还有其他类型的池层,比如平均池层(Collobert et al. 2011)。这里不使用平均池,因为这里只有几个单词和它们的组合对于捕获文档的含义非常有用。在文档中,最大池化层试图找到最重要的潜在语义因素。

模型的最后一部分是输出层:

最后对y应用softmax得到概率:

本文参考资料

[1]

Recurrent Convolutional Neural Networks for Text Classification: https://dl.acm.org/doi/10.5555/2886521.2886636

  • END -

本文参考原文-http://bjbsair.com/2020-03-25/tech-info/6304/
**传统文本分类
**



之前介绍的都是属于深度神经网络框架的,那么在Deep Learning出现或者风靡之前,文本分类是怎么做的呢?

传统的文本分类工作主要分为三个过程:特征工程、特征选择和不同分类机器学习算法。

1.1 特征工程

对于文本数据的特征工程来说,最广泛使用的功能是bag-of-words、tf-idf等。此外,还可以设计一些更复杂的特征,比如词性标签、名词短语以及tree kernels等。

1.2 特征选择

特征选择旨在删除噪声特征,提高分类性能。最常见的特征选择方法比如去停词(例如,“The”)、信息增益、互信息或L1正则化等以选择有用的特性。

1.3 机器学习算法

机器学习算法常用分类器,如逻辑回归(LR)、朴素贝叶斯(NB)和支持向量机(SVM)。然而,这些方法都存在数据稀疏问题。

RCNN论文概述

论文来自Recurrent Convolutional Neural Networks for Text Classification[1]

作者在论文中首先对比了传统文本分类算法与深度学习算法。

传统的特征表示方法往往忽略文本中的上下文信息或词序,对于捕捉词的语义仍然不满意。例如,在句子,A sunset stroll along the South Bank affords an array of stunning vantage points中,当我们分析“Bank”(unigram)这个词时,我们可能不知道它是指金融机构还是河旁。此外,“South Bank”(bigram),尤其是考虑到两个大写字母,可能会误导那些对伦敦不太了解的人,把它当作金融机构。当我们获得更大的上下文“stroll along the South Bank”(5-gram),我们就能很容易地辨别出它的意思。虽然高阶n-grams和更复杂的特性(如树内核)被设计用于捕获更多的上下文信息和单词序列,但它们仍然存在数据稀疏问题,这严重影响了分类的准确性。近年来,经过预先训练的word embedding和深层神经网络的快速发展,给各种NLP任务带来了新的启发。word embedding是单词的一种分布式表示,极大地缓解了数据稀疏问题(Bengio et al. 2003)。预先训练的词嵌入可以捕捉有意义的句法和语义规律性。

接着对目前应用较为广泛的深度学习框架算法进行了综述:

  • Socher et al 提出递归神经网络(RecursiveNN),在构建句子表示方面已被证明是有效的。然而,递归通过树结构捕获了一个句子的语义。它的性能很大程度上取决于文本树结构的性能。此外,构造这样一种文本树的时间复杂度至少为,其中n为文本的长度。当模型遇到长句或文档时,这将是非常耗时的。此外,两个句子之间的关系很难用树结构来表示。因此,递归不适合对长句或文档建模。
  • 另一种模型,循环神经网络(RNN),模型时间复杂度为。该模型通过逐字分析一个文本单词,并将所有先前文本的语义存储在一个固定大小的隐藏层中。RNN的优点是能够更好地捕捉上下文信息。这可能有利于捕获长文本的语义。然而,RNN是一个有偏倚的模型,在这个模型中,后面的单词比先前的单词更具优势。因此,当它被用于捕获整个文档的语义时,它可能会降低效率,因为关键组件可能出现在文档中的任何地方,而不是最后。为了解决偏置问题,我们引入了卷积神经网络(CNN),将一个不带偏见的模型引入到NLP任务中,它可以很好地确定文本中带有最大池化层的识别性短语。因此,与递归或循环神经网络相比,CNN可以更好地捕捉文本的语义。CNN的时间复杂度也是O(n)。然而,以前对CNNs的研究倾向于使用简单的卷积核,如固定窗。使用这样的内核时,很难确定窗口大小:小窗口大小可能导致一些关键信息的丢失,而大的窗口会导致巨大的参数空间(这可能很难训练)。因此,它提出了一个问题:我们能否比传统的基于窗口的神经网络学习更多的上下文信息,更准确地表示文本的语义。

为了解决上述模型的局限性,作者们提出了一个循环卷积神经网络(RCNN),并将其应用于文本分类的任务。首先,我们应用一个双向的循环结构,与传统的基于窗口的神经网络相比,它可以大大减少噪声,从而最大程度地捕捉上下文信息。此外,该模型在学习文本表示时可以保留更大范围的词序。其次,使用了一个可以自动判断哪些特性在文本分类中扮演关键角色的池化层(max-pooling),以捕获文本中的关键组件。模型结合了RNN的结构和最大池化层,利用了循环神经模型和卷积神经模型的优点。此外,模型的时间复杂度为O(n),它与文本长度的长度是线性相关的。

RCNN模型框架

如下图是作者提出的模型框架,输入是一个文本D,它可以看成是由一系列单词(W1,W2,,,Wn)组成的。输出是一个概率分布,最大的那个位置对应文章属于的类别K。

接下来我们来仔细分析一下框架训练的过程。

Word Representation Learning

为了更准确地表达单词的意思,作者使用了单词本身和其上下文来表示这个词。在论文中,使用双向循环结构来实现。使用来定义词左边的文本,来定义词右边文本。这里和是长度为|c|的稠密向量。计算公式如下:

以“A sunset stroll along the South Bank affords an array of stunning vantage points” 这句话为例分析,结合上图,Cl(W7)表示了“Bank”这个词左侧的上下文语义信息(即“stroll along the South ”),同理,Cr(W7)表示了“Bank”这个词右侧的上下文语义信息(即“ affords an array ...”)。据此,我们就可以定义单词Wi的向量表示:

循环结构可以在文本的向前扫描时获取所有的Cl,在反向扫描时获取所有的Cr。时间复杂度为O(n)。当我们获得了单词Wi的表示Xi后,我们将一个线性变换与tanh激活函数一起应用到Xi,并将结果传递到下一层。

y是一个潜在的语义向量,每一个语义因素都将被分析,以确定代表文本的最有用的因素。

Text Representation Learning

上面部分是单词的表示,那么怎么来提取文本的特征表示呢?作者在这里使用了CNN,当前面所有的单词表示y都计算出来以后,接上一个max-pooling层

这里的max函数是一个按元素max的函数,也就是说,前一步单词表达得到的y是一个n维向量,这一步y的第k个元素是上一步y的所有向量的第k个元素的最大值。池化层将不同长度的文本转换为固定长度的向量。通过使用池化层,我们可以在整个文本中捕获信息。还有其他类型的池层,比如平均池层(Collobert et al. 2011)。这里不使用平均池,因为这里只有几个单词和它们的组合对于捕获文档的含义非常有用。在文档中,最大池化层试图找到最重要的潜在语义因素。

模型的最后一部分是输出层:

最后对y应用softmax得到概率:

本文参考资料

[1]

Recurrent Convolutional Neural Networks for Text Classification: https://dl.acm.org/doi/10.5555/2886521.2886636

  • END -

本文参考原文-http://bjbsair.com/2020-03-25/tech-info/6304/
**传统文本分类
**



之前介绍的都是属于深度神经网络框架的,那么在Deep Learning出现或者风靡之前,文本分类是怎么做的呢?

传统的文本分类工作主要分为三个过程:特征工程、特征选择和不同分类机器学习算法。

1.1 特征工程

对于文本数据的特征工程来说,最广泛使用的功能是bag-of-words、tf-idf等。此外,还可以设计一些更复杂的特征,比如词性标签、名词短语以及tree kernels等。

1.2 特征选择

特征选择旨在删除噪声特征,提高分类性能。最常见的特征选择方法比如去停词(例如,“The”)、信息增益、互信息或L1正则化等以选择有用的特性。

1.3 机器学习算法

机器学习算法常用分类器,如逻辑回归(LR)、朴素贝叶斯(NB)和支持向量机(SVM)。然而,这些方法都存在数据稀疏问题。

RCNN论文概述

论文来自Recurrent Convolutional Neural Networks for Text Classification[1]

作者在论文中首先对比了传统文本分类算法与深度学习算法。

传统的特征表示方法往往忽略文本中的上下文信息或词序,对于捕捉词的语义仍然不满意。例如,在句子,A sunset stroll along the South Bank affords an array of stunning vantage points中,当我们分析“Bank”(unigram)这个词时,我们可能不知道它是指金融机构还是河旁。此外,“South Bank”(bigram),尤其是考虑到两个大写字母,可能会误导那些对伦敦不太了解的人,把它当作金融机构。当我们获得更大的上下文“stroll along the South Bank”(5-gram),我们就能很容易地辨别出它的意思。虽然高阶n-grams和更复杂的特性(如树内核)被设计用于捕获更多的上下文信息和单词序列,但它们仍然存在数据稀疏问题,这严重影响了分类的准确性。近年来,经过预先训练的word embedding和深层神经网络的快速发展,给各种NLP任务带来了新的启发。word embedding是单词的一种分布式表示,极大地缓解了数据稀疏问题(Bengio et al. 2003)。预先训练的词嵌入可以捕捉有意义的句法和语义规律性。

接着对目前应用较为广泛的深度学习框架算法进行了综述:

  • Socher et al 提出递归神经网络(RecursiveNN),在构建句子表示方面已被证明是有效的。然而,递归通过树结构捕获了一个句子的语义。它的性能很大程度上取决于文本树结构的性能。此外,构造这样一种文本树的时间复杂度至少为,其中n为文本的长度。当模型遇到长句或文档时,这将是非常耗时的。此外,两个句子之间的关系很难用树结构来表示。因此,递归不适合对长句或文档建模。
  • 另一种模型,循环神经网络(RNN),模型时间复杂度为。该模型通过逐字分析一个文本单词,并将所有先前文本的语义存储在一个固定大小的隐藏层中。RNN的优点是能够更好地捕捉上下文信息。这可能有利于捕获长文本的语义。然而,RNN是一个有偏倚的模型,在这个模型中,后面的单词比先前的单词更具优势。因此,当它被用于捕获整个文档的语义时,它可能会降低效率,因为关键组件可能出现在文档中的任何地方,而不是最后。为了解决偏置问题,我们引入了卷积神经网络(CNN),将一个不带偏见的模型引入到NLP任务中,它可以很好地确定文本中带有最大池化层的识别性短语。因此,与递归或循环神经网络相比,CNN可以更好地捕捉文本的语义。CNN的时间复杂度也是O(n)。然而,以前对CNNs的研究倾向于使用简单的卷积核,如固定窗。使用这样的内核时,很难确定窗口大小:小窗口大小可能导致一些关键信息的丢失,而大的窗口会导致巨大的参数空间(这可能很难训练)。因此,它提出了一个问题:我们能否比传统的基于窗口的神经网络学习更多的上下文信息,更准确地表示文本的语义。

为了解决上述模型的局限性,作者们提出了一个循环卷积神经网络(RCNN),并将其应用于文本分类的任务。首先,我们应用一个双向的循环结构,与传统的基于窗口的神经网络相比,它可以大大减少噪声,从而最大程度地捕捉上下文信息。此外,该模型在学习文本表示时可以保留更大范围的词序。其次,使用了一个可以自动判断哪些特性在文本分类中扮演关键角色的池化层(max-pooling),以捕获文本中的关键组件。模型结合了RNN的结构和最大池化层,利用了循环神经模型和卷积神经模型的优点。此外,模型的时间复杂度为O(n),它与文本长度的长度是线性相关的。

RCNN模型框架

如下图是作者提出的模型框架,输入是一个文本D,它可以看成是由一系列单词(W1,W2,,,Wn)组成的。输出是一个概率分布,最大的那个位置对应文章属于的类别K。

接下来我们来仔细分析一下框架训练的过程。

Word Representation Learning

为了更准确地表达单词的意思,作者使用了单词本身和其上下文来表示这个词。在论文中,使用双向循环结构来实现。使用来定义词左边的文本,来定义词右边文本。这里和是长度为|c|的稠密向量。计算公式如下:

以“A sunset stroll along the South Bank affords an array of stunning vantage points” 这句话为例分析,结合上图,Cl(W7)表示了“Bank”这个词左侧的上下文语义信息(即“stroll along the South ”),同理,Cr(W7)表示了“Bank”这个词右侧的上下文语义信息(即“ affords an array ...”)。据此,我们就可以定义单词Wi的向量表示:

循环结构可以在文本的向前扫描时获取所有的Cl,在反向扫描时获取所有的Cr。时间复杂度为O(n)。当我们获得了单词Wi的表示Xi后,我们将一个线性变换与tanh激活函数一起应用到Xi,并将结果传递到下一层。

y是一个潜在的语义向量,每一个语义因素都将被分析,以确定代表文本的最有用的因素。

Text Representation Learning

上面部分是单词的表示,那么怎么来提取文本的特征表示呢?作者在这里使用了CNN,当前面所有的单词表示y都计算出来以后,接上一个max-pooling层

这里的max函数是一个按元素max的函数,也就是说,前一步单词表达得到的y是一个n维向量,这一步y的第k个元素是上一步y的所有向量的第k个元素的最大值。池化层将不同长度的文本转换为固定长度的向量。通过使用池化层,我们可以在整个文本中捕获信息。还有其他类型的池层,比如平均池层(Collobert et al. 2011)。这里不使用平均池,因为这里只有几个单词和它们的组合对于捕获文档的含义非常有用。在文档中,最大池化层试图找到最重要的潜在语义因素。

模型的最后一部分是输出层:

最后对y应用softmax得到概率:

本文参考资料

[1]

Recurrent Convolutional Neural Networks for Text Classification: https://dl.acm.org/doi/10.5555/2886521.2886636

  • END -

本文参考原文-http://bjbsair.com/2020-03-25/tech-info/6304/
**传统文本分类
**



之前介绍的都是属于深度神经网络框架的,那么在Deep Learning出现或者风靡之前,文本分类是怎么做的呢?

传统的文本分类工作主要分为三个过程:特征工程、特征选择和不同分类机器学习算法。

1.1 特征工程

对于文本数据的特征工程来说,最广泛使用的功能是bag-of-words、tf-idf等。此外,还可以设计一些更复杂的特征,比如词性标签、名词短语以及tree kernels等。

1.2 特征选择

特征选择旨在删除噪声特征,提高分类性能。最常见的特征选择方法比如去停词(例如,“The”)、信息增益、互信息或L1正则化等以选择有用的特性。

1.3 机器学习算法

机器学习算法常用分类器,如逻辑回归(LR)、朴素贝叶斯(NB)和支持向量机(SVM)。然而,这些方法都存在数据稀疏问题。

RCNN论文概述

论文来自Recurrent Convolutional Neural Networks for Text Classification[1]

作者在论文中首先对比了传统文本分类算法与深度学习算法。

传统的特征表示方法往往忽略文本中的上下文信息或词序,对于捕捉词的语义仍然不满意。例如,在句子,A sunset stroll along the South Bank affords an array of stunning vantage points中,当我们分析“Bank”(unigram)这个词时,我们可能不知道它是指金融机构还是河旁。此外,“South Bank”(bigram),尤其是考虑到两个大写字母,可能会误导那些对伦敦不太了解的人,把它当作金融机构。当我们获得更大的上下文“stroll along the South Bank”(5-gram),我们就能很容易地辨别出它的意思。虽然高阶n-grams和更复杂的特性(如树内核)被设计用于捕获更多的上下文信息和单词序列,但它们仍然存在数据稀疏问题,这严重影响了分类的准确性。近年来,经过预先训练的word embedding和深层神经网络的快速发展,给各种NLP任务带来了新的启发。word embedding是单词的一种分布式表示,极大地缓解了数据稀疏问题(Bengio et al. 2003)。预先训练的词嵌入可以捕捉有意义的句法和语义规律性。

接着对目前应用较为广泛的深度学习框架算法进行了综述:

  • Socher et al 提出递归神经网络(RecursiveNN),在构建句子表示方面已被证明是有效的。然而,递归通过树结构捕获了一个句子的语义。它的性能很大程度上取决于文本树结构的性能。此外,构造这样一种文本树的时间复杂度至少为,其中n为文本的长度。当模型遇到长句或文档时,这将是非常耗时的。此外,两个句子之间的关系很难用树结构来表示。因此,递归不适合对长句或文档建模。
  • 另一种模型,循环神经网络(RNN),模型时间复杂度为。该模型通过逐字分析一个文本单词,并将所有先前文本的语义存储在一个固定大小的隐藏层中。RNN的优点是能够更好地捕捉上下文信息。这可能有利于捕获长文本的语义。然而,RNN是一个有偏倚的模型,在这个模型中,后面的单词比先前的单词更具优势。因此,当它被用于捕获整个文档的语义时,它可能会降低效率,因为关键组件可能出现在文档中的任何地方,而不是最后。为了解决偏置问题,我们引入了卷积神经网络(CNN),将一个不带偏见的模型引入到NLP任务中,它可以很好地确定文本中带有最大池化层的识别性短语。因此,与递归或循环神经网络相比,CNN可以更好地捕捉文本的语义。CNN的时间复杂度也是O(n)。然而,以前对CNNs的研究倾向于使用简单的卷积核,如固定窗。使用这样的内核时,很难确定窗口大小:小窗口大小可能导致一些关键信息的丢失,而大的窗口会导致巨大的参数空间(这可能很难训练)。因此,它提出了一个问题:我们能否比传统的基于窗口的神经网络学习更多的上下文信息,更准确地表示文本的语义。

为了解决上述模型的局限性,作者们提出了一个循环卷积神经网络(RCNN),并将其应用于文本分类的任务。首先,我们应用一个双向的循环结构,与传统的基于窗口的神经网络相比,它可以大大减少噪声,从而最大程度地捕捉上下文信息。此外,该模型在学习文本表示时可以保留更大范围的词序。其次,使用了一个可以自动判断哪些特性在文本分类中扮演关键角色的池化层(max-pooling),以捕获文本中的关键组件。模型结合了RNN的结构和最大池化层,利用了循环神经模型和卷积神经模型的优点。此外,模型的时间复杂度为O(n),它与文本长度的长度是线性相关的。

RCNN模型框架

如下图是作者提出的模型框架,输入是一个文本D,它可以看成是由一系列单词(W1,W2,,,Wn)组成的。输出是一个概率分布,最大的那个位置对应文章属于的类别K。

接下来我们来仔细分析一下框架训练的过程。

Word Representation Learning

为了更准确地表达单词的意思,作者使用了单词本身和其上下文来表示这个词。在论文中,使用双向循环结构来实现。使用来定义词左边的文本,来定义词右边文本。这里和是长度为|c|的稠密向量。计算公式如下:

以“A sunset stroll along the South Bank affords an array of stunning vantage points” 这句话为例分析,结合上图,Cl(W7)表示了“Bank”这个词左侧的上下文语义信息(即“stroll along the South ”),同理,Cr(W7)表示了“Bank”这个词右侧的上下文语义信息(即“ affords an array ...”)。据此,我们就可以定义单词Wi的向量表示:

循环结构可以在文本的向前扫描时获取所有的Cl,在反向扫描时获取所有的Cr。时间复杂度为O(n)。当我们获得了单词Wi的表示Xi后,我们将一个线性变换与tanh激活函数一起应用到Xi,并将结果传递到下一层。

y是一个潜在的语义向量,每一个语义因素都将被分析,以确定代表文本的最有用的因素。

Text Representation Learning

上面部分是单词的表示,那么怎么来提取文本的特征表示呢?作者在这里使用了CNN,当前面所有的单词表示y都计算出来以后,接上一个max-pooling层

这里的max函数是一个按元素max的函数,也就是说,前一步单词表达得到的y是一个n维向量,这一步y的第k个元素是上一步y的所有向量的第k个元素的最大值。池化层将不同长度的文本转换为固定长度的向量。通过使用池化层,我们可以在整个文本中捕获信息。还有其他类型的池层,比如平均池层(Collobert et al. 2011)。这里不使用平均池,因为这里只有几个单词和它们的组合对于捕获文档的含义非常有用。在文档中,最大池化层试图找到最重要的潜在语义因素。

模型的最后一部分是输出层:

最后对y应用softmax得到概率:

本文参考资料

[1]

Recurrent Convolutional Neural Networks for Text Classification: https://dl.acm.org/doi/10.5555/2886521.2886636

  • END -

原文地址:https://www.cnblogs.com/lihanlin/p/12571870.html

时间: 2024-10-10 08:14:30

step by step带你RCNN文本分类的相关文章

带监督的文本分类算法FastText

该算法由facebook在2016年开源,典型应用场景是"带监督的文本分类问题". 模型 模型的优化目标如下: 其中,$<x_n,y_n>$是一条训练样本,$y_n$是训练目标,$x_n$是normalized bag of features.矩阵参数A是基于word的look-up table,也就是A是词的embedding向量.$Ax_n$矩阵运算的数学意义是将word的embedding向量找到后相加或者取平均,得到hidden向量.矩阵参数B是函数f的参数,函数f

step by step带你fastText文本分类

本文参考原文-http://bjbsair.com/2020-03-25/tech-info/6300/ **写在前面 ** 今天的教程是基于FAIR的Bag of Tricks for Efficient Text Classification[1].也就是我们常说的fastText. 最让人欣喜的这篇论文配套提供了fasttext工具包.这个工具包代码质量非常高,论文结果一键还原,目前已经是包装地非常专业了,这是fastText官网和其github代码库,以及提供了python接口,可以直接

step by step带你HAN文本分类

本文参考原文-http://bjbsair.com/2020-03-25/tech-info/6302/ 今天来看看网红Attention的效果,来自ACL的论文Hierarchical Attention Networks for Document Classification **论文概述 ** 近年来,在NLP领域,好像最流行的就是RNN.LSTM.GRU.Attention等及其变体的组合框架.这篇论文里作者就对文本的结构进行分析,使用了双向GRU的结构,并且对Attention进行调整

rcnn 文本分类代码

import tensorflow as tf class TextRCNN: def __init__(self, sequence_length, num_classes, vocab_size, word_embedding_size, context_embedding_size, cell_type, hidden_size, l2_reg_lambda=0.0): # Placeholders for input, output and dropout self.input_text

文本分类实战(六)—— RCNN模型

1 大纲概述 文本分类这个系列将会有十篇左右,包括基于word2vec预训练的文本分类,与及基于最新的预训练模型(ELMo,BERT等)的文本分类.总共有以下系列: word2vec预训练词向量 textCNN 模型 charCNN 模型 Bi-LSTM 模型 Bi-LSTM + Attention 模型 RCNN 模型 Adversarial LSTM 模型 Transformer 模型 ELMo 预训练模型 BERT 预训练模型 所有代码均在textClassifier仓库中,觉得有帮助,请

机器学习基础——带你实战朴素贝叶斯模型文本分类

本文始发于个人公众号:TechFlow 上一篇文章当中我们介绍了朴素贝叶斯模型的基本原理. 朴素贝叶斯的核心本质是假设样本当中的变量服从某个分布,从而利用条件概率计算出样本属于某个类别的概率.一般来说一个样本往往会含有许多特征,这些特征之间很有可能是有相关性的.为了简化模型,朴素贝叶斯模型假设这些变量是独立的.这样我们就可以很简单地计算出样本的概率. 想要回顾其中细节的同学,可以点击链接回到之前的文章: 机器学习基础--让你一文学会朴素贝叶斯模型 在我们学习算法的过程中,如果只看模型的原理以及理

LingPipe-TextClassification(文本分类)

What is Text Classification? Text classification typically involves assigning a document to a category by automated or human means. LingPipe provides a classification facility that takes examples of text classifications--typically generated by a huma

2017知乎看山杯总结(多标签文本分类)

http://blog.csdn.net/jerr__y/article/details/77751885 关于比赛详情,请戳:2017 知乎看山杯机器学习挑战赛 代码:https://github.com/yongyehuang/zhihu-text-classification 基于:python 2.7, TensorFlow 1.2.1 任务描述:参赛者需要根据知乎给出的问题及话题标签的绑定关系的训练数据,训练出对未标注数据自动标注的模型. 标注数据中包含 300 万个问题,每个问题有

文本分类实战(五)—— Bi-LSTM + Attention模型

1 大纲概述 文本分类这个系列将会有十篇左右,包括基于word2vec预训练的文本分类,与及基于最新的预训练模型(ELMo,BERT等)的文本分类.总共有以下系列: word2vec预训练词向量 textCNN 模型 charCNN 模型 Bi-LSTM 模型 Bi-LSTM + Attention 模型 RCNN 模型 Adversarial LSTM 模型 Transformer 模型 ELMo 预训练模型 BERT 预训练模型 所有代码均在textClassifier仓库中,觉得有帮助,请