파이토치 자연어처리(4) - NLP 기초
토큰 : 단어, 숫자
샘플 : 텍스트 + 메타데이터 묶음 집합 = 데이터 포인트라고 함
데이터셋 : 이런 샘플들의 묶음
1. 텍스트를 토큰화시키기 (단어 단위로 썰어주기)
#spaCy 패키지에서의 토큰화
import spacy
nlp = spacy.load('en')
text = "Mary, don't slap the green witch"
print([str(token) for token in nlp(text.lower())])
#nltk 패키지에서의 토큰화
from nltk.tokenize import TweetTokenizer
tweet = u "Snow White and the Seven Degrees
#MakeMovieCold@midnight:-)"
tokenizer = TweetTokenizer()
print(tokenizer.tokenize(tweet.lower())
타입 : 말뭉치의 '고유한' 토큰
2.텍스트에서 n - 그램 만들기
*n -gram
텍스트에 있는 고정 길이(n)의 연속된 토큰 시퀀스
바이 그램 : 토큰 두개로 구성
유니 그램 : 토큰 한 개로 구성
3-그램 만들기
def n_gram(text , n):
return [text[i:i+n] for i in range(len(text)-n+1)]
cleaned = ['mary', ',', "n't", 'slap', 'green', 'witch', '.']
print(n_grams(cleaned, 3))
2. 표제어 추출하기(단어를 표제어로 바꾸기)
토큰을 표제어로 바꾸어 벡터 표현의 차원을 줄여야 한다.
import spacy
nlp = spacy.load('en')
doc = nlp(u"hewas running late")
for token in doc:
print('{} --> {}'.format(token, token_lemma_))
** 어간 추출 : 표제어 추출 대신 사용하는 축소 기법으로 수동으로 만든 규칙을 사용해 단어의 끝을 잘라 어간이라는 공통 형태로 축소하는 것
3. 문장과 문서 분류하기
TF, TF-IDF 표현을 사용하여 주로 긴 텍스트 뭉치를 분류함
토픽 레이블 할당, 리뷰의 감성 예측, 스팸 이메일 필터링 ,인어 식별 ,이메일 분류 등에 사용함
4. 단어 분류하기 : 품사 태깅
문서에 레이블에 할당하는 개념을 토큰으로 확장시키기
import spacy
nlp = spacy.load('en')
doc = nlp(u"Mary slapped the green witch.")
for token in doc :
print('{} - {}}'.foramt(token, token.pos_))
5. 청크 나누기
위에서 형용사 동사 명사 구 이렇게 나눴던 것 같은데, 이럴 때 명사구와 동사구 등을 구분해서 출력을 하여 레이블에 할당하는 과정을 말한다.
부문 분석을 왜 해야 하나?
명사, 동사, 형용사 같은 문법 요소로 구성된 고차원 단위를 유도하기 위해서
** 부분 구문 분석 모델 훈련에 사용할 데이터가 없다면 품사 태깅에 정규식을 적용해 부분 구문 분석 근사가 가능하다.
명사구 부분 구문 분석하기
import spacy
nlp = spacy.load('en')
doc = nlp('MAry slapped the green witch.')
for chunk in doc.noun_chuncks:
print('{} - {}'.format(chunck, chunck.label_))
6. 구문 분석하기
문장구조 판단하는 것
5번까지는 구 단위를 식별하는 부분 구문 분석을 하였다면, 문장 구조 판단은 구 사이의 관계를 파악하는 것을 의미한다.
구 사이의 관계 파악을 통하여 아래와 같은 다이어그램으로 표현하는 것이 가능하다.
1. 구성 구문 분석
2. 의존 구문 분석