본문 바로가기
Programming/python

spaCy 사용하기 - Training Models

by 유주원 2018. 4. 24.

spaCy의 훈련 로직은 대충 아래의 그림과 같다. 


training data는 text와 label로 구성이 되어져 있고, Model에서는 해당 text에 대해 label을 예측한다. 정답과 비교해서 차이만큼 gradient를 적용하고 이런식으로 반복함으로써 모델을 update하는 구조이다.


spaCy에서는 GoldParse라는 class를 지원하는데 이걸 이용해서 모델을 학습할 수도 있다.



entity 학습의 경우 BILUO scheme를 따른다.


또한 학습 성능을 향상시키기 위해 dropout을 적용할 수도 있다.



아래는 간단하게 모델을 업데이트 하는 코드를 설명하고 있다.



english 타입의 빈 모델을 만들고, training data를 적당히 섞어 준 다음에 data를 1개씩 가져와서 모델을 업데이트 하는 방식이다.


아래는 ner model을 업데이트 하는 코드이다.



제일 먼저 model을 load하고, 그 후에 model에서 ner pipeline을 찾는다. (없으면 만들어 준다.) 

그 후에 ner pipeline에 추가된 entity 이름들을 넣어준다.

그리고 나서 모델 업데이트를 진행한다. 여기서 특이한 점은 ner을 제외한 다른 pipe들은 disable을 시켜 준다는 점이다.

학습이 완료되었으면 모델을 저장하고, 테스트 데이터를 통해 해당 모델을 평가한다.