언어 전처리 과정

 

문장 → 토큰화 → 정제,추출 → 인코딩 → 정렬 → 패딩, 유사도 분석

 

토큰화

  • 문장 토큰화
    • 구두점 중심으로 문장 나누기
    • 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

출처 https://medium.com/

  • 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

+ Recent posts