SemanticFinder

SemanticFinder

浏览器端实时语义搜索与文档对话工具

SemanticFinder是一款基于transformers.js的浏览器端语义搜索和文档对话工具。它利用最新的嵌入模型,在浏览器中完成嵌入计算和余弦相似度计算,无需服务器端推理。用户可在2秒内快速搜索大型文本,如圣经或《悲惨世界》。该工具支持多语言,可自定义参数,并提供Chrome扩展程序版本。SemanticFinder将所有处理在本地完成,保护用户数据隐私,是一个高效灵活的语义搜索解决方案。

SemanticFinder语义搜索transformers.js前端开发嵌入模型Github开源项目

这是一个基于 transformers.js 的前端语义搜索和文档聊天的应用。

<p align="center"> <a href="https://do-me.github.io/SemanticFinder/"> <img src="https://github.com/do-me/SemanticFinder/assets/47481567/4522ab9d-08f4-4f4c-92db-dbf14ccb2b70" width="320" alt="SemanticFinder"> </a> <h1 align="center">基于 transformers.js 的前端实时语义搜索和文档聊天</h1> </p>

尝试 web 应用安装 Chrome 扩展或阅读介绍博文

在浏览器中进行语义搜索! 使用 transformers.js 和来自 Hugging Face 的最新 SOTA 嵌入模型,在客户端计算嵌入和余弦相似度,无需服务器端推理。

模型

支持所有与 transformers.js 兼容的特征提取模型。这里有一个可排序的列表供您浏览:每日更新列表。在此处下载兼容模型表格:xlsx、csv、json、parquet 或 html 格式: https://github.com/do-me/trending-huggingface-models/。

目录

您可以使用超快的预索引示例,对像《圣经》或《悲惨世界》这样的大型书籍(数百页)进行搜索,在不到2秒的时间内搜索完整内容 🚀。尝试其中一个,自行体验:

文件大小标题作者年份语言URL模型名称量化切分参数切分类型字符需要过滤的所有单词需要检查的所有单词需要过滤的任意单词需要检查的任意单词导出小数位行数备注来源链接文件名
4.78资本论卡尔·马克思1867dehttps://do-me.github.io/SemanticFinder/?hf=Das_Kapital_c1a84fbaXenova/multilingual-e5-smallTrue80单词20038073164528673https://ia601605.us.archive.org/13/items/KarlMarxDasKapitalpdf/KAPITAL1.pdfDas_Kapital_c1a84fba.json.gz
2.58神曲但丁1321ithttps://do-me.github.io/SemanticFinder/?hf=Divina_Commedia_d5a0fa67Xenova/multilingual-e5-baseTrue50单词383782117956225http://www.letteratura-italiana.com/pdf/divina%20commedia/08%20Inferno%20in%20versione%20italiana.pdfDivina_Commedia_d5a0fa67.json.gz
11.92堂吉诃德米格尔·德·塞万提斯1605eshttps://do-me.github.io/SemanticFinder/?hf=Don_Quijote_14a0b44Xenova/multilingual-e5-baseTrue25单词10471507186412005https://parnaseo.uv.es/lemir/revista/revista19/textos/quijote_1.pdfDon_Quijote_14a0b44.json.gz
0.06汉赛尔和格莱特格林兄弟1812enhttps://do-me.github.io/SemanticFinder/?hf=Hansel_and_Gretel_4de079ebTaylorAI/gte-tinyTrue100字符53045559https://www.grimmstories.com/en/grimm_fairy-tales/hansel_and_gretelHansel_and_Gretel_4de079eb.json.gz
1.74IPCC 报告 2023IPCC2023enhttps://do-me.github.io/SemanticFinder/?hf=IPCC_Report_2023_2b260928Supabase/bge-small-enTrue200字符307811156653230气候变化知识状况https://report.ipcc.ch/ar6syr/pdf/IPCC_AR6_SYR_LongerReport.pdfIPCC_Report_2023_2b260928.json.gz
25.56詹姆士王钦定版圣经enhttps://do-me.github.io/SemanticFinder/?hf=King_James_Bible_24f6dc4cTaylorAI/gte-tinyTrue200字符455616323056580496https://www.holybooks.com/wp-content/uploads/2010/05/The-Holy-Bible-King-James-Version.pdfKing_James_Bible_24f6dc4c.json.gz
11.45詹姆士王钦定版圣经enhttps://do-me.github.io/SemanticFinder/?hf=King_James_Bible_6434a78dTaylorAI/gte-tinyTrue200字符455616323056280496https://www.holybooks.com/wp-content/uploads/2010/05/The-Holy-Bible-King-James-Version.pdfKing_James_Bible_6434a78d.json.gz
39.32悲惨世界维克多·雨果1862frhttps://do-me.github.io/SemanticFinder/?hf=Les_Misérables_2239df51Xenova/multilingual-e5-baseTrue25单词323694119463574491包含全5幕https://beq.ebooksgratuits.com/vents/Hugo-miserables-1.pdfLes_Misérables_2239df51.json.gz
0.46欧盟2023/138号条例欧盟委员会2022enhttps://do-me.github.io/SemanticFinder/?hf=REGULATION_(EU)_2023_138_c00e7ff6Supabase/bge-small-enTrue25单词7680942451323https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32023R0138&qid=1704492501351REGULATION_(EU)_2023_138_c00e7ff6.json.gz
0.07世界人权宣言联合国1948enhttps://do-me.github.io/SemanticFinder/?hf=Universal_Declaration_of_Human_Rights_0a7da79aTaylorAI/gte-tinyTrue\nArticle正则862363510930条https://www.un.org/en/about-us/universal-declaration-of-human-rightsUniversal_Declaration_of_Human_Rights_0a7da79a.json.gz

导入和导出

您可以自己创建索引,保存下来。如果是私密内容,请自行保留;如果是经典著作或您认为其他人可能感兴趣的内容,可以考虑在Hugging Face 仓库上提交 PR,或联系我们。如果您提供了可复制的良好来源链接,我们很乐意满足图书请求。任何涉及歧视性内容的行为都是不被容忍的。

安装

克隆仓库,并用以下命令安装依赖项:

npm install

然后运行:

npm run start

如果要进行构建,运行:

npm run build

构建完成后,您将在 dist 目录中找到 index.htmlmain.cssbundle.js

浏览器扩展

Chrome 网上应用店下载 Chrome 扩展,并将其固定。右击扩展图标的 options:

  • 对于多语言使用,选择 distiluse-base-multilingual-cased-v2(默认是仅英语)
  • 对于较大的文本,设置一个更高的最小字符数来进行分割

本地构建

如果您想在本地构建浏览器扩展,请克隆仓库,进入 extension 目录,然后运行:

  • npm install
  • npm run build 进行静态构建,或
  • npm run dev 进行自动刷新的开发版本
  • 转到 Chrome 扩展设置 chrome://extensions
  • 选择 Load Unpacked 并选择 build 文件夹
  • 在 Chrome 中固定扩展,以便于访问。如果对您不起作用,请随时提出问题。

性能

在整本《白鲸》(Moby Dick)中进行测试,共 660,000 个字符,约 13,000 行或 111,000 个单词。 在我的老式 i7-8550U CPU 上,使用 1000 个字符作为分段大小,初始嵌入生成需要 1-2 分钟。后续查询只需要约 2 秒! 如果您想查询更大的文本,或保留一整个书籍库的索引,请使用合适的矢量数据库

功能

您可以自定义所有内容!

  • 输入文本和搜索词
  • 混合搜索(语义搜索和全文搜索)
  • 分段长度(越大越快,越小越慢)
  • 高亮颜色(目前已硬编码)
  • 高亮数量基于阈值值。值越低,结果越多。
  • 实时更新
  • 感谢 transformers.js,可轻松集成其他 ML 模型
  • 注重数据隐私 - 您的输入文本数据不会发送到服务器,而是保留在您的浏览器中!

使用场景

  • 对任何内容进行基本搜索,如您的个人笔记(这也是我的初衷,无法再处理一个巨大的 notes.txt 文件)
  • 还记得在学校时对诗歌进行分析吗?经常需要寻找可能的主导动机或如《汉赛尔和格莱特》中的重复类别,如食物

未来想法

这是一个英语到中文的翻译,请提供源文本的中文翻译。 注意:翻译需要符合中文语序、流程、通顺。

  • 可以很好地打包所有内容,并使用它,例如代替 JavaScript 搜索引擎,如 Lunr.js(也被用在 mkdocs-material)。
  • 集成到 mkdocs (mkdocs-material) 实验性:
    • 在构建文档时,将所有 .md 文件分块(长度在 mkdocs.yaml 中定义)。应该相当大(>800 个字符),以降低响应时间。也可以构建 n 个索引,首先是粗略索引(每个文档/ .md 文件,如果所使用的模型支持该长度),然后是细化索引(针对文档块)。
    • 通过计算所有文档/块的嵌入来构建索引。
    • 当用户查询文档时,可以切换(快速)全文标准搜索(目前使用 lunr.js)或实验性语义搜索。
    • 如果选择后者,客户端会加载模型(all-MiniLM-L6-v2 约 30MB)。
    • 如同在 SemanticFinder 中,嵌入是在客户端创建的,余弦相似度也在客户端计算。
    • 高分结果就像使用 lunr.js 一样返回,所以用户不应该注意到 UI 上的差异。
  • 电子应用程序或浏览器应用程序也可以增强语义搜索,例如 VS Code、Atom 或移动应用程序。
  • 集成到个人维基系统,如 Obsidian、tiddlywiki 等,可以节省您繁琐的标记/关键词/分类工作,或至少进一步改善您的结构。
  • 搜索您自己的浏览历史记录(感谢 @Snapdeus)。
  • 集成到聊天应用程序。
  • 允许 PDF 上传(从 PDF 转换为文本)。
  • 与变压器.js 的语音转文本 whisper 模型集成,允许音频上传。
  • 由于 CodeMirror,我们甚至可以为 Python、JavaScript 等编程语言使用语法高亮显示。

逻辑

Transformers.js 承担了对输入进行标记和运行模型的繁重工作。没有它,这个演示是不可能的。

输入

  • 尽可能多的文本!演示使用了"汉塞尔和格雷特"的一部分,但它可以处理数百页 PDF。
  • 一个搜索词或短语。
  • 文本应该分段的字符数。
  • 相似度阈值。得分低于该阈值的结果将不会显示。

输出

  • <span style="background-color: rgb(0, 255, 81);">三个高亮显示的字符串片段</span>,越深色相似度越高。

流水线

  1. 加载所有脚本。模型从 HuggingFace 加载一次,然后缓存在浏览器中。
  2. 用户输入一些文本和搜索词或短语。
  3. 根据考虑的近似长度(单位为字符),文本被分割成分段。单词本身从不分割,这就是为什么是近似的原因。
  4. 创建搜索词嵌入。
  5. 对于文本的每个分段,创建嵌入。
  6. 与此同时,计算每个分段嵌入与搜索词嵌入之间的余弦相似度。将其写入一个以分段为键、得分为值的字典。
  7. 在每次迭代中,根据字典中的最高得分实时更新进度条和高亮显示的部分。
  8. 将嵌入缓存在字典中,后续查询速度会快得多。计算余弦相似度的速度比生成嵌入快得多。
  9. 只有在用户改变分段长度时,才需要重新计算嵌入。

协作

欢迎提交 PR!

待办事项(没有优先级)

  • 相似度分数阈值/截止值
  • 添加选项以高亮显示更多(例如所有高于某个分数的部分)
  • 添加停止按钮
  • 使用 MaterialUI 进行输入字段或适当的标签
  • 创建一个不使用 CDN 的演示
  • 将 HTML 适当分离为 HTML、JS、CSS
  • 添加 npm 安装
  • 从文件加载嵌入的选项,或者以某种方式允许共享嵌入
  • 简化分块函数,以便可以不受问题地加载原始文本
  • 改善颜色范围
  • 用 Rust 重写余弦相似度函数,移植到 WASM 并作为模块加载,以获得可能的加速(实验性)
  • 重新设计 UI
  • 改善代码
  • - 混合使用 jQuery/纯 JS
  • - 清理函数
  • - 添加更多注释
  • 添加可能的使用案例
  • 打包为独立应用程序(可能有自定义模型选择;从 HF hub 下载一次,然后本地保存)
  • 可能在 transformers.js 主页中作为示例集成

星星历史

Star History Chart

Gource 地图

image

使用以下命令创建 Gource 图像:

gource -1280x720 --title "SemanticFinder" --seconds-per-day 0.03 --auto-skip-seconds 0.03 --bloom-intensity 0.5 --max-user-speed 500 --highlight-dirs --multi-sampling --highlight-colour 00FF00

编辑推荐精选

讯飞智文

讯飞智文

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

下拉加载更多