当前位置: 首页 > news >正文

nlp论文:分本分类:《Bag of Tricks for Efficient Text Classification》

文章目录

  • 一、论文和代码网址
  • 二、代码复现
    • 1.Linux系统下拉取代码、编译
    • 2.数据集:情感分析
    • 3.训练
    • 4.评估模型:用训练集评估模型精度
    • 5.测试
  • 三、代码结构
  • 四、模型架构
  • 五、fastText模型评价

一、论文和代码网址

论文:https://arxiv.org/pdf/1607.01759v2
代码:https://github.com/facebookresearch/fastText



二、代码复现

1.Linux系统下拉取代码、编译

wget https://github.com/facebookresearch/fastText/archive/v0.9.2.zip
unzip v0.9.2.zip
cd fastText-0.9.2
make

2.数据集:情感分析

IMDB 评论25000条:https://ai.stanford.edu/~amaas/data/sentiment/

假设我们要做情感分析任务,任务是根据电影评论判断情感是积极还是消极。那么我们可以准备如下格式的训练数据:

train.txt

__label__positive  This movie is fantastic, I loved it!
__label__negative  I hated this movie, it was awful.
__label__positive  Absolutely amazing, best movie I've seen!
__label__negative  Terrible, waste of time.
__label__positive  Great movie, will watch again.
__label__negative  Didn't enjoy it at all, very boring.

3.训练

修改epoch轮次

vim classification-example.sh

找到-epoch,从5改为20


训练模型命令:

./fasttext supervised -input train_25000.txt -output model./fasttext supervised -input train_25000.txt -output model -lr 0.01 -epoch 300 -dim 300 -neg 10 -loss hs【 loss 0.137】./fasttext supervised -input train_25000.txt -output model -lr 0.05 -epoch 50 -dim 300 -neg 30 -loss ns 【ns:很差】./fasttext supervised -input train_25000.txt -output model -lr 0.1 -epoch 50 -dim 300 -neg 30 -loss hs【 loss 0.111

最终输出:

Read 5M words
Number of words:  281111
Number of labels: 2
Progress: 100.0% words/sec/thread:  835193 lr:  0.000000 avg.loss:  0.137626 ETA:   0h 0m 0s

4.评估模型:用训练集评估模型精度

./fasttext test model.bin train.txt
./fasttext test model.bin train_25000.txt
./fasttext test model.bin test_label.txt
N	25000
P@1	0.996
R@1	0.996N	107
P@1	0.897
R@1	0.897

5.测试

test.txt

I loved this movie, it was fantastic!
The movie was very boring and predictable.
I didn't enjoy it at all, such a disappointment.

预测命令:

./fasttext predict-prob model.bin train_25000.txt

这将输出每行文本的预测标签。预测结果会以以下格式显示:

__label__positive 0.81732
__label__negative 0.698711
__label__positive 0.999979
__label__positive 0.862
__label__positive 0.999925
__label__positive 0.992208
__label__positive 0.999989
__label__positive 0.910747
__label__positive 0.848151
__label__negative 1.00001__label__positive 1.00001
__label__negative 0.832305
__label__positive 0.999992
__label__negative 0.973684
__label__positive 0.99999
__label__negative 0.965739



三、代码结构

C++辅以Python实现:

1.训练过程:fasttext.cc
(1)train()函数

void FastText::train(const Args& args, const TrainCallback& callback) {

2.模型:model.cc
模型计算与更新:model.cc 中主要处理 隐藏层计算、预测 和 模型参数更新 的过程。每次训练时都会通过 反向传播 来更新模型的 词向量。


3.损失函数:loss.cc
损失函数:loss.cc中实现了多种 损失函数(如负采样、层次化 softmax 和 标准softmax),每个损失函数都有自己的forward方法,负责计算损失并进行反向传播。



四、模型架构

在这里插入图片描述


五、fastText模型评价

1.工作原理
(1)词向量
通过词向量(Word Embeddings)的方式来表示每个词。将每个词拆分成了子词(subwords),利用n-gram技术,以更好地处理词形变化(复数形式、时态变化)和生僻词。

(2)线性分类器
fastText 使用一个线性分类器来进行文本分类任务。它会将文本中的所有词的向量表示(或子词的向量)平均起来,得到文本的向量表示,然后通过一个线性分类器(例如 logistic regression)来进行预测。
这种方法非常快速,尤其适合文本分类任务。

2.优势
没有复杂的神经网络,因此对于大规模文本,训练速度很快。

加速训练:
(1)Hierarchical Softmax
(2)负样本(Negative Samples):

负样本是随机从词汇表中选择的 不相关的词汇,这些词不与给定的中心词共同出现在同一上下文中。
例如,在训练 “cat” 的词向量时,负样本可能是从整个词汇表中随机选择的单词 “dog”、“apple”、“car” 等,这些词不与 “cat” 出现在同一上下文中。


3.缺陷
对于双重否定句,无法准确判断。


4.改进:
改用LSTM、GRU、Transformer、BERT等深度学习模型。含有自注意力机制的模型对中长语句的理解能力更强。能更好地处理文本中的长距离依赖上下文信息,捕捉到更丰富的句法和语义信息。

fastText太轻量级,以至于无法加入早停Dropout,采用的是负采样层次化softmax来训练词向量。


文章转载自:
http://caudad.wjrtg.cn
http://castalia.wjrtg.cn
http://argentate.wjrtg.cn
http://birthright.wjrtg.cn
http://adrenochrome.wjrtg.cn
http://calendry.wjrtg.cn
http://budgeree.wjrtg.cn
http://begin.wjrtg.cn
http://almacantar.wjrtg.cn
http://breadthways.wjrtg.cn
http://betain.wjrtg.cn
http://bantin.wjrtg.cn
http://bafflement.wjrtg.cn
http://antianginal.wjrtg.cn
http://arteriogram.wjrtg.cn
http://birthparents.wjrtg.cn
http://adapters.wjrtg.cn
http://basilary.wjrtg.cn
http://catsup.wjrtg.cn
http://cameralistic.wjrtg.cn
http://cablevision.wjrtg.cn
http://checkered.wjrtg.cn
http://centripetal.wjrtg.cn
http://affinal.wjrtg.cn
http://abdication.wjrtg.cn
http://afore.wjrtg.cn
http://antiphony.wjrtg.cn
http://airstop.wjrtg.cn
http://autosuggest.wjrtg.cn
http://brusquely.wjrtg.cn
http://www.dtcms.com/a/281184.html

相关文章:

  • VirtualBox网络配置全指南:桥接、Host-Only与双网卡实战
  • 2025华为ODB卷-士兵过河-三语言题解
  • 限制apk使用时长第二篇-限制/拦截Apk启动-应用锁功能
  • 创客匠人:创始人 IP 变现,从 “单点尝试” 到 “生态赋能” 的跨越
  • S7-200 SMART PLC:不同CPU及数字量 IO 接线全解析
  • ESLint 配置错误:ReferenceError: prettier is not defined 解决方案
  • 运维技术教程之Jenkins上的known_hosts文件
  • 高频高密度趋势下磁芯材料评价指标探讨
  • UVM(1)—配置环境
  • 算法学习day16----Python数据结构--模拟队列
  • 传统三层网络架构和现代数据中心网络架构(如思科 ACI 的 Spine-Leaf 架构)的对比和分析(Grok3 回答)
  • Mac电脑上无需卸载即可切换使用多个EasyConnect客户端的解决方案
  • Docker安装升级redis,并设置持久化
  • 使用 sudo iftop -i 分析服务器带宽使用情况
  • 一文读懂语义解析技术:从规则到神经网络的演进与挑战
  • PPP 链路及 MP 捆绑与 CHAP 验证实验
  • 从零开始学前端html篇3
  • Missing classes detected while running R8解决
  • 创客匠人:从 IP 到变现,定位是构建价值闭环的核心
  • Elasticsearch的深度翻页问题
  • Git本地操作完全指南:从入门到精通
  • 创客匠人:创始人 IP 打造,知识变现的时代必然
  • Elasticsearch 9.x 搜索执行流程(源码解读)
  • 深度学习中的激活函数:从原理到 PyTorch 实战
  • CentOS服务器安装Supervisor使队列可以在后台运行
  • 【用unity实现100个游戏之33】用Unity手搓一个类【红色警戒|魔兽争霸|帝国时代|星际争霸】3D RTS游戏(附源码)
  • vue openlayer创建地图弹框overlay
  • 【html常见页面布局】
  • [ROS 系列学习教程] ROS动作通讯(Action):通信模型、Hello World与拓展
  • k8s环境使用Operator部署Seaweedfs集群(下)