반응형
250x250
Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
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
Archives
Today
Total
관리 메뉴

블로그

[LM] 언어지능 딥러닝 #1 TF-IDF, 비지도 학습, Word Embedding, 정보 검색, 추천 시스템 본문

공부/DL

[LM] 언어지능 딥러닝 #1 TF-IDF, 비지도 학습, Word Embedding, 정보 검색, 추천 시스템

beenu 2024. 4. 15. 17:01
반응형
  • 왜 언어 처리라고 하지 않고 자연어 처리라고 할까?
    • 형식에 맞춰 쓰는 언어 : 형식 언어(대표적인 예는 프로그래밍 언어)
    • 사람이 쓰는 말을 형식 언어와 구분하기 위해 자연어 처리라고 함

 

TF-IDF (term frequency-inverse document frequency)
  • Document Summarization
    • 문서를 읽지 않고도 문서를 요약하고 싶다 !
  • TF-IDF
    • TF : 자주 등장하는 키워드는 이 문서의 중요한 키워드일거야 !
    • IDF : 너무 자주 등장하는 키워드는 이 문서만의 대표적인 특징이 될 수 없어 !
    • 특정 문서에서 키워드 등장 횟수 * (1 / 전체 문서에서 키워드 등장 횟수)
    • TF(t, d) * IDF(t, D)
      • t : 키워드 등장 횟수
      • d : 내가 보고있는 문서
      • D : 문서들의 전체 집합
    • 사용 예시
      • 검색 엔진 : a라는 키워드를 입력했을 때, a 벡터와 d 문서의 d 벡터 각도가 작으면 d 문서를 상위 랭크에 두어야 함
      • 넷플릭스 : 영화의 키워드를 뽑아서 벡터로 만듦, 사용자가 클릭해서 끝까지 본 영화의 키워드 벡터와 신작 영화의 키워드 벡터와 비교해서 추천
    • 단어 표현 (Word Representation, Word Embedding, Word Vector)
      • 벡터 : 언어적인 특성을 반영하여 단어를 수치화하는 방법
      • 데이터 표현
        • One-Hot Encoding -> 자연어 단어 표현에는 부적합함
          • 단어의 의미나 특성 표현 X
          • 단어의 수가 매우 많으므로 고차원 저밀도 벡터 구성
          • 저차원 고밀도 벡터를 만들고 싶다 !
        • 분포가설 (Distributed Hypothesis) : 비슷한 위치에 나오는 단어(같은 문맥의 단어)는 비슷한 의미를 가짐
          • 카운트 기반 기반 방법(Count-based), 예측 방법(predictive)
      • 단어 표현 정의 : 텍스트가 얼마나 유사한지를 표현하는 방식
      • 유사도 판단에는 다양한 방식 존재
        • 단순히 같은 단어의 개수를 사용해서 유사도 판단
        • 형태소로 나누어 형태소 비교
      • 딥러닝 기반 유사도 판단
        • 텍스트를 벡터화 한 후 벡터화된 각 문장 간의 유사도 측정
        • 자카드 유사도(같은 키워드가 있는지), 코사인 유사도(벡터 각도), 유클리디안 유사도, 맨하탄 유사도
# 코사인 유사도
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

sentence = ("오늘도 폭염이 이어졌는데요, 내일은 반가운 비 소식이 있습니다.",
          "폭염을 피해 놀러왔다가 갑작스런 비로 망연자실하고 있습니다.")
vector = TfidfVectorizer(max_features=100) #100 size vector
tfidf_vector = vector.fit_transform(sentence)
print(cosine_similarity(tfidf_vector[0], tfidf_vector[0]))
print(cosine_similarity(tfidf_vector[0], tfidf_vector[1]))

#[[1.]]
#[[0.07780894]]

# 값이 양수로 나오면 유사하다고 판단 => '폭염', '비' 키워드가 겹쳐 유사하다고 판단함
# tfidf_vector를 print했을 때 (n번째 벡터, 해당벡터 내 피쳐번호)  해당 피처번호에 대한 가중치라고 해석


# 자카드 유사도
import numpy as np
from sklearn.metrics import accuracy_score

a = np.array([1, 3, 2])
b = np.array([1, 4, 5])
c = np.array([4, 1, 5])
d = np.array([1, 1, 0, 0])
e = np.array([1, 1, 0, 2])
f = np.array([1, 0, 1, 0])

print(accuracy_score(a, b))
print(accuracy_score(b, c))
print(accuracy_score(a, c))
print(accuracy_score(d, e))
print(accuracy_score(d, f))

#0.3333333333333333
#0.3333333333333333
#0.0
#0.75
#0.5

# 순서있는 버전으로 실습했는데, 순서없는 버전도 있다! 사용하는 사람마다 다름

 

 

비지도 학습
  • 학습 방식
    • Supervised Learning (지도학습, 교사학습)
      • 우리가 알고있는 딥러닝 모델, 분류기
      • 정답을 학습시켜서 새로운 내용을 봤을 때 분류할 수 있도록 함
    • Unsupervised Learning (비지도학습)
      • label이 없음
    • Reinforcement Learning (강화학습)
      • 반복적인 action을 수행해서 원하는 목적 달성
      • PPO 알고리즘
  • Clustering (군집화) 
    • 데이터를 다 모아서 벡터로 만들고 비슷한 얘들끼리 묶어줌
    • 정답은 없지만, 어떤 분야에 어떤 군집화 기법을 쓰는게 좋다는 건 있음
    • K-Means Clustering : K 개수를 정할 수 없다는 단점
    • K-NN Clustering : noise에 취약함
    • 앞에 K 붙어있는 방식들은 데이터 전체 개수를 모르기 때문에 위와 같은 패널티가 존재
  • Data Types and Representations
    • Data Types
      • Discrete Feature
        • 등수, 나이, 횟수 등
      • Continuous Feature
        • 몸무게, 키, 온도 등
    • Data Representations
      • Data Matrix
        • 데이터를 행렬로 표현
        • 데이터 자체에 관심이 있음
      • Distance/dissimilarity matrix (object-by-object structure)
        • 데이터간의 거리를 표현
        • 데이터끼리 얼마나 관계가 있는지 알 수 있음 
        • 자기 자신과의 거리는 0으로 표현됨 
    • Major Clustering Approaches
      • Clustering Ensemble Approach
        • K 값을 다양하게 바꿔가면서 clustering
        • 위에서 나온 결과값들을 취합해서 최종 cluster 결정

 

 

Word Embedding
  • 단어간의 연관성을 파악하기 위해 embedding
  • Word2Vec
    • 자연어 처리에서는 단어간 관계가 중요하기 때문에 One-Hot Encoding을 사용하긴 힘듦
    • 중심 단어에 원-핫 인코딩해서 얻은 one-hot vector에 가중치 행렬 를 곱해 각 단어의 임베딩 벡터를 취함

https://wikidocs.net/22660

 

09-02 워드투벡터(Word2Vec)

앞서 원-핫 벡터는 단어 벡터 간 유의미한 유사도를 계산할 수 없다는 단점이 있음을 언급한 적이 있습니다. 그래서 단어 벡터 간 유의미한 유사도를 반영할 수 있도록 단어의 의미를…

wikidocs.net

 

 

정보 검색, 추천 시스템
  • 파레토 법칙 vs 롱테일 법칙
    • 파레토 : 상위 20%가 80%의 가치를 창출
    • 롱테일 : 하위 80%의 다수가 상위 20%보다 뛰어난 가치 창출
  • 추천 시스템의 정의
    • 사용자의 행동 이력, 사용자 간 관계, 상품 유사도, 사용자 컨텍스트에 기반하여 사용자의 관심 상품을 자동으로 예측하고 제공하는 시스템
  • 추천 알고리즘 개요
    • Collaborative Filtering (CF)
      • 액션 영화만 본다 => 이 사람은 액션 영화를 좋아하는구나 !
      • 컨텐츠를 벡터로 만들어, 유사도로 판단
      • 사용자의 구매/방문/클릭 이력에 의존한 추천 (코사인 유사도)
      • 피 구매 기록을 바탕으로 모든 아이템쌍 사이의 유사도를 구하고, 사용자가 구매한 아이템들을 바탕으로 다른 아이템을 추천
      • 하나의 흐름, 트렌드를 가지고 검색
      • [단점] 아이템의 존재유무에 따라서 메트릭이 다 바뀜
      • Cosine Similarity 기반 방식
    • Content-based Filtering (CBF)
      • "조승우" 나오는 거면 다 본다 => 벡터가 중구난방 => 도대체 취향이 뭐지 ?
      • 내용 자체의 키워드가 중요함 => "조승우" 키워드가 있으면 다 보는구나 !
      • 아이템의 속성에 기반하여 유사 속성 아이템 추천 (아이템 자체를 분석)
      • 이 사람이 원하는게 있냐 없냐를 가지고 검색
      • TF-IDF 방식 (원하는 키워드가 존재하는지 카운팅 필수)
    • 위 두 가지 알고리즘을 모두 사용해서 검색 엔진을 만듦 => 단점이 모호하기 때문에 특징을 알아두는게 중요
728x90
반응형