[Qdrant] Multi Vector์™€ Named Vector

Qdrant๋Š” ๋‹จ์ผ ์ปฌ๋ ‰์…˜์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ฒกํ„ฐ๋ฅผ ์ง‘์–ด๋„ฃ๋Š” ๊ฒƒ์„ ์ง€์›ํ•œ๋‹ค.

๋ฐฉ์‹์€ 2๊ฐ€์ง€๋‹ค. ๋™์ž‘์ด๋‚˜ ์‚ฌ์šฉ ๋ฐฉ์‹์ด ์™„์ „ํžˆ ๋‹ฌ๋ผ์„œ ์‚ฌ์šฉ์‚ฌ๋ก€์— ๋งž์ถฐ์„œ ์ž˜ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค.

  1. multi vector: ๋ฒกํ„ฐ์˜ ๋ฒกํ„ฐ๋ฅผ ๋™์ ์œผ๋กœ ๋„ฃ๋Š” ํ˜•ํƒœ (2์ฐจ์› ๋ฒกํ„ฐ)

  2. named vector: ์ด๋ฆ„์ด ๋ถ™์€ ๋ฒกํ„ฐ๋ฅผ ๋ณ„๋„๋กœ ๋„ฃ๋Š” ํ˜•ํƒœ






Multi Vector

multi vector๋Š” ๋™์ผํ•œ ์ฐจ์›์„ ๊ฐ€์ง„ ๋ฒกํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๋„ฃ์–ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.
๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ฒกํ„ฐ์˜ ๊ฐœ์ˆ˜๋Š” ์ •ํ•ด์ ธ์žˆ์ง€ ์•Š๋‹ค. ๋„ฃ๊ณ  ์‹ถ์€๋Œ€๋กœ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.

์ƒ์„ฑ ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

PUT collections/foods
{
  "vectors": {
    "size": 10,
    "distance": "Euclid",
    "multivector_config": {
      "comparator": "max_sim"
    }
  }
}

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€ comparator๋ผ๋Š” ์˜ต์…˜์ด๋‹ค. ํ˜„์žฌ๋Š” max_sim๋ผ๋Š” ๋‹จ์ผ ์˜ต์…˜๋งŒ ์ œ๊ณตํ•œ๋‹ค.

์•„๋ฌดํŠผ ์ €๊ฒŒ ๋ฒกํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ๋˜๋‹ˆ๊นŒ ์œ ์‚ฌ๋„ ๋ฐฉ์‹์„ ์–ด๋–ป๊ฒŒ ์ •์˜ํ• ์ง€๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ธ๋ฐ, max_sim์€ ํ•œ point์— ๋“ค์–ด์žˆ๋Š” ๋ฒกํ„ฐ ์ค‘์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์ตœ์ข… ์œ ์‚ฌ๋„๋กœ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด [A, B] ๋ฒกํ„ฐ ์Œ์„ ํ˜„์žฌ ๊ฒ€์ƒ‰ ์ฟผ๋ฆฌ์™€ ๋น„๊ตํ•  ๊ฒฝ์šฐ, (A, ์ฟผ๋ฆฌ), (B, ์ฟผ๋ฆฌ) ์œ ์‚ฌ๋„๋ฅผ ๊ฐ๊ฐ ๊ณ„์‚ฐํ•œ ๋‹ค์Œ์—, B์˜ ์œ ์‚ฌ๋„๊ฐ€ ๋” ํฌ๋‹ค๋ฉด A์˜ ์œ ์‚ฌ๋„๋ฅผ ๋ฒ„๋ฆฌ๊ณ  B๋ฅผ ์ตœ์ข… ์œ ์‚ฌ๋„๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์‚ฌ์šฉ ๋ฐฉ์‹ ์ž์ฒด๋Š” ๊ทธ๋ ‡๊ฒŒ ๋ณต์žกํ•  ๊ฒƒ์€ ์—†๋‹ค.
์ง‘์–ด๋„ฃ์„ ๋•Œ๋Š” ๋ฒกํ„ฐ๋ฅผ ์›ํ•˜๋Š” ๋งŒํผ ๊ตฌ๊ฒจ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฐ ์‹์œผ๋กœ 2๊ฐœ, 3๊ฐœ ์ง€๊ทธ์žฌ๊ทธ๋กœ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.

์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ฆฌ๋Š” ๋ฐฉ์‹ ์ž์ฒด๋Š” ํŠน๋ณ„ํ•  ๊ฒƒ์ด ์—†๋‹ค.

max_sim ์œ ์‚ฌ๋„๋ฅผ ๊ณ„์‚ฐํ•ด์„œ ํŒ๋‹จํ•˜๋Š” ๊ฒƒ์€ ๋‚ด๋ถ€์ ์œผ๋กœ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค.




Named Vector

named vector๋Š” ์ข€ ๋‹ค๋ฅธ ์‚ฌ์šฉ์‚ฌ๋ก€๋ฅผ ์œ„ํ•œ ์˜ต์…˜์ด๋‹ค.
์ด๊ฑด ๋…๋ฆฝ์ ์ธ ๋ฒกํ„ฐ ์—ฌ๋Ÿฌ๊ฐ€์ง€๋ฅผ ์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์ƒํ’ˆ์— ์ด๋ฏธ์ง€ ์†์„ฑ ๊ธฐ๋ฐ˜์˜ ์ž„๋ฒ ๋”ฉ๊ณผ ํ…์ŠคํŠธ ์†์„ฑ ๊ธฐ๋ฐ˜์˜ ์ž„๋ฒ ๋”ฉ์„ ๋‘˜ ๋‹ค ๋„ฃ์–ด์„œ ํ™œ์šฉํ•ด์•ผ ํ•˜๊ณ , 2๊ฐ€์ง€์˜ ๋ฒกํ„ฐ ์ฐจ์›/์œ ์‚ฌ๋„๊ฐ€ ๋‹ค๋ฅด๋‹ค๋ฉด named vector๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

multi vector์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ์ฐจ์›์ด๋‚˜ ์œ ์‚ฌ๋„ ๋งค์ปค๋‹ˆ์ฆ˜์ด ์™„์ „ํžˆ ๋‹ค๋ฅธ ๋ฒกํ„ฐ๋“ค์„ ๋‹จ์ผ point์— ์ง‘์–ด๋„ฃ์„ ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋Œ€์‹  ๋‹จ์ผ ์ฟผ๋ฆฌ๋กœ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ฒกํ„ฐ๋ฅผ ๋™์‹œ์— ํ™œ์šฉํ•ด์„œ ๊ฒ€์ƒ‰์„ ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ๋‹น์—ฐํ•˜๋‹ค.
์œ ์‚ฌ๋„/์ฐจ์›์ด ๋‹ค ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋Š”๊ฒŒ ์–ด๋–ป๊ฒŒ ํ•˜๊ฒ ๋‚˜?

์ปฌ๋ ‰์…˜ ์ •์˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ๋‹ค.
key:value ์Œ์œผ๋กœ ๋ณ„๋„์˜ ๋ฒกํ„ฐ config๋ฅผ ์ •์˜ํ•˜๋ฉด ๋œ๋‹ค.

๊ฐ’์„ ๋„ฃ์„ ๋•Œ๋„ ์ •์˜ํ•œ ๋ฒกํ„ฐ ๊ฐ’์„ ์ „๋ถ€ ๋„ฃ์–ด์ค˜์•ผ ํ•œ๋‹ค.

๊ฒ€์ƒ‰ํ•  ๋•Œ๋Š” ์กฐ๊ธˆ ์‚ฌ์šฉ ๋ฐฉ์‹์ด ๋‹ฌ๋ผ์ง„๋‹ค.
using ํ”Œ๋ž˜๊ทธ๋กœ ์–ด๋–ค ๋ฒกํ„ฐ์— ๋Œ€ํ•ด ๊ฒ€์ƒ‰์„ ํ• ์ง€ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค.

๋‹จ์ผ ์ฟผ๋ฆฌ์—์„œ๋Š” ํ•œ๊ฐ€์ง€์˜ ๋ฒกํ„ฐ๋งŒ ์‚ฌ์šฉํ•ด์„œ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ฒกํ„ฐ๋ฅผ ๋™์‹œ์— ํ™œ์šฉํ•ด์„œ ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ฆฌ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
์ด๊ฑด ๋‹ค์Œ ํฌ์ŠคํŠธ์— ์ •๋ฆฌํ•ด๋ณธ๋‹ค.



์ฐธ์กฐ
https://qdrant.tech/documentation/concepts/vectors/