-1

页面有两个脚本

什么时候应该使用下面显示的第一种方法和第二种方法?作为nli-distilroberta-base-v2专门用于查找句子嵌入的训练,这不会总是比第一种方法更好吗?

training_stsbenchmark.py1 -

from sentence_transformers import SentenceTransformer,  LoggingHandler, losses, models, util
#You can specify any huggingface/transformers pre-trained model here, for example, bert-base-uncased, roberta-base, xlm-roberta-base
model_name = sys.argv[1] if len(sys.argv) > 1 else 'distilbert-base-uncased'

# Use Huggingface/transformers model (like BERT, RoBERTa, XLNet, XLM-R) for mapping tokens to embeddings
word_embedding_model = models.Transformer(model_name)

# Apply mean pooling to get one fixed sized sentence vector
pooling_model = models.Pooling(word_embedding_model.get_word_embedding_dimension(),
                               pooling_mode_mean_tokens=True,
                               pooling_mode_cls_token=False,
                               pooling_mode_max_tokens=False)

model = SentenceTransformer(modules=[word_embedding_model, pooling_model])

training_stsbenchmark_continue_training.py-

from sentence_transformers import SentenceTransformer, LoggingHandler, losses, util, InputExample
model_name = 'nli-distilroberta-base-v2'
model = SentenceTransformer(model_name)
4

1 回答 1

2

您正在比较 2 个不同的事物:

training_stsbenchmark.py- 这个例子展示了如何通过使用预训练的 Transformer 模型和池化层从头开始创建 SentenceTransformer模型。

换句话说,您正在SentenceTransformer使用自己的数据创建自己的模型,因此需要进行微调。

training_stsbenchmark_continue_training.py- 这个例子展示了如何为之前创建和训练过的模型继续训练 STS 数据。 SentenceTransformer

在该示例中,他们加载了一个基于 NLI 数据训练的模型。

那么,回答“这不会总是比第一种方法更好吗?”

这取决于你的最终结果。尝试这两种方法并自行检查,这将提供更好的交叉验证结果。

于 2022-01-18T11:09:48.363 回答