'벡터'에 해당되는 글 3건

  1. 2016.12.05 TF-IDF와 유사도로 알아보는 벡터 모델 #2
  2. 2016.11.29 TF-IDF와 유사도로 알아보는 벡터 모델 #1
  3. 2013.08.09 R 데이터 구조에 대한 정리

TF-IDF와 유사도로 알아보는 벡터 모델 #2

|



TF-IDF를 이용하여 문서의 크기를 구하는 방법을 앞 강의에서 살펴봤다. 

이번에는 이 문서들에서 대해 검색어를 처리하는 부분을 알아보기로 한다. 


다음과 같은 검색어가 주어졌다고 해보자. 


검색어 "new new york"에 대한 쿼리 벡터를 구하면 다음과 같다. 


0.584란 값이 값자기 어디에서 나왔는지 궁금할수도 있을 듯 하다. 

이전 강의에서 살펴본 각각의 단어의 IDF를 생각해보면 된다. 

new의 IDF값은 0.584이고, 전체 문서에서 2번 중 검색어도 2번 나왔으므로 2/2가 된다. 


문서의 크기와 마찬가지로 검색어의 크기도 제곱하고 더한 후, 루트를 구하면 0.652가 나온다. 


이제 유사도를 구하기위해서 문서와 검색어의 거리를 측정해보자. 

거리를 구할 때는 유클리드 거리나 코사인 거리를 주로 사용하는데, 여기에서는 코사인 거리를 적용해보기로 한다. 


A는 문서 벡터와 관련된 값이고, B는 검색어 벡터와 관련된 값들이다. 

위 그림들을 잘 조합해서 보면 식이 이해가 될 것이다. 


어쨌든 위 결과를 살펴보면 검색어는 0.776으로 d1문서와 가장 가까운 것으로 나타난다. 

그래서 검색어 결과를 d1으로 정해주면 된다. 


보통 가중치를 주어서 계산하는 경우도 종종 있다. 

이럴 경우, 가중치 값을 다음과 같이 처리해서 쿼리 벡터를 구할 때 추가로 곱해줘서 적용할 수도 있다. 


이러한 TF-IDF와 유사도 방식의 벡터 모델은 문서 뿐만 아니라 이미지를 처리하는데도 사용한다고 한다. 





Trackback 0 And Comment 0

TF-IDF와 유사도로 알아보는 벡터 모델 #1

|



텍스트 문서를 기반으로 벡터 모델에 대해서 정리해 보려고 한다. 


문서의 텍스트를 처리할 때 특정 단어가 몇 번 나왔는지를 주로 세어본다. 

많이 나온 단어일수록 중요하기 때문이다. 

그러나 "그리고", "the", "a"와 같이 모든 문서에서 많이 나오는 단어들은 실제로 의미가 없다. 

그래서 TF-IDF라는 가중치를 사용하게 된다. 


TF(Term Frequency)는 특정한 단어가 문서 내에 얼마나 자주 등장하는지를 나타내고, 

DF(Document Frequency)는 단어가 문서내에서 흔하게 등장한다는 것을 나타낸다. 

그래서 DF의 역수인 IDF(Inverse Document Frequency) 구해서 

TF와 IDF를 곱한 값인 TF-IDF를 가중치로 사용한다. 


다음과 같은 텍스트로 구성된 3개의 문서가 있다고 해보자. 


이 문서와 텍스트의 빈도수를 벡터 모델로 나타내면 다음과 같다. 

단순하게 문서에서 각 단어의 빈도수를 0과 1로 처리해 행렬로 보여준 것이다. 


참고로 벡터와 스칼라에 대해서 정리하면 다음과 같다. 

물리학에서 스칼라는 크기만 있는 물리량을 나타내며

벡터는 크기와 방향을 가지고 있는 것을 의미한다. 

예를 들어, 온도가 100도 처럼 1개의 숫자로 크기를 나타내는 것을 스칼라라고 하고

동쪽으로 10걸음, 북쪽으로 5걸음과 같이 크기와 방향을 나타내면 벡터라고 한다. 

여기에서는 행렬(matrix) 형태로 문서와 단어 사이의 빈도수를 나타내므로 벡터라고 하는 듯 하다. 


이제 IDF를 구해보면 다음과 같다. 


문서 수를 단어의 빈도수로 나누고 log2를 취해준 것이 바로 IDF값이다. 

만약 단어의 빈도수가 0일 경우, 0으로 나누는 문제를 방지하기 위해서 분모에 1을 더해서 계산하기도 한다. 


이제 TF-IDF 값을 구해보자. 

TF와 IDF를 곱하면 TF-IDF 값을 구할 수 있다. 


다음 강의에서 유사도 검색을 하기 위해서는 문서의 크기를 알아야 한다. 

문서의 크기는 각 문서에 등장하는 모든 단어들의 TF-IDF값을 제곱해서 더한 후 제곱근으로 구할 수 있다. 

최종적인 문서의 크기(length)는 다음과 같다. 


다음 강의에서는 유사도를 통해 위 문서들에서 검색어를 처리하는 것을 간략하게 살펴보려고 한다. 




Trackback 0 And Comment 0

R 데이터 구조에 대한 정리

|



R을 활용하기 위한 데이터 구조를 정리해 보도록 하겠습니다. 

일반적인 프로그래밍 언어와 달리 R에서는 벡터가 중요한 역할을 합니다. 



실제로 R에서는 다음과 같은 숫자나 문자열 모두 벡터로 저장됩니다. 



그래서 R에서는 스칼라 혹은 단일한 수치 값은 존재하지 않습니다. 

단일 숫자처럼 보이지만 실제로는 한 개의 원소를 갖는 벡터로 이해하면 됩니다. 


행렬

수학에서는 행과 열로 이루어진 행렬을 많이 사용합니다. 

R에서도 행렬을 데이터 구조로 취급할 수 있는데요..

행의 개수와 열의 개수를 속성으로 가지고 있는 벡터라고 생각하면 됩니다. 


행렬을 만들기 위해서는 rbind()와 cbind()의 두 가지 함수를 제공합니다. 

이름에 나타난 것처럼 열(row) 기준인지 행(column) 기준인지를 나타냅니다. 


다음 예를 살펴보시죠.



리스트

리스트는 벡터 처럼 여러 값들을 가지고 있지만, 서로 다른 데이터 타입으로 이루어져 있을 때 사용합니다. 

리스트의 각 원소를 구분하는 기호는 $입니다. 



이외에도 파일이나 데이터베이스에서 데이터를 읽기 위해 사용하는 데이터 프레임(data.frame) 등이 있으며,

객체 지향 언어이므로 클래스 개념도 존재하는데요.. 

이러한 것들은 추후 필요할 때 정리하도록 할 예정입니다. 


미니의 R 주요 강좌...

데이터 통계 분석을 위한 R 설치와 활용

R 실행을 위한 기본적인 내용들~

R 데이터 구조에 대한 정리

R 패키지 설치하기

R 데이터셋 처리 함수들에 대한 간단한 정리~

R 데이터셋 정렬하기~

R 데이터셋의 일부 데이터 가져오기

R의 lapply, sapply, vapply를 이해하자~

R의 apply, tapply의 활용법을 알아보자~

R의 split 활용

R의 함수 작성 및 활용~

R 시뮬레이션 - 랜덤 변수 샘플링

R 함수에서 캐시 활용하기~

R 디버깅 툴 활용하기~





Trackback 0 And Comment 0
prev | 1 | next