向量数据库:usearch的简单使用+实现图片检索应用

这篇具有很好参考价值的文章主要介绍了向量数据库:usearch的简单使用+实现图片检索应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

usearch的简单使用

  • usearch是快速开源搜索和聚类引擎×,用于C++、C、Python、JavaScript、Rust、Java、Objective-C、Swift、C#、GoLang和Wolfram 🔍中的向量和🔜字符串×
// https://github.com/unum-cloud/usearch/blob/main/python/README.md
$ pip install usearch
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting usearch
  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/ba/f4/24124f65ea3e940e54af29d55204ddfbeafa86d6b94b63c2e99baff2f7d6/usearch-2.8.14-cp38-cp38-manylinux_2_28_x86_64.whl (1.5 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 17.0 MB/s eta 0:00:00
Requirement already satisfied: numpy in /home/ubuntu/anaconda3/envs/vglm2/lib/python3.8/site-packages (from usearch) (1.23.1)
Requirement already satisfied: tqdm in /home/ubuntu/anaconda3/envs/vglm2/lib/python3.8/site-packages (from usearch) (4.66.1)
Installing collected packages: usearch
Successfully installed usearch-2.8.14
  • 一个简单的例子(注:本例子在运行时向index中不断添加项目,并将最后的index持久化为一个文件,在运行时由于添加项目内存占用会不断增加)
import numpy as np
from usearch.index import Index, MetricKind, Matches

ndim = 131072
index_path =  "test.usearch"

index = Index(
    ndim=ndim, # Define the number of dimensions in input vectors
    metric='cos', # Choose 'l2sq', 'haversine' or other metric, default = 'ip'
    dtype='f32', # Quantize to 'f16' or 'i8' if needed, default = 'f32'
    connectivity=16, # How frequent should the connections in the graph be, optional
    expansion_add=128, # Control the recall of indexing, optional
    expansion_search=64, # Control the quality of search, optional
)# index = Index(ndim=ndim, metric=MetricKind.Cos)



for i in range(1,10):
    vector =  np.random.random((1000, ndim)).astype('float32')
    index.add(None, vector, log=True)

index.save(index_path)
vector =  np.random.random((1, ndim)).astype('float32')
matches: Matches = index.search(vector, 10)
ids = matches.keys.flatten()

print(matches)

# test.usearch大小: 10*1000*131072 =>2.2G  (如果dtype='f32'=>4G+)

usearch-images

  • https://github.com/ashvardanian/usearch-images

运行效果

向量数据库:usearch的简单使用+实现图片检索应用,数据分析,数据库
向量数据库:usearch的简单使用+实现图片检索应用,数据分析,数据库

向量数据库:usearch的简单使用+实现图片检索应用,数据分析,数据库

向量数据库:usearch的简单使用+实现图片检索应用,数据分析,数据库

数据获取

  • https://huggingface.co/datasets/unum-cloud/ann-unsplash-25k/tree/main
    向量数据库:usearch的简单使用+实现图片检索应用,数据分析,数据库

向量数据库:usearch的简单使用+实现图片检索应用,数据分析,数据库

依赖 ucall

  • Requires: Python >=3.9
  • https://pypi.org/project/ucall/#files
    向量数据库:usearch的简单使用+实现图片检索应用,数据分析,数据库

OSError: [Errno 28] inotify watch limit reached

  File "/home/ubuntu/anaconda3/envs/usearch/lib/python3.10/site-packages/watchdog/observers/inotify_c.py", line 428, in _raise_error
    raise OSError(errno.ENOSPC, "inotify watch limit reached")
OSError: [Errno 28] inotify watch limit reached

这个错误表明在使用 watchdog 库时超过了 Linux 系统对 inotify 监视的文件数或目录数的限制。Linux 对于每个进程的 inotify 能够监视的文件和目录有一个限制,当达到这个限制时,会出现像上面的错误一样的问题。可以尝试增加系统对 inotify 的资源限制。可以通过修改 /etc/sysctl.conf 文件来增加 fs.inotify.max_user_watches 参数的值。例如:

```bash
sudo sysctl -w fs.inotify.max_user_watches=65536
```

然后,运行下面的命令使更改生效:

```bash
sudo sysctl -p
```

注意:增加监视数可能会对系统资源产生一些影响,因此请根据实际情况慎重调整。

模型加载

向量数据库:usearch的简单使用+实现图片检索应用,数据分析,数据库文章来源地址https://www.toymoban.com/news/detail-787699.html

  • https://huggingface.co/unum-cloud/uform-vl-multilingual-v2/tree/main
    向量数据库:usearch的简单使用+实现图片检索应用,数据分析,数据库
///home/ubuntu/anaconda3/envs/usearch/lib/python3.10/site-packages/uform/__init__.py
def get_checkpoint(model_name, token) -> Tuple[str, Mapping, str]:
    model_path = snapshot_download(repo_id=model_name, token=token)
    config_path = f"{model_path}/torch_config.json"
    state = torch.load(f"{model_path}/torch_weight.pt")

    return config_path, state, f"{model_path}/tokenizer.json"


def get_model(model_name: str, token: Optional[str] = None) -> VLM:
    config_path, state, tokenizer_path = get_checkpoint(model_name, token)

    with open(config_path, "r") as f:
        model = VLM(load(f), tokenizer_path)

    model.image_encoder.load_state_dict(state["image_encoder"])
    model.text_encoder.load_state_dict(state["text_encoder"])

    return model.eval()
  • 修改成如下,调用时使用_model = get_model("你的下载路径")
def get_checkpoint(model_name, token) -> Tuple[str, Mapping, str]:
    model_path = model_name#snapshot_download(repo_id=model_name, token=token)
    config_path = f"{model_path}/torch_config.json"
    state = torch.load(f"{model_path}/torch_weight.pt")

    return config_path, state, f"{model_path}/tokenizer.json"


def get_model(model_name: str, token: Optional[str] = None) -> VLM:
    config_path, state, tokenizer_path = get_checkpoint(model_name, token)

    with open(config_path, "r") as f:
        model = VLM(load(f), tokenizer_path)

    model.image_encoder.load_state_dict(state["image_encoder"])
    model.text_encoder.load_state_dict(state["text_encoder"])

    return model.eval()

其他细微的修改

数据源的修改
_datasets = {
    name: _open_dataset(os.path.join("/home/ubuntu/userfile/***/Usearch/usearch-images-main/data", name))
    for name in (
        "unsplash-25k",
        # "cc-3m",
        # "laion-4m",
    )
}
dataset_names: str = st.multiselect(
    "Datasets",
    [
        dataset_unsplash_name,
        # dataset_cc_name,
        # dataset_laion_name,
    ],
    [dataset_unsplash_name],#, dataset_cc_name],
    format_func=lambda x: x.split(":")[0],
)
  • 也可下载cc-3m数据:
    向量数据库:usearch的简单使用+实现图片检索应用,数据分析,数据库
数据读取的修改
    # uris: Strs = File(os.path.join(dir, "images.txt")).splitlines()
    file_path = os.path.join(dir, "images.txt")
    with open(file_path, 'r') as file:
        uris = file.read().splitlines()

CG

  • “usearch” 通常指的是一个生物信息学工具,用于对DNA和蛋白质序列进行搜索和比对。具体来说,它是由Qiime软件包提供的一个用于序列分析的工具,主要用于对微生物群落的高通量测序数据进行处理和分析。Qiime(Quantitative Insights Into Microbial Ecology)是一个用于分析和解释微生物群落结构的开源软件包。在Qiime中,usearch被用于处理和比对DNA序列,以便进行物种注释、多样性分析等。USEARCH —— 最简单易学的扩增子分析流程

到了这里,关于向量数据库:usearch的简单使用+实现图片检索应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#使用词嵌入向量与向量数据库为大语言模型(LLM)赋能长期记忆实现私域问答机器人落地之openai接口平替

    ------------恢复内容开始------------ 在上一篇文章中我们大致讲述了一下如何通过词嵌入向量的方式为大语言模型增加长期记忆,用于落地在私域场景的问题。其中涉及到使用openai的接口进行词嵌入向量的生成以及chat模型的调用 由于众所周知的原因,国内调用openai接口并不友好

    2024年02月06日
    浏览(58)
  • 如何使用 Elasticsearch 作为向量数据库

    在今天的文章中,我们将很快地通过 Docker 来快速地设置 Elasticsearch 及 Kibana,并设置 Elasticsearch 为向量搜索。 在上面,我们指定了 elasic 超级用户的密码为 password。这在下面将要使用到。 验证容器是否已启动并正在运行: 从上面我们可以看到 Elasticsarch 及 Kibana 已经完全运行

    2024年04月17日
    浏览(81)
  • 《向量数据库指南》:使用公共的Pinecone数据集

    目录 数据集包含向量和元数据 列出公共数据集 加载数据集 迭代数据集 分批迭代文档并插入到索引中。 将数据集插入为数据帧。 接下来怎么做 本文档介绍如何使用现有的Pinecone数据集。 要了解创建和列出数据集的方法,请参阅创建数据集。  

    2024年02月16日
    浏览(51)
  • 如何使用python实现简单爬取网页数据并导入MySQL中的数据库

    前言:要使用 Python 爬取网页数据并将数据导入 MySQL 数据库,您需要使用 Requests 库进行网页抓取,使用 BeautifulSoup 库对抓取到的 HTML 进行解析,并使用 PyMySQL 库与 MySQL 进行交互。 以下是一个简单的示例: 1.  安装所需库: ``` ``` 2.  导入所需库: ``` ``` 3.  建立数据库连接:

    2024年02月04日
    浏览(53)
  • 使用docker搭建Milvus向量数据库

    官网是这样说的: Milvus创建于2019年,目标单一:存储、索引和管理由深度神经网络和其他机器学习(ML)模型生成的大量嵌入向量。 作为一个专门用于处理输入向量查询的数据库,它能够对万亿规模的向量进行索引。与现有的关系数据库不同,Milvus主要按照预定义的模式处

    2024年02月09日
    浏览(46)
  • 开源模型应用落地-工具使用篇-向量数据库(三)

    一、前言     通过学习\\\"开源模型应用落地\\\"系列文章,我们成功地建立了一个完整可实施的AI交付流程。现在,我们要引入向量数据库,作为我们AI服务的二级缓存。本文将详细介绍如何使用Milvus Lite来为我们的AI服务部署一个前置缓存。 二、术语 2.1、向量数据库     向量数

    2024年02月19日
    浏览(58)
  • 使用Langchain+GPT+向量数据库chromadb 来创建文档对话机器人

    使用Langchain+GPT+向量数据库chromadb 来创建文档对话机器人 文件存放地址 参考: https://python.langchain.com/docs/use_cases/chatbots https://python.langchain.com/docs/integrations/vectorstores/chroma https://blog.csdn.net/v_JULY_v/article/details/131552592?ops_request_misc=%257B%2522request%255Fid%2522%253A%252216945020581680022659096

    2024年02月03日
    浏览(44)
  • ModaHub魔搭社区:AI原生云向量数据库MIlvus Cloud实现 HNSW

    HNSW 并不简单,因此我们只在此处进行最简单的实现。像之前一样,我们首先创建一组(128 维)向量的数据集: 第一步是构建 HNSW 索引。为此,我们需要将每个向量添加到我们的数据集中。我们首先创建一个数据结构来保存索引。在这个基本示例中,我们将使用列表的列表来

    2024年02月15日
    浏览(45)
  • 基于GPT3.5实现本地知识库解决方案-利用向量数据库和GPT向量接口-实现智能回复并限制ChatGPT回答的范围...

    标题有点长,但是基本也说明出了这篇文章的主旨,那就是利用GPT AI智能回答自己设置好的问题 既能实现自己的AI知识库机器人,又能节省ChatGPT调用的token成本费用。 代码仓库地址 document.ai: 基于GPT3.5的通用本地知识库解决方案 下面图片是整个流程: 导入知识库数据 利用

    2024年02月02日
    浏览(52)
  • 什么是向量数据库?向量数据库工作原理?向量数据库解决方案?

    向量数据库是一种专门用于存储和处理向量数据的数据库系统。向量数据是指具有多维度属性的数据,例如图片、音频、视频、自然语言文本等。传统的关系型数据库通常不擅长处理向量数据,因为它们需要将数据映射成结构化的表格形式,而向量数据的维度较高、结构复杂

    2024年02月15日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包