项目介绍
概述
SimilaritySearchKit 是一款在 iOS 和 macOS 应用中实现文本嵌入和语义搜索功能的 Swift 包。其核心特点是速度、可扩展性和隐私保护,支持一系列内置的最先进的自然语言处理模型和相似性度量。此外,它还支持自定义选项的无缝集成。该工具旨在帮助开发者以简单快捷的方式开发强大的应用程序,同时确保数据的本地化处理,维护用户隐私。
适用场景
SimilaritySearchKit 的主要应用场景包括:
- 注重隐私的文档搜索引擎:创建处理敏感文档的本地搜索引擎,避免用户数据暴露给外部服务。
- 离线问答系统:实现一个在本地数据集中找到用户查询最相关答案的问答系统。
- 文档聚类和推荐引擎:基于文本内容自动分组和组织文档。
通过利用 SimilaritySearchKit,开发者能够轻松地创建功能强大且隐私友好的应用。
安装方法
安装 SimilaritySearchKit 极为简单,只需通过 Swift Package Manager 将其添加为项目的依赖项。可以通过以下步骤在 Xcode 中添加:
- 打开
File
菜单,选择Add Packages...
。 - 搜索或输入包的 URL:
https://github.com/ZachNagengast/similarity-search-kit.git
。
也可以通过在 Package.swift
中添加行代码的方式来进行安装。
使用指南
在项目中使用 SimilaritySearchKit 需要以下步骤:
-
导入框架:
import SimilaritySearchKit
-
创建
SimilarityIndex
实例并设置距离度量和模型:let similarityIndex = await SimilarityIndex( model: NativeEmbeddings(), metric: CosineSimilarity() )
-
添加需要进行检索的文本:
await similarityIndex.addItem( id: "id1", text: "Metal was released in June 2014.", metadata: ["source": "example.pdf"] )
-
查询最相似的条目:
let results = await similarityIndex.search("When was metal released?") print(results)
示例应用
Examples
目录中包含多个 iOS 和 macOS 应用样例,展示了如何使用 SimilaritySearchKit:
BasicExample
:用于索引和比较小型硬编码字符串集合相似性的基本应用。PDFExample
:支持在独立 PDF 文件内容中进行语义搜索的 mac-catalyst 应用。ChatWithFilesExample
:用于索引计算机中任何文本文件的高级 macOS 应用。
模型和度量指标
可用模型:
NaturalLanguage
MiniLMAll
Distilbert
MiniLMMultiQA
可用度量指标:
DotProduct
:向量乘积。CosineSimilarity
:向量间角度余弦。EuclideanDistance
:欧几里德空间中的直线距离。
客制化实现
开发者可以通过自定义实现协议的方法来覆盖 SimilaritySearchKit 的主要功能,从而根据自身需求自定义文本嵌入、距离度量、文本拆分、标记化操作以及索引存储等功能。
未来计划
项目未来的计划包括性能提升、增加更多嵌入模型、使用 Metal 加速距离计算,以及引入稀疏/密集混合搜索等功能。开发者可以通过项目提交反馈,帮助完善这一工具。
项目动机
随着自然语言服务技术的迅速发展,尤其是 ChatGPT 的出现,很多强大的文本应用得以实现。然而,这些服务往往依赖于云计算,而在一些特殊环境下,用户可能不希望数据被传输到远程服务器处理。因此,SimilaritySearchKit 希望为开发者提供一种强大且可在苹果生态系统内运行的本地解决方案。
SimilaritySearchKit 可以帮助开发者无缝实现现代自然语言处理应用,保障数据本地处理的可靠性和安全性。