案例: 利用 Hugging Face 进行复杂文本分类
Witty 与 Hugging Face 专家加速计划的成功案例
如果你对如何更快构建 ML 解决方案感兴趣,请访问 专家加速计划 登陆页面并通过 填写表单 联系我们!
业务背景
随着 IT 技术不断地在发展并重塑我们的世界,在行业内创造一个更加多样化和包容性的环境势在必行。旨在应对这一挑战,Witty Works 于 2018 年成立了。 Witty Works 起初是一家为组织提供多元化建议的咨询公司,主要帮助这些组织使用包容性语言撰写招聘广告。为了进一步拓展这项工作,Witty Works 在 2019 年构建了一个网络应用程序,以帮助用户用英语、法语和德语编写包容性的招聘广告。其写作助手可以作为浏览器扩展程序使用,从而迅速扩大了使用范围,人们可方便用它来自动修复和解释电子邮件、Linkedin 帖子、招聘广告等内容中的潜在偏见。该程序为内部和外部沟通提供了一种解决方案,通过一种循序渐进方式,高亮出有偏见的词语和短语并解释其存在的潜在偏见,从而促进文化变革。
首次实验
Witty Works 起初选择了一种基础的机器学习方法来从头开始构建他们的助手。对预训练的 spaCy 模型进行迁移学习,通过此方法,助手可以:
- 分析文本并将单词转换为词干,
- 进行语言学分析,
- 从文本中提取语言学特征 (复数和单数形式、性别) 、词性标签 (代词、动词、名词、形容词等) 、词依存标签、命名实体识别等。
通过使用语言学特征并用特定知识库来检测和过滤所有单词,助手可以高亮非包容性词汇并实时建议替代方案。
挑战
Witty Works 建立了一个词汇表,其中德语和英语两种语言各有大约 2300 个非包容性的词汇和短语。上述基础方法对 85% 的词汇有效,但对上下文相关的词汇无效。因此,需要构建一个上下文相关的非包容性词分类器。这样的挑战 (理解上下文而不是仅识别语言学特征) 使得使用 Hugging Face transformers 变得必要。
上下文相关的非包容性词示例:
Fossil fuels are not renewable resources.
和He is an old fossil.
两句中的fossil
。You will have a flexible schedule.
和You should keep your schedule flexible.
两句中的flexible
。
Hugging Face 专家计划 提供的解决方案
获取如何正确选择 ML 方法的指导
最初选择的方法是使用基本版 transformers 模型 (用于提取特定非包容性词的嵌入)。 Hugging Face 专家建议从上下文相关的词嵌入切换到上下文相关的句子嵌入。在该方法中,句子中每个词的表示取决于其上下文。
Hugging Face 专家建议使用 Sentence Transformers 架构为整个句子生成嵌入。使用该方法,语义相似的句子间的距离小,而语义差距大的句子间的距离也大。
在该方法中,Sentence Transformers 使用 Siamese 网络和三元组网络结构来修改预训练的 transformer 模型,以生成 “语义上有意义” 的句子嵌入。
生成的句子嵌入作为基于 KNN 或逻辑回归的经典分类器的输入,以构建上下文相关的非包容性词分类器。
“我们根据每个词的句内上下文生成上下文相关的嵌入向量 (BERT 嵌入)。然后,我们只保留 “目标” 词元的嵌入,计算最小角度 (余弦相似度)”
—— Witty Works 首席数据科学家 Elena Nazarenko
要微调一个基于基本版 transformers 的分类器 (例如简单的 BERT 模型),Witty Works 需要大量标注数据。每个类别的目标词都需要数百个样本。然而,这样的注释过程既昂贵又耗时,Witty Works 无法承受。
获取如何正确选择 ML 库的指导
Hugging Face 专家建议使用 Sentence Transformers Fine-tuning 库 (又名 SetFit),这是一个对 Sentence Transformers 模型进行少样本微调的有效框架。结合对比学习和语义句子相似度,SetFit 在标注数据很少的文本分类任务上实现了高精度。
“用于文本分类任务的 SetFit 是一个值得添加到 ML 工具箱中的好工具。”
—— Hugging Face 的首席布道官 Julien Simon
Witty Works 团队发现每个特定词汇只需 15-20 个标注句子,精度就足够了。
“最终,因为不需要创建一个大型标注数据集,我们节省了时间和金钱。”
—— Witty Works 首席数据科学家 Elena Nazarenko
减少句子数对于确保模型训练快速和高效至关重要。同时,出于另一个原因,这也是必要的: Witty Works 采用了一个明晰的、高度受监督的、基于规则的方法来 积极管理偏见。减少句子数对于减少人工审核训练集中句子的工作量非常重要。
获取如何正确选择 ML 模型的指导
Witty Works 面临的一个主要挑战是模型部署后需要达到低延迟。没有人能容忍等待 3 分钟才能获得改进文本的建议! Hugging Face 和 Witty Works 双方均试验了多个 sentence transformer 模型,最终选择了 mpnet-base-v2,将其与逻辑回归和 KNN 结合使用。
在 Google Colab 上进行首次测试后,Hugging Face 专家指导 Witty Works 在 Azure 上部署该模型。由于模型本身已经足够快,因此无需额外的优化。
“与 Hugging Face 合作为我们节省了大量时间和金钱。
在实施复杂的文本分类用例时,人们可能会感到迷茫。
由于它是最受欢迎的任务之一,因此 Hub 上有很多模型。
Hugging Face 专家指导我从大量基于 transformer 的模型中选择出最合适的模型。
另外,模型部署过程中我也得到了很好的支持。”
—— Witty Works 首席数据科学家 Elena Nazarenko
结果和结论
训练集中句子的数量从每个单词 100-200 个减少到每个单词 15-20 个。 Witty Works 最终获得了 0.92 的准确度,并以最少的 DevOps 工作量成功地在 Azure 上部署了自定义模型!
“独自从事 IT 项目可能具有挑战性,即使是做一个尝鲜版 (Early Access Product, EAP) 对初创企业来说是一项很大的投资,Hugging Face 专家计划是一个便宜且有意义的获取陪练和指导的途径。”
—— Lukas Kahwe Smith 首席技术官兼 Witty Works 联合创始人
在 Hugging Face 专家的指导下,Witty Works 以 Hugging Face 的方式实施了新的 ML 工作流程,节省了时间和金钱。
“Hugging Face 式的工作流建立法:
找到开源的预训练模型,
立即评估它们,
看看哪些有效,哪些无效。
通过迭代,你上手新东西会更快”
—— Hugging Face 的首席布道官 Julien Simon
如果你或你的团队有兴趣通过 Hugging Face 专家计划加速你的 ML 路线图,请访问 hf.co/support 了解更多信息。
英文原文: https://hf.co/blog/classification-use-cases
原文作者: Julien Simon,Violette Lepercq,Florent Gbelidji,Elena Nazarenko,Lukas Kahwe Smith
译者: Matrix Yao (姚伟峰),英特尔深度学习工程师,工作方向为 transformer-family 模型在各模态数据上的应用及大规模模型的训练推理。
审校/排版: zhongdongy (阿东)
案例: 利用 Hugging Face 进行复杂文本分类的更多相关文章
- NLP(十六)轻松上手文本分类
背景介绍 文本分类是NLP中的常见的重要任务之一,它的主要功能就是将输入的文本以及文本的类别训练出一个模型,使之具有一定的泛化能力,能够对新文本进行较好地预测.它的应用很广泛,在很多领域发挥着重要 ...
- NLTK学习笔记(六):利用机器学习进行文本分类
目录 一.监督式分类:建立在训练语料基础上的分类 特征提取器和朴素贝叶斯分类器 过拟合:当特征过多 错误分析 二.实例:文本分类和词性标注 文本分类 词性标注:"决策树"分类器 三 ...
- 利用jieba,word2vec,LR进行搜狐新闻文本分类
一.简介 1)jieba 中文叫做结巴,是一款中文分词工具,https://github.com/fxsjy/jieba 2)word2vec 单词向量化工具,https://radimrehurek ...
- 利用RNN进行中文文本分类(数据集是复旦中文语料)
利用TfidfVectorizer进行中文文本分类(数据集是复旦中文语料) 1.训练词向量 数据预处理参考利用TfidfVectorizer进行中文文本分类(数据集是复旦中文语料) ,现在我们有了分词 ...
- 利用CNN进行中文文本分类(数据集是复旦中文语料)
利用TfidfVectorizer进行中文文本分类(数据集是复旦中文语料) 利用RNN进行中文文本分类(数据集是复旦中文语料) 上一节我们利用了RNN(GRU)对中文文本进行了分类,本节我们将继续使用 ...
- 文本分类学习 (五) 机器学习SVM的前奏-特征提取(卡方检验续集)
前言: 上一篇比较详细的介绍了卡方检验和卡方分布.这篇我们就实际操刀,找到一些训练集,正所谓纸上得来终觉浅,绝知此事要躬行.然而我在躬行的时候,发现了卡方检验对于文本分类来说应该把公式再变形一般,那样 ...
- 百度开源其NLP主题模型工具包,文本分类等场景可直接使用L——LDA进行主题选择本质就是降维,然后用于推荐或者分类
2017年7月4日,百度开源了一款主题模型项目,名曰:Familia. InfoQ记者第一时间联系到百度Familia项目负责人姜迪并对他进行采访,在本文中,他将为我们解析Familia项目的技术细节 ...
- Pytorch——BERT 预训练模型及文本分类
BERT 预训练模型及文本分类 介绍 如果你关注自然语言处理技术的发展,那你一定听说过 BERT,它的诞生对自然语言处理领域具有着里程碑式的意义.本次试验将介绍 BERT 的模型结构,以及将其应用于文 ...
- NLP文本分类
引言 其实最近挺纠结的,有一点点焦虑,因为自己一直都期望往自然语言处理的方向发展,梦想成为一名NLP算法工程师,也正是我喜欢的事,而不是为了生存而工作.我觉得这也是我这辈子为数不多的剩下的可以自己去追 ...
- 文本分类:Keras+RNN vs传统机器学习
摘要:本文通过Keras实现了一个RNN文本分类学习的案例,并详细介绍了循环神经网络原理知识及与机器学习对比. 本文分享自华为云社区<基于Keras+RNN的文本分类vs基于传统机器学习的文本分 ...
随机推荐
- 【PyQt6】Python使用QtCharts画图修改背景色的问题
问题 想在软件界面用PyQt6的QtChart新画一张饼图,自定义一个饼图类继承QChartView: class PyPieChart(QChartView): def __init__( self ...
- bert一些思考
bert结构 首先是embdding lookup,[batch * seq]-->[batch, seq, hidden] 然后是加个mask embdding和type embdding和p ...
- C++ 用运算符重载 实现复数相加
#include "stdafx.h" #include <iostream> using namespace std; class Complex {public: ...
- 如何卸载cad 2022?怎么把cad 2022彻底卸载删除干净重新安装的方法【转载】
标题:cad 2022重新安装方法经验总结,利用卸载清理工具完全彻底排查删除干净cad 2022各种残留注册表和文件.cad 2022显示已安装或者报错出现提示安装未完成某些产品无法安装的问题,怎么完 ...
- SQL Server 还原数据库
1.备份要还原的数据库 选择要备份的数据库,右键单击,任务--备份. 2.备份完成后,将数据库还原 3.新建一个空的数据库,比如Gsy_TestNew,将备份的数据库还原到这个新的库上 4.右键单击[ ...
- 【C++小程序】《我要抽签》b1.0做好了~
也许是的,得横空出世了 如你所见 这款基于\(C++\)能模仿Mrs. Yao抽签系统的cpp终于做完了啦~ 初期功能很少.\(BUG\)极多. 所以为了您的体验:) 请遵守格式 代码: #inclu ...
- Zookeeper分布式服务
Zookeeper(CP) 以集群的方式[leader和follower]为分布式应用提供协调服务.负责存储和管理大家都关系的数据,接受观察者注册.消息分发等服务 特点: 只要有半数以上的节点存活就能 ...
- Mysql 5.7 内存配置 (未完成)
innodb_buffer_pool_size = 4024024024 innodb 引擎,用于 缓存数据和索引
- c# datagridview列宽自适应设置
- Jquery中,$(this)的少许获取问题
这是原始代码,结果为解禁提示框中$(this)获取不到当前元素. 如上图,在提示方法外面声明一下$(this)并赋给$this,下面调用$this,即可获取当前元素.