TOP
class="layout-aside-left paging-number">
본문 바로가기
[파이썬 Projects]/<파이썬 데이터 분석>

[파이썬] 자연어 처리(NLP) 시작하기 - 6

by 기록자_Recordian 2024. 5. 13.
728x90
반응형
시작에 앞서
해당 내용은 <파이썬으로 데이터 주무르기> -민형기 저, BJPUBLIC 출판사 의 내용을 토대로 작성되었습니다.
보다 자세한 내용은 해당 교재를 확인하여 주시기 바랍니다.

지난 챕터
 

[파이썬] 자연어 처리(NLP) 시작하기 - 5

시작에 앞서해당 내용은 -민형기 저, BJPUBLIC 출판사 의 내용을 토대로 작성되었습니다.보다 자세한 내용은 해당 교재를 확인하여 주시기 바랍니다.지난 챕터 [파이썬] 자연어 처리(NLP) 시작하기

puppy-foot-it.tistory.com


Naive Bayes Classifier의 이해 - 영문

 

※ 나이브 베이즈 분류

분류기를 만들 수 있는 간단한 기술로 단일 알고리즘을 통한 훈련이 아닌 일반적인 원칙에 근거한 여러 알고리즘들을 이용하여 훈련된다.

장점으로는 분류에 필요한 파라미터를 추정하기 위한 트레이닝 데이터의 양이 매우 적다.

나이브 베이즈 분류기는 공통적으로 모든 특성 값은 서로 독립임을 가정한다.

 

먼저 필요한 모듈을 가지고 온다.

from nltk.tokenize import word_tokenize # 'word_tokenize' 함수를 가져오기
import nltk

 

그리고 연습용 데이터로 사용할 문장을 입력한다.

train = [('i like you', 'pos'),
         ('i hate you', 'neg'),
         ('you like me', 'neg'),
         ('i like her', 'pos')]

 

그리고 위의 train 문장에서 사용된 전체 단어를 찾는다.

※ 그전에 punkt 모듈이 다운로드 되어 있지 않으면 오류가 뜨니, 해당 모듈을 먼저 다운로드 한다.

nltk.download('punkt')
#각 문장을 토큰화하고, 각 단어를 소문자로 변환하여 훈련 데이터의 모든 고유한 단어 집합 생성
all_words = set(word.lower() for sentence in train 
                for word in word_tokenize(sentence[0])) 

all_words

문장 토큰화

 

위의 결과를 '말뭉치'로 지정하고, 그 말뭉치를 기준으로 train 문장에 속한 단어인지 아닌지를 기록한다.

# 각 튜플이 사전 이해와 훈련 데이터 세트의 값으로 구성된 튜플 목록을 생성
t = [({word: (word in word_tokenize(x[0])) for word in all_words}, x[1])
     for x in train]
t

 

즉, train의 첫 문장인 'i like you'의 경우, 말뭉치 단어 [hate, her, i, like, me, you]를 기준으로 해당 단어가 있는지 없는지를 기록해둔 것. ▶ train의 첫 문장에는 hate, her, me 는 없고(False), you, like는 있다(True)는 뜻.

 

Naive Bayes 분류기 동작 시키기
#t라는 훈련 데이터를 이용해 분류기를 훈련
classifier = nltk.NaiveBayesClassifier.train(t)
#훈련된 분류기가 가장 정보를 많이 제공하는 특성들을 표시
classifier.show_most_informative_features()

나이브 베이즈 분류기

[결과 해석]

Train 문장에 붙은 긍정/부정 태그를 이용해서 분류한 결과 'hate'라는 단어가 없을 때 (False) 긍정일 비율이 1.7:1라는 의미.

 

test 문장을 만들어서 분류기를 통과시켜보기

 

test 문장을 'i like MeRui'로 만들어서 위에서 만든 분류기를 통과시켜보기

test_sentence = 'i like MeRui' #test 문장 생성

#test_sentence_features는 테스트 문장에 대한 단어 특징을 생성하는 딕셔너리
test_sentence_features = {word.lower(): #
단어를 소문자로 변환한 후, 해당 단어가 문장에 포함되어 있는지 여부를 확인하여 특징을 생성
                          (word in word_tokenize(test_sentence.lower()))
                          for word in all_words}
test_sent_features

test 문장
test 문장을 생성하고

classifier.classify(test_sent_features)

분류기 분류
분류기 통과

분류기를 통과하면 'pos' 하다는 결과가 나온다.


다음글

 [파이썬] 자연어 처리(NLP) 시작하기 - 7

728x90
반응형