現在JavaScriptの設定が無効になっています。このページを利用するにはJavaScriptの設定を有効にしてください。トップ全記事一覧テクノロジー2018.02.19高次元ベクトルデータ検索技術「NGT」のpythonライブラリ公開のお知らせはじめに検索技術の菅原です。Tree)という高速な近傍探索を実現するソフトウエアのpython用インターフェースが公開されました。pythonは機械学習のライブラリが多く公開されており、より手軽にNGTを組み合わせて使うことができるでしょう。そこで今回はword2vecのベクトルを近傍探索する実践的な内容を紹介します。word2vecを扱うライブラリとしてgensimを使用します。word2vecやgensimの詳しい説明は省略しますが、分からなくてもpythonの文法を知っていれば理解できると思います。Pro(Sierra)です。後で紹介する実行時間も厳密ではないため参考情報としてお読みください。以下を利用可能な環境を準備ください。詳しい説明は割愛します。(SIP)が有効になっていると環境変数(LD_LIBRARY_PATH)が有効にならないこともあるため、pythonはvenvなどのVirtual環境で実行環境を構築することを推奨します。コンパイラはclang++よりXcodeに含まれるg++を使ってください。llvmによって入るclang++(5.0.1)でもコンパイルはできましたがライブラリのパスを気をつける必要があります。pythonを使うためには事前にNGT本体のインストールが必要です。以下の様な結果が出力されれば正しくインストールされています。ngt.base'(エラーが出なければ正しくインストールされています)サンプルで使うgensimのインストールword2vecをpythonから扱えるライブラリをインストールします。gensim'(エラーが出なければ正しくインストールされています)word2vecモデルのダウンロード今回のサンプルでは公開されている日本語のword2vecモデルを利用します。エンティティベクトルから20170201.tar.bz2というファイルをダウンロードし解凍してください。word2vecのサンプルプログラムpythonで以下のようなプログラムを作成し、実行します。全件検索を行った場合は約0.21秒で検索することができました。pythonのインデックス作成サンプルプログラム上記のプログラムから続いて以下のプログラムを追加します。約15分でインデックスの作成ができました。挿入されたベクトルのインデックスを作成します。pythonの検索サンプルプログラム新たにpythonで以下のプログラムを作成してください。約0.01秒で約25倍高速に検索できました。注意点としてNGTのidが1から始まること、登録済みの検索かは区別しないため1番目の結果には自身が含まれる可能性があること、検索のスコアはコサイン類似度(-1から1)でなくユークリッド距離(0から2)であること、検索結果は近似であるため全件検索の結果と一致しないことがあります。今回はデータサイズも小さく全件検索でも問題にならないことが多いですが、件数が大きくなるほど速度の差が顕著になります。kは最大検索件数です。0.741900おわりにpythonでNGTが簡単に利用できることを感じられましたでしょうか。具体的な利用方法としては今回の様なアプリケーション以外にも機械学習の学習時のバリデーションやさらに言えばRNNで作成された中間表現の分析などにも活用ができそうです。機械学習も含めインデックスを作るところまではpythonで実装して、インデックスを配布しサーバーを作成、アプリケーションからはサーバー経由で検索するといった応用的な使い方もできます。JAPANでは情報技術を駆使して人々や社会の課題を一緒に解決していける方を募集しています。詳しくは採用情報をご覧ください。JAPANのサービス開発を支える技術やデザイン、文化を発信しています。Reserved.このページの先頭へ。