Semantic Grep - Word2Vecベースの検索ツール
(github.com/arunsupe)- sgrepは単語埋め込みを使って、テキスト入力に対するセマンティック検索を行うコマンドラインツール
- 単純な文字列マッチングを超えて、クエリに対して意味的に近い一致を見つける
- grepに似た使い勝手を提供するよう設計されている
- 機能
- Word2Vec埋め込みを使ったセマンティック検索
- 類似度しきい値の設定が可能
- 一致した行の前後の文脈を表示
- 一致した単語と行番号を色分けして出力
- ファイルまたは標準入力からの読み込みをサポート
- JSONファイルおよびコマンドライン引数による設定が可能
- 使用例
- ヘミングウェイの『老人と海』で "death" に類似した単語を、文脈と行番号付きで検索:
curl -s 'https://gutenberg.ca/ebooks/hemingwaye-oldmanandthesea/…' \ | sgrep -C 2 -n -threshold 0.55 death - このコマンドは次のことを行う:
- Project Gutenberg Canadaから『老人と海』のテキストを取得
- テキストをsgrepにパイプ
- "death" と意味的に類似した単語を検索
- 類似度しきい値を0.55に設定 (-threshold 0.55)
- 各一致の前後2行の文脈を表示 (-C 2)
- 行番号を表示 (-n)
- 出力には、類似度スコア、強調表示された単語、文脈、行番号が示される
- ヘミングウェイの『老人と海』で "death" に類似した単語を、文脈と行番号付きで検索:
- Word2Vecモデル
- sgrepにはバイナリ形式のWord2Vecモデルが必要。GoogleのWord2Vecモデルのような事前学習済みモデルを使うことも、gensimのようなツールで自分で学習することもできる
- .binファイルをローカルにダウンロードしてconfig.jsonを更新
- GoogleのWord2Vec: https://github.com/mmihaltz/word2vec-GoogleNews-vectors
- スリム版: GoogleNews-vectors-negative300-SLIM.bin.gz モデル https://github.com/eyaler/word2vec-slim/ (eyaler提供)
- download-model.sh は、eyalerがホストしている小さなword2vecモデルを models/googlenews-slim/ ディレクトリに保存するためのシンプルなヘルパースクリプト
GN⁺のまとめ
- sgrepは単語埋め込みを使って、テキスト内の意味的に類似した単語を検索するツール
- grepに似た使用感を提供しつつ、単純な文字列マッチングを超える機能を備えている
- Word2Vecモデルを使って類似性を判定し、さまざまな設定オプションによって柔軟に利用できる
- テキスト分析や自然言語処理の作業で有用であり、特に文脈ベースの検索が必要な場合に強力なツール
1件のコメント
Hacker Newsの意見
コードを読みながら、いくつかの小さなヒントを共有している
このアイデアはとても有用で、なぜ今まで思いつかなかったのかと思う
semgrepというツールと会社がすでに存在する
このツールが説明的なフレーズや複合フレーズを処理できるなら、とても有用だろう
とてもクールなツールだ
このツールはとてもクールで、ぜひ使ってみたい
類似ツールとしてfltrを提案している
とてもクールで、ファイル名も検索できるのか気になる
とてもクールなツールを見つけた