记录一次文本挖掘 情感分析的项目过程

一、构建语料库

  1. 确定数据源,并利用python爬取数据,注意清洗无效数据
  2. 建立标签系统,作为标注依据
    本次采用的是BIO 标签系统:
    B代表Begin,表示开始;
    I代表Intermediate,表示中间;
    O代表Other,表示其他,用于标记无关字符。
    同时,采用E和A分别代表实体和属性,用户最为关注的属性用"A+?“来表示,例如位置就是"AL”。
    为了随后的情感分析,还可将正面情感和负面情感划分为B-P和B-N。
  3. 标注
  4. 质量检查(reviews_check.py)
    由于在标注过程中会出现格式上的错误,例如多了空格,多了斜杠/,或是没有标标签系统中的既定标签,不区分大小写等情况。因此,需要一个格式检查程序来进行检查。
    这里的质量检查不包括内容,仅包括格式上的。

二、建立模型

  • 语料预处理

  • 生成词语、词性、标签三者的对应数据表

  • 建立三类词典

  • word2vec创建词向量

  • 词向量:通俗理解就是将词语转化成为机器可读的数据格式。
    例如,“今天天气很好”这句话转化为词向量就分别为[1,0,0,0,0,0][0,1,0,0,0,0][0,0,1,0,0,0][0,0,0,1,0,0][0,0,0,0,1,0][0,0,0,0,0,1],这种编码被称为one-hot编码,又称为独热编码,即使用和文本等长的N位特征寄存器来存储样本,保证每个样本中的单个特征只有1位处于状态1,其他的都是0。
    但是使用了one-hot编码会发现,一些样本量较大的词汇表是难以表示的,会非常占用内存。这个时候就出现了词向量,类似于空间向量。

  • 训练词向量的方法有神经网络DNN,采用的方法一般是一个三层的神经网络结构(当然也可以多层),分为输入层,隐藏层和输出层(softmax层)。
    在定义数据的输入和输出上,有CBOW(Continuous Bag-of-Words)与Skip-Gram两种方法。

  • CBOW:根据某词的上下文来预测某个词。例如:……一个/学习/词向量/的/方法……,假设我们预测“词向量”,其上下文有四个词,那么输入层的大小就是4,隐藏层自设,输出层等于整个词汇表的大小,用公式表示就是P(“词向量”|(“一个”,“学习”,“的”,“方法”))。由于CBOW使用的是词袋模型,因此这4个词都是平等的,也就是不考虑距离,只要在我们上下文之内即可。

  • Skip-Gram:和CBOW相反,输入一个特征词,来预测其上下文的内容。其公式为P((“一个”,“学习”,“的”,“方法”)|“词向量”)。输入层为1,隐藏层自设,输出层为词汇表大小。即用“词向量”来预测其上下文最可能出现的4个词语。

  • word2vec也使用了CBOW与Skip-Gram来训练模型与得到词向量,但是并没有使用传统的DNN模型。它使用的是霍夫曼树。

  • 划分训练集和测试集

  1. 利用已标注文件建立模型
  2. 查看模型正确率
  3. 模型预测更多数据

三、情感分析

  1. 可视化分析(可参考泰坦尼克号)

numpy是数组,pandas是一个计算的包(自我记录……)
在这里讲一下可视化分析会用到的包:seaborn
失去了总结的愿望,看下面的链接吧:
https://blog.csdn.net/suzyu12345/article/details/69029106
这里记几个常见点:

  • 类型
    boxplot 箱图
    barplot 直方图
    stripplot 散点图
    factorplot 变量关系图(很常用)
    矩阵热图代码:
 %matplotlib inline
 plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
 df_corr=df.corr()
 plt.figure(figsize=(10,10))
 sns.heatmap(df_corr,annot=True,square=True,cmap='Pastel1')#annot显示相关系数

  • 参数含义
    区分不同的变量:hue
    调整图形长款:aspect
    调整颜色(这个我最喜欢):palette(Pastel1,Pastel2,coolwarm,coolwarm_r几个颜色都好好看,充满了高级感。对不起,跑偏了)
  1. 深度挖掘(计算权重等方法)
    结构方程没有用SPSS做,做出来简单到不想误导别人。
    关联规则倒是做了,但是只挖掘出来了频繁项集,没有关联规则。
    from orangecontrib.associate.fpgrowth import *
    import Orange
    x1=df[‘a’].values
    x2=df['b].values

你可能感兴趣的:(记录一次文本挖掘 情感分析的项目过程)