tensorflow - 如何使用 Transformers 进行文本分类?
问题描述
关于如何使用 Transformers 的 Tensorflow 实现进行文本分类,我有两个问题。
- 首先,似乎人们大多只使用编码器层来完成文本分类任务。然而,编码器层为每个输入单词生成一个预测。根据我对转换器的理解,每次输入到编码器的都是输入句子中的一个单词。然后,使用当前输入词计算注意力权重和输出。我们可以对输入句子中的所有单词重复这个过程。结果,我们最终会得到输入句子中每个单词的成对(注意力权重,输出)。那是对的吗?那么你将如何使用这些对来执行文本分类呢?
- 其次,基于这里Transformer 的 Tensorflow 实现,他们将整个输入句子嵌入到一个向量中,并将这些向量中的一批输入到 Transformer 中。但是,根据我从The Illustrated Transformer中学到的知识,我希望输入是一批单词而不是句子
谢谢!
解决方案
有两种方法,您可以采取:
- 只需平均您从编码器获得的状态;
- 预先添加一个特殊标记
[CLS]
(或您喜欢的任何名称)并使用特殊标记的隐藏状态作为分类器的输入。
BERT使用第二种方法。预训练时,用这个特殊token对应的隐藏状态来预测两个句子是否连续。在下游任务中,也用于句子分类。然而,我的经验是,有时,平均隐藏状态会产生更好的结果。
与其从头开始训练 Transformer 模型,不如使用(并最终微调) transformers 包中的预训练模型(BERT、XLNet、DistilBERT 等)更方便。它具有可在 PyTorch 和 TensorFlow 2.0 中使用的预训练模型。
推荐阅读
- react-native - 使用功能样式组件时如何在屏幕之间传递数据
- server-sent-events - SSE Java 11+ 客户端示例(无依赖项)
- python - 如何查找以某些数字结尾的范围内的所有数字
- django - 在表格内的另一个循环(其他项目循环)内渲染 django formset 表单)
- java - 在 Java 代码中从 SimpleDateFormat 返回 NumberFormatException
- swiftui - 在 SwiftUI 的 List 中获取 CoreData 的索引号
- api - 加载多个 Autodesk Inventor 插件
- angular - 在 mat-select 中选择选项时没有输出
- node.js - 将服务器端的 Fetch 函数导出到客户端 Node.js
- javascript - 内联样式背景图像不显示带有变量的 Reactjs 中的本地图像