Datawhale-零基础入门NLP-新闻文本分类Task04

1 FastText 学习路径

FastText 是 facebook 近期开源的一个词向量计算以及文本分类工具,FastText的学习路径为:

具体原理就不作解析了,详细教程见:https://fasttext.cc/docs/en/support.html

2 FastText 安装

2.1 基于框架的安装

需要从github下载源码,然后生成可执行的fasttext文件

(1)命令:git clone https://github.com/facebookresearch/fastText.git

(2)命令:cd fastText/  and   ls  

(3)命令:make

2.2 基于Python模块的安装

(1)直接pip安装:pip install fasttext

(2)源码安装:

3 FastText 实现文本分类

3.1 例子

(1)下载数据

#读取数据
wget https://dl.fbaipublicfiles.com/fasttext/data/cooking.stackexchange.tar.gz
#解压数据
tar xvzf cooking.stackexchange.tar.gz
#显示前几行
head cooking.stackexchange.txt

(2)划分数据集

#查看数据
wc cooking.stackexchange.txt

#划分数据集
head -n 12404 cooking.stackexchange.txt > cooking.train
tail -n 3000 cooking.stackexchange.txt > cooking.valid

(3)训练与调参

此处是基于命令行的展示,Python的展示可参考:https://fasttext.cc/docs/en/supervised-tutorial.html

fasttext的参数有:

训练:

./fasttext supervised -input cooking.train -output model_cooking

预测:

 ./fasttext predict model_cooking.bin -

3.2 基于新闻文本的FastText分析

import fasttext
import pandas as pd
from sklearn.metrics import f1_score

train_df = pd.read_csv('data/data45216/train_set.csv',sep='\t')

train_df['label_ft'] = '__label__' + train_df['label'].astype(str) 
train_df[['text','label_ft']].iloc[:-5000].to_csv('train.csv',index=None,header=None,sep='\t')

model = fasttext.train_supervised('train.csv',lr=1.0,wordNgrams=2,verbose=2,minCount=1,epoch=25,loss='hs')

val_pred = [model.predict(x)[0][0].split('__')[-1] for x in  train_df.iloc[-5000:]['text']]
print(f1_score(train_df['label'].values[-5000:].astype(str),val_pred,average='macro'))


输出结果为:

4 FastText调参

FastText的train_supervised参数有:

可通过以上参数进行手动设置,也可用过FastText的自动调参功能进行调参。

4.1 基于命令行

(1)验证集验证-autotune-validation

./fasttext supervised -input cooking.train -output model_cooking -autotune-validation cooking.valid

       (2)设置执行时间-autotune-duration

./fasttext supervised -input cooking.train -output model_cooking -autotune-validation cooking.valid -autotune-duration 600

       (3)模型大小 -autotune-modelsize

./fasttext supervised -input cooking.train -output model_cooking -autotune-validation cooking.valid -autotune-modelsize 2M

(4)指标 -autotune-metric

-autotune-metric f1:__label__baking
-autotune-metric precisionAtRecall:30
-autotune-metric precisionAtRecall:30:__label__baking
-autotune-metric recallAtPrecision:30
-autotune-metric recallAtPrecision:30:__label__baking

4.2 基于Python模块

(1)验证集验证autotuneValidationFile

model = fasttext.train_supervised(input='cooking.train', autotuneValidationFile='cooking.valid')

       (2)设置执行时间autotuneDuration

model = fasttext.train_supervised(input='cooking.train', autotuneValidationFile='cooking.valid', autotuneDuration=600)

       (3)模型大小autotuneModelSize

model = fasttext.train_supervised(input='cooking.train', autotuneValidationFile='cooking.valid', autotuneModelSize="2M")

(4)指标 autotuneMetric

model = fasttext.train_supervised(input='cooking.train', autotuneValidationFile='cooking.valid', autotuneMetric="f1:__label__baking")

5 作业

使用自动调参进行训练:

import fasttext
import pandas as pd
from sklearn.metrics import f1_score

train_df = pd.read_csv('data/data45216/train_set.csv',sep='\t')

#将label值转成fasttext识别的格式
train_df['label_ft'] = '__label__' + train_df['label'].astype(str) 
#划分训练集和验证集
train_df[['text','label_ft']].iloc[:10000].to_csv('train.csv',index=None,header=None,sep='\t')
train_df[['text','label_ft']].iloc[10000:15000].to_csv('valid.csv',index=None,header=None,sep='\t')

#建立模型
model = fasttext.train_supervised('train.csv',lr=1.0,wordNgrams=2,verbose=2,minCount=1,epoch=25,loss='hs',autotuneValidationFile='valid.csv',autotuneMetric="f1:__label__baking")

#预测
val_pred = [model.predict(x)[0][0].split('__')[-1] for x in  train_df.iloc[-5000:]['text']]
print(f1_score(train_df['label'].values[-5000:].astype(str),val_pred,average='macro'))

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
天池大赛是国内知名的数据科学竞赛平台,零基础入门NLP - 新闻文本分类是其中的一项比赛任务。这个任务的目标是利用机器学习和自然语言处理的方法,对给定的新闻文本进行分类,即根据新闻内容判断其所属的类别。这个任务对于初学者来说是一个很好的入门项目。 在解决这个问题的过程中,我们需要首先对提供的训练数据进行探索性数据分析,了解数据的分布,词频以及类别的平衡情况。然后,我们可以进行文本预处理,包括分词、去除停用词、词干化等。接下来,可以构建特征表示,可以使用TF-IDF、Word2Vec或者其他词嵌入模型来提取文本的向量表示。在构建特征表示后,可以选择合适的机器学习算法,如朴素贝叶斯、支持向量机、深度学习等,来训练分类模型。 在进行模型训练之前,可以将数据集分为训练集和验证集,用于模型的评估和调优。我们可以使用交叉验证,调整模型的超参数,选择表现最好的模型。在模型训练完成后,可以使用测试集对模型进行评估,计算准确率、召回率和F1值等指标。最后,我们可以利用模型对给定的未知新闻文本进行分类预测。 在解决这个问题的过程中,还可以进行一些方法的优化和改进。比如,可以使用集成学习的方法,如随机森林、XGBoost或者LightGBM等,结合多个分类器的结果来提高整体的分类准确率。此外,可以尝试使用预训练的模型,如BERT等,来获得更好的特征表示。此外,还可以尝试使用深度学习网络,如卷积神经网络或者循环神经网络,来提取文本的高级语义特征。 总之,零基础入门NLP - 新闻文本分类是一个很好的机会,可以学习和应用自然语言处理的知识和技术。通过解决这个问题,我们可以深入了解文本分类的基本概念和方法,提升自己在数据科学领域的能力和竞争力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

樱缘之梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值