[AI] 자연어 데이터 처리(전처리)

당연한 이야기지만, 컴퓨터(인공지능)는 사람의 언어(자연어)를 이해하지 못한다.

자연어에 전처리 과정이 필수적이다.


주 전처리 과정

1. 소문자 변환: 한국어는 대소문자가 없으므로 생략.

2. 불필요한 문자 제거: 구두점, 숫자, 특수문자 등을 제거.

3. 불용어 제거: 의미가 적거나 필요 없는 단어(예: 조사, 접속사 등)를 제거.

4. 토큰화: 한국어는 형태소 단위로 토큰화해야 의미 있는 분석이 가능.

5. 어간 추출(형태소 분석): 한국어는 접미사, 어미 등이 다양해 어간 추출이 중요.


※ 예시 전처리 (GPT 참고)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 필요한 라이브러리 설치
# pip install konlpy
 
import re
from konlpy.tag import Okt
 
# 1. 형태소 분석기 설정
okt = Okt()
 
# 2. 불용어 사전 정의 (한국어에서 자주 등장하는 조사, 접속사 등)
stopwords = ['은''는''이''가''하''을''를''에''의''도''로''과''고''에서''까지''부터''에게''한테''지만''또한']
 
 
# 3. 텍스트 전처리 함수 정의
def preprocess_korean_text(text):
    # 3.1. 특수문자, 숫자 제거
    # re : python 에서 정규 표현식을 다루기 위한 내장 모듈
    # 한국어에 대해서만 처리
    text = re.sub(r'[^가-힣a-zA-Z0-9\s]''', text)
 
    # 3.2. 형태소 분석을 통한 토큰화
    tokens = okt.morphs(text)
 
    # 3.3. 불용어 제거
    tokens = [token for token in tokens if token not in stopwords]
 
    # 3.4. 결과 반환
    return tokens
 
 
# 4. 테스트용 데이터
sample_text = "챗GPT는 인공지능 기술을 활용하여 사람들과 소통할 수 있는 언어 모델입니다!"
 
# 5. 전처리 실행
processed_text = preprocess_korean_text(sample_text)
print(processed_text)
cs

- 챗 GPT 를 통해 작성, 일부 코드를 수정

- 한국어 형태소 분석기 Okt 모듈 사용

- 불용어 사전을 별도로 만들어 전처리를 수행하였으나, 일부 Token에 대해 추가 설정이 필요하다.('들', '있는' 등)

- 최초 작성 코드는 고유 영단어의 삭제("GPT") 가 발생되어 정규 표현식을 재작성함


위의 코드를 참고하여, Komoran 모듈(한국어 형태소 분석기)을 응용한 다른 코드를 작성하였다.


※ Komoran 모듈, 사용자 사전

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from konlpy.tag import Komoran
 
#불용어 사전 제거
stopwords = ['ㅋ','ㅎ']
text = "오늘 챗GPT가 추천해준 영화 너무 재미있었다 ㅋㅋㅋㅋ!"
for words in stopwords :
    text = text.replace(words,'')
 
print(text)
 
#사용자 사전 사용
komoran = Komoran(userdic='./user_dic.txt')
 
# 단순 형태소 분리
morphs = komoran.morphs(text)
print(morphs)
 
# tag 작성
pos = komoran.pos(text)
print(pos)
 
# 명사 만 출력
= komoran.nouns(text)
print(n)
cs

- 형태소 분석기, 사용자 사전을 사용하여 영어 고유 명사 등에 대해서도 분석 가능하도록 설정

- 별도의 사용자 지정 사전을 사용하여 '챗GPT'에 대해 인식 및 분석

- 불용어 제거(replace)


- 사용자 사전 user_dic.txt
사용자 작성 시 유의사항
- 단어, 품사 형식으로 작성
- 작성된 단어와 품사는 'Tab' 으로 구분됨

- 출력 결과

불용어('ㅋ','ㅎ') 에 대해 처리할 필요는 없을지도 모르겠다 (불용어를 제거하지 않는 경우 NA로 분석됨)


- Komoran 분석기 품사표

대분류 소분류 세분류
체언 명사NN 일반명사NNG
고유명사NNP
의존명사NNB
대명사NP 대명사NP
수사NR
용언 동사VV 동사VV
형용사VA 형용사VA
보조용언VX 보조용언VX
지정사VC 긍정지정사VCP
부정지정사VCN
수식언 관형사MM 관형사MM
부사MA 일반부사MAG
접속부사MAJ
독립언 감탄사IC 감탄사IC
관계언 격조사JK 주격조사JKS
보격조사JKC
관형격조사JKG
목적격조사JKO
부사격조사JKB
호격조사JKV
인용격조사JKQ
보조사JX 보조사JX
접속조사JC 접속조사JC
의존형태 어미E 선어말어미EP
종결어미EF
연결어미EC
명사형전성어미ETN
관형형전성어미ETM
접두사XP 체언접두사XPN
접미사XS 명사파생접미사XSN
동사파생접미사XSV
형용사파생접미사XSA
어근XR 어근XR
기호 마침표,물음표,느낌표SF 마침표,물음표,느낌표SF
쉼표,가운뎃점,콜론,빗금SP 쉼표,가운뎃점,콜론,빗금SP
따옴표,괄호표,줄표SS 따옴표,괄호표,줄표SS
줄임표SE 줄임표SE
붙임표(물결,숨김,빠짐)SO 붙임표(물결,숨김,빠짐)SO
외국어SL 외국어SL
한자SH 한자SH
기타기호(논리수학기호,화폐기호)SW 기타기호(논리수학기호,화폐기호)SW
명사추정범주NF 명사추정범주NF
용언추정범주NV 용언추정범주NV
숫자SN 숫자SN
분석불능범주NA 분석불능범주NA

※ 출처 : https://docs.komoran.kr/firststep/postypes.html



댓글