Spacy를 활용한 나만의 한국어 NER 모델 만들기 (1)
by Cori사용자 쿼리에 대해, 증권 종목 관련 질문인지 아닌지 1차적으로 분류하고, 증권 종목 관련 쿼리인 경우 어떤 증권 종목인지를 추출하는 업무를 진행하게 되었다. 증권 종목을 인식하기 위해서는 NER 모델을 사용해야겠다고 판단했고, 이 중 Spacy 모델을 사용하여 엔티티 추출하는 과정을 정리해두려 한다.
Step 1. 학습 데이터 생성
증권 종목 학습 데이터를 만들기 위해서, 증권사 어플을 사용하여 대화한 로그 파일을 사용했다.
해당 파일은 다음과 같이 구성되어 있다.
대화날짜 | Q/A | 텍스트 | User_id |
이 중, 텍스트에 증권 종목이 포함된 경우, 해당 부분을 STOCK으로 레이블링 진행했다.
* 다음 포스트에서 살펴보겠지만, 위와 같은 패턴으로만 구성한 데이터세트의 경우, 생각보다
성능이 좋지 않게 나온다. 그래서 이후 데이터세트도 다양한 패턴으로 구성할 예정이다.
Step 2. Mecab & Mecab-ko-dic 설치
spacy 한국어 모델을 사용하려면, 한국어 형태소 분석기 (mecab)가 필요하다. spacy 토크나이저 때문인데,
기본으로 지원하지 않기 때문에 추가적인 설치가 필요하다. 다음 사이트에서 mecab-ko 패키지를 설치해주자.
최신 버전으로 다운받으면 된다.
$ tar zxfv mecab-XX-ko-XX.tar.gz
$ cd mecab-XX-ko-XX
$ ./configure
$ make
$ make check
# su
$ make install
다운로드를 성공적으로 마쳤으면, 다음 사이트에서 Mecab-ko-dic도 마찬가지로 설치해주자.
$ tar zxfv mecab-ko-dic-XX.tar.gz
$ cd mecab-ko-dic-XX
$ ./configure
$ make
# su
$ make install
* 설치 중에 libmecab.so.2 관련 에러가 뜬다면, 다음 명령어를 입력하고 다시 해보자.
$ sudo ldconfig
마지막으로, natto-py 패키지를 설치해주어야 한다.
natto-py 패키지는 C++로 작성된 Mecab을 파이썬에서 쉽게 사용할 수 있게 해준다.
$ pip install natto-py
Step 3. Spacy 기본 설정
한국어를 지원하는 spacy 모델을 사용하려면, 추가 설치가 필요하다.
$ python -m spacy download ko_core_news_sm
$ python -m spacy download ko_core_news_md
$ python -m spacy download ko_core_news_lg
이제 Spacy 모델을 사용하기 위한 준비를 모두 마쳤다.
Step 4. Spacy 모델 학습
Spacy NER 모델 학습은 다음 사이트를 참고하였다.
도중에 나오는 NER training produces invalid config.cfg 에러는 config.cfg 파일이 없어서 발생하는 오류인데, 다음 명령어를 통해 생성해 줄 수 있다.
$ python -m spacy init config base_config.cfg --lang ko --pipeline ner
$ python -m spacy init fill-config base_config.cfg config.cfg
모든 준비가 완료되었다. 이제 모델을 학습해보자.
!python -m spacy train config.cfg --output ./ --paths.train ./train.spacy --paths.dev ./train.spacy
학습 로그는 다음과 같이 나온다. 로그를 보면 완벽한 증권종목 개체 탐지기를 만든것처럼 보이는데 ..
실제로 여러 문장들을 입력해봤을 때, 학습 데이터에 대해서는 성능이 나쁘지 않게 나온다.
하지만 다른 실 사용 문장들을 입력했을 때, 결과는 절망적이었다.
아직 개선할 점이 많은거 같아, 다음 포스팅에서는 NER 모델 성능 개선을 위한 여정을 기록해보려 한다.
'AI > Natural Language Processing' 카테고리의 다른 글
FastAPI를 이용한 추론 모델 배포 (feat.docker) (4) | 2024.09.20 |
---|---|
Self-RAG (실습) (1) | 2024.07.03 |
Exploring RAG for Tables (실습) (0) | 2024.06.28 |
Exploring Query Rewriting (실습) (0) | 2024.06.28 |
Exploring Semantic Chunking (실습) (0) | 2024.06.26 |
블로그의 정보
코딩하는 오리
Cori