언어 전처리 과정
문장 → 토큰화 → 정제,추출 → 인코딩 → 정렬 → 패딩, 유사도 분석
토큰화
- 문장 토큰화
- 구두점 중심으로 문장 나누기
- from nltk import sent_tokenize
- 단어 토큰화
- 띄어쓰기 기준으로 단어 나누기
- from nltk import word_tokenize
- 한국어 토큰화
import csv
from konlpy.tag import Okt
with open("텍스트.txt", 'r', encoding='utf-8') as f:
sent_li = [row[1] for row in csv.reader(f, delimiter='\t')]
okt = Okt()
result = []
for sentence in sent_li:
temp = [word[0] for word in okt.pos(sentence, norm=True, stem=True) if word[1] not in ["Josa", "Eomi", "Punctuation"]]
c_word = " ".join(temp).strip()
result.append(c_word)
print(result)
정제((cleaning))
- 사용 목적에 맞춰 노이즈 제거
- 대문자, 소문자
- 길이가 짧은 단어
- 출현 횟수가 적은 단어((중요도에 따라 삭제하면 안되는 경우도 있음))
- 데이터에 대한 인간의 개입이 있는 편
추출((stemming))
- 어간 추출(stemming): 단어의 원형((어간))으로 접사((affix))를 제거 해주는 작업
- 표제어 추출((lemmatization)): 단어의 품사도 고려한 추출
- N, V가 다른 뜻을 갖는 경우 유용하지만 시간이 좀 더 오래 걸림
불용어((stop word))
- 무의미한 단어의 제거
- from nltk.corpus import stopwords
인코딩((encoding))
- 단어의 출현 빈도수 체크
- 딕셔너리 형태
패딩((padding))
- 문장의 길이를 가장 긴 문장의 길이로 맞춰 주는 작업
- 짧은 문장의 빈 곳은 0으로 채워줌
유사도 분석
- 벡터 유사도((cosin metrix))
- bag of words
- 단어의 등장 횟수를 백터화하여 cosin metrix를 통해 문장과 문장의 유사도를 분석
- Euclidean metrix
- Levenshtein Distance
- Jacard Distance
임베딩
- Word2Vec
- 정수 인코딩, 원-핫 인코딩의 단점((단어간 연관성, 희소 백터, 차원의 저주))을 보완
- NN를 통해 Dense representation을 사용((희소 표현을 지정한 N차원 벡터로 변경))
- CBOW
- 주변 단어에서 중심 단어를 예측하는 구조의 NN
- Skip gram
- 중심 단어에서 주변 단어를 예측하는 구조의 NN
- Skip gram negative sampling
- 선택된 2 단어의 상관 관계((중심, 주변)) 구조
- binary classification 문제
- GloVe
- 중심 단어와 주변 단어 벡터의 내적 = corpus 동시 등장 확률]
- 중심 단어 후보 i, j((내적값))이 주변 단어 k 다음에 올 확률값
- 확률값이 크면 i, 작으면 j
- FastText
- out of vocabulary, 오타, 빈도수 적은 단어에 대응하기 좋음
'개인공부 > 딥러닝' 카테고리의 다른 글
ML, DL 모델 최적화 (0) | 2024.04.04 |
---|---|
RNN & LSTM (0) | 2024.04.03 |
car_evaluation.csv (0) | 2024.04.02 |