原文:
huggingface.co/docs/transformers
特征提取器
原始文本:
huggingface.co/docs/transformers/v4.37.2/en/main_classes/feature_extractor
特征提取器负责为音频或视觉模型准备输入特征。这包括从序列中提取特征,例如,对音频文件进行预处理以生成 Log-Mel Spectrogram 特征,从图像中提取特征,例如,裁剪图像文件,但也包括填充、归一化和转换为 NumPy、PyTorch 和 TensorFlow 张量。
FeatureExtractionMixin
class transformers.FeatureExtractionMixin
<来源>
代码语言:javascript复制( **kwargs )
这是一个特征提取混合类,用于为序列和图像特征提取器提供保存/加载功能。
from_pretrained
<来源>
代码语言:javascript复制( pretrained_model_name_or_path: Union cache_dir: Union = None force_download: bool = False local_files_only: bool = False token: Union = None revision: str = 'main' **kwargs )
参数
-
pretrained_model_name_or_path
(str
或os.PathLike
) — 这可以是:- 一个字符串,预训练特征提取器的 模型 id,托管在 huggingface.co 上的模型存储库中。有效的模型 id 可以位于根级别,如
bert-base-uncased
,或者在用户或组织名称下进行命名空间,如dbmdz/bert-base-german-cased
。 - 一个指向包含使用 save_pretrained() 方法保存的特征提取器文件的 目录 的路径,例如
./my_model_directory/
。 - 一个保存的特征提取器 JSON 文件 的路径或 URL,例如
./my_model_directory/preprocessor_config.json
。
- 一个字符串,预训练特征提取器的 模型 id,托管在 huggingface.co 上的模型存储库中。有效的模型 id 可以位于根级别,如
-
cache_dir
(str
或os.PathLike
, 可选) — 下载的预训练模型特征提取器应该缓存在其中的目录路径,如果不使用标准缓存。 -
force_download
(bool
, 可选, 默认为False
) — 是否强制(重新)下载特征提取器文件并覆盖缓存版本(如果存在)。 -
resume_download
(bool
, 可选, 默认为False
) — 是否删除接收不完整的文件。如果存在这样的文件,则尝试恢复下载。 -
proxies
(Dict[str, str]
, 可选) — 一个按协议或端点使用的代理服务器字典,例如,{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}
。代理将在每个请求中使用。 -
token
(str
或bool
, 可选) — 用作远程文件的 HTTP bearer 授权的令牌。如果为True
,或未指定,将使用运行huggingface-cli login
时生成的令牌(存储在~/.huggingface
中)。 -
revision
(str
, 可选, 默认为"main"
) — 要使用的特定模型版本。它可以是分支名称、标签名称或提交 id,因为我们在 huggingface.co 上使用基于 git 的系统来存储模型和其他工件,所以revision
可以是 git 允许的任何标识符。
从特征提取器实例化一种类型的 FeatureExtractionMixin,例如 SequenceFeatureExtractor 的派生类。
示例:
代码语言:javascript复制# We can't instantiate directly the base class *FeatureExtractionMixin* nor *SequenceFeatureExtractor* so let's show the examples on a
# derived class: *Wav2Vec2FeatureExtractor*
feature_extractor = Wav2Vec2FeatureExtractor.from_pretrained(
"facebook/wav2vec2-base-960h"
) # Download feature_extraction_config from huggingface.co and cache.
feature_extractor = Wav2Vec2FeatureExtractor.from_pretrained(
"./test/saved_model/"
) # E.g. feature_extractor (or model) was saved using *save_pretrained('./test/saved_model/')*
feature_extractor = Wav2Vec2FeatureExtractor.from_pretrained("./test/saved_model/preprocessor_config.json")
feature_extractor = Wav2Vec2FeatureExtractor.from_pretrained(
"facebook/wav2vec2-base-960h", return_attention_mask=False, foo=False
)
assert feature_extractor.return_attention_mask is False
feature_extractor, unused_kwargs = Wav2Vec2FeatureExtractor.from_pretrained(
"facebook/wav2vec2-base-960h", return_attention_mask=False, foo=False, return_unused_kwargs=True
)
assert feature_extractor.return_attention_mask is False
assert unused_kwargs == {"foo": False}
save_pretrained
<来源>
代码语言:javascript复制( save_directory: Union push_to_hub: bool = False **kwargs )
参数
-
save_directory
(str
或os.PathLike
) — 特征提取器 JSON 文件将保存在的目录(如果不存在将被创建)。 -
push_to_hub
(bool
, 可选, 默认为False
) — 在保存模型后是否将其推送到 Hugging Face 模型中心。您可以使用repo_id
指定要推送到的存储库(将默认为您的命名空间中的save_directory
的名称)。 -
kwargs
(Dict[str, Any]
, 可选) — 传递给 push_to_hub() 方法的额外关键字参数。
将 feature_extractor 对象保存到目录 save_directory
,以便可以使用 from_pretrained() 类方法重新加载。
SequenceFeatureExtractor
class transformers.SequenceFeatureExtractor
< source >
代码语言:javascript复制( feature_size: int sampling_rate: int padding_value: float **kwargs )
参数
-
feature_size
(int
) — 提取特征的特征维度。 -
sampling_rate
(int
) — 应以赫兹(Hz)表示的音频文件数字化的采样率。 -
padding_value
(float
) — 用于填充填充值/向量的值。
这是一个用于语音识别的通用特征提取类。
pad
< source >
代码语言:javascript复制( processed_features: Union padding: Union = True max_length: Optional = None truncation: bool = False pad_to_multiple_of: Optional = None return_attention_mask: Optional = None return_tensors: Union = None )
参数
-
processed_features
(BatchFeature、BatchFeature 列表、Dict[str, List[float]]
、Dict[str, List[List[float]]
或List[Dict[str, List[float]]
) — 处理后的输入。可以表示一个输入(BatchFeature 或Dict[str, List[float]]
)或一批输入值/向量(BatchFeature 列表、Dict[str, List[List[float]]] 或 List[Dict[str, List[float]]),因此您可以在预处理期间以及在 PyTorch Dataloader 收集函数中使用此方法。 您可以使用张量(numpy 数组、PyTorch 张量或 TensorFlow 张量)代替List[float]
,请参阅上面的返回类型说明。 -
padding
(bool
、str
或 PaddingStrategy, 可选, 默认为True
) — 选择一种策略来填充返回的序列(根据模型的填充方向和填充索引):-
True
或'longest'
: 填充到批次中最长的序列(如果只提供单个序列,则不填充)。 -
'max_length'
: 填充到指定的最大长度参数max_length
或模型的最大可接受输入长度(如果未提供该参数)。 -
False
或'do_not_pad'
(默认): 无填充(即,可以输出具有不同长度序列的批次)。
-
-
max_length
(int
, 可选) — 返回列表的最大长度和可选填充长度(见上文)。 -
截断
(bool
) — 激活截断以将输入序列长度超过max_length
的部分截断为max_length
。 -
pad_to_multiple_of
(int
, 可选) — 如果设置,将序列填充到提供的值的倍数。 这对于在具有计算能力>= 7.5
(Volta)的 NVIDIA 硬件上启用 Tensor Cores,或者在受益于序列长度为 128 的 TPUs 上使用特别有用。 -
return_attention_mask
(bool
, 可选) — 是否返回注意力掩码。如果保持默认值,将根据特定 feature_extractor 的默认值返回注意力掩码。 什么是注意力掩码? -
return_tensors
(str
或 TensorType, 可选) — 如果设置,将返回张量而不是 Python 整数列表。可接受的值为:-
'tf'
: 返回 TensorFlowtf.constant
对象。 -
'pt'
: 返回 PyTorchtorch.Tensor
对象。 -
'np'
: 返回 Numpynp.ndarray
对象。
-
填充输入值/输入向量或一批输入值/输入向量到预定义长度或批次中的最大序列长度。
填充侧(左/右)填充值在特征提取器级别定义(使用self.padding_side
,self.padding_value
)
如果传递的processed_features
是 numpy 数组、PyTorch 张量或 TensorFlow 张量的字典,则结果将使用相同类型,除非您使用return_tensors
提供不同的张量类型。在 PyTorch 张量的情况下,您将丢失张量的特定设备。
BatchFeature
class transformers.BatchFeature
<来源>
代码语言:javascript复制( data: Optional = None tensor_type: Union = None )
参数
-
data
(dict
,可选)-由call/pad 方法返回的列表/数组/张量的字典(‘input_values’,'attention_mask’等)。 -
tensor_type
(Union[None, str, TensorType]
,可选)-您可以在此处提供一个 tensor_type,以在初始化时将整数列表转换为 PyTorch/TensorFlow/Numpy 张量。
保存 pad()和特征提取器特定的__call__
方法的输出。
此类派生自 Python 字典,可用作字典。
convert_to_tensors
<来源>
代码语言:javascript复制( tensor_type: Union = None )
参数
tensor_type
(str
或 TensorType,可选)-要使用的张量类型。如果是str
,应该是枚举 TensorType 值之一。如果是None
,则不进行修改。
将内部内容转换为张量。
to
<来源>
代码语言:javascript复制( *args **kwargs ) → export const metadata = 'undefined';BatchFeature
参数
-
args
(Tuple
)-将传递给张量的to(...)
函数。 -
kwargs
(Dict
,可选)-将传递给张量的to(...)
函数。
返回
BatchFeature
修改后的相同实例。
通过调用v.to(*args, **kwargs)
将所有值发送到设备(仅适用于 PyTorch)。这应该支持在不同的dtypes
中进行转换,并将BatchFeature
发送到不同的device
。
ImageFeatureExtractionMixin
class transformers.ImageFeatureExtractionMixin
<来源>
代码语言:javascript复制( )
包含准备图像特征的实用程序的 Mixin。
center_crop
<来源>
代码语言:javascript复制( image size ) → export const metadata = 'undefined';new_image
参数
-
image
(PIL.Image.Image
或np.ndarray
或torch.Tensor
,形状为(n_channels,height,width)或(height,width,n_channels))-要调整大小的图像。 -
size
(int
或Tuple[int, int]
)-要裁剪图像的大小。
返回
new_image
中心裁剪的PIL.Image.Image
或np.ndarray
或torch.Tensor
的形状:(n_channels,height,width)。
使用中心裁剪将image
裁剪到给定大小。请注意,如果图像太小而无法裁剪到给定大小,则将进行填充(因此返回的结果具有所需的大小)。
convert_rgb
<来源>
代码语言:javascript复制( image )
参数
image
(PIL.Image.Image
)-要转换的图像。
将PIL.Image.Image
转换为 RGB 格式。
expand_dims
<来源>
代码语言:javascript复制( image )
参数
image
(PIL.Image.Image
或np.ndarray
或torch.Tensor
)-要扩展的图像。
将二维image
扩展为三维。
flip_channel_order
<来源>
代码语言:javascript复制( image )
参数
image
(PIL.Image.Image
或np.ndarray
或torch.Tensor
)- 要翻转颜色通道的图像。如果是np.ndarray
或torch.Tensor
,通道维度应该在前面。
将image
的通道顺序从 RGB 翻转为 BGR,或反之。请注意,如果image
是 PIL 图像,则这将触发将其转换为 NumPy 数组。
normalize
<来源>
代码语言:javascript复制( image mean std rescale = False )
参数
-
image
(PIL.Image.Image
或np.ndarray
或torch.Tensor
)- 要归一化的图像。 -
mean
(List[float]
或np.ndarray
或torch.Tensor
)- 用于归一化的均值(每个通道)。 -
std
(List[float]
或np.ndarray
或torch.Tensor
)- 用于归一化的标准差(每个通道)。 -
rescale
(bool
,可选,默认为False
)- 是否将图像重新缩放为 0 到 1 之间。如果提供了 PIL 图像,缩放将自动发生。
使用mean
和std
对image
进行归一化。请注意,如果image
是 PIL 图像,则这将触发将其转换为 NumPy 数组。
rescale
<来源>
代码语言:javascript复制( image: ndarray scale: Union )
按比例缩放 numpy 图像
resize
<来源>
代码语言:javascript复制( image size resample = None default_to_square = True max_size = None ) → export const metadata = 'undefined';image
参数
-
image
(PIL.Image.Image
或np.ndarray
或torch.Tensor
)- 要调整大小的图像。 -
size
(int
或Tuple[int, int]
)- 用于调整图像大小的大小。如果size
是一个类似(h,w)的序列,输出大小将与此匹配。 如果size
是一个整数且default_to_square
为True
,则图像将被调整为(size,size)。如果size
是一个整数且default_to_square
为False
,则图像的较小边将与此数字匹配。即,如果高度>宽度,则图像将被调整为(size * height / width,size)。 -
resample
(int
,可选,默认为PILImageResampling.BILINEAR
)- 用于重采样的滤波器。 -
default_to_square
(bool
,可选,默认为True
)- 当size
是单个整数时如何转换size
。如果设置为True
,size
将被转换为正方形(size
,size
)。如果设置为False
,将复制torchvision.transforms.Resize
,支持仅调整最小边并提供可选的max_size
。 -
max_size
(int
,可选,默认为None
)- 调整大小后图像较长边的最大允许值:如果图像的较长边大于max_size
,则根据size
再次调整图像,使较长边等于max_size
。因此,size
可能会被覆盖,即较小的边可能会比size
短。仅在default_to_square
为False
时使用。
返回
图像
一个调整大小的PIL.Image.Image
。
调整image
的大小。强制将输入转换为 PIL.Image。
rotate
<来源>
代码语言:javascript复制( image angle resample = None expand = 0 center = None translate = None fillcolor = None ) → export const metadata = 'undefined';image
参数
image
(PIL.Image.Image
或np.ndarray
或torch.Tensor
)- 要旋转的图像。如果是np.ndarray
或torch.Tensor
,将在旋转之前转换为PIL.Image.Image
。
返回
图像
一个旋转后的PIL.Image.Image
。
返回旋转后的image
的副本。此方法返回image
的副本,将其围绕中心逆时针旋转给定角度。
to_numpy_array
<来源>
代码语言:javascript复制( image rescale = None channel_first = True )
参数
-
image
(PIL.Image.Image
或np.ndarray
或torch.Tensor
)- 要转换为 NumPy 数组的图像。 -
rescale
(bool
, optional) — 是否应用缩放因子(使像素值为 0 到 1 之间的浮点数)。如果图像是 PIL 图像或整数数组/张量,则默认为True
,否则为False
。 -
channel_first
(bool
, optional,默认为True
) — 是否重新排列图像的维度以将通道维度放在第一维。
将image
转换为 numpy 数组。可选择重新缩放并将通道维度作为第一维。
to_pil_image
<来源>
代码语言:javascript复制( image rescale = None )
参数
-
image
(PIL.Image.Image
或numpy.ndarray
或torch.Tensor
) — 要转换为 PIL 图像格式的图像。 -
rescale
(bool
, optional) — 是否应用缩放因子(使像素值为 0 到 255 之间的整数)。如果图像类型为浮点类型,则默认为True
,否则为False
。
将image
转换为 PIL 图像。可选择重新缩放并在需要时将通道维度放回最后一个轴。
图像处理器
原始文本:
huggingface.co/docs/transformers/v4.37.2/en/main_classes/image_processor
图像处理器负责为视觉模型准备输入特征并后处理它们的输出。这包括诸如调整大小、归一化和转换为 PyTorch、TensorFlow、Flax 和 Numpy 张量等转换。它还可能包括模型特定的后处理,如将对数转换为分割掩模。
ImageProcessingMixin
class transformers.ImageProcessingMixin
< source >
代码语言:javascript复制( **kwargs )
这是一个用于为顺序和图像特征提取器提供保存/加载功能的图像处理器 mixin。
from_pretrained
< source >
代码语言:javascript复制( pretrained_model_name_or_path: Union cache_dir: Union = None force_download: bool = False local_files_only: bool = False token: Union = None revision: str = 'main' **kwargs )
参数
-
pretrained_model_name_or_path
(str
或os.PathLike
) — 这可以是:- 一个字符串,预训练的图像处理器的模型 ID,托管在 huggingface.co 上的模型存储库中。有效的模型 ID 可以位于根级别,如
bert-base-uncased
,或者在用户或组织名称下命名空间化,如dbmdz/bert-base-german-cased
。 - 一个目录的路径,其中包含使用 save_pretrained()方法保存的图像处理器文件,例如,
./my_model_directory/
。 - 一个保存的图像处理器 JSON 文件的路径或 URL,例如,
./my_model_directory/preprocessor_config.json
。
- 一个字符串,预训练的图像处理器的模型 ID,托管在 huggingface.co 上的模型存储库中。有效的模型 ID 可以位于根级别,如
-
cache_dir
(str
或os.PathLike
, 可选) — 预下载的预训练模型图像处理器应该缓存在其中的目录路径,如果不使用标准缓存。 -
force_download
(bool
, 可选, 默认为False
) — 是否强制(重新)下载图像处理器文件并覆盖缓存版本(如果存在)。 -
resume_download
(bool
, 可选, 默认为False
) — 是否删除接收不完整的文件。如果存在这样的文件,尝试恢复下载。 -
proxies
(Dict[str, str]
, 可选) — 一个代理服务器字典,按协议或端点使用,例如,{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}
。这些代理在每个请求中使用。 -
token
(str
或bool
, 可选) — 用作远程文件的 HTTP bearer 授权的令牌。如果为True
或未指定,将使用运行huggingface-cli login
时生成的令牌(存储在~/.huggingface
中)。 -
revision
(str
, 可选, 默认为"main"
) — 要使用的特定模型版本。它可以是分支名称、标签名称或提交 ID,因为我们使用基于 git 的系统在 huggingface.co 上存储模型和其他工件,所以revision
可以是 git 允许的任何标识符。
从图像处理器实例化一个类型的 ImageProcessingMixin。
示例:
代码语言:javascript复制# We can't instantiate directly the base class *ImageProcessingMixin* so let's show the examples on a
# derived class: *CLIPImageProcessor*
image_processor = CLIPImageProcessor.from_pretrained(
"openai/clip-vit-base-patch32"
) # Download image_processing_config from huggingface.co and cache.
image_processor = CLIPImageProcessor.from_pretrained(
"./test/saved_model/"
) # E.g. image processor (or model) was saved using *save_pretrained('./test/saved_model/')*
image_processor = CLIPImageProcessor.from_pretrained("./test/saved_model/preprocessor_config.json")
image_processor = CLIPImageProcessor.from_pretrained(
"openai/clip-vit-base-patch32", do_normalize=False, foo=False
)
assert image_processor.do_normalize is False
image_processor, unused_kwargs = CLIPImageProcessor.from_pretrained(
"openai/clip-vit-base-patch32", do_normalize=False, foo=False, return_unused_kwargs=True
)
assert image_processor.do_normalize is False
assert unused_kwargs == {"foo": False}
save_pretrained
< source >
代码语言:javascript复制( save_directory: Union push_to_hub: bool = False **kwargs )
参数
-
save_directory
(str
或os.PathLike
) — 将保存图像处理器 JSON 文件的目录(如果不存在,将创建)。 -
push_to_hub
(bool
, 可选, 默认为False
) — 是否在保存后将模型推送到 Hugging Face 模型中心。您可以使用repo_id
指定要推送到的存储库(将默认为您的命名空间中的save_directory
名称)。 -
kwargs
(Dict[str, Any]
, 可选) — 传递给 push_to_hub()方法的额外关键字参数。
将图像处理器对象保存到目录save_directory
,以便可以使用 from_pretrained()类方法重新加载。
BatchFeature
class transformers.BatchFeature
<来源>
代码语言:javascript复制( data: Optional = None tensor_type: Union = None )
参数
-
data
(dict
,可选)- 由call/pad 方法返回的列表/数组/张量的字典(‘input_values’,'attention_mask’等)。 -
tensor_type
(Union[None, str, TensorType]
,可选)- 您可以在此处给出一个 tensor_type,以在初始化时将整数列表转换为 PyTorch/TensorFlow/Numpy 张量。
保存 pad()和特定特征提取器__call__
方法的输出。
这个类是从一个 Python 字典派生而来的,可以作为一个字典使用。
convert_to_tensors
<来源>
代码语言:javascript复制( tensor_type: Union = None )
参数
tensor_type
(str
或 TensorType,可选)- 要使用的张量类型。如果是str
,应该是枚举 TensorType 的值之一。如果是None
,则不进行修改。
将内部内容转换为张量。
to
<来源>
代码语言:javascript复制( *args **kwargs ) → export const metadata = 'undefined';BatchFeature
参数
-
args
(Tuple
)- 将传递给张量的to(...)
函数。 -
kwargs
(Dict
,可选)- 将传递给张量的to(...)
函数。
返回
BatchFeature
修改后的相同实例。
通过调用v.to(*args, **kwargs)
将所有值发送到设备(仅适用于 PyTorch)。这应该支持在不同的dtypes
中进行转换,并将BatchFeature
发送到不同的device
。
BaseImageProcessor
class transformers.image_processing_utils.BaseImageProcessor
<来源>
代码语言:javascript复制( **kwargs )
center_crop
<来源>
代码语言:javascript复制( image: ndarray size: Dict data_format: Union = None input_data_format: Union = None **kwargs )
参数
-
image
(np.ndarray
)- 要居中裁剪的图像。 -
size
(Dict[str, int]
)- 输出图像的大小。 -
data_format
(str
或ChannelDimension
,可选)- 输出图像的通道维度格式。如果未设置,则使用输入图像的通道维度格式。可以是以下之一:-
"channels_first"
或ChannelDimension.FIRST
:图像以(num_channels, height, width)格式。 -
"channels_last"
或ChannelDimension.LAST
:图像以(height, width, num_channels)格式。
-
-
input_data_format
(ChannelDimension
或str
,可选)- 输入图像的通道维度格式。如果未设置,则从输入图像推断通道维度格式。可以是以下之一:-
"channels_first"
或ChannelDimension.FIRST
:图像以(num_channels, height, width)格式。 -
"channels_last"
或ChannelDimension.LAST
:图像以(height, width, num_channels)格式。
-
将图像居中裁剪到(size["height"], size["width"])
。如果输入尺寸沿任何边小于crop_size
,则图像将填充为 0,然后居中裁剪。
normalize
<来源>
代码语言:javascript复制( image: ndarray mean: Union std: Union data_format: Union = None input_data_format: Union = None **kwargs ) → export const metadata = 'undefined';np.ndarray
参数
-
image
(np.ndarray
)- 要归一化的图像。 -
mean
(float
或Iterable[float]
)- 用于归一化的图像均值。 -
std
(float
或Iterable[float]
)- 用于归一化的图像标准差。 -
data_format
(str
或ChannelDimension
,可选) — 输出图像的通道维度格式。如果未设置,则使用输入图像的通道维度格式。可以是以下之一:-
"channels_first"
或ChannelDimension.FIRST
:图像以 (通道数, 高度, 宽度) 格式。 -
"channels_last"
或ChannelDimension.LAST
:图像以 (高度, 宽度, 通道数) 格式。
-
-
input_data_format
(ChannelDimension
或str
,可选) — 输入图像的通道维度格式。如果未设置,则从输入图像中推断通道维度格式。可以是以下之一:-
"channels_first"
或ChannelDimension.FIRST
:图像以 (通道数, 高度, 宽度) 格式。 -
"channels_last"
或ChannelDimension.LAST
:图像以 (高度, 宽度, 通道数) 格式。
-
返回值
np.ndarray
归一化后的图像。
归一化图像。图像 = (图像 - 图像均值) / 图像标准差。
重新缩放
<来源>
代码语言:javascript复制( image: ndarray scale: float data_format: Union = None input_data_format: Union = None **kwargs ) → export const metadata = 'undefined';np.ndarray
参数
-
image
(np.ndarray
) — 要重新缩放的图像。 -
scale
(float
) — 用于重新缩放像素值的缩放因子。 -
data_format
(str
或ChannelDimension
,可选) — 输出图像的通道维度格式。如果未设置,则使用输入图像的通道维度格式。可以是以下之一:-
"channels_first"
或ChannelDimension.FIRST
:图像以 (通道数, 高度, 宽度) 格式。 -
"channels_last"
或ChannelDimension.LAST
:图像以 (高度, 宽度, 通道数) 格式。
-
-
input_data_format
(ChannelDimension
或str
,可选) — 输入图像的通道维度格式。如果未设置,则从输入图像中推断通道维度格式。可以是以下之一:-
"channels_first"
或ChannelDimension.FIRST
:图像以 (通道数, 高度, 宽度) 格式。 -
"channels_last"
或ChannelDimension.LAST
:图像以 (高度, 宽度, 通道数) 格式。
-
返回值
np.ndarray
重新缩放后的图像。
通过缩放因子重新缩放图像。图像 = 图像 * 缩放因子。
模型
文本模型
ALBERT
原始文本:
huggingface.co/docs/transformers/v4.37.2/en/model_doc/albert
概述
ALBERT 模型是由 Zhenzhong Lan、Mingda Chen、Sebastian Goodman、Kevin Gimpel、Piyush Sharma、Radu Soricut 在ALBERT: A Lite BERT for Self-supervised Learning of Language Representations中提出的。它提出了两种减少内存消耗并增加 BERT 训练速度的参数减少技术:
- 将嵌入矩阵分成两个较小的矩阵。
- 使用在组之间分割的重复层。
论文的摘要如下:
在预训练自然语言表示时增加模型大小通常会导致在下游任务上表现提高。然而,在某个时候,由于 GPU/TPU 内存限制、更长的训练时间和意外的模型退化,进一步增加模型变得更加困难。为了解决这些问题,我们提出了两种参数减少技术,以降低内存消耗并增加 BERT 的训练速度。全面的实证证据表明,我们提出的方法导致模型比原始 BERT 更好地扩展。我们还使用了一个自监督损失,重点放在建模句子间的一致性上,并且展示它在具有多句输入的下游任务中始终有所帮助。因此,我们的最佳模型在 GLUE、RACE 和 SQuAD 基准测试中建立了新的最先进结果,同时与 BERT-large 相比具有更少的参数。
此模型由lysandre贡献。此模型 jax 版本由kamalkraj贡献。原始代码可以在这里找到。
使用提示
- ALBERT 是一个具有绝对位置嵌入的模型,因此通常建议在右侧而不是左侧填充输入。
- ALBERT 使用重复层,导致内存占用较小,但计算成本与具有相同数量隐藏层的 BERT-like 架构相似,因为它必须遍历相同数量的(重复)层。
- 嵌入大小 E 与隐藏大小 H 不同的原因是,嵌入是上下文无关的(一个嵌入向量表示一个标记),而隐藏状态是上下文相关的(一个隐藏状态表示一个标记序列),因此 H >> E 更合乎逻辑。此外,嵌入矩阵很大,因为它是 V x E(V 是词汇量)。如果 E < H,则参数较少。
- 层被分成共享参数的组(以节省内存)。下一个句子预测被句子排序预测所取代:在输入中,我们有两个连续的句子 A 和 B,我们要么输入 A 后跟 B,要么输入 B 后跟 A。模型必须预测它们是否被交换了。
此模型由lysandre贡献。此模型 jax 版本由kamalkraj贡献。原始代码可以在这里找到。
资源
以下部分提供的资源包括官方 Hugging Face 和社区(由