Project Icon

semantic-grep

基于词嵌入的语义搜索命令行工具

semantic-grep是一款开源的语义搜索命令行工具,基于词嵌入技术实现超越字符串匹配的智能搜索。它支持多语言,提供类似grep的使用体验,具有相似度阈值设置、上下文显示和彩色输出等特性。通过命令行参数或JSON文件配置,可在文件或标准输入中进行高效的语义搜索,适用于开发者和文本分析工作。

w2vgrep - 语义搜索工具

w2vgrep 是一个命令行工具,使用词嵌入技术对文本输入进行语义搜索。它旨在找到与查询在语义上相似的匹配项,超越了简单的字符串匹配。支持多种语言。其使用体验设计类似于 grep。

使用示例

在海明威的《老人与海》中搜索与"死亡"语义相似的词,显示上下文和行号:

curl -s 'https://gutenberg.ca/ebooks/hemingwaye-oldmanandthesea/hemingwaye-oldmanandthesea-00-t.txt' \
    | w2vgrep -C 2 -n --threshold=0.55 death

输出: alt text

这个命令:

- 从加拿大古腾堡计划网站获取《老人与海》的文本
- 将文本通过管道传递给 w2vgrep
- 搜索与"死亡"在语义上相似的词
- 使用 0.55 的相似度阈值(-threshold 0.55)
- 显示每个匹配项前后 2 行的上下文(-C 2)
- 显示行号(-n)

输出将显示匹配项及其相似度分数、高亮显示的词、上下文和行号。

功能

  • 使用词嵌入进行语义搜索
  • 可配置的相似度阈值
  • 显示上下文(匹配行的前后)
  • 颜色编码输出
  • 支持多种语言
  • 从文件或标准输入读取
  • 通过 JSON 文件和命令行参数进行配置

安装

绝对需要两个文件:

  1. w2vgrep 二进制文件
  2. 向量嵌入模型文件
  3. (可选)config.json 文件,用于告诉 w2vgrep 嵌入模型的位置

使用安装脚本

# 克隆
git clone https://github.com/arunsupe/semantic-grep.git
cd semantic-grep

# 运行安装:
#   使用本地 go 编译器编译,安装到 user/bin,
#   将模型下载到 $HOME/.config/semantic-grep
#   创建 config.json
bash install.sh

二进制文件

  1. 下载最新的二进制发布版
  2. 下载向量嵌入模型(见下文)
  3. 可选择下载 config.json 以在其中配置模型位置(或从命令行进行配置)

从源代码构建(Linux/OSX)

# 克隆
git clone https://github.com/arunsupe/semantic-grep.git
cd semantic-grep

# 构建
go build -o w2vgrep

# 使用此辅助脚本下载 word2vec 模型(参见下文的"词嵌入模型")
bash download-model.sh

用法

基本用法:

./w2vgrep [选项] <查询> [文件]

如果未指定文件,w2vgrep 从标准输入读取。

命令行选项

-m, --model_path=     Word2Vec 模型文件的路径。覆盖配置文件
-t, --threshold=      匹配的相似度阈值(默认:0.7)
-A, --before-context= 匹配行之前的行数
-B, --after-context=  匹配行之后的行数
-C, --context=        匹配行前后的行数
-n, --line-number     打印行号
-i, --ignore-case     忽略大小写
-o, --only-matching   仅输出匹配的单词
-l, --only-lines      仅输出匹配的行,不显示相似度分数
-f, --file=           从文件中匹配模式,每行一个模式。类似于 grep -f

配置

w2vgrep 可以使用 JSON 文件进行配置。默认情况下,它会在当前目录、"$HOME/.config/semantic-grep/config.json" 和 "/etc/semantic-grep/config.json" 中查找 config.json

词嵌入模型

快速入门:

w2vgrep 需要__二进制__格式的词嵌入模型。默认模型加载器使用模型文件的扩展名来确定类型(.bin、.8bit.int)。本仓库中提供了一些兼容的模型文件(models/)。从 models/ 目录下载一个 .bin 文件,并在 config.json 中更新路径。

注意:除非在您的机器上安装了 git lfs,否则 git clone 不会下载大型二进制模型文件。如果您不想安装 git-lfs,只需手动下载模型 .bin 文件并将其放在正确的文件夹中即可。

支持多种语言:

Facebook的fasttext团队已发布了157种语言的词向量,这是一个令人惊叹的资源。我想在我的github账户上托管这些文件,但遗憾的是,它们太大且需要花费。因此,我提供了一个小型go程序fasttext-to-bin,可以从中创建与w2vgrep兼容的二进制模型。(注意:使用带有".vec.gz"扩展名的文本文件,而不是".bin.gz"二进制文件)

# 例如,对于法语模型:
curl -s 'https://dl.fbaipublicfiles.com/fasttext/vectors-crawl/cc.fr.300.vec.gz' | gunzip -c | ./fasttext-to-bin -input - -output models/fasttext/cc.fr.300.bin

# 使用方法如下:
# curl -s 'https://www.gutenberg.org/cache/epub/17989/pg17989.txt' \
#    | w2vgrep -C 2 -n -t 0.55 \
#           -model_path model_processing_utils/cc.fr.300.bin 'château'

自己制作:

或者,你可以使用预训练模型(如Google的Word2Vec)或使用gensim等工具训练自己的模型。但请注意,似乎没有标准化的二进制格式(谷歌的格式与Facebook的fasttext或gensim的默认_save()_不同)。对于w2vgrep,由于高效加载大型模型对性能至关重要,我选择保持最简单的格式。

通过查找同义词测试模型

为了帮助排查模型问题,我在./model_processing_utils/中添加了一个synonym-finder.go。这个程序将在模型中找到与查询词相似度高于任何阈值的相似词。

# 构建
cd model_processing_utils
go build synonym-finder.go

# 运行
synonym-finder -model_path path/to/cc.zh.300.bin -threshold 0.6 合理性

# 输出
与'合理性'相似度>=0.60的词:
科学性 0.6304
合理性 1.0000
正当性 0.6018
公允性 0.6152
不合理性 0.6094
合法性 0.6219
有效性 0.6374
必要性 0.6499

关于不同嵌入模型性能的说明

不同模型对"相似性"的定义不同(解释)。然而,就实际目的而言,它们似乎足够等效。

贡献

欢迎贡献!请随时提交Pull Request。

许可和归属:

本项目的代码根据MIT许可证授权。

go-flags包:

本项目使用的go-flags包根据BSD-3-Clause许可证分发。请查看许可证信息https://github.com/jessevdk/go-flags。

Word2Vec模型

本项目使用存储在models/googlenews-slim目录中的word2vec-slim模型的镜像版本。该模型根据Apache License 2.0分发。有关模型、其原作者和许可证的更多信息,请参阅models/googlenews-slim/ATTRIBUTION.md文件。

GloVe词向量

本项目使用存储在models/glove目录中的GloVe词向量的处理版本。该作品根据Public Domain Dedication and License v1.0分发。有关模型、其原作者和许可证的更多信息,请参阅models/glove/ATTRIBUTION.md文件。

Fasttext词向量

本项目使用存储在models/fasttext目录中的fasttext词向量的处理版本。该作品根据Creative Commons Attribution-Share-Alike License 3.0分发。有关模型、其原作者和许可证的更多信息,请参阅models/fasttext/ATTRIBUTION.md文件。

网络上的模型来源

项目侧边栏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

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

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