在 Hugging Face Transformers 中,TrainingArguments 描述训练规则,Trainer 将模型、数据、批处理与评估逻辑组织成训练流程。两者配合可以减少重复代码,但数据格式、评估设计和硬件配置仍需要使用者负责。 先看各组件的分工 组件 职责 tokenizer 把文本转换成模型输入 Dataset 提供样本与标签…
训练时,某一步的梯度可能突然变得很大。梯度裁剪通过限制梯度的大小,降低异常梯度对更新过程的冲击,但它不能保证训练一定稳定,也不能代替对数据、学习率和数值问题的检查。 全局范数裁剪怎样计算 假设三个参数对应的梯度为 g=[3,4,0]。它的 L2 范数为: ‖g‖₂ = sqrt(3² + 4² + 0²) = 5 设阈值 c=1,理想化的计算形式是…
读懂参数解析之后,可以再向前一步:让参数确实控制输入、输出与校验,而不是只打印“正在处理”。下面实现一个文本行数统计工具。 先约定命令行接口 python count_lines.py notes.txt --output result.json --min-length 5 --verbose 这个命令读取 notes.txt,统计去掉首尾空白后…
下面这段代码常出现在 RAG 项目的入口:不带开关时运行查询流程,带上 --data-processing 时运行资料处理流程。 import argparse parser = argparse.ArgumentParser(description="EduRAG 程序入口") parser.add_argument(&quo…
把一个 Python 字典传给 Redis,并不等于把原生对象搬进另一块内存。应用需要先决定如何编码、选择什么 Redis 数据结构,以及读取后如何还原类型。 理解这三层关系,比记住“Redis 能存哪些 Python 类型”更有用。 Key 是字节串,Value 有数据结构 Redis 的 key 是二进制安全的字符串,可以包含任意字节。它并不要…
同一份文档被多次上传时,系统怎样判断内容是否重复?一种常见办法是先对内容计算哈希,再用摘要定位已有记录。 哈希值可以类比为数据的数字指纹,但这个比喻有边界:它不是数学上绝对唯一的身份证,也不会自动完成去重或权限控制。 从输入字节到摘要 对固定算法而言,相同字节输入会得到相同摘要。以 SHA-256 为例,输出为 256 bit,也就是 32 字节;…
一段文本既可以被表示为一个稠密向量,也可以被表示为带权重的稀疏词项。BGEM3EmbeddingFunction 封装 BGE-M3 的推理过程,把文本转换成便于 Milvus 索引与检索的表示。 先分清模型与封装接口 BGE-M3 是文本嵌入模型。M3 对应多语言、多功能与多粒度,并不是“图像、音频、文本三种模态”。模型支持稠密检索、稀疏检索和多…
两路检索都返回分数,并不意味着它们可以直接加权。例如 L2 距离越小越相似,而内积通常越大越相似;即使方向相同,量级和分布也可能差得很远。 Milvus 的 WeightedRanker 用于融合多路检索结果。理解它时,要依次看候选集合、分数变换、权重与最终排序。 四个步骤 各路检索分别返回候选文档和分数。 将不同度量转换到可比较的相关性方向与范围…
搜索“吃 苹果”时,系统需要判断哪些文档更相关。TF-IDF 和 BM25 都利用词频与文档频率,但它们处理重复词与文档长度的方式不同。 统一示例和计算口径 以下空格表示已完成分词,长度按词项数量计算: D1:我 喜欢 吃 苹果 长度 4 D2:我 今天 吃 了 一个 苹果 长度 6 D3:苹果 是 一种 水果 啊 长度 5 查询:吃 苹果 文档总…
在混合检索中,关键词检索可能返回 12.8 分,向量检索可能返回 0.83 分。这两个数来自不同评分体系,直接相加没有可靠的解释。 RRF(Reciprocal Rank Fusion)改用排名位置进行融合:先看一篇文档在各路结果中排第几,再累加这些位置对应的贡献。 先统一排名的起点 本文排名从 1 开始,使用公式: RRF(d) = Σᵢ 1 /…