[自然语言处理入门]三、文本分类基础

三、文本分类基础

学习路线参考:

https://blog.51cto.com/u_15298598/3121189

https://github.com/Ailln/nlp-roadmap

https://juejin.cn/post/7113066539053482021

https://zhuanlan.zhihu.com/p/100567371

https://cloud.tencent.com/developer/article/1884740

本节学习使用工具&阅读文章:

https://zhuanlan.zhihu.com/p/32965521

https://blog.csdn.net/feilong_csdn/article/details/88655927

https://zhuanlan.zhihu.com/p/30875066

https://blog.csdn.net/qq_43019117/article/details/82770124

https://blog.csdn.net/qq_39439006/article/details/126760701

https://zhuanlan.zhihu.com/p/40276005

1. Softmax回归

Softmax回归模型是logistic回归模型在多分类问题上的推广。

  1. 假设函数

    对于给定的测试输入\(x\),用假设函数针对每一个类别 \(j\)估算出概率值 \(p(y=j|x)\) ,即,估计\(x\)的每一种分类结果出现的概率。假设函数将要输出一个\(k\)维的向量来表示这\(k\)个估计的概率值。假设函数\(h_{w}(x)\)形式如下:

    \(h_{w}(x^{(i)})= \begin{bmatrix}p(y^{(i)}=1|x^{(i)};w)\\ p(y^{(i)}=2|x^{(i)};w)\\……\\ p(y^{(i)}=k|x^{(i)};w) \end{bmatrix} = {1 \over \sum^k_{j=1}e^{w_jx^{(i)}}}\begin{bmatrix}e^{w_1x^{(i)}}\\ e^{w_2x^{(i)}}\\……\\ e^{w_kx^{(i)}} \end{bmatrix}\)

    其中\(\theta_1,\theta_2,……,\theta_k\)是模型的参数。\({1 \over \sum^k_{j=1}e^{w_jx^{(i)}}}\)这一项对概率分布进行归一化,使得所有概率之和为1。

  2. 代价函数

    \(J(w)=-{1\over m}[\sum^m_{i=1}\sum^k_{j=1}1\{y^{(i)}=j\}log{e^{w_jx^{(i)}}\over\sum^k_{l=1}e^{w_lx^{(i)}}}\)

    上述公式是logistic回归代价函数的推广。

  3. 层级Softmax

    标准的Softmax回归需要对所有的K个概率做归一化,这在类别很多时非常耗时。可以使用层级Softmax,它的基本思想是使用树的层级结构替代扁平化的标准Softmax。和之前的word2vec使用的是同一种优化方法。

    实际上这是用多次二分类的逻辑回归代替Softmax回归,但是通过层级Softmax,计算复杂度可以大幅下降。

2. Fasttext

FastText是一个快速文本分类算法,与基于神经网络的分类算法相比有以下优点

  • FastText在保持高精度的情况下加快了训练速度和测试速度
  • FastText不需要预训练好的词向量,fastText会自己训练词向量
  • FastText两个重要的优化:Hierarchical Softmax、N-gram
  1. 字符集别的n-gram

    word2vec把语料库中的每个单词当成原子的,它会为每个单词生成一个向量。这忽略了单词内部的形态特征。为了克服这个问题,fastText使用了字符级别的n-grams来表示一个单词。对于单词apple,假设n的取值为3,则它的trigram有

    ap, app, ppl, ple, le

    优点:

    • 对于低频词生成的词向量效果会更好。因为它们的n-gram可以和其它词共享。
    • 对于训练词库之外的单词,仍然可以构建它们的词向量。我们可以叠加它们的字符级n-gram向量。
  2. 词嵌入

    首先,FastText通过Skip-Gram训练了字符级别的N-gram的Embedding,然后通过将其相加得到词向量。

    其次,这样处理会丢失词顺序,FastText增加了N-gram的特征。具体做法是把N-gram当成一个词,也用embedding向量来表示,在计算隐层时,把N-gram的embedding向量也加进去求和取平均。

    举个例子来说,假设某篇文章只有3个词:[W1,W2,W3]。N-gram的N取2,w1、w2、w3以及w12、w23分别表示词W1、W2、W3和bigram W1-W2,W2-W3的embedding向量,那么文章的隐层可表示为:

    \(h={1\over5}(w_1+w_2+w_3+w_{12}+w_{23})\)

    具体实现上,由于n-gram的量远比word大的多,完全存下所有的n-gram也不现实。FastText采用了Hash桶的方式,把所有的n-gram都哈希到buckets个桶中,哈希到同一个桶的所有n-gram共享一个embedding vector。

  3. 模型架构

    img

    • 输入:一篇文章中,每个词的word embedding表示以及n-gram信息。

    • 输出:该篇文章对应的分类label。

3. TextCNN

与传统图像的CNN网络相比,TextCNN在网络结构上没有任何变化,只有一层卷积,一层max-pooling,最后将输出外接softmax来n分类。网络结构简单导致参数数目少,计算量少,训练速度快。

自然语言中的CNN--TextCNN(基础篇)

  1. 输入层(嵌入层)

    一般使用预训练好的词向量(Word2Vector或者glove)方法作为Embedding layer。也存在一些变化模型。

    • CNN-rand:作为一个基础模型,Embedding layer所有words被随机初始化,然后模型整体进行训练。
    • CNN-static:模型使用预训练的word2vec初始化Embedding layer,对于那些在预训练的word2vec没有的单词,随机初始化。然后固定Embedding layer,fine-tune整个网络。
    • CNN-non-static:训练的时候,Embedding layer跟随整个网络一起训练。
    • CNN-multichannal:Embedding layer有两个channel,一个channel为static,一个为non-static。然后整个网络fine-tune时只有一个channel更新参数。两个channel都是使用预训练的word2vec初始化的。
  2. 卷积层

    相比于一般CNN中的卷积核,这里的卷积核的宽度一般需要与词向量的维度一样。卷积核的高度则是一个超参数可以设置,比如设置为2、3等。然后剩下的就是正常的卷积过程了。

    在传统CV领域,可利用 (R, G, B) 作为不同channel,通道个数一般为3个。在使用TextCNN做分类时,通道个数一般是一个。

    其实也可以采用多channel输入,TextCNN的多channel通常是不同方式的embedding方式。但是实验证明,单channel的TextCNN表现都要优于多channels的TextCNN。

  3. 池化层&全连接层:与CNN相同。

posted @ 2023-03-07 21:58  无机呱子  阅读(26)  评论(0编辑  收藏  举报