DataFountain-互联网新闻情感分析Baseline篇

赛题背景

随着各种社交平台的兴起,网络上用户的生成内容越来越多,产生大量的文本信息,如新闻、微博、博客等,面对如此庞大且富有情绪表达的文本信息,完全可以考虑通过探索他们潜在的价值为人们服务。因此近年来情绪分析受到计算机语言学领域研究者们的密切关注,成为一项进本的热点研究任务。
本赛题目标为在庞大的数据集中精准的区分文本的情感极性,情感分为正中负三类。面对浩如烟海的新闻信息,精确识别蕴藏在其中的情感倾向,对舆情有效监控、预警及疏导,对舆情生态系统的良性发展有着重要的意义。

赛题任务

参赛者需要对我们提供的新闻数据进行情感极性分类,其中正面情绪对应0,中性情绪对应1以及负面情绪对应2。根据我们提供的训练数据,通过您的算法或模型判断出测试集中新闻的情感极性。

数据介绍

下载地址:https://download.csdn.net/download/leo_weile/12006988

https://www.datafountain.cn/competitions/350/datasets

Baseline

通过参考“达观杯”文本智能处理挑战赛中一个大神给的baseline的代码,具体思路可分为如下几部:

1、数据清洗:首先将title和content拼接,删除有nan的行,通过观察文本,将一些特殊符号去除

2、tf-idf:将文本转换为tf-idf权重表示

3、模型训练:使用线性模型LR,SVM模型训练模型,预测,拼成结果提交形式提交

代码

import pandas as pd, numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
import time
import jieba
#处理训练集,将训练集的文本信息和label信息合并,清洗特殊符合,同时将文本内容进行分词
def merge_feature_label(feature_name,label_name):
    feature=pd.read_csv(feature_name,sep=",")
    label=pd.read_csv(label_name,sep=",")
    data=feature.merge(label,on='id')
    data["X"]=data[["title","content"]].apply(lambda x:"".join([str(x[0]),str(x[1])]),axis=1)
    dataDropNa=data.dropna(axis=0, how='any')
    print(dataDropNa.info())
    dataDropNa["X"]=dataDropNa["X"].apply(lambda x: str(x).replace("\\n","").replace(".","").replace("\n","").replace(" ","").replace("↓","").replace("/","").replace("|","").replace(" ",""))
    dataDropNa["X_split"]=dataDropNa["X"].apply(lambda x:" ".join(jieba.cut(x)))
    return dataDropNa

dataDropNa=merge_feature_label("Train_DataSet.csv","Train_DataSet_Label.csv")
#处理测试数据
def process_test(test_name):
    test=pd.read_csv(test_name,sep=",")
    test["X"]=test[["title","content"]].apply(lambda x:"".join([str(x[0]),str(x[1])]),axis=1)
    print(test.info())
    test["X"]=test["X"].apply(lambda x: str(x).replace("\\n","").replace(".","").replace("\n","").replace(" ","").replace("↓","").replace("/","").replace("|","").replace(" ",""))
    test["X_split"]=test["X"].apply(lambda x:" ".join(jieba.cut(x)))
    return test

testData=process_test("Test_DataSet.csv")
#获取文本内容的tf-idf表示
xTrain=dataDropNa["X_split"]
xTest=testData["X_split"]
vec = TfidfVectorizer(ngram_range=(1,2),min_df=3, max_df=0.9,use_idf=1,smooth_idf=1, sublinear_tf=1)
xTrain_tfidf = vec.fit_transform(xTrain)
xTest_tfidf = vec.transform(xTest)
yTrain=dataDropNa["label"]

#训练逻辑回归模型
clf = LogisticRegression(C=4, dual=True)
clf.fit(xTrain_tfidf, yTrain)

#预测测试集,并生成结果提交
preds=clf.predict_proba(xTest_tfidf)
preds=np.argmax(preds,axis=1)
test_pred=pd.DataFrame(preds)
test_pred.columns=["label"]
print(test_pred.shape)
test_pred["id"]=list(testData["id"])
test_pred[["id","label"]].to_csv('sub_lr_baseline.csv',index=None)
#训练支持向量机模型
from sklearn import svm
lin_clf = svm.LinearSVC()
lin_clf.fit(xTrain_tfidf, yTrain)

#预测测试集,并生成结果提交
preds=lin_clf.predict(xTest_tfidf)
test_pred=pd.DataFrame(preds)
test_pred.columns=["label"]
test_pred["id"]=list(testData["id"])
test_pred[["id","label"]].to_csv('sub_svm_baseline.csv',index=None)

结果:

群内大佬反馈基于tf-idf的成绩上限大概是0.7,baseline算法没有进行调参,参数基本借鉴以往别人的,最终得分为0.68+

后序计划:

使用fasttext训练一版模型,后面开始尝试深度学习方法的效果。

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值