Milvus 分词器学习笔记

文章是关于 学习珠峰架构AI课的学习笔记

1. 分词器是什么?

分词器(Tokenizer)是用来把一段文本拆分成"词语"或"关键词"的工具。

2. ## 常见分词器类型

  • Standard(标准分词) :适合英文、数字、标点分隔的文本。
  • Whitespace(空格分词) :只按空格切分,适合英文、代码等。
  • Chinese(中文分词) :适合中文句子,能智能识别词语边界。
  • Simple(简单分词) :按字母、数字等简单规则切分。

3. 分区键

分区键用来将大量数据分散存储在不同的服务器上。 比如我们班里想把同学们进行分组,分组的依据是同学们的姓氏,那么姓氏就是分区键

手写一个简单的中文分词器

python 复制代码
from collections import defaultdict

# import typing
import jieba

# 定义示例文档数据,每个文档包含"id"、"分区键"、"内容"
documents = [
    {"id": 1, "partition_key": "张", "content": "张三喜欢编程和电脑游戏"},
    {"id": 2, "partition_key": "李", "content": "李四热爱计算机科学"},
    {"id": 3, "partition_key": "王", "content": "王五喜欢阅读技术书籍"},
    {"id": 4, "partition_key": "张", "content": "张杰钟爱笔记本电脑"},
]

# 定义同义词映射,"键"为代表词,"值"为同义词集合(用于扩展匹配)
synonym_map = {
    "电脑": {"电脑", "计算机", "PC"},
    "编程": {"编程", "程序设计"},
}


def simple_tokenize(text: str):
    # 说明: 对文本进行简单分词(空格分隔)
    return [token for token in jieba.lcut_for_search(text) if token.strip()]


# 根据"分区键"对文档进行聚合,返回分区字典
def build_partitions(documents):
    partitions = defaultdict(list)
    for doc in documents:
        partitions[doc["partition_key"]].append(doc)
    return partitions


def match_query(partitions, keyword: str, use_synonym=True):
    results = []
    # 关键词集合
    tokens_to_match = {keyword}
    if use_synonym and keyword in synonym_map:
        tokens_to_match = synonym_map[keyword]

    # 遍历所有分区, 查找返回包含关键词的分区

    for partition_key, docs in partitions.items():
        for doc in docs:
            # 对 content 进行分词
            tokens = simple_tokenize(doc["content"])
            # 判断交集
            if tokens_to_match.intersection(tokens):
                results.append((partition_key, doc["id"], doc["content"]))
    return results


if __name__ == "__main__":
    # 分区存储
    partitions = build_partitions(documents)
    # 严格匹配
    # hits = match_query(partitions, keyword="电脑", use_synonym=False)
    # print("仅匹配"电脑"的结果:")
    # for row in hits:
    #     print(row)
    # 示例2:启用同义词匹配("电脑"≈"计算机")
    hits_with_synonym = match_query(partitions, keyword="电脑", use_synonym=True)
    print("启用同义词匹配("电脑"≈"计算机")的结果:")
    for row in hits_with_synonym:
        print(row)

"""
 启用同义词匹配("电脑"≈"计算机")的结果:
('张', 1, '张三喜欢编程和电脑游戏')
('张', 4, '张杰钟爱笔记本电脑')
('李', 2, '李四热爱计算机科学')
"""
相关推荐
树叶会结冰8 小时前
Milvus:可检索记忆的漂流瓶
langchain·milvus·llamaindex
西柚小萌新9 小时前
【人工智能:Agent】--5.Langchain模型+工具
langchain
2401_8772742410 小时前
LangChain聊天模型---工具调用
langchain
万事可爱^10 小时前
LangChain v1.0学习笔记(4)—— 核心组件Models
人工智能·笔记·学习·langchain·大模型
AGI杂货铺11 小时前
零基础也能快速搭建的Deep Agents
ai·langchain·llm·agent·deepagent
进阶的鱼11 小时前
一文助你了解Langchain
python·langchain·agent
逸凡11 小时前
langchain核心组件 Model I/O(3)-OutputParser
langchain
工藤学编程12 小时前
零基础学AI大模型之个人助理智能体之tool_calling_agent实战
人工智能·langchain
喜欢吃豆13 小时前
LangChain 架构深度解析:从中间件机制到人机协同 SQL 智能体实战报告
人工智能·中间件·架构·langchain·大模型
学Linux的语莫13 小时前
初始化大模型的不同方式
langchain