본문 바로가기
Programming/python

spaCy 사용하기 - 설치 및 dependency parser 사용

by 유주원 2018. 4. 16.

spaCy 설치는 정말 간단하다. (ubuntu 기준)


아래와 같이 pip install 로 설치해 주면 된다.


$> pip install -U spacy


spaCy를 설치한 후에는 언어에 맞는 모델도 설치를 해야 한다. (tokenizing, parsing, pos tagging 등을 하기 위한 모델)


spaCy에서는 총 8가지 언어를 지원하며 (한국어는 지원 안함) 지원 언어는 아래와 같다.



각 언어별 모델 설치는 아래와 같이 진행하면 된다.


python -m spacy download en

python -m spacy downlonad de

python -m spacy download es

python -m spacy downlonad pt

python -m spacy download fr

python -m spacy downlonad it

python -m spacy download nl

python -m spacy downlonad xx


각 언어별 모델에 대한 더 자세한 설명은 아래의 링크를 참조하자.


https://spacy.io/models/


spaCy 2.0 이상 부터는 설치한 spaCy 패키지와 다운로드 받은 모델 간의 호환성도 체크가 가능하다. 만약 호환이 안되는 모델 발견 시에는 해당 모델에 대한 설치 메시지가 나타나게 된다.


python -m spacy validate


spaCy 2.0 부터는 GPU 환경을 지원하는 뉴럴 모델을 지원한다고 한다. 아래와 같이 CUDA HOME과 PATH를 지정해주고 spaCy를 설치하면 GPU 환경에서 모델을 돌려 볼 수가 있다.





이제 spaCy 패키지와 모델 설치가 끝났다면 실제로 spaCy를 사용해보자.


우선 아래와 같이 모델을 불러오자.


import spacy

nlp = spacy.load('en')


한국어가 지원되지 않기 때문에 우리는 영어 모델을 이용해서 nlp 작업을 진행할 것이다.

model 생성이 끝났으면 아래의 문장을 입력으로 받아 pos tagging외의 기타 작업들을 진행해 보자.



그림에서 보는 것과 같이 pos tagging 이외에도 dependency, alphabet 인지 여부, 금칙어 여부, lemma 등의 정보를 추출할 수가 있다.

문장에 대한 시각화도 가능하다. dependency parse에 대해 시각화를 해보자.



displacy를 이용하면 document에 대한 시각화가 가능해진다. entity recognizer도 시각화로 표현해 보자.



아래와 같이 사용하면 명사구만 따로 처리할 수도 있다.



spaCy에서 Apple과 U.K. startup 이렇게 두 개 단어를 명사구라고 판단했고, Apple 같은 경우 nsubj(주격 명사구), U.K startup을 dobj(직접 목적어)로 각각 처리했다.

 

dependenct parser tree의 각각의 개별 항목을 가져올 수도 있다.




의존 관계의 확인을 lefts, rights, n_lefts, n_rights property를 써서 확인할 수도 있다.

looking의 경우 왼쪽의 2개의 dependency를 가지고 있고 오른쪽으로는 1개의 dependency를 가지고 있으며 코드로는 아래와 같이 표현이 가능하다.



해당 dependency tree의 부모 혹은 조상 text를 찾을 수도 있다.



왼쪽의 끝 노드, 오른쪽의 끝 노드를 알 수 있도록 left_edge, right_edge property를 제공하고 있으며 left_edge.i를 하면 해당 항목의 index 값이 나타나게 된다.


만약에 '아 나는 dependency parser 안쓸꺼야' 라고 한다면 아래와 같이 disable 해주자.

(괜시리 안쓰는데 parser 추가해서 성능 낮출 필요 없으니깐..)


disable은 아래와 같은 방식으로 할 수가 있다.


nlp = spacy.load('en', disable=['parser'])

doc = nlp(u'Apple is looking at buying U.K startup for $1 billion', disable=['parser'])