小编D. *_*Gal的帖子

使用 BERT 的 wordpiece 分词器时如何处理标签

我正在尝试使用基于 BERT uncased 的模型和 tensorflow/keras 进行多类序列分类。但是,在按照 BERT wordpiece tokenizer 标记我的数据时,我遇到了一个问题。我不确定应该如何按照标记化程序修改我的标签。

我在 Github 上阅读了几个关于这个问题的开放和封闭问题,我还阅读了谷歌发表的 BERT 论文。特别是在论文的第 4.3 节中,解释了如何调整标签,但我无法将其转换为我的案例。我还阅读了官方 BERT 存储库自述文件,其中有一个关于标记化的部分,并提到了如何创建一种将原始标记映射到新标记的字典,并且这可以用作投影我的标签的一种方式。

我使用了自述文件中提供的代码,并设法按照我认为应该的方式创建了标签。但是,我不确定这是否是正确的方法。下面是一个标记化句子的示例,以及它在使用 BERT 标记器之前和之后的标签。只是一个旁注。我已经调整了分词器中的一些代码,以便它不会根据标点符号对某些单词进行分词,因为我希望它们保持完整。

这是创建映射的代码:

bert_tokens = []
label_to_token_mapping = []

bert_tokens.append("[CLS]")

for token in original_tokens:
   label_to_token_mapping.append(len(bert_tokens))
   bert_tokens.extend(tokenizer.tokenize(token, ignore_set=ignore_set))

bert_tokens.append("[SEP]")

Run Code Online (Sandbox Code Playgroud)
original_tokens = ['The', <start>', 'eng-30-01258617-a', '<end>', 'frailty']
tokens = ['[CLS]', 'the', '<start>', 'eng-30-01258617-a', '<end>', 'frail', '##ty', '[SEP]']
labels = [0,2, 3, 4, 1]
label_to_token_mapping = [1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

使用映射我调整我的标签数组,它变成如下所示:

labels = [0, 2, 3, 4, 1, 1]
Run Code Online (Sandbox Code Playgroud)

在此之后,我添加了填充标签(假设最大序列长度为 10),因此最后我的标签数组如下所示:

labels …
Run Code Online (Sandbox Code Playgroud)

python nlp machine-learning keras tensorflow

6
推荐指数
0
解决办法
1761
查看次数

部署到Azure后的编译器错误

我有一个使用队列,存储和表的云服务,该服务具有Web角色和辅助角色。我将其发布到Azure,一切似乎都很好。当我单击Web应用程序URL时,出现以下错误:

编译器错误消息:编译器失败,错误代码-2146232576。

如果我在本地部署Web应用程序,一切正常!有谁可以帮助我吗?我尝试在网上查找,但找不到解决方案,对此我很陌生。

asp.net compiler-errors azure asp.net-mvc-4

5
推荐指数
1
解决办法
528
查看次数