単語レベルの
誤字変換

――ある開発者が公開した検索のデモで

写真はイメージ Photo by Gabriel Mihalcea on Unsplash

10/11 18:52 / 発信国:日本

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は、言葉の意味が分かっているわけではない。音を数字に変えたから、音の近いものが並んだ。

ノートパソコンに映るプログラムの画面
写真はイメージ Photo by Arnold Francisca on Unsplash

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公演。倉敷は、無事に終わった

徳永英明、喉の不調からツアー復帰

ジャンルを変えて「エンタメ」から。いま読まれています 徳永英明、喉の不調から復帰 倉敷公演を無事に終える 中止4公演はどうなる?

40年仕入れてるけど、
こんな値は初めて

――エドノフーズの江戸野誠一郎社長

ジャンルを変えて「政治経済」から。いま読まれています 銚子のサバ加工、約2割が倒産や廃業 国産に替える道はあるのか
出典

いま読まれている記事

  1. 12040年度までに県立高145校減 富山県は「閉校」の表現をやめた
  2. 2「PayPayで十分」は本当? JR東「teppay」の還元率を比べてみた
  3. 3「ブルーウォーカーにスマホ乗っ取られた」 ラヴィット!6年目で初の遅刻
  4. 4タイ王妃が737を7時間操縦して北海道へ 冷ややかな声は、なぜ出てこないのか
  5. 53位DeNAが日本シリーズへ 今年できた「2勝アドバンテージ」はなぜ使われなかった
← トップへ戻る