blog-post

使用 Manticore Search 的文本到图像搜索

TL;DR: 了解 Manticore Search 如何通过将自然语言处理与基于向量的图像检索相结合来实现文本到图像搜索。探索不同的方法,从传统方法到先进的向量搜索,并尝试我们的 文本到图像搜索演示 以查看其实际效果。

介绍

通过自然语言描述找到合适的图像——例如“海滩上的日落”——不再只是未来的愿景。文本到图像搜索使这一切成为可能,通过无缝连接语言与视觉内容。

传统方法,如关键字匹配或手动标记,在准确性和可扩展性方面存在局限性。现代方法,如由 Manticore Search 提供支持的方法,利用语义理解和向量嵌入提供更精确和上下文感知的结果。无论您是在创建电子商务平台、管理媒体库,还是构建创意工具,文本到图像搜索都可以简化用户与您内容的互动方式。

想看看它的实际效果吗?尝试我们的 文本到图像搜索演示

文本到图像搜索的不同方法

1. 传统基于关键字的搜索

基于关键字的搜索是实现文本到图像搜索最简单的方法之一。首先,您需要设置适当的数据结构:

CREATE TABLE images (
    title text,
    description text,
    tags text,
    path string stored
);

为了使其有效工作,您需要先手动标记每个图像。标记后,您可以使用如下查询进行搜索:

SELECT * FROM images WHERE MATCH('@tags red dress');

或者您也可以通过您为图像添加的标题和描述进行搜索:

SELECT * FROM images WHERE MATCH('@(title,description) red dress');

这种方法依赖于将文本元数据与搜索词进行匹配。虽然简单,但这种方法需要手动标记,并且存在多种局限性。它无法捕捉术语之间的语义关系,无法理解更广泛的上下文,并且仅限于精确匹配,而不是概念相似性。

2. 基于分类的搜索

为了增强产品的搜索功能,您可以实施分类。这种方法允许您根据类别选择过滤图像,同时对自定义属性应用全文搜索。这种双重搜索方法帮助用户更高效地找到他们所需的内容。

您应该通过将图像分类为不同的类别来组织它们。以下是表结构的示例:

CREATE TABLE images (
    category_id int,
    subcategory_id int,
    attributes json,
    path string stored
);

这种方法将图像组织到预定义的类别中,提供比基于关键字的搜索更结构化的方法,同时更易于导航。然而,它受到严格分类的限制,并且需要手动将图像分类到特定组中。

3. 使用 Manticore Search 和图像标题

有许多 AI 模型能够生成图像标题。虽然这些标题可能不够完善以用于面向客户的内容,但它们可以为增强搜索功能提供价值。这种方法补充了传统的基于关键字的方法,提供了额外的搜索能力。

无论您如何组织图像——通过类别还是手动标记——您都需要利用全文搜索运算符来有效地通过这些填充字段查找图像。

让我们看看如果您选择实施手动标题,工作流程可能会如何展开:

  1. 插入格式正确的标题数据:
    INSERT INTO images (id, auto_caption, indexed_caption, path) VALUES
        (1, '一个人在日落时走在海滩上', '海滩 日落 走路 人', '/images/sunset_beach.jpg'),
        (2, '红色汽车停在城市环境中', '汽车 红色 城市 停车', '/images/red_car.jpg');
    
  2. 使用 indexed_caption 字段执行基本文本搜索:
    SELECT * FROM images WHERE MATCH('@indexed_caption 海滩 日落');
    
  3. 使用高级搜索运算符以获得更精确的结果:
    -- 短语匹配
    SELECT * FROM images WHERE MATCH('"红色汽车"');
    
    -- 布尔运算符
    SELECT * FROM images WHERE MATCH('@indexed_caption (海滩 | 日落) -夜晚');
    

优化搜索的关键考虑因素:

  • 预处理标题以去除停用词
  • 使用词干提取以获得更好的匹配
  • 考虑常用术语的同义词
  • 实施相关性评分以获得更好的结果

您还可以将全文搜索与其他过滤器结合:

SELECT path, WEIGHT() as relevance
FROM images
WHERE MATCH('@indexed_caption sunset')
AND category_id = 1
ORDER BY relevance DESC
LIMIT 10;

4. 基于向量的搜索(推荐方法)

正如我们所探讨的,传统方法如基于关键字或基于分类的搜索,以及使用标题的增强选项,提供了不同级别的效率和复杂性。虽然这些方法在特定上下文中可能有价值,但在处理细微或模糊查询时往往不够理想。

为了克服这些局限性,使用 Manticore Search 的基于向量的搜索提供了一种强大的替代方案。通过使用向量嵌入,这种方法弥合了文本和图像之间的差距,实现了语义理解和精确匹配。让我们分解一下它是如何工作的以及实施的步骤。

基于向量的搜索如何工作

基于向量的搜索依赖于嵌入——数据的数值表示,编码语义含义。多模态模型处理文本和图像输入以生成这些嵌入,使系统能够根据意义而非字面关键字匹配查询和图像。工作流程包括:

  1. 使用机器学习模型为图像和文本生成嵌入。
  2. 将这些嵌入存储在优化用于相似性搜索的数据库中。
  3. 查询数据库以查找给定输入的最相关匹配。

为了帮助可视化这个过程,以下图示说明了文本和图像如何被转换为嵌入并通过 Manticore Search 进行匹配:

基于向量的方法示意图

使用 Manticore 设置基于向量的搜索

这里是您可以逐步实现基于向量的搜索的方法:

  1. 设置您的多模态模型
    使用像 TinyCLIP 这样的模型,这是 CLIP 的轻量级版本,用于生成图像和文本的嵌入。加载模型及其处理器:
    from transformers import CLIPProcessor, CLIPModel
    clip_model = CLIPModel.from_pretrained("wkcn/TinyCLIP-ViT-61M-32-Text-29M-LAION400M")
    clip_processor = CLIPProcessor.from_pretrained("wkcn/TinyCLIP-ViT-61M-32-Text-29M-LAION400M")
    
  2. 创建数据库结构
    在 Manticore Search 中设置一个表来存储嵌入:
    CREATE TABLE images (
      id bigint,
      image_path text,
      embeddings float_vector knn_type='hnsw' knn_dims='512' hnsw_similarity='COSINE'
    );
    
  3. 生成并插入嵌入
    通过模型处理您的图像以创建嵌入并将其存储在数据库中。有关实现此步骤的指导,请参考 GitHub 上的 load-dataset 脚本 。虽然此脚本并不适合直接使用,但它作为创建嵌入并将其插入数据库的详细参考。
  4. 查询数据库
    $embeddings = $Embed->getImageEmbeddings($image->getPath());
    $query = new Manticoresearch\Query\KnnQuery('embeddings', $embeddings, 10);
    $docs = $client->index('image')->search($query)->get();
    

基于向量搜索的优势

通过使用 Manticore 实现基于向量的图像搜索,您可以获得几个关键好处:

  • 语义理解:根据查询和图像的含义进行匹配,而不是精确的关键字。
  • 视觉概念匹配:准确捕捉复杂的视觉想法,并将其与文本描述对齐。
  • 自然语言兼容性:轻松处理自然语言查询,实现直观搜索。
  • 增强的准确性:即使对于抽象或细微的输入,也能提供最精确的结果。
  • 可扩展性:减少手动工作,并与大型数据集无缝协作。

比较方法

以下是不同方法在实际场景中的表现:

方法描述准确性设置复杂性维护查询速度
基于关键字将用户查询与手动添加的标签或元数据进行匹配。简单但缺乏语义理解。
基于分类将图像组织到预定义类别中,并允许结构化过滤。中等中等
使用标题使用 AI 生成或手动创建的标题以增强基于文本的搜索能力。中等中等
基于向量利用嵌入进行语义搜索,将文本和图像有意义地连接。中等

在 GitHub 上尝试演示

想看看这一切是如何结合在一起的吗?我们已开源我们的演示,您可以探索并构建自己的实现。访问 GitHub 仓库以获取完整源代码: Manticore 图像搜索演示

该仓库包括详细的说明和示例脚本,以帮助您设置和自定义您的文本到图像搜索应用程序。无论您是在尝试演示还是计划一个生产就绪的解决方案,这都是一个很好的起点。

结论

使用 Manticore Search 的基于向量的文本到图像搜索相较于传统方法提供了显著优势。它提供:

  • 在将用户查询与相关图像匹配时的卓越准确性
  • 无需手动标记或标题
  • 更好地理解语义关系
  • 对于不断增长的图像集合的可扩展性能

虽然其他方法如基于关键字或分类的方法在特定用例中可能有用,但基于向量的搜索代表了现代文本到图像搜索需求中最先进和高效的解决方案。

image.manticoresearch.com 尝试我们的演示,或在 GitHub 上深入了解源代码: Manticore 图像搜索演示

图像搜索演示

安装Manticore Search

安装Manticore Search