교육/KT 에이블스쿨

[KT AIVLE School(에이블스쿨)] - 8주차 후기(언어지능 딥러닝)

aaaahy 2023. 9. 30. 09:15

에이블 스쿨 8주차(9.25 ~ 9.29) - 4기 AI트랙

3차 미니프로젝트 마지막 날(3일차)은 7주차 후기에 작성 완료! 

이번주는 언어지능 딥러닝 수업을 2일동안 진행하였고 추석 연휴가 시작되었다 ( ᵔᵒᵔ )ᵍᵒᵒᵈᵎᵎ

 

시각지능 딥러닝을 배울 땐 학부생 때 진행했던 간단한 프로젝트나 기계학습 수업에서 이미지 학습하는 실습들을 몇 번 진행해 본 경험이 있어서 새로 배운다기보다는 좀 더 확장시키는 느낌이 들었었다.

하지만 텍스트 데이터를 가지고 진행하는 딥러닝은 처음이여서 어떤 방식으로 유사도를 판단하고 결과가 나오는지 궁금하기도 하였다. 이틀 동안 이론도 좀 배우면서 feedparser, newspaper3k, konlpy 등 새로운 라이브러리를 사용하여  RSS에서 xml 태그별로 정보를 추출한 뒤  인터넷 신문기사를 분석하는 실습도 진행해보았다. 

이후 수업시간에 진행할 실습을 위해..  연휴에 복습을 꼭 해보자...·ࡇ·

 

언어지능 딥러닝

 

TF-IDF

  • TF(Term Frequency) : 단어 빈도 
  • IDF(Inverse Document Frequency) : 역문서 빈도

 

딥러닝 기반의 유사도 판단

1) Jaccard Similarity(자카드 유사도)

: 두 집합 간의 유사도 측정 

0 ~ 1 사이의 값을 가지며 두 집합이 동일한 경우 1, 전혀 겹치지 않는 경우 0

import numpy as np
from sklearn.metrics import accuracy_score

print(accuracy_score(np.array([1,3,2]), np.array([1,4,5]))) 
# 결과 : 0.3333333333333333
print(accuracy_score(np.array([1,1,0,0]), np.array([1,1,0,2]))) 
# 결과 : 0.75

▶ jaccard_similarity_score 대신 accuracy_score로도 사용 가능

 

2) Cosine Similarity(코사인 유사도)

: 두 벡터 간의 유사성 측정

-1 ~ 1 사이의 값을 가지며, 두 벡터가 완전히 반대방향인 경우 -1, 동일한 방향인 경우 1

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

sentence=("코사인 유사도를 계산하기 위한 예시 문장이다.",
          "딥러닝 기반의 유사도를 판단하는 방법 중 하나로 코사인 유사도가 있다.")
tfidf_vectorizer = TfidfVectorizer(max_features=100)

tfidf_matrix = tfidf_vectorizer.fit_transform(sentence)

print(cosine_similarity(tfidf_matrix[0], tfidf_matrix[0]))
# 결과 : [[1.]]
print(cosine_similarity(tfidf_matrix[0], tfidf_matrix[1])) 
# 결과 : [[0.07397129]]

▶ TfidfVectorizer()을 사용하여 텍스트 데이터를 수치화하여 벡터로 변환한 뒤 유사도 측정

 

비지도 학습

: 데이터에 대한 명시적인 정답이 제공되지 않은 상태에서 데이터의 패턴이나 구조를 스스로 학습하도록 설계

주로 차원 축소, 클러스터링 등에 사용

 

K-Means 클러스터링

  • k개의 클러스터 중심을 무작위로 초기화
  • 데이터포인트는 가장 가까운 클러스터 중심에 할당(유클리드 거리 or 맨해튼 거리 측정방법 사용)
  • 클러스터 중심은 할당된 모든 데이터 포인트의 평균으로 업데이트
  • 2-3번째 단계가 반복

 

Word Embedding

: 단어를 벡터로 변환하는 방법 제공, 고차원 단어 공간을 저차원으로 축소

ex ) Word2Vec : 텍스트 데이터를 사용하여 단어 벡터를 학습하는 방법