重要提示
您正在查看 NeMo 2.0 文档。此版本对 API 和新库 NeMo Run 进行了重大更改。我们目前正在将 NeMo 1.0 的所有功能移植到 2.0。有关先前版本或 2.0 中尚未提供的功能的文档,请参阅 NeMo 24.07 文档。
SBERT#
Sentence-BERT (SBERT) 是 BERT(来自 Transformer 的双向编码器表示)的一种变体,旨在生成固定大小的句子嵌入。与生成令牌级嵌入的原始 BERT 模型不同,SBERT 对 BERT 进行微调,以生成整个句子的有意义的密集表示。这些嵌入可用于句子相似性、聚类和信息检索等任务,在这些任务中,比较句子级含义是关键。SBERT 通过使用余弦相似度或其他距离度量实现句子快速、可扩展的比较,从而提高了效率。
NeMo 2.0 微调方法#
注意
微调方法使用 SpecterDataModule
作为 data
参数。您可以将 SpecterDataModule
替换为您自定义的数据集。
要导入 HF 模型并转换为 NeMo 2.0 格式,请运行以下命令(此操作只需执行一次)
from nemo.collections import llm
llm.import_ckpt(model=llm.BertEmbeddingModel(llm.BertEmbeddingLargeConfig()), source='hf://intfloat/e5-large-v2')
我们在下面提供了一个示例,说明如何调用默认方法并覆盖数据参数
from nemo.collections import llm
recipe = llm.recipes.e5_340m.finetune_recipe(
name="e5_large_finetuning",
resume_path=f"/path/to/checkpoints",
num_nodes=1,
num_gpus_per_node=8,
)
# # To override the data argument
# dataloader = a_function_that_configures_your_custom_dataset(
# gbs=gbs,
# mbs=mbs,
# seq_length=recipe.model.config.seq_length,
# )
# recipe.data = dataloader
目前 SBERT 模型仅支持 SFT。
注意
方法中的配置是使用 NeMo-Run run.Config
和 run.Partial
配置对象完成的。请查看 NeMo-Run 文档,以了解有关其配置和执行系统的更多信息。
一旦您准备好最终配置,您就可以在任何 NeMo-Run 支持的执行器上执行它。最简单的是本地执行器,它只是在单独的进程中本地运行预训练。您可以按如下方式使用它
import nemo_run as run
run.run(recipe, executor=run.LocalExecutor())
此外,您还可以直接在与下面相同的 Python 进程中运行它
run.run(recipe, direct=True)
方法 |
状态 |
---|---|
E5-Large (340M) |
是 |