자연어 처리

자연어처리 (NLP) 기초학습 - 1

데이터_박과장 2023. 10. 12. 21:39

NLP 처리 공부를 시작하기 전에 이해해야 하는 중요한 키워드에 대한 설명과 파이썬 예시 코드를 제공하겠습니다.


탐색적 데이터 분석 (Exploratory Data Analysis, EDA)

데이터 과학과 데이터 분석의 초기 단계 중 하나로, 주어진 데이터를 탐색하고 데이터 세트의 주요 특성 및 패턴을 이해하기 위한 과정을 말합니다. EDA는 데이터의 품질을 평가하고 데이터 내의 흥미로운 정보를 발견하는 데 중요한 역할을 합니다. 아래에서 EDA의 목적과 예시 코드를 자세히 설명하겠습니다.

EDA의 주요 목적:

데이터 이해: 데이터의 구조, 특성, 변수 간의 관계, 분포 등을 이해합니다.
데이터 정제: 누락된 데이터나 이상치를 식별하고 처리합니다.
패턴 발견: 데이터 내에 숨겨진 패턴, 관계 및 규칙을 찾습니다.
가설 생성: 데이터를 기반으로 가설을 설정하고 향후 분석을 위한 방향을 결정합니다.
예시 코드로 EDA의 주요 단계를 살펴보겠습니다:

 

# 1. 데이터 불러오기: 데이터를 불러오는 첫 번째 단계입니다.

import pandas as pd

# 데이터 파일 불러오기
data = pd.read_csv('데이터.csv')
기본 통계 정보 확인: 데이터의 기본적인 통계 정보를 살펴봅니다.

# 데이터의 처음 몇 행 확인
print(data.head())

# 데이터 요약 통계 확인
print(data.describe())



# 2. 데이터 시각화: 데이터를 시각적으로 탐색하여 패턴을 파악합니다.

import matplotlib.pyplot as plt

# 히스토그램으로 수치 변수의 분포 확인
data['수치열'].hist()
plt.title('수치 변수 분포')
plt.xlabel('값')
plt.ylabel('빈도')
plt.show()

# 상자 그림으로 이상치 확인
data.boxplot(column='수치열')
plt.title('수치 변수 상자 그림')
plt.show()

# 3. 데이터 정제: 누락된 값 처리 및 이상치 제거를 수행합니다.

# 누락된 값 확인
missing_values = data.isnull().sum()
print(missing_values)

# 이상치 제거
data = data[(data['수치열'] >= lower_bound) & (data['수치열'] <= upper_bound)]

# 4. 변수 간 상관 관계 분석: 변수 간의 상관 관계를 이해하고 시각화합니다.

# 상관 행렬 계산
correlation_matrix = data.corr()

# 히트맵으로 상관 관계 시각화
import seaborn as sns
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm')
plt.title('상관 관계 히트맵')
plt.show()

 

 

가설 생성: 데이터를 토대로 가설을 설정하고 추가 분석을 위한 방향을 결정합니다. 예를 들어, 데이터 분석에서 얻은 정보를 바탕으로 특정 행동을 권장하거나 예측 모델을 개발할 수 있습니다.

EDA는 데이터 과학 및 머신 러닝 프로젝트의 시작점이며, 데이터의 특성을 이해하고 미래의 의사 결정에 도움을 주는 중요한 단계입니다.

 


Tokenization (토큰화):


토큰화(Tokenization)는 자연어 처리(Natural Language Processing, NLP)에서 텍스트 데이터를 작은 단위로 나누는 과정을 말합니다. 이러한 작은 단위를 "토큰"이라고 하며, 일반적으로 단어, 구두점, 숫자 등으로 나누어집니다. 토큰화는 텍스트 데이터를 처리하고 분석하기 위한 기본 단계 중 하나로, 컴퓨터가 텍스트를 이해하고 처리할 수 있도록 도와줍니다.

토큰화의 목적은 다음과 같습니다:

  • 텍스트 데이터를 작은 의미 단위로 분리하여 이해하기 쉽게 만듭니다.
  • 단어, 구저점, 문장 등의 토큰을 추출하여 텍스트 데이터의 구조를 파악합니다.
  • 텍스트 데이터를 자연어 처리 작업에 사용할 수 있는 형태로 변환합니다.
  • 아래는 토큰화에 대한 세부적인 예시 코드와 설명입니다:


1. 단어 토큰화 (Word Tokenization):

가장 일반적인 토큰화 유형으로, 텍스트를 단어 단위로 나눕니다.

예시 코드:

from nltk.tokenize import word_tokenize

text = "이것은 예시 문장입니다."
tokens = word_tokenize(text)
print(tokens)
출력 결과:

css
Copy code
['이것은', '예시', '문장입니다', '.']

 

 

2. 문장 토큰화 (Sentence Tokenization):

텍스트를 문장 단위로 나눕니다.

예시 코드:

from nltk.tokenize import sent_tokenize

text = "첫 번째 문장. 두 번째 문장! 세 번째 문장?"
sentences = sent_tokenize(text)
print(sentences)

# 출력 결과:

['첫 번째 문장.', '두 번째 문장!', '세 번째 문장?']


3. 구두점 제거:

구두점을 제거하여 텍스트를 정제할 수 있습니다.

예시 코드:

import string

text = "이것은, 예시! 문장입니다."
text_without_punctuation = text.translate(str.maketrans('', '', string.punctuation))
print(text_without_punctuation)

# 출력 결과:


'이것은 예시 문장입니다'


4. 사용자 지정 토큰화 규칙:

특정한 토큰화 규칙을 사용자가 정의하여 토큰화를 수행할 수 있습니다.

예시 코드:

import re

text = "email 주소: user@example.com, 문의 전화번호: 123-456-7890"
tokens = re.split(r'[ \-@]', text)
print(tokens)

# 출력 결과:


['email', '주소:', 'user', 'example.com,', '문의', '전화번호:', '123', '456', '7890']

 

 

토큰화는 NLP 작업의 첫 단계로 텍스트 데이터를 처리하고 분석하기 위한 기반이 됩니다. 토큰화를 통해 텍스트 데이터를 토큰 단위로 분리하고 이후의 자연어 처리 작업에 활용할 수 있습니다.

 



TF-IDF (Term Frequency-Inverse Document Frequency):


설명: TF-IDF는 단어의 중요성을 평가하기 위한 통계적인 측정 방법으로, 문서 내에서 얼마나 빈번하게 나타나는 단어인지와 전체 문서 집합에서 얼마나 희귀한 단어인지를 고려합니다.
예시 코드:

 

from sklearn.feature_extraction.text import TfidfVectorizer

documents = ["이것은 첫 번째 문서입니다.", "두 번째 문서는 무엇일까요?", "세 번째 문서입니다."]
vectorizer = TfidfVectorizer()
tfidf_matrix = vectorizer.fit_transform(documents)
print(tfidf_matrix.toarray())



Inverse Document Frequency (IDF, 역문서 빈도):


설명: IDF는 단어의 희귀성을 측정하며, 전체 문서 집합에서 특정 단어가 얼마나 희귀한지를 나타냅니다.
예시 코드:

 

from sklearn.feature_extraction.text import TfidfVectorizer

documents = ["이것은 첫 번째 문서입니다.", "두 번째 문서는 무엇일까요?", "세 번째 문서입니다."]
vectorizer = TfidfVectorizer(use_idf=True)
tfidf_matrix = vectorizer.fit_transform(documents)
idf = vectorizer.idf_
print(dict(zip(vectorizer.get_feature_names(), idf)))



N-Grams (엔그램):

 

설명: N-그램은 연속적인 N개의 단어 또는 문자를 나타내는 텍스트 단위로, 언어 모델링 및 텍스트 분석에 사용됩니다.

 

  • N-Grams(엔그램)은 자연어 처리(Natural Language Processing, NLP)와 언어 모델링에서 중요한 개념 중 하나입니다. N-Grams는 연속된 N개의 단어 또는 문자를 나타내는 텍스트 단위로, 주어진 텍스트의 구조와 문맥을 이해하고 통계적 정보를 추출하는 데 사용됩니다. N-Grams는 다음 이유로 중요합니다:
  • 문맥 파악: N-Grams는 주어진 단어나 문자가 주변 어휘와 어떻게 관련되는지 파악하는 데 도움을 줍니다. 이전 N-1개의 단어(또는 문자)와 다음 1개의 단어(또는 문자)를 포함하는 경우 바이그램, 이전 N-2개와 다음 2개를 포함하는 경우 트라이그램과 같이 사용자가 설정한 N값에 따라 문맥 파악이 가능합니다.
  • 자연어 모델링: N-Grams는 언어 모델링에서 사용됩니다. 언어 모델은 주어진 단어의 시퀀스가 얼마나 자연스럽게 또는 가능성 있는 문장인지를 측정하는 모델입니다. 예를 들어, 다음 단어 예측, 문장 생성 및 기계 번역과 같은 NLP 작업에 사용됩니다.
  • 텍스트 분석: N-Grams는 텍스트 데이터의 패턴 및 구조를 이해하기 위한 도구로 사용됩니다. 주어진 N-Gram 시퀀스가 어떤 주제나 특성을 나타내는지 파악하는 데 도움이 됩니다.

 

예시 코드:

 

from nltk.util import ngrams
from nltk.tokenize import word_tokenize

text = "이것은 예시 문장입니다."
tokens = word_tokenize(text)
bigrams = list(ngrams(tokens, 2))
trigrams = list(ngrams(tokens, 3))
print("Bigrams:", bigrams)
print("Trigrams:", trigrams)


이러한 키워드와 예시 코드는 NLP 처리를 시작하거나 이해하기 위한 중요한 기초입니다. 각 단어 또는 개념은 NLP 작업에서 중요한 역할을 합니다.

 

'자연어 처리' 카테고리의 다른 글

자연어처리 (NLP) 기초학습 - 2  (0) 2023.10.12