반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- productmarketfit
- 데이터시각화
- ERD
- product
- tableau
- 시각화
- 모델링
- DACON
- omtm
- 데이터분석
- 컴퓨터비전
- pmf
- OKR
- nlp
- 자연어처리
- fit
- 태블로
- 데이콘
- Market
- 파인튜닝
- 그로스해킹
- 딥러닝
- dl
- Computer Vision
- 인공지능
- 데이터모델링
- 언어지능딥러닝
- 머신러닝
Archives
- Today
- Total
블로그
[LM] 언어지능 딥러닝 #1 TF-IDF, 비지도 학습, Word Embedding, 정보 검색, 추천 시스템 본문
반응형
- 왜 언어 처리라고 하지 않고 자연어 처리라고 할까?
- 형식에 맞춰 쓰는 언어 : 형식 언어(대표적인 예는 프로그래밍 언어)
- 사람이 쓰는 말을 형식 언어와 구분하기 위해 자연어 처리라고 함
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)
- One-Hot Encoding -> 자연어 단어 표현에는 부적합함
- 단어 표현 정의 : 텍스트가 얼마나 유사한지를 표현하는 방식
- 유사도 판단에는 다양한 방식 존재
- 단순히 같은 단어의 개수를 사용해서 유사도 판단
- 형태소로 나누어 형태소 비교
- 딥러닝 기반 유사도 판단
- 텍스트를 벡터화 한 후 벡터화된 각 문장 간의 유사도 측정
- 자카드 유사도(같은 키워드가 있는지), 코사인 유사도(벡터 각도), 유클리디안 유사도, 맨하탄 유사도
# 코사인 유사도
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 알고리즘
- Supervised Learning (지도학습, 교사학습)
- Clustering (군집화)
- 데이터를 다 모아서 벡터로 만들고 비슷한 얘들끼리 묶어줌
- 정답은 없지만, 어떤 분야에 어떤 군집화 기법을 쓰는게 좋다는 건 있음
- K-Means Clustering : K 개수를 정할 수 없다는 단점
- K-NN Clustering : noise에 취약함
- 앞에 K 붙어있는 방식들은 데이터 전체 개수를 모르기 때문에 위와 같은 패널티가 존재
- Data Types and Representations
- Data Types
- Discrete Feature
- 등수, 나이, 횟수 등
- Continuous Feature
- 몸무게, 키, 온도 등
- Discrete Feature
- Data Representations
- Data Matrix
- 데이터를 행렬로 표현
- 데이터 자체에 관심이 있음
- Distance/dissimilarity matrix (object-by-object structure)
- 데이터간의 거리를 표현
- 데이터끼리 얼마나 관계가 있는지 알 수 있음
- 자기 자신과의 거리는 0으로 표현됨
- Data Matrix
- Major Clustering Approaches
- Clustering Ensemble Approach
- K 값을 다양하게 바꿔가면서 clustering
- 위에서 나온 결과값들을 취합해서 최종 cluster 결정
- Clustering Ensemble Approach
- Data Types
Word Embedding
- 단어간의 연관성을 파악하기 위해 embedding
- Word2Vec
- 자연어 처리에서는 단어간 관계가 중요하기 때문에 One-Hot Encoding을 사용하긴 힘듦
- 중심 단어에 원-핫 인코딩해서 얻은 one-hot vector에 가중치 행렬 를 곱해 각 단어의 임베딩 벡터를 취함
09-02 워드투벡터(Word2Vec)
앞서 원-핫 벡터는 단어 벡터 간 유의미한 유사도를 계산할 수 없다는 단점이 있음을 언급한 적이 있습니다. 그래서 단어 벡터 간 유의미한 유사도를 반영할 수 있도록 단어의 의미를…
wikidocs.net
정보 검색, 추천 시스템
- 파레토 법칙 vs 롱테일 법칙
- 파레토 : 상위 20%가 80%의 가치를 창출
- 롱테일 : 하위 80%의 다수가 상위 20%보다 뛰어난 가치 창출
- 추천 시스템의 정의
- 사용자의 행동 이력, 사용자 간 관계, 상품 유사도, 사용자 컨텍스트에 기반하여 사용자의 관심 상품을 자동으로 예측하고 제공하는 시스템
- 추천 알고리즘 개요
- Collaborative Filtering (CF)
- 액션 영화만 본다 => 이 사람은 액션 영화를 좋아하는구나 !
- 컨텐츠를 벡터로 만들어, 유사도로 판단
- 사용자의 구매/방문/클릭 이력에 의존한 추천 (코사인 유사도)
- 피 구매 기록을 바탕으로 모든 아이템쌍 사이의 유사도를 구하고, 사용자가 구매한 아이템들을 바탕으로 다른 아이템을 추천
- 하나의 흐름, 트렌드를 가지고 검색
- [단점] 아이템의 존재유무에 따라서 메트릭이 다 바뀜
- Cosine Similarity 기반 방식
- Content-based Filtering (CBF)
- "조승우" 나오는 거면 다 본다 => 벡터가 중구난방 => 도대체 취향이 뭐지 ?
- 내용 자체의 키워드가 중요함 => "조승우" 키워드가 있으면 다 보는구나 !
- 아이템의 속성에 기반하여 유사 속성 아이템 추천 (아이템 자체를 분석)
- 이 사람이 원하는게 있냐 없냐를 가지고 검색
- TF-IDF 방식 (원하는 키워드가 존재하는지 카운팅 필수)
- 위 두 가지 알고리즘을 모두 사용해서 검색 엔진을 만듦 => 단점이 모호하기 때문에 특징을 알아두는게 중요
- Collaborative Filtering (CF)
728x90
반응형
'공부 > DL' 카테고리의 다른 글
[CV] 시각지능 딥러닝 #5 YOLO 실습 (0) | 2024.04.08 |
---|---|
[CV] 시각지능 딥러닝 #4 Object Detection 객체 탐지 (0) | 2024.04.04 |
[CV] 시각지능 딥러닝 #3 Transfer Learning 전이 학습 (0) | 2024.04.03 |
[CV] 시각지능 딥러닝 #2 Image Data Augmentation 이미지 데이터 증강 (0) | 2024.04.02 |
[CV] 시각지능 딥러닝 #1 CNN (Convolutional Neural Networks) (0) | 2024.04.02 |