{{위키데이터 속성 추적}}
'''벡터 공간 모델'''(―空間―, {{llang|en|vector space model}}) 또는 '''단어 벡터 모델'''(單語―, {{llang|en|term vector model}})은 텍스트 문서를 단어 색인 등의 식별자로 구성된 [[벡터 공간|벡터]]로 표현하는 대수적 모델이다. [[정보 검색]], 정보 필터링 및 검색 엔진의 색인이나 연관도 순위에 사용된다. 이 모델이 최초로 적용된 것은 [[코넬 대학교]]의 [[게오르그 셀튼]] 교수 연구실의 [[SMART 정보 검색 시스템]]이었다.

== 정의 ==
문서와 질의는 다음과 같이 벡터로 표현된다.

:<math>d_j = ( w_{1,j} ,w_{2,j} , \dotsc ,w_{t,j} )</math>
:<math>q = ( w_{1,q} ,w_{2,q} , \dotsc ,w_{t,q} )</math>

각각의 [[차원 (벡터공간)|차원]]은 개별 단어에 대응된다. 어떤 단어가 문서에 포함되면, 해당 단어는 0이 아닌 벡터값을 갖는다. 단어 가중치라고도 불리는 이 값을 산출하는 방법에는 여러 가지가 있다. 가장 널리 알려진 방식은 [[TF-IDF]] 방식이다.(아래 사례 항목 참조)

벡터 공간 모델에서 ''단어''(term)의 의미는 그 적용 대상에 따라 달라진다. 일반적으로는 하나의 단어(word)나 키워드, 또는 좀더 긴 구를 의미한다. 벡터의 차원의 크기는 [[말뭉치]]에 포함된 단어의 개수와 같다.

벡터 연산은 문서들간의 유사성을 비교하는 데에도 사용될 수 있다.

==응용==
[[파일:vector space model.jpg|오른쪽|250px]]

키워드 검색에서 사용되는 문서의 연관도는 [[의미 유사도|문서 유사도]] 이론으로 계산될 수 있다. 문서 유사도 이론에서 문서 유사도는 문서 벡터간의 각도의 편차를 이용하여 산출된다.

실제 적용시에는, 문서 벡터간의 각도 자체보다는 다음과 같이 각도의 [[코사인]]값을 이용하는 것이 더 간단하다.

:<math>
\cos{\theta} = \frac{\mathbf{d_2} \cdot \mathbf{q}}{\left\| \mathbf{d_2} \right\| \left \| \mathbf{q} \right\|}
</math>

<math>\mathbf{d_2} \cdot \mathbf{q}</math>는 문서 벡터(오른쪽 그림의 d<sub>2</sub>)와 질의 벡터(그림의 q)의 교차점([[스칼라곱]])에 해당하며, <math>\left\| \mathbf{d_2} \right\|</math>는 벡터 d<sub>2</sub>의 [[노름]], <math>\left\| \mathbf{q} \right\|</math>는 벡터 q의 [[노름]]이다. 벡터의 [[노름]]의 다음과 같이 계산된다.

:<math>
\left\| \mathbf{q} \right\| = \sqrt{\sum_{i=1}^n q_i^2}
</math>

벡터의 모든 요소는 음수가 아닌 값이므로, 코사인값이 0인 경우 질의 벡터와 문서 벡터가 직교하며 겹치는 부분이 전혀 없음(서로 동일하게 포함하고 있는 단어가 하나도 없음)을 의미한다. 벡터간 각도의 코사인값을 이용한 유사도 계산에 대해서는 [[코사인 유사도]]를 참조하라.

==사례: TF-IDF 가중치==
[[제라드 솔튼]], 웡(Wong), 그리고 양(Yang)의 연구<ref>{{언어링크|en}} [http://doi.acm.org/10.1145/361219.361220 G. Salton , A. Wong , C. S. Yang, A vector space model for automatic indexing], Communications of the ACM, v.18 n.11, p.613-620, Nov. 1975</ref>에서 제안된 전통적 벡터 공간 모델에서, 문서내 특정 단어의 가중치는 지역 매개변수와 전역 매개변수의 곱으로 계산된다. 이러한 모델을 [[TF-IDF|단어 빈도-역 문서 빈도]] 모델이라 한다. 문서 ''d''의 가중치 벡터는 <math>\mathbf{v}_d = [w_{1,d}, w_{2,d}, \ldots, w_{N,d}]^T</math>이며, 여기서 <math>
w_{t,d}</math>는 다음과 같다.

:<math>
w_{t,d} = \mathrm{tf}_{t,d} \cdot \log{\frac{|D|}{|\{d' \in D \, | \, t \in d'\}|}}
</math>

그리고,
* <math>\mathrm{tf}_{t,d}</math>는 문서 ''d''에서 단어 ''t''의 빈도(지역 매개변수),
* <math>\log{\frac{|D|}{|\{d' \in D \, | \, t \in d'\}|}}</math>는 역 문서 빈도(전역 매개변수)이다. <math>|D|</math>는 문서 집합내 전체 문서의 개수이며, <math>|\{d' \in D \, | \, t \in d'\}|</math>는 단어 ''t''를 포함하는 문서의 개수이다.

문서 ''d<sub>j</sub>''와 질의 ''q''의 코사인 유사도를 이용하여 다음과 같이 문서간 유사도를 계산할 수 있다.

:<math>\mathrm{sim}(d_j,q) = \frac{\mathbf{d_j} \cdot \mathbf{q}}{\left\| \mathbf{d_j} \right\| \left \| \mathbf{q} \right\|} = \frac{\sum _{i=1}^N w_{i,j}w_{i,q}}{\sqrt{\sum _{i=1}^N w_{i,j}^2}\sqrt{\sum _{i=1}^N w_{i,q}^2}}</math>

==장점==
벡터 공간 모델은 [[불린 모델]]에 비해 다음과 같은 장점을 지닌다.

#선형 대수에 기반한 단순한 모델
#비(非)이진 단어 가중치
#문서와 질의간의 유사도를 연속적인 값으로 계산 가능
#연관도에 의한 문서 순위 결정 가능
#부분 일치 고려 가능

==한계==
벡터 공간 모델은 다음과 같은 한계를 지닌다.

#길이가 긴 문서는 낮은 유사도값(작은 [[스칼라곱]]과 [[차원의 저주|큰 차원]])으로 인해 제대로 표현할 수 없다.
#검색 키워드는 문서내의 단어와 정확히 일치해야 한다. 부분 일치하는 단어는 [[거짓 양성]] 결과를 가져올 수 있다.
#의미 유사성 관련 ― 유사한 내용을 담고 있더라도 사용된 단어들 다르다면 그 문서들의 유사성은 매우 낮게 나오며, 이는 [[거짓 음성]] 결과에 해당한다.
#단어가 나타나는 순서에 관한 정보가 활용되지 못한다.
#단어들이 통계적으로 서로 독립적이라는 이론적 가정에 기반하고 있다.
#가중치 계산 방식이 직관적이기는 하지만 포멀한 형식이 아니다.

벡터 공간 모델의 이러한 여러 문제점들은 다양한 방법으로 극복될 수 있다. 여기에는 [[특잇값 분해]]와 같은 수학적 기법과 [[워드넷]]과 같은 어휘 데이터베이스 활용이 포함된다.

==관련 모델==
벡터 공간 모델에 기반하거나 이를 확장한 모델에는 다음과 같은 것들이 있다.
* [[일반화 벡터 공간 모델]]
* [[잠재 의미 분석]]
* [[단어 식별]]
* [[로치오 알고리즘|로치오 분류]]
* [[랜덤 색인]]

==관련 소프트웨어==
다음의 소프트웨어들은 벡터 공간 모델을 연구하거나 구현할 경우 참고가 될 수 있다.

===무료 오픈 소스 소프트웨어===
* [[루씬|Apache Lucene]]: 전체가 자바로 작성된 고성능 다기능 텍스트 검색 엔진 라이브러리
* [https://web.archive.org/web/20080828220200/http://semanticvectors.googlecode.com/ SemanticVectors]: Apache Lucene으로 생성한 단어-문서 매트릭스에 랜덤 프로젝션 알고리즘을 적용해 구현한 의미 벡터 색인([[잠재 의미 분석]]과 유사)
* Gensim: 벡터 공간 모델링을 위한 Python+[[NumPy]] 프레임워크. [[TF-IDF]], [[잠재 의미 색인]], [[국지성 민감 해싱]] 및 [[잠재 디리클레 할당]]을 위한 점증적(메모리-효율적) 알고리즘을 포함함
* Weka: WordVectords 및 단어주머니 모델을 자바로 구현한 널리 알려진 데이터 마이닝 패키지
* [http://codingplayground.blogspot.com/2010/03/compressed-vector-space.html Compressed vector space in C++] by Antonio Gulli
* [http://scgroup.hpclab.ceid.upatras.gr/scgroup/Projects/TMG/ Text to Matrix Generator (TMG)] {{웨이백|url=http://scgroup.hpclab.ceid.upatras.gr/scgroup/Projects/TMG/ |date=20200710231410 }}: 다음과 같은 다양한 텍스트 마이닝 작업에 사용될  수 있는 MATLAB 툴박스 - 1)색인, 2)검색, 3)차원 절감, 4)클러스터링, 5)분류. TMG의 대부분은 MATLAB으로 작성되었으며 일부는 Perl로 작성되었다. LSI, clustered LSI, NMF 및 다른 방식들을 포함한다.
* [http://senseclusters.sourceforge.net SenseClusters]: [[잠재 의미 분석]] 및 단어 동시발생 행렬을 이용한 텍스트 및 단어 클러스터링을 지원하는 오픈소스 패키지
* [http://code.google.com/p/airhead-research/ S-Space Package]: [[통계적 의미론]]과 관련한 탐색 및 작업을 위한 알고리즘 모음

==더 읽어 보기==
*{{언어링크|en}} [[제라드 솔튼|G. Salton]], A. Wong, and C. S. Yang (1975), "[https://web.archive.org/web/20110605025601/http://www.cs.uiuc.edu/class/fa05/cs511/Spring05/other_papers/p613-salton.pdf A Vector Space Model for Automatic Indexing]," ''Communications of the ACM'', vol. 18, nr. 11, pages 613–620. ''(벡터 공간 모델이 소개된 논문)''
*{{언어링크|en}} David Dubin (2004), "[http://www.ideals.uiuc.edu/bitstream/2142/1697/2/Dubin748764.pdf The Most Influential Paper Gerard Salton Never Wrote]{{깨진 링크|url=http://www.ideals.uiuc.edu/bitstream/2142/1697/2/Dubin748764.pdf }}": ''(벡터 공간 모델의 역사 및 잘못된 관련 논문 인용에 대한 지적)''
*{{언어링크|en}} [https://web.archive.org/web/20070613200830/http://isp.imm.dtu.dk/thor/projects/multimedia/textmining/node5.html 벡터 공간 모델에 대한 설명]
*{{언어링크|en}} [http://www.miislita.com/term-vector/term-vector-3.html 전통적 벡터 공간 모델에 대한 설명]
*{{언어링크|en}} [http://nlp.stanford.edu/IR-book/html/htmledition/vector-space-classification-1.html "k-Nearest Neighbor" 탐색과 벡터 공간 모델의 관계]

== 같이 보기 ==
* [[단어주머니 모델]]
* [[최근방 탐색]]
* [[복합어 처리]]
* [[역색인]]
* [[w-슁글링]]
* [[고윳값]]

== 각주 ==
<references/>

[[분류:벡터 공간 모델|*]]