当前位置: 首页 > news >正文

`vector_ip_ops`(内积操作)和 `vector_cosine_ops`(余弦相似度操作)的不同

vector_ip_ops(内积操作)和 vector_cosine_ops(余弦相似度操作)是两种不同的向量相似度计算方式,主要区别在于它们对向量相似度的衡量标准不同。以下是它们的详细对比:


1. vector_ip_ops(内积,Inner Product)

  • 计算方式:直接计算两个向量的点积(内积),公式为:
    similarity=A⋅B=∑i=1nAi×Bi \text{similarity} = \mathbf{A} \cdot \mathbf{B} = \sum_{i=1}^{n} A_i \times B_i similarity=AB=i=1nAi×Bi
  • 特点:
    • 值域:理论上无界(取决于向量长度和维度)。
    • 归一化要求:通常需要预先对向量归一化(L2归一化) ,否则内积的值会受到向量长度的影响。
    • 用途:如果向量已经是归一化的,内积等价于余弦相似度(因为 A⋅B=cos⁡(θ)\mathbf{A} \cdot \mathbf{B} = \cos(\theta)AB=cos(θ))。
    • 性能:计算速度比余弦相似度略快(少一步归一化除法)。

2. vector_cosine_ops(余弦相似度,Cosine Similarity)

  • 计算方式:计算两个向量的夹角余弦值,公式为:
    similarity=A⋅B∥A∥×∥B∥ \text{similarity} = \frac{\mathbf{A} \cdot \mathbf{B}}{\|\mathbf{A}\| \times \|\mathbf{B}\|} similarity=A×BAB
  • 特点:
    • 值域:固定范围 [−1,1][-1, 1][1,1],1表示完全同向,-1表示完全反向。
    • 归一化要求:不依赖向量是否归一化,因为公式中已自动对向量长度归一化。
    • 用途:直接衡量向量方向的相似性,忽略向量长度(适用于文本、图像等嵌入向量)。
    • 性能:比内积多一步除法计算,稍慢。

关键区别总结

特性vector_ip_ops(内积)vector_cosine_ops(余弦相似度)
是否需要归一化必须预先归一化(否则结果不准确)无需归一化,自动处理
值域无界(受向量长度影响)固定范围 [−1,1][-1, 1][1,1]
计算速度更快(少一步除法)稍慢(需额外归一化计算)
适用场景已归一化的向量(如OpenAI嵌入)未归一化的向量

如何选择?

  1. 如果向量已归一化(L2范数为1) :

    • 内积(vector_ip_ops)和余弦相似度完全等价,但内积计算更快,推荐用 vector_ip_ops
    • 例如:OpenAI的文本嵌入向量默认是归一化的,直接使用内积即可。
  2. 如果向量未归一化:

    • 必须使用 vector_cosine_ops,否则相似度计算会受向量长度干扰。
http://www.xdnf.cn/news/1475641.html

相关文章:

  • 详解 ELO 评分系统
  • [光学原理与应用-414]:设计 - 深紫外皮秒脉冲激光器 - 元件 - 柱面镜:光学系统中的一维(焦线)调控专家(传统透镜是0维的点)
  • 《用 asyncio 构建异步任务队列:Python 并发编程的实战与思考》
  • java分布式场景怎么实现一个高效的 读-写锁
  • 友猫社区APP源码与小程序端部署详解
  • Redis数据库基础
  • MySQL中有哪些锁
  • MathJax - LaTeX:WordPress 公式精准呈现方案
  • Android Studio 构建变体中的资源选择顺序详解
  • UDP-Server(2)词典功能
  • git在Linux中的使用
  • mac-intel操作系统go-stock项目(股票分析工具)安装与配置指南
  • v0.29.3 敏感词性能优化之繁简体转换 opencc4j 优化
  • 大语言模型提示词工程详尽实战指南
  • 记一次uniapp+nutui-uniapp搭建项目
  • 计算机网络:无线局域网加密与认证方式
  • LeetCode算法日记 - Day 33: 最长公共前缀、最长回文子串
  • Linux | i.MX6ULL Tftp 烧写和 Nfs 启动(第十九章)
  • Paimon——官网阅读:文件系统
  • 1.5、机器学习-回归算法
  • Oracle体系结构-Redo Log Buffer详解
  • Day22_【机器学习—集成学习(3)—Boosting—Adaboost算法】
  • FreeMarker快速入门指南
  • Lua 面向对象编程
  • 【MFC】对话框节点属性:Language(语言)
  • macOS下arm编译缺少stdint.h等问题
  • Python入门:从Hello World到项目创建
  • MySQL与ES索引区别
  • 【LeetCode热题100道笔记】二叉树的右视图
  • 数据结构中排序的时间、空间复杂度以及稳定性