有没有个人电脑可用的语义搜索方案?

,

就像在搜索引擎搜索“怎样XXX”会返回“怎么XXX”的相关网页、搜索“五公斤”会返回“5 kg”的相关网页这样的功能(semantic search/vector search)。

相较于 ChatGPT 的高大上,貌似这个功能需要的计算量更少,更容易在个人电脑上实现才对,但是目前只有各大搜索引擎有这样的功能。

个人设备上我只见过一个 Mac App Store 收费的文本内容搜索 App (PDF Search)强调自己是 AI 搜索,不过效果也比较一般。

碎碎念

基本文本搜索,基本是所有文本编辑软件都有的功能。

正则搜索和模糊搜索也有很多方法。

Emacs 还有 orderless 这种打乱顺序的搜索/筛选工具。

逻辑搜索 Emacs 有

语义搜索貌似还没有开箱即用的解决方案。

你如果读了搜索引擎方面的技术材料, 就会知道他们其实大部分都在用统计、马尔可夫模型和矩阵, 搜索引擎不像 ChatGPT, 语义算法并不好用。

3 个赞

:joy: 是我坐井观天了。

刚用上 xeft 感觉已经很惊艳了,有种把搜索引擎高级搜索搬进电脑的感觉。

上一次有这种感觉还是用 Obsidian 的语义相关性插件 graph-analysis,不过不如 xeft 实用。

1 个赞

大佬简直是寻找 package 的小能手。

这个 xapian 用作个人笔记的搜索看起来应该不错。。

:laughing: 不是大佬。

逻辑搜索真的是一个非常好的功能,虽然用百度、GitHub 的时候不怎么用,但用来找本地文件还是非常好用的。比正则搜索简单,比模糊搜索准确。

1 个赞

我去给作者提给Issue,description 里拼错了。应该是Xapian :rofl:

确实,他找包很厉害

1 个赞

谢谢猫大的肯定 :grimacing:

你说的可否理解为 可离线使用的搜索引擎,我也一直想要类似这样的东西(因为这样就不用总是fq谷歌),但感觉不太可能,连翻译软件离线可用的都很难找

其实可以根据开源软件各种文件的解析库, 再结合中文分词、 单词统计模型、马尔可夫算法和矩阵就可以实现一个离线的搜索引擎。

现代的计算机性能单机搜索应该是可以满足日常用的。

1 个赞

是的,xeft 是我发现的第一个有搜索引擎功能的插件(基于 xapian Search Engine Library),它是基于逻辑搜索(AND OR ……)的。

我想找一个离线可用的语义搜索工具,这样即使输入的词语没有匹配到,也可以通过词向量匹配到近似的结果。感觉这才是真正的模糊搜索。

离线词典比较简单,离线 OCR 也有 猫大推荐的 EasyOCR 和很多其他解决方案,离线语音识别我也有 App 调用 macOS 系统功能和开源的 whisper/Buzz两种解决方案。OBS 社区也有人实现了调用微软系统的语音识别功能实现语音转字幕,调用 macOS 语音识别的功能正在实现。

离线翻译 macOS 藏在了快捷指令 App 里不好调用,开源的倒是有个 LibreTranslate,不过我太菜了不会装。离线语义搜索没发现有可以用在个人电脑上的产品问世。这两个应该是难度最大的,不过还好需求不太迫切。

1 个赞

Whisper那个很强大, 准确性和动态能力已经超过很多商用公司的水平了。

最早的是 Google Search 是有桌面版的, 效果就很好。

按照Google发的材料, 用统计模型就可以做。

按照现在流行的深度学习模型, 结合马尔可夫模型, 对本地的数据进行建模, 然后再结合分词库和维特比算法找出最佳分词, 最后再对所有搜索的内容进行 TF/IDF 加权求和排序。

  1. 本地内容的索引应该不难, 有很多开源库可以解析各种文件
  2. 分词和动态规划找出最佳分词模型应该也不难
  3. 比较费劲的是搜索很多文件后, 每个文件和关键字的搜索权重对比后排序要费点劲

只不过, 如果文件都是自己下载的或自己创造的, rg/rga/fd应该就够了, 对于这些我们自己收集的素材, 有时候我们只是忘记放哪了, 里面的内容多多少少都知道, 本地离线搜索引擎有点造大炮打蚊子。


备注: 只是提供一些思路, 如果哪位大牛造出大炮, 我第一个用, 哈哈哈哈。

2 个赞

是有点炮轰蚊子的感觉,不过有一部分软件有了往这个方向发展的苗头:PDF Search、DEVONagent/DEVONthink。

对于非程序员来说,空有想法不能参与改变世界还是有点遗憾的。

whisper 能在转录文字的同时翻译成英文,应该是个多模态的模型,中文领域还没能追上的产品。

我能想到有点关联的是根据词向量查中文同义词的 https://wantwords.net,貌似注册了公司要商业化但现在连个网页查询 API 都没有。

搜索的内容如果用来补全,应该不错!!

:laughing: 那就变成智能输入法了。

简单普及下,搜索技术方案大体可以分为 Sparse 和 Dense

Sparse 通常就是倒排索引 + BM25,所谓的「逻辑搜索」(AND OR ……)在倒排索引上如何实现其实已经非常成熟了。

你如果读了搜索引擎方面的技术材料, 就会知道他们其实大部分都在用统计、马尔可夫模型和矩阵, 搜索引擎不像 ChatGPT, 语义算法并不好用。

考虑分词,各种统计模型加权虽然可以说有一定的语义,本质上还是基于 Sparse 的检索。 (当然现在也有利用语言模型来从词表中补充词的方法,Lexical Weighting)

至于 Dense (语义)检索,基于深度学习和预训练语言模型的研究并应用已经很多年了,像 OpenAI 也有提供将文本转换成 Embedding 的 API,大家挺少讨论上一代技术了。

不过目前语义检索仍然有很多问题,一个问题就是很难学到一个真正 Universal 的模型,在一个数据上训练的模型应用到领域外其他数据上的由于问题和或者文本的不一致,性能往往还不如 BM25。不过新鲜的工作(12.07)告诉我们只要数据够好够多,还是能打败传统方法的:)

当然除了语义检索本身的难点之外,想要形成一个成熟的本地语义检索应用其实还有很多技术细节,比如说非文本文件的解析(PDF,Words,Image), 模型的训练与更新,Embedding 的计算与存储,以及检索。在很多技术没有成熟或系统级支持之前开始有很大可能因为效果欠佳而被拍在沙滩上😂,比如说 https://www.rewind.ai 这个应用也是等 macOS 自带 OCR 之后才出现。

3 个赞

准确的描述我的观点吧, 在本地数据量不足和单个个体差异很大的情况下。

无监督的模型很难比暴力的统计 效果 更好, 而原因是我们很难理解用户 模糊 关键字背后的意图, 而同时训练投入的成本和推理产出的效果比往往很低。

而且深度学习技术的一个很大弱点是取决于模型的投入和推理的黑盒子逻辑, 一旦命中模型统计范畴以外的地方, 就会出现 天才变小白 的尴尬场面。

所以人工智能应用的落地场景更好的方式是 “更好的模型(或者rg这样的工具) + 精确的应用App(或Emacs这样的小插件)” 这种结合方式。

个人需要的模型不一定是需要非常巨大和先进的。如果一个模型能伴随用户接触的数据和反馈,增量式训练和更新(就像文件索引一样),那就相当于每个人都有了一个贾维斯。

像 rewind 一样用一个统一的模型用来做 OCR、文本相似度分析(语义搜索、翻译)、语音识别语音合成,这样用户就不需要为每个单一的目标寻找解决方案了。

语音识别和语音合成直接用厂商训练好的通用模型就好了。

而且纠正一个概念问题, 语音识别是线性模型, 和 OCR、 GPT-3、 机翻统计学等模型都是完全不一样的。

目前的技术还做不到统一模型。


当然也有可能 OpenAI 这种在模型上大力出奇迹, 看看有啥突破没。

1 个赞