fasttext模型在大量类别上能够快速训练的原因、为了提升fasttext模型的评估指标做了哪些优化

日萌社

 

人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)


fasttext模型在大量类别上能够快速训练的原因、为了提升fasttext模型的评估指标做了哪些优化 

简述BERT模型的训练过程、BERT模型在推断过程中做了哪些性能优化、BERT模型在训练过程中做了哪些性能优化 

在某个模型训练过程中遇到的难题及其解决办法、对自动超参数调优方法的理解、模型部署时如何实现热更新、说一说最近看过的一篇论文

Softmax反向传播推导、Bert的模型架构


问题:fasttext模型在大量类别上能够快速训练的原因

问题背景

fasttext模型因其简单的结构和在大规模文本处理上的高性能而闻名于世,而考核该模型在哪些部分上的优化得以增强性能几乎成为fasttext面试中的必考问题。

解题思路

第一步: 找出核心知识点并解析

  • fasttext模型:
    • fasttext模型是结构简单,仅由Embedding层,GAP层和输出层组成,适用于大规模文本分类的高效选择之一。使用n-gram特征,层次softmax是fasttext模型的两大显著特征。

  • fasttext模型高效训练的原因:
    • 1,模型结构简单,参数量相比大型模型(如BERT)较少,即提高训练效率又提高推断效率。
    • 2,当业务场景中存在大量目标类别时,fasttext的输出层使用层次softmax提升训练效率。

  • 层次softmax详解:
    • 1,什么是层次softmax: 是一种使用最优二叉树结构替代网络原有输出层(全连接层)的方式。
    • 2,提升训练效率的内在原理: 在训练阶段,由于二叉树是根据预先统计的每个标签数量的占比构造的哈夫曼树(最优二叉树),根据哈夫曼树的性质,使得占比最大的标签节点路径最短,又因为路径中的节点代表参数量,也就意味着这种方式需要更新的参数最少,因此提升训练速度。
    • 3,该方式对模型推断(预测)是否有影响: 在预测阶段,相比全连接层速度略有提升,因为运算参数减少了1/N,N是标签总数。
    • 4,是否存在一定弊端: 因为最优二叉树的节点中存储参数,而样本数量最多的标签对应的参数又最少,可能出现在某些类别上欠拟合,影响模型准确率。因此,若非存在大量目标类别产生的训练低效,首选具有全连接层的输出层。

第二步: 整合核心知识点形成答案

答案

fasttext的输出层使用层次softmax提升在大量类别上的训练效率。


问题:为了提升fasttext模型的评估指标做了哪些优化

解题思路

第一步: 找出核心知识点并解析

  • fasttext模型:
    • fasttext模型是结构简单,仅由Embedding层,GAP层和输出层组成,适用于大规模文本分类的高效选择之一。使用n-gram特征,层次softmax是fasttext模型的两大显著特征。

  • fasttext模型如何提升评估指标:
    • 1,迁移词向量,使模型初始化的参数为迁移参数。
    • 2,对数据进行增强,对于中文文本数据,一般是选择回译增强法,扩充正负样本的数量。
    • 3,根据文本分类目标和业务要求修改损失函数(这种方法实现难度较大,一般不采用)。

第二步: 整合核心知识点形成答案

答案

在项目中,我们首先使模型初始化参数为迁移参数,这样我们的模型训练时,起始的验证准确率由原来的50%提升至63%,最终准确率也提升了大概7%。而且我们还对正负样本数据分别进行回译增强,在原有的数据集基础上,我们分别上采样了正负样本各1000条,有效扩展了数据特征维度,将验证准确率由之前的87%提升至90%。


fasttext模型在⼤量类别上能够快速训练的原因

1:fasttext模型是结构简单,仅由Embedding层,GAP层和输出层组成,适⽤于⼤规模⽂本分类
的⾼效选择之⼀。使⽤n-gram特征,层次softmax是fasttext模型的两⼤显著特征。
2: 模型结构简单,参数量相⽐⼤型模型(如BERT)较少,即提⾼训练效率⼜提⾼推断效率。
3: 当业务场景中存在⼤量⽬标类别时,fasttext的输出层使⽤层次softmax提升训练效率。
4: 关于层次softmax
4.1: 层次softmax是⼀种使⽤最优⼆叉树结构替代⽹络原有输出层(全连接层)的⽅式。
4.2: 提升训练效率的内在原理: 在训练阶段,由于⼆叉树是根据预先统计的每个标签数量的
占⽐构造的哈夫曼树(最优⼆叉树),根据哈夫曼树的性质,使得占⽐最⼤的标签节点路径
最短,⼜因为路径中的节点代表参数量,也就意味着这种⽅式需要更新的参数最少,因此提
升训练速度。
4.3: 该⽅式对模型推断(预测)是否有影响: 在预测阶段,相⽐全连接层速度略有提升,因为运
算参数减少了1/N,N是标签总数。
4.4: 是否存在⼀定弊端: 因为最优⼆叉树的节点中存储参数,⽽样本数量最多的标签对应的
参数⼜最少,可能出现在某些类别上⽋拟合,影响模型准确率。因此,若⾮存在⼤量⽬标类
别产⽣的训练低效,⾸选具有全连接层的输出层。

为了提升fasttext模型的评估指标都做了哪些优化

1: 迁移词向量,使模型初始化的参数为迁移参数。
2: 对数据进⾏增强,对于中⽂⽂本数据,⼀般是选择回译增强法,扩充正负样本的数量。
3: 根据⽂本分类⽬标和业务要求修改损失函数(这种⽅法实现难度较⼤,⼀般不采⽤) 。
在项⽬中,我们⾸先使模型初始化参数为迁移参数,这样我们的模型训练时,起始的验证准确率
由原来的50%提升⾄63%,最终准确率也提升了⼤概7%。⽽且我们还对正负样本数据分别进⾏回
译增强,在原有的数据集基础上,我们分别上采样了正负样本各1000条,有效扩展了数据特征维
度,将验证准确率由之前的87%提升⾄90%。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是使用 Python 和 fasttext 库进行文本分类模型数据预处理的示例代码: ```python import fasttext # 读取原始数据文件 with open('raw_data.txt', 'r', encoding='utf-8') as f: lines = f.readlines() # 将数据划分成训练集和测试集(80% 作为训练集) train_data = lines[:int(len(lines)*0.8)] test_data = lines[int(len(lines)*0.8):] # 将训练集和测试集写入文件 with open('train_data.txt', 'w', encoding='utf-8') as f: f.writelines(train_data) with open('test_data.txt', 'w', encoding='utf-8') as f: f.writelines(test_data) # 使用 fasttext 进行数据预处理 model = fasttext.train_supervised(input='train_data.txt', epoch=25, lr=1.0, wordNgrams=2, bucket=200000, dim=50, loss='softmax') # 评估模型 print(model.test('test_data.txt')) ``` 在上面的代码中,我们首先读取原始数据文件,然后将数据划分成训练集和测试集。接下来,我们将训练集和测试集写入文件,以便 fasttext 进行数据预处理。然后,我们使用 fasttext.train_supervised() 函数训练模型,并使用 test() 函数评估模型在测试集上的性能。 在 fasttext.train_supervised() 函数中,我们指定了一些参数: - input:指定训练数据文件的路径。 - epoch:指定训练轮数。 - lr:指定学习率。 - wordNgrams:指定词组的长度。 - bucket:指定哈希桶的数量。 - dim:指定词向量的维度。 - loss:指定损失函数。 你可以根据自己的需求调整这些参数。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

あずにゃん

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

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

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

打赏作者

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

抵扣说明:

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

余额充值