【NLP入门】赛题1-新闻文本分类-Task04-基于深度学习的文本分类1-fastText

赛题1-新闻文本分类-Task04-基于深度学习的文本分类1-fastText

本次任务两天完成

赛题

  • 赛题讲解
  • 赛题
  • 数据讲解
  • 机器学习讲解
  • 深度学习-fastText

目标

  1. 学习FastText的使用和基础原理
  2. 学会使用验证集进行调参

跑fasttext模型代码

  1. 数据预处理
# 引入 Pandas
import pandas as pd
# 读取数据
train_set = pd.read_csv('./data/1/train_set.csv', sep='\t', nrows=15000)
# 看一下数据的前几行
train_set.head()
import pandas as pd
from sklearn.metrics import f1_score

# 转换为FastText需要的格式
train_set['label_ft'] = '__label__' + train_set['label'].astype(str)
train_set
  1. 使用 fasttext 跑少量数据
import fasttext

# 提取前1.5万行数据,只取 text,label_ft两列,存成文件
train_set[['text','label_ft']].iloc[:-5000].to_csv('./data/1/fasttext_train.csv', index=None, header=None, sep='\t')

# 读取文件成模型
model = fasttext.train_supervised('./data/1/fasttext_train.csv', lr=1.0, wordNgrams=2, 
                                  verbose=2, minCount=1, epoch=25, loss="hs")
# 使用模型预测后0.5万
val_pred = [model.predict(x)[0][0].split('__')[-1] for x in train_set.iloc[-5000:]['text']]

# 打印预测分数
print(f1_score(train_set['label'].values[-5000:].astype(str), val_pred, average='macro'))
# 0.8448025413001482
  1. 使用 fasttext 跑全量数据
# 测试全量

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

train_set['label_ft'] = '__label__' + train_set['label'].astype(str)
train_set[['text','label_ft']].iloc[:-10000].to_csv('./data/1/fasttext_train.csv', index=None, header=None, sep='\t')

model = fasttext.train_supervised('./data/1/fasttext_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_set.iloc[-10000:]['text']]

# 打印预测分数
print(f1_score(train_set['label'].values[-10000:].astype(str), val_pred, average='macro'))
# 0.9132021029586797

fasttext安装

  • 源码地址
  • 官网
git clone https://github.com/facebookresearch/fastText.git
cd fastText
# pip3 install .
sudo pip install .

mac安装问题处理

  1. pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
# 安装一下 open ssl 模块
brew install OpenSSL

# 如果还不行,导入anaconda环境到 ~/.zshrc
export PATH="/Users/zain/app/ds/anaconda3/bin:$PATH"

# 如果还不行,重新安排pip或pip3
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
# 用哪个版本的 Python 运行安装脚本,pip 就被关联到哪个版本
sudo python3 get-pip.py
  1. pybind11 install failed
# 下载 pybind11 源码并手动安装
git clone https://github.com/pybind/pybind11.git
cd pybind11
# pip3 install .
pip install .

fasttext简介

  • fastText原理及实践-达观
    • Facebook于2016年开源的一个词向量计算和文本分类工具
    • 在标准的多核CPU上,能够训练10亿词级别语料库的词向量在10分钟之内,能够分类有着30万多类别的50多万句子在1分钟之内
  • fastText原理和文本分类实战,看这一篇就够了
    • fastText两个重要的优化:Hierarchical Softmax、N-gram
    • 优化方向
      • (1) 数据预处理
      • (2) 更改样本训练次数epochs(使用参数 –epoch,标准范围[5, 50])
      • (3) 更改学习率learning rate(使用参数 –lr,标准范围[0.1-1])
      • (4) 使用word n-grams(使用参数 –wordNgrams,标准范围[1-5])
    • 分层softmax是使用参数 –loss hs
    • dim 默认情况下使用的是100维的向量,但在100-300维都是常用到的调参范围
    • subwords是一个单词序列中包含最小(minn)到最大(maxn)之间的所有字符串
    • thread 线程池数,默认12
  • wordNgrams,默认是使用 1-gram,也就是单独的词,可以尝试 bi-gram(也就是wordNgrams=2)
  • minCount, 这个有时候我们比较关心,就是词频处理,默认是5,也就是词频小于5的词汇我们都不考虑(直接删除掉),这里一般如果语料比较大的话,一般这是为1就好了

你可能感兴趣的:(NLP,知识图谱,自然语言处理)