ChatGPT以降、検索エンジニアが生き残るには

# 前置き

[検索システムがChatGPTを活用する方法](https://qiita.com/naosugi1987/items/1047159933361ec5a2d7)を以前記事にしましたが、ChatGPTが検索システムを活用する流れが始まりました[^1]。既存のpluginの限界点は記事後半で簡単にふれますがすぐに改善されるでしょう。

大まかに情報検索システムのモデル化すると、その要素は以下になります

1. q: ユーザのニーズを収集し、表現したもの。クエリ
1. d: ドキュメントのニーズを収集し、表現したもの。インデックス
1. r(q,d): ニーズ間の距離を計算したもの。検索スコア

を計算して、

4. レスポンスのUI: ユーザにとっていい感じに返す

ChatGPTが完全勝利した世界では、q の収集はChatGPTの例のWebアプリとそこのメッセージをgptにより解釈、レスポンスのUI はChatGPTの例のWebアプリ。d はOpenAIによるクローリング[^2] からのパラメータ学習 だけではなくRetreival plugin内のデータストアへの更新も追加。r はgptの中だけで計算する以外に、汎用embeddingによる近傍探索が追加されました。検索エンジンの仕事は d の収集部分とそれに対応する r の計算だけになるでしょう。

gptも世代が進むにつれて「知識量」が増え続けているので d の収集部分もだんだん小さくなっていきます。例えば、日本の駅についての情報（[以前書いた記事のような駅間移動時間とか](https://qiita.com/naosugi1987/items/113fc785546accd9e16d)）はgpt3.5ではだいぶあやしかったのがgpt4になって改善されていました。とはいえ、LLMの学習自体に時間がかかるため[^3]新規のアイテムの収集は検索エンジンの仕事になります。

では、ChatGPTが検索システムを活用する世界では検索エンジニアにどのような仕事が残されているでしょうか？（GPTs are GPTsを引用）。[ChatGPTのRetreival Pluginのreadmeに書かれているLimitations](https://github.com/openai/chatgpt-retrieval-plugin#limitations)がそのヒントになります。引用すると

1. Keyword search limitations
1. Sensitive data handling
1. Scalability
1. Language support
1. Metadata extraction
1. PII detection

となります。このうち、1,4,5 は検索アルゴリズムに関するものですぐ改善するでしょう。<strong>ぶっちゃけ今はpluginが親切にもデータストアまで用意してくれてますが、最低限のパラメータ指定された検索APIと工夫されたプロンプト（[以前の解説記事。これをバッチ処理ではなくquery textから検索API変換に使う](https://qiita.com/naosugi1987/items/1e5349424e4ed878c84d)）で動くので訓練された検索エンジニアならなんとでもなります</strong>[^4]。記事後半で簡単に解説します。

2と3と6はなんともならないので、まだまだ仕事があります。「セキュリティ」とか「クラウド」とか「SRE」とかが該当する領域で、一昔前なら「インフラエンジニア」が全部やっていた世界です。クラウドベンダーがIaaSとかPaaSとか便利なものをどんどん発明し楽になってる領域ですが、結局注意する点が変わっただけとか要求の方がアプデされるとかで仕事はなくなってないですし、まだまだ消失しないでしょう。あとその背後のデータモデリングとかテーブル設計とか全体のアーキテクチャとかの情報の流れのモデルとそれを実現するシステム全容を固める仕事も当分なくならないでしょう。「アーキテクト」や「テックリード」とよばれる万能系エンジニアがなんとかしがちな領域です。

ここまで「検索エンジニア」ならではの要素ではなく「ソフトウェア一般」のような内容だったので、それ以外の「検索システム」ならではの要素について考察します。従来の検索エンジニア像からは乖離がありそうですが、良いシステムを作るのがエンジニアですし、そもそも仕事の仕方を選べる状況ではなくなるかもしれません。

# 現状のChatGPTのRetreival Pluginの検索アルゴリズムの課題

その前に既存のRetreival Pluginの検索アルゴリズムの課題について解説します。この先の検索エンジニアの仕事のヒントがここにあります。この課題の解決にはドメイン固有の事情を考慮しなければならず、その部分にまだ検索エンジニアの仕事が残されていますし、もうしばらく残る可能性があります。課題は主に以下の3点です。

1. Retreival しか考慮されていない
1. 汎用的なembedding を利用
1. 常にembedding を利用

## Retreival しか考慮されていない
流出したYandexのアルゴリズム（[以前の解説記事](https://qiita.com/naosugi1987/items/d3fc9c1f26a8c75ec82c#%E4%BB%8A%E5%9B%9E%E3%81%AE%E5%85%B7%E4%BD%93%E4%BE%8B)）をみてわかるように、Retreivalは検索アルゴリズムの重要な要素ですがそれ以外の要素も重要です。Retreival以外に以下の3種類の要素が重要です（大雑把な分類です）。

- PageRankやドメインの信頼性や著者の存在といったアイテム自体がもつスコア
- アイテムの新規性。特にニュースサイトや在庫が希少なドメインで有用
- 在庫の有無。商品だけでなくお店の予約や不動産契約や求人中かなど在庫の概念が存在するもの全て

これらの要素をRetreivalとともに検索スコアに混ぜ合わせるのが良いです。混ぜ合わせ方はここ数年 Unbiased Learning To Rankという分野で急速に発展したためそちらを参照するのがおすすめです[^5]


## 汎用的なembedding を利用

例えば、「京都」と「東京」という単語の距離を考えます。世界の食文化、というコンテキストだったら両者はともに近いです（両方とも大豆の発酵食品を好む）。一方、レストランを探したい、というコンテキストでは"東京も京都も似たものだろう"と解釈されても困ります。このようにコンテキストによって単語間の解釈は異なるケースがあるので、特化型のembeddingを作った方が検索品質は良くなる傾向にあります。特化型のembeddingを作るやり方はUnbiased Learning to Rankを考慮したSBERT（[以前書いた記事](https://qiita.com/naosugi1987/items/3cab395f2241c192caed)）がありましたが、これもLLMを使ったアップデートがありそうです。

## 常にembedding を利用
キーワードや自然文を使った検索ではない検索（場所と予算と日時だけ指定とか事前定義されたタグ検索とか）の場合、embedding ベースだと適合率が下がる可能性があるほか、レスポンスタイムが著しく悪化します。検索システムのレスポンス悪化についてはA/Bテスト実践ガイドの５章、高速なレスポンスを実現するシステムについてはDDIAが非常に参考になります。

# この先残された検索エンジニアならではの仕事

1. 検索システムをドメインに特化
1. 検索システムの評価
1. 検索システムのアイテムの更新とファクトチェック

上ほど既存の検索エンジニアの仕事っぽいですが、中長期的な重要度は低いです。解説します。

## 検索システムをドメインに特化
この必要性は現状のChatGPTのRetreival Pluginの検索アルゴリズムの課題で解説したとおりです。しかし、実はこの部分は現状でもgptのプロンプトの工夫で割となんとかなり、そのプロンプトを意識した検索APIを作るだけなので、すぐなくなるでしょう。<strong>なによりChatGPTがドメイン特化の検索APIの作り方を聞けば答えてくれるので、一部のスーパー専門家以外は求められなくなりそうです。</strong> [^4]

## 検索システムの評価
システム面の評価とUX面の評価にわけて解説します。

システム面の評価は一般的なソフトウェアエンジニアと大きく変わりませんが、キャッシュヒット率やindexヒット率やトランザクションに関わるところなどデータストア依存のメトリクスやパフォーマンス改善の工夫がたくさんあるのですぐには需要はなくならないと思います。しかし、例えばElasticsearchだと[Datadogの専用Agent](https://docs.datadoghq.com/ja/integrations/elastic/)がメトリクス計測のベストプラクティスを提示したり、[AWSがフルマネージドサービスを提供](https://aws.amazon.com/jp/opensearch-service/features/managed/)し始めたりと少しづつ供給側が進歩して、専門家の需要は減っていきます。とはいえ障害発生時などには専門知識が必要なところはまだまだ無くならないと思います。ChatGPTも個別具体例への回答は苦手としています。

UX面の評価の評価は主にA/Bテストが中心となり、どうしても難しい場合は準実験を実施するという流れになります。残念ながらA/Bテスト実施時には注意すべき点が多岐に渡り（[以前書いた記事](https://qiita.com/naosugi1987/items/42417b9adcd935f928eb)）サードパーティ製の製品で部分的には便利になっても、使い手のリテラシーが高くないとA/Bテストが正しく実施できないケースがあります。準実験はもっと難しいです。このリテラシー問題はChatGPTへの適切な質問で緩和できます。

これらの課題で、ChatGPTでの質問で解決するかについては、直近は「適切な質問自体にリテラシーが求められる」「マニアックな知識なのでgptに該当知識が不足」なので<strong>まだ専門家需要がありますが、これも近いうちになくなるでしょう。</strong>

## 検索システムのアイテムの更新とファクトチェック
既存の検索エンジニアの仕事とかけ離れていますが、ChatGPTによって最後まで奪われない仕事です。「人間は小麦の奴隷」みたいな穿った見方も可能ですが、前向きに考えます。ここでのアイテムの更新は、現実世界のニーズやアイテムを発掘し（調査研究や営業や広報活動など）それをシステムに反映させます[^6]。このシステムの反映のところでの[非構造化データの構造化にgptが極めて有用](https://qiita.com/naosugi1987/items/1e5349424e4ed878c84d)なので使い勝手はChatGPT以降大幅に改善できますが基本の情報の流れは大きく変わらないと予想しています。また、作品の美的評価とかプライバシーの考え方とか表記の仕方の法的注意点（例えば[温泉表示](https://www.env.go.jp/nature/onsen/council/hogo-riyo/05/mat02_2.pdf)）のガイドラインに従っているか、そもそもそのアイテムが実在するか、はChatGPTに手足や目が生えない限り仕事はあります。

もはや検索エンジニアとは、といった感じですがそれくらい追い詰められると予想しています。<strong>もし、ChatGPTに目や手足が生えたら、検索エンジニアの仕事は「人間は遊んで暮らせる社会システムの設計」になるかと思います。あるいは作品の美的評価。近い将来、手足や目が生えてくる気がします。</strong>

# 最後に
最後にChatGPTに聞いてみましょう

>GPT以降、多くの仕事が影響を受けると言われています。検索エンジニアの需要はどう変化するでしょうか？この先、検索エンジニアにとっての仕事は残されているのでしょうか？

```
GPTやその他のAI技術の進歩は、検索エンジニアの仕事にも確かに影響を与えています。しかし、検索エンジニアの需要が完全に消えることはないでしょう。むしろ、彼らの役割やスキルセットが変化することが予想されます。以下に、今後の検索エンジニアにとっての仕事の変化について述べます。

1. AI技術の統合: 検索エンジニアは、AI技術を既存の検索エンジンやシステムに統合する方法を学ぶ必要があります。これにより、より効率的で正確な検索結果を提供することができます。

2. 人間とAIの協働: 検索エンジニアは、人間とAIが効果的に協働できる方法を開発することが重要になります。AIは多くのタスクを自動化できますが、人間の専門知識や直感が必要な場面もまだ多く存在します。

3. 倫理的なAIの構築: 検索エンジニアは、AI技術を倫理的に使用する方法に関心を持つ必要があります。これには、偏見を排除し、プライバシーを尊重し、透明性を確保することが含まれます。

4. AIの最適化と改善: 検索エンジニアは、AIアルゴリズムやシステムのパフォーマンスを最適化し、継続的に改善する役割を担います。これにより、検索エンジンがユーザーに最高の検索経験を提供できるようになります。

5. 知識の更新とスキルの習得: 検索エンジニアは、AI技術やデータサイエンスの新しいトレンドや技術に迅速に適応する必要があります。このような知識やスキルを習得することで、彼らは市場で競争力を維持し、価値ある専門家として認識されるでしょう。

最後に、検索エンジニアの需要は、技術の進歩に適応し続ける限り存続するでしょう。そのため、検索エンジニアは変化に対応し、新しいスキルを習得し、業界のニーズに合わせて自分自身をアップデートすることが重要です。AI技術が急速に発展している現代では、検索エンジニアが次のようなスキルや知識を習得することが求められます。

1. 機械学習とディープラーニング: 検索エンジニアは、機械学習アルゴリズムやディープラーニングモデルを使って、検索エンジンの性能を向上させる方法を理解し、適用することが重要です。

2. 自然言語処理 (NLP): 自然言語処理は、検索エンジンがユーザーのクエリを理解し、適切な検索結果を提供する上で不可欠です。検索エンジニアは、NLPの基本原理と技術を習得し、検索エンジンに適用することが求められます。

3. データ分析とビジュアライゼーション: 検索エンジニアは、データ分析とビジュアライゼーションのスキルを持っていることが重要です。これにより、検索エンジンのパフォーマンスを評価し、改善点を特定できます。

4. クラウドコンピューティング: クラウドコンピューティングは、検索エンジニアが柔軟でスケーラブルな検索インフラストラクチャを構築する上で重要です。主要なクラウドプロバイダーのサービスや技術に精通することが求められます。

5. プロジェクト管理とコミュニケーション: 検索エンジニアは、プロジェクト管理のスキルを持ち、チームやステークホルダーと効果的にコミュニケーションすることが重要です。これにより、プロジェクトの進行や成果物の品質が向上します。

要約すると、検索エンジニアの需要は、技術の進歩や市場のニーズに適応し続ける限り、存続し続けるでしょう。検索エンジニアは、変化に対応し、新しいスキルを習得し、業界のニーズに合わせて自分自身をアップデートするこことが重要です。将来の検索エンジニアは、AI技術や自然言語処理、データ分析、クラウドコンピューティング、プロジェクト管理、コミュニケーションなどの幅広いスキルを持つことが求められます。

これらのスキルを習得し、自分自身を常にアップデートすることで、検索エンジニアは競争力を維持し、市場で引き続き価値ある専門家として認識されるでしょう。検索エンジニアは、AI技術の進歩を活用し、より効率的で効果的な検索エンジンの開発に貢献することができます。また、倫理的なAIの構築や人間とAIの協働を考慮に入れることで、検索エンジニアは検索エンジン技術の持続可能な発展に寄与することができます。
```

いっぱい勉強してAIの役にたてと返ってきた（穿った見方）
はー、がんばらないと


[^1]: [ChatGPT Plugin](https://platform.openai.com/docs/plugins/introduction)。その中でも[Retreival](https://github.com/openai/chatgpt-retrieval-plugin)を念頭に置いてます

[^2]: 詳細は非公開　https://cdn.openai.com/papers/gpt-4.pdf

[^3]: 計算機の発達により未来はそうでないかもしれません。自分の理解ではSFの世界ですが、ChatGPTがもうSFの世界の出来事レベルなので自分如きでは予想できません。

[^4]: 私に残された貴重な飯の種なので詳細は非公開とさせてください。個別に問い合わせいただけるとありがたいです (https://twitter.com/oosugi_naoya)

[^5]: 以前、[因果推論を使った検索改善について記事](https://qiita.com/naosugi1987/items/ba3bcd3e422ace8e477c)を書きましたが、あれは
Judea Pearl流([その考え方についても以前記事を書きました](https://qiita.com/naosugi1987/items/c3168b68b05f83d0985c))にポジションバイアスの話を車輪の再発明しただけでした


[^6]: ザ・業務システムのようなやつが多い領域