ONNX
ONNX 可以理解为机器学习模型的中间表示格式:训练时可以用 PyTorch、TensorFlow、scikit-learn 等框架,部署时把模型导出成 .onnx,再交给 ONNX Runtime、TensorRT、OpenVINO、CoreML、DirectML 等后端执行。 1. ONNX 是什么ONNX,全称 Open Neural Network Exchange,是一个开放的 AI 模型格式。它定义了三类核心内容:计算图模型、内置算子、标准数据类型;官方也明确说当前重点主要是 inference/scoring,而不是完整训练框架替代品。(GitHub) 一句话概括: ONNX 是模型交换格式和推理部署 IR。 典型链路是: 1234567PyTorch / TensorFlow / sklearn ↓ export / convert model.onnx ↓ runtime / compilerONNX Runtime / TensorRT / OpenVINO / CoreML / TVM / custom...
融合算子
融合算子本质上是:把计算图中多个连续的小算子合并成一个更大的算子或一个 GPU kernel,让它们一次性执行,减少中间结果写回显存、减少 kernel launch、减少 layout 转换,从而提高推理性能。 在 TensorRT、TVM、XLA、TorchInductor、ONNX Runtime、TensorRT-LLM 里,算子融合都是核心优化。 1. 为什么要融合算子GPU 推理不只是“算力瓶颈”,很多时候是: 1读显存 → 算一点 → 写显存 → 再读显存 → 再算一点 → 再写显存 例如: 1Conv → BatchNorm → ReLU 如果不融合,大概是: 12345678910111213kernel 1: Conv input 从显存读入 weight 从显存读入 conv 输出写回显存kernel 2: BatchNorm conv 输出再从显存读入 BN 参数读入 BN 输出写回显存kernel 3: ReLU BN 输出再从显存读入 ReLU 输出写回显存 问题有两个: 第一,中间 tensor 反复读写显存。第二,每个...
GEMM
GEMM 是 General Matrix Multiply,中文通常叫通用矩阵乘法。它是深度学习里最核心的计算形式之一。 它的标准形式是: C = \alpha A B + \beta C 其中: 1234A: m × k 矩阵B: k × n 矩阵C: m × n 矩阵α, β: 标量 如果忽略 $\alpha$、$\beta$,最常见的理解就是: 1C = A @ B 也就是矩阵乘矩阵。 1. GEMM 为什么重要神经网络里的很多算子,最后都可以转成 GEMM。 例如全连接层 / Linear 层: 1y = x @ W + b 如果: 12x: batch × hiddenW: hidden × output 那么: 1y: batch × output 这本质就是 GEMM,加上一个 bias。 Transformer 里的 Q、K、V 投影也是 GEMM: 123Q = X @ WqK = X @ WkV = X @ Wv MLP 也是 GEMM: 12H = GELU(X @ W1 + b1)Y = H @ W2 +...
文本相似度计算
文本相似度计算 基准方法:文本->词->嵌入->平均池化->余弦相似度 Word Mover’s Distance rank_bm25 无监督短文本匹配1. TF-IDF Term Frequency-Inverse Document FrequencyTF-IDF(Term Frequency-Inverse Document Frequency)是一种在信息检索和文本挖掘中广泛使用的加权技术,用于评估一个词在一个文档或语料库中的重要性。TF-IDF算法结合了两个统计测量:词频(TF)和逆文档频率(IDF),来计算一个词的权重。 词频(TF, Term Frequency) 词频是指一个词在文档中出现的频率。一个词在文档中出现得越频繁,其TF值就越高,表明这个词对该文档的内容可能越重要。然而,仅仅使用词频作为权重是有缺陷的,因为常见的词汇(如冠词、介词等)会获得较高的权重,尽管它们对于文档的主题贡献不大。 TF的计算公式可以表示为:$$ \text{TF}(t, d) = \frac{\text{词 } t \text{ 在文档 } d...
PG Vector
Getting StartedEnable the extension (do this once in each database where you want to use it) 1CREATE EXTENSION vector; Create a vector column with 3 dimensions 1CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3)); Insert vectors 1INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]'); Get the nearest neighbors by L2 distance 1SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5; Also supports inner product (<#>) and...
Gen AI
虽然 LLM 提供了很大的潜力,但你也应该谨慎。 LLM 的核心是经过训练来预测序列中的以下单词。 这些单词基于训练数据中其他文本的模式和关系。这些训练数据的来源通常是互联网、书籍和其他公开可用的文本。这些数据的质量可能有问题,也可能是不正确的。培训发生在某个时间点,它可能无法反映世界的当前状态,也不会包含任何私人信息。 LLM 经过微调以尽可能有用,即使这意味着偶尔会产生误导性或毫无根据的内容,这种现象称为幻觉。 例如,当被要求“描述月亮”时,LLM可能会回答“月亮是由奶酪制成的”。虽然这是一句俗语,但事实并非如此。 修复幻觉提供额外的上下文数据有助于为 LLM 的响应奠定基础并使其更加准确。 知识图谱是一种向 LLM 提供额外数据的机制。知识图谱中的数据可以指导 LLM 提供更相关、更准确和更可靠的响应。 虽然LLM使用其语言技能来解释和响应上下文数据,但它不会忽视原始训练数据。 您可以将原始训练数据视为基础知识和语言能力,而上下文信息则在特定情况下提供指导。 这两种方法的结合使 LLM 能够产生更有意义的响应。 避免幻觉LLM 可以“编造”。LLM...
概率论
条件概率是指在给定某个条件下,某个事件发生的概率。用于描述事件之间的依赖关系。假设我们有两个事件 A 和 B,其中事件 A 是我们感兴趣的事件,事件 B 是某个条件。条件概率表示在已知事件 B 发生的情况下,事件 A 发生的概率,记作 $P(A|B)$。 条件概率的计算公式如下: $$ P(A|B) = \frac{P(A \cap B)}{P(B)} $$ 其中,$P(A \cap B)$ 表示事件 A 和事件 B 同时发生的概率,称为事件 A 与事件 B 的交集。$P(B)$ 表示事件 B 发生的概率。 条件概率的计算可以通过已知的概率和事件之间的关系来进行推导。它可以帮助我们理解事件之间的依赖关系,并在实际问题中进行推断和决策。 条件概率在很多领域都有广泛的应用,例如在机器学习中,条件概率可以用于建模和分类;在信息论中,条件概率可以用于计算熵和互信息等。 需要注意的是,条件概率的计算需要满足一些前提条件,例如事件 B 的概率不能为零,事件 A 和事件 B 之间应该是独立或有一定的关联性等。...
LLM Hallucination
123456789101112131415161718192021222324mindmap root((幻觉)) 幻觉是什么? 为什么出现幻觉? 如何检测幻觉? (检索增强评估) 数据集 FactualityPrompt 指标 FActScore SAFE FacTool (基于采样的检测) (未知知识的校准) 幻觉是什么?模型输出是捏造的,而不是以所提供的上下文或世界知识为基础的情况。 上下文中幻觉:模型输出应与上下文中的源内容一致。外在幻觉:当模型不知道一个事实时,它应该说不知道。 为什么出现幻觉?预训练数据,过时、丢失或不正确 微调使用的新数据跟预训练数据不相容 如何检测幻觉?检索增强评估基准数据集 FactualityPrompt 幻觉的评估指标: 幻觉...
Tokenizer
Tokenizer在NLP中,tokenizer是一个软件工具或函数,用于将文本字符串分割成更小的单元,这些单元被称为“tokens”。这些tokens可以是单词、标点符号、数字或任何有意义的文本单元,具体取决于tokenizer的设计和目标应用场景。例如,一个简单的空格分隔的tokenizer会将句子分割成单个的单词。 Tokenization是文本预处理的第一步,几乎所有NLP任务都需要这一步骤,包括但不限于机器翻译、情感分析、文本分类、命名实体识别(NER)、问答系统等。 Tokenizer可以根据不同的语言特性、语法结构和任务需求进行定制。例如: 基础分词器:仅仅基于空格或标点符号分割文本。 高级分词器:考虑连字符、缩写、数字和标点符号,甚至能处理复合词。 子词分词器:如Byte Pair Encoding...
Classic NLP
NLP 是一门研究如何使计算机能够理解、处理和生成人类语言的学科。 基本概念: 语言模型:用于对语言的概率进行建模,包括n-gram模型、神经网络语言模型等。 分词:将连续的文本切分成有意义的词语。 词性标注:为文本中的每个词语标注其词性,如名词、动词、形容词等。 命名实体识别:识别文本中的具体实体,如人名、地名、组织机构等。 语义角色标注:对句子中的每个词语进行语义角色的标注,如施事者、受事者等。 基本技术:...
