Skip to content

사용자 사전 자동 추출

krikit edited this page Jan 31, 2019 · 1 revision

기분석 사전

기분석 사전은 사용자가 직접 기술해 줄 수도 있지만 코퍼스가 있다면 자동으로 추출하는 것도 가능합니다. 자동으로 추출되는 엔트리는 다음의 간단한 조건에 의해 추출됩니다.

  • 음절의 길이가 4 이상인 어절
  • 어절의 분석 결과가 문맥에 상관 없이 코퍼스 전체에서 일관된 경우
  • 지정한 빈도 이상으로 출현 (세종 코퍼스에서는 10 이상)

아래와 같은 명령을 통해 기분석 사전을 자동으로 추출할 수 있습니다.

./extract_preanal.py -c corpus --output preanal.auto

-c corpus 옵션은 세종 코퍼스 형식의 *.txt 파일이 있는 입력 디렉토리를 지정하는 옵션입니다.

--output preanal.auto 옵션은 출력 파일을 지정하는 옵션입니다. 결과 파일을 preanal.* 형식의 이름으로 rsc/src 디렉토리 아래에 두면 기분석 사전 빌드에 사용되게 됩니다.

오분석 패치

기분석 사전과 마찬가지로 코퍼스가 있다면 오분석 패치도 어느정도 자동화된 과정에 의해 추출하는 것이 가능합니다. 오분석 패치는 시스템이 발생시킨 오분석에 대해 정분석으로 교정하는 것이므로, 시스템의 결과가 달라지면 당연히 패치도 달라져야 합니다. 따라서, CNN 모델이 달라지면 오분석 패치도 새로 생성해야 하는 것은 물론, base, large 등 모델의 하이퍼파라미터에 따라서도 달라져야 합니다.

오분석 패치는 특정 오분석에 대해 정분석으로 교정하는 것이므로, 기분석 사전과는 달리 부작용이 없습니다. 다만 지정한 오분석이 발생하지 않으면, 패치가 적용되지 않을 뿐입니다.

오분석 패치는 1) 패치 후보를 추출하는 단계와 2) 후보를 코퍼스에서 검증하는 단계로 나눠서 추출합니다.

오분석 패치는 시스템의 결과를 코퍼스와 비교하여 오류 여부를 판단하게 되므로 반드시 시스템과 리소스를 빌드한 후 진행해야 합니다. 빌드에 관한 내용은 빌드 및 설치 문서를 참고하시기 바랍니다.

패치 후보 추출

아래와 같은 명령을 통해 오분석 패치 후보를 자동으로 추출할 수 있습니다.

./extract_errpatch.py -c corpus --lib-path ../build/lib/libkhaiii.so --rsc-dir ../build/share/khaiii --output errpatch.candi

-c corpus 옵션은 세종 코퍼스 형식의 *.txt 파일이 있는 입력 디렉터리를 지정하는 옵션입니다.

--lib-path ../build/lib/libkhaiii.so 옵션은 빌드한 khaiii 라이브러리 경로입니다.

--rsc-dir ../build/share/khaiii 옵션은 빌드한 khaiii 리소스 디렉터리입니다.

--output errpatch.candi 옵션은 출력 파일을 지정하는 옵션입니다.

패치 후보 검증

train/validate_errpatch.pytrain/extract_errpatch.py로부터 생성한 오분석 패치 후보를 코퍼스 전체에서 검증하는 스크립트입니다. 아래와 같은 명령을 통해 실행할 수 있습니다.

./validate_errpatch.py -c corpus --lib-path ../build/lib/libkhaiii.so --rsc-dir ../build/share/khaiii --input errpatch.candi --output errpatch.valid

실행 방법은 패치 후보 추출 스크립트와 동일합니다. 다만 --input errpatch.candi 옵션을 통해 이전에 추출한 후보를 입력으로 전달하고, --output errpatch.valid 옵션을 통해 검증이 완료된 결과를 출력으로 전달합니다.

이렇게 최종적으로 생성된 errpatch.vadlid 파일로 rsc/src/errpatch.auto 파일을 업데이트하면 오분석 패치의 자동 생성 과정은 완료됩니다.

하나의 패치 후보를 전체 코퍼스에 적용해보고 부작용이 없는지 검증하므로 모든 패치에 대해 검증하는 작업은 상당히 오랜 시간이 걸립니다. train/hd_validate_errpatch.bash하둡streaming을 이용하여 이러한 검증 작업을 좀더 빠르게 실행할 수 있는 스크립트입니다.

그러나 개발하는 분들에 따라 하둡 환경이 매우 상이할 것으로 생각되므로 이 스크립트에 대한 자세한 설명은 생략합니다. 하둡을 이용할 분들은 bash 스크립트를 참고하여 각자 환경에 맞게 수정하여 사용하시기 바랍니다.