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.pswp.cn/web/78369.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/78369.shtml
英文地址,請注明出處:http://en.pswp.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年最新威…