当前位置: 首页 > news >正文

“达观杯”文本分类挑战赛新手入门代码

任务

建立模型通过长文本数据正文(article),预测文本对应的类别(class)

数据

注 : 报名参赛或加入队伍后,可获取数据下载权限。

数据包含 2 个 csv 文件:

train_set.csv:此数据集用于训练模型,每一行对应一篇文章。 文章分别在“字”和“词”的级别上做了脱敏处理。 共有四列:

  1. 第一列是文章的索引(id),
  2. 第二列是文章正文在“字”级别上的表示,即字符相隔正文(article);
  3. 第三列是在“词”级别上的表示,即词语相隔正文(word_seg);
  4. 第四列是这篇文章的标注(class)。

注:每一个数字对应一个“字”,或“词”,或“标点符号”。“字”的编号与“词”的编号是独立的!

test_set.csv:此数据用于测试。 数据格式同 train_set.csv,但不包含 class

注:test_set与train_test中文章id的编号是独立的。 友情提示:请不要尝试用excel打开这些文件!由于一篇文章太长,excel可能无法完整地读入某一行!

评分标准

评分算法

binary-classification

采用各个品类F1指标的算术平均值,它是 PrecisionRecall 的调和平均数。

其中,Pi 是表示第 i 个种类对应的 PrecisionRi 是表示第 i 个种类对应 RecallAB 榜的划分方式和比例: 【1】评分采用AB榜形式,提交文件必须包含测试集中所有用户的预测值。排行榜显示A榜成绩,竞赛结束后2小时切换成B榜单。B榜成绩以选定的两次提交或者默认的最后两次提交的最高分为准,最终比赛成绩以B榜单为准。 【2】此题目的AB榜是随机划分,A榜数据占50%,B榜使用全量测试集,即占100%。

挑战赛任务背景

文本分类

  • 这个比赛的任务就是文本分类,是自然语言处理 (NLP) 领域里一项 最最基本的任务。
  • 但这个任务的难点就是在于,文本的长度非常长, 大约3000个词,一般任务也就300词。
  • 而文本的长度过长对文本的 智能解析带来了很多挑战。

概念

  1. 中文分词

用传统的监督学习模型对一段文 本进行分类的基本过程

这里提前假设: 已经有了一个学习的机器学习模型 f,供你使用

注:函数输出的类别是我们事先人为约定好,比如我让数字4代表政治类, 数字3代表科技类,...

比赛数据

训练数据集

测试数据集

求解问题的本质

求一个数学函数(又可称为机器学习模型):

y=f\left(x_{1}, x_{2}, x_{3}, \ldots, x_{6}\right)

使模型预测能力更强

哪些机器学习算法

  • 传统的监督学习算法(西瓜书各章节都有对应)
    • 比如,对数几率回归/支持向量机/朴素贝叶斯/决策树/集成学习
  • 深度学习
    • 比如 cnn/rnn/attention 等模型

源码解析

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Jun 20 21:17:51 2019

@author: iosdevlog
"""

""" 导入所需要的软件包 """
import pandas as pd 
from sklearn.linear_model import LogisticRegression #导入线性回归库
from sklearn.feature_extraction.text import CountVectorizer #导入特征提取库


print("开始")

"""
@ 代码功能简介: 从硬盘上读取已下载好的数据,并进行简单处理
@ 知识点定位:数据预处理
"""
#读取文件,并且删除无关东西
df_train = pd.read_csv("./train_set.csv")
df_test = pd.read_csv("./test_set.csv")
df_train.drop(columns =["article", "id"], inplace = True ) # 为什么要删除这两个列? id 列无意义,不需要用 article,可直接删除
df_test.drop(columns =["article"], inplace = True ) 

"""
@ 代码功能简介:将数据集中的字符文本转换成数字向量,以便计算机能够进行处理
  (一段数字 ---> 一个向量)
@ 知识点定位:特征工程
"""
# 获取特征向量
vectorizer = CountVectorizer(ngram_range = (1,2), min_df = 3, max_df = 0.9, max_features = 100000) # 特征提取
vectorizer.fit(df_train["word_seg"]) # 为什么要训练这一列内容? 要先学习整个数据集的词的 DF(文档词频)
x_train = vectorizer.transform(df_train["word_seg"]) #特征转为特征向量
x_test = vectorizer.transform(df_test["word_seg"])
y_train = df_train["class"] - 1  # 这里为啥要给所有的类别都减去 1? 减 1 是代码习惯问题,让 class 从 0 计数

"""
@ 代码功能简介:训练一个分类器
@ 知识点定位:传统坚督学习 之 线性逻辑回归模型
"""
lg = LogisticRegression(C = 4, dual = True) # 逻辑回归初始化
lg.fit(x_train, y_train) # 进行训练,模型保存在 lg 里面

"""
根据上面训练好的分类器对测试集的每个样本进行预测
"""
y_test = lg.predict(x_test) # 用模型进行测试

"""
将测试集的预测结果保存至本地
"""
# 根据上面训练好的分类器对测试集的每个样本进行预测
df_test["class"] = y_test.tolist() # 测试结果转为列表,并且放入测试文档的类别里面。问题5:测试文档没有类别这个列。这行代码会自动给测试文档添加一个类别列。
df_test["class"] = df_test["class"] + 1  # 为什么又要给所有类别分别加 1
df_result = df_test.loc[:, ["id", "class"]]  # 从测试集里面拿到 ["id", "class"] 列的内容
df_result.to_csv("./result.csv", index = False) #测试结果转为提交的CSV格式

print("结束")
复制代码

如何提高模型性能

  1. 数据预处理
  2. 特征工程
  3. 机器学习算法
  4. 模型集成

参考:

“达观杯”文本智能处理挑战赛_赛体与数据 Kaggle: Starter:“达观杯”文本分类挑战赛新手入门代码 深度之眼

转载于:https://juejin.im/post/5d0b9cdbf265da1b5e72fa93

相关文章:

  • Maven类包冲突终极解决方案
  • CDIF: 基于REST和JSON的SOA软件框架
  • 步步为营 .NET 设计模式学习笔记 二十四、Factory Method(工厂方法模式)
  • 杉杉股份聘方正科技前副总任伟泉掌帅印
  • npm安装任何包报错,解决方法:
  • Windows 7快速定位照片方法
  • Calendar类,运用Calendar类打印日历
  • 禁止浏览器自动保存密码弹框
  • tomcat:javax.servlet.http.HttpServletRequest cannot be resolved
  • Git忽略规则及.gitignore规则不生效的解决办法
  • 手把手教你实现微信聊天框随文本升高
  • packge-info.java
  • Java 线程 — ThreadLocal
  • 前端学数据库之数据表操作
  • [转]C#中捕捉对话框的文本内容 EnumChildWindows
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【附node操作实例】redis简明入门系列—字符串类型
  • conda常用的命令
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • gf框架之分页模块(五) - 自定义分页
  • Java 最常见的 200+ 面试题:面试必备
  • mockjs让前端开发独立于后端
  • mysql 5.6 原生Online DDL解析
  • MySQL的数据类型
  • opencv python Meanshift 和 Camshift
  • PHP的Ev教程三(Periodic watcher)
  • SpriteKit 技巧之添加背景图片
  • Vue--数据传输
  • Vue小说阅读器(仿追书神器)
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 思维导图—你不知道的JavaScript中卷
  • 算法-图和图算法
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 中文输入法与React文本输入框的问题与解决方案
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • #HarmonyOS:基础语法
  • #NOIP 2014# day.1 T2 联合权值
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • $.each()与$(selector).each()
  • (C)一些题4
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (九)c52学习之旅-定时器
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)关于多人操作数据的处理策略
  • ./configure、make、make install 命令
  • .htaccess配置常用技巧
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET业务框架的构建
  • .net与java建立WebService再互相调用