构建具身对话式 AI:我们如何教机器人理解、导航和交互
快速阅读: 《黑客 Noon》消息,本文介绍了如何使用BERT模型在特定领域内微调以输出指令分布。代码定义了一个名为“指令编码器”的类,该类继承自PyTorch的nn.Module。通过使用BERT模型对指令进行编码,并添加Dropout层和分类器层,最终实现了对指令的预测。示例中展示了如何利用标记数据、分词器以及优化器等组件来训练该模型。
导入 `torch`
从 `torch.nn` 导入 `nn`
从 `torch.optim` 导入 `optim`
从 `transformers` 导入 `BertTokenizer`,`BertModel`
类 指令编码器(`nn.Module`):
“”” 在特定领域内微调 BERT,输出指令分布。 “””
def __init__(self, 指令数=10, dropout=0.1):
super(指令编码器, self).__init__()
自己.bert = BertModel.from_pretrained(“bert-base-uncased”)
自己.dropout = nn.Dropout(dropout)
自己.classifier = nn.Linear(自己.bert.config.hidden_size, 指令数)
def forward(self, 输入_ids, 注意_mask):
输出 = 自己.bert(输入_ids=输入_ids, 注意_mask=注意_mask)
池化输出 = 输出.pooler_output
池化输出 = 自己.dropout(池化输出)
预测值 = 自己.classifier(池化输出)
返回 预测值
假设我们有一些标记数据:(文本->指令 id)
分词器 = BertTokenizer.from_pretrained(“bert-base-uncased”)
模型 = 指令编码器(指令数=12)
模型.train()
指令 = [“去冰箱”, “拿起红色杯子”, “向左转”]
标签 = [2, 5, 1]
输入编码 = 分词器(指令, padding=True, 截断=True, 返回张量=”pt”)
标签张量 = torch.tensor(标签)
优化器 = optim.AdamW(模型参数, 学习率=1e-5)
损失函数 = nn.CrossEntropyLoss()
(以上内容均由Ai生成)