こちらはエムスリー Advent Calendar 2022 Advent Calendar 2022の延長戦31日目の記事です。
エムスリーエンジニアリンググループ AI・機械学習チームでソフトウェアエンジニアをしている中村(po3rin) です。検索とGoが好きです。
検索エンジニアってどこで採用できるの? という話を至る所でよく聞きます。僕自身も、自ら検索エンジニアと名乗るエンジニアにほとんど出会ったことがありません。やはり、世の中の検索にまだ魅了されていないエンジニアを情報検索の世界に引き込むしかないので、今回は僕が情報検索にハマった経緯を紹介することで一人でも多くのエンジニアを情報検索の世界に引き込めればと思います。
情報検索との出会い
僕が最初に情報検索に出会ったのは前職の白ヤギコーポレーションでした。そこではElasticsearchを主に検索エンジンとして採用していました。
そこで上司から転置インデックスや形態素解析で使うダブル配列や最小コスト法などの説明を受けました。
日々使っている検索の機能が上記のようなような洗礼されたアルゴリズムやデータ構造の集合体で出来ていることに衝撃を受けました。
転置インデックスなどのデータ構造はもちろん、転置インデックスを圧縮するためのアルゴリズム、自然言語処理の知識や機械学習、検索の評価など、検索のために学ぶことは非常に多岐にわたり、当時の何も知識もない僕がその深闇に魅了されるまでに時間はかかりませんでした。エンジニアの知的好奇心を存分に満たしてくれる存在、それが僕にとっての情報検索でした。
情報検索の探索
情報検索に興味を持った後に、僕がどのように情報検索を学んでいったかを紹介します。この方法がおすすめというわけではなく、僕はこういうフローだったという紹介になります。
まず僕が触れたのは自然言語処理でした。上司に紹介された下記の本で初めて自然言語処理に触れました。この本では難しい数式などがほとんどなく、形態素解析や、意味解析、転置インデックスなどを学べるので、ファーストステップとしてはおすすめです。
上記の本で形態素解析に興味を持った自分は更に下記の本を読みました。
上記の本は形態素解析に最も詳しい日本語の書籍だと思います。最小コスト法だけでなく、点推定や未知語の処理、形態素解析の高速化のための工夫などかなり詳しく書かれています。
ここまでざっくりと検索に必要なことを学ぶのと並行に、実際にElasticsearchを使って検索基盤を開発していました。Elasticsearchに関しては下記の本で広くキャッチアップできたのがよかったです。(ちょっとバージョンは古いですが不変の情報がほとんどです。)
上記の本では初心者がハマりやすいElasticsearchの分散システムの仕組みや、インデックス管理などがしっかり書かれてておすすめです。
ここまででElasticsearchの内部をざっくりと理解した上で検索基盤を構築することが出来ていました。ここまでくると検索の評価がしたくなってくる頃合いです。下記の書籍が検索の評価だけを論じているイカした書籍です。こちらは基本的な評価指標から、応用レベルの検索指標まで紹介されており非常に有用です。
より検索を探求するために、エムスリーで開かれていたLucene/Elasticsearchコードリーディング会なども良い勉強になりました。下記はその勉強会で各々が学んだことをアウトプットした記事になります。このように検索について一緒に学べる仲間がいる環境というのは検索エンジニアにとっては嬉しいですね。
そして、これらの知識を引っ提げて実務でバリバリ検索基盤を開発していくために下記の書籍も読みました。
こちらはかなり実務に寄り添っており、検索基盤を立ち上げる時に気を付けるポイントや検索インターフェースをどうすれば良いかなどがまとまっており、実務で検索をやるなら必見です。ここまでの知識で検索エンジニアとしてはある程度の自信はついてきました。
発展
もっと検索について知りたくなった僕は下記のような情報源にも手を出していました。
こちらは実際に検索アルゴリズムを実装するためのガチの情報が万歳です。動的に転置インデックスを更新する方法や、転置インデックスの圧縮方法、言語モデルから導く各種検索手法などはかなり面白いです。この辺りは実務で使うためというよりも趣味で勉強していました。
また、検索体験を向上させるためのQuery Understandingという分野にも興味を持ち調べていました。Query Understandingって何?という方は下記の記事を読んでみると良いでしょう。
Query Understandingに関して最も詳しい書籍が下記になります。
この本で、実際に検索タスク抽出の実装を試した話を過去の技術書展で流布しているので、もし興味があれば読んでみてください。 www.m3tech.blog
更に機械学習を使った検索やリランキングも非常に面白い分野です。僕は機械学習専門ではないですが、検索に使えそうな情報はなるべくキャッチアップするようにしています。
僕は機械学習に関してはど素人だったので、下記の書籍などで知識を補完する必要がありました。機械学習系の書籍は他にも読みましたが、本当に知識ゼロのソフトウェアエンジニアが検索を実装していく中で機械学習に興味を持った場合の一歩目としては下記の書籍がよかったです。
エムスリーではSIGIRやRECSYSなどの情報検索に関わるカンファレンスの論文輪読会などが開催されています。ソフトウェアエンジニアとしてはガチのMLエンジニアがどのようなポイントに注目しているかなどの視点が勉強になりました。
他にも情報検索に関するたくさんの書籍や記事があると思いますが、これまで僕が検索エンジニアとして成長できたメインとなる読み物を紹介しました。
まとめ
ここまでソフトウェアエンジニアの僕が検索に魅了されていったフローを紹介しました。やはり情報検索は、各種アルゴリズムやデータ構造など 、人間の叡智の結晶であり、エンジニアの知的好奇心を存分に満たしてくれる存在だと思います。検索についてあまり触れて来なかったみなさんも是非、情報検索の深闇を覗いてみてください。
AI・機械学習チームでは情報検索/推薦分野のタスクが多く、今回紹介したようにチーム内の技術共有会なども活発です。「ちょっと話を聞いてみたいかも」という人はこちらから! jobs.m3.com