[파이토치로 배우는 자연어 처리] #1 NLP 기술 빠르게 훑어보기

Clay Ryu's sound lab·2022년 3월 22일
0

Note for 2022

목록 보기
22/47

1-1.말뭉치, 토큰, 타입

말뭉치

토큰화

import spacy
nlp = spacy.load('en')
text = "Mary, don't slap the green witch"
print([str(token) for token in nlp(text.lower())])
# ['mary', ',', 'do', "n't", 'slap', 'the', 'green', 'witch']

from nltk.tokenize import TweetTokenizer
tweet = u"Snow White and the Seven Degrees #MakeAMovieCold@midnight:-)"
tokenizer = TweetTokenizer()
print(tokenizer.tokenize(tweet.lower()))
# ['snow', 'white', 'and', 'the', 'seven', 'degrees', '#makeamoviecold', '@midnight', ':-)']

타입

말뭉치에 등장하는 고유한 토큰. 말뭉치에 있는 모든 타입의 집합이 어휘 사전 또는 어휘lexicon이다.

1-2.유니그램, 바이그램, 트라이그램, ..., n-그램

텍스트에 있는 고정 길이의 연속된 토큰 시퀀스

def n_grams(text, n):
	'''
    takes tokens or text, returns a list of n-grams
    '''
    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))
# [['mary', ',', "n't"], 
# [',', "n't", 'slap'], 
# ["n't", 'slap', 'green'], 
# ['slap', 'green', 'witch'], 
# ['green', 'witch', '.']]

문자 n-gram

부분단어subword 자체가 유용한 정보를 전달한다면 문자 n-gram을 생성할 수 있다.

1-3.표제어와 어간

표제어lemma는 단어의 기본형이다.
어간 추출stemming은 표제어 추출 대신에 사용하는 축소 기법이다.
단어 'geese'를 표제어 추출하면 'goose', 어간 추출하면 'gees'가 생성된다.

import spacy
nlp = spacy.load('en')
doc = nlp(u"he was running late")
for token in doc:
  print('{} --> {}'.format(token, token.lemma_))
# he --> -PRON-
# was --> be
# running --> run
# late --> late

1-4.문장과 문서 분류하기

TF와 TF-IDF 표현이 문서나 문장 같은 긴 텍스트 뭉치를 분류하는데 유용하다.
토픽 레이블 할당, 리뷰의 감성 예측, 스팸 이메일 필터링, 언어 식별, 이메일 분류 같은 작업은 지도 학습 기반의 문서 분류 문제이다.

1-5.단어 분류하기 : 품사 태깅

문서에 레이블을 할당하는 개념을 단어나 토큰으로 확장할 수 있다.
단어 분류 작업의 예로는 품사part of speech, 태깅tagging이 있다.

import spacy
nlp = spacy.load('en')
doc = nlp(u"Mary slapped the green witch.")
for token in doc:
  print('{} - {}'.format(token, token.pos_))
# Mary - PROPN
# slapped - VERB
# the - DET
# green - ADJ
# witch - NOUN
# . - PUNCT

1-6.청크 나누기와 개체명 인식

청크나누기chinking 또는 부분 구문 분석shallow parsing의 목적은 명사, 동사, 형용사 같은 문법적 요소로 구성된 고차원의 단위를 유도해 내는 것이다.

import spacy
nlp = spacy.load('en')
doc = nlp(u"Mary slapped the green witch.")
for chunk in doc.noun_chunks:
  print('{} - {}'.format(chunk, chunk.label_))
# Mary - NP
# the green witch - NP

개체명named entity는 사람, 장소, 회사, 약 이름과 같은 실제 세상의 개념을 의미하는 문자열이다.

1-7.문장구조

구성 구문 분석constituent parsing, 의존 구문 분석dependency parsing

1-8.단어 의미와 의미론

단어에는 의미sense가 하나 이상 있다.

profile
chords & code // harmony with structure

0개의 댓글