嵌入

通过adapters,我们支持动态添加、加载和删除Embeddings。本节将概述这些功能。具体示例可参考这个notebook

添加和删除嵌入

处理嵌入向量的方法与处理适配器的方法类似。要添加新的嵌入向量,我们调用add_embeddings。这会为tokenizer的词汇表添加新的嵌入向量。 在某些情况下,将标记的嵌入向量初始化为另一个嵌入模块的向量可能很有用。如果提供了reference_embeddingreference_tokenizer,则两个嵌入中都存在的标记的嵌入向量将被初始化为reference_embedding提供的嵌入向量。新的嵌入向量将被创建并设置为活动嵌入。如果不确定当前哪个嵌入是活动的,active_embeddings属性包含当前活动的嵌入向量。

model.add_embeddings('name', tokenizer, reference_embedding='default', reference_tokenizer=reference_tokenizer)

transformers模型的原始嵌入始终可以通过名称"default"获取。要将其设置为活动嵌入,只需调用set_active_embedding('name')方法。

model.set_active_embeddings('name')

同样地,通过将名称传递给set_active_embedding方法,可以将所有其他嵌入设置为活动状态。

要删除不再需要的嵌入,我们可以调用delete_embeddings方法并传入要删除的适配器名称。但请注意,不能删除默认嵌入。

model.delete_embeddings('name')

请注意,如果当前活动的嵌入被删除,系统会将默认嵌入设置为活动嵌入。

训练嵌入

嵌入层只能通过适配器进行训练。要冻结除嵌入层和适配器外的所有权重:

model.train_adapter('adapter_name', train_embeddings=True)

除了train_embeddings标志外,训练过程与仅训练适配器相同(参见Adapter Training)。

保存与加载嵌入向量

您可以通过调用save_embeddings('path/to/dir', 'name')保存嵌入向量,并使用load_embeddings('path/to/dir', 'name')加载它们。

model.save_embeddings(path, 'name')
model.load_embeddings(path, 'reloaded_name')

路径需要指向一个目录,嵌入权重将保存在该目录中。

你也可以通过将分词器传递给save_embeddings来保存和加载带有嵌入的分词器。

model.save_embeddings(path, 'name', tokenizer)
loaded_tokenizer = model.load_embeddings(path, 'name')