【人工智能】Transformers之Pipeline(十三):填充蒙版(fill-mask)

2024-09-03 07:46:01 浏览数 (3)

一、引言

pipeline(管道)是huggingface transformers库中一种极简方式使用大模型推理的抽象,将所有大模型分为音频(Audio)、计算机视觉(Computer vision)、自然语言处理(NLP)、多模态(Multimodal)等4大类,28小类任务(tasks)。共计覆盖32万个模型

今天介绍NLP自然语言处理的第一篇:填充蒙版(fill-mask),在huggingface库内有1.2万个填充蒙版(fill-mask)模型,最典型且必须掌握的模型当属google的bert。

二、填充蒙版(fill-mask)

2.1 概述

掩码mask语言建模的任务是掩码句子中的一些单词,并预测哪些单词应该替换这些掩码mask。当我们从统计上建模所训练的语言时,这些模型非常有用。。

2.2 技术原理

最典型的模型是google发布的BERT,‌‌BERT模型是一种基于‌Transformer的深度学习模型,主要用于自然语言处理任务,通过预训练和微调过程,在多种NLP任务中取得了显著的成绩

2.2.1 BERT模型的基本概念

‌BERT‌(Bidirectional Encoder Representations from Transformers)是一种预训练语言模型,由‌Google于2018年发布。它通过联合左侧和右侧的上下文信息,从未标记文本中预训练出一个深度双向表示模型。BERT模型的核心在于其使用Transformer的编码器部分,能够捕捉文本的双向上下文信息,这在之前的语言模型中是不曾实现的。

2.2.2 BERT模型的工作原理

  • ‌预训练阶段‌:BERT通过两个主要任务进行预训练:‌遮蔽语言模型(‌MLM)‌和‌下一句预测(‌NSP)‌。在MLM任务中,模型被训练来预测输入句子中被遮蔽的词;而在NSP任务中,模型需要判断两个句子是否是连续的文本序列。
  • ‌微调阶段‌:预训练完成后,BERT模型可以通过添加任务特定的输出层来进行微调,以适应不同的NLP任务,如情感分析、问答、命名实体识别等。微调过程利用了预训练阶段学到的语言表征,使得模型能够快速适应新的任务并取得优异的性能。
2.2.3 BERT模型的结构

BERT模型由多层Transformer编码器堆叠而成,每一层都包含‌自注意力机制和‌前馈神经网络。这种深层结构使得BERT能够捕捉从浅层语法特征到深层语义特征的不同级别的语言信息。

2.2.4 BERT模型的应用

BERT在多种NLP任务上取得了当时的最先进结果,包括但不限于情感分析、问答、命名实体识别等。由于其出色的性能和广泛的适用性,BERT成为了NLP领域的一个重大突破,为后续的语言模型研究和发展奠定了基础。

2.2.5 BERT模型与Transformer的区别和联系

‌Transformer‌是一种基于注意力的神经网络架构,而‌BERT‌是Transformer的一个具体应用实例,专注于自然语言处理任务。BERT利用了Transformer的编码器部分,通过预训练和微调过程,在多种自然语言处理任务中表现优异。

2.3 应用场景

  • 语言理解评估:通过评估模型在遮蔽的单词预测上的准确性,可以衡量模型对语言的理解能力。
  • 词汇学习:帮助模型学习词汇关系,例如同义词、上下文适用的词汇等。
  • 文本生成:在内容创作、文本自动生成等领域,根据上下文填充适当的词汇,生成连贯、合理的文本段落。
  • 文本完成与修正:自动完成文本或纠正拼写错误、语法错误,特别是在自动文本编辑器或写作辅助工具中。
  • 个性化推荐系统:在内容推荐中,理解用户查询或上下文后,填充特定的关键词来优化推荐内容。
  • 翻译与多语言处理:在机器翻译中,通过上下文预测单词,有助于提高翻译的准确性和自然性。
  • 情感分析和语义理解:通过预测特定情境下的词汇来更精确地理解文本的情感或意图。
  • 教育工具:用于语言学习软件中,帮助学生学习新词汇,通过填空练习来加强记忆。

2.4 pipeline参数

2.4.1 pipeline对象实例化参数

  • model(PreTrainedModel或TFPreTrainedModel)— 管道将使用其进行预测的模型。 对于 PyTorch,这需要从PreTrainedModel继承;对于 TensorFlow,这需要从TFPreTrainedModel继承。
  • tokenizer ( PreTrainedTokenizer ) — 管道将使用 tokenizer 来为模型编码数据。此对象继承自 PreTrainedTokenizer。
  • modelcardstrModelCard可选)— 属于此管道模型的模型卡。
  • frameworkstr可选)— 要使用的框架,"pt"适用于 PyTorch 或"tf"TensorFlow。必须安装指定的框架。
  • taskstr,默认为"")— 管道的任务标识符。
  • num_workersint可选,默认为 8)— 当管道将使用DataLoader(传递数据集时,在 Pytorch 模型的 GPU 上)时,要使用的工作者数量。
  • batch_sizeint可选,默认为 1)— 当管道将使用DataLoader(传递数据集时,在 Pytorch 模型的 GPU 上)时,要使用的批次的大小,对于推理来说,这并不总是有益的,请阅读使用管道进行批处理。
  • args_parser(ArgumentHandler,可选) - 引用负责解析提供的管道参数的对象。
  • deviceint可选,默认为 -1)— CPU/GPU 支持的设备序号。将其设置为 -1 将利用 CPU,设置为正数将在关联的 CUDA 设备 ID 上运行模型。
  • torch_dtypestrtorch.dtype可选) - 直接发送model_kwargs(只是一种更简单的快捷方式)以使用此模型的可用精度(torch.float16,,torch.bfloat16...或"auto"
  • binary_outputbool可选,默认为False)——标志指示管道的输出是否应以序列化格式(即 pickle)或原始输出数据(例如文本)进行。
  • top_kint可选,默认为 5)— 要返回的预测数量。
  • targetsstrList[str]可选)— 传递后,模型会将分数限制在传递的目标上,而不是在整个词汇表中查找。如果提供的目标不在模型词汇表中,则它们将被标记化,并使用第一个生成的标记(带有警告,并且可能会更慢)。
  • tokenizer_kwargsdict可选)——传递给标记器 (tokenizer) 的关键字参数的附加词典。
2.4.2 pipeline对象使用参数 ​​​​​​​

  • argsstrList[str])— 一个或多个带有掩码标记的文本(或一个提示列表)。
  • targetsstrList[str]可选)— 传递后,模型会将分数限制在传递的目标上,而不是在整个词汇表中查找。如果提供的目标不在模型词汇表中,则它们将被标记化,并使用第一个生成的标记(带有警告,并且可能会更慢)。
  • top_kint可选)——传递时,覆盖要返回的预测数量。
2.4.3 pipeline返回参数 ​​​​​​​

  • sequencestr)——与掩码标记预测相对应的输入。
  • scorefloat)——相应的概率。
  • token ( int) — 预测的 token id(用于替换被屏蔽的 token id)。
  • token_str ( str) — 预测的标记(用于替换被屏蔽的标记)。

2.5 pipeline实战

采用pipeline,使用google的bert中文版模型bert-base-chinese对文本进行补全。

代码语言:javascript复制
import os
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"
os.environ["CUDA_VISIBLE_DEVICES"] = "2"
from transformers import pipeline


fill_masker = pipeline(model="google-bert/bert-base-chinese", task="fill-mask")
output=fill_masker("我是一个[MASK].")
print(output)

执行后,自动下载模型文件并进行识别:

2.6 模型排名

在huggingface上,我们将填充蒙版(fill-mask)模型按下载量从高到低排序,总计1.2万个模型,排名第一的当属google-bert/bert-base-uncased。

三、总结

本文对transformers之pipeline的填充蒙版(fill-mask)从概述、技术原理、pipeline参数、pipeline实战、模型排名等方面进行介绍,读者可以基于pipeline使用文中的2行代码极简的使用NLP中的填充蒙版(fill-mask)模型。

1 人点赞