案例: 利用 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基于传统机器学习的文本分 ...
随机推荐
- kafka例子
<dependencies> <dependency> <groupId>org.apache.kafka</groupId> <artifact ...
- 【peewee】Python使用peewee时where中不同类型比较的问题
问题 以学生表为例,TableStudents表中age字段是TextField类型,想要筛选出18岁以上的学生 TableStudents.select().where(TableStudents. ...
- 20200926--图像旋转(奥赛一本通P96 9 多维数组)
输入一个n行m列的黑白图像,将它顺时针旋转90度后输出. 输入:第1行包含两个整数n和m(1<=n<=100,1<=m<=100),表示图像包含像素点的行数和列数. 接下来n行 ...
- c++ 保存txt文件
#include <iostream> #include <stdio.h> #include <fstream> #include <queue> # ...
- Vuex----Mutations
注意: 只能通过 mutations里的函数才能修改 state 中的数据 第一种方法: const store = new Vuex.Store({ state:{ count:0 }, mutat ...
- mysql语句优化总结
Sql语句优化和索引 1.Innerjoin和左连接,右连接,子查询 A. inner join内连接也叫等值连接是,left/rightjoin是外连接. SELECT A.id,A.nam ...
- 三、JMeter实战-快速上手JMeter
1.JMeter基本操作 线JMeter最基本的操作有三个步骤: 先添加一个线程组. 添加HTTP请求. 添加查看结果树. 1.1.添加线程组 在测试计划下新建一个线程组 1.2.添加HTTP请求 在 ...
- Oracle账户被锁住,解锁
转载自:https://blog.csdn.net/weixin_43464743/article/details/121226334 方法一PLSQL解锁1.用dba用户登录plsql.2.左侧选择 ...
- 【javascript】fill()的坑
今天在开发过程中用到数组填充函数fill() //创建一个5X5的二维矩阵,全部填充1 let array = new Array(5).fill(new Array(5).fill(1)) //此时 ...
- MQ(创建MQ注意事项)
创建MQ队列管理器时,需要注意的事项包括以下几点: 1) 队列管理器的日志类型以及日志文件的大小和个数,要根据用户数据量的大小.各个队列上的消息总容量,来计算日志的总容量,以免在系统运行过程中出现日志 ...