semantra

semantra

智能语义搜索 深入挖掘文档核心内容

Semantra是一款开源的语义搜索工具,专注于本地文档内容分析。它支持处理文本和PDF文件,通过交互式Web界面提供精准的语义查询功能。Semantra采用多种嵌入模型,可根据需求进行定制,并确保数据隐私和安全。这一工具适用于各类专业人士,如记者、研究人员、学生和历史学家等,帮助他们在大量文档中快速定位关键信息,提升工作效率。

Semantra语义搜索文档分析嵌入模型命令行工具Github开源项目

Semantra

https://user-images.githubusercontent.com/306095/233867821-601db8b0-19c6-4bae-8e93-720b324dc199.mov

Semantra是一个多用途的语义文档搜索工具。通过语义而非仅仅匹配文本来进行查询。

这个工具设计用于在命令行上运行,它分析你计算机上指定的文本和PDF文件,并启动一个本地Web搜索应用程序,用于交互式查询这些文件。Semantra的目的是使运行专门的语义搜索引擎变得简单、友好、可配置且私密/安全。

Semantra是为那些在海量信息中寻找细节的个人而设计的——在截稿期限前筛选泄露文件的记者、在论文中寻找洞见的研究人员、通过查询主题来深入理解文学的学生、连接跨书籍事件的历史学家等等。

资源

  • 教程:Semantra入门的温和介绍——从安装工具到使用它分析文档的实践示例
  • 指南:如何更好地使用Semantra的实用指南
  • 概念:解释一些概念以更好地理解Semantra的工作原理
  • 使用Web界面:Semantra网页应用的使用参考

本页面提供了Semantra的高级概述和功能参考。它也有其他语言版本:Semantra en españolSemantra 中文说明

安装

确保你已安装Python >= 3.9

安装Semantra最简单的方法是通过pipx。如果你还没有安装pipx,请运行:

python3 -m pip install --user pipx

或者,如果你已安装Homebrew,可以运行brew install pipx

安装pipx后,运行:

python3 -m pipx ensurepath

打开一个新的终端窗口,让pipx设置的新路径设置生效。然后运行:

pipx install semantra

这将在你的路径上安装Semantra。你应该能够在终端中运行semantra并看到输出。

注意:如果上述步骤不起作用,或者你想要更精细的安装,你可以在虚拟环境中安装Semantra(但请注意,它只有在虚拟环境激活时才能访问):

python3 -m venv venv source venv/bin/activate pip install semantra

使用方法

Semantra操作存储在本地计算机上的文档集合——文本或PDF文件。

最简单的情况下,你可以通过运行以下命令对单个文档使用Semantra:

semantra doc.pdf

你也可以对多个文档运行Semantra:

semantra report.pdf book.txt

Semantra需要一些时间来处理输入的文档。这是每个文档的一次性操作(后续对同一文档集合的运行将几乎瞬时完成)。

处理完成后,Semantra将启动一个本地Web服务器,默认地址为localhost:8080。在这个网页上,你可以交互式地对传入的文档进行语义查询。

快速说明:

当你第一次运行Semantra时,可能需要几分钟时间和几百兆字节的硬盘空间来下载可以处理你传入文档的本地机器学习模型。使用的模型可以自定义,但默认模型是快速、精简和高效的绝佳组合。

如果你想快速处理文档而不使用自己的计算资源,并且不介意付费或与外部服务共享数据,你可以使用OpenAI的嵌入模型

Web应用快速导览

当你第一次导航到Semantra的Web界面时,你会看到这样的界面:

Semantra Web界面

在搜索框中输入内容以开始语义查询。按<kbd>Enter</kbd>键或点击搜索图标执行查询。

搜索结果将按最相关文档的顺序出现在左侧窗格中:

Semantra搜索结果

黄色分数显示0-1.00的相关性。0.50范围内的任何分数都表示强匹配。浅褐色高亮将在搜索结果上流动显示,解释与你的查询最相关的部分。

点击搜索结果的文本将导航到相关文档的相应部分。

文档中高亮显示的搜索结果

点击与搜索结果相关的加号/减号按钮将正面/负面标记这些结果。重新运行查询将使这些额外的查询参数生效。

正面/负面标记搜索结果

最后,可以在查询文本中使用加号/减号来添加和减去文本查询,以塑造精确的语义含义。

添加和减去文本查询

要深入了解Web应用的使用,请查看教程Web应用参考

快速概念

使用语义搜索引擎与精确文本匹配算法有根本的不同。

首先,对于给定的查询,总是会有搜索结果,无论它多么不相关。分数可能非常低,但结果永远不会完全消失。这是因为使用查询算术的语义搜索通常会在非常微小的分数差异中揭示有用的结果。结果将始终按相关性排序,并且每个文档只显示前10个结果,因此较低分数的结果会自动被截断。 另一个区别是,如果你查询的内容直接出现在文档中,Semantra不一定会找到精确的文本匹配。从宏观层面来看,这是因为在不同的上下文中,单词可能有不同的含义,例如"leaves"这个词可以指树上的叶子,也可以指某人离开。Semantra使用的嵌入模型会将所有文本和你输入的查询转换成可以进行数学比较的长数字序列,在这个意义上,精确的子字符串匹配并不总是重要的。有关嵌入的更多信息,请参阅嵌入概念文档

命令行参考

semantra [选项] [文件名]...

选项

  • --model [openai|minilm|mpnet|sgpt|sgpt-1.3B]:用于嵌入的预设模型。更多信息请参见模型指南(默认:mpnet)
  • --transformer-model 文本:用于嵌入的自定义Huggingface transformers模型名称(应只指定--model--transformer-model中的一个)。更多信息请参见模型指南
  • --windows 文本:要提取的嵌入窗口。格式为"大小[_偏移=0][_回退=0]"的逗号分隔列表。一个大小为128、偏移为0、回退为16(128_0_16)的窗口将以128个部分重叠16个token的块嵌入文档。只有第一个窗口用于搜索。更多信息请参见窗口概念文档(默认:128_0_16)
  • --encoding:用于读取文本文件的编码[默认:utf-8]
  • --no-server:不启动UI服务器(仅处理)
  • --port 整数:嵌入服务器使用的端口(默认:8080)
  • --host 文本:嵌入服务器使用的主机(默认:127.0.0.1)
  • --pool-size 整数:请求中要池化的最大嵌入token数
  • --pool-count 整数:请求中要池化的最大嵌入数
  • --doc-token-pre 文本:在transformer模型中每个文档前添加的token(默认:无)
  • --doc-token-post 文本:在transformer模型中每个文档后添加的token(默认:无)
  • --query-token-pre 文本:在transformer模型中每个查询前添加的token(默认:无)
  • --query-token-post 文本:在transformer模型中每个查询后添加的token(默认:无)
  • --num-results 整数:每个文件为查询检索的结果(邻居)数量(默认:10)
  • --annoy:使用Annoy进行近似kNN查询(以轻微的准确性损失换取更快的查询速度);如果为false,则使用精确的穷举kNN(默认:True)
  • --num-annoy-trees 整数:使用Annoy进行近似kNN时的树数量(默认:100)
  • --svm:使用SVM而不是任何类型的kNN进行查询(较慢,且仅适用于对称模型)
  • --svm-c 浮点数:SVM正则化参数;较高的值对错误预测的惩罚更重(默认:1.0)
  • --explain-split-count 整数:用于解释查询的给定窗口的分割数量(默认:9)
  • --explain-split-divide 整数:用于解释查询时将窗口大小除以的因子,以获得每个分割长度(默认:6)
  • --num-explain-highlights 整数:用于解释查询时要突出显示的分割结果数量(默认:2)
  • --force:即使有缓存也强制处理
  • --silent:不打印进度信息
  • --no-confirm:使用OpenAI处理时不显示成本并请求确认
  • --version:打印版本并退出
  • --list-models:列出预设模型并退出
  • --show-semantra-dir:打印Semantra将用于存储处理文件的目录并退出
  • --semantra-dir 路径:存储semantra文件的目录
  • --help:显示此消息并退出

常见问题

它能使用ChatGPT吗?

不能,这是有意为之的。

Semantra不使用任何生成式模型,如ChatGPT。它仅用于语义查询文本,没有任何尝试解释、总结或综合结果的上层。生成式语言模型偶尔会产生表面上看似合理但最终不正确的信息,将验证的负担转嫁给用户。Semantra将原始资料视为唯一的真相来源,并努力展示基于更简单嵌入模型的人机交互搜索体验对用户更有用。

开发

Python应用程序位于src/semantra/semantra.py中,并作为标准Python命令行项目使用pyproject.toml进行管理。

本地Web应用程序使用Svelte编写,并作为标准npm应用程序进行管理。

要开发Web应用程序,请cd进入client目录,然后运行npm install

要构建Web应用程序,运行npm run build。要在监视模式下构建Web应用程序并在有变更时重新构建,运行npm run build:watch

贡献

该应用程序仍处于早期阶段,但欢迎贡献。如有任何错误或功能请求,请随时提交问题。

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多