返回介绍

1.情感倾向性模型

发布于 2024-01-28 21:41:24 字数 2779 浏览 0 评论 0 收藏 0

(1)训练生成词向量

首先训练以得到词向量,为了将文本情感分析(情感分类)转化为机器学习问题,首先就是需要将符号数学化。在NLP中,最常见的词表示方法就是One-hot Representation:将一个词映射成一个很长的单位向量,向量的长度就是词表的大小,如“学习”表示成[0001000000000000…],“复习”表示成[0000000010000000…];这样就完成了词语的数学化表示。

但是,这样就存在“词汇鸿沟”的问题:即使两个词之间存在明显的联系但是在向量表示法中却体现不出来,无法反映语义关联。然而,Distributed Representation却是能反映出词语与词语之间的距离远近关系,而用Distributed Representation表示的向量专门称为词向量,如“学习”可能被表示成[0.1,0.1,0.1,0.15,0.2……],“复习”可能被表示成[0.11,0.12,0.1,0.15,0.22……],这样,两个词义相近的词语被表示成词向量后,它们的距离也是较近的,词义关联不大的两个词的距离会较远。一般而言,不同的训练方法或语料库训练得到的词向量是不一样的,它们的维度常见为50维和100维。

word2vec采用神经网络语言模型NNLM和N-gram语言模型,每个词都可以表示成一个实数向量。模型如图15-8所示。

图15-8 word2vec模型展示图

图15-8最下方的wt-n+1,…,wt-2,wt-1就是前n-1个词。现在需要根据这已知的n-1个词预测下一个词wt。C(w)表示词w所对应的词向量,存在矩阵C(一个|V|×m的矩阵)中。其中|V|表示词表的大小(语料中的总词数),m表示词向量的维度。w到C(w)的转化就是从矩阵中取出一行。

网络的第一层(输入层)是将C(wt-n+1),…,C(wt-2),C(wt-1)这n-1个向量首尾相接拼起来,形成一个(n-1)m维的向量,记为x。

网络的第二层(隐藏层)就如同普通的神经网络,直接使用d+Hx计算得到。d是一个偏置项。在此之后,使用tanh()作为激活函数。

网络的第三层(输出层)一共有|V|个节点,每个节点yi表示下一个词为i的未归一化log概率。最后使用softmax()激活函数将输出值y归一化成概率。最终,y的计算公式为:

y=b+Wx+Utanh(d+Hx)

其中,U是隐藏层到输出层的参数,整个模型的多数计算集中在U和隐藏层的矩阵乘法中。矩阵W(一个|V|×(n-1)m的矩阵),这个矩阵包含了从输入层到输出层的直连边。

(2)评论集子集的人工标注与映射

利用词向量构建的结果,再进行评论集子集的人工标注,正面评论标为1,负面评论标记为2。(或者采用Python的NLP包snownlp的sentiment功能进行简单的机器标注,减少人为工作量),然后将每条评论映射为一个向量,将分词后评论中的所有词语对应的词向量相加做平均,使得一条评论对应一个向量。

(3)训练栈式自编码网络

自编码网络是由原始的BP神经网络演化而来。在原始的BP神经网络中从特征空间输入到神经网络中,并用类别标签与输出空间来衡量误差,用最优化理论不断求得极小值,从而得到一个与类别标签相近的输出。但是,在编码网络并不是如此,并不用类别标签来衡量与输出空间的误差,而是用从特征空间的输入来衡量与输出空间的误差。其结构如图15-9所示。

图15-9 自编码网络结构示意图

把特征空间的向量(x1,x2,x3,x4)作为输入,把经过神经网络训练后的向量与输入向量(x1,x2,x3,x4)来衡量误差,最终得到一个能从原始数据中自主学习特征的一个特征提取的神经网络。从代数角度而言,即从一个线性相关的向量中,寻找出了一组低维的基,而这组基线性组合之后又能还原成原始数据。自编码网络正是寻找了一组这样的基。

神经网络的出现,时来已久,但是因为局部极值、梯度弥散、数据获取等问题而构建不出深层的神经网络,直到2007年深度学习的提出,才让神经网络的相关算法得到质的改变。而栈式自编码就属于深度学习理论中一种能够得到优秀深层神经网络的方法。

栈式自编码神经网络是一个由多层稀疏自编码器组成的网络。它的思想是利用逐层贪婪训练的方法,把原来多层的神经网络剖分成一个个小的自编码网络,每次只训练一个自编码器,然后将前一层自编码的输出作为其后一层自编码器的输入,最后连接一个分类器,可以是SVM、SoftMax等。上述步骤是为了得到一个好的初始化深度神经网络的权重,当连接好一个分类器后,还可以用BP神经网络的思想,反向传播微调神经元的权重,以期得到一个分类准确率更好的栈式自编码神经网络。

完成评论映射后,将标注的评论划分为训练集和测试集,在Python下利用标注好的训练集(标注值和向量)训练栈式自编码网络(SAE),对原始向量进行深度学习提取特征,后接Softmax分类器做分类,并用测试集测试训练好的模型的正确率。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文