码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 向量检索/向量相似性计算方法(持续更新ing...)


    诸神缄默不语-个人CSDN博文目录

    本文介绍各种用于向量检索的向量相似性计算方法,将会简单介绍各种方法的优缺点等信息,并用toy example给出代码示例。

    文章目录

    • 1. 余弦相似度
    • 2. 线性核(点积)
      • 2.1 sklearn实现
    • 3. 向量检索
      • 解决方案
      • 理论和术语
    • 4. 排序
    • 5. 向量存储(向量数据库)
    • 其他参考资料

    1. 余弦相似度

    使用sklearn.metrics.pairwise.cosine_similarity实现。
    最终得到的值会在[-1,1]之间。

    API官方文档:sklearn.metrics.pairwise.cosine_similarity — scikit-learn 1.1.2 documentation
    对计算公式的介绍:https://scikit-learn.org/stable/modules/metrics.html#cosine-similarity

    计算公式:
    k ( x , y ) = x y ⊤ ∥ x ∥ ∥ y ∥ k(x, y) = \frac{x y^\top}{\|x\| \|y\|} k(x,y)=∥x∥∥y∥xy⊤​

    计算一组向量之间的两两相似度,代码撰写方法:

    from sklearn.metrics.pairwise import cosine_similarity
    cos_sim_matrix = cosine_similarity(train_feature)
    #入参是一个二维矩阵,每行是一个样本特征
    

    2. 线性核(点积)

    2.1 sklearn实现

    使用sklearn.metrics.pairwise.linear_kernel实现。

    API官方文档:sklearn.metrics.pairwise.linear_kernel — scikit-learn 1.1.2 documentation

    计算公式:
    k ( x , y ) = x ⊤ y k(x, y) = x^\top y k(x,y)=x⊤y

    3. 向量检索

    解决方案

    1. Faiss包:L2和/或点积向量。速度飞快
      原理:聚合键,基于簇中心查找邻居
      facebookresearch/faiss: A library for efficient similarity search and clustering of dense vectors.
    2. annoy库:可以在大规模数据上检索(200W条已试可用)
      spotify/annoy: Approximate Nearest Neighbors in C++/Python optimized for memory usage and loading/saving to disk
      pip install annoy
      示例代码:
    #用TFIDF做向量(一个做文本表征的示例),然后用annoy算法计算相似度
    
    #TFIDF部分
    from sklearn.feature_extraction.text import TfidfVectorizer
    
    tfidf=TfidfVectorizer(max_features=500)
    sp_tfidf=tfidf.fit_transform(corpus)  #corpus是一个文本列表
    
    #annoy部分
    from annoy import AnnoyIndex
    from tqdm import tqdm
    
    #存储
    f=sp_tfidf.shape[1]  # Length of item vector that will be indexed
    
    t = AnnoyIndex(f, 'angular')
    for i in tqdm(range(len(corpus))):
        t.add_item(i, sp_tfidf[i].toarray().squeeze())  #第2个元素是一个数组
    
    t.build(10) # 10 trees
    t.save('存储路径.ann')
    
    #调用
    u = AnnoyIndex(f, 'angular')
    u.load('存储路径.ann') # super fast, will just mmap the file
    print(u.get_nns_by_item(0, 1000)) # will find the 1000 nearest neighbors
    #返回值是向量的索引
    #如果用get_nns_by_vector的话第一个入参就改成向量,如sp_tfidf[0].toarray().squeeze()
    

    理论和术语

    1. 单调性

    4. 排序

    一般来说顺序是先检索(返回一个集合)然后再排序

    1. 拟合回归模型并计算MSE
      参考资料:Recommending movies: ranking | TensorFlow Recommenders
    2. Listwise ranking
      参考资料:Listwise ranking | TensorFlow Recommenders

    5. 向量存储(向量数据库)

    1. VBASE

    其他参考资料

    1. 我还没看:
      1. 最近邻搜索(NN)、最大内积搜索(MIPS)与(A)LSH算法 - 知乎
      2. ChatGPT盛行的当下,向量数据库为大模型配备了一个超级大脑
      3. (2021 NeurIPS) SPANN: Highly-efficient Billion-scale Approximate Nearest Neighbor Search
      4. (2020 SIGIR) ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction over BERT
      5. facebookresearch/contriever: Contriever: Unsupervised Dense Information Retrieval with Contrastive Learning
      6. (2023 TMLR) Unsupervised Dense Information Retrieval with Contrastive Learning
  • 相关阅读:
    python基础内容
    Node.js在携程的落地和最佳实践
    Shell脚本大全
    LeetCode【174. 地下城游戏】
    射频模块无线收发RF63U芯片应用数据传输和基建网络
    机器人关节扭矩测量及其对导纳控制拖动示教的影响
    【算法题解】拓扑序计数+树形DP
    自己编写平滑加权轮询算法,实现反向代理集群服务的平滑分配
    金融科技,串联了互联网时代与数字时代
    JVM 内存结构详解
  • 原文地址:https://blog.csdn.net/PolarisRisingWar/article/details/127102732
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号