2014년 12월 10일 수요일

자연어 처리의 고속실행을 위한 미들웨어 RaSC 소개

 형태소 분석이나 음성 인식 엔진과 같이 대용량의 사전 데이터나 메타 데이터를 이용하는 처리 들은 프로그램 기동시에 상당한 시간이 걸릴 뿐더러 처리 자체에도 시간이 많이 소요된다.

 오늘 소개하는 RaSC (Rapid Service Connector)는 이러한 무거운 처리 들을 고속으로 처리하기 위해 만들어진 병렬 실행 미들웨어로 독일의 Information Analysis Laboratory at the National Institute of Information and Communications Technology (NICT)에서 개발된 오픈소스 소프트웨어이다.

 아래의 내용은 일본어판영문판 RaSC소개 페이지의 내용을 정리한 것이다.

RaSC개요

 RaSC은 기존의 형태소 분석기 및 음성 분석기 등의 프로그램을 대량의 Web 페이지에 빠르게 적용하는 것을 염두에 두고 개발 되었다. 다양한 사용자 프로그램을 복수 인스턴스로 기동 시킨 후 서로를 연결하여 분산 병렬 처리를 실행 시키기 위한 미들웨어이다.

 처리의 예로는 하나의 파일이나 스트림에 있는 복수의 입력에 대해 사용자 프로그램을 멀티 인스턴스 기동시키고  멀티 코어 CPU를 활용하여 병렬 실행하거나 여러 머신상에서 분산 수행하는 것이 용이 하다. 또한 대용량 데이터를 분할하여 다른 컴퓨터에 저장하고 각각에 대응하는 다양한 어플리케이션을 여러 인스턴스에서 분할 된 데이터를 각각 처리하여 대규모 데이터의 고속 처리가 가능하게 된다.

RaSC는 자연 언어 처리를 염두에 두고 개발 되었지만, 지원하는 프로그램은 자연 언어 처리 프로그램에 한정되지 않고 다양한 프로그램에 적용 가능하다. 표준 입력이나 파일에서 입력을 받고 표준 출력 또는 파일에 결과를 출력하는 프로그램이라면 대부분의 경우 작은 변경 만으로도 RaSC에서 분산 수행 할 수 있다.

 RaSC에서 실행되는 어플리케이션 프로세스는 한 번 시작되면 컴퓨터에 상주한다. 따라서 사전 파일을 로드하는 언어 처리 프로그램처럼 거대한 파일의 로드 등으로 기동 시간이 길어지는 프로그램도 효율적으로 실행할 수 있다. 또한 웹어플리케이션과 같이 복수의 요청에 대해서도 처리 인스턴스를 복수의 기기/코어에 병렬 · 분산 실행하여 고속화 시킨다.

 다음은 구문 분석 시스템 KNP 을 RaSC에서 실행 한 예 이다.  500 라인의 문서 입력에 대해, 그것을 여러 실행 프로세스에 할당함으로써 멀티 코어 CPU에 의한 병렬 처리 (Intel Xeon X5675 * 2에서 8 병렬 실행)에서 5 배 정도의 처리 속도 개선이 이루어지고 있는 것을 볼 수 있다. 또한 원래의 입력 파일 (INPUT_TXT)의 입력 순서는 출력 파일 (OUTPUT_TXT)에도 저장된다.

$ time cat INPUT_TXT | juman | knp > OUTPUT_TXT  # Directly run a user program without RaSC
real    2m28.456s   # Without parallelization
user    2m17.557s
sys     0m1.011s
$ ./server.sh KNPService 19999 start # Start a RaSC service that runs KNP
$ time cat INPUT_TXT | java -cp ./lib/*: RaSCClient localhost 19999 > OUTPUT_TXT   # Other computer nodes can be accessed by changing the host and port.
real    0m29.402s   # Parallelization with RaSC (8 parallel processes on two Intel Xeon X5675)
user    0m0.566s
sys     0m0.045s

라이센스

 RaSC은 LGPL v2.1 로 배포되고 있기는 하지만 마이크로서비스 형태의 독립 웹 인터페이스로 다른 프로그램들과 연동 가능하므로 다른 LGPL오픈소스 DB와 마찬가지로 라이센스의 제약에서도 자유롭게 시스템 구성이 가능하다.

RaSC 서비스 화 가능한 프로그램 

RaSC 서비스화 하는 프로그램은 다음과 같은 조건을 충족해야 한다.


  • 표준 입출력을 통한 입출력 지원: 1 개의 입력이 주어지면 해당 결과를 출력하고 종료하지 않고 다음 입력을 기다린다.


  • 입력과 출력에 명시 적 종결 자 문자열을 출력: 형태소 분석 프로그램 MeCab 구문 분석 프로그램 J.DepP 등은 이러한 조건을 충족합니다. 개행을 종단하는 입력 1 개를 받으면 문자열 "EOS"를 종료 문자열로 결과를 출력한 후에 그 다음 입력을 기다린다.


이러한 조건을 충족하지 못하는 프로그램은 RaSC 서비스하려면 약간의 수정이 필요하다. 소스 코드가 있으면, 많은 경우 수정 그리 어려운 일이 아니라 SVM Perf , CRF ++ 등의 프로그램에 대해서는 RaSC사이트에서 RaSC 서비스에 대한 패치를 다운로드 할 수 있다.

현재 RaSC에서 작동이 확인된 프로그램들은 다음과 같다.
User programService definition XMLRemarks
Morphological analyzer MeCabService definition XML,
Service definition XML
(with 8-parallel processes)
Morphological analyzer JumanService definition XML,
Service definition XML
(with 8-parallel processes)
Dependency parser J.DepPService definition XML,
Service definition XML
(with 8-parallel processes)
A shell script is required to connect with MeCab through a pipe (refer to How to connect multiple user programs through a pipe)
Dependency parser KNPService definition XML,
Service definition XML
(with 8-parallel processes)
A shell script is required to connect with Juman through a pipe (refer to How to connect multiple user programs through a pipe)
Dependency parser EnjuService definition XML,
Service definition XML
(with 8-parallel processes)
GENIA taggerService definition XML,
Service definition XML
(with 8-parallel processes)
Speech recognition engine Julius-Refer to the article by Yuki Igarashi, at Tohoku University (in Japanese).
SVM PerfService definition XMLApply a patch to the SVM Perf (refer to Use SVM Perf)
CRF++Service definition XMLApply patch to the CRF++ (refer to Use CRF++)
TinySVMService definition XMLApply a patch to the TinySVM (refer to Use TinySVM)

Links