Previous topic

ダウンロード

Next topic

CRF++を使う

This Page

SVM Perfを使う

このページでは,SVM Perf の分類器(svm_perf_classify)をRaSCで利用できるようにするための手順を説明します.

SVM Perfは,ファイルを通じた入出力を行うため, プログラムの変更が必要です(変更の内容については, 既存ツールをRaSCで動かすように改修するには でCRF++を例に説明しています). 以下では,プログラムにパッチをあてて変更し,RaSCサービスとして利用するための手順を説明します.

まず,SVM Perfのソースを入手し,解凍します.

$ wget http://download.joachims.org/svm_perf/current/svm_perf.tar.gz
$ mkdir svm_perf
$ tar zxvf svm_perf.tar.gz -C svm_perf

パッチ適用のために必要なファイルを新規作成します.

$ touch svm_perf/svm_light/svm_classify_stdin.c
$ touch svm_perf/svm_struct/svm_struct_classify_stdin.c

次にパッチファイルを入手します.

$ wget https://alaginrc.nict.go.jp/rasc/resources/patch_rasc_svm_perf.diff

次にパッチを当てます

$ patch -p0 < patch_rasc_svm_perf.diff

次にビルドを行います

$ cd svm_perf
$ ./configure
$ make

これにより,RaSCから使えるように改修した実行バイナリ svm_perf_classify_stdin が生成されます.

サービス定義XMLに,実行バイナリのパスとモデルファイルを含む,起動コマンドラインを記述してください (ダウンロードできます: サービス定義XML). ___SVM_PERF_DIR______PATH_TO_MODEL_FILE___ を,それぞれ実際に svm_perf_classify_stdin がおかれたディレクトリと,モデルファイルのパスに修正してください.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
  <bean id="target"
    class="jp.go.nict.langrid.servicecontainer.handler.TargetServiceFactory">
    <property name="service">
      <bean class="jp.go.nict.wisdom.wrapper.StdIOCommandService">
        <property name="cmdLine" value="___SVM_PERF_DIR___/svm_perf_classify_stdin ___PATH_TO_MODEL_FILE___" />
        <property name="delimiterIn" value="\n[END_OF_INPUT]\n" />
        <property name="delimiterOut" value="EOS\n" />
        <property name="delLastNewline" value="true" />
      </bean>
    </property>
  </bean>
</beans>
  • cmdLine に先ほどパッチを当てて作成したSVMのパスおよび,読み込ませるモデルファイルを指定します.
  • delimiterIn には,入力の区切り文字が \n[END_OF_INPUT]\n になるようにパッチを当てたので, \n[END_OF_INPUT]\n と記述します.
  • delimiterOut も同様に,出力の区切り文字が EOS\n になるようにパッチを当てたので, EOS\n と記述します.
  • ここに記述される \n はプログラム内でシステムに応じた改行コードに置換されます.

サービス起動の手順は, MessagePack RPCでユーザプログラムを呼び出す または 各種のネットワーク呼び出しプロトコルに対応させる を参照してください.