similarities
similarities 是一款专为高效相似度计算与语义搜索打造的 Python 工具包。它旨在解决海量数据中“找相似”的难题,无论是寻找意思相近的句子,还是检索内容匹配的图片,都能轻松应对。
对于开发者和研究人员而言,similarities 提供了开箱即用的解决方案。在文本领域,它不仅支持基于 CoSENT 等先进模型的深度语义匹配,能精准理解中英文及多语言句子的含义,还涵盖了 BM25、SimHash 等传统字面匹配算法。在图像与跨模态领域,similarities 集成了强大的 CLIP 模型,实现了“文搜图”、“图搜图”甚至“向量搜图”功能,让机器能像人一样理解图片与文字的联系。
其核心技术亮点在于卓越的扩展性与灵活性。similarities 底层优化了 Faiss、Annoy 等检索引擎,支持亿级数据的高效检索与 GPU 加速,同时提供多种距离计算公式以适应不同场景。工具包设计友好,既支持简单的几行代码调用,也提供命令行工具进行大规模向量化、建索引及服务部署,更包含基于 FastAPI 和 Gradio 的前后端演示示例。无论你是需要构建智能客服问答系统、搭建企业知识库,还是探索多模态检索应用,similarities 都能助你快速落地原型并投入生产。
使用场景
某大型电商平台的智能客服团队,每天需处理数万条用户关于“订单异常”、“退款流程”等自然语言咨询,急需提升自动回复的准确率。
没有 similarities 时
- 关键词匹配失效:传统系统依赖精确关键词,当用户问“花呗怎么换绑银行卡”而知识库只有“如何更换花呗绑定银行卡”时,因字面不完全匹配导致检索失败。
- 开发门槛高:若要引入语义搜索,工程师需手动搭建 Faiss 索引、调试 SentenceBERT 模型并编写复杂的向量计算代码,耗时数周。
- 多模态支持缺失:用户上传商品破损图片求助时,系统无法理解图片内容,只能机械地要求用户提供文字描述,体验极差。
- 扩展性受限:面对亿级历史工单数据,现有方案检索速度慢,无法在毫秒级内返回最相似的解决方案。
使用 similarities 后
- 语义精准匹配:利用
BertSimilarity模块,系统能直接识别“换绑”与“更改绑定”的语义等价性,即使措辞不同也能给出高相似度评分(如 0.85+),大幅提升召回率。 - 开箱即用部署:通过简单的 Python 代码调用
SemanticSearch接口,几分钟内即可完成从模型加载、向量化到建立亿级数据索引的全流程,无需底层算法重构。 - 图文跨模态检索:集成 CLIP 模型实现“文搜图”与“图搜图”,用户上传破损照片,系统即可直接检索库中类似的售后案例并推送对应处理流程。
- 高性能并发服务:内置 Faiss 加速与多卡支持,轻松支撑亿级数据量的毫秒级检索,并可快速封装为 FastAPI 服务供前端调用。
similarities 将复杂的语义理解与大规模检索能力封装为简洁接口,让开发者能以最低成本构建懂人话、看得图的智能搜索系统。
运行环境要求
- Linux
- macOS
- Windows
- 非必需,但处理亿级数据或使用 CLIP/BERT 模型进行批量检索、多卡训练时推荐 NVIDIA GPU 以加速
- 具体型号和显存未说明,CUDA 版本取决于安装的 torch 版本
未说明(处理亿级数据需较大内存)

快速开始
🇨🇳中文 | 🌐English | 📖文档/Docs | 🤖模型/Models
Similarities: 相似度计算与语义搜索
similarities: 一个用于相似度计算和语义搜索的工具包,支持文本和图像。相似度计算、语义匹配搜索工具包。
similarities 实现了多种文本和图片的相似度计算、语义匹配检索算法,支持亿级数据文搜文、文搜图、图搜图,python3开发,pip安装,开箱即用。
指南
功能特性
文本相似度计算 + 文本搜索
- 语义匹配模型【推荐】:本项目基于text2vec实现了CoSENT模型的文本相似度计算和文本搜索
- 支持中英文、多语言多种SentenceBERT类预训练模型
- 支持 Cos Similarity/Dot Product/Hamming Distance/Euclidean Distance 等多种相似度计算方法
- 支持 SemanticSearch/Faiss/Annoy/Hnsw 等多种文本搜索算法
- 支持亿级数据高效检索
- 支持命令行文本转向量(多卡)、建索引、批量检索、启动服务
- 字面匹配模型:本项目实现了Word2Vec、BM25、RankBM25、TFIDF、SimHash、同义词词林、知网Hownet义原匹配等多种字面匹配模型
图像相似度计算/图文相似度计算 + 图搜图/文搜图
- CLIP(Contrastive Language-Image Pre-Training)模型:图文匹配模型,可用于图文特征(embeddings)、相似度计算、图文检索、零样本图片分类,本项目基于PyTorch实现了CLIP模型的向量表征、构建索引(基于AutoFaiss)、批量检索、后台服务(基于FastAPI)、前端展现(基于Gradio)功能
- 支持openai/clip-vit-base-patch32等CLIP系列模型
- 支持OFA-Sys/chinese-clip-vit-huge-patch14等Chinese-CLIP系列模型
- 支持前后端分离部署,FastAPI后端服务,Gradio前端展现
- 支持亿级数据高效检索,基于Faiss检索,支持GPU加速
- 支持图搜图、文搜图、向量搜图
- 支持图像embedding提取、文本embedding提取
- 支持图像相似度计算、图文相似度计算
- 支持命令行图像转向量(多卡)、建索引、批量检索、启动服务
- 图像特征提取:本项目基于cv2实现了pHash、dHash、wHash、aHash、SIFT等多种图像特征提取算法
演示
图像搜索演示:https://huggingface.co/spaces/shibing624/CLIP-Image-Search

文本搜索演示:https://huggingface.co/spaces/shibing624/similarities

安装
pip install torch # conda install pytorch
pip install -U similarities
或者
git clone https://github.com/shibing624/similarities.git
cd similarities
pip install -e .
使用方法
1. 文本向量相似度计算
示例:examples/text_similarity_demo.py
from similarities import BertSimilarity
m = BertSimilarity(model_name_or_path="shibing624/text2vec-base-chinese")
r = m.similarity('如何更换花呗绑定银行卡', '花呗更改绑定银行卡')
print(f"similarity score: {float(r)}") # similarity score: 0.855146050453186
model_name_or_path:模型名称或者路径,默认会从HF model hub下载并使用中文语义匹配模型shibing624/text2vec-base-chinese,如果需要多语言,可以替换为shibing624/text2vec-base-multilingual模型,支持中、英、韩、日、德、意等多国语言
2. 文本向量搜索
在文档候选集中找与query最相似的文本,常用于QA场景的问句相似匹配、文本搜索等任务。
SemanticSearch精准搜索算法,Cos Similarity + topK 聚类检索,适合百万内数据集
示例:examples/text_semantic_search_demo.py
Annoy、Hnswlib等近似搜索算法,适合百万级数据集
示例:examples/fast_text_semantic_search_demo.py
Faiss高效向量检索,适合亿级数据集
文本转向量,建索引,批量检索,启动服务:examples/faiss_bert_search_server_demo.py
前端python调用:examples/faiss_bert_search_client_demo.py
3. 基于字面的文本相似度计算和文本搜索
支持同义词词林(Cilin)、知网Hownet、词向量(WordEmbedding)、Tfidf、SimHash、BM25等算法的相似度计算和字面匹配搜索,常用于文本匹配冷启动。
示例:examples/literal_text_semantic_search_demo.py
4. 图像相似度计算和图片搜索
支持CLIP、pHash、SIFT等算法的图像相似度计算和匹配搜索,中文CLIP模型支持图搜图、文搜图、还支持中英文图文互搜。
示例:examples/image_semantic_search_demo.py

Faiss高效向量检索,适合亿级数据集
图像转向量,建索引,批量检索,启动服务:examples/faiss_clip_search_server_demo.py
前端python调用:examples/faiss_clip_search_client_demo.py
前端gradio调用:examples/faiss_clip_search_gradio_demo.py
5. 聚类
通过社群发现(community_detection)算法可以在大规模数据集上执行聚类,寻找聚类簇(即相似的句子组)。
示例:examples/text_clustering_demo.py
6. 图文语义去重
通过同义句挖掘(paraphrase_mining_embeddings)算法可以从大量句子或文档集中挖掘出具有相似意义的句子对,可用于冗余图文检测,语义去重。
命令行模式(CLI)
- 支持批量获取文本向量、图像向量(embedding)
- 支持构建索引(index)
- 支持批量检索(filter)
- 支持启动服务(server)
代码:cli.py
> similarities -h
名称
similarities
用法
similarities COMMAND
命令
COMMAND 是以下之一:
bert_embedding
计算一系列句子的嵌入向量
bert_index
使用 autofaiss 从文本嵌入构建索引
bert_filter
bert 滤波器的入口点,用于批量搜索索引
bert_server
bert 搜索后端的主要入口点,启动服务器
clip_embedding
使用 CLIP 模型对文本和图像进行嵌入
clip_index
使用 autofaiss 从嵌入构建索引
clip_filter
CLIP 滤波器的入口点,用于批量搜索索引
clip_server
CLIP 搜索后端的主要入口点,启动服务器
运行:
pip install similarities -U
similarities clip_embedding -h
# 示例
cd examples
similarities clip_embedding data/toy_clip/
bert_embedding等是二级命令,bert开头的是文本相关,clip开头的是图像相关。- 各二级命令使用方法见
similarities clip_embedding -h。 - 上面示例中
data/toy_clip/是clip_embedding方法的input_dir参数,即输入文件目录(必填)。
联系方式
- 提问与建议:
- 邮件联系:xuming: xuming624@qq.com
- 微信联系:请加我微信号:xuming624,并备注“姓名-公司-NLP”,即可加入NLP交流群。
引用
如果你在研究中使用了similarities,请按如下格式引用:
APA:
Xu, M. Similarities: Compute similarity score for humans (Version 1.0.1) [Computer software]. https://github.com/shibing624/similarities
BibTeX:
@misc{Xu_Similarities_Compute_similarity,
title={Similarities: similarity calculation and semantic search toolkit},
author={Xu Ming},
year={2022},
howpublished={\url{https://github.com/shibing624/similarities}},
}
许可证
本项目采用 Apache License 2.0 许可协议,可免费用于商业用途。请在产品说明中附上similarities的链接及许可证信息。
贡献
目前项目代码仍较为粗糙,欢迎大家对代码进行改进并提交回本项目。在提交之前,请注意以下两点:
- 在
tests目录下添加相应的单元测试。 - 使用
python -m pytest运行所有单元测试,确保所有测试均通过。
确认无误后即可提交 Pull Request。
致谢
- A Simple but Tough-to-Beat Baseline for Sentence Embeddings[Sanjeev Arora 和 Yingyu Liang 及 Tengyu Ma,2017]
- https://github.com/liuhuanyong/SentenceSimilarity
- https://github.com/qwertyforce/image_search
- ImageHash - 官方 GitHub 仓库
- https://github.com/openai/CLIP
- https://github.com/OFA-Sys/Chinese-CLIP
- https://github.com/UKPLab/sentence-transformers
- https://github.com/rom1504/clip-retrieval
感谢这些优秀的工作!
版本历史
1.1.22023/09/221.0.52023/07/07常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备
