๋ฒกํฐ ๊ฒ์ (Vector Search)
๋ฒกํฐ ๊ฒ์ ๋งค์ปค๋์ฆ์ AI๊ฐ ๋ถ์ํ๋ฉด์ ํจ๊ป ๋์ถ๋๊ธฐ ์์ํ ๊ฐ๋ ์ค ํ๋๋ค.
ํ ์คํธ ๋ฐ์ดํฐ๋ ์ด๋ฏธ์ง ๊ฐ์ ๋ฏธ๋์ด ๋ฐ์ดํฐ๋ฅผ ์ผ์ ํ ํฌ๊ธฐ์ ์ซ์ ๋ฒกํฐ๋ก ๋ณํํ ๋ค์ ์ ์ฅํด๋๊ณ , ๊ฒ์ํ ๋๋ ์ ๋ ฅ์ ๋ฒกํฐ๋ก ๋ณํํด์ ๊ฐ์ ํจํด์ด "์ ์ฌํ" ๊ฒ์ ์ฐพ๋ ์์ผ๋ก ์์ฉํ๋ ๊ฒ์ด๋ค.
๋ฒกํฐ ๊ฒ์ (์ด๋ฏธ์ง์ ๊ฒฝ์ฐ)
๋ฒกํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ฅ ๋ง์ ์ฌ์ฉ์ฌ๋ก๊ฐ ์ด๋ฐ ๊ฒฝ์ฐ๋ค.
์ด๋ฏธ์ง ์ ์ฌ๋ ๊ฒ์์ ์ํ ์ผ๋ จ์ ๋ชจ๋ธ์ ์ฌ์ฉํด์ ์ด๋ฏธ์ง๋ฅผ "๋ฒกํฐ" ๊ฐ์ผ๋ก ๋ณํํ๊ณ , ๊ทธ๊ฑธ ๋ฒกํฐDB์ ์ ์ฅํ๊ฑฐ๋ ์ฟผ๋ฆฌํด์ ์ ์ฌ์ฑ์ด ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ ์๋ณธ ๋ฐ์ดํฐ๋ฅผ ๋ฒกํฐ๋ก ๋ณํํ๋ ๊ฒ ์์ฒด๋ฅผ ๋ฒกํฐ ์๋ฒ ๋ฉ์ด๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
๋น์ฐํ ์ด๋ฐ ์ฌ์ฉ์ฌ๋ก์ ์์ด์๋ ๋ฒกํฐ ๋ณํ์ ์ํ ๋ชจ๋ธ์ ์ฑ๋ฅ์ด ์ค์ํ๋ค. ์ ์ด์ AI ๊ธฐ์ ์ ๋ณด์กฐ์ฉ์ผ๋ก ๋ฑ์ฅํ ๋งค์ปค๋์ฆ์ด๊ธฐ๋ ํ๊ณ .
๋ฒกํฐ ๊ฒ์ (ํ ์คํธ์ ๊ฒฝ์ฐ)
์์ฆ์ ํ
์คํธ ๊ธฐ๋ฐ ๋ฐ์ดํฐ์ ๋ํด์๋ ๋ฒกํฐ ๊ฒ์์ ์ ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๊ฝค ์๋ค.
์ด ๊ฒฝ์ฐ์๋ AI ๋ชจ๋ธ์ ํตํด์ ์ผ๋ จ์ ํ
์คํธ๋ฅผ ๋ฒกํฐ๋ก ๋ณํํ๊ณ , ๊ทธ ๋ฒกํฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ๊ฒ์์ ์ฌ์ฉํ๋ค. ์ด๋ฏธ์ง๋ก ๊ฒ์์ ๋๋ฆฌ๋ ๊ฒ๊ณผ ๋ณธ์ง์ ์ผ๋ก ์ ๊ทผ๋ฒ์ ๊ฐ๋ค. ๋ค๋ง ๋ฐ์ดํฐ์ ํฌ๋งท๋ง ๋ค๋ฅผ ๋ฟ์ด๋ค.
AI ๋ชจ๋ธ์ ๋ณํ์ ์์ํ๊ณ , ๋ชจ๋ธ์์ ์ถ์ถํ ํจํด์ ๊ธฐ์ค์ผ๋ก ์ ์ฌ๋๋ฅผ ์ฐพ์๋ธ๋ค.
vs ์ ํต์ ์ธ ํ
์คํธ ๊ฒ์
๋ฒกํฐ ํ
์คํธ ๊ฒ์์ ๊ธฐ์กด์ ๊ฒ์ ๋ฐฉ๋ฒ๊ณผ ๋น๊ตํ๋ฉด ์ด๋จ๊น? ๋๋ถ๋ถ์ ๊ธฐ์ ์ ํ์ด ๊ทธ๋ ๋ฏ, ์ด๊ฒ๋ trade-off๊ฐ ์กด์ฌํ๋ค. ๋ญ๊ฐ ๋๋ ทํ๊ฒ ์ฐ์ํ๋ค๊ณ ๋งํ๊ธฐ๋ ์ด๋ ต๋ค.
์ ํต์ ์ธ ๊ฒ์
์ดํ์ ์ธ ๋ถ๋ถ์ ๋ํ ์๊ฒฉํ ์ฒ๋ฆฌ๋, ์ ํํ ํฌํจ๋๋ ํ
์คํธ๋ฅผ ์ฐพ๋๋ค๊ฑฐ๋ ํ๋ ๋ถ๋ถ์์๋ ์ ํต์ ์ธ ๋ฐฉ์์ด ๋์ฑ ๊ฐ๋ ฅํ๊ณ , ์์คํ
๋ฆฌ์์ค๋ ์ ๊ฒ ๋จน๋๋ค.
๋์ ์ ์ฐํ ํํ์ ์ฟผ๋ฆฌ ์ ์ฉ์๋ ์ด๋ ค์์ด ์กด์ฌํ๋ค. ์๋ฅผ ๋ค์ด, "red apple" ํ
์คํธ๋ฅผ "fruit"๋ก ์ฐพ์ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฌผ๋ก ์ด๊ฒ๋ ๋ฐ์ดํฐ์ ์นดํ
๊ณ ๋ฆฌ๋ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋์ง๋์ง ๋ฐ๋ฅด๊ณ ๋์์ด๋ ๊ทธ๋ฐ๊ฑฐ ๋ถ์ด๋ฉด ์ด๋ป๊ฒ ํ ์๋ ์์ง๋ง, ๋ชจ๋ ์์์ ์ธ ๊ฒฝ์ฐ๋ฅผ ์ปค๋ฒํ๊ธฐ๋ ํ๋ค๋ค.
๋ฒกํฐ ํ
์คํธ ๊ฒ์
๋ฒกํฐ ๊ฒ์์ ์์ฉํ ํ
์คํธ ๊ฒ์์ ์ ์ฐํ ํ์ฅ์ ๊ฐ๋ฅ์ผ ํ๋ค. (๋ชจ๋ธ๋ง ์ ์ด๋ค๋ฉด) fruit๋ฅผ ๊ฒ์ํ์๋ "red apple"์ด ๋์ ์ ์ฌ๋๋ก ๊ฑธ๋ฆฌ๊ฒ ํ ์๋ ์๋ ๊ฒ์ด๋ค.
ํ์ง๋ง ๋จ์ ๋ ์๋ค.
์ผ๋จ ๊ฒ์์ ์ ํ์ฑ์ ๋ณด์ฅํ ์ ์๋ค. ๋ชจ๋ธ์ ์ํด ๊ทผ์ฌ์น๋ฅผ ๋ฝ์๋ด๋ ๊ฒ์ด๋ผ์, "๊ตฌ์ฐ ์๋ฅด๋ง๋๋ก"๋ฅผ ์ณค์๋ "๊ตฌ์ฐ ์๋ฅด๋ง๋๋ก ๊ฐ๋ฐฉ"์ด ๊ฐ์ฅ ๋์ ์ ์ฌ๋๋ก ๋์จ๋ค๋ ๋ณด์ฅ์ด ์๋ค. ์ด๋ ๊ฒ ์ ํํ๊ฒ ํฌํจ๋๋ ๊ฒฝ์ฐ๋ฅผ ๊ฒ์ํ๋๊ฑด ์ ํต์ ์ธ ๋ฐฉ์์ด ๋ ํ์คํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฌด์๋ณด๋ค. ๋ฒกํฐ ๊ฒ์์ ์์คํ
๋ฆฌ์์ค๊ฐ ํจ์ฌ ๋น์ธ๋ค. ๋ชจ๋ธ ๊ตด๋ฆฌ๋ ๊ฒ๋ ๋น์ธ๊ณ , ๋ฒกํฐDB ์์ฒด์ ๋ฆฌ์์ค๋ ๋น์ผ ํธ์ด๋ค.
๋ฒกํฐ ์ ์ฌ๋ ์๊ณ ๋ฆฌ์ฆ
์์ค๋ฅผ ๋ฒกํฐ๋ก ๋ณํํ๋๊ฑด ๊ฑฐ์ ์์ํ AI ๋ชจ๋ธ์ ์์ญ์ด์ง๋ง, ๋ฒกํฐ๊ฐ๋ค์ ์๋ก ๋น๊ตํด์ ์ ์ฌ๋ ์์น๋ฅผ ๋ฝ์๋ด๋๊ฑด ๋ ๋ณ๊ฐ์ ์์ญ์ด๋ค.
ANN
๋ฒกํฐ ์ ์ฌ๋ ์๊ณ ๋ฆฌ์ฆ์๋ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์์ง๋ง ํต์์ ์ผ๋ก AI์์ ์ฌ์ฉํ๊ธฐ ์ํ ์ ๊ทผ ๋ฐฉ์์ ์ด๋ ์ ๋ ์ ํด์ ธ์๋๋ฐ, ๊ทธ๊ฒ ANN(Approximate Nearest Neighbor)๋ค.
์ด๊ฑด.. ๋ญ๋ผ๊ณ ํด์ผํ ๊น? ์ฒ๋ฆฌ๋์ ์ํด์ ๋น๊ต์ ์ ํ๋๋ฅผ ์กฐ๊ธ ํฌ๊ธฐํ ์ ๊ทผ๋ฒ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
https://velog.io/@minchoul2/RecSys-ANN-Approximate-Nearest-Neighbor-%EA%B8%B0%EB%B2%95
ANN์ ํน์ ์๊ณ ๋ฆฌ์ฆ์ ์ ํํ๊ฒ ์ง์นญํ๋๊ฑด ์๋๊ณ , ๊ทธ๋ฐ ๋ฐฉ๋ฒ๋ก ์์ฒด๋ฅผ ๋งํ๋ ๊ฒ์ด๋ค.
์ ํ๋๋ฅผ ํฌ๊ธฐํ๊ณ ๊ทผ์ฌ์น๋ฅผ ์ฌ์ฉํด์ ๋น ๋ฅด๊ฒ ์ ์ฌ๋๋ฅผ ๊ฐ์ ธ์ค๊ฒ๋ ๊ตฌํํ๋ค๋ฉด, ๊ทธ ๋ชจ๋๋ฅผ ANN ์๊ณ ๋ฆฌ์ฆ์ด๋ผ ๋ถ๋ฅผ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ๋ํ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ฑฐ๋ฆฌ(distance), ํน์ ์ ์ฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ผ๋ถ๋ง ์๊ฐํด๋ณด๊ฒ ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ฒกํฐ ์ ์ฌ๋ ๊ณ์ฐ ๋ฐฉ๋ฒ๋ก ์๋ 3๊ฐ์ง ๋ฐฉํฅ์ฑ์ด ์๋ค. ๋๋จธ์ง๋ ์ด 3๊ฐ์ง์ ๋ณ์ข
์ผ ๋ฟ์ด๋ค.
A. ์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ (Euclidean Distance)
์ฝ๊ฐ ๋ฒกํฐ ๊ฒ์์ ์์ด์ ๋ผ๋๊ฐ ๋๋ ์๊ณ ๋ฆฌ์ฆ ์ค ํ๋๋ค.
L2๋ผ๋ ์ด๋ฆ์ผ๋ก๋ ๋ถ๋ฆฌ๊ณ , ๋๋ถ๋ถ์ ๋ฒกํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ต์
๋ค์์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณต๋๋ค.
๊ฐ์ฅ ์ง๊ด์ ์ด๊ณ ์ฌํํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ก๋ค.
๋น๊ตํ ๋ฒกํฐ๊ฐ๋ค์ ์์๋ผ๋ฆฌ ๋บ ๋ค์์ ์ ๊ณฑํ๊ณ , ๊ทธ๊ฑธ ๋ค์ ๋ํด์ ๋ค์ ๋ฃจํธ ์์ฐ๋ ๊ฒ์ด๋ค. a์ b๊ฐ ๊ธธ์ด 3์ง๋ฆฌ ๋ฒกํฐ๋ผ๋ฉด, ์ด๋ฐ ์์ด ๋๋ค.
root( (a[0]-b[0])^2 + (a[1]-b[1])^2 + (a[2]-b[2])^2 )
๊ทธ๋ฆฌ๊ณ ์ด ๊ฒฐ๊ณผ๊ฐ์ด ๊ฑฐ๋ฆฌ(distance) ๊ฐ์ด ๋๊ณ , ์ด ๊ฐ์ด ์์ ์๋ก ์ ์ฌ๋๊ฐ ๋์, ๊ฐ๊น์ด ๋ฒกํฐ๊ฐ ๋๋ ๊ฒ์ด๋ค.
๋จ์ํ๊ณ ์ ์ฉํ๊ธฐ ์ฝ์ง๋ง, ์์ํ ์์๊ฐ๋ค์ ํฌ๊ธฐ์ ๋ฏผ๊ฐํด์ AI ๊ธฐ๋ฐ ๋ถ์ผ์์ ์ง๋ฐฐ์ ์ผ๋ก ์ฌ์ฉ๋์ง๋ ์๋ ๊ฒ ๊ฐ๋ค. ์ค์ง์ ์ผ๋ก๋ ์์ํ ๋ฒกํฐ๊ฐ ๊ฑฐ๋ฆฌ๋ณด๋จ ๋ฒกํฐ์ ๋ฐฉํฅ์ด ๋ ์ค์ํ ๊ฒฝ์ฐ๋ ๋ง๊ธฐ ๋๋ฌธ์ด๋ค.

B. ์ฝ์ฌ์ธ ์ ์ฌ๋ (Cosine Similiarity)
๋ ๋ฒกํฐ ์ฌ์ด ๊ฐ๋์ ์ฝ์ฌ์ธ์ ์ธก์ ํ๋ ๊ธฐ๋ฒ์ด๋ค.
๋ฒกํฐ ๊ฐ ๊ฑฐ๋ฆฌ ํฌ๊ธฐ์ ๋ฏผ๊ฐํ์ง ์๊ณ , ๋ฒกํฐ์ ๋ฐฉํฅ์ด ์ผ๋ง๋ ๋น์ทํ์ง๋ฅผ ์ ์ ์๋ค๋๊ฒ ํน์ง์ด๋ค.
๊ทธ๋์ ๋ชจ๋ธ์ ํ์ฉํ Vector search์์๋ ์ฝ์ฌ์ธ ๊ฑฐ๋ฆฌ, ํน์ ์ฝ์ฌ์ธ์ ๊ธฐ๋ฐํ ์ ์ฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ฝค ์ฌ์ฉํ๋ค.
C. dot product
negative inner product๋ ๊ทธ๋ฅ inner product๋ก๋ ๋ถ๋ฆฐ๋ค.
๋ฒกํฐ์ ํฌ๊ธฐ์ ๋ ๋ฒกํฐ ์ฌ์ด์ ๊ฐ๋์ ์ฝ์ฌ์ธ์ ๊ธฐ๋ฐ์ผ๋ก ๋ฒกํฐ ์ ์ฌ๋๋ฅผ ์ธก์ ํ๋ ์ ๊ทผ๋ฒ์ด๋ค.

์ด๊ฑด ์ฝ์ฌ์ธ ๊ฑฐ๋ฆฌ์ ์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ์ ํน์ง์ด ์ด๋ ์ ๋ ํผ์ฌ๋ ๊ฒฝํฅ์ด ์๋ค. ๋ฒกํฐ์ ๋ฐฉํฅ์๋ ๋ฏผ๊ฐํ์ง๋ง, ๋ฒกํฐ์ ๊ฑฐ๋ฆฌ์๋ ์ํฅ์ ๋ฐ๊ธฐ ๋๋ฌธ์ด๋ค.
์์ฆ์๋ ์ด๊ฒ vector search์์ ๊ฐ์ฅ ๋์ ๋น๋๋ก ์ฐ์ด๋ ๊ฒ ๊ฐ๋๋ผ.
๋ณ์ข ์ผ๋ก๋ max inner product ๊ฐ์ ๊ฒ๋ ์๋ค. (Elasticsearch์ ๊ฒฝ์ฐ)
๋ฒกํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค
ANN์ ๊ธฐ๋ฐํ ๊ทผ์ฌ์น ๋ฒกํฐ ๊ฒ์ ๋์์ ์ผ๋ฐ์ ์ธ DB ๊ตฌ์กฐ์์๋ ํจ์จ์ ์ผ๋ก ๊ตฌํํ๊ธฐ๊ฐ ์ด๋ ต๋ค.
์ด๊ฑด ์ ์ด์ ๋๋ฑ ๊ฒ์๋ ์๋๊ณ , ์ผ๋ฐ์ ์ธ ํํ์ ์ ๋ ฌ ๊ฒ์๋ ์๋๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋์ ๋ฒกํฐ ๊ฒ์์ ๊ตฌํํ๋ ค๋ฉด ๋ฒกํฐ ๊ฒ์์ ์ง์ํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ ํ์ด๋ค.
์ ๋ฌธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก์ ๊ฐ์ฅ ๋ํ์ ์ธ ๊ฒ์ milvus, qdrant, pinecone ์ ๋๊ฐ ์๋ค.
milvus์ qdrant๊ฐ ์คํ์์ค๋ก์๋ ๊ฐ์ฅ ์ธ์ง๋๊ฐ ์๊ณ , pinecone์ ์คํ์์ค๊ฐ ์๋๋ค.
milvus์ qdrant ๋ ๋ค ์์ญ์ต๊ฐ ๋จ์์ ๋ฐ์ดํฐ๋ฅผ ํธ๋ค๋งํ๋ ๊ฒ์ ์ ์ ๋ก ๋ฒกํฐ ๊ฒ์์ ์ง์ํ๋ค.
๋น-์ ๋ฌธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์์๋ ๋ฒกํฐ ๊ฒ์์ ์ง์ํ๋ ๊ฒ๋ค์ด ์๋ค.
Elasticsearch, PostgreSQL, Redis, MongoDB, CassandraDB ์ ๋๊ฐ ๋ํ์ ์ด๋ค.
์ด ์ค์์๋ Elasticsearch๊ฐ ๊ฐ์ฅ ์ ๋ช
ํ๊ณ , ํ๋ก๋์
์ฌ๋ก์์๋ ๋ง์ด ์ฐ์ธ๋ค.
๊ทธ ๋ค์ ์ธ์ง๋๋ก๋ PostgreSQL์ ํ์ฅ์ธ pgvector๊ฐ ์๊ณ , ๋ฉ์ธ DB๋ฅผ PostgreSQL๋ก ์ฐ๋ ๊ณณ์์๋ ๊ฐ์ฅ ์ฝ๊ฒ ๋์
ํ ๋งํ๋ค.
๊ทธ ์ธ์๋ MongoDB, Redis ๋ฑ์ด Vector Search๋ฅผ ์ง์ํ๋, ๊ทธ๋ ๊ฒ ๊ฐ๋ ฅํ๋ค๋ ๋ง์ ๋ค์ด๋ณด์ง ๋ชปํ ๊ฒ ๊ฐ๋ค.
Redis๋ ํต์ง ๋ฉ๋ชจ๋ฆฌ๋ผ์ ๊ด๋ฆฌ๋ ์ด๋ ค์ด๋ฐ, ๋ฒค์น๋งํฌ์์ผ๋ก ์ฑ๋ฅ๋ ๊ทธ๋ ๊ฒ ์ข์ ํธ์ ์๋๊ฑฐ๊ฐ๋๋ค.
์ฑ๋ฅ๋ฟ๋ง ์๋๋ผ ๋ฆฌ์์ค ํจ์จ์ฑ, ํน์ ๊ธฐ๋ฅ ์์ค์์๋ ๊ฝค ๋ง์ ์ฐจ์ด๊ฐ ๋๋ค. ์ง์ํ๋ ๊ธฐ๋ฅ ์์ค์ ์ ๋ณด๊ณ ํ๋จํ๊ธธ ๋ฐ๋๋ค.
์๋ฅผ ๋ค์ด, ๋ฒกํฐ๊ฒ์ ์์ ์ฌ์ ํํฐ๋ง์ ๊ฑธ์ด์ผ ํ๋ค๋ฉด milvus, qdrant ๊ฐ์ ์ ๋ฌธ VectorDB๋ Elasticsearch๋ฅผ ์ฌ์ฉํด์ผ๋ง ๋ฌ์ฑ ๊ฐ๋ฅํ๋ค. pgvector ๊ฐ์ ๊ฒฝ์ฐ์๋ ๋ฒกํฐ๊ฒ์์ ํ ๋ ๋ฒกํฐ ๋จ์ผ ํ๋์ ๋ํด์๋ง ์ธ๋ฑ์ค๋ฅผ ๊ฑธ ์ ์๋ค.
์ฐธ์กฐ
https://stackoverflow.com/questions/49250963/vectorizing-algorithms
https://danawalab.github.io/elastic/2022/07/08/ES-Similarity-Search.html
https://www.elastic.co/search-labs/integrations/vectorize-io
https://stackoverflow.com/questions/76854425/whats-the-difference-between-a-vector-database-and-full-text-search
https://aws.amazon.com/ko/what-is/vector-databases/
https://www.meilisearch.com/blog/full-text-search-vs-vector-search
https://labelbox.com/blog/how-vector-similarity-search-works/
https://www.elastic.co/search-labs/blog/vector-search-set-up-elasticsearch
https://www.pinecone.io/learn/vector-similarity/
https://docs.timescale.com/ai/latest/key-vector-database-concepts-for-understanding-pgvector/