http://minieastdaycom/bdmip/180414224336264html
在这篇文章中,主要介绍的内容有:
1、将单词转换为特征向量
2、TF-IDF计算单词关联度
文本的预处理和分词。
如何将单词等分类数据转成为数值格式,以方便我们后面使用机器学习来训练模型。
一、将单词转换为特征向量
词袋模型(bag-of-words model):将文本以数值特征向量的形式来表示。主要通过两个步骤来实现词袋模型:
1、为整个文档集(包含了许多的文档)上的每个单词创建一个唯一的标记。
2、为每个文档构建一个特征向量,主要包含每个单词在文档上的出现次数。
注意:由于每个文档中出现的单词数量只是整个文档集中很少的一部分,因此会有很多的单词没有出现过,就会被标记为0。所以,特征向量中大多数的元素就会为0,就会产生稀疏矩阵。
下面通过sklearn的CountVectorizer来实现一个词袋模型,将文档转换成为特征向量
通过countvocabulary_我们可以看出每个单词所对应的索引位置,每一个句子都是由一个6维的特征向量所组成。其中,第一列的索引为0,对应单词"and","and"在第一和二条句子中没有出现过,所以为0,在第三条句子中出现过一些,所以为1。特征向量中的值也被称为原始词频(raw term frequency)简写为tf(t,d),表示在文档d中词汇t的出现次数。
注意:在上面词袋模型中,我们是使用单个的单词来构建词向量,这样的序列被称为1元组(1-gram)或单元组(unigram)模型。除了一元组以外,我们还可以构建n元组(n-gram)。n元组模型中的n取值与特定的应用场景有关,如在反垃圾邮件中,n的值为3或4的n元组可以获得比较好的效果。下面举例说明一下n元组,如在"the weather is sweet"这句话中,
1元组:"the"、"weather"、"is"、"sweet"。
2元组:"the weather"、"weather is"、"is sweet"。
在sklearn中,可以设置CountVecorizer中的ngram_range参数来构建不同的n元组模型,默认ngram_range=(1,1)。
sklearn通过CountVecorizer构建2元组
二、TF-IDF计算单词关联度
在使用上面的方法来构建词向量的时候可能会遇到一个问题:一个单词在不同类型的文档中都出现,这种类型的单词其实是不具备文档类型的区分能力。我们通过TF-IDF算法来构建词向量,从而来克服这个问题。
词频-逆文档频率(TF-IDF,term frequency-inverse document frequency):tf-idf可以定义为词频×逆文档频率
其中tf(t,d)表示单词t在文档d中的出现次数,idf(t,d)为逆文档频率,计算公式如下
其中,nd表示文档的总数,df(t,d)表示包含单词t的文档d的数量。分母中加入常数1,是为了防止df(t,d)=0的情况,导致分母为0。取log的目的是保证当df(t,d)很小的时候,不会导致idf(t,d)过大。
通过sklearn的TfidfTransformer和CountVectorizer来计算tf-idf
可以发现"is"(第二列)和"the"(第六列),它们在三个句子中都出现过,它们对于文档的分类所提供的信息并不会很多,所以它们的tf-idf的值相对来说都是比较小的。
注意:sklearn中的TfidfTransformer的TF-IDF的计算与我们上面所定义TF-IDF的公式有所不同,sklearn的TF-IDF计算公式
通常在计算TF-IDF之前,会对原始词频tf(t,d)做归一化处理,TfidfTransformer是直接对tf-idf做归一化。TfidfTransformer默认使用L2归一化,它通过与一个未归一化特征向量L2范数的比值,使得返回向量的长度为1,计算公式如下:
下面通过一个例子来说明sklearn中的TfidfTransformer的tf-idf的计算过程,以上面的第一句话"The sun is shining"为例子
1、计算原始词频
a、单词所对应的下标
b、计算第三句话的原始词频tf(t,d)
c、计算逆文档频率idf(t,d)
注意:其他的词在计算tf-idf都是0,因为原始词频为0,所以就不需要计算idf了,log是以自然数e为底。
d、计算tf-idf
所以,第一个句子的tf-idf特征向量为[0,1,129,129,0,1,0]
e、tf-idf的L2归一化
HTML中div里有data-index="6" 是自定义属性data-index的值为6的意思。
自定义数据属性的好处:
我们经常需要存储与不同DOM元素相关的信息。这些信息对读者来说可能并不重要,但如果
能够轻松访问它,将使我们的开发人员的生活变得更加轻松。
例如,假设您在网页上列出了不同的餐馆。在HTML5之前,如果您想存储有关餐馆提供的食物
类型或访问者距离的信息,您可以使用HTML class属性。如果您还需要存储餐厅id以查看用户
想要访问的特定餐厅,该怎么办?
为了摆脱这些问题,HTML5引入了自定义数据属性。名称以元素开头的元素的所有属性data-
都是数据属性。您还可以使用这些数据属性来设置元素的样式。
接下来,让我们深入了解数据属性的基础知识,并学习如何在JavaScript中访问它们的值。
正如我之前提到的,数据属性的名称将始终以data-。这是一个例子:
<li data-type="veg" data-distance="2miles" data-identifier="10318">
Salad King</li>
您现在可以使用这些数据属性来搜索和排序访问者的餐馆。例如,您现在可以向他们展示一定
距离内的所有素食餐厅。
扩展资料:
使用自定义属性的注意事项:
1、存储在这些属性中的数据应为string类型。任何可以进行字符串编码的东西也可以存储
在数据属性中。所有类型的转换都需要在JavaScript中完成。
2、只有在没有其他适当的HTML元素或属性时才应使用数据属性。例如,在元素class中存
储元素是不合适的data-class。
3、除data-前缀外,有效自定义数据属性的名称必须仅包含字母,数字,连字符( - ),点
(。),冒号(:)或下划线(_)。它不能包含大写字母。
select from all_tables u where uowner='ZHHY_USER';-- ZHHY_USER是数据库用户
select from all_tab_columns c where cOWNER='ZHHY_USER';
使用该语句的前提是该用户要具有查询系统表的权限。
微博言论往往带有强烈的情感色彩,对微博言论的情感分析是获取用户观点态度的重要方法。许多学者都是将研究的重点集中在句子词性、情感符号以及情感语料库等方面,然而用户自身的情感倾向性并没有受到足够的重视,因此,提出了一种新的微博情感分类方法,其通过建模用户自身的情感标志得分来帮助识别语句的情感特征,具体地讲,将带有情感信息的微博语句词向量序列输入到长短期记忆网络(LSTM),并将LSTM输出的特征表示与用户情感得分进行结合作为全连接层的输入,并通过Softmax层实现了对微博文本的情感极性分类。实验表明,提出的方法UA-LSTM在情感分类任务上的表现超过的所有基准方法,并且比最优的基准方法MF-CNN在F1值上提升了34%,达到091。
关键词: 情感分析, 长短期记忆网络, 用户情感倾向
Abstract:
Micro-blog's speech often has strong sentimental color, and the sentiment analysis of Micro-blog's speech is an important way to get users' opinions and attitudes Many researchers conduct research via focusing on the parts of speech (POS), emotion symbol and emotion corpus This paper proposes a novel method for Micro-blog sentiment analysis, which aims to identify the sentiment features of a text by modeling user sentiment tendency Specifically, we construct a sentiment information embedded word embedding sequence, and input it into a long short term memory (LSTM) model to get a sentiment embedded output representation Then we merge both the user sentiment tendency score and the output representation of LSTM, and use it as the input of a fully connected layer which is followed by a softmax layer to get the final sentiment classification result The experiment shows that the performance of our proposed method UA-LSTM is better than all the baseline methods on the sentimental classification task, and it achieves the F1-score up to 091, with an improvement of 34% over the best baseline method MF-CNN
本次实验将继续加载两个数据,一个是已经标注好的用户评论数据,另外一个是用户评价主题句,通过标注过的用户评论数据研究不同粒度的用户评价处理对深度情感分析模型的性能的影响,并比较字符级模型在用户评价情感极性推理上的差异。
使用 Pandas 加载已经标注好的在线用户评论情感数据表格,并查看数据维度和前 5 行数据。
加载民宿评论数据,并打印第一行。
数据属性如下表所示
用户评论分词
jieba 分词器预热,第一次使用需要加载字典和缓存,通过结果看出返回的是分词的列表。
批量对用户评价进行分词,并打印第一行数据,处理过程需要一些时间。
将用户评论处理成字符级别,为字符级模型提供训练集,并打印第一行数据,此预处理速度远远快于分词速度。
TextCNN 使用的卷积神经网络是一个典型的空间上的深度神经网络,基于卷积神经网络的情感分析具有优秀的特征抽取能力,能显著降低情感分类中人工抽取特征的难度。这类方法又根据文本嵌入粒度的不同可以分为字符级嵌入和词嵌入两种,一种是以分词后的词为情感分析粒度,另一种为字符级粒度的情感分析粒度,最后一层将包含全文潜在信息的最终编码送入 Sigmoid 做情感强度计算,即可对用户评论进行情感极性推理,是目前在文本分类经常使用的模型。
词级别模型训练
按照训练集 8 成和测试集 2 成的比例对数据集进行划分。
词级 TextCNN 模型训练,设置 128 条数据为一个批次,2 轮模型训练,训练集中的 20% 作为验证集,并加入早停设置。
通过传入原始的标签和预测的标签可以直接将分类器性能进行度量,并对指标收集,包含:模型的训练时间、accuracy_score 表示被正确预测的样本占总样本的比例、f1_score 值表示精确率与召回率的调和平均数和模型标签。
对训练的模型进行加载,并打印网络结构。
设置固定划分数据集,划分比例为 02 即训练集是测试集的 4 倍量。
字符级别模型训练
字符级 TextCNN 模型训练,设置 128 条数据为一个批次,2 轮模型训练,训练集中的 20% 作为验证集,并加入早停设置。
对字符级 TextCNN 的预测结果进行收集。
GRU 属于 RNN(recurrent neural networks,循环神经网络),是 LSTM 最流行的一个变体,比 LSTM 模型要简单,GRU 的门控单元减少了一个,GRU 与 LSTM 一样都是旨在解决标准 RNN 中出现的梯度消失问题,GRU 比 LSTM 在减少了计算量的条件下,做到了精度与 LSTM 持平,是目前在文本分类经常使用的模型。
我们使用函数定义的方式进行 GRU 模型的初始化。
对训练的模型进行加载,并打印网络结构。
词级别模型训练
词级 GRU 模型训练,设置 128 条数据为一个批次,2 轮模型训练,训练集中的 20% 作为验证集,并加入早停设置。
对训练的模型进行加载,并打印网络结构。
字符级别模型训练
将处理好的用户评论数据进行字符级处理即可输入字符级 GRU 模型训练,设置 128 条数据为一个批次,2 轮模型训练,训练集中的 20% 作为验证集,并加入早停设置。
对字符级 GRU 的测试集预测性能进行记录。
模型性能分析
通过控制参数变量的方式进行,并使用同样的数据集合观察性能指数测试结果。字符级能使用较小的字符级词典对语料的覆盖度更高,字符级预处理在测试集上的表现基本接近词级模型,并从耗时来看字符级都是最少的。TextCNN 架构总体高于 GRU 的准确度和综合值,并且训练时间相对较短。字符级语言建模的思想来自于信号处理,使用语言最小的文字单元去模拟复杂的语义关系,因为我们相信模型可以捕捉到这些语法和单词语义信息,在后续我们继续使用这种方式。
对用户评论数据预处理
对用户评论进行字符向量化。
情感极性推理
使用训练好的字符级 TextCNN 对用户评论进行情感预测,需要一些时间,请耐心等待。
使用训练好的字符级 GRU 对用户评论进行情感预测,需要一些时间,请耐心等待。
情感极性推理结果可视化
将两种字符级神经网络情感极性推理模型的结果取出来。
对全量的用户评论分别使用两个模型进行情感极性预测,并进行可视化,我们发现两种模型在全量的用户评论上的表现基本一致,字符级 TextCNN 在用户两极情感极性上表现更好。
欢迎分享,转载请注明来源:浪漫分享网
评论列表(0条)