专栏首页斜述视角互联网新闻情感分析

互联网新闻情感分析

互联网新闻情感分析

1 赛题简介

赛题简介:“互联网新闻情感分析”赛题,是CCF大数据与计算智能大赛赛题之一。对新闻情绪进行分类,0代 表正面情绪、1代表中性情绪、2代表负面情绪。(赛题官网https://www.datafountain.cn/competitions/350)

程序简介:开发工具是pycharm,使用GPU加速。所使用的关键库有pytorch、torchtext、numpy、pandas、visdom等。

2 项目结构

项目文件夹共包括以下文件及文件夹:

main.py 主程序,运行此程序模型开始训练以及测试。

net.py 定义网络结构,采用LSTM神经网络,最后一层是全连接层。

preprocess.py 预处理程序,对官方提供的csv文件进行处理,包括清理、分词、拆分数据集等工作。

trainfiles 存储预处理过程中与训练集有关的处理文件。

testfiles 存储预处理过程中与测试集有关的处理文件。

torchtextfiles 存储拆分好的训练集、验证集和测试集,供torchtext加载。

wordfiles 存储停用词文件和词向量文件。

3 预处理

官方提供的数据集有Train_DataSet.csv、Train_DataSet_Label.csv、Test_DataSet.csv。由于Train_DataSet.csv和Train_DataSet_Label.csv数据集中id字段不一致、三个数据集存在较多标点符号和无用符号、存在停用词、存在title和content字段分开等问题,所以在预处理阶段所做的主要工作有:提取共有的内容、清理数据集的标点符号和英文字符、对数据集进行分词、合并title和content字段、拆分数据集为训练集验证集和测试集等。

最后处理好的数据集包括train.csv、val.csv和test.csv,存放在torchtextfiles文件夹中。

# 针对官方训练集的处理示例
train_id = train_id('trainfiles/Train_DataSet.csv', 'trainfiles/Train_DataSet_Label.csv')
    train_dataset = train_dataset('trainfiles/Train_DataSet.csv', 'trainfiles/Train_DataSet_Label.csv', train_id)
    to_train = pd.DataFrame(train_dataset)
    to_train.to_csv('trainfiles/Train.csv', index=False, header=['id', 'title', 'content', 'label'])

    train_clear = train_clear('trainfiles/Train.csv')
    to_cleartext = pd.DataFrame(train_clear)
    to_cleartext.to_csv('trainfiles/Train_Clear.csv', index=False, header=['id', 'title', 'content', 'label'])

    train_word = sent2word('trainfiles/Train_Clear.csv')
    to_word = pd.DataFrame(train_word)
    to_word.to_csv('trainfiles/Train_Word.csv', index=False, header=['id', 'title', 'content', 'label'])

    train_joint = joint_titlecontent('trainfiles/Train_Word.csv')
    to_joint = pd.DataFrame(train_joint)
    to_joint.to_csv('trainfiles/Train_Joint.csv', index=False, header=['id', 'text', 'label'])

4 网络结构

采用的LSTM神经网络进行分类,网络层次依次是嵌入层,LSTM层、全连接层。嵌入层使用300维的词嵌入向量表示,h/c长度是128,全连接层输出是3。其余超参数设置查看main.py文件。

# 定义神经网络结构
import torch
import torch.nn as nn

class Net(nn.Module):
    def __init__(self, vocab_size, embedding_dim, hidden_dim):
        super(Net, self).__init__()


        # 单词=>[300]
        self.embedding = nn.Embedding(vocab_size, embedding_dim)
        # [embedding_dim]=>[hidden_dim]
        self.lstm = nn.LSTM(embedding_dim, hidden_dim, num_layers=2, bidirectional=True, dropout=0.5)
        # [hidden_dim*2]=>[3]
        self.fc = nn.Linear(hidden_dim * 2, 3)
        self.dropout = nn.Dropout(0.5)

    def forward(self, x):
        # x:[seq_len,b,1]=>[seq_len,b,embedding_dim]
        embedding = self.dropout(self.embedding(x))
        # out: [seq_len, b, hid_dim*2]
        # h: [num_layers*2, b, hid_dim]=>[4,b,hidden_dim]
        # c: [num_layers*2, b, hid_dim]
        out, (h, c) = self.lstm(embedding)
        h = torch.cat([h[-2], h[-1]], dim=1)

        h = self.dropout(h)
        output = self.fc(h)

        return output

5 主程序训练验证和测试

共进行了50个epoch训练,在最后一个epoch上的分类准确率为0.97,验证集上的分类准确率为0.75,提交到官网的测试结果为0.69,该结果是用F1值计算得出。我认为该模型过拟合了。如需要请进行调参。

6 注意事项

本程序采用GPU加速,如果不使用GPU加速,请在main.py文件中删除相关语句。

本程序使用了visdom可视化工具,如果你没有安装该工具,可以在终端安装,并开启服务使用。如不使用,也可以在main.py文件中删除相关语句。

本程序使用了torchtext库,方便建立词典,shuffle等操作。

由于github对上传文件大小的限制,位于wordfiles文件夹中的词向量文件没有上传,如需要在该链接中下载,并放在wordfiles文件中。(链接地址https://pan.baidu.com/s/18T6DRVmS_cZu5u64EbbESQ)

本文分享自微信公众号 - 斜述视角(defuli_diffper)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • GBDT梯度提升树

    GBDT的全称是Gradient boosting decision tree,它是通过拟合负梯度Gradient boosting和决策回归树decision...

    opprash
  • 6个评估标准教你如何选择RPA机器人

    2019年被定为“RPA机器人流程自动化”元年,当然也有人说2018年是元年,这里我就不做过多的争论了。但是对于大多数公司来说RPA(机器人流程自动化)仍然是一...

    RPA小葵
  • ​特征工程系列:特征预处理(上)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    MachineLP
  • 强化学习简介

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    Steve Wang
  • 局部人脸识别的动态特征匹配(文末附文章及源码地址)

    【导读】该文章被Trans收录。无约束环境下的局部人脸识别(PFR)是一项非常重要的任务,尤其是在视频监控和移动设备等由于遮挡、视野外、大视角等原因容易捕捉到局...

    计算机视觉战队
  • 【科普】精选 7 个生活中的机器学习案例,AI无处不在!

    今天我们就来看看,在日常生活中有哪些最常见的机器学习用例(有时我们甚至没有意识到这些例子涉及机器学习)。本文涵盖了以下常见的机器学习用例:

    昱良
  • 快速准确的人脸检测&识别新框架(进阶)(文末附源码)

    上一期“计算机视觉战队”已经和大家分享了相关的人脸检测、识别和验证背景及现状的发展状况,今天我们继续说说人脸领域的一些相关技术以及新框架的人脸检测识别系统。

    计算机视觉战队
  • 基于单层决策树的AdaBoost算法

    Boosting,也称为增强学习或提升法,是一种重要的集成学习技术,能够将预测精度仅比随机猜度略高的弱学习器增强为预测精度高的强学习器,这在直接构造强学习器非常...

    用户6021899
  • 机器学习-何为优秀的特征

    选择好的特征能让分类器变得有效,这意味着找到好的特征是机器学习中最重要的工作之一。但是怎么样才能获得好的特征?你怎么才能知道,如果你正处理二分类问题。那么好的特...

    亚乐记
  • 全球变脸应用新突破:实时秒变娃娃脸、全机型覆盖,断网也能用

    而且相比P图后“变脸”,这次是拍摄短视频时终端实时进行“变脸”,上至万把元的iPhone下至千元安卓机,都能体验,甚至没有网络也OK。

    量子位

扫码关注云+社区

领取腾讯云代金券