Skip to content

Intermediate State Management

阪本 浩太郎 edited this page Jan 28, 2017 · 1 revision

本システムのように大きなシステムでは、pipelineをend-to-endではなく部分的に実行したいことが良くあります。例えば、本システムの情報検索後の論述文生成を改良したいときに、システムを実行し直す度にQAコーパスの読み込みから情報検索までの処理に多くの実行時間が取られるので、とても煩わしいです。幾つかの中間地点で処理後の状態をファイル出力しておくことで、処理の途中から実行を開始できるようになっていると、例のような状態では情報検索後から実行し直せるためとても助かります。さらに、チームで開発する際、pipelineの各コンポーネントをチームメンバーごとに担当を割り当てて改良する場合にも、担当するコンポーネントの直前の状態を保存しておくことで、他のメンバーの進捗に大きく左右されずに他のメンバーとある程度は並行的に作業ができます。このように、ファイルとして状態を出力することはとても意義のあることです。UIMAはXMI形式で状態をXMLファイルとして出力することができるようになっているため、UIMAを用いた本システムではUIMAのXMIの機構を用い、pipelineの途中から途中までを部分的に実行することを可能としています。特に、本システムではXMIを単なるXMLファイルではなくgzip形式で圧縮されたXMLファイルとして保存することで、補助記憶装置から余計に容量を奪わないようにしています。

XMI

XML Metadata Interchange (XMI)とは、
https://uima.apache.org/d/uimaj-2.4.0/tutorials_and_users_guides.html#ugr.tug.xmi_emf

UIMAではCASをファイルとして永続化するためにXMIに変換し出力したり、XMIを入力してCASを読み込んだりすることで、中間・終了状態を永続化でき、XMIはXMLファイルなので持ち運ぶこともできます。

Gzipped XMI

Gzipped XMIとは、XMIファイルをGNU zip (gzip)形式で圧縮したものです。 XMIファイルはXML形式のファイルですが、UIMAでの用途としては状態をファイルで永続化することであり、一般的には人間が読むためのものではないため(頑張れば読めるので、著者は時々状態確認のためXMIファイルをテキストエディタで開きますが)、基本的に圧縮して保存することが望ましいと考えられます。 本システムでは、圧縮形式として代表的なgzip形式でXMIを圧縮しています。 なお、gzip形式は圧縮可能なデータサイズの4GBに制限されるので、それより大きいデータになった際は、圧縮形式を変更する必要があります。

GZIP file format specification version 4.3
https://tools.ietf.org/html/rfc1952

本システムは、QuestionAnalyser, InformationRetriever, EssayGeneratorの3つのUIMA Componentの直後の状態をGzipped XMIとしてファイル出力します。 Gzipped XMIの保存場所はそれぞれ次です。

Component ファイルパス
QuestionAnalyser /out/xmi/qa
InformationRetriever /out/xmi/ir
EssayGenerator /out/xmi/eg

Gzipped XMIの例)
tutorial/out_example/xmi

CPE Runner Option -unSave

初期設定では、QuestionAnalyser, InformationRetriever, EssayGeneratorが処理したら直後の状態を必ずGzipped XMIとしてファイル出力します。もし、それらについてGzipped XMIが必要ない場合は、CPE Runnerの実行オプションとして-unSaveを使用することで、ファイル出力しないことができます。例えば、一切ファイル出力したくない場合は、-unSave=allを使用してください。もし、QuestionAnalyzerの直後のGzipped XMIのみを出力したくない場合は、-unSave=qaを使用してください。もし、QuestionAnalyzerとEssayGeneratorの2つの処理の直後のGzipped XMIが出力したくない場合は、-unSave=qa,egというようにカンマ区切りで指定してください。

Collection Reader

XML Descriptor

gzipXmiCollectionReaderDescriptor.xml

Scala Source Code

GzipXmiCollectionReader.scala

Input Directory

gzipXmiCollectionReaderDescriptor.xmlは、cpeFromIntermediatePointDescriptor.xmlから呼び出され、CPERunner.scala上からgzipXmiCollectionReaderDescriptor.xmlのconfiguration parameterを書き換えて、reconfigureすることで、input directoryを指定しています。

CAS Consumer

XML Descriptor

gzipXmiCasConsumerDescriptor.xml

Scala Source Code

GzipXmiCasConsumer.scala

Output Directory

Output directoryは、QuestionAnalyzer, InformationRetriever, EssayGeneratorのそれぞれのAggregate Analysis Engine XML descriptor内からgzipXmiCasConsumerDescriptor.xmlのconfiguration parameterをoverrideして指定しています。