우리는 왜 벡터 검색을 위해 2차원 벡터를 저장하게 되었나?

Posted on July 17, 2024
우리는 왜 벡터 검색을 위해 2차원 벡터를 저장하게 되었나?

들어가기

앞서 벡터 임베딩을 통해 판례 데이터를 자연어 검색하는 방법을 알아봤습니다. 일반적으로 벡터 임베딩 모델은 입력 데이터 길이의 한계를 가지고 있습니다. 이러한 한계는 긴 문장을 처리할 수 없다는 문제로 연결되고 이를 극복하기 위해 흔히 사용되는 방법은 문장을 적절한 크기로 나누는 것입니다. 적절한 크기로 문장을 나눈다는 것은 데이터를 저장하는 관점에서 또 다른 문제점을 만듭니다. 여기서는 어떤 문제점이 발생하고 어떤 기능을 Aeca에 추가하여 개선했는지 설명합니다.

벡터 임베딩

벡터 임베딩은 일반적으로 두 쌍의 텍스트(문장, 단락 등)가 입력(아래 그림에서 Sentence A, Sentence B)됩니다. 그리고 아래의 그림처럼 u, v 한 쌍의 임베딩 벡터를 출력하고 이 두 입력이 유사하다면 유사도(cosine-sim(u, v))가 높게, 유사하지 않다면 낮게 나오도록 학습됩니다.

Bi-encoder

컨텍스트 길이와 학습 데이터

모든 모델 학습이 그러하듯 학습 데이터는 모델의 성능에 큰 영향을 줍니다. 어떤 데이터로 사전 학습되었고 어떤 데이터로 임베딩 성능을 튜닝했는지가 벡터 검색에 사용했을 때 검색 품질에 영향을 주게 됩니다. 일반적으로 임베딩에 사용되는 토큰의 길이는 512 정도이며 이는 대략적으로 한 단락에 해당되는 길이입니다. 이 길이를 초과하는 입력은 버려집니다. 게다가 최대 토큰의 길이가 512라도 학습 데이터가 대부분 512보다 작은 데이터로 구성되어 학습되었다면 길이가 긴 입력에 대해 좋은 결과를 출력할 수 없다는 것을 예상할 수 있습니다.

이러한 제한은 벡터 검색에서도 그대로 적용됩니다. 만약 길이가 긴 판례 본문을 별도의 처리 없이 하나의 임베딩 벡터로 변환하면 큰 정보 손실이 발생하게 됩니다.

벡터 데이터 다루기

위와 같은 이유로 벡터 검색을 위해서는 적당한 크기의 단락으로 임베딩하고 분리된 구조에 맞게 관련된 데이터를 구성해야 합니다.

다음은 판례 데이터의 예시입니다. 여기서 한 문서는 사건명(name), 법원명(court_type), 판결요지(judgment_summary), 판시사항(holding_statement), 본문(content) 등으로 구성되어 있습니다. 여기서 판시사항은 위에서 설명한 512 토큰을 조금 초과할 듯하고 판결 요지와 본문은 하나의 벡터로 표현하기 힘들다는 것을 알 수 있습니다.

[ { "content": "【원고, 상고인 겸 피상고인】 주식회사 한올테크놀로지 (소송대리인 법무법인(유한) 율촌 담당변호사 김능환 외 3인)\n【피고, 피상고인 겸 상고인】 다쏘시스템코리아 주식회사 외 1인 (소송대리인 변호사 손지열 외 3인)\n【원심판결】 서울고법 2016. 4. 7. 선고 2014나27205 판결\n【주 문】\n 원고의 피고 다쏘시스템코리아 주식회사에 대한 상고를 각하한다. 원고의 피고 다쏘 시스템 에스에이에 대한 상고와 피고들의 상고를 모두 기각한다. 상고비용은 각자 부담한다. \n\n【이 유】 1. 원고의 상고이유(상고이유서 제출기간이 지난 후에 제출된 상고이유보충서들의 기재는 상고이유를 보충하는 범위 내에서)에 대한 판단\n 가. 피고 다쏘시스템코리아 주식회사(이하 ‘피고 다쏘시스템코리아’라고 한다)에 대한 상고이유에 관하여\n 기록에 의하면, 원고는 피고 다쏘시스템코리아와 체결한 이 사건 계약을 위반하지 않았다고 주장하였는데, 제1심은 원고의 위 주장을 배척하면서도 피고 다쏘시스템코리아에게 손해가 발생하였다고 단정하기 어렵다며 결국 원고의 위 피고에 대한 손해배상채무 부존재확인청구를 받아들였고, 위 피고가 이에 불복하여 항소하였으나 원심은 위 피고의 항소를 기각하였음을 알 수 있다.\n 그렇다면 원고의 위 피고에 대한 상고는 자신이 승소한 부분에 관한 것으로서 상고의 이익이 없어 부적법하다.\n 나. 피고 다쏘 시스템 에스에이에 대한 상고이유에 관하여 \n (1) 사용자가 컴퓨터 하드디스크 드라이브(HDD) 등의 보조기억장치에 설치된 컴퓨터프로그램을 실행하거나 인터넷으로 디지털화된 저작물을 검색, 열람 및 전송하는 등의 과정에서 컴퓨터 중앙처리장치(CPU)는 실행된 컴퓨터프로그램의 처리속도 향상 등을 위하여 컴퓨터프로그램을 주기억장치인 램(RAM)에 적재하여 이용하게 되는데, 이러한 과정에서 일어나는 컴퓨터프로그램의 복제는 전원이 꺼지면 복제된 컴퓨터프로그램의 내용이 모두 지워진다는 점에서 일시적 복제라고 할 수 있다.\n저작권법은 제2조 제22호에서 복제의 개념에 ‘일시적으로 유형물에 고정하거나 다시 제작하는 것’을 포함시키면서도, 제35조의2에서 \"컴퓨터에서 저작물을 이용하는 경우에는 원활하고 효율적인 정보처리를 위하여 필요하다고 인정되는 범위 안에서 그 저작물을 그 컴퓨터에 일시적으로 복제할 수 있다. 다만 그 저작물의 이용이 저작권을 침해하는 경우에는 그러하지 아니하다.\"라고 규정하여 일시적 복제에 관한 면책규정을 두고 있다. 그 취지는 새로운 저작물 이용환경에 맞추어 저작권자의 권리보호를 충실하게 만드는 한편 이로 인하여 컴퓨터에서의 저작물 이용과 유통이 과도하게 제한되는 것을 방지함으로써 저작권의 보호와 저작물의 원활한 이용의 적절한 균형을 도모하는 데 있다. 이와 같은 입법 취지 등에 비추어 볼 때 여기에서 말하는 ‘원활하고 효율적인 정보처리를 위하여 필요하다고 인정되는 범위’에는 일시적 복제가 저작물의 이용 등에 불가피하게 수반되는 경우는 물론 안정성이나 효율성을 높이기 위해 이루어지는 경우도 포함된다고 볼 것이지만, 일시적 복제 자체가 독립한 경제적 가치를 가지는 경우는 제외되어야 할 것이다(대법원 2017. 11. 23. 선고 2015다1017, 1024, 1031, 1048 판결 참조)\n (2) 원심판결의 이유 및 원심이 적법하게 채택하여 조사한 증거 등에 의하면 다음과 같은 사실을 알 수 있다.\n (가) 원고는 피고 다쏘 시스템 에스에이의 자회사인 피고 다쏘시스템코리아와 피고 다쏘 시스템 에스에이가 저작권을 가지고 있는 카티아(CATIA) 소프트웨어(이하 ‘피고 소프트웨어’라 한다)에 관하여 일반 브이에이알(VAR, Value-Added Reseller) 계약이라는 명칭의 판매대리점 계약을 체결하였다.\n (나) 피고 다쏘 시스템 에스에이는 피고 소프트웨어에 대한 이용허락계약(이하 ‘이 사건 라이선스 계약’이라 한다)을 통하여 라이선스받은 최대 동시사용자 수보다 많은 사용자가 피고 소프트웨어를 동시에 사용할 수 없도록 하는 동시사용 방식의 라이선스를 부여하였다. 이는 피고 소프트웨어가 설치되어 있는 사용자 컴퓨터로부터 라이선스 부여 요구를 받은 서버가 선착순으로 라이선스를 할당하고 보유한 라이선스를 모두 소진하면 이미 할당받은 사용자가 라이선스를 반납할 때까지 기다렸다가 이를 회수하여 다시 라이선스를 요구하는 다른 사용자에게 재할당을 하는 방식이다. \n 사용자 컴퓨터는 최초에 서버와 약속한 대로 일정 시간마다 라이선스의 유효성을 확인하는 메시지(heartbeat)를 보내 서버로부터 라이선스의 유효성을 확인받고, 서버는 정해진 시간 내에 사용자 컴퓨터로부터 신호를 받지 못할 경우 해당 사용자 컴퓨터로부터 라이선스를 회수한 후 다른 사용자 컴퓨터가 사용할 수 있는 상태로 전환하게 된다.\n (다) 원고는 피고 소프트웨어의 최종사용자가 라이선스를 추가로 확보할 수 있는 기능을 가진 소프트웨어(이하 ‘원고 소프트웨어’라 한다)를 개발하여 피고 소프트웨어의 최종사용자들에게 판매하였다. 라이선스의 개수와 동일한 수의 피고 소프트웨어가 실행되던 중 피고 소프트웨어의 다른 사용자들이 원고 소프트웨어를 사용하게 되면, 원고 소프트웨어는 사용자 컴퓨터에 실행되어 있으나 실제로 사용되지는 않고 있는 피고 소프트웨어를 비활성화시킴으로써 피고 소프트웨어를 종료시키지 않은 상태로 라이선스를 반환하도록 하고, 이와 같이 반환된 라이선스는 다른 사용자 컴퓨터에서 새롭게 실행된 피고 소프트웨어가 할당받아 사용할 수 있게 된다. 원고 소프트웨어가 위와 같이 피고 소프트웨어를 비활성화시키더라도 종료되지 않은 피고 소프트웨어는 그대로 램(RAM)에 일시적으로 복제된 상태로 남게 된다. 만일 피고 소프트웨어의 사용자들이 모든 라이선스를 실행하고 있던 중 원고 소프트웨어를 사용하여 비활성화시킨 일부 라이선스를 새로운 사용자에게 할당하여 피고 소프트웨어를 실행한 사용자에게 제공하게 되면, 이용허락된 최대 동시사용자 수를 초과하는 피고 소프트웨어가 램(RAM)에 일시적으로 복제되게 된다. \n (3) 위 사실관계를 앞에서 본 법리에 따라 살펴본다.\n (가) 이 사건 라이선스 계약은 이용허락 범위에 프로그램의 ‘사용’뿐만 아니라 ‘액세스’도 포함시키고 있는데, 위 ‘액세스’는 피고 소프트웨어를 실행시킬 때 발생하는 것으로, 그 과정에서 피고 소프트웨어가 램(RAM)에 일시적으로 복제되게 된다. 이 사건 라이선스 계약은 라이선스 계약에 명시된 경우를 제외하고 명시적이거나 묵시적인 어떠한 권리나 라이선스가 최종사용자에게 허용되지 않는다는 내용을 포함하고 있는데, 이용허락 당시 약정한 최대 수를 초과하는 일시적 복제를 허락한다는 취지의 내용은 포함하고 있지 않다. 따라서 이 사건 라이선스 계약을 체결할 당시 저작권자인 피고 다쏘 시스템 에스에이가 약정한 최대 라이선스 수를 넘는 일시적 복제까지 허락하였다고 볼 수 없다.\n (나) 원고 소프트웨어는 위와 같은 피고 소프트웨어의 기본적인 관리 및 작동방식을 바탕으로 하여 라이선스를 할당받은 사용자 중 실제로 피고 소프트웨어를 사용하고 있지 않은 사용자를 가려내어 그 사용자가 실행 중인 피고 소프트웨어를 비활성화시킴으로써 피고 소프트웨어가 사용가능한 라이선스를 추가적으로 확보하는 작업을 하는 것이지, 피고 소프트웨어의 작동과정에서 원활하고 효율적인 정보처리를 위한 작업을 하는 것으로만 볼 수 없다. 또한 원고 소프트웨어로 인해 실행 중이기는 하나 실제로 사용되고 있지는 않은 피고 소프트웨어가 비활성화되는 과정에서 피고 소프트웨어가 종료되지 않은 채 사용자 컴퓨터의 램(RAM)에 복제된 상태로 남아 있게 되는데, 이는 원고 소프트웨어에 의해 추가적으로 발생한 것이지 피고 소프트웨어를 이용하는 과정 중에 불가피하게 수반되는 결과물이라고 볼 수도 없다.\n 이 사건 라이선스 계약과 같은 동시사용 방식에서 유상 거래의 핵심이 되는 것은 ‘최대 라이선스의 수’라고 볼 수 있는데, 원고 소프트웨어로 인해 ‘최대 라이선스의 수’가 증가되는 효과가 발생하게 된다. 원고의 홍보자료에도 원고 소프트웨어를 사용하게 되면 실제 구매한 라이선스 수보다 약 20%의 라이선스를 더 구매한 것과 같은 효과를 가지게 된다고 밝히고 있다. 동시사용 라이선스 계약은 다수의 사용자를 전제로 하는데, 실행 중이지만 실제로 사용되지 않은 소프트웨어로 인해 최대 라이선스의 수만큼 실행되지 않는 경우가 종종 발생한다. 동시사용 방식 라이선스 계약에서 ‘최대 라이선스 수’를 결정할 때에는 이러한 사정을 고려할 수밖에 없는데, 원고 소프트웨어를 사용하면 구매할 라이선스 수를 줄일 수 있으므로, 피고 소프트웨어의 라이선스 판매량이 감소하는 경제적 효과가 발생하게 된다.\n (다) 이러한 사정 등을 종합하면, 원고 소프트웨어에 의해 발생하는 일시적 복제는 피고 소프트웨어의 이용과정에서 불가피하게 수반되거나 안정성이나 효율성을 높이는 것으로만 보기 어렵고, 독립한 경제적 가치를 가지는 것으로 볼 수 있다. \n (4) 따라서 원고 소프트웨어가 피고 다쏘 시스템 에스에이의 일시적 복제권을 침해하였다는 취지로 판단한 원심의 결론은 정당하다. 거기에 일시적 복제권 및 저작권법 제35조의2의 규정에 관한 법리를 오해하거나 논리와 경험의 법칙을 위반하여 자유심증주의의 한계를 벗어나는 등의 사유로 판결에 영향을 미친 잘못이 없다. \n 2. 피고들의 상고이유에 대한 판단\n 가. 피고 다쏘시스템코리아의 상고이유에 관하여\n 원심은 그 판시와 같은 이유로 원고의 채무불이행으로 인해 손해가 발생하였다는 피고 다쏘시스템코리아의 주장을 배척하였다. \n 피고 다쏘시스템코리아의 상고이유 주장은 손해의 발생 여부에 관한 증거의 취사선택 및 사실인정을 다투는 취지로 적법한 상고이유가 되지 못한다. 기록을 살펴보아도 원심판결에 논리와 경험의 법칙을 위반하여 자유심증주의의 한계를 벗어난 잘못이 없다.\n 나. 피고 다쏘 시스템 에스에이의 상고이유에 관하여\n 관련 법리와 기록에 따라 살펴보면, 원심이 그 판시와 같은 이유로 원고 소프트웨어로 인해 피고 소프트웨어에 대한 기술적 보호조치가 무력화되었다고 볼 수 없다고 판단한 것은 정당하다. 거기에 논리와 경험의 법칙을 위반하여 자유심증주의의 한계를 벗어난 잘못이 없다. \n 3. 결론\n 그러므로 원고의 피고 다쏘시스템코리아에 대한 상고를 각하하고, 원고의 피고 다쏘 시스템 에스에이에 대한 상고와 피고들의 상고를 모두 기각하며, 상고비용은 각자 부담하도록 하여, 관여 대법관의 일치된 의견으로 주문과 같이 판결한다.\n\n대법관 민유숙(재판장) 조희대(주심) 김재형 이동원", "court_name": "대법원", "court_type_code": "400201", "doc_id": 204295, "holding_statement": "[1] 사용자가 컴퓨터 하드디스크 드라이브(HDD) 등의 보조기억장치에 설치된 컴퓨터프로그램을 실행하는 등의 과정에서 프로그램을 주기억장치인 램(RAM)에 적재하여 이용하는 것이 저작권법 제2조 제22호에서 말하는 ‘일시적 복제’에 해당하는지 여부(적극) / 저작권법 제2조 제22호에서 복제의 개념에 일시적 복제를 포함시키면서도 같은 법 제35조의2에서 일시적 복제에 관한 면책규정을 둔 취지 및 위 규정에 의하여 면책이 인정되는 일시적 복제의 범위\n[2] 甲 주식회사가 乙 외국회사가 저작권을 가지고 있는 소프트웨어에 관하여 판매대리점 계약을 체결하였고, 乙 회사는 위 소프트웨어에 대한 이용허락계약(라이선스 계약)을 통하여 라이선스받은 최대 동시사용자 수보다 많은 사용자가 소프트웨어를 동시에 사용할 수 없도록 하는 동시사용 방식의 라이선스를 부여하고 있었는데, 甲 회사가 위 소프트웨어의 최종사용자가 라이선스를 추가로 확보할 수 있는 기능을 가진 소프트웨어를 개발하여 乙 회사의 소프트웨어의 최종사용자들에게 판매하였고, 이를 사용하면 최대 동시사용자 수를 초과하는 乙 회사의 소프트웨어가 사용자 컴퓨터의 램(RAM)에 일시적으로 복제된 상태로 남게 되는 사안에서, 甲 회사의 소프트웨어에 의해 발생하는 일시적 복제는 乙 회사의 소프트웨어의 이용과정에서 불가피하게 수반되거나 안정성이나 효율성을 높이는 것으로만 보기 어렵고, 독립한 경제적 가치를 가지는 것으로 볼 수 있으므로, 甲 회사의 소프트웨어는 乙 회사의 일시적 복제권을 침해하였다고 한 사례\n", "judgment": "선고", "judgment_date": "20181115", "judgment_summary": "[1] 사용자가 컴퓨터 하드디스크 드라이브(HDD) 등의 보조기억장치에 설치된 컴퓨터프로그램을 실행하거나 인터넷으로 디지털화된 저작물을 검색, 열람 및 전송하는 등의 과정에서 컴퓨터 중앙처리장치(CPU)는 실행된 컴퓨터프로그램의 처리속도 향상 등을 위하여 컴퓨터프로그램을 주기억장치인 램(RAM)에 적재하여 이용하게 되는데, 이러한 과정에서 일어나는 컴퓨터프로그램의 복제는 전원이 꺼지면 복제된 컴퓨터프로그램의 내용이 모두 지워진다는 점에서 일시적 복제라고 할 수 있다. \n저작권법은 제2조 제22호에서 복제의 개념에 ‘일시적으로 유형물에 고정하거나 다시 제작하는 것’을 포함시키면서도, 제35조의2에서 \"컴퓨터에서 저작물을 이용하는 경우에는 원활하고 효율적인 정보처리를 위하여 필요하다고 인정되는 범위 안에서 그 저작물을 그 컴퓨터에 일시적으로 복제할 수 있다. 다만 그 저작물의 이용이 저작권을 침해하는 경우에는 그러하지 아니하다.\"라고 규정하여 일시적 복제에 관한 면책규정을 두고 있다. 그 취지는 새로운 저작물 이용환경에 맞추어 저작권자의 권리보호를 충실하게 만드는 한편 이로 인하여 컴퓨터에서의 저작물 이용과 유통이 과도하게 제한되는 것을 방지함으로써 저작권의 보호와 저작물의 원활한 이용의 적절한 균형을 도모하는 데 있다. 이와 같은 입법 취지 등에 비추어 볼 때 여기에서 말하는 ‘원활하고 효율적인 정보처리를 위하여 필요하다고 인정되는 범위’에는 일시적 복제가 저작물의 이용 등에 불가피하게 수반되는 경우는 물론 안정성이나 효율성을 높이기 위해 이루어지는 경우도 포함된다고 볼 것이지만, 일시적 복제 자체가 독립한 경제적 가치를 가지는 경우는 제외되어야 한다.\n[2] 甲 주식회사가 乙 외국회사가 저작권을 가지고 있는 소프트웨어에 관하여 판매대리점 계약을 체결하였고, 乙 회사는 위 소프트웨어에 대한 이용허락계약(라이선스 계약)을 통하여 라이선스받은 최대 동시사용자 수보다 많은 사용자가 소프트웨어를 동시에 사용할 수 없도록 하는 동시사용 방식의 라이선스를 부여하고 있었는데, 甲 회사가 위 소프트웨어의 최종사용자가 라이선스를 추가로 확보할 수 있는 기능을 가진 소프트웨어를 개발하여 乙 회사의 소프트웨어의 최종사용자들에게 판매하였고, 이를 사용하면 최대 동시사용자 수를 초과하는 乙 회사의 소프트웨어가 사용자 컴퓨터의 램(RAM)에 일시적으로 복제된 상태로 남게 되는 사안에서, 라이선스 계약을 체결할 당시 저작권자인 乙 회사가 약정한 최대 라이선스 수를 넘는 일시적 복제까지 허락하였다고 볼 수 없는 점, 甲 회사의 소프트웨어는 乙 회사의 소프트웨어의 작동과정에서 원활하고 효율적인 정보처리를 위한 작업을 하는 것으로만 볼 수 없고, 乙 회사의 소프트웨어가 사용자 컴퓨터의 램(RAM)에 복제된 상태로 남게 되는 것은 甲 회사의 소프트웨어에 의해 추가적으로 발생한 것이지 乙 회사의 소프트웨어를 이용하는 과정 중에 불가피하게 수반되는 결과물이라고 볼 수도 없는 점, 라이선스 계약과 같은 동시사용 방식에서 유상 거래의 핵심이 되는 것은 ‘최대 라이선스의 수’라고 볼 수 있는데, 甲 회사의 소프트웨어로 인해 ‘최대 라이선스의 수’가 증가되는 효과가 발생하게 되고 甲 회사의 소프트웨어를 사용하면 구매할 라이선스 수를 줄일 수 있으므로 乙 회사의 소프트웨어의 라이선스 판매량이 감소하는 경제적 효과가 발생하게 되는 점 등을 종합하면, 甲 회사의 소프트웨어에 의해 발생하는 일시적 복제는 乙 회사의 소프트웨어의 이용과정에서 불가피하게 수반되거나 안정성이나 효율성을 높이는 것으로만 보기 어렵고, 독립한 경제적 가치를 가지는 것으로 볼 수 있으므로, 甲 회사의 소프트웨어는 乙 회사의 일시적 복제권을 침해하였다고 한 사례.\n", "judgment_type": "판결", "name": "손해배상등[일시적 복제에 의한 복제권 침해가 쟁점이 된 사건(동시접속 라이선스 사건)]", "number": "2016다20916", "reference_cases": "[1] 대법원 2017. 11. 23. 선고 2015다1017, 1024, 1031, 1048 판결(공2018상, 4)\n", "reference_provisions": "[1] 저작권법 제2조 제22호, 제16조, 제35조의2, 제46조 제2항 / [2] 저작권법 제2조 제22호, 제16조, 제35조의2, 제46조 제2항\n", "total_hits": 364, "type_code": "400101", "type_name": "민사" } ]

이를 위해 길이가 긴 문장을 분리합니다. 이전 작업에서는 편의상 본문만 단락으로 분리했습니다. 이렇게 분리된 데이터를 저장하기 위해서는 두 가지 선택을 할 수 있습니다. 하나는 분리된 단락의 수만큼 사건명, 법원명, 판결 요지, 본문 등을 중복 저장하거나 두 개의 컬렉션으로 분리하는 방법이 있습니다. 만약 중복 저장을 하게 되면 분리된 단락의 수만큼 본문이 중복 저장되기 때문에 해당 컬렉션의 크기는 비효율적으로 커지게 됩니다. 따라서 이전 작업에서는 컬렉션을 분리했습니다.

컬렉션을 분리하면 다음과 같은 형태가 됩니다. 본문과 기타 부가 정보를 저장하는 컬렉션(demo.law) 하나와

demo.law

분리된 본문의 단락을 저장하는 컬렉션(demo.law.content)로 저장하게 됩니다.

demo.law.content

그러나 이러한 방식은 중복 저장에 비해 효율이 상승하지만 분리 저장하여 관리해야 하는 것, 질의 과정에서 두 컬렉션을 조인해야 하는 등 복잡도가 증가하게 됩니다. 그리고 검색된 단락의 점수를 우선할지, 혹은 기타 필드에 대한 점수를 우선할지, 혹은 이 둘을 병합하여 계산할지, 문서 수의 기준은 어디로 설정할지 등 고려해야 할 지점이 늘어납니다.

안타깝게도 이 방식은 대부분의 벡터 검색을 지원하는 저장소를 사용하는 일반적인 방식입니다. 이는 임베딩 모델의 한계와 특성을 색인/검색하는 저장소가 온전히 따라가지 못함으로 인해 발생되는 문제입니다.

여기서 Aeca가 지원하는 nested field처럼 벡터 데이터도 구조화하여 저장할 방법을 생각을 하게 됩니다.

2차원 벡터를 지원

이를 위해 벡터 데이터를 저장, 색인 및 검색하는 코드를 수정하여 한 문서가 가지는 필드가 하나 이상의 벡터 데이터, 즉 2차원 벡터를 저장할 수 있도록 수정했습니다.

자세한 구현 내용은 다음 글을 통해 설명드리도록 하겠습니다.

이제 두 임베딩 모델의 한계를 고려하기 위해 두 개 혹은 그 이상의 컬렉션을 분리할 필요가 없어졌습니다. 하나의 컬렉션을 저장하고 분리된 단락의 임베딩 데이터(passage_embed)를 2차원 배열로 저장합니다.

demo.law.v2

이로써 두 컬렉션을 병합하기 위한 명령도 삭제 되어 질의도 간결해 졌습니다.

route

실행 시간 및 데이터 크기

테스트는 MacBook Pro M3 Max, 36GB에서 진행했으며 실행 시간은 다음과 같습니다. 실행 시간은 컬렉션을 분리하여 저장하는 것과 큰 차이는 없었습니다.

  • 데이터 삽입: 14m 24.3s
  • 색인: 33m 44s

데이터 저장은 분리된 단락의 텍스트 데이터가 제외되면서 Full-Text Search 색인의 크기가 조금 줄어들게 되었습니다.

기존2차원 벡터
원본 데이터3.2GiB (965.2 MiB, 단락: 2.3 GiB)3 GiB
색인11.7GiB (3.7 GiB, 단락: 8GiB) 9.8 GiB

나가기

벡터 임베딩 모델이 어떤 제약 조건이 있고 이를 고려하여 긴 문서를 분리하여 저장했을 때 저장과 색인 과정에서 어떤 문제점이 발생할 수 있는지 알아봤습니다. 이는 현업에서 쉽게 마주할 수 있는 내용이며 Aeca를 통해 복잡도를 낮출 수 있습니다.

참고 문헌

Aeca 만나보기

Aeca를 더 사용해 보고 싶다면 Docker로 간단히 설치하여 바로 사용할 수 있습니다. Aeca 도입에 대한 더 자세한 설명이나 제품 소개서 요청은 고객 지원에서 문의해 주세요.

Read more

자연어로 판례 데이터 검색하기

FTS를 사용한 판례 검색 데모에 벡터 검색을 적용하여 자연어 검색 서비스를 구축하는 방법을 설명합니다.

By Aeca Team|2024-07-04

판례 데이터를 빠르게 검색 가능한 상태로 만들기

판례 데이터를 다운로드 받고 Aeca를 통해 판례 검색 서비스를 하루만에 구축한 과정을 설명합니다.

By Aeca Team|2024-06-21

Copyright © 2024 Aeca, Inc.

Made with ☕️ and 😽 in San Francisco, CA.