タグ

ブックマーク / yoshoku.hatenablog.com (5)

  • 近似最近傍探索ライブラリHnswlibのRuby bindingを作った - 洋食の日記

    はじめに Hnswlibは、C++で書かれたHierarchical Navigable Small World graphsによる近似最近傍探索ライブラリである。近似最近棒探索のベンチマークでも上位に登場する。Ruby bindingがなかったので作成した。 hnswlib | RubyGems.org | your community gem host 使い方 インストールは、普通にgemコマンドでインストールできる。外部ライブラリもPythonも必要ない。 $ gem install hnswlib APIは単順にバインドしたものと、それらをラップしたAnnoyライクなHnswIndexを用意した。 検索インデックスの作成は、以下のようになる。データを追加すれば、それでグラフ構造が内部で作られるので、build_indexみたいなメソッドはない。 データベクトルはRuby Array

    近似最近傍探索ライブラリHnswlibのRuby bindingを作った - 洋食の日記
  • 近似最近傍探索ライブラリAnnoyのRuby bindingを作成した - 洋食の日記

    はじめに Annoy (Approximate Nearest Neighbors Oh Yeah) は、C++で書かれた近似最近傍探索ライブラリである。近似最近傍探索とは、その名のとおり、クエリに対して厳密ではなく近似的に近傍にあるものを探索する。高速に探索できるので、大規模データの画像の類似検索などに使われる。インデックスの木の構築では、データ数を二分割するような2点を選び、それらでできる超平面で分割することを繰り返す。k-means tree (vocabulary tree) をアレンジしたような手法になっている。Annoyでは、Python bindingが提供されていて、pipでインストールできる。そのため、Pythonライブラリなイメージがあるが、実際は一つのヘッダーファイルからなるシンプルなライブラリである。これを、native extensionsから叩くかたちでgem

    近似最近傍探索ライブラリAnnoyのRuby bindingを作成した - 洋食の日記
  • Rubyで近似最近傍探索ライブラリを作った話 - 洋食の日記

    はじめに Rubyで動く近似最近傍探索(Approximate Nearest Neighbor search, ANN)ライブラリが欲しくなって作成した。 hanny | RubyGems.org | your community gem host FLANNのRubyバインディングがあり検討したが、FLANN自体の開発が止まっているので、勉強の意味でもゼロから作ることにした。手法は様々なものがあるが、シンプルな実装・データ構造になるものが良いと思い、ハッシュ型ANNを選択した。 ハッシュ型ANN ハッシュ型ANNでは、ベクトルデータ(特徴ベクトル)をバイナリコードに変換し、それをキーとしてハッシュテーブルを作成する。このとき、もとのベクトルデータが類似しているもの同士は、同じバイナリコードになるような変換にする。検索クエリが与えられると、ハッシュテーブルを作成したときと同様にしてバイナ

    Rubyで近似最近傍探索ライブラリを作った話 - 洋食の日記
  • 近似最近傍探索ライブラリHnswlibのNode.js bindingを作っていた - 洋食の日記

    はじめに Hnswlibは、近似最近棒探索のベンチマークでも上位に位置する、Hierarchical Navigable Small World graphsによるC++の近似最近傍探索ライブラリである。Node.jsのbindingがなかったので、腱鞘炎のリハビリとnpm作成の勉強がてら作成していた。ずっと前に。 github.com インストール 普通にnpmをインストールすれば使える(Windowsではnativeなnpmはビルドツールを別で入れる必要があるみたいですね)。ブラウザでは動かない。サーバーサイドで利用することを想定してる。 $ npm i hnswlib-node 使い方 アイテムベクトルをnumberのArrayで表現し、それをインデックスに追加する。 import { HierarchicalNSW } from 'hnswlib-node'; const numD

    近似最近傍探索ライブラリHnswlibのNode.js bindingを作っていた - 洋食の日記
    yuiseki
    yuiseki 2023/07/10
  • SuikaというPure Rubyな形態素解析器を作成した - 洋食の日記

    はじめに Pure Ruby形態素解析器Suikaを作成した。開発中でバッリバリにα版だが、思い切ってリリースすることにした。 suika | RubyGems.org | your community gem host 最も有名な形態素解析器であるMeCabもそうだが、形態素解析器はべ物の名前がつくことが多い。「Rubyなので赤いべ物が良いかな」と考えて、文字数とかわいらしさからSuika(スイカ)とした。 使い方 SuikaはPure Rubyで作られているため、MeCabをはじめ特別なライブラリを別途インストールする必要はない。 gem install suika バッリバリにα版なので、機能はないに等しく、オプションなしのMeCabコマンドと同様となる。 $ irb irb(main):001:0> require 'suika' => true irb(main):002:

    SuikaというPure Rubyな形態素解析器を作成した - 洋食の日記
  • 1