目次
- 自作のソフトウェア
-
- CRFsuite: a fast implementation of Conditional Random Fields (CRFs)
- Classias: a collection of machine-learning algorithms for classification
- Marginal Containers Covering Relevant Items (MACCORI)
- libLBFGS
- SimString
- Static Double Array Trie (DASTrie)
- C++ implementation of Constant Database (CDB++)
- Constant Quark Database (CQDB)
- Polaris
- 再配布ソフトウェア
- 解説無用のライブラリ
私が開発しているソフトウェアです.
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は,分類のための機械学習アルゴリズムの実装です. 現在,L1/L2正則化ロジスティック回帰(最大エントロピー法),L1/L2正則化L1損失線形カーネルサポートベクトルマシン(SVM),平均化パーセプトロンに基づく分類モデルをサポートしています.分類器を学習するアルゴリズムとして,Averaged perceptron,L-BFGS法,OWL-QN法,Pegasos,Truncated Gradientを実装しています.
Marginal Containers Covering Relevant Items (MACCORI) は,N個のコンテナが与えられた時に,与えられた制約条件下で,効用(スコア)を最大にするコンテナの部分集合を求めるソフトウェアです. それぞれのコンテナは,M個のアイテムとその重みの集合から構成されると仮定し,できるだけ重みが高く,かつ重複が少ないアイテムを選択するように,コンテナ部分集合を決めます. このソフトウェアは,複数文書向け自動要約で用いる重要文抽出タスクのために開発されました.
Marginal Containers Covering Relevant Items (MACCORI) のウェブサイト
libLBFGSは,準ニュートン法である Limited-memory Broyden-Fletcher-Goldfarb-Shanno (L-BFGS) のC言語ライブラリです. FORTRANで記述されたソースコード(J. Nocedal氏作) を手作業でC言語に移植したもので,C言語としてのコードの読みやすさを追求しています. コールバックインタフェースによるスレッドセーフ化,SSE/SSE2対応など,独自の改良・最適化が施されています. L-BFGSを用いたアプリケーションの開発から,L-BFGS法の学習に向いています.
SimStringは,類似文字列検索のための高速かつシンプルなライブラリです. 類似文字列検索とは,文字列集合(データベース)の中から,クエリ文字列との類似度が閾値以上のものを,見つけ出す操作です. クエリ文字列と完全に一致しなくても,データベース中の似ている文字列を検索することができるので,スペル訂正,あいまい計算,柔軟な辞書マッチング,重複レコード検出,データベース統合など,様々なアプリケーションを構築できます.
トライ(trie)は,連想配列を実現する順序木の一種です.レコードのキー(通常は文字列)の検索を非常に高速に行えるのが特徴で,データベースのレコード数に関係なく,O(1)の速度で検索できます.また,与えられた検索文字列の接頭辞をキーに持つレコードを効率よく列挙する「接頭辞検索」も,トライの特徴と言えます. Static Double Array Trie (DASTrie) は,静的ダブル配列に基づくトライのテンプレート・ライブラリです.DASTrieは,キーの辞書順に整列されたレコードから,静的なダブル配列を構築することに焦点を絞り,実装を簡素化・効率化しています.ライブラリのヘッダファイルをインクルードするだけで,STLのstd::mapのような連想配列,std::setのような集合を,任意のデータ型で実装できます.通常のダブル配列の実装では,トライのノードを8バイトで表現することが多いのに対し,DASTrieはノードを4バイト,もしくは5バイトで表現し,データベースをコンパクトにします.
C++ implementation of Constant Database (CDB++) は,軽量な静的ハッシュデータベース・ライブラリです. 一つのヘッダファイル (cdbpp.h) をインクルードするだけで,コンパクトなデータベースを高速に構築・検索できます. ただし,CDB++は動的な要素の更新・削除をサポートしません. CDB++は更新頻度の少ない大規模データベースを構築し,検索を頻繁に行うアプリケーションに向いています.
Constant Quark Database (CQDB) は,文字列と整数識別値の静的な関連付けに特化したデータベース・ライブラリです. 両方向の関連付けをサポートしており,文字列をキーとして整数識別値を引いたり,整数識別値をキーとして文字列を引くことができます. データベースの構築・検索が高速に行えるように設計されており,既存のデータベースライブラリの10~100倍程度の速度で動作します. また,データベースのサイズは,既存のデータベースライブラリの半分以下に抑えられます. ただし,CQDBは動的な文字列―整数識別値の割り当て,更新,削除はサポートしません. CQDBは更新頻度の少ない大規模辞書を構築し,検索を頻繁に行うアプリケーションに向いています.
Polarisは,大澤教授が提唱したKeyGraphと「チャンス発見の二重螺旋プロセス」をもとに設計されたデータマイニング・フレームワークです. KeyGraphは入力データの共起情報を分析し,高頻度に発生する現象と現象の間を結ぶアイテムを抽出し,グラフとして視覚化します.
このセクションに含まれるソフトウェアは,すでにリリースされているソフトウェアを自分仕様に改良したものです.
eblookは電子書籍にアクセスするためのCUIフロントエンドです. 電子書籍へのアクセスは,EB libraryによって実装されています. このソフトウェアは,日本語語彙体系などの言語リソースにアクセスするときに重宝します. eblookはGNU General Public License (GPL)でリリースされています.
このセクションでは,ドキュメントが不要なくらい短くてシンプルなプログラムを掲載します. 解説は行いませんので,使い方などはソースコードを読んで理解してください. このセクションのソフトウェアは,すべてzlib licenseでリリースされます.
optparseクラスは,GNUスタイルのコマンドライン引数を解析します. このクラスを継承することで,コマンドライン解析がBEGIN_OPTION_MAP, ON_OPTION(_WITH_ARG), END_OPTION_MAPマクロを用いて簡単に行えます.
テンプレート関数strsplitはセパレータ文字で区切られた文字列を値のリストに区切ります. この関数は,std::stringで表現された文字列を,コンマ区切り形式 (CSV) やタブ区切り形式 (TSV) とみなして値のリストを作成します. 値のリストは,std::vector や std::list と互換性のあるコンテナ・アダプタに保存されます.