Rya*_*ren 5 text-classification bert-language-model huggingface-transformers
我一直在做一篇关于我的引文分类的论文。我刚刚实现了用于引文分类的 Bert 模型。我有 4 个输出类,我给出一个输入句子,我的模型返回一个输出,告诉引用的类别。现在我的主管给了我另一项任务。
您必须搜索是否可以使用手动功能扩展 BERT 或任何变压器模型。例如,您当前给出一个句子作为唯一输入,后跟其类别。如果你可以给出一个句子和一些其他特征作为输入怎么办?就像我们在其他分类器中所做的那样?
我需要一些关于这个问题的指导。我怎样才能在我的 Bert 模型中添加额外的特征,并且该特征将是分类的而不是数字的。
有几种方法可以实现这一目标。我将在以下答案中仅解释两点:
"Attention is all you need. [Computer Science] [Machine Translation]" -> BERT
Run Code Online (Sandbox Code Playgroud)
为此,我会将新功能的类别作为单独的标记添加到 BERT(这不是必需的,但会减少序列长度),并针对几个时期对其进行微调:
"Attention is all you need. [Computer Science] [Machine Translation]" -> BERT
Run Code Online (Sandbox Code Playgroud)
输出:
18
12
Embedding(28998, 768, padding_idx=0)
Run Code Online (Sandbox Code Playgroud)
from transformers import BertTokenizer, BertForSequenceClassification
my_categories = ["[Computer Science]", "[Machine Translation]"]
sentence="Attention is all you need. [Computer Science] [Machine Translation]"
t= BertTokenizer.from_pretrained("bert-base-cased")
m=BertForSequenceClassification.from_pretrained("bert-base-cased")
# tokenized without separate tokens
print(len(t(sentence)["input_ids"]))
# tokenized without separate tokens
t.add_tokens(my_categories)
print(len(t(sentence)["input_ids"]))
# Extend embedding layer of model
m.resize_token_embeddings(len(t.get_vocab()))
# Training...
Run Code Online (Sandbox Code Playgroud)
您可以像 BertForSerquenceClassification 类一样使用此类,唯一的区别是,它需要categorical_feature_ids
额外的输入:
18
12
Embedding(28998, 768, padding_idx=0)
Run Code Online (Sandbox Code Playgroud)
输出:
{'loss': None,
'logits': tensor([[ 0.6069, -0.1878], [ 0.6347, -0.2608]], grad_fn=<AddmmBackward0>),
'hidden_states': None,
'attentions': None}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1688 次 |
最近记录: |