Milvus(12):分析器

1 分析器概述

        在文本处理中,分析器是将原始文本转换为结构化可搜索格式的关键组件。每个分析器通常由两个核心部件组成:标记器过滤器。它们共同将输入文本转换为标记,完善这些标记,并为高效索引和检索做好准备。

        在 Milvus 中,创建 Collections 时,将VARCHAR 字段添加到 Collections Schema 时,会对分析器进行配置。分析器生成的标记可用于建立关键字匹配索引,或转换为稀疏嵌入以进行全文检索。

        使用分析器可能会影响性能:

  • 全文搜索:对于全文搜索,数据节点查询节点通道消耗数据的速度更慢,因为它们必须等待标记化完成。因此,新输入的数据需要更长的时间才能用于搜索。

  • 关键词匹配:对于关键字匹配,索引创建速度也较慢,因为标记化需要在索引建立之前完成。

1.1 分析器剖析

        Milvus 的分析器由一个标记化器零个或多个过滤器组成。

  • 标记化器:标记器将输入文本分解为称为标记的离散单元。根据标记符类型的不同,这些标记符可以是单词或短语。

  • 过滤器:可以对标记符进行过滤,进一步细化标记符,例如将标记符变成小写或删除常用词。

        标记符仅支持 UTF-8 格式。未来版本将增加对其他格式的支持。下面的工作流程显示了分析器如何处理文本。

1.2 分析器类型

        Milvus 提供两种类型的分析器,以满足不同的文本处理需求:

  • 内置分析器:这些是预定义配置,只需最少的设置即可完成常见的文本处理任务。内置分析器不需要复杂的配置,是通用搜索的理想选择。

  • 自定义分析器:对于更高级的需求,自定义分析器允许你通过指定标记器和零个或多个过滤器来定义自己的配置。这种自定义级别对于需要精确控制文本处理的特殊用例尤其有用。

        如果在创建 Collections 时省略了分析器配置,Milvus 默认使用standard 分析器进行所有文本处理。

1.2.1 内置分析器

        Milvus 中的内置分析器预先配置了特定的标记符号化器和过滤器,使你可以立即使用它们,而无需自己定义这些组件。每个内置分析器都是一个模板,包括预设的标记化器和过滤器,以及用于自定义的可选参数。

        例如,要使用standard 内置分析器,只需将其名称standard 指定为type ,并可选择包含该分析器类型特有的额外配置,如stop_words :

analyzer_params = {"type": "standard", # 使用标准的内置分析器"stop_words": ["a", "an", "for"] # 定义要从标记化中排除的常用单词(停止词)列表
}

        上述standard 内置分析器的配置等同于使用以下参数设置自定义分析器,其中tokenizer 和filter 选项是为实现类似功能而明确定义的:

analyzer_params = {"tokenizer": "standard","filter": ["lowercase",{"type": "stop","stop_words": ["a", "an", "for"]}]
}

        Milvus 提供以下内置分析器,每个分析器都是为特定文本处理需求而设计的:

  • standard:适用于通用文本处理,应用标准标记化和小写过滤。
  • english:针对英语文本进行了优化,支持英语停止词。
  • chinese:专门用于处理中文文本,包括针对中文语言结构的标记化。

1.2.2 自定义分析器

        对于更高级的文本处理,Milvus 中的自定义分析器允许您通过指定标记化器过滤器来构建定制的文本处理管道。这种设置非常适合需要精确控制的特殊用例。

        标记化器是自定义分析器的必备组件,它通过将输入文本分解为离散单元或标记来启动分析器管道。标记化遵循特定的规则,例如根据标记化器的类型用空白或标点符号分割。这一过程可以更精确、更独立地处理每个单词或短语。

        例如,标记化器会将文本"Vector Database Built for Scale" 转换为单独的标记:

["Vector", "Database", "Built", "for", "Scale"]

        指定标记符的示例: 

analyzer_params = {"tokenizer": "whitespace",
}

        过滤器可选组件,用于处理标记化器生成的标记,并根据需要对其进行转换或细化。例如,在对标记化术语["Vector", "Database", "Built", "for", "Scale"] 应用lowercase 过滤器后,结果可能是:

["vector", "database", "built", "for", "scale"]

        自定义分析器中的过滤器可以是内置的,也可以是自定义的,具体取决于配置需求。

  • 内置过滤器:由 Milvus 预先配置,只需最少的设置。您只需指定过滤器的名称,就能立即使用这些过滤器。以下是可直接使用的内置过滤器:

    • lowercase:将文本转换为小写,确保不区分大小写进行匹配。

    • asciifolding:将非 ASCII 字符转换为 ASCII 对应字符,简化多语言文本处理。

    • alphanumonly:只保留字母数字字符,删除其他字符。

    • cnalphanumonly:删除包含除汉字、英文字母或数字以外的任何字符的标记。

    • cncharonly:删除包含任何非汉字的标记。

        使用内置过滤器的示例:

analyzer_params = {"tokenizer": "standard", # 必选:指定标记器"filter": ["lowercase"], # 可选:内置过滤器,将文本转换为小写
}

        自定义过滤器:自定义过滤器允许进行专门配置。您可以通过选择有效的过滤器类型 (filter.type) 并为每种过滤器类型添加特定设置来定义自定义过滤器。支持自定义的过滤器类型示例:

  • stop:通过设置停止词列表(如"stop_words": ["of", "to"] )删除指定的常用词。

  • length:根据长度标准(如设置最大标记长度)排除标记。

  • stemmer:将单词还原为词根形式,以便更灵活地进行匹配。

        配置自定义过滤器的示例:

analyzer_params = {"tokenizer": "standard", # 必选:指定标记器"filter": [{"type": "stop", # 指定‘stop’作为过滤器类型"stop_words": ["of", "to"], # 指定‘stop’作为过滤器类型}]
}

1.3 使用示例

        在本示例中,您将创建一个 Collections Schema,其中包括:

  • 一个用于嵌入的向量字段。

  • 两个VARCHAR 字段,用于文本处理:

    • 一个字段使用内置分析器。

    • 其他使用自定义分析器。

1.3.1 初始化 MilvusClient 并创建 Schema

        首先设置 Milvus 客户端并创建新的 Schema。

from pymilvus import MilvusClient, DataType# 设置一个Milvus客户端
client = MilvusClient(uri="http://localhost:19530")# 创建一个新模式
schema = client.create_schema(auto_id=True, enable_dynamic_field=False)

1.3.2 定义和验证分析仪配置

        配置并验证内置分析器(english)定义内置英文分析器的分析器参数。

# 内置分析器配置,用于英文文本处理
analyzer_params_built_in = {"type": "english"
}

        配置并验证自定义分析器:定义自定义分析器,该分析器使用标准标记符号生成器、内置小写过滤器以及标记符号长度和停用词自定义过滤器。

# 自定义分析器配置与标准标记器和自定义过滤器
analyzer_params_custom = {"tokenizer": "standard","filter": ["lowercase",  # 内置过滤器:将令牌转换为小写{"type": "length",  # 自定义过滤器:限制令牌长度"max": 40},{"type": "stop",  # 自定义过滤:删除指定的停止词"stop_words": ["of", "for"]}]
}

1.3.3 向 Schema 添加字段

        在验证了分析器配置后,请将其添加到 Schema 字段中:

# 使用内置分析器配置添加VARCHAR字段‘title_en’
schema.add_field(field_name='title_en',datatype=DataType.VARCHAR,max_length=1000,enable_analyzer=True,analyzer_params=analyzer_params_built_in,enable_match=True,
)# 使用自定义分析器配置添加VARCHAR字段“title”
schema.add_field(field_name='title',datatype=DataType.VARCHAR,max_length=1000,enable_analyzer=True,analyzer_params=analyzer_params_custom,enable_match=True,
)# 为嵌入添加矢量场
schema.add_field(field_name="embedding", datatype=DataType.FLOAT_VECTOR, dim=3)# 添加主键字段
schema.add_field(field_name="id", datatype=DataType.INT64, is_primary=True)

1.3.4 准备索引参数并创建 Collections

# 为矢量场设置索引参数
index_params = client.prepare_index_params()
index_params.add_index(field_name="embedding", metric_type="COSINE", index_type="AUTOINDEX")# 使用已定义的模式和索引参数创建集合
client.create_collection(collection_name="my_collection",schema=schema,index_params=index_params
)

2 内置分析器

2.1 标准

   standard 分析器是 Milvus 的默认分析器,如果没有指定分析器,它将自动应用于文本字段。它使用基于语法的标记化,对大多数语言都很有效。

2.1.1 定义

   standard 分析器包括

  • 标记化器:使用standard 标记符号化器,根据语法规则将文本分割成离散的单词单位。
  • 过滤器:使用lowercase 过滤器将所有标记转换为小写,从而实现不区分大小写的搜索。

   standard 分析器的功能相当于以下自定义分析器配置:

analyzer_params = {"tokenizer": "standard","filter": ["lowercase"]
}

2.1.2 配置

        要将standard 分析器应用到一个字段,只需在analyzer_params 中将type 设置为standard ,并根据需要加入可选参数即可。

analyzer_params = {"type": "standard", # 指定标准分析器类型
}

   standard 分析器接受以下可选参数:

参数

说明

stop_words

一个数组,包含将从标记化中删除的停用词列表。默认为_english_ ,这是一组内置的常用英语停止词。

        自定义停止词配置示例:

analyzer_params = {"type": "standard", # 指定标准分析器类型"stop_words", ["of"] # 可选:要从标记化中排除的单词列表
analyzerParams = map[string]any{"type": "standard", "stop_words": []string{"of"}}

        定义analyzer_params 后,您可以在定义 Collections Schema 时将其应用到VARCHAR 字段。这样,Milvus 就能使用指定的分析器处理该字段中的文本,从而实现高效的标记化和过滤。

2.1.3 示例

        分析器配置

analyzer_params = {"type": "standard",  # 标准分析仪配置"stop_words": ["for"] # 可选:自定义停止词参数
}

        预期输出

Standard analyzer output: ['the', 'milvus', 'vector', 'database', 'is', 'built', 'scale']

2.2 英语

        Milvus 中的english 分析器旨在处理英文文本,应用特定语言规则进行标记化和过滤。

2.2.1 定义

   english 分析器使用以下组件:

  • 标记化器:使用standard 标记化器将文本分割成离散的单词单位。

  • 过滤器:包括多个过滤器,用于全面处理文本:

    • lowercase:将所有标记转换为小写,从而实现不区分大小写的搜索。

    • stemmer:将单词还原为词根形式,以支持更广泛的匹配(例如,"running "变为 "run")。

    • stop_words:删除常见的英文停止词,以便集中搜索文本中的关键词语。

   english 分析器的功能相当于以下自定义分析器配置:

analyzer_params = {"tokenizer": "standard","filter": ["lowercase",{"type": "stemmer","language": "english"}, {"type": "stop","stop_words": "_english_"}]
}

2.2.2 配置

        要将english 分析器应用到一个字段,只需在analyzer_params 中将type 设置为english ,并根据需要加入可选参数即可。

analyzer_params = {"type": "english",
}

   english 分析器接受以下可选参数:

参数

说明

stop_words

一个数组,包含将从标记化中删除的停用词列表。默认为_english_ ,这是一组内置的常用英语停止词。

        自定义停止词配置示例:

analyzer_params = {"type": "english","stop_words": ["a", "an", "the"]
}

        定义analyzer_params 后,您可以在定义 Collections Schema 时将其应用到VARCHAR 字段。这样,Milvus 就能使用指定的分析器处理该字段中的文本,以实现高效的标记化和过滤。

2.2.3 示例

        分析器配置

analyzer_params = {"type": "english","stop_words": ["a", "an", "the"]
}

        预期输出

English analyzer output: ['milvus', 'vector', 'databas', 'built', 'scale']

2.3 中文

    chinese 分析器专为处理中文文本而设计,提供有效的分段和标记化功能。

2.3.1 定义

   chinese 分析器包括

  • 标记化器:使用jieba 标记化器,根据词汇和上下文将中文文本分割成标记。
  • 过滤器:使用cnalphanumonly 过滤器删除包含任何非汉字的标记。

   chinese 分析器的功能相当于以下自定义分析器配置:

analyzer_params = {"tokenizer": "jieba","filter": ["cnalphanumonly"]
}

2.3.2 配置

        要将chinese 分析器应用到一个字段,只需在analyzer_params 中将type 设置为chinese 即可。chinese 分析器不接受任何可选参数。

analyzer_params = {"type": "chinese",
}

2.3.3 示例

        分析器配置

analyzer_params = {"type": "chinese",
}

        预期输出

Chinese analyzer output: ['Milvus', '是', '一个', '高性', '性能', '高性能', '可', '扩展', '的', '向量', '数据', '据库', '数据库']

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/78369.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Power Query精通指南1:查询结构设计、数据类型、数据导入与迁移(平面文件、Excel、Web)

文章目录 零、Power Query简介0.1 Power Query 主要功能0.2 Power Query 的优势0.3 Power Query 组件 一、Power Query数据处理基本流程1.1 前期准备1.2 提取1.3 转换1.3.1 Power Query 编辑器界面1.3.2 默认转换1.3.3 自定义转换 1.4 加载1.4.1 自动检测数据类型1.4.2 重命名查…

WebRTC 服务器之Janus概述和环境搭建

1 概述 Janus 是由 Meetecho 开发的通用 WebRTC 服务器,它为构建 WebRTC 应用程序提供了一个模块化框架。服务器目标:Janus WebRTC 网关被设计为轻量级、通用的 WebRTC 服务器,除了实现以下方法外,它本身不提供任何功能&#xff1…

19:常见的Halcon数据格式

遍历文件夹与文件选择 1)遍历文件夹: list_files( : : Directory, Options : Files) Directory:目录(文件夹路径) Options:选项 files 指定搜索的格式为文件 directories 指定搜索的格式为文件夹 re…

QML图像提供器 (Image Provider)

QML 中的图像提供器是一种自定义图像加载机制,允许你从非文件源(如数据库、网络或程序生成的内容)提供图像数据。 主要类型 QQuickImageProvider - 基础图像提供器 QPixmapImageProvider - 提供 QPixmap 图像 QImageImageProvider - 提供 …

计算机视觉与深度学习 | 双目立体匹配算法理论+Opencv实践+matlab实践

双目立体匹配 一、双目立体匹配算法理论与OpenCV、matlab实践一、双目立体匹配理论二、OpenCV实践三、优化建议四、算法对比与适用场景二、双目立体匹配算法理论及Matlab实践指南一、双目立体匹配理论二、Matlab实践步骤三、算法对比与优化建议四、完整流程示例五、常见问题与解…

AI国学智慧语录视频,条条视频10W+播放量

家人们!图书类带货玩法真的非常多,之前也分享过蛮多,例如情感语录、育儿教育、爆款图书金句类、AI历史人物解说类等等。 本期继续来分享一个对于普通人来说,上手相当简单,容易起号,可作为长线深耕的AI带货…

echart图表使用

2、接口编写 该部分代码定义了UserController控制器类,用于处理与用户相关的请求。包含一个用于跳转页面的方法和一个返回用户详细数据(以 JSON 格式呈现)的接口。前者负责将用户导航至指定页面,后者通过构建ChartVO对象并填充数…

Android短信监控技术实现:合法合规的远程采集方案

一年经验的全栈程序员,目前头发健在,但不知道能撑多久。 该项目已成功部署并稳定运行于企业生产环境,如需个性化定制方案,欢迎联系作者进行深度合作。 文章目录 前言 一、页面设计 1.页面显示 2.代码实现 二、具体代码实现 1.添加…

前端跨域问题怎么在后端解决

目录 简单的解决方法: 添加配置类: 为什么会跨域 1. 什么是源 2. URL结构 3. 同源不同源举🌰 同源例子 不同源例子 4. 浏览器为什么需要同源策略 5. 常规前端请求跨域 简单的解决方法: 添加配置类: packag…

【中间件】brpc_基础_execution_queue

execution_queue 源码 1 简介 execution_queue.h 是 Apache BRPC 中实现 高性能异步任务执行队列 的核心组件,主要用于在用户态线程(bthread)中实现任务的 异步提交、有序执行和高效调度。 该模块通过解耦任务提交与执行过程,提…

java学习之数据结构:一、数组

主要是对数组所有的东西进行总结,整理 适合小白~ 目录 1.什么是数组 1.1数组定义 1.2数组创建 1)静态创建 2)动态创建 1.3数组遍历 1)for和while遍历 2)foreach遍历 2.数组越界问题及解决 2.1数组越界问题 2…

[Survey]SAM2 for Image and Video Segmentation: A Comprehensive Survey

BaseInfo TitleSAM2 for Image and Video Segmentation: A Comprehensive SurveyAdresshttps://arxiv.org/abs/2503.12781Journal/Time2503Author四川大学,北京大学 1. Introduction 图像分割专注于识别单个图像中的目标、边界或纹理,而视频分割则将这…

用Maven定位和解决依赖冲突

用Maven定位和解决依赖冲突 一、依赖冲突的常见表现二、定位冲突依赖的4种方法2.1 使用Maven命令分析依赖树2.2 使用IDE可视化工具2.3 使用Maven Enforcer插件2.4 运行时分析 三、解决依赖冲突的5种方案3.1 排除特定传递依赖3.2 统一指定版本(推荐)3.3 使…

穿越数据森林与网络迷宫:树与图上动态规划实战指南

在 C 算法的浩瀚宇宙中,树与图就像是神秘的迷宫和茂密的森林,充满了未知与挑战。而动态规划则是我们探索其中的神奇罗盘,帮助我们找到最优路径。今天,就让我们一起深入这片神秘领域,揭开树与图上动态规划的神秘面纱&am…

UDP / TCP 协议

目录 一、前言: 数据封装与分用: 二、网络协议分层模型: 三、UDP / TCP 协议 UDP 协议: 1、UDP 协议段格式: 2、UDP 的特点: TCP 协议: 1、TCP 协议段格式: 2、TCP 协议的十…

Python 实现的运筹优化系统数学建模详解(动态规划模型)

相关代码链接:https://download.csdn.net/download/heikediguoshinib/90713747?spm1001.2014.3001.5503 一、引言 在计算机科学与数学建模的广阔领域中,算法如同精密的齿轮,推动着问题的解决与系统的运行。当面对复杂的优化问题时&…

langfuse本地安装

目录 安装命令项目准备用openai测试 安装命令 本地(docker compose):使用 Docker Compose 在你的机器上于 5 分钟内运行 Langfuse。 # 获取最新的 Langfuse 仓库副本 git clone https://github.com/langfuse/langfuse.git cd langfuse# 运行 …

每天学一个 Linux 命令(35):dos2unix

每天学一个 Linux 命令(35):dos2unix 命令简介 dos2unix 是一个用于将 Windows/DOS 格式的文本文件转换为 Unix/Linux 格式的实用工具。它主要处理行尾符的转换(将 CRLF 转换为 LF),同时也能处理编码问题和字符集转换。这个命令在跨平台文件共享、代码迁移和系统管理场…

第6章 Python 基本数据类型详解(int, float, bool, str)细节补充

文章目录 Python 基本数据类型深入解析(int, float, bool, str)一、整型(int)的底层机制二、浮点型(float)的陷阱与解决方案三、布尔型(bool)的底层本质四、字符串(str)的不可变性与优化五、类型间的隐式转换与陷阱六、性能优化与工具总结:关键细节与最佳实践Python…

19. LangChain安全与伦理:如何避免模型“幻觉“与数据泄露?

引言:当AI成为企业"数字员工"时的责任边界 2025年某金融机构因AI客服泄露用户信用卡信息被罚款2300万美元。本文将基于LangChain的安全架构与Deepseek-R1的合规实践,揭示如何构建既强大又安全的AI系统。 一、AI安全风险矩阵 1.1 2025年最新威…