Project Icon

SemanticFinder

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

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

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

SemanticFinder

基于 transformers.js 的前端实时语义搜索和文档聊天

尝试 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。
  • 一个搜索词或短语。
  • 文本应该分段的字符数。
  • 相似度阈值。得分低于该阈值的结果将不会显示。

输出

  • 三个高亮显示的字符串片段,越深色相似度越高。

流水线

  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
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

稿定AI

稿定设计 是一个多功能的在线设计和创意平台,提供广泛的设计工具和资源,以满足不同用户的需求。从专业的图形设计师到普通用户,无论是进行图片处理、智能抠图、H5页面制作还是视频剪辑,稿定设计都能提供简单、高效的解决方案。该平台以其用户友好的界面和强大的功能集合,帮助用户轻松实现创意设计。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号