Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

mecab-ko-dic 사용자 사전

179 Aufrufe

Veröffentlicht am

* mecab-ko, mecab-ko-dic 환경에서 사용자 사전 추가 과정을 정리
* 사용자 사전 추가 과정에서 LEFT-ID, RIGHT-ID 검색 문제 해결 과정 정리

1. mecab-ko-dic
2. 사용자 사전 반영 과정
3. 사용자 사전 반영 중 발생 문제 정리
4. 최종 사전 반영 과정

Veröffentlicht in: Daten & Analysen
  • Als Erste(r) kommentieren

mecab-ko-dic 사용자 사전

  1. 1. mecab-ko-dic 사용자 사전 이찬희 2020. 02. 25.
  2. 2. 1. mecab-ko-dic
  3. 3. MeCab • MeCab • 일본어를 토큰화하고 품사를 부착하기 위한 오픈 소스 라이브러리 • Conditional Random Fields(CRFs) 알고리즘을 통해 학습 • mecab-ko • MeCab 엔진에 한국어 특성에 맞는 기능을 추가한 은전한닢 프로젝트의 결과물 • 일본어는 없으나 한국어에는 존재하는 띄어쓰기의 비용 처리가 포함되어 있음 • mecab-ko-dic • 세종 말뭉치를 사용하여 학습한 형태소 목록과 단어/연접 비용이 정의된 사전 • mecab-ko에서 참조하여 형태소 분석을 진행 • MeCab: https://taku910.github.io/mecab • 은전한닢 프로젝트: http://eunjeon.blogspot.com/ • mecab-ko: https://bitbucket.org/eunjeon/mecab-ko • mecab-ko-dic: https://bitbucket.org/eunjeon/mecab-ko-dic
  4. 4. mecab-ko-dic 사용자 사전 • 시스템 사전과 사용자 사전의 형식이 동일 • 사용자 사전 작성 시 작성이 힘든 연접 비용과 단어 비용 산출은 관련된 부분은 제공하는 쉘 스크립트가 (./tools/add-userdic.sh) 처리해 줌 • 사용자 사전으로 등록된 단어라도 강제로 출력되는 것은 아님 시스템 사전의 단어들과 비용 경쟁을 통해 결과로 출력됨 • 연접 비용: 형태소가 결합할 때 발생하는 비용 • 단어 비용: 단어 자체가 가지고 있는 비용 • 연접 비용과 단어 비용을 통해 입력받은 문자열에 최소 비용을 가진 경로로 형태소 분석을 진행
  5. 5. mecab-ko-dic 사전 형식 • mecab-ko-dic 품사 태그 설명: https://docs.google.com/spreadsheets/d/1-9blXKjtjeKZqsf4NzHeYJCrr49-nXeRF6D80udfcwY/edit#gid=1718487366 표층형 사전 내용이 연결될 문자열 품사 태그 표층형을 구성하는 형태소의 품사 (여러 형태소가 합쳐진 문자열이면 '+' 기호로 구분) 의미 부류 개체명과 유사 (mecab-ko-dic 학습 과정에서 의미 부류 목록이 정의) 종성 유무 표층형의 마지막 글자의 종성 존재 여부 읽기 한글의 경우에만 존재하고 표층형과 동일
  6. 6. mecab-ko-dic 사전 형식 • mecab-ko-dic 품사 태그 설명: https://docs.google.com/spreadsheets/d/1-9blXKjtjeKZqsf4NzHeYJCrr49-nXeRF6D80udfcwY/edit#gid=1718487366 타입 *(없음) / Inflect(활용) / Compound(복합 명사) / Preanalysis(기분석)의 네 가지 타입을 지정할 수 있음 첫번째 품사 / 마지막 품사 Inflect, Preanalysis 타입인 경우 작성되며, 구성하는 첫 번째 형태소와 마지막 형태소의 품사를 작성 (Compound 타입이나 타입이 없는 경우에는 내부 비용 산출 과정에서 영향이 없음) 표현 타입이 지정 시(=복합 형태소일 때) 작성하며 표층형을 구성하는 형태소들의 (표층형/품사/의미 부류)를 작성
  7. 7. mecab-ko-dic 사전 형식 • mecab-ko-dic 품사 태그 설명: https://docs.google.com/spreadsheets/d/1-9blXKjtjeKZqsf4NzHeYJCrr49-nXeRF6D80udfcwY/edit#gid=1718487366 LEFT-ID / RIGHT-ID 해당 형태소의 전/후 연접 비용 계산을 위해 사용되는 ID 단어 비용 단어 자체의 비용 - LEFT-ID, RIGHT-ID, 단어 비용은 mecab-ko-dic 프로젝트에서 제공하는 사용자 사전 반영 쉘 스크립트에 의해 자동으로 부착 LEFT-ID RIGHT-ID 단어 비용
  8. 8. 2. 사용자 사전 반영 과정
  9. 9. 사용자 사전 반영 과정 • 사전 추가 • 사전 컴파일 • 설치 • mecab-ko-dic/user-dic/README.md: https://bitbucket.org/eunjeon/mecab-ko-dic/src/master/final/user-dic/
  10. 10. 사전 컴파일 • 사용자 사전 검색 • LEFT/RIGHT-ID 부착, 단어 비용 부착 • 컴파일 • ./tools/add-userdic.sh 소스: https://bitbucket.org/eunjeon/mecab-ko-dic/src/df15a487444d88565ea18f8250330276497cc9b9/final/tools/add-userdic.sh ./tools/add-userdic.sh 소스 중 일부 사용자 사전 검색 LEFT/RIGHT-ID 부착, 단어 비용 할당 컴파일
  11. 11. LEFT/RIGHT-ID 부착, 단어 비용 할당 • LEFT/RIGHT-ID는 left-id.def, right-id.def 파일을 검색하여 할당 • 단어 비용은 수동으로 할당할 수 있는 방법이 마땅치 않음 • 은전한닢 프로젝트 - 기분석 데이터에 대한 질문: https://groups.google.com/forum/#!searchin/eunjeon/%EB%82%B1%EB%A7%90%7Csort:date/eunjeon/nSIjKkhSRTU/K5ecLWU4CgAJ Q. 말씀해주신 대로 ID와 비용을 수동으로 입력해 보려고 합니다. 그런데 id는 right-id.def와 left- id.def에서 검색하지만 단어비용은 어느 파일에서 참조해야 하는지 모르겠습니다. A. 이미 정의 되어 있는 사전의 단어들을 보시고 유사한 단어의 비용을 참고하시어 정의하는 방법이 있을 것 같습니다. (깔끔한 방법은 없네요) left-id.def right-id.def ID 키 단어 비용 부착 관련 Q&A '*'는 Wildcard로 모든 값에 대해 매칭됨
  12. 12. LEFT/RIGHT-ID 부착 과정 (단일 형태소) ID 검색 키 생성 키 기준 left-id.def, right-id.def 파일 검색 LEFT-ID, RIGHT-ID 부착 단일 형태소의 경우, LEFT-ID 검색 키 = <품사 태그>,<의미 부류>,*,<읽기> RIGHT-ID 검색 키 = <품사 태그>,<의미 부류>,<종성 유무>,<읽기> '제당,,,,NNG,행위,T,제당,*,*,*,*'의 경우 • LEFT-ID 검색 키: 'NNG,행위,*,제당' • RIGHT-ID 검색 키: 'NNG,행위,T,제당' • LEFT-ID: 1785 • RIGHT-ID: 3544
  13. 13. LEFT/RIGHT-ID 부착 과정 (복합, Compound) 복합 형태소 + Compound 타입의 경우, LEFT-ID 검색 키 = <품사 태그>,<의미 부류>,*,* RIGHT-ID 검색 키 = <품사 태그>,<의미 부류>,<종성 유무>,* '제일제당,,,,NNP,인명,T,*,Compound, NNG,NNG,제일/NNG/*+제당/NNG/행위' 의 경우 • LEFT-ID 검색 키: 'NNP,인명,*,*' • RIGHT-ID 검색 키: 'NNP,인명,T,*' • LEFT-ID: 1786 • RIGHT-ID: 3546 ID 검색 키 생성 키 기준 left-id.def, right-id.def 파일 검색 LEFT-ID, RIGHT-ID 부착
  14. 14. LEFT/RIGHT-ID 부착 과정 (복합, Preanalysis) 복합 형태소 + Preanalysis 타입의 경우, LEFT-ID 검색 키 = <첫번째 품사>,<의미 부류>,*,* RIGHT-ID 검색 키 = <마지막 품사>,<의미 부류>,<종성 유무>,* 'CJ제일제당,,,,NNP,인명,T,*, Preanalysis,SL,NNG, CJ/SL/*+제일/NNG/*+제당/NNG/행위' 의 경우 • LEFT-ID 검색 키: 'SL,인명,*,*' • RIGHT-ID 검색 키: 'NNG,인명,T,*' ID 검색 키 생성 키 기준 left-id.def, right-id.def 파일 검색 LEFT-ID, RIGHT-ID 부착
  15. 15. LEFT/RIGHT-ID 부착 과정 중 에러 복합 형태소 + Preanalysis 타입의 경우, LEFT-ID 검색 키 = <첫번째 품사>,<의미 부류>,*,* RIGHT-ID 검색 키 = <마지막 품사>,<의미 부류>,<종성 유무>,* 'CJ제일제당,,,,NNP,인명,T,*, Preanalysis,SL,NNG, CJ/SL/*+제일/NNG/*+제당/NNG/행위' 의 경우 • LEFT-ID 검색 키: 'SL,인명,*,*' • RIGHT-ID 검색 키: 'NNG,인명,T,*' • LEFT-ID: <검색 불가> • RIGHT-ID: <검색 불가> ID 검색 키 생성 키 기준 left-id.def, right-id.def 파일 검색 LEFT-ID, RIGHT-ID 부착 Preanalysis 타입 항목 LEFT/RIGHT-ID 부착 중 에러 발생
  16. 16. 3. 사용자 사전 반영 중 발생 문제 정리
  17. 17. LEFT/RIGHT-ID 부착 과정 중 에러 - 잘못된 '의미 부류'로 검색 복합 형태소 + Preanalysis 타입의 경우, LEFT-ID 검색 키 = <첫번째 품사>,<의미 부류>,*,* RIGHT-ID 검색 키 = <마지막 품사>,<의미 부류>,<종성 유무>,* 'CJ제일제당,,,,NNP,인명,T,*, Preanalysis,SL,NNG, CJ/SL/*+제일/NNG/*+제당/NNG/행위' 의 경우 • LEFT-ID 검색 키: 'SL,인명,*,*' • RIGHT-ID 검색 키: 'NNG,인명,T,*' • LEFT-ID: <검색 불가> • RIGHT-ID: <검색 불가> ID 검색 키 생성 키 기준 left-id.def, right-id.def 파일 검색 LEFT-ID, RIGHT-ID 부착 Preanalysis 타입 항목 LEFT/RIGHT-ID 부착 중 에러 발생
  18. 18. LEFT/RIGHT-ID 부착 과정 중 에러 - 잘못된 '의미 부류'로 검색 복합 형태소 + Preanalysis 타입의 경우, LEFT-ID 검색 키 = <첫번째 품사>,<의미 부류>,*,* RIGHT-ID 검색 키 = <마지막 품사>,<의미 부류>,<종성 유무>,* 'CJ제일제당,,,,NNP,인명,T,*, Preanalysis,SL,NNG, CJ/SL/*+제일/NNG/*+제당/NNG/행위' 의 경우 • LEFT-ID 검색 키: 'SL,인명,*,*' • RIGHT-ID 검색 키: 'NNG,인명,T,*' • LEFT-ID: <검색 불가> • RIGHT-ID: <검색 불가> ID 검색 키 생성 키 기준 left-id.def, right-id.def 파일 검색 LEFT-ID, RIGHT-ID 부착 실제 첫 번째, 마지막 형태소의 의미 부류가 아님 LEFT-ID 검색 키: 'SL,*,*,*' RIGHT-ID 검색 키: 'NNG,행위,T,*' 실제 첫 번째, 마지막 형태소의 의미 부류로 키 생성 시
  19. 19. LEFT/RIGHT-ID 부착 과정 중 에러 - 잘못된 '읽기'로 검색 • 품사 중 조사, 접사 등의 경우 형태소 개수가 한정되어 있기 때문에 left-id.def, right-id.def 파일에 '읽기' 컬럼에 대한 Wildcard '*'가 존재하지 않음 • Preanalysis 타입은 '읽기' 컬럼을 Wildcard 처리하고 키 검색을 하기 때문에 오류가 발생 '읽기' 컬럼에 Wildcard가 없어 에러 발생 left-id.def, right-id.def 파일에 '읽기' 컬럼 Wildcard가 없음
  20. 20. • 복합 형태소 중 Preanalysis 타입은 LEFT/RIGHT-ID 검색 키가 잘못 생성되고 있었음 • 정확한 검색을 위해 '표현' 컬럼에 작성된 '의미 부류', '읽기' 정보를 사용하여 검색 키를 생성해야 에러 없이 좀 더 정확한 값을 찾을 수 있음 • '의미 부류'는 첫 번째, 마지막 형태소의 '의미 부류' 정보를 가지고 키를 생성해야 함 • left-id.def, right-id.def 파일에서 특정 품사에 대한 Wildcard를 제공하지 않기 때문에, 단순히 '읽기' 정보를 Wildcard '*'로 처리하면 에러가 발생 • 변경한 LEFT-ID 키 값 = <품사 태그>,<첫번째 품사>,<첫번째 형태소 의미 부류>, <첫번째 품사의 표층형> • 변경한 RIGHT-ID 키 값 = <품사 태그>,<마지막 품사>,<마지막 형태소 의미 부류>, <마지막 품사의 표층형> • 해당 키 값을 가지고 left-id.def, right-id.def 파일을 직접 검색하여 ID 부착 LEFT/RIGHT-ID 부착 에러 정리 및 해결
  21. 21. LEFT/RIGHT-ID 부착 에러 처리 전후 예시 기존 구분 변경 CJ제일제당,,,, NNP, 인명, T, *, Preanalysis, SL, NNG, CJ/SL/*+제일/NNG/*+제당/NNG/행위 SL,인명,*,* LEFT-ID 검색 키 SL,*,*,* NNG,인명,T,* RIGHT-ID 검색 키 NNG,행위,T,제당 검색 불가 LEFT-ID 1796 (SL,*,*,*) 검색 불가 RIGHT-ID 3544 (NNG,행위,T,*) 현재가,,,, NNG+XSN, *, F, *, Preanalysis, NNG, XSN, 현재/NNG/*+가/XSN/* NNG,*,*,* LEFT-ID 검색 키 NNG,*,*,현재 XSN,*,F,* RIGHT-ID 검색 키 XSN,*,F,가 (NNG,*,*,*) 1780 LEFT-ID 1780 (NNG,*,*,*) 검색 불가 RIGHT-ID 3588 (XSN,*,F,가)
  22. 22. 4. 최종 사전 반영 과정
  23. 23. 단어 비용 부착 • 단어 비용은 직접 붙일 방법이 없어 기존 쉡 스크립트 처리를 이용 • 기존 과정 이용 시 첫번째 품사, 마지막 품사를 임의로 변경하면 오류를 피할 수 있음 • 첫번째 품사, 마지막 품사를 임의로 변경하고 뒤에 원래 품사를 둔 상태로 단어 비용 부착 • 다만, 위의 변경이 비용 산출에 영향을 주진 않는지 확인이 필요했음 단어 비용 부착 시 에러를 회피하기 위한 변경 예시 ■: 임의로 생성한 품사, ■: 원래 품사
  24. 24. 단어 비용 부착 변수 추적 테스트 후 자동 부착되는 단어 비용은 '품사 태그'에만 영향 받음을 확인 (정확하지 않음) 의미 부류, 읽기, 종성 유무, 첫번째/마지막 품사를 변경 시: 단어 비용이 달라지지 않음 품사 태그 변경 시: 단어 비용 차이 존재
  25. 25. 시스템/사용자 사전 동일 항목 비용 조정 • 시스템 사전에 등록된 (표층형, 품사) 조합에 대해 사용자 사전에서 정의한 결과로 대체하여 출력하기 위함 • 사용자 사전의 중복된 항목은 시스템 사전의 단어 비용을 사용하도록 변경 (자동으로 부착되는 단어 비용과 시스템 사전의 학습에 의해 부착되는 비용은 다름) • 시스템 사전의 단어 비용은 임의로 증가 (기존 단어 비용에 +10000으로 진행) 중복된 ('삼성전자', 'NNP') 조합에 대해 사용자 사전을 사용하도록 비용 조정한 결과 (위는 원래 시스템 사전, 아래는 변경 후 시스템 사전과 사용자 사전)
  26. 26. 최종 사전 반영 과정 • 사전 추가 • LEFT/RIGHT-ID 부착, 단어 비용 할당 • 사전의 첫번째 품사, 마지막 품사 컬럼 임의로 조정 (LEFT-ID, RIGHT-ID 검색 에러 회피) • 단어 비용 할당 • 사전 LEFT, RIGHT-ID 수정 • 시스템 사전과 중복된 항목 비용 수정 • 사용자 사전의 단어 비용은 시스템 사전과 같게, • 시스템 사전의 단어 비용은 증가 • 설치

×