比赛:达观杯
比赛官方对数据的说明是数据包含两个文件:train_set.csv和test_set.csv
具体说明:
a.
- 下载数据,读取数据,观察数据
- 将训练集拆分为训练集和验证集
- 分享自己对数据以及赛题的理解和发现
PS. 电脑爆内存的,可以先提取5000条数据进行实践~ 或者群内求助一下
达观杯比赛链接:https://m.dcjingsai.com/competition-message?name=“达观杯”文本智能处理挑战赛&cmptId=229
参考资料
达观杯十强分享汇总ppt 链接:https://-pan.baidu.com/s/10hHR7JLnJas9GjI4-7vgFQ 提取码:hx8t
b.
学习TF-IDF理论并实践,使用TF-IDF表示文本
要求:分享学习笔记和代码,【只有代码的等于没有完成】
参考资料
1)CS 224:https://www.bilibili.com/video/av41393758/?p=2
2)https://github.com/Heitao5200/DGB/blob/master/feature/feature_code/tfidf.py
一.数据描述
train_set.csv:此数据集用于训练模型,每一行对应一篇文章。文章分别在“字”和“词”的级别上做了脱敏处理。共有四列:
文章的索引(id),文章正文在“字”级别上的表示,即字符相隔正文(article),“词”级别上的表示, 即词语相隔正文(word_seg)
,分类(class)。
test_set.csv:此数据用于测试。数据格式同train_set.csv,但不包含分类class。
二.TF-IDF简介
TF-IDF(Term Frequency-Inverse DocumentFrequency, 词频-逆文件频率),一种用于资讯检索和资讯探勘的常用加权技术。
TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF-IDF加权的各种形式常被搜寻引擎应用,作为文件与用户查询之间相关程度的度量或评级。
相关原理:
词频TF(item frequency):某一给定词语在该文本中出现次数。该数字通常会被归一化(分子一般小于分母),以防止它偏向长的文件,因为不管该词语重要与否,它在长文件中出现的次数很可能比在段文件中出现的次数更大。
需要注意的是有一些通用词对文章主题没有太大作用,如“的”“是”等,而有一些频率出现少的词如一些专业词更能表现文章主题,所以为词语设置权重,权重的设计满足:一个词预测主题的能力越强,权重越大,反之,权重越小。也就是说,一些词只在很少几篇文章中出现,那么这样的词对文章主题的判断能力很大,这些词的权重应该设计的较大。IDF完成这样的工作。
逆向文件频率IDF(inverse document frequency):一个词语普遍重要性的度量。主要思想是:如果包含词条t的文档越少, IDF越大,则说明词条具有很好的类别区分能力。某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到。
相关公式:
计算TF:
计算IDF:
注:此处分母+1是为了避免当所有文档都不包含该词时,分母为0的情况
计算TF-IDF:
公式中,我们可以看出TF-IDF与一个词在文档中出现的次数成正比,与该词在整个语言中该出现的次数成反比。
某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。
三.思路描述
1.用python的pandas读取数据,这里读取train_set.csv;
2.对数据的数量,异常数据进行筛查;
3.用python对数据进行简单操作,拆分train_set.csv为训练集和验证集,大概可以按照4:1来拆分;
4.对数据进行建模;
四.实践过程
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
#读入数据
my_data = pd.read_csv('../train_set.csv', nrows = 5000)
#数据检查
my_data.isnull().sum()
my_data['class'].value_counts()
#数据分片
X, y = my_data.ix[:,:-1], my_data.ix[:,-1]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 42)
train_data = pd.DataFrame(np.column_stack((X_train, y_train)), columns = my_data.columns)
test_data = pd.DataFrame(np.column_stack((X_test, y_test)), columns = my_data.columns)
print(train_data.shape, test_data.shape)
#调包求TF-IDF值
tfidf = TfidfVectorizer()
vectorizer = tfidf.fit(X_train['word_seg'])
X_train = vectorizer.fit_transform(X_train['word_seg'])
y_train = vectorizer.fit_transform(y_train['word_seg'])
print(X_train)
参考:
https://blog.csdn.net/u012736685/article/details/89056111