繁体   English   中英

训练后如何测试屏蔽语言model?

[英]How to test masked language model after training it?

我已经按照本教程使用 BERT 从 Hugging Face 进行蒙面语言建模,但我不确定如何实际部署 model。

教程: https://github.com/huggingface/notebooks/blob/master/examples/language_modeling.ipynb

我已经使用我自己的数据集训练了 model,效果很好,但我不知道如何实际使用 model,因为遗憾的是,笔记本没有包含如何执行此操作的示例。

我想用我训练有素的 model 做的例子

在 Hugging Face 网站上,这是示例中使用的代码; 因此,我想用我的 model 做这件事:

>>> from transformers import pipeline
>>> unmasker = pipeline('fill-mask', model='bert-base-uncased')
>>> unmasker("Hello I'm a [MASK] model.")

[{'sequence': "[CLS] hello i'm a fashion model. [SEP]",
  'score': 0.1073106899857521,
  'token': 4827,
  'token_str': 'fashion'},
 {'sequence': "[CLS] hello i'm a role model. [SEP]",
  'score': 0.08774490654468536,
  'token': 2535,
  'token_str': 'role'},
 {'sequence': "[CLS] hello i'm a new model. [SEP]",
  'score': 0.05338378623127937,
  'token': 2047,
  'token_str': 'new'},
 {'sequence': "[CLS] hello i'm a super model. [SEP]",
  'score': 0.04667217284440994,
  'token': 3565,
  'token_str': 'super'},
 {'sequence': "[CLS] hello i'm a fine model. [SEP]",
  'score': 0.027095865458250046,
  'token': 2986,
  'token_str': 'fine'}

关于如何做到这一点的任何帮助都会很棒。

这很大程度上取决于您的任务。 您的任务似乎是蒙面语言建模,即预测一个或多个蒙面词:

今天我吃了___。

(pizza) 或 (pasta) 可能同样正确,因此您不能使用准确度等指标。 但是(水)应该比其他两个更“正确”。 因此,您通常要做的是检查语言 model 在评估数据集上的“惊讶”程度。 这个度量被称为perplexity 因此,在您对特定数据集微调 model 之前和之后,您将计算困惑度,并且您会期望微调后它会更低。 model 应该更适合您的特定词汇等。这就是您测试model 的方式。

如您所见,他们在您提到的教程中计算了困惑度:

import math
eval_results = trainer.evaluate()
print(f"Perplexity: {math.exp(eval_results['eval_loss']):.2f}") 

预测样本,您需要标记这些样本并为 model 准备输入。 Fill-mask-Pipeline 可以为您执行此操作:

# if you trained your model on gpu you need to add this line:
trainer.model.to('cpu')

unmasker = pipeline('fill-mask', model=trainer.model, tokenizer=tokenizer)
unmasker("today I ate <mask>")

这导致以下 output:

[{'score': 0.23618391156196594,
  'sequence': 'today I ate it.',
  'token': 24,
  'token_str': ' it'},
 {'score': 0.03940323367714882,
  'sequence': 'today I ate breakfast.',
  'token': 7080,
  'token_str': ' breakfast'},
 {'score': 0.033759087324142456,
  'sequence': 'today I ate lunch.',
  'token': 4592,
  'token_str': ' lunch'},
 {'score': 0.025962186977267265,
  'sequence': 'today I ate pizza.',
  'token': 9366,
  'token_str': ' pizza'},
 {'score': 0.01913984678685665,
  'sequence': 'today I ate them.',
  'token': 106,
  'token_str': ' them'}]

与困惑密切相关,并且更具体到掩码语言 model 评估: https://aclanthology.org/2020.acl-main.240.Z437175BA41913410EE094E1D9

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM