Use ScyllaDB to perform semantic search across movie plot descriptions. 우리는 쇼케이스를위한 샘플 영화 권장 앱을 만들었습니다. 샘플 앱은 ScyllaDB를 사용하여 낮은 지연 시멘틱 검색 및 벡터 기반 응용 프로그램을 구축하는 간단한 방법을 제공합니다. ScyllaDB의 새로운 벡터 검색 기능 Vector Search Early Access 프로그램에 가입하기 Vector Search Early Access 프로그램에 가입하기 이 게시물에서, 우리는 키워드가 아닌 의미로 영화를 찾기 위해 영화 플롯 설명을 통해 세마닉 검색을 수행하는 방법을 보여줄 것입니다.This example also shows how you can add ScyllaDB Vector Search to your existing applications. 애플리케이션에 다이빙하기 전에, 우리는 의미적 검색을 의미하는 것을 명확히하고 유사성 기능에 대한 몇 가지 맥락을 제공합시다. Vector Similarity Function에 대한 정보 두 벡터 사이의 유사성은 여러 가지 방법으로 계산할 수 있습니다.The most common methods are , (내부 제품) 및 ScyllaDB Vector Search는 이러한 모든 기능을 지원합니다. 비슷한 코스 도트 제품 L2 텍스트 삽입의 경우, 코시인 유사성은 가장 자주 사용되는 유사성 함수입니다.그것은 텍스트와 함께 작업할 때, 우리는 대부분 벡터의 방향에 초점을 맞추고, 크기보다는 크기에 초점을 맞추기 때문입니다.Cosine 유사성은 벡터 사이의 각도 (즉, 방향의 차이)만 고려하고, 크기 (벡터의 길이)를 무시합니다. 예를 들어, 동일한 주제에 관한 짧은 문서 (1 페이지)와 더 긴 문서 (10 페이지)는 서로 다른 길이일지라도 벡터 공간에서 비슷한 방향을 지시할 수 있습니다.This is what makes cosine similarity ideal for capturing topical similarity. 실제로, 많은 삽입 모델 (예 : ) 정상화된 벡터를 생산합니다. 정상화된 벡터는 모두 동일한 길이 (1의 크기)을 가지고 있습니다. 정상화된 벡터의 경우, cosine 유사성과 dot 제품은 동일한 결과를 반환합니다. 이것은 cosine 유사성은 벡터의 크기에 의해 dot 제품을 분할하기 때문에, 이는 벡터가 정상화될 때 모두 1입니다. L2 함수는 dot 제품이나 cosine 유사성에 비해 다른 거리 값을 생산하지만, 삽입의 순서는 동일합니다 (normalized 벡터를 가정). 오픈모델 이제 상징적 유사성 기능에 대한 더 나은 이해가 있으면 권장 앱이 어떻게 작동하는지 설명해 봅시다. App Overview에 대한 리뷰 애플리케이션은 사용자가 어떤 종류의 영화를보고 싶은지 입력할 수 있습니다.예를 들어, "미국 축구"를 입력하면 애플리케이션은 귀하의 입력과 비교합니다. 데이터베이스에 저장됩니다. 첫 번째 결과는 최상의 일치이며, 다음은 다른 유사한 권장 사항입니다.이 비교는 . plots of movies ScyllaDB Vector Search 당신은 찾을 수 있습니다 The 설치 지침과 함께, a 데이터 세트에 대해서는 TMDB 데이터 세트를 재사용하고 있습니다.For the data set, we are reusing a TMDB data set. . GitHub의 소스 코드 단계별 튜토리얼 Kaggle에서 사용할 수 있습니다. 프로젝트 요구사항 응용 프로그램을 실행하려면 ScyllaDB Cloud 계정과 벡터 검색이 가능한 클러스터가 필요합니다. Right now, you need to use the API to create a vector search enabled cluster. ! 시작하기 위해 여기에 있는 지침을 따르십시오. 응용 프로그램은 몇 가지 Python 패키지에 따라 달라집니다: ScyllaDB Python 드라이버 - ScyllaDB를 연결하고 쿼리하기 위해. Sentence Transformers - OpenAI 또는 다른 유료 API를 필요로하지 않고 로컬로 삽입을 생성합니다. Streamlit - UI를 위해 Pydantic - 쿼리 결과로 작업을 더 쉽게 만듭니다. 기본적으로, 앱은 사용 누구나 무거운 컴퓨팅 요구없이 로컬로 실행할 수 있도록 모델. , 예를 실행하기 위해 상업적 또는 유료 서비스가 필요하지 않습니다.No commercial or paid services are needed to run the example. 모든 미니LM-L6-v2 ScyllaDB 클라우드 구성 및 데이터베이스 연결 A 파일은 호스트 주소 및 연결 세부 사항을 포함한 ScyllaDB Cloud 인증 정보를 저장합니다. config.py 별도의 ScyllaDB 다음을 처리합니다 : 도움말 모듈 연결 및 세션 만들기 데이터 삽입 및 쿼리 깨끗한 데이터베이스 상호 작용을 위한 헬퍼 기능 제공 데이터베이스 계획 이 계획은 A 에서 정의된다. 파일, 프로젝트의 마이그레이션 스크립트를 실행할 때 실행.It includes: schema.cql 키 스페이스 생성 (replication factor of 3) 영화에 대한 테이블 정의, release_date, title, genre 및 plot와 같은 필드를 저장 벡터 검색 인덱스 CREATE KEYSPACE recommend WITH replication = {'class': 'NetworkTopologyStrategy', 'replication_factor': '3'}; CREATE TABLE recommend.movies ( id INT, release_date TIMESTAMP, title TEXT, tagline TEXT, genre TEXT, imdb_id TEXT, poster_url TEXT, plot TEXT, plot_embedding VECTOR<FLOAT, 384>, PRIMARY KEY (id) ) WITH cdc = {'enabled': 'true'}; CREATE INDEX IF NOT EXISTS ann_index ON recommend.movies(plot_embedding) USING 'vector_index' WITH OPTIONS = { 'similarity_function': 'DOT_PRODUCT' }; 호스트 : ❤ by 제조사.cql Github 계획은 강조한다: 'plot' - 텍스트, 유사성 비교에 사용된 영화 설명을 저장합니다. 'plot_embedding' - 384 차원(Sentence Transformers 모델과 일치하는)의 벡터 데이터 유형을 사용하여 정의된 플롯의 벡터, 삽입 표현. 'Primary key' - id에 의해 쿼리되는 효율적인 검색을 위한 파티션 키로서의 id CDC 활성화 - ScyllaDB 벡터 검색에 필요한. '벡터 인덱스' - 효율적인 벡터 쿼리를 허용하기 위해 plot_embedding 열에 생성된 대략적인 가장 가까운 이웃 (ANN) 인덱스. 이 계획의 목적은 플롯 삽입에 대한 효율적인 검색을 허용하고 벡터와 함께 추가 정보를 저장하는 것입니다. 삽입 Embedding Creator 클래스는 Sentence Transformers를 사용하여 텍스트 삽입 생성을 처리합니다.이 함수는 모든 텍스트 입력을 수락하고 ScyllaDB의 '벡터' 열에 삽입할 수있는 플로이트 값 목록을 반환합니다.A Embedding Creator class handles text embedding generation with Sentence Transformers. 벡터 검색을 통해 구현된 권장 사항 앱의 주요 기능은 영화 추천을 제공하는 것입니다.이 권장 사항은 벡터 검색을 사용하여 구현됩니다. 이 핸들 recommender 입력 텍스트를 가져오기 텍스트를 embeddings로 바꾸기 벡터 검색 from db.scylladb import ScyllaClient from embedding_creator import EmbeddingCreator from models import Movie class MovieRecommender: def __init__(self): self.scylla_client = ScyllaClient() self.embedding_creator = EmbeddingCreator("all-MiniLM-L6-v2") def similar_movies(self, user_query: str, top_k=5) -> list[Movie]: db_client = ScyllaClient() user_query_embedding = self.embedding_creator.create_embedding(user_query) db_query = f""" SELECT * FROM recommend.movies ORDER BY plot_embedding ANN OF %s LIMIT %s; """ values = [user_query_embedding, top_k] results = db_client.query_data(db_query, values) return [Movie(**row) for row in results] 호스트 : ❤ by 추천해드릴게요 PY Github 벡터 검색 쿼리를 분해하자: SELECT * FROM recommend.movies ORDER BY plot_embedding ANN OF [0.1, 0.2, 0.3, …] LIMIT 5; 사용자 입력은 먼저 삽입으로 변환되며, 우리는 삽입을 삽입과 비교하고 있는지 확인합니다. 테이블의 행은 ANN 연산자 (ANN OF)를 사용하여 유사성으로 순서화됩니다. 결과는 5 개의 비슷한 영화로 제한됩니다. SELECT 문은 테이블의 모든 열을 검색합니다.The SELECT statement retrieves all columns from the table. 유사성 검색에서 우리는 두 벡터 사이의 거리를 계산합니다. 벡터 공간에서 벡터가 가까워질수록 그들의 기본 내용이 더 비슷합니다.또는, 다른 말로하면, 더 작은 거리는 더 높은 유사성을 제안합니다. 스트리밍 UI The UI, defined in 정의 모든 것을 함께 묶어라. app.py 사용자의 쿼리를 취하고, 삽입으로 변환하고, 벡터 검색을 실행합니다.It takes the user's query, converts it to an embedding, and executes a vector search. UI는 최고의 일치와 다른 유사한 영화 추천 목록을 표시합니다. 직접 해보세요! ScyllaDB 벡터 검색을 사용하여 빌딩을 시작하려면 몇 가지 옵션이 있습니다.If you want to get started building with ScyllaDB Vector Search, you have several options: GitHub에서 소스 코드를 탐색 README를 사용하여 컴퓨터에 앱을 설정하십시오. 튜토리얼을 따라 앱을 처음부터 구축하십시오. 그리고 질문이 있다면, 사용 그리고 우리는 기꺼이 도움을 줄 것입니다. 포럼 Attila Tóth에 관하여 그는 튜토리얼과 블로그 게시물을 쓰고, 이벤트에서 연설하고, 데모 및 샘플 애플리케이션을 만들어 개발자가 고성능 애플리케이션을 구축할 수 있도록 도와줍니다. 아티라 토스