ソフトウェア

自作のソフトウェア

私が開発しているソフトウェアです.

CRFsuite: a fast implementation of Conditional Random Fields (CRFs)

CRFSuiteは,条件付き確率場(CRF: Conditional Random Fields)に基づく系列ラベリングの実装です. このソフトウェアの最大の目標は,メモリ使用量やソースコードの汎用性を犠牲にする代わりに,CRF確率モデルの訓練とタグ付けをできるだけ高速化することです. その結果,CRFsuiteはC++を用いた既存の実装と比べ,5.4倍から61.8倍のスピードで確率モデルの訓練を行うことができるようになりました. CRFsuiteは,Orthant-Wise Limited-memory Quasi-Newton (OW-LQN) 法に基づくL1正則化(ラプラシアン事前分布),Limited-memory BFGS (L-BFGS) 法に基づくL2正則化(ガウシアン事前分布)を用い,確率モデルのパラメータを求めます.

CRFsuite: a fast implementation of Conditional Random Fields (CRFs)のウェブサイト

Classias: a collection of machine-learning algorithms for classification

Classiasは,分類のための機械学習アルゴリズムの実装です. 現在,L1/L2正則化ロジスティック回帰(最大エントロピー法),L1/L2正則化L1損失線形カーネルサポートベクトルマシン(SVM),平均化パーセプトロンに基づく分類モデルをサポートしています.分類器を学習するアルゴリズムとして,Averaged perceptron,L-BFGS法,OWL-QN法,Pegasos,Truncated Gradientを実装しています.

Classiasのウェブサイト

Marginal Containers Covering Relevant Items (MACCORI)

Marginal Containers Covering Relevant Items (MACCORI) は,N個のコンテナが与えられた時に,与えられた制約条件下で,効用(スコア)を最大にするコンテナの部分集合を求めるソフトウェアです. それぞれのコンテナは,M個のアイテムとその重みの集合から構成されると仮定し,できるだけ重みが高く,かつ重複が少ないアイテムを選択するように,コンテナ部分集合を決めます. このソフトウェアは,複数文書向け自動要約で用いる重要文抽出タスクのために開発されました.

Marginal Containers Covering Relevant Items (MACCORI) のウェブサイト

libLBFGS

libLBFGSは,準ニュートン法である Limited-memory Broyden-Fletcher-Goldfarb-Shanno (L-BFGS) のC言語ライブラリです. FORTRANで記述されたソースコード(J. Nocedal氏作) を手作業でC言語に移植したもので,C言語としてのコードの読みやすさを追求しています. コールバックインタフェースによるスレッドセーフ化,SSE/SSE2対応など,独自の改良・最適化が施されています. L-BFGSを用いたアプリケーションの開発から,L-BFGS法の学習に向いています.

libLBFGS のウェブサイト

SimString

SimStringは,類似文字列検索のための高速かつシンプルなライブラリです. 類似文字列検索とは,文字列集合(データベース)の中から,クエリ文字列との類似度が閾値以上のものを,見つけ出す操作です. クエリ文字列と完全に一致しなくても,データベース中の似ている文字列を検索することができるので,スペル訂正,あいまい計算,柔軟な辞書マッチング,重複レコード検出,データベース統合など,様々なアプリケーションを構築できます.

SimString のウェブサイト

Static Double Array Trie (DASTrie)

トライ(trie)は,連想配列を実現する順序木の一種です.レコードのキー(通常は文字列)の検索を非常に高速に行えるのが特徴で,データベースのレコード数に関係なく,O(1)の速度で検索できます.また,与えられた検索文字列の接頭辞をキーに持つレコードを効率よく列挙する「接頭辞検索」も,トライの特徴と言えます. Static Double Array Trie (DASTrie) は,静的ダブル配列に基づくトライのテンプレート・ライブラリです.DASTrieは,キーの辞書順に整列されたレコードから,静的なダブル配列を構築することに焦点を絞り,実装を簡素化・効率化しています.ライブラリのヘッダファイルをインクルードするだけで,STLのstd::mapのような連想配列,std::setのような集合を,任意のデータ型で実装できます.通常のダブル配列の実装では,トライのノードを8バイトで表現することが多いのに対し,DASTrieはノードを4バイト,もしくは5バイトで表現し,データベースをコンパクトにします.

DASTrie のウェブサイト

C++ implementation of Constant Database (CDB++)

C++ implementation of Constant Database (CDB++) は,軽量な静的ハッシュデータベース・ライブラリです. 一つのヘッダファイル (cdbpp.h) をインクルードするだけで,コンパクトなデータベースを高速に構築・検索できます. ただし,CDB++は動的な要素の更新・削除をサポートしません. CDB++は更新頻度の少ない大規模データベースを構築し,検索を頻繁に行うアプリケーションに向いています.

C++ implementation of Constant Database (CDB++) のウェブサイト

Constant Quark Database (CQDB)

Constant Quark Database (CQDB) は,文字列と整数識別値の静的な関連付けに特化したデータベース・ライブラリです. 両方向の関連付けをサポートしており,文字列をキーとして整数識別値を引いたり,整数識別値をキーとして文字列を引くことができます. データベースの構築・検索が高速に行えるように設計されており,既存のデータベースライブラリの10~100倍程度の速度で動作します. また,データベースのサイズは,既存のデータベースライブラリの半分以下に抑えられます. ただし,CQDBは動的な文字列―整数識別値の割り当て,更新,削除はサポートしません. CQDBは更新頻度の少ない大規模辞書を構築し,検索を頻繁に行うアプリケーションに向いています.

Constant Quark Database (CQDB) のウェブサイト

Polaris

Polarisは,大澤教授が提唱したKeyGraphと「チャンス発見の二重螺旋プロセス」をもとに設計されたデータマイニング・フレームワークです. KeyGraphは入力データの共起情報を分析し,高頻度に発生する現象と現象の間を結ぶアイテムを抽出し,グラフとして視覚化します.

Polarisのウェブサイトへ

再配布ソフトウェア

このセクションに含まれるソフトウェアは,すでにリリースされているソフトウェアを自分仕様に改良したものです.

eblookにパッチをあててWin32でコンパイルできるようにしたもの

eblookは電子書籍にアクセスするためのCUIフロントエンドです. 電子書籍へのアクセスは,EB libraryによって実装されています. このソフトウェアは,日本語語彙体系などの言語リソースにアクセスするときに重宝します. eblookはGNU General Public License (GPL)でリリースされています.

eblook 1.6.1 Win32 compile (MSVC2003)

解説無用のライブラリ

このセクションでは,ドキュメントが不要なくらい短くてシンプルなプログラムを掲載します. 解説は行いませんので,使い方などはソースコードを読んで理解してください. このセクションのソフトウェアは,すべてzlib licenseでリリースされます.

optparse: GNUスタイルのコマンドライン引数を解析するC++クラス

optparseクラスは,GNUスタイルのコマンドライン引数を解析します. このクラスを継承することで,コマンドライン解析がBEGIN_OPTION_MAP, ON_OPTION(_WITH_ARG), END_OPTION_MAPマクロを用いて簡単に行えます.

optparse.h (ハイライト表示)

strsplit: CSVに類似したフォーマットの文字列を分解して値のリストを得る

テンプレート関数strsplitはセパレータ文字で区切られた文字列を値のリストに区切ります. この関数は,std::stringで表現された文字列を,コンマ区切り形式 (CSV) やタブ区切り形式 (TSV) とみなして値のリストを作成します. 値のリストは,std::vectorstd::list と互換性のあるコンテナ・アダプタに保存されます.

strsplit.h (ハイライト表示)

quark: 文字列と整数値IDの双方向の関連付けを保持するクラス

Quarkは文字列に対してユニークなIDを割り当て,文字列からIDへの対応付けとIDから文字列への対応付けを保持します. 一般に,文字列の比較は整数の比較と比べてかなり遅いので,テキスト処理を行うアプリケーションは与えられた文字列をすべて整数IDで表現し,内部処理はその整数IDを用いて行い,最後に整数IDから文字列に戻すことで,効率化が図れます.

quark.h (ハイライト表示)