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 beach sunset');
    
  3. 使用高级搜索操作符获取更精确的结果:
    -- 短语匹配
    SELECT * FROM images WHERE MATCH('"red car"');
    
    -- 布尔操作符
    SELECT * FROM images WHERE MATCH('@indexed_caption (beach | sunset) -night');
    

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

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

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

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 匹配的:

Diagram of the vector-based approach

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

以下是您可以逐步实施基于向量的搜索的方法:

  1. 设置您的多模态模型
    使用像 TinyCLIP 这样的模型,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. 生成并插入嵌入
    通过模型处理您的图像以创建嵌入并将其存储在数据库中。有关实施此步骤的指南,请参阅 load-dataset 脚本在 GitHub 上 。虽然此脚本并不适合直接使用,但它作为创建嵌入并将其插入数据库的详细参考。
  4. 查询数据库
    $embeddings = $Embed->getImageEmbeddings($image->getPath());
    $query = new Manticoresearch\Query\KnnQuery('embeddings', $embeddings, 10);
    $docs = $client->index('image')->search($query)->get();
    

基于向量的搜索的优势

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

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

比较方法

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

ApproachDescriptionAccuracySetup ComplexityMaintenanceQuery Speed
Keywords-based将用户查询与手动添加的标签或元数据匹配。简单但缺乏语义理解。
Categorization-based将图像组织到预定义类别中并允许结构化过滤。中等中等
Using captions使用 AI 生成或手动创建的标题增强基于文本的搜索能力。中等中等
Vector-based利用嵌入进行语义搜索,有意义地连接文本和图像。中等

在 GitHub 上尝试演示

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

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

结论

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

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

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

image.manticoresearch.com 尝试我们的演示,或深入了解 GitHub 上的源代码: Manticore Image Search Demo

Image Search Demo

安装Manticore Search

安装Manticore Search