카테고리 없음

NLP 기본 용어 및 개념 정리

륵기 2022. 4. 9. 13:29
728x90
반응형

1. 말뭉치와 토큰화

 

말뭉치 (Corpus)

: 원시 텍스트와 이에 관련된 메타데이터를 포함

  시퀀스로 구성된 텍스트를 문자단위로 토큰화 한 것들의 모음

  메타데이터에는 식별자, 레이블, 타임스탬프 등의 다양한 정보 포함

  메타데이터 + 텍스트 들의 집합으로 말뭉치가 구성됨

 

토큰화(Tokenization)

: 텍스트를 토큰으로 나누는 과정

  토큰화의 기준은 다 제각각 다름

 

- 텍스트 토큰화 예시

import spacy
from nltk.tokenize import TweetTokenizer

nlp = spacy.blank('en')
tokenizer = TweetTokenizer()

text = "Mary, don't slap the green witch"
tweet = u"Snow White and the Seven Degrees"


print("----------spacy---------")
print([str(token) for token in nlp(text.lower())])
# ['mary', ',', 'do', "n't", 'slap', 'the', 'green', 'witch']

print("----------nltk---------")
print(tokenizer.tokenize(tweet.lower()))
# ['snow', 'white', 'and', 'the', 'seven', 'degrees']

 

말뭉치에 등장하는 고유한 토큰을 타입이라고 하며 대부분의 토큰들이 타입형태이며, 말뭉치에 있는 모든 다입의 집합을 어휘 사전 및 어휘(lexicon)라고 한다.

단어는 content words. stopwords로 나뉘는데 이는 내용어와 불용어라는 뜻으로 관사와 전치사 같은 것들을 흔히 불용어라고 한다.


2. 기본 언어모델(N-gram)

N-gram은 텍스트에 있는 N의 길이(고정 길이)만큼 연속된 토큰 시퀀스이다.

유니그램은 1개, bi-gram은 2개의 토큰 이런 식으로 구성되어 있다.

def n_grams(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))

"""
[['mary', ',', "n't"], [',', "n't", 'slap'], ["n't", 'slap', 'green'], ['slap', 'green', 'witch'], ['green', 'witch', '.']]
"""

3. 표제어와 어간

 

-표제어

표제어는 단어의 기본형으로써, 사전에 등재된 단어로 볼 수 있다.

예시로 날다의 fly는 flow, flew 등 다양한 표현으로 변형이 되는데 fly가 이 단어들의 표제어이다.

토큰을 표제어로 바꾸면 벡터 표현의 차원을 줄일 수 있다고 한다.

이런 축소화를 lemmatization이라고 한다.

아래 예시를 보면 running의 경우 표제어가 run인 것을 볼 수 있다.

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

 

- 어간

수동으로 만든 규칙을 이용해 단어의 끝을 잘라서 어간(stem)이라는 공통형태로 축소를 하는 방법으로

또 다른 축소 기법이다.

from nltk.stem.porter import *

stemmer = PorterStemmer()
tokens = ['compute', 'computer', 'computed', 'computing']
for token in tokens:
    print(token + ' --> ' + stemmer.stem(token))

"""
compute --> comput
computer --> comput
computed --> comput
computing --> comput
"""

 

4. 문장 구조

구 사이의 관계를 파악하는 구문분석에는 구성구문분석과 의존 구문분석 기법이 있다.

ref : https://ratsgo.github.io/korean%20linguistics/2017/04/29/parsing/

입력 문장에 대해서 트리 형태로 문법 구조를 분석해서 분석 결과를 트리의 노드로 나타낸다.

그러나 이의 단점은 문장의 형태에 따라서 같은 단어라도 다른 문법 구조를 가질 수 있기 때문에 결과가 매번 같을 수는 없다.

728x90
반응형