単語レベルの
誤字変換
――ある開発者が公開した検索のデモで
写真はイメージ Photo by Gabriel Mihalcea on Unsplash
SQLite公式のベクトル検索vec1、22万語2秒のデモを手元で動かす
9月30日、SQLiteのソースツリーに「vec1」という拡張が入った。ベクトル検索を、SQLiteの表として使える仕組みだ。入れたのは、全文検索のFTS5などでおなじみのDan Kennedy氏。中身はCのファイルが1本で約1万3000行、テストが50ファイルで約6700行ある。
なぜ本体に入ったのか。その理由は、出典では確かめられなかった。
10月11日、日本の開発者mattn氏が、日本語の辞書から約22万語をvec1に登録した例を公開した。音の近い言葉を探す検索だ。22万語の取り込みは「2秒程度」で終わったという。
「バナーナ」と打つと、バナナが出る
mattn氏の作り方は、こうだ。IPAdicという辞書から約22万語を取り出し、MeCabの辞書で読みを拾ってローマ字に直す。そこで音を丸める。lはrに、vはbに寄せ、同じ文字が続くところは1文字にする。
できた文字列を2〜3文字の断片に切り、ハッシュ関数で256個の箱に割り振って、箱ごとの個数を数える。この256個の数が、その語のベクトルだ。あとは、vec1に流し込むだけ。
「バナーナ」と渡すと、距離0.000で「バナナ」、0.091で「バーナー」、0.155で「万難」。
ここは勘違いしやすい。vec1は、言葉の意味が分かっているわけではない。音を数字に変えたから、音の近いものが並んだ。
22万件で2秒は速い。なぜか。mattn氏は「この程度の件数なら学習も量子化も要らず、全件比較 (flat) で十分です。」と書いている。vec1が本来持つ索引は、IVFADCという近似最近傍検索の方式だ。使う前に学習が要る。22万語の例は、その手前で止めている。だから登録は、数字を書き込むだけで済む。
手元で動かす手順は、2行から
SQLiteのソースツリーで ./configure と make sqlite3 vec1.so を打つだけ、とmattn氏は書いている。
表の作り方も短い。CREATE VIRTUAL TABLE v USING vec1; で仮想テーブルを1つ作る。そのあと rebuild という命令で、索引の種類と距離の測り方(ユークリッド距離かコサイン距離)を渡す。検索はSELECTの中で、ほしい件数をKで指定する。
では、すぐ仕事で使えるのか。vec1が返すバージョンは0.8だ。mattn氏は「実運用に投入するのはもう少し様子を見た方が良さそうです。」と書いている。Dan Kennedy氏自身も、3月30日の公式フォーラムに、テストがまったく足りていないと書いていた。
ネットの評判
はてなブックマークでは、10月11日の時点で181ユーザーが登録している。目立つのは、サーバーを立てずに、手元の文書だけでAIに答えさせる仕組み(RAG)に使いたい、という声だ。「今ちょうど、SQLiteでローカルRAGを作っているので、時間ができたら確認してみよう。」という書き込みがある。
「ニーズあるかな。」という一言もある。vec1は意味の近さを測っているわけではないから「小規模RAG向けかな。」と見る人もいた。
最後に、試す人への注意が1つ。vec1は、SQLiteのソースを1本にまとめたamalgamationには入っていない。make vec1.so と打ったときだけ作られる。自分でビルドするところからだ。
43万円の新型冷蔵庫、錆びて見える
Xで話題のアクア「AQR-DUX51B」
中止が4公演。倉敷は、無事に終わった
徳永英明、喉の不調からツアー復帰
40年仕入れてるけど、
こんな値は初めて
――エドノフーズの江戸野誠一郎社長
あなたへのおすすめ よく読むカテゴリーから
こちらの記事も
『はい』を押す前に、
中身読んでる?
――AIに許可を求められた人へ
AIに確認を任せたら人間より安全だった Claude Codeの既定が変わった
AIが速すぎて、人が渋滞の原因になった
Claudeのセッションの約8割は、人の入力待ち(Anthropicの公表)
AIが速すぎてコード工場が渋滞 Claudeのセッションの8割は「人待ち」
もう買い替えかな、
このパソコン
――AIにコードを書かせていた開発者が
Macの起動が20分、故障かと思ったら AIが残した99万ファイルだった
一行ずつは読まない。
意図だけ見る
――Anthropicが、AIの書いたコードを