BUG: 加载部分sentence transformers模型报错HFValidationError: Repo_id must be in the form repo_name

没耐心看的直接跳到最后的加粗字体,其实是缺少文件。

BUG: 加载部分sentence transformers模型报错HFValidationError: Repo_id must be in the form repo_name_第1张图片

解释:以bge-m3为例,除了常见的config.json、pytorch_model.bin等等外还需要下载1_Pooling文件夹,里面包含了一个config.json,这是sentence transformers模型中的pooling层。

这是下载1_Pooling文件夹后的加载输出,没有异常情况。

from sentence_transformers import SentenceTransformer


model_name_or_path = '../../cache/officials/bge-m3'

model = SentenceTransformer(model_name_or_path, device='cuda:5')

print(model)
SentenceTransformer(
  (0): Transformer({'max_seq_length': 8192, 'do_lower_case': False}) with Transformer model: XLMRobertaModel 
  (1): Pooling({'word_embedding_dimension': 1024, 'pooling_mode_cls_token': True, 'pooling_mode_mean_tokens': False, 'pooling_mode_max_tokens': False, 'pooling_mode_mean_sqrt_len_tokens': False, 'pooling_mode_weightedmean_tokens': False, 'pooling_mode_lasttoken': False, 'include_prompt': True})
  (2): Normalize()
)

这是没有下载的情况:

from sentence_transformers import SentenceTransformer


model_name_or_path = '../../cache/officials/all-MiniLM-L6-v2'

model = SentenceTransformer(model_name_or_path, device='cuda:5')

print(model)
No sentence-transformers model found with name ../../cache/officials/all-MiniLM-L6-v2. Creating a new one with mean pooling.
SentenceTransformer(
  (0): Transformer({'max_seq_length': 512, 'do_lower_case': False}) with Transformer model: BertModel 
  (1): Pooling({'word_embedding_dimension': 384, 'pooling_mode_cls_token': False, 'pooling_mode_mean_tokens': True, 'pooling_mode_max_tokens': False, 'pooling_mode_mean_sqrt_len_tokens': False, 'pooling_mode_weightedmean_tokens': False, 'pooling_mode_lasttoken': False, 'include_prompt': True})
)

虽然还能正常加载,没有报错HFValidationError,但实际pooling层因为缺少config.json会创建新层。个人觉得是由于all-MiniLM-L6-v2有考虑到这种情况的异常处理,而bge-m3没有,就直接报错了。

解决方法:下载1_Pooling文件夹和其中的config.json文件,注意下载下来时的文件名,可能是1_Pooling_config.json,你需要手动改为config.json。

你可能感兴趣的:(bug)