NLP study

김태준·2025년 3월 9일
0

NLP Study

목록 보기
1/1

해가 거듭할수록 LLM 모델을 다루는 데이터 분석 공모전이 더욱 많아지고 있다.
데이터 분석가인 입장에서 LLM은 이젠 선택이 아닌 필수 항목이라는 생각이 든다.
그렇기에 LLM에 앞서 NLP 기초 학습을 수행하고, 나아가 LLM 모델을 올해 공부해보려 한다.

NLP

자연어 처리에서 데이터 수집이 진행되었다면, 대부분이 정제되지 않은 텍스트 형태일 것이다.
그런 상태에서 분석을 수행하기 위해선 주어진 텍스트 데이터들을 토큰화 & 정규화 & 정제 하는 업무를 수행해야만 한다.

토큰화부터 차차 학습을 해보자.

  • Word Tokenization
    토큰의 기준을 단어로 하는 경우, 단어 토큰화라고 한다. 다만 여기서의 word는 단어를 포함하여 단어구, 의미를 갖는 문자열로도 간주된다.

토큰화의 예시로는 마침표(.), 컴마(,), 물음표(?), 세미콜론(;), 느낌표(!) 등과 같은 기호와 띄어쓰기 공백을 제거하는 경우들도 포함한다.
그러나, 구두점, 특수문자를 전부 제거하면 토큰 자체가 가지는 의미를 잃어버리는 경우도 있어서 문제가 될 수 있고, 특히 한국어의 경우 띄어쓰기 단위로 자르는 영어와 달리 의미가 달라질 수도 있기에 주의해야 한다.

NLTK 라이브러리에서 WordPunctTokenizer는 구두점을 별도로 분류하는 특징을 가지고 있다.

주의 사항은 다음과 같다.

  1. 구두점이나 특수 문자를 단순 제외해서는 안 된다.
  2. 줄임말과 단어 내 띄어쓰기가 있는 경우 (New York)

nltk 라이브러리를 기준으로 함수들을 살펴보면 다음과 같다.

  • work_tokenize : Don't를 Do와 n't로 분리.
  • WordPunctTokenizer().tokenize() : 구두점을 별도로 분류하는 특징. Don't를 Don과 't로 분리.
from nltk.tokenize import TreebankWordTokenizer

tokenizer = TreebankWordTokenizer()

text = "Starting a home-based restaurant may be an ideal. it doesn't have a food chain or restaurant of their own."
print('트리뱅크 워드토크나이저 :',tokenizer.tokenize(text))
트리뱅크 워드토크나이저 : ['Starting', 'a', 'home-based', 'restaurant', 'may', 'be', 'an', 'ideal.', 'it', 'does', "n't", 'have', 'a', 'food', 'chain', 'or', 'restaurant', 'of', 'their', 'own', '.']

문장을 토큰화하는 방법 : sent_tokenize

한국어의 경우 문장 토큰화를 진행할 경우, 박상길님이 개발한 KSS (Korean Sentence Splitter)를 대부분 추천한다.

영어의 경우, New York과 같은 합성어, he's와 같이 줄임말에 대해 예외처리를 하면, 띄어쓰기 토큰화를 수행해도 매우 잘 작동하는 것을 알 수 있다. 하지만, 띄어쓰기 단위가 되는 단위인 '어절' 토큰화를 한국어 NLP에선 적용이 힘들다. 그 이유는 한국어가 교착어(조사, 어미 등을 붙여서 말을 만드는 단어)이기 때문이다.

한국어 토큰화를 진행하기 위해선 형태소란 개념을 반드시 이해해야 한다.
형태소는 2가지 종류가 있는데, 자립 형태소와 의존 형태소가 있다.

  • 자립 형태소 : 접사, 어미, 조사와 상관없이 자립하여 사용할 수 있는 형태소.
  • 의존 형태소 : 다른 형태소와 결합하여 사용되는 형태소, 조사, 어미, 어간을 말한다.

OKT 형태소 분석기로 토큰화를 시도할 경우, morphs (형태소 추출), pos(Part-of-speech tagging) 폼사 태깅, nouns(명사 추출)

OKT외에도 kkma 형태소 분석기가 존재하는데, 어떤 형태소 분석기를 선택하느냐는 사용자의 판단이 중요하다.

코퍼스에서 용도에 맞게 토큰을 분류하는 작업을 토큰화라고 하며, 토큰화 작업을 하기 전/후로 텍스트 데이터를 용도에 맞게 정제/정규화 하는 일을 항상 함께한다.

  • 정제 : 갖고 있는 코퍼스로부터 노이즈 데이터를 제거한다.
  • 정규화 : 표현 방법이 다른 언어들을 통합시켜 같은 단어로 만들어준다.
  1. 대/소문자 통합
  2. 규칙에 기반한 표기가 다른 단어 통합 (usa, us), (uk, england)
  3. 불필요 단어 제거 (등장 빈도가 적거나 길이가 짧은 단어 등)
  4. 정규 표현식

단어의 개수를 줄일 수 있는 기법.
1. 표제어 추출 (Lemmatization)

be 동사 (am, are, is) 등. 단어의 형태학적 파싱을 먼저 진행하여 형태소의 종류인 어간과 접사로 단어를 분류하는 기법.
(nltk - WordNetLemmatizer)

  1. 어간 추출 (Stemming)

어간을 추출하는 작업으로 어간이란, 단어의 의미를 담고 있는 핵심적인 부분을 의미한다.
electricical -> electric || formalize -> formal

그러나, 이러한 알고리즘을 사용했을 때 지나친 일반화가 발생할 수 있다.

한국어에서의 어간 추출

이 중 용언에 해당되는 동사와 형용사는 어간과 어미의 결합으로 구성된다.

활용이란 용언의 어간과 어미를 가지는 일을 말한다.

어간 : 용언을 활용할 때 원칙적으로 모양이 변하지 않는 부분. 어미에 선행하는 부분, 때론 어간의 모양도 바뀔 수 있다.
어미 : 용언의 어간 뒤에 붙어서 활용하면서 변하는 부분이며 여러 문법적 기능을 수행한다.
활용은 어간이 어미를 취할 때 어간의 모습이 일정하다면 규칙 활용, 어간이나 어미의 모습이 변하는 불규칙 활용으로 나뉜다.

불용어의 경우 개발자가 직접 지정하여 제거할 수 있다.
stop_words = " " 지정한 후, set 처리하여 텍스트 데이터가 포함되면 제거하도록 처리할 수 있다.

정규표현식 모듈 함수 및 문법 설명 참고
https://wikidocs.net/21703

profile
To be a DataScientist

0개의 댓글

관련 채용 정보