【NLP项目-文本分类】划分测试集,训练集,验证集
目录
- 一、不分词划分数据集
- 1.划分数据集
- 2.将各数据集写入txt文件
- 二、分词划分数据集
- 1.分词
- 2.完整代码
本篇文章的主要任务是将自己的数据集使用在Chinese-Text-Classification-PyTorch项目中
github地址: Chinese-Text-Classification
数据集:二分类的文本数据,做情感分析,review为评论内容,label分为1,0正负项。
一、不分词划分数据集
用pandas读取csv数据文件,用sklearn中的train_test_split函数划分数据集
1.划分数据集
按8:1:1比例将数据集划分成训练集,验证集,测试集:
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2,shuffle=True,stratify=y,random_state=42)X_valid, X_test, y_valid, y_test = train_test_split(X_test,y_test,test_size=0.5,shuffle=True,stratify=y_test,random_state=42)
2.将各数据集写入txt文件
生成三个txt文件,test.txt,train.txt,dev.txt 用于匹配替换项目数据集格式
# 划分成txt文件
testdir = "./WeiboData/data/test.txt"
traindir = "./WeiboData/data/train.txt"
validdir = "./WeiboData/data/dev.txt"print(X_test)
print(y_test)
with open(testdir, 'a+', encoding='utf-8-sig') as f:for i,j in zip(X_test,y_test):f.write(str(i)+'\t'+str(j)+'\n')with open(traindir, 'a+', encoding='utf-8-sig') as f:for i,j in zip(X_train,y_train):f.write(str(i)+'\t'+str(j)+'\n')with open(validdir, 'a+', encoding='utf-8-sig') as f:for i,j in zip(X_valid,y_valid):f.write(str(i)+'\t'+str(j)+'\n')f.close()
完整代码:
import pandas as pd
import jieba
from sklearn.model_selection import train_test_splitdata = pd.read_csv(r'D:\Study\PycahrmProjects\sentimentAnalysis\wb_data1_denote1.csv', encoding='utf-8-sig')X = data['review'].values
y = data.label.values# 5:3:2
# 8:1:1
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2,shuffle=True,stratify=y,random_state=42)X_valid, X_test, y_valid, y_test = train_test_split(X_test,y_test,test_size=0.5,shuffle=True,stratify=y_test,random_state=42)print("训练集样本数 = ", len(y_train))
print("训练集中正样本数 = ", len([w for w in y_train if w == 1]))
print("训练集中负样本数 = ", len([w for w in y_train if w == 0]))
print("验证集样本数 = ", len(y_valid))
print("验证集中正样本数 = ", len([w for w in y_valid if w == 1]))
print("验证集中负样本数 = ", len([w for w in y_valid if w == 0]))
print("测试集样本数 = ", len(y_test))
print("测试集中正样本数 = ", len([w for w in y_test if w == 1]))
print("测试集中负样本数 = ", len([w for w in y_test if w == 0]))# 划分成txt文件
testdir = "./WeiboData/data/test.txt"
traindir = "./WeiboData/data/train.txt"
validdir = "./WeiboData/data/dev.txt"print(X_test)
print(y_test)
with open(testdir, 'a+', encoding='utf-8-sig') as f:for i,j in zip(X_test,y_test):f.write(str(i)+'\t'+str(j)+'\n')with open(traindir, 'a+', encoding='utf-8-sig') as f:for i,j in zip(X_train,y_train):f.write(str(i)+'\t'+str(j)+'\n')with open(validdir, 'a+', encoding='utf-8-sig') as f:for i,j in zip(X_valid,y_valid):f.write(str(i)+'\t'+str(j)+'\n')f.close()
二、分词划分数据集
1.分词
注意分词后需要按行划分成列表
代码如下(示例):
# 用jieba对各数据集分词
def tokenizer(data):# 得到文本数据text = []for i in range(data.shape[0]):text.append(str(data[i]))comment = '\n'.join(text)# 清洗文本数据-用正则表达式删去数字、字母、标点符号、特殊符号等import resymbols = "[0-9\!\%\,\。\.\,\、\~\?\(\)\(\)\?\!\“\”\:\:\;\"\"\;\……&\-\_\|\.\A.B.C\*\^]"comments = re.sub(symbols, '', comment)comments_list = jieba.cut(comments) # 精确模式# comments_list = jieba.cut_for_search(comments)#搜索引擎模式x_train = ' '.join([x for x in comments_list]) # 用空格连接分好的词return x_train# 对各数据集分词X_test = tokenizer(X_test)
X_train = tokenizer(X_train)
X_valid = tokenizer(X_valid)# 按行将string划分成列表
X_valid = X_valid.split('\n')
X_test = X_test.split('\n')
X_train = X_train.split('\n')
2.完整代码
import pandas as pd
import jieba
from sklearn.model_selection import train_test_split# 用jieba对各数据集分词
def tokenizer(data):# 得到文本数据text = []for i in range(data.shape[0]):text.append(str(data[i]))comment = '\n'.join(text)# 清洗文本数据-用正则表达式删去数字、字母、标点符号、特殊符号等import resymbols = "[0-9\!\%\,\。\.\,\、\~\?\(\)\(\)\?\!\“\”\:\:\;\"\"\;\……&\-\_\|\.\A.B.C\*\^]"comments = re.sub(symbols, '', comment)comments_list = jieba.cut(comments) # 精确模式# comments_list = jieba.cut_for_search(comments)#搜索引擎模式x_train = ' '.join([x for x in comments_list]) # 用空格连接分好的词return x_traindata = pd.read_csv(r'D:\Study\PycahrmProjects\sentimentAnalysis\wb_data1_denote1.csv', encoding='utf-8-sig')X = data['review'].values
y = data.label.values# 5:3:2
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.5,shuffle=True,stratify=y,random_state=42)X_valid, X_test, y_valid, y_test = train_test_split(X_test,y_test,test_size=0.3,shuffle=True,stratify=y_test,random_state=42)print("训练集样本数 = ", len(y_train))
print("训练集中正样本数 = ", len([w for w in y_train if w == 1]))
print("训练集中负样本数 = ", len([w for w in y_train if w == 0]))
print("验证集样本数 = ", len(y_valid))
print("验证集中正样本数 = ", len([w for w in y_valid if w == 1]))
print("验证集中负样本数 = ", len([w for w in y_valid if w == 0]))
print("测试集样本数 = ", len(y_test))
print("测试集中正样本数 = ", len([w for w in y_test if w == 1]))
print("测试集中负样本数 = ", len([w for w in y_test if w == 0]))# 划分成txt文件testdir = "./WeiboData/data/test.txt"
traindir = "./WeiboData/data/train.txt"
validdir = "./WeiboData/data/dev.txt"print(X_test)
print(y_test)# 对各数据集分词X_test = tokenizer(X_test)
X_train = tokenizer(X_train)
X_valid = tokenizer(X_valid)X_valid = X_valid.split('\n')
X_test = X_test.split('\n')
X_train = X_train.split('\n')print(X_test)
print(type(X_test))
print(len(X_test))with open(testdir, 'a+', encoding='utf-8-sig') as f:for i,j in zip(X_test,y_test):f.write(str(i)+'\t'+str(j)+'\n')with open(traindir, 'a+', encoding='utf-8-sig') as f:for i,j in zip(X_train,y_train):f.write(str(i)+'\t'+str(j)+'\n')with open(validdir, 'a+', encoding='utf-8-sig') as f:for i,j in zip(X_valid,y_valid):f.write(str(i)+'\t'+str(j)+'\n')f.close()
【NLP项目-文本分类】划分测试集,训练集,验证集相关推荐
- 【BERT-多标签文本分类实战】之七——训练-评估-测试与运行主程序
·请参考本系列目录:[BERT-多标签文本分类实战]之一--实战项目总览 ·下载本实战项目资源:>=点击此处=< [1] 损失函数与评价指标 多标签文本分类任务,用的损失函数是BCEW ...
- Pytorch TextCNN实现中文文本分类(附完整训练代码)
Pytorch TextCNN实现中文文本分类(附完整训练代码) 目录 Pytorch TextCNN实现中文文本分类(附完整训练代码) 一.项目介绍 二.中文文本数据集 (1)THUCNews文本数 ...
- Task01——零基础入门NLP - 新闻文本分类之赛题理解
本篇目标 首先本篇文章会对赛题进行介绍以及个人对赛题的理解,带大家接触NLP的预处理.模型构建和模型训练等知识点. 赛题介绍 赛题名称:零基础入门NLP - 新闻文本分类 赛题任务:赛题以自然语言处理 ...
- 零基础入门NLP - 新闻文本分类
本文是对阿里云新人竞赛中的"零基础入门NLP - 新闻文本分类"解体过程进行的记录,目前仅使用了textCNN模型进行预测,后续还会考虑使用LSTM进行对比. 赛题数据 赛题以新闻 ...
- 【初学者入门】零基础入门NLP - 新闻文本分类
序言 从今天开始入门学习NLP,虽然有点晚,但是我觉得任何时候都值得开始,尤其是面对你去感兴趣的事情.今天的任务是 [零基础入门NLP - 新闻文本分类],这是天池大赛中的入门级算法比赛,入口链接请自 ...
- FastText 总结:文本分类、词向量训练、参数详解
FastText:文本分类.词向量训练.参数详解 前言 - FastText 简介 一.FastText - 安装 1.1 - Github下载安装 1.2 - 编译器安装 二.FastText - ...
- 天池零基础入门NLP - 新闻文本分类Top1方案的bert4torch复现
天池有些长期比赛可以练习玩玩(还可以继续提交),于是试了下简单的新闻文本分类任务,Top1的解决方案思路是"预训练+fgm+交叉验证模型融合",代码是基于bert4keras的,本 ...
- 训练集(train set) 验证集(validation set) 测试集(test set)
在有监督(supervise)的机器学习中,数据集常被分成2~3个,即:训练集(train set) 验证集(validation set) 测试集(test set). http://blog.si ...
- [机器学习] 训练集(train set) 验证集(validation set) 测试集(test set)
在有监督(supervise)的机器学习中,数据集常被分成2~3个即: 训练集(train set) 验证集(validation set) 测试集(test set) 一般需要将样本分成独立的三部分 ...
最新文章
- C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——删除
- 集群的定义以及类别定义
- 【Xamarin开发 Android 系列 5】 Xamarin 的破解
- linux Shell(脚本)编程入门实例讲解详解
- VS Code 连接远程服务器运行 Jupyter Notebook
- 【Java多线程】sleep与yield的辨析
- 每个网页设计者都自以为是
- alientek ministm32液晶显示程序_佳显12864中文字库液晶专业生产液晶显示模块
- c++中的继承--1(引出,继承方式,继承的对象模型)
- 收银系统服务器有什么好处,生鲜超市收银系统软件怎么选?收银系统能带来什么好处?...
- 简约黑板擦表白特效网源码
- linux结构体数组的定义数组,task_struct结构体中的run_list和array域
- atitit.网络文件访问协议.unc smb nfs ftp http的区别
- 遇到了javah无法访问类的问题
- 淘宝电商需求文档的书写
- PowerMock使用-Mock私有方法
- 想在社会上混 就记住这20句
- ElementUI上传文件和额外参数
- 浙江大学计算机学院 金小刚,金小刚-虚拟现实与交互技术研究院
- Java快车读书笔记
热门文章
- CCS调试问题 Break at address “0x3ff9ce“ with no debug information available, or outside of program code.
- **2021,靠谱的网赚项目,遇上靠谱的你,谁说赚钱不轻松**
- mysql添加多个字段删除多个字段
- 揭秘一个不起眼的微商新品牌,如何快速赢得客户信任?
- 【详细七层】OSI 网络模型,七层网络模型
- 记一次burpsuite安装问题的解决(包括打不开burp-loader-keygen.jar,点击run无反应,回显-Xbootclasspath/p is no longer a sup
- IDEA 同时打开两个项目
- linux下面编译java代码及打包
- Qualcomm 音频学习(Bring up)
- 虚拟机客户端怎么连接服务器,虚拟机客户端连接服务器