데이터 구조

데이터 구조 (Data structure)

Weaviate의 데이터는 어떻게 생겼을까요? 크게 보면 컬렉션(collection) 안에 데이터 객체(object)들이 들어 있고, 각 객체는 하나 이상의 속성(property)을 가지는 구조예요. 이번 장에서는 Weaviate가 데이터를 어떤 단위로 다루고, 벡터가 어디에 붙는지를 차근차근 살펴볼게요.

출처: 공식문서

데이터 객체 개념

각 데이터 객체는 특정 collection에 속하며 하나 이상의 property를 가져요. Weaviate는 데이터 객체를 클래스 기반 컬렉션에 저장하는데, 객체는 JSON 문서 형태로 표현돼요. 객체에는 보통 머신러닝 모델이 만들어낸 vector(벡터)가 포함되며, 이 벡터를 embedding 또는 vector embedding이라고도 불러요.

각 컬렉션은 같은 class의 객체들만 담고, 그 객체들은 공통된 schema로 정의돼요.

대문자 표기 규칙

Weaviate는 GraphQL 명명 규칙을 따라요.

  • 컬렉션 이름은 대문자로 시작해요.
  • 속성 이름은 소문자로 시작해요.

속성 이름을 대문자로 시작해도 Weaviate는 내부적으로 소문자로 바꿔요.

객체는 JSON 문서

작가 앨리스 먼로(Alice Munro)의 정보를 저장한다고 상상해 볼까요. JSON 형식으로는 이렇게 보여요:

{
  "name": "Alice Munro",
  "age": 91,
  "born": "1931-07-10T00:00:00.0Z",
  "wonNobelPrize": true,
  "description": "Alice Ann Munro is a Canadian short story writer who won the Nobel Prize in Literature in 2013. Munro's work has been described as revolutionizing the architecture of short stories, especially in its tendency to move forward and backward in time."
}

벡터 (Vectors)

데이터 객체에 vector 표현을 붙일 수도 있어요. 벡터는 숫자들의 배열로, "vector" 속성 아래에 저장돼요. 아래 예시에서 Alice Munro 객체는 작은 벡터를 갖는데, 이 벡터는 머신러닝 모델이 앨리스에 대한 어떤 정보(이야기나 이미지)를 숫자 배열로 변환한 값이에요.

{
  "id": "779c8970-0594-301c-bff5-d12907414002",
  "class": "Author",
  "properties": {
    "name": "Alice Munro",
    (...)
  },
  "vector": [
    -0.16147631,
    -0.065765485,
    -0.06546908
  ]
}

데이터의 벡터를 만들려면 Weaviate의 벡터라이저(vectorizer) 모듈 중 하나를 쓰거나, 직접 만든 벡터라이저를 사용할 수 있어요.

컬렉션 (Collections)

컬렉션은 같은 스키마 정의를 공유하는 객체들의 묶음이에요. 이 예시에서 Author 컬렉션은 서로 다른 작가들을 나타내는 객체들을 담아요.

[
  {
    "id": "dedd462a-23c8-32d0-9412-6fcf9c1e8149",
    "class": "Author",
    "properties": {
      "name": "Alice Munro",
      "age": 91,
      "born": "1931-07-10T00:00:00.0Z",
      "wonNobelPrize": true,
      "description": "Alice Ann Munro is a Canadian short story writer who won the Nobel Prize in Literature in 2013. Munro's work has been described as revolutionizing the architecture of short stories, especially in its tendency to move forward and backward in time."
    },
    "vector": [
      -0.16147631,
      -0.065765485,
      -0.06546908
    ]
  },
  {
    "id": "779c8970-0594-301c-bff5-d12907414002",
    "class": "Author",
    "properties": {
      "name": "Paul Krugman",
      "age": 70
    }
  }
]

더 알아보기 (Learn more)