llama_index [Bug]:使用CLIP和其他图像嵌入的HuggingFaceEmbedding

3zwtqj6y  于 3个月前  发布在  其他
关注(0)|答案(4)|浏览(41)

Bug描述:
Sentence Transformer 可以使用 CLIP 等嵌入模型,但 HuggingFaceEmbedding 无法正常工作。

版本:
0.10.67.post1

重现步骤:

from llama_index.embeddings.huggingface import HuggingFaceEmbedding
embed_model = HuggingFaceEmbedding(model_name="sentence-transformers/clip-ViT-B-32")

相关日志/回溯:
AttributeError Traceback (most recent call last)
Cell In[27], line 13
10 from llama_index.embeddings.huggingface import HuggingFaceEmbedding
12 # Initialize the embedding model
---> 13 embed_model = HuggingFaceEmbedding(model_name="sentence-transformers/clip-ViT-B-32")
15 # Function to download and embed image
16 def embed_image(url):
File ~/anaconda3/envs/xrx-reasoning/lib/python3.10/site-packages/llama_index/embeddings/huggingface/base.py:169, in HuggingFaceEmbedding.init(self, model_name, tokenizer_name, pooling, max_length, query_instruction, text_instruction, normalize, model, tokenizer, embed_batch_size, cache_folder, trust_remote_code, device, callback_manager, parallel_process, target_devices, **model_kwargs)
167 self._model.max_seq_length = max_length
168 else:
--> 169 max_length = self._model.max_seq_length
171 super().init(
172 embed_batch_size=embed_batch_size,
173 callback_manager=callback_manager,
(...)
178 text_instruction=text_instruction,
179 )
File ~/anaconda3/envs/xrx-reasoning/lib/python3.10/site-packages/torch/nn/modules/module.py:1729, in Module.getattr(self, name)
1727 if name in modules:
1728 return modules[name]
-> 1729 raise AttributeError(f"'{type(self).name}' object has no attribute '{name}'")
AttributeError: 'SentenceTransformer' object has no attribute 'max_seq_length'

zdwk9cvp

zdwk9cvp1#

嘿@alessandro-neri!我在这里帮助解决bug、问题等,当你等待人工维护者时。让我们一起解决这些bug吧!🐞
你在使用模型"sentence-transformers/clip-ViT-B-32"时遇到的AttributeErrorHuggingFaceEmbedding类的问题,是由于SentenceTransformer类没有为这个特定模型的max_seq_length属性。clip-ViT-B-32模型主要设计用于视觉任务,不支持通常用于文本模型的max_seq_length属性。
以下是尝试设置max_seq_length的相关代码片段:

self._model = SentenceTransformer(
    model_name,
    device=self._device,
    cache_folder=cache_folder,
    trust_remote_code=trust_remote_code,
    prompts={
        "query": query_instruction
        or get_query_instruct_for_model_name(model_name),
        "text": text_instruction
        or get_text_instruct_for_model_name(model_name),
    },
    **model_kwargs,
)
if max_length:
    self._model.max_seq_length = max_length
else:
    max_length = self._model.max_seq_length

由于clip-ViT-B-32模型没有max_seq_length属性,尝试设置或访问它会导致AttributeError1(https://github.com/run-llama/llama_index/blob/main/llama-index-integrations/embeddings/llama-index-embeddings-huggingface/llama_index/embeddings/huggingface/base.py)错误。
要解决这个问题,你可以:

  1. 明确指定max_length:这避免了访问max_seq_length属性的需求。
  2. 使用不同的模型:选择支持max_seq_length属性的模型。
    对于像clip-ViT-B-32这样的模型,它们没有max_position_embeddings属性,代码会引发错误。因此,通过明确指定max_length或使用不同的模型来处理这种情况是必要的。
  • 要继续与我交谈,请提及@dosu。*
relj7zay

relj7zay2#

我们有一个专门的剪辑类,你可能应该使用它?

zfciruhq

zfciruhq3#

pip install llama-index-embeddings-clip

from llama_index.embeddings.clip import ClipEmbedding

embed_model = ClipEmbedding(model_name="...")
brtdzjyr

brtdzjyr4#

你好,是的,我猜它可以工作,但在我看来,它增加了复杂性。如果可以通过句子转换器或Huggingface嵌入(文档更好)来实现,那会容易得多。关于这个特定类有没有什么文档?我在文档中找不到任何信息,除了一个空的API参考。

相关问题