西门吹糖人 2024-05-23 09:45 采纳率: 38.1%
浏览 100

chromadb向量数据库一直存不进去embedding

chromadb向量数据库一直存不进去embedding

img

我这里get了一下id0和id1,但是embeddings显示是None

我是这样创建的collection

self.collection = chroma_client.get_or_create_collection(name=collection_name,embedding_function=MyEmbeddingFunction())

EMBEDDING_MODEL用的是bge-large-zh

class MyEmbeddingFunction(EmbeddingFunction):
    def __call__(self, texts:Documents)->Embeddings:
        embeddings = [EMBEDDING_MODEL.encode(x).tolist() for x in texts]
        return embeddings


想问问大家到底是怎么回事

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-23 09:45
    关注

    引自免费微信小程序:皆我百晓生

    看起来你在尝试将文本嵌入到Chromadex数据库中,并遇到了问题。首先,我们需要确认几个关键点:确保Bert模型(bge-large-zh)已经正确安装并且可用,其次,检查MyEmbeddingFunction类中的编码函数是否正常工作,以及在插入数据时是否正确传递了ID和嵌入向量。

    为了更好地帮助你,我需要更多的上下文信息,比如错误信息、你尝试插入数据的部分代码等。然而,我可以给你一个例子,展示如何创建并使用ChromaDB集合以及如何插入数据。假设你已经在环境中安装了必要的库(包括chordtransformers)。

    首先,确保你已经安装了所需的库:

    pip install chord transformers
    

    接下来,根据你的描述,我会提供一个完整的示例代码,用于设置ChromaDB集合,定义嵌入函数,然后插入数据。请替换your_api_key为你的实际API密钥,并确保你已经下载并安装了bge-large-zh模型。

    import json
    from typing import List, Dict
    from chord.client import ChromaClient
    from chord.types import Documents, Embeddings
    from transformers import BertTokenizerFast, BertModel
    
    # 初始化Chroma客户端
    chroma_client = ChromaClient(api_key="your_api_key")
    
    # 定义嵌入函数
    class MyEmbeddingFunction(EmbeddingFunction):
        def __init__(self):
            self.tokenizer = BertTokenizerFast.from_pretrained("bge-large-zh")
            self.model = BertModel.from_pretrained("bge-large-zh").eval()
    
        def __call__(self, texts: Documents) -> Embeddings:
            inputs = self.tokenizer(texts, padding=True, truncation=True, max_length=512, return_tensors="pt")
            with torch.no_grad():
                outputs = self.model(**inputs)
                last_hidden_states = outputs.last_hidden_state[:, 0]  # Take <s> token embedding
                embeddings = last_hidden_states.detach().numpy()
            return [[emb.tolist()] for emb in embeddings]
    
    # 创建或获取集合
    collection_name = "my_embedding_collection"
    embedding_function = MyEmbeddingFunction()
    self.collection = chroma_client.get_or_create_collection(name=collection_name, embedding_function=embedding_function)
    
    # 示例文本
    texts = ["ide", "another text example"]
    
    # 获取嵌入向量
    embeddings = self.collection.embed(texts)
    
    # 插入数据
    data_to_insert = [{"id": f"id{i}", "text": t, "embedding": e} for i, (t, e) in enumerate(zip(texts, embeddings))]
    insert_result = self.collection.insert(data_to_insert)
    
    print(insert_result)
    

    这个示例代码应该能帮你解决这个问题。如果你仍然遇到问题,请提供详细的错误信息或者插入数据部分的代码,以便我能更准确地定位问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月23日

悬赏问题

  • ¥15 druid(相关搜索:数据库|防火墙)
  • ¥15 大一python作业
  • ¥15 preLaunchTask"C/C++: aarch64- apple-darwin22-g++-14 生成活动 文件”已终止,退出代码为-1。
  • ¥60 如何鉴定微信小程序数据被篡改过
  • ¥18 关于#贝叶斯概率#的问题:这篇文章中利用em算法求出了对数似然值作为概率表参数,然后进行概率表计算,这个概率表是怎样计算的呀
  • ¥20 C#上传XML格式数据
  • ¥15 elementui上传结合oss接口断点续传,现在只差停止上传和继续上传,各大精英看下
  • ¥20 手机截图相片分辨率降低一半
  • ¥15 速求,对多种商品的购买力优化问题(用遗传算法、枚举法、粒子群算法、模拟退火算法等方法求解)
  • ¥100 速求!商品购买力最优化问题(用遗传算法求解,给出python代码)