スキップしてメイン コンテンツに移動

投稿

2013の投稿を表示しています

Search::Fulltext で N-gram 検索できるように Search::Fulltext::Tokenizer::Ngram を書いた

2014-01-01: CPAN にアップロードしたので追記。 要旨 Search::Fulltext という大変シンプルな全文検索モジュールがリリースされていたので、N-gram トークナイザを提供する Search::Fulltext::Tokenizer::Ngram を書きました。 Github MetaCPAN これを使うと日本語として怪しい表現でもとりあえずヒットするような全文検索ができます。 動機 大変シンプルなモジュールだったのでシンプルに使ってみようと思ったら現在のところ日本語のトークナイザは Search::Fulltext::Tokenizer::MeCab のみでした。Text::MeCab のインストールが億劫なのと、ワンダー日本語が跋扈している Web 文書なんかの検索だと N-gram の方が都合が良いこともあるので作ってみました。 念の為: N-gram って何 テキストを N 文字毎に区切ったもの。e.g., "色彩を持たない多崎つくると、彼の巡礼の年" から 2-gram を作ると "色彩", "彩を", "を持", ... "の年" といった具合になる。 要は文書中に出現する N 文字の組合せを網羅するので、N-gram を使ってインデックスを作ると N 文字以上のクエリにヒットする文書は一切取り零さなくなる。 短所は形態素の区切りを知らないので "京都" というクエリで "東京都" という語を含んだ文書までヒットする、N 文字以下のクエリは一切ヒットしない、N が小さいとインデックスが大きくなるなど。 使い方 インストール cpanm などを使ってインストールできます: cpanm Search::Fulltext::Tokenizer::Ngram Dist::Zilla (dzil) が必要です。面倒なら CPAN に上がるのを待つか `lib/` 以下をコピーで動きます。 git clone git@github.com:sekia/Search-Fulltext-Tokenizer-Ngram.git cd...

Algorithm::LibLinear の紹介

Notice: This article is outdated. Please refer an updated English tutorial . 要旨 かなり前になりますが、Algorithm::LibLinear という Perl モジュールを書きました。 CPAN Github これを使うと線形分類器などが高速に学習できます。テキストや画像の分類が応用として期待されます。 LIBLINEAR について LIBLINEAR は LIBSVM と同じ台湾国立大学の Chih-Jen Lin 教授のチームが公開しているオープンソースの機械学習パッケージです。 関数のロジスティック回帰、サポートベクター回帰及び線形 SVM による多クラス分類を行うことができます。LIBSVM と違ってカーネル関数を使うことはできませんが、はるかに高速に動作します。 Algorithm::LibLinear について LIBLINEAR には C++ で書かれたライブラリと、その機能を使って機械学習と分類・関数回帰を行うコマンドラインユーティリティが含まれています。 Algorithm::LibLinear はライブラリの機能を Perl からオブジェクト指向的に利用できるようにした上で、コマンドラインユーティリティの一部機能をライブラリ化して Perl で再実装したものです。 使い方 分類問題を解くときは、 訓練データセットの読み込み・スケーリング 学習器パラメータの設定 分類器の訓練 実データの分類 という手順で行います。 訓練データセットの読み込み 正解ラベルのついたデータを大量に用意して学習させます。 LIBSVM 形式のデータを読み込むか: my $data_set = Algorithm::LibLinear::DataSet->load(string => <<'EOD'); 1 1:0.1 2:0.1 4:0.1 -1 1:0.1 2:-0.1 3:0.1 ... EOD HashRef として表現されたデータを使います: my $data_set = Algorithm::LibLinear::DataSet->new(data_set => [ +{ feature => +{ 1...