情報検索・検索技術 Advent Calendar 2022 を開催します

2021 年に引き続き、2022 年も情報検索・検索技術 Advent Calendar を作ってみました。 情報検索・検索技術 Advent Calendar 2022 - Adventar kivantium さんの 創作+機械学習 Advent Calendar 2022 を開催します - kivantium 活動日記 の記事がいいなと思ったので、僕も自分の Blog で告知しておきます。 2021 年にアドベントカレンダーを作成したきっかけとしては、そもそもブログ記事の執筆が自分は好き他人が書いた記事を読むのは楽しい。 アドベントカレンダーの文化はそういう自分の嗜好にぴったりなので、自分の好きな検索技術領域がまだ作られていない! 作らねば! というのがモチベーションでした。 実際のところ、検索技術に携わってはいるが、Blog 記事をあまり書かない人もアドベントカレンダー起因で記事を書くきっかけになっているじゃないかなと思っています。 現時点で 登録数 12/25人となっています。ご登録頂いた方々ありがとうございます! みんなでワイワイ投稿して盛り上げていきましょう。

November 5, 2022 · Shunya Ueta

env Studio No such file or directory というVisual Studio Code 起因のエラーへの対処方法

VSCode をcodeコマンドから実行可能にするとPATHに Visual Studio Code の空白スペースが含まれてしまうことが原因でこのエラーが発生する。 具体的には VSCcode の PATH が以下のように登録されてしまっている。 1 PATH = ...PATH:/Applications/Applications/Visual Studio Code.app/Contents/Resources/app/bin 自分が遭遇したエラーは、環境変数を参照する make コマンドで 1 2 make test env: Studio: No such file or directory というエラーが出てくるようになり、make task が実行できなくなってしまった。 原因として自分の場合は、brew で VSCode をインストールしなおしたら、このエラーが出てくるようになった。 対処方法 公式ページに書いてあるとおりの方式1でパスを通せば解決する。 具体的に解説すると VS Code を起動 コマンドパレット(Cmd+Shift+P)を開いて、shell commandと打ち込み、Shell Command: Install 'code' command in PATH を選択して実行 でこのエラーが出てこなくなる。 もしくは、ダブルクォーテーションでPATHを登録すればこの問題は回避可能 1 export PATH="\$PATH:/Applications/Visual Studio Code.app/Contents/Resources/app/bin" Visual Studio Code on macOS You can also run VS Code from the terminal by typing ‘code’ after adding it to the path:...

November 4, 2022 · Shunya Ueta
従来の検索結果、近似近傍探索、ハイブリッド検索の比較

Elasticsearch 8.4 から利用可能な従来の検索機能と近似近傍探索を組み合わせたハイブリッド検索を試す

表題の通り、Elasticsearch 8.4 から待望の近似近傍探索と従来の検索を組み合わたハイブリッド検索が可能になったらしいので、試してみました。 Elascticsearch 8 で導入された近似近傍探索について Elasticsearch 公式の記事1がわかりやすく近似近傍探索について語られています。 また、日本語では@pakio さんの紹介記事2も非常にわかりやすいので、そちらも御覧ください。 嬉しいけど物足りない点 公式の資料3や@pakio さんの資料でも触れられていますが、 You can’t currently use the Query DSL to filter documents for an approximate kNN search. If you need to filter the documents, consider using exact kNN instead. Elasticsearch の Query DSL との併用不可というのが物足りない点でした。 端的に説明すると Elasticsearch 8 で利用可能になった近似近傍探索は、あくまでベクトル間のみの近似近傍探索のみできるのであって、従来の Elasticsearch の検索機能(term や filter)と近似近傍探索を組み合わせて検索できないということです。 Vespa の開発者の Jo さんも同様の点4について触れていました。 The most surprising part of the announcement is that they won’t allow combining the nearest neighbor search with standard query terms and filters....

October 29, 2022 · Shunya Ueta
デモアプリの動画

Elasticsearchの近似近傍探索を使って、ドラえもんのひみつ道具検索エンジンを作ってみた

Elasticsearch 8 系から使用可能になった近似近傍探索1を使って、ドラえもんのひみつ道具の自然言語検索ができる検索エンジンを作ってみた。 デモ動画のように、検索したいひみつ道具を説明する文章することで近しいひみつ道具が検索されます。 コードは GitHub に公開してあるので、興味のある方は手元で、動かして遊ぶことが出来ます。 poetry と Docker さえあれば動くようになっています。 hurutoriya/doraemon-himitsu-dogu-search: Doraemon Himitsu Dogu Japanese semantic search based on Elascticsearch ANN システムの概要図はこんな感じ 所感 ドラえもんのひみつ道具のデータセットを今回1から作ったが、パースと前処理がめんどくさくてここが一番手間がかかった。が、工夫しないと出来なかったので、一番楽しいところでもあった。 文章の特徴抽出は、sonoisa/sentence-bert-base-ja-mean-tokens-v2 · Hugging Faceを使わせていただき、驚くほど簡単に実現できた。 実際はもっと精度を高めるには、fine tune などがいいのだろうが、システム側を作ることに注力したかったので今回は割愛 デモアプリの構築は streamlit を使って 20m くらいで作れたので、相変わらず便利すぎて愛用している。今回の検索エンジンは CLI から実行もできるが、こうやってデモアプリがあったほうがそれっぽくて気持ちいい。 インデキシング時にトーカナイザーのことなど全く考えずに特徴ベクトルだけインデキシングして、それで検索が成り立つというのは新鮮。閾値設定しなければゼロヒット問題にも直面しないので、できることの幅は広がりそう。 Elasticsearch の近似近傍探索は、今回ベクトル同士の近似近傍探索しかやっていないが、それもインデキシング、クエリ部分は公式ドキュメントを見れば事足りたので変にハマることはなかった。 クエリ部分はこれだけで書けた。 1 2 3 4 5 6 7 8 9 10 query = { "knn": { "field": "vector", "query_vector": sentence_embeddings[0], "k": 10, "num_candidates": 100, }, "fields": ["name", "description"], } result = es....

October 23, 2022 · Shunya Ueta

CloudComposer の Variables (環境変数)を gcloud cli で取得する

Airflow 1 系で設定されている環境変数を JSON ファイルとして GUI を使って書き出す方法の続報です。 前回、Airflow CLI からでも環境変数を JSON ファイルとして出力できる1が、手元から実行しても GCP 上のインスタンスにしか保存されなかったので諦めたと書きました。 ですが、その問題を解決できたので、解決方法を公開しておきます。 Cloud Storage に格納されるデータ | Cloud Composer | Google Cloudによると、Cloud Composer インスタンス内部のディレクトリは GCS にマッピングされているらしい。 マッピング関係は以下( GCP のドキュメントをそのまま引用) フォルダ Storage パス マッピングされたディレクトリ 説明 DAG gs://bucket-name/dags /home/airflow/gcs/dags 環境の DAG を保存します。このフォルダ内の DAG のみが環境にスケジュールされます。 プラグイン gs://bucket-name/plugins /home/airflow/gcs/plugins カスタム プラグインを保存します。カスタムのインハウス Airflow 演算子、フック、センサー、インターフェースなどです。 データ gs://bucket-name/data /home/airflow/gcs/data タスクが生成して使用するデータを保存します。このフォルダは、すべてのワーカーノードにマウントされます。 ログ gs://bucket-name/logs タスクの Airflow ログを保存します。ログは Airflow ウェブ インターフェースでも利用できます。 それを使えば、/home/airflow/gcs/data にファイルを保存すれば、CloudComposer が保有している GCS の gs://bucket-name/data にアクセスすれば、そのファイルが参照可能になる。...

October 17, 2022 · Shunya Ueta