2013년 5월 30일 목요일

[indri by cygiwn]cygwin에서 indri 실행

cygwin에서 indri 실행

indri란 검색 시스템이다. 코퍼스(테스트)들을 인덱싱하고 쿼리를 넣어서 실행하면 어떤 문서가 얼마만큼 스코어를 가지는지 알 수가 있다.
indri 시스템은 다른 시스템과 마찬가지로 Linux용과 Window 버전 두개가 존재하는데, Window 버전 같은경우 설치가 쉽고 Window 유저에게는 사용이 쉬우나 쿼리를 한개 뿐이 넣을수 없다는 단점이 있다.
따라서 본 저자는 Window용 indri의 단점을 보완해주는 Linux용 indri를 설치 및 실행 해 볼 것이다.

이글은 2013년 5월 30일에 작성한다.

1.indri 설치
아래의 사이트에서 최신 버전의 indri를 다운 받자.
http://www.lemurproject.org/download-archive.php

tar 파일을 cygwin이 설치된 폴더에 복사를 하고 압축 해제를 한다.
>tar -xvf indri-5.4.tar

압축이 풀린 폴더에 들어 가서 아래와 같은 명령어를 입력한다.
>./configure
>make


2.실행
실행은 위에서 언급 한 것 처럼 두 단계로 나눈다.
첫번째, 테스트 코퍼스를 인덱싱(indexing)하고
두번째, 쿼리를 넣어서 실행을 한다.

하지만, 각 단계 마다 파라미터 파일이라고 일종의 옵션을 설정하는 파일을 만들어야 하는데  그파일의 내용은 아래와 같다
"//" 이것은 프로그래밍 언어에서 주석과 같다

인덱싱 할때(indexing.txt)
<parameters>
 <corpus>
   <path>Courpus</path> //코퍼스의 위치
   <class>txt</class> //코퍼스 파일의 형태 ex)ppt,pdf,...
 </corpus>
 <index>./data/index</index> //인덱싱 파일을 만들 폴더 이름
</parameters>

그리고 쿼리는 INQUERY로 만들어야 하는데
INQUERY에 대해서 나중에 시간이 난다면 다시 정리해보겠다
우선 쿼리를 실행할 때는 아래와 같은 파라미터 파일을 만들면 된다.

쿼리를 실행할때(query.txt)
<parameters>
<index>./data/index</index>
<query>
 <number>1</number> //몇번째 쿼리 인지
 <text>#combine(#wsyn(0.944036 대통령과 0.873368 대통령의) #wsyn(0.981478 에봇에 0.97925 다툼이 0.956589 찔러 0.948236 짜서) #wsyn(1.0 해변의) alberto fujimori #wsyn(1.0 스캔들에서) #wsyn(1.0 신문해서 1.0 받아서도 0.75493 용서받는))</text>
</query> //INQUERY의 형태 예제
<runID>testID</runID> //아이디 입력
<trecFormat>true</trecFormat>
</parameters>

여기서 쿼리가 여러개면 <number>,<text>만 순서대로 여러개 늘어 주면 된다.

이렇게 파라미터 파일이 완성 되었다면. 아래와 같은 명령어를 입력해서 인덱싱과 쿼리를 실행하면 된다.

인덱싱
./BuildIndex ./data/indexing.txt(인덱싱 파일이 있는 경로)

그러면 indexing.txt 파라미터 파일에 적힌 <index>속성의 폴더 경로에 위 테스트 코퍼스를 인덱싱한 파일이 완성 되게 된다. 여기서 중요한건 인덱싱을 한번더하게되면 중복이 되겠때문에 다른 문서를 인덱싱 할려고한다면 인덱싱 폴더의 경로를 바꿔주던가, 같은 폴더안에 파일 들을 지워 줘야한다.

그리고 실행은
./IndriRunQuery ./data/query.txt(쿼리 파일이 있는 경로)
이렇게 하면 화면에 뿌려 지게 되는데
파일로 존재하게 하고 싶다면
./IndriRunQuery ./data/query.txt >>a.txt
라하면된다. 여기서도 마찬가지로 a.txt 한 파일의 결과 값에 쿼리를 실행 했다면 결과 값이 중복되어 쌓이게 때문에 주의 해야 한다.


수정중

2013년 5월 27일 월요일

[how to use the GIZA++ on Window by Cygwin] : Cygwin으로 Giza++ 사용하기

GIZA++은 번역 확률을 구하는 툴이다(SMT:statical machine translation).
IBM Model 1~5까지 사용 가능하고 HMM으로 word alignment를 할 수 있다.

기본적으로 Linux 환경에서 설치 및 사용이 가능한데, 
Windows 사용자라면 Cygwin을 별로도 설치해서 사용 할 수 있다.
Cygwin은 Windows에서 Linux 처럼 사용 할 수 있는 tool이다.
저자는 BigData를 처리를 해야 하고 원래 OS가 윈도우라서 일부로 Cygwin에서 설치 및 사용 해보았다.

한국어로 설명이 잘 되어 있는 웹페이지가 없으므로 도움이 되고자 몇자 적어본다.
이 블로그는 http://arabicnlp.blogspot.kr/2009/06/how-to-setup-giza-on-windows.html를 참조 하였다.

이글은 2013년 5월 28일에 작성 되었다.

우선 GIZA++과 Cygwin에 대해서 설명이 더 필요 한다면 아래의 링크를 참조 하기 바란다.
GIZA++ :  http://www.statmt.org/moses/giza/GIZA++.html 
Cygwin : http://www.cygwin.com/


GIZA++ 설치
1. GIZA++을 다운로드 해라. download
2. Cygwin을 설치해라. 단, 주의 할 점은 설치시 패키지 선택창에서 다음과 같은 패키지들을 설치 해야 한다. [gcc, g++, binutils, make](cygwin을 설치 해본 사람은 알것이다. 잘 모르면 페키지 선택하는 창까지 다음다음을 눌러 보자)
3. 1번에서 받은 압축 파일을 Cygwin이 설치된 폴더(home/user/)폴더에 압축을 풀자. 그러면 폴더를 따라 들어 가면 GIZA++과 mkcls폴더가 나오는 우선 GIZA폴더로 이동해본다.

    cd /giza++
    make
4. 위와 같이 make 명령어를 실행 해서 설치를 한다.
5. 설치를 하면 GIZA++.exe, snt2plain.out, plain2snt.out, snt2cooc.out 가 설치 되었다고 뜰 것이다.



GIZA++ 실행
우선 parallel corpus나 comparable corpus가 있어 야된다.
parallel corpus는 source language문장이 target language 문장으로 완벽하게 번역된 문장들을 모은 말뭉치를 말하며, comparable corpus는 parallel 만큼 완벽하지만 어느정도 비슷하게 유사한 문장으로 번역된 문장들을 모은 corpus가 된다.
corpus들을 넣어주면 번역 확률이 나오는 것이다.

저자는 source를 영어, target을 한글이라 하겠다.

corpus가 준비되면 GIZA++ 폴더에 넣고 일반 text로 이루어진 파일들을 GIZA format으로 바꿔주는 작업이 필요한데 아래와 같은 명령어를 사용하면 된다.

./plain2snt.out file1(영어) file2(한글)

그러면 확장자가 vcp인 파일과 snt 파일 만들어 지게 된다.
vcp 파일은 각각 file1(영어), file2(한글)에 대해서 만들어지고
snt 파일은 file1_file2.snt, file2_file1.snt 이런식으로 파일이 만들어지는데
이것은 번역확률을 구하고잘 할때 방향(direction)을 의미 하는것 같다.(;;)

이제 GIZA를 실행하면 되는데 아래와 같다

./GIZA++ -s file1.vcp -t flie2.vcp -c file1_file2.snt -o result

저자는 영어가 source고 한글이 target이니 위와 같이 했다.
result는 최종적으로 구해지는 문서이다.

그 문서의 형태는 아래와 같다.


위 그림 A열은 source고, B열은 target이고, C 열은 source가 target으로 번역될 확률이다.