RaSCは,国立研究開発法人 情報通信研究機構 情報分析研究室が開発した,ユーザプログラムを高速・高並列に実行可能にするフリーのミドルウェアです.
RaSCは,既存の形態素解析器や係り受け解析器などのプログラムを大量のWebページに高速に適用することを念頭に開発されたものであり,多種のユーザプログラムを複数起動し,それらを相互に接続して分散並列実行させるためのミドルウェアです.処理の例としては,一つのファイルやストリームにある複数件の入力に対して,ユーザプログラムを複数起動し,マルチコアCPUを活用して並列実行したり,複数の計算機上で分散実行することを容易にします.また,大規模データを分割して異なる計算機上に格納し,それぞれに対応する多種のユーザプログラムを複数起動し,分割されたデータをそれぞれ処理することで,大規模データの高速な処理が可能になります.また,自然言語処理を念頭においてはいますが,ユーザプログラムは自然言語処理のプログラムには限定されず広い範囲のプログラムに適用可能です.標準入力またはファイルから入力を受け取り,標準出力またはファイルに結果を出力するプログラムであれば,ほとんどの場合軽微な変更でRaSC上で分散実行することが可能です.
RaSC上で稼働するユーザプログラムのプロセスは,一度起動されると計算機に常駐します.そのため,辞書ファイルをロードする言語処理プログラムのように,巨大ファイルのロードなどにより起動時間が長くなっているプログラムであっても,効率的に実行できます.また,ユーザプログラムはネットワークを介して容易に利用でき,複数件の入力があった際には,複数の計算機上で並列化・分散実行することによって高速化されます.ユーザプログラム同士は,UNIXのパイプのように,簡便にストリーム通信により接続できる他,ユーザプログラムの実行はユーザが意識することなく並列に行われます (RaSC動作の概要 参照).
以下は,構文解析システム KNP をRaSC上で実行した例です.一行を1件の文として500行の入力を与え,それを複数の実行プロセスに割り振ることで,マルチコアCPUによる並列化(Intel Xeon X5675*2 上で8並列実行)で,5倍程度の高速化がなされています.また,オリジナルの入力ファイル (INPUT_TXT) における入力の順序は,出力ファイル (OUTPUT_TXT) でも保存されます(この例は, パイプでの入力を並列処理する で説明している手順で実現できます).
$ time cat INPUT_TXT | juman | knp > OUTPUT_TXT # ユーザプログラムを直接実行する場合
real 2m28.456s # 並列化なし
user 2m17.557s
sys 0m1.011s
$ ./server.sh KNPService 19999 start # KNPを実行するRaSCサービスを起動
$ time cat INPUT_TXT | java -cp ./lib/*: RaSCClient localhost 19999 > OUTPUT_TXT # ホスト・ポートを変更すれば他の計算機ノードへもアクセス可能
real 0m29.402s # マルチコアCPUにより並列化(Intel Xeon X5675*2 上で8並列実行)
user 0m0.566s
sys 0m0.045s
RaSCは,国立研究開発法人 情報通信研究機構が開発した大規模Web情報分析システム WISDOM X 及び対災害SNS情報分析システム DISAANA で使用されています.WISDOM Xにおける,係り受け解析・評価情報抽出・因果関係抽出などの各種解析を,一日あたり最大1億以上のWebページを対象に実行できます.
RaSC は LGPL v2.1 の下で配布されています.
以下の表にはRaSC上での動作を確認したユーザプログラムを掲載しています. また,ユーザプログラムをRaSC上で稼働させるために必要な サービス定義XML を掲載しています.サービス定義XMLは,ユーザプログラムのコマンドラインや,並列実行における並列数などを指定するための設定ファイルです.サービス定義XMLの利用方法については, MessagePack RPCでユーザプログラムを呼び出す (MessagePack RPCのみで利用する場合) , 各種のネットワーク呼び出しプロトコルに対応させる (JSON RPC, ProtocolBuffers, SOAPを利用する場合) を参照してください.
Note
ダウンロードできるXMLについては,ユーザプログラムやモデルファイルなどのパスは環境に合わせて設定してください.
ユーザプログラム | サービス定義XML | 備考 |
---|---|---|
形態素解析器 MeCab | サービス定義XML, サービス定義XML (8並列実行設定) | |
形態素解析器 Juman | サービス定義XML, サービス定義XML (8並列実行設定) | |
構文解析器 J.DepP | サービス定義XML, サービス定義XML (8並列実行設定) | MeCab等とパイプで接続するシェルスクリプトを用意する必要があります (複数のユーザプログラムをパイプで接続してRaSC上で動作させるには を参照) |
構文解析器 KNP | サービス定義XML, サービス定義XML (8並列実行設定) | Jumanとパイプで接続するシェルスクリプトを用意する必要があります (複数のユーザプログラムをパイプで接続してRaSC上で動作させるには を参照) |
構文解析器 Enju | サービス定義XML, サービス定義XML (8並列実行設定) | |
GENIA tagger | サービス定義XML, サービス定義XML (8並列実行設定) | |
音声認識エンジン Julius | - | RaSCとJuliusを用いた音声認識サーバーの構築 で,利用手順が説明されています (外部サイト: 東北大学の五十嵐祐貴さんによるブログ) |
SVM Perf | サービス定義XML | SVM Perfのソースにパッチをあててからコンパイルし直してください (SVM Perfを使う を参照) |
CRF++ | サービス定義XML | CRF++のソースにパッチをあててからコンパイルし直してください (CRF++を使う を参照) |
TinySVM | サービス定義XML | TinySVMのソースにパッチをあててからコンパイルし直してください (TinySVMを使う を参照) |
[at] はアットマークで置き換えてください.