入门NLP新闻文本分类Task3——基于机器学习的文本分类

学习目标

  • 学会TF-IDF的原理和使用
  • 使用sklearn的机器学习模型完成文本分类

常见概念

  1. 机器学习模型
  • 机器学习是对能通过经验自动改进的计算机算法的研究。机器学习通过历史数据训练模型对应于人类经验进行归纳的过程,机器学习利用模型对新数据进行预测对应于人类利用总结的规律对新问题进行预测的过程。

  1. 文本表示的方法
  • 在自然语言处理中,因为文本是不定长度的,所以,要将文本表示成计算机能够运算的数字或向量的方法,即通过词嵌入(Word Embedding)方法将不定长的文本转换为定长的空间内,是文本分类的第一步。
  • 词嵌入的三种方式:
    • One-hot,即将每一个单词使用一个离散的向量表示,具体地,是将每个字/词编码一个索引,然后根据索引进行赋值。
    • Big of Words(词袋表示),也成为Count Vectors,即用每个文档的字/词可以使用其出现次数来进行表示。在sklearn中,可以直接用CountVector来实现这一步骤。
    • N-gram,N-gram与Count Vectors类似,但对相邻单此组合的新词也进行了技术。

  1. TF-IDF
  • TF,即Term Frequency,词语频率;TF=该词语在当前文档出现的次数/当前文档中词语的总数;
  • IDF,即Inverse Document Frequency,逆向文档频率;IDF=log_e(文档总数/(该单词出现的文档数+1))

基于机器学习的文本分类

下面通过两种方法来实现文本分类。

Count Vectors + RidgeClassifer
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.linear_model import RidgeClassifier
from sklearn.metrics import f1_score
#加载数据
df1=pd.read_csv('D:/DLdata/train_set.csv/train_set.csv',sep='\t',nrows=15000)
#文本特征提取,对关键词集按照出现频率排序,只取前max_features个词作为关键词集
vectorizer=CountVectorizer(max_features=3000)  #计算各个词语出现的次数
df1_test=vectorizer.fit_transform(df1['text'])

#建立和训练模型
clf=RidgeClassifier()
clf.fit(df1_test[:10000],df1['label'].values[:10000])
#预测模型和计算模型准确度
val_pred=clf.predict(df1_test[10000:])
print(f1_score(df1['label'].values[10000:],val_pred,average='macro'))
#  0.7416952793751392
TF-IDF+RidgeClassifier
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import RidgeClassifier
from sklearn.metrics import f1_score
#读入数据
df2=pd.read_csv('D:/DLdata/train_set.csv/train_set.csv',sep='\t',nrows=15000)
#使特征可以为单个字或者3个字 
tfidf=TfidfVectorizer(ngram_range=(1,3),max_features=3000)
df2_test=tfidf.fit_transform(df2['text'])

clf=RidgeClassifier()
clf.fit(df2_test[:10000],df2['label'].values[:10000])

val_pred=clf.predict(df2_test[10000:])
print(f1_score(df2['label'].values[10000:],val_pred,average='macro'))
# 0.8721598830546126

通过比较,利用TF-IDF+RidgeClassifier进行文本分类的准确度是0.87,利用Count Vectors + RidgeClassifer进行文本分类的准确度是0.74,前者要优于后者。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值