奉化网站建设,深圳网站开发公司h5,中企动力是怎么建设网站的,怎样制作网站积分系统目录1、基于词典的方法2、基于词袋或 Word2Vec 的方法2.1 词袋模型2.2 Word2Vec3、案例#xff1a;用户评论情绪分析3.1 数据读取3.2 语料库分词处理3.3 Word2Vec 处理3.4 训练情绪分类模型3.5 对评论数据进行情绪判断目的#xff1a;去判断一段文本、评论的情绪偏向在这里用户评论情绪分析3.1 数据读取3.2 语料库分词处理3.3 Word2Vec 处理3.4 训练情绪分类模型3.5 对评论数据进行情绪判断目的去判断一段文本、评论的情绪偏向在这里我们针对文本进行情绪分析时只处理两种情绪状态积极和消极。针对文本情绪分析的方法有两种一种基于词典另一种基于机器学习方法。
1、基于词典的方法
概括来讲首先有一个人工标注好的词典。词典中的每一个词都对应着消极或积极的标签。 这个词典可能有上万条或者几十万条当然是越多越好。 情绪分析流程 1收到评论”这门课程很好啊“ 2分词”[‘这门’, ‘课程’, ‘很’, ‘好’, ‘啊’, ‘’]“ 3拿分好的词依次去匹配词典。匹配的方法很简单
如果词典中存在该词且为积极标签那么我们记 11;如果词典中存在该词且为消极标签那么我们记 -1−1;如果词典中不存在该词我们记 00。
4匹配完一个句子之后我们就可以计算整个句子的得分。总得分 00 表示该句子情绪为积极总得分小于零代表该句子为消极总得分 00 表示无法判断情绪。
此方法优点简单 缺点1往往需要一个很大的词典且不断更新。这对人力物力都是极大的考验。 缺点2该方法还有无法通过扩充词典解决的情绪判断问题。 例如当我们人类在判断一句话的清晰时我们会往往更偏向于从整体把握语言环境尤其是在乎一些语气助词对情绪的影响。而基于词典进行情绪分析的方法就做不到这一点将句子拆成词就会影响句子的整体情绪表达。 缺点3准确率并不高
目前针对中文做情绪标注的词典少之又少。比较常用的有
台湾大学 NTUSD 情绪词典。《知网》情绪分析用 词语集。
以《知网》情绪词典举例它包含有 5 个文件分别列述了正面与负面的情绪词语以及程度词汇。
“正面情感”词语如爱赞赏快乐感同身受好奇喝彩魂牵梦萦嘉许 … “负面情感”词语如哀伤半信半疑鄙视不满意不是滋味儿后悔大失所望 … “正面评价”词语如不可或缺部优才高八斗沉鱼落雁催人奋进动听对劲儿 … “负面评价”词语如丑苦超标华而不实荒凉混浊畸轻畸重价高空洞无物 … “程度级别”词语 “主张”词语
2、基于词袋或 Word2Vec 的方法
2.1 词袋模型
词袋不再将一句话看做是单个词汇构成而是当作一个 1 \times N1×N 的向量。 举例 我们现在有两句话需要处理分别是 我爱你我非常爱你。 我喜欢你我非常喜欢你。 我们针对这两句话进行分词之后去重处理为一个词袋 [‘我’, ‘爱’, ‘喜欢’, ‘你’, ‘非常’] 然后根据词袋我们对原句子进行向量转换。其中向量的长度 N 为词袋的长度而向量中每一个数值依次为词袋中的词出现在该句子中的次数。 我爱你我非常爱你。 → [2, 2, 0, 2, 1] 我喜欢你我非常喜欢你。 → [2, 0, 2, 2, 1] 有了词袋有了已经人工标注好的句子就组成了我们的训练数据。再根据机器学习方法来构建分类预测模型。从而判断新输入句子的情绪。
词袋模型和独热编码非常相似。其实这里就是将之前独热编码里的词变成了句子而已。
词袋模型固然比简单的词典对比方法更好但独热编码无法度量上下文之间的距离也就无法结合上下文进行情绪判断。引入词向量的 Word2Vec 处理方法来克服这个缺点。
2.2 Word2Vec
Word2Vec故名思意就是将句子转换为向量也就是词向量。它是由浅层神经网络组成的词向量转换模型。
Word2Vec 的输入一般为规模庞大的语料库输出为向量空间。Word2Vec 的特点在于语料库中的每个词都对应了向量空间中的一个向量拥有上下文关系的词映射到向量空间中的距离会更加接近。
Word2Vec 的主要结构是 CBOWContinuous Bag-of-Words Model模型和 Skip-gramContinuous Skip-gram模型结合在一起。简单来讲二者都是想通过上下文得到一个词出现的概率。
CBOW 模型通过一个词的上下文各 N 个词预测当前词。而 Skip-gram 则恰好相反他是用一个词预测其上下文得到了当前词上下文的很多样本因此可用于更大的数据集。
CBOWN2和 Skip-gram 的结构如下图所示 图中 w(t)w(t) 表示当前的词汇而 w(t−n)w(t−n)w(tn)w(tn) 等则用来表示上下文词汇。
3、案例用户评论情绪分析
方法 Word2Vec 结合决策树的文本情绪分析方法 思路需要使用 Word2Vec 来建立向量空间之后再使用决策树训练文本情绪分类模型。
3.1 数据读取
由于我们未人工针对案例评论数据进行语料库标注所以这里需要选择其他的已标注语料库进行模型训练。这里我们选用了网友苏剑林提供的语料库。该语料库整合了书籍、计算机等 7 个领域的评论数据。
获取数据
!wget -nc http://labfile.oss.aliyuncs.com/courses/764/data_09.zip
!unzip -o data_09.zip三个数据文本预览
import pandas as pd
#消极情绪文本 neg.xls 共有 10428 行。
pd.read_excel(data_09/data/neg.xls, headerNone).head()
#积极情绪文本 pos.xls 共有 10679 行
pd.read_excel(data_09/data/pos.xls, headerNone).head()
#蓝桥云课用户评论文本 comments.csv 共有 12377 行。
pd.read_csv(data_09/comments.csv).head()3.2 语料库分词处理
在使用 Word2Vec 之前我们需要先对训练语料库进行分词处理。这里使用 jieba 分词。
import jieba
import numpy as np# 加载语料库文件并导入数据
neg pd.read_excel(data_09/data/neg.xls, headerNone, indexNone)
pos pd.read_excel(data_09/data/pos.xls, headerNone, indexNone)# jieba 分词def word_cut(x): return jieba.lcut(x)pos[words] pos[0].apply(word_cut)
neg[words] neg[0].apply(word_cut)# 使用 1 表示积极情绪0 表示消极情绪并完成数组拼接
x np.concatenate((pos[words], neg[words]))
y np.concatenate((np.ones(len(pos)), np.zeros(len(neg))))# 将 Ndarray 保存为二进制文件备用
np.save(X_train.npy, x)
np.save(y_train.npy, y)print(done.)预览一下数组的形状以 x 为例
np.load(X_train.npy, allow_pickleTrue)3.3 Word2Vec 处理
有了分词之后的数组我们就可以开始 Word2Vec 处理将其转换为词向量了。 目前很多开源工具都提供了 Word2Vec 方法比如 GensimTensorFlowPaddlePaddle 等。这里我们使用 Gensim。
from gensim.models.word2vec import Word2Vec
import warnings
warnings.filterwarnings(ignore) # 忽略警告# 导入上面保存的分词数组
X_train np.load(X_train.npy, allow_pickleTrue)# 训练 Word2Vec 浅层神经网络模型
w2v Word2Vec(size300, min_count10)
w2v.build_vocab(X_train)
w2v.train(X_train, total_examplesw2v.corpus_count, epochsw2v.epochs)def sum_vec(text):# 对每个句子的词向量进行求和计算vec np.zeros(300).reshape((1, 300))for word in text:try:vec w2v[word].reshape((1, 300))except KeyError:continuereturn vec# 将词向量保存为 Ndarray
train_vec np.concatenate([sum_vec(z) for z in X_train])
# 保存 Word2Vec 模型及词向量
w2v.save(w2v_model.pkl)
np.save(X_train_vec.npy, train_vec)
print(done.)3.4 训练情绪分类模型
有了词向量我们就有了机器学习模型的输入那么就可以训练情绪分类模型。 选择速度较快的决策树方法并使用 scikit-learn 完成。
from sklearn.externals import joblib
from sklearn.tree import DecisionTreeClassifier# 导入词向量为训练特征
X np.load(X_train_vec.npy)
# 导入情绪分类作为目标特征
y np.load(y_train.npy)
# 构建支持向量机分类模型
model DecisionTreeClassifier()
# 训练模型
model.fit(X, y)
# 保存模型为二进制文件
joblib.dump(model, dt_model.pkl)3.5 对评论数据进行情绪判断
# 读取 Word2Vec 并对新输入进行词向量计算
def sum_vec(words):# 读取 Word2Vec 模型w2v Word2Vec.load(w2v_model.pkl)vec np.zeros(300).reshape((1, 300))for word in words:try:vec w2v[word].reshape((1, 300))except KeyError:continuereturn vec# 读取蓝桥云课评论
df pd.read_csv(data_09/comments.csv, header0)
comment_sentiment []
for string in df[评论内容]:# 对评论分词words jieba.lcut(str(string))words_vec sum_vec(words)# 读取支持向量机模型model joblib.load(dt_model.pkl)result model.predict(words_vec)comment_sentiment.append(result[0])# 实时返回积极或消极结果if int(result[0]) 1:print(string, [积极])else:print(string, [消极])# 将情绪结果合并到原数据文件中
merged pd.concat([df, pd.Series(comment_sentiment, name用户情绪)], axis1)
pd.DataFrame.to_csv(merged, comment_sentiment.csv) # 储存文件以备后用饼状图看一下蓝桥云课用户的情绪分布。总体看来73% 都为积极评论