Search Engineering Newsletter vol.10

節目となる 10 回目のニュースレター配信です。 今回のイチオシ記事は ABEJA さんの「GPT モデルへの道のり」とメルカリさんの「お手軽な検索 API 構築」記事です。 Search How we’re improving search results when you use quotes - Google Google、引用符による完全一致検索結果をフレーズを中心に表示するよう改善 - PC Watch ダブルクォートを使った完全一致検索を行う際に、web ページのヘッダーや URL などは検索対象外になることで、Google の Web 検索体験を改善した。 厳格なテスト – Google 検索の仕組み Google 検索がどのようにテスト・評価を行っているか。 2021 年に、約 4000 件の変更、約 11000 件の AB テストを行っているらしく驚き。 簡単に逆算しても月間に 900 件 AB テスト???をやっていることになるのだが、どんなことをすればこんな数の AB テストを実行可能になるのだろうか…。 例えば、一つの AB テストで、セグメントと 5 分割したからこれを5回としますならわかるけど、それでも月間に 180 回の AB テストなので現実味がないですね。 Google 検索に関わるエンジニアの数が全体でどれくらいいるのか気になりますが、この成果はさすが世界最大規模の検索エンジンですね。 お手軽な検索 API 構築 | メルカリエンジニアリング...

September 8, 2022 Â· Shunya Ueta

Meta が公開したデータ処理の効率化・高速化を狙うエンジン Velox が面白そう

日課の RSS フィードを眺めていると、クエリエンジンやデータ処理の最適化のための高速化ライブラリが Meta が OSS として公開した1 のを知った。 Velox のリポジトリはこちら facebookincubator/velox: A C++ vectorized database acceleration library aimed to optimizing query engines and data processing systems. 実際にリポジトリを観てみると C++で書かれており、たしかにパフォーマンスが高いのが納得。 ドキュメントやチュートリアルなどはこちらのサイトで用意されています。 Hello from Velox | Velox Meta 社内では、Presto や Spark に適用して処理の高速化、PyTorch に活用して前処理や特徴量エンジニアリングの高速化が進められているらしいです。 技術ブログ記事 1が何をやっているか明瞭なので、かいつまんでメモを残しておきます。 SQL の分析、ストリーミング処理や機械学習のためのデータ処理など実際の処理内容は似通っているが、様々なフレームワークが使われ、独立して進化している。 この断片化によって、保守と拡張が困難になっていたが、それらを統合する形で実行可能にするのが Verox Presto, Spark などのデータ処理エンジンは、一見異なるように見えるが、レイヤー構造で考えると非常に似通っている。 Verox は一般的に実行エンジンレイヤーの代わりとなり、式評価、集約、ソート、結合などの処理を提供する。(一般的に data plane と呼ばれる) 実例と結果 Presto は Java で実行されるが、それを C++の Velox で置き換えた。Prestissimo というプロジェクト名で進んだ。(カッコいいね) Java での実行と比べると、大体 6 倍ほど高速化された Spark 上では、Gluten とよばれるプロジェクトで Velox と同じように C++での実行を試みるプロジェクトが公開されている。 PyTorch の TorchArrowを Velox 上で実行可能 最終的には、Velox で従来のデータマネジメントの部分と機械学習インフラストラクチャの部分の垣根を統一することを狙っている。...

September 1, 2022 Â· Shunya Ueta

Search Engineering Newsletter vol.09

今回のイチオシ記事は、Doug さんの What is a Relevance Engineer? と Ubie さんの Esqa の記事です。 Search Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜 ubie-oss/esqaという Elasticsearch の検索品質をテストできる OSS の紹介。 検索結果に対して、アサーションや過去と現在のランキングの比較を距離として計算してしきい値以上で計算する事ができるらしい。 検索結果のチューニングの辛い点をできるだけ緩和できそうで、これは便利そう。ステートフルなシステムである検索システムをデグレなどを考慮して日々のメンテナンスするの大変ですよね… What is a Relevance Engineer? - OpenSource Connections 日本だとあまり聞き慣れない Relevance Engineer という Job Role ですが、Relevance Engineer に求められる職務内容ってなんだろうと Doug Turnbull さん(Relevant Searchの著者)が執筆した記事。 一般的に日本だと検索エンジニアでひとくくりにされていますが、海外だともう少し細分化されるみたいですね。 Relevance Engineer は、システムの正確性/関連性(Relevance)とパフォーマンス/安定性の間のスイートスポットにまたがる 8 割の問題は、Relevance Engineer は最先端の手法は追いかけず、伝統的な手法で解決する(BM25, Learning to Rank)。なぜならメンテナンス性、スケーラビリティが共に優れているからである 2 割の問題は、先進的な技術を適用する必要がある。NLP や IR 領域の先端事例を常に把握して、その適用を試みる。 Relevance Engineer の業務はデータ中心である Relevance Engineer はデータ駆動で課題を解決する。意思決定は Relevance 指標, performance metrics を基準に行う。 また、Relevance 指標は一概に Ground Truth を決定できないこともある。その場合は、ドメインエキスパートと協業して、顧客がなぜその結果を好んでいるのかを理解して、データを作って行く必要がある。 Relevance Engineer は、Kaggle や学会の課題ではなく実際の企業や顧客の検索課題を解決する。これが意味するのは精度と同程度にシステム面のパフォーマンスにも関心を持っていることを意味する。 Machine Learning Engineer vs Relevance Engineer 最大の差異は、機械学習に焦点を当てているのか、情報検索に焦点をあてているのか また、Relevance Engineer は検索システムを通じて密接に顧客体験に影響を与えるので、それらを考慮する必要がある。 NOTE: ML Engineer も考慮する必要があると思うので、若干ポジショントーク感が強く感じますね。 Interview Questions for Search Relevance Engineers, Data Scientists, and Product Managers | by Daniel Tunkelang | Medium...

August 24, 2022 Â· Shunya Ueta

Java の memory map を理解する

Apache Lucene のインデックスの取り扱いについて勉強していたら、 Java の memory map について言及されていたが、Jave の memory map1 について日本語で分かりやすく解説されている記事がなかったので、勉強がてらまとめた。 メモリマップ自体の説明はこちらのサイトが非常にわかりやすかった2 mmap はファイルとメモリーアドレスのマッピングを行う つまり、ファイルをメモリ上にマップ(射影)してメモリ上でファイルを扱えるようにするということですね。 Apache Lucene の使用例だと、Lucene の検索用のインデックスファイルを MMap でメモリ上にマップして扱えるようにしていそう。 参考にしたのは上記2つの記事がわかりやすい記事だった。 Java プログラムに関連するメモリは 4 部分から構成される3 Stack: メソッドが呼ばれた際に、Stack はメソッドを完了させるためのメモリ空間を提供する。この空間はパラメータやローカル変数、現在のオブジェクトへの参照などが格納されている。Frame はメモリ空間を参照し、メソッドの呼び出しをサポートする。Stack は LIFO(Last in First out)方式で動作し、呼び出し基のメソッドの Stack frame を削除するために最後の Stack frame(現在実行中のメソッド) を削除する必要がある。 Heap: Java で作成されるオブジェクトは全て Heap で作成される。 Static Area: プログラムの実行中に存在する値を格納するメモリを参照する。静的な変数を宣言した際に、この領域に存在する。 Code: 実行されるコードが格納される場所。 中でも Java の Memory mapped file は、メモリから直接ファイルにアクセスするのに役立つ Java の特殊ファイル4。 Java は、java.nio パッケージで Memory mapped file をサポートしている。 Memory mapped I/O は、ファイル システムを使用して、ユーザーから直接ファイルシステムページへの仮想メモリマッピング(virtual memory mapping)を確立する。Memory mapped file は単純に大きな配列として扱うことができ、Memory mapped file に使用されるメモリーは、Java の Heap 空間外部が利用される。...

August 22, 2022 Â· Shunya Ueta

Apache Beam 2.40 で導入された scikit-lean, Pytorch の効率的な推論が可能になる RunInference API を試してみる

2022-07-21 に Google Cloud が Cloud DataFlow の新機能として、DataFlow ML という新機能を発表した。1 Dataflow ML - Speaking of ML transforms, Dataflow now has added out of the box support for running PyTorch and scikit-learn models directly within the pipeline. The new RunInference transform enables simplicity by allowing models to be used in production pipelines with very little code. These features are in addition to Dataflow’s existing ML capabilities such as GPU support and the pre and post processing system for ML training, either directly or via frameworks such as Tensorflow Extended (TFX)....

August 18, 2022 Â· Shunya Ueta