SIF/uSIFを使ってRustで簡単高速文埋め込み

本記事は、情報検索・検索技術 Advent Calendar 2023 9日目の記事です。 SIF/uSIFという文埋め込み手法と、そのRust実装であるsif-embeddingを紹介します。最後にちょこっとベクトル検索もします。

お手軽に文章ベクトルを比較して入門した

文章を実数値ベクトルとして表現したものを文章ベクトルと呼びます。文脈によっては文章埋め込みや文章の分散表現とも呼ばれます。離散的な文章データを機械学習などに応用するにはベクトル表現が必要なことが多く、「どうすれば文章の特徴をよく表現したベ…

シンプルで強いFrontCoding文字列辞書を紹介したい

本記事では、文字列集合を保存し検索するためのシンプルで強いデータ構造であるFrontCoding文字列辞書(以下、FC辞書)を紹介します。このために使われるデータ構造としてはハッシュ表やTrieがメジャーです。それに対して、FC辞書はあまり使われていない印象…

C++でファイルを後ろ向きに読み込むときはバッファリングに気をつけようって話

C++でファイルを読み込むとき、std::ifstream を使うのが一般的だと思います。本記事では、ifstream でファイルを後ろ向きに読み込む場合には、バッファリングに気を付けて実装しないと読み込みがとても遅くなってしまうことについて解説します。 以下、固定…

高速な圧縮辞書ライブラリXcdatをリリースしました

圧縮ダブル配列を利用したトライ辞書ライブラリXcdatをリリースしました。 github.com 頑張って整備したので、簡単ではありますが解説記事を書いて宣伝したいと思います。Star頂けるととても喜びます。

お勉強メモ:混合ベルヌーイ分布とEMアルゴリズム

前回の最尤推定法に引き続き、ITエンジニアのための機械学習理論入門で勉強したのでメモ。今回は7章のEMアルゴリズム。 ベルヌーイ分布での最尤推定 N 個の観測点 が与えられて、観測点は D 次元の2値ベクトルとする。つまり 。 各次元はベルヌーイ分布に…

お勉強メモ:最尤推定法

機械学習の知識を忘れるたびにITエンジニアのための機械学習理論入門で勉強し直してる。いい加減この輪廻を断ち切るため簡単にでもメモを残していくべき。今回は3章の最尤推定法。 パラメトリックモデル 以下のステップで予測モデルを決定する手法 パラメー…

コンパイル時定数ダブル配列を作って遊んだ

内容はタイトルの通りで、C++17でコンパイル時定数として扱えるダブル配列を実装して遊びました。ご承知の通り、コンパイル時計算は最高ですしダブル配列も最高です。よってこの試みは最高です。1 実装は以下で公開しています。 github.com 本記事では、この…

Order-Maintenance Problem

記念すべき最初の記事です。 最近忘却がひどいので、学んだことをちゃんとここに残していけたらなと思います。 内容 本記事では以下の論文 Bender M.A., Cole R., Demaine E.D., Farach-Colton M., Zito J. Two Simplified Algorithms for Maintaining Order…