pytorch - 使用 BERT 进行序列标记
问题描述
我正在使用由嵌入层和 LSTM 组成的模型在 pytorch + torchtext 中执行序列标记。我已经标记了这些句子。
如果我使用自训练或其他预训练的词嵌入向量,这很简单。
但是,如果我使用 Huggingface 转换器BertTokenizer.from_pretrained
,并且分别在句子的开头和结尾添加了BertModel.from_pretrained
一个'[CLS]'
和标记。'[SEP]'
所以模型的输出变成了一个比标签/目标序列长两个元素的序列。
我不确定的是:
- 是否需要这两个标签才能
BertModel
“正确”嵌入句子的每个标记? - 如果需要它们,我可以在 BERT 嵌入层之后、LSTM 输入之前将它们取出,以便输出中的长度正确吗?
解决方案
是的,
BertModel
需要它们,因为没有添加这些特殊符号,输出表示会有所不同。BertModel
但是,我的经验表明,如果您在没有添加标记的情况下对标记任务进行微调[CLS]
,[SEP]
那么您可能看不到显着差异。如果你BertModel
用来提取固定词的特征,那么你最好加上那些特殊的符号。是的,您可以取出那些特殊符号的嵌入。事实上,这是序列标注或标注任务的一般思路。
我建议查看一些使用 BERT 的序列标记或标记示例,以对您的建模决策充满信心。您可以在此处找到使用 Huggingface 转换器的 NER 标记示例。
推荐阅读
- vb.net - 如果控件的 enabled 属性为 false,选项卡索引如何工作
- docker - 当我的 Jest 单元测试在 Docker 中失败时,如何获得测试报告?
- android - Android : 在 android Q 中合并音频和视频文件
- javascript - RoR:按钮按下时简单无刷新
- android - 在Redmi 7A上启动相机拍照时应用程序崩溃
- android - Android:ListPreference 让应用退出全屏模式
- java - 使用 PowerMockito 模拟具有 @Inject 变量和静态方法的类
- c++ - SDL:如何设置窗口的像素大小(拉伸)
- c++ - 在编译期间检查模板类型参数以进行特定于类型的操作
- javascript - 在 Fullcalendar v5 中使用 css-class 切换事件颜色