Fans的博客

即学即会, 让学习更容易

还不知道怎么提示LLM?ChatGPT提示入门

NLP必学

简介: 什么是人工智能? 从目的的角度出发,人工智能(AI)是人们创造的一些“聪明的”的算法,使得机器能够像人类一样“思考”。这些算法可以写论文、解决数学问题,并创造艺术。该领域的最新进展已经十分先进,以至于人工智能可以写出令人信服的销售邮件、新闻报道,甚至可以赢得艺术比赛。 什么是提示过程? 提示过程指的是人类如何指导 AI 执行任务,即指导人工智能执行任务的过程称为提示过程。我们向 AI...

IVF-PQ:基于乘积量化的ANN算法

向量检索

一、PQ是什么? Faiss是什么 Faiss是FAIR出品的一个用于向量k-NN搜索的计算库,其作用主要在保证高准确度的前提下大幅提升搜索速度,根据我们的实际测试,基于1600w 512维向量建库,然后在R100@1000 (即召回top 1000个,然后统计包含有多少个实际距离最近的top 100)= 87%的前提下单机15线程可以达到1000的qps,这个性能应该是可以满足大部分的推荐...

NLP分词算法综述

NLP必学

分词算法根据其核心思想主要分为两种, 第一种是基于字典的分词,先把句子按照字典切分成词,再寻找词的最佳组合方式; 第二种是基于字的分词,即由字构词,先把句子分成一个个字,再将字组合成词,寻找最优的切分策略,同时也可以转化成序列标注问题。归根结底,上述两种方法都可以归结为在图或者概率图上寻找最短路径的问题。 一、基于词典的分词 1. 最大匹配分词算法 最大匹配分词寻找最优组合的方式是将匹配到的...

向量检索必学KD-tree

向量检索

什么是KD 树? KD tree是分割k维数据空间的数据结构,主要用于多维数据的NNsearch 一、KD-tree是什么? 我们回顾一下,二叉查找树 其实KDTree就是二叉查找树(Binary Search Tree,BST)的变种。二叉查找树的性质如下: 1)若它的左子树不为空,则左子树上所有结点的值均小于它的根结点的值; 2)若它的右子树不为空,则右子树上所有结点的值均大于它的根结...

向量检索必学HNSW&NSG

向量检索

基于空间切分的向量检索算法的缺点: 空间切分类算法的劣势。所有类似的哈希或者树结构的方法都免不了对空间进行切分再索引,那么,他们为什么会随着维度提升而性能急剧下降呢?因为它们的算法逻辑都是首先定位一个最有可能出现答案的区域(被分割线/面包裹的区域),如果没找到或没找到足够的答案,就要去检查与当前区域相邻的区域,在二维空间中似乎没有那么糟糕,但在上百的高维空间,这些候选区域的数字会指数级膨胀,...

NLP必学LR和HMM

NLP必学

前言 一、线性模型 二、线性模型用于词性标注 回到词性标注问题上来 相信通过前面的介绍,你已经对线性模型有了基本的认识,下面我们回到词性标注任务上,简单地介绍一下如何基于多元分类的思想使用线性回归模型进行词性标注。 基本思路 在我们之前的介绍中,你可能会发现,线性模型主要是用于解决机器学习中的回归(regression)问题。也就是说,它预测的最终结果通常...

NLP必学Word2Vec、Glove和ELMO

NLP必学

前言 词汇表示(Word Representation)一直是自然语言处理(NLP)中最基础也是最重要的任务之一。 深度学习已经给这一领域带来了革命性的变革。其中一个很关键的概念就是词嵌入(word embeddings),这是语言表示的一种方式,我们可以理解成,将词汇的语义表示成向量,而向量之间的相似度用来衡量词与词之间的关系强弱。 本文是我在学习吴恩达深度学习课程中的词汇表示一章的总结...

DDP分布式多GPU并行跑pytorch深度学习模型

DDP

前言 PyTorch的数据并行相对于TensorFlow而言,要简单的多,主要分成两个API: DataParallel(DP):Parameter Server模式,一张卡为reducer,实现也超级简单,一行代码。 DistributedDataParallel(DDP):All-Reduce模式,本意是用来分布式训练,但是也可用于单机多卡。 数据并行 vs 模型并行: 模型并行...

链表操作

leetcode-链表SOTA操作

链表操作 为什么单独把链表拎出来?因为最近刷题经常碰到链表,然后以前的知识以及写法老是忘记,就很烦,特此总结一下链表的一些SOTA操作,以及比较综合的一些题 链表特性 首先因为链表没法使用下标索引访问数据,因此搜索时间复杂度是On 但是链表的插入以及修改操作的复杂度达到O1,因为不需要对其余的数据发生变动 但也正因为这个特性,导致我们在很多题中必须要模拟解法,但是并不能保证解法的复杂度最低...

双指针技巧

leetcode-真好的双指针

双指针的用途 双指针法一般用于什么问题?首先,我们需要考虑是单向还是双向的。 单向双指针: 链表:找倒数第几个位置,或者找中间的位置 数组:覆盖,交换,重新构造秩序,单向覆盖 双向双指针: 倒序,交换,快速排序(递归) 有序数组的两个数之和,正负数有序的平方,也就是满足前后的双数查找 单向双指针 链表:找倒数第几个位置,或者找中间的位置 数组:覆盖,交...