美文网首页
手写神经网络处理文本分类问题

手写神经网络处理文本分类问题

作者: 风风荷举 | 来源:发表于2019-04-21 19:11 被阅读0次
    • 首先我们先来明确一些基本的概念。

    通常,人们把信息检索问题抽象为:在文档集合D上,对于由关键词w_1 ... w_k组成的查询串q,返回一个按查询q和文档d匹配度relevance(q, d)排序的相关文档列表D'

    特征提取

    由来

    • 剑桥大学 Karen Sparck Jones 1972年提出,但并没有解释为什么使用log,而不是其他函数。同年,同为剑桥的的罗宾逊谢了两页纸的解释,解释得很垃圾。后来康奈尔大学的Salton多次撰文解释用途,将TF-IDF发扬光大。
    • 2004年《文学家学报》重印了Sparck的论文,为其正名,罗宾逊再次在同期期刊从香农的信息论角度解释了一番,写了18页纸,同样写的很垃圾。

    tf-idf模型

    • Term Frequence(词频)
      • 词w在文档d中的词频tf (Term Frequency),即词w在文档d中出现次数count(w, d)和文档d中总词数size(d)的比值:
        tf(w,d) = \frac{count(w, d)}{size(d)}
    • Inverse Document Frequency(逆文本频率)
      • 词w在整个文档集合中的逆向文档频率idf (Inverse Document Frequency),即文档总数n与词w所出现文件数docs(w, D)比值的对数:
        idf = log(\frac{n} {docs(w, D)})
    • tf-idf
      • tf-idf模型根据tf和idf为每一个文档d和由关键词w_1 ... w_k组成的查询串q计算一个权值,用于表示查询串q与文档d的匹配度:

    tf-idf(q, d)
    = \sum_1^k {tf-idf(w_i, d) }
    = \sum_1^k {tf(w_i, d) * idf(w_i) }

    • 单文本词频
      • 这里的单文本指的是一个词串q,本词串q既可以是一个句子,也可以是一整篇文章,此处就代指我们所要进行检索的输入文本。而它的词频指的也就是各项词组的词频之和:
        tf(q) = tf(w_1) + tf(w_2) + ... + tf(w_n)
    • Stop Word(停止词)
      • 在处理文本的tf时,我们经常会遇到一些诸如 am, is, are, 的, 地, 得……这样的词汇,这些词汇的tf值会相对偏高,我们可以通过设置停止词表来剥除这些词。

    神经网络

    神经网络的特点是从数据中学习,可以根据输入数据自动决定权重参数的值。在比较大的神经网络中,层数深度和每层的节点数量都比较深,比较多,就难以手动指定参数,但如果此时我们使用神经网络就可以自动调整参数到适宜的范围。

    网络相关参数

    • 网络节点:网络中的每一个处理单元都被我们称作是一个节点。

      • weight(权重)与bias(偏置):每个节点会对输入数据进行一个类似
        output = w × x + b 的表达式,我们称当中的w为权重,b为偏置。
        神经网络的计算
    • 网络层:如果我们按照网络的规则来看待的话,我们可以将网络分为以下几层,输入层,输出层,中间层。中间层我们又称之为隐藏层。


      网络层

    训练数据/测试数据

    • 机器学习中,一般将数据分为训练数据和测试数据两部分来进行学习和实验等。首先,使用训练数据进行学习,寻找最优的参数;然后,使用测试数据评价训练得到的模型的实际能力。
    • 为什么需要将数据分为训练数据和测试数据呢?因为我们追求的是模型的泛化能力。为了正确评价模型的泛化能力,就必须划分训练数据和测试数据。另外,训练数据也可以称为监督数据。
    • 泛化能力是指处理未被观察过的数据(不包含在训练数据中的数据)的能力。获得泛化能力是机器学习的最终目标。比如我们做垃圾邮件识别,那么使它可以识别所有的邮件是否为垃圾邮件就是我们所追求的泛化能力
    • Over Fitting(过拟合):仅仅用一个数据集去学习和评价参数,是无法进行正确评价的。这样会导致可以顺利地处理某个数据集,但无法处理其他数据集的情况。这样的情况被称为过拟合。

    激活函数

    • 我们在得到节点的output之后,通常会使它经过一个激活函数h(x),而激活函数正是神经网络的精髓所在,试想,如果激活函数依然如节点计算一样是线性的,那么我们最终得到的只是有限个线性表达式的叠加,只能表达线性关系。但加入了激活函数就可以帮我们拟合非线性的情况。常用的激活函数有sigmoid,relu等等。

    损失函数

    • mean squared error 均方误差
      E = \frac{1}{2}\sum_k(y_k - t_k)^2
    • Kullback-Leibler Divergence 概率分布交叉熵
      E = -\sum_kt_klog(y_k)

    前向/反向传播

    • 正向传播:“从左向右进行计算”是一种正方向上的传播,简称为正向传播 (forward propagation)。正向传播是从计算图出发点到结束点的传播。即从数据输入之后,我们通过全连接层的层层传递,最后在输出层得到结果的过程,被我们称为正向传播
    • 局部计算:“局部”这个词的意思是“与自己相关的某个小范围”。局部计算是指,无论全局发生了什么,都能只根据与自己相关的信息输出接下来的结果。
    • 链式法则:如果某个函数由复合函数表示,则该复合函数的导数可以用构成复合函数的各个函数的导数的乘积表示。
    • 反向传播:在我们得到运算结果之后,如果想要校调参数的话,可以通过反向传播的方法来实现,而实现这一点则需要我们首先通过损失函数计算出loss(与标答相比的偏移指数)。如下例,当我们需要计算某fc层参数w对于loss的贡献的时候,可以利用链式法则,转化为几个局部运算:
      \frac{\partial loss}{\partial w} = \frac{\partial loss}{\partial h(x)}\frac{\partial h(x)}{\partial output}\frac{\partial output}{\partial w}

    相关文章

      网友评论

          本文标题:手写神经网络处理文本分类问题

          本文链接:https://www.haomeiwen.com/subject/dfodgqtx.html