토크나이징(전처리의 시작)
● 토큰(token)
■ 일정한 의미가 있는 가장 작은 단어들
● 토크나이징
■ 주어진 문장에서 토큰 단위로 정보를 나누는 작업
■ 문장 형태의 데이터를 처리하기 위해 제일 처음 수행하는 기본적인 작업
■ 텍스트 전처리 과정에서 사용됨
■ 토크나이징을 어떻게 하느냐에 따라 성능 차이가 날 수 있음
● 한국어 토크나이징에는 KoNLPy가 많이 사용됨
01. Kkma
● 서울대학교 IDS(Intelligent Data System) 연구실에서 자연어 처리를 위해 개발한 한국어 형태소 분석기
● 다른 형태소 분석기에 비해 속도가 느리지만 지원하는 품사 태그가 다양해서 속도가 느리더라도 정확한 품사 정보가 필요할 때 사용
from konlpy.tag import Kkma
# 꼬꼬마 형태소 분석기 객체 생성
kkma = Kkma()
text = "아버지가 방에 들어갑니다."
# 형태소 추출
morphs = kkma.morphs(text)
print(morphs)
['아버지', '가', '방', '에', '들어가', 'ㅂ니다', '.']
● 형태소 단위로 토크나이징
● 리스트 형태로 반환됨
# 형태소와 품사 태그 추출
pos = kkma.pos(text)
print(pos)
[('아버지', 'NNG'), ('가', 'JKS'), ('방', 'NNG'), ('에', 'JKM'), ('들어가', 'VV'), ('ㅂ니다', 'EFN'), ('.', 'SF')]
● 품사 태깅
● 리스트 형태로 반환됨
# 명사만 추출(한 글자로 된 단어를 걸러내는 경우도 있음)
nouns = kkma.nouns(text)
print(nouns)
['아버지', '방']
# 문장 분리
sentences = "오늘 날씨는 어때요? 내일은 덥다던데."
s = kkma.sentences(sentences)
print(s)
['오늘 날씨는 어 때요?', '내일은 덥다 던데.']
02. OKT
● Open-source Korean Text Processor
● 트위터에서 개발한 Twitter 한국어 처리기에서 파생된 오픈소스 한국어 처리기
● 간단한 한국어 처리를 통해 색인어를 추출하는 목표를 갖고 있기 때문에 완전한 수준의 형소 분석을 지향하지 않음
from konlpy.tag import Okt
okt = Okt()
# 형태소 추출
morphs = okt.morphs(text)
print(morphs)
['아버지', '가', '방', '에', '들어갑니다', '.']
# 형태소와 품사 태그 추출
pos = okt.pos(text)
print(pos)
[('아버지', 'Noun'), ('가', 'Josa'), ('방', 'Noun'), ('에', 'Josa'), ('들어갑니다', 'Verb'), ('.', 'Punctuation')]
# 명사만 추출
nouns = okt.nouns(text)
print(nouns)
['아버지', '방']
# 정규화, 어구 추출(오타나 신조어 추출에 강함)
text = "오늘 날씨가 좋아욬ㅋㅋ"
print(okt.normalize(text))
print(okt.phrases(text))
오늘 날씨가 좋아요ㅋㅋ
['오늘', '오늘 날씨', '좋아욬', '날씨']
03. Komoran
● Korean Morphological ANalyzer
● Shineware에서 자바로 개발한 한국어 형태소 분석기
● 공백이 포함된 형태소 단위로도 분석이 가능
from konlpy.tag import Komoran
komoran = Komoran()
morphs = komoran.morphs(text)
print(morphs)
['오늘', '날씨', '가', '좋아욬ㅋㅋ']
pos = komoran.pos(text)
print(pos)
[('오늘', 'NNG'), ('날씨', 'NNG'), ('가', 'JKS'), ('좋아욬ㅋㅋ', 'NA')]
nouns = komoran.nouns(text)
print(nouns)
['오늘', '날씨']
04. 사용자 사전 구축
● 신조어는 형태소 분석기에서 인식이 안되는 경우가 많음
● 이를 해결하기 위해 대부분의 형태소 분석기들은 사용자 사전을 추가할 수 있도록 구성
text = "우리 챗봇은 엔엘피를 좋아해."
pos = komoran.pos(text)
print(pos)
[('우리', 'NP'), ('챗봇은', 'NA'), ('엔', 'NNB'), ('엘', 'NNP'), ('피', 'NNG'), ('를', 'JKO'), ('좋아하', 'VV'), ('아', 'EF'), ('.', 'SF')]
# 엔엘피(tab)NNG
# 모든파일/ user_dic.tsv
# 로 파일 저장
komoran = Komoran(userdic = "user_dic.tsv")
pos = komoran.pos(text)
print(pos)
[('우리', 'NP'), ('챗봇은', 'NA'), ('엔엘피', 'NNG'), ('를', 'JKO'), ('좋아하', 'VV'), ('아', 'EF'), ('.', 'SF')]'09_DL(Deep_Learning)' 카테고리의 다른 글
| 26-1_Word2Vec 학습 (1) | 2025.05.08 |
|---|---|
| 26_임베딩 (0) | 2025.05.08 |
| 24_전이학습(transfer learning)_keras (0) | 2025.05.07 |
| 23_전이학습(transfer learning)_pytorch (0) | 2025.05.07 |
| 22_이미지 분류 신경망 (0) | 2025.05.02 |