ベクトル検索によるスコアとフルテキスト検索によるスコアを合算する検索手法
あれ
世の検索エンジンがベクトル検索を使ってるせいか知らんけども補正が強すぎる。
Xの方は字で検索してくれてる感じがあって「デススタバ」とか検索した時にしっくり来る結果が出てくる。
2023年で良かったコト・モノ
iPhone 15 Pro Max
顔認証なので、指先カッサカサの民でもサッとロック解除できる。良い。
Magic Trackpad
Macbookに備え付けのトラックパッドを使っていたら、痛みが出るレベルで猛烈な肩こりになった。いわゆる巻き肩?なので、肩を開いてPC操作できるようにすべく購入。使い始めてしばらくしたら、猛烈な肩こりでは無くなったので、仕事だと必須だと思う。
株
インフレがやべーので手を出した。三つ買って、今のところ全部上がってるので、ホクホクしている。もっと買う銘柄を増やしたい。
ビギナーズラックもいいとこで、そのうち大損を出すと思う。
職場の近くに引っ越した
徒歩17分。最高。ストレスフリーな生活。満員電車にはもう乗れない。
時差出勤も相まって、「起きたら適当に出社する」みたいな感じになっており、自由人感がある。フレックスになってくれたらもっといいのにとは思う。
副業を始めた
引っ越しとなんやかんやによって100万ほど貯金が減ったり、家賃が上がるわ物価が上がるわで収支がトントンでヤベェとなっていたところ、私が行っていた前の前の現場の人からお声がかかった。
業務はエーアイを使う研究開発をしている。今年に入ってエーアイで遊んでたのが役立って良かった。
本業で解雇されてもなんとかなるというのは精神的に安定感が出る。業務量は単純に増えるので体力的にはしんどい。
ベクトル検索
LLMで文章とかをベクトルに変換し、そのベクトルの類似度によって元の文章を検索できるという技術。
社会が「生成AIすげー」となってる裏で、地味にヤベー技術だと思う。どうヤベーかというと、ベクトルにできるなら、任意のメディアを任意のメディアで検索できるのだ。つまり、画像を文章で検索したり、3Dモデルを画像で検索したり、コンテンツをニンゲンで検索したりできる。理屈の上では。Multimodal Embeddingとかいうらしい。おもろ。
あと、文章を文章で検索するときには類義語とか、文章の意味とかを加味して検索してくれる。そんなんもうGoogle検索やんとなっており、時間ができたら自前の検索エンジンを作ってみたくなっている。
あれ
『[速報]Amazon DocumentDBおよびAmazon DynamoDBのベクトルサーチ機能が一般提供開始に!』
pgvector
あれ
knownetの曖昧検索
当初ベクトル検索を用いようとしていたが、検索速度や精度に問題が有るため取りやめた。
現在は検索語を分かち書きして、検索語を構成する句を含む投稿を取得、さらにその投稿と紐づく投稿を取得し、投稿のEmbeddingと検索語のEmbeddingのコサイン類似度で並び替えしている。
Embeddingの取得にはAmazon Bedrockを使っている。
『グラフを用いた近似最近傍探索の理論と応用』
ベクトルDB
あれ
いや、「ベクトル検索ぐらいマネージドサービスあるやろ」とはなるんだけど、たけーのよ。Azure Cognitive Searchとか、一番安いので月額1万円以上する。
DynamoDBとLambdaでやりくりすれば、維持費をほぼ0円、処理があっても月額100円ぐらいで何とかなるはずなんや。
で、そのために文章をベクトル化(Sentence Embedding)する処理が必要だったのだけどもですね、世のSentence Embeddingするライブラリやら言語モデル(BERTとか)やらはファイルサイズが巨大で、Lambda関数に乗り切らんかったわけです。
そこで、BERTを小型化したALBERTでSentence Embeddingが取れるように学習してたんですけども、やっとこさそれらしい結果が出せるようになってきた。
となると、次の課題はベクトル検索のDB部分なわけです。今はJavaScriptのライブラリを使ってるので速くないので、Go言語とかでやりたい。
というか、JavaScriptでのSentence Embeddingの計算は遅いはずなので、そこもGo言語に切り替えるうまみがあるはず。
あれ
ベクトル検索を高速化してぇわよ
Lambda関数の実行で500msもかかりよる
Node.jsからGoに変えるべきか
Microsoft、Azure OpenAI Service
『Microsoft、Azure OpenAI Serviceに自社データを取り込んで活用できる機能をプレビュー提供』
あれ
embedding
ニューラルネットワークなどを使ってデータをベクトルに変換したもの
knownetにベクトル検索を実装
Faiss
あれ
AWSでベクトル検索しようとするとAmazon OpenSearchとかいうのを使うのが正攻法なのだけど、OpenSearchはEC2インスタンスが立ち上がってしまって費用的にも労力的にも良くない。そこで、ベクトル検索ライブラリで生成したインデックスをAmazon DynamoDBのインデックスにすればサーバーレスで安価に運用できる気がしている。
未検証。できるかどうか不明。果たして、任意のインデックスをレコードに設定することができるのか?
というか、そういう機能をAWSが作るべきだと思う。作るでしょ。そのうち。