Vertex AI এর সাথে ভেক্টর সাদৃশ্য অনুসন্ধান করুন

Firebase Data Connect এর ভেক্টর সাদৃশ্য অনুসন্ধানে স্বাগতম — Firebase-এর শব্দার্থিক অনুসন্ধানের বাস্তবায়ন যা Google Vertex AI-এর সাথে একীভূত হয়৷

এই বৈশিষ্ট্যের মূলে রয়েছে ভেক্টর এমবেডিং, যা টেক্সট বা মিডিয়ার শব্দার্থিক অর্থকে উপস্থাপন করে ফ্লোটিং পয়েন্ট সংখ্যার অ্যারে। একটি ইনপুট ভেক্টর এম্বেডিং ব্যবহার করে একটি নিকটতম প্রতিবেশী অনুসন্ধান চালানোর মাধ্যমে, আপনি সমস্ত শব্দার্থগতভাবে অনুরূপ সামগ্রী খুঁজে পেতে পারেন। Data Connect এই ক্ষমতার জন্য PostgreSQL এর pgvector এক্সটেনশন ব্যবহার করে।

এই শক্তিশালী শব্দার্থিক অনুসন্ধান সুপারিশ ইঞ্জিন এবং সার্চ ইঞ্জিনের মতো ব্যবহারের ক্ষেত্রে চালাতে পারে। এটি জেনারেটিভ এআই প্রবাহে পুনরুদ্ধার-বর্ধিত প্রজন্মের একটি মূল উপাদান। Vertex AI ডকুমেন্টেশন আরও জানার জন্য একটি দুর্দান্ত জায়গা।

Vertex AI এর এমবেডিং এপিআই ব্যবহার করে স্বয়ংক্রিয়ভাবে ভেক্টর এম্বেডিং তৈরি করার জন্য আপনি Data Connect অন্তর্নির্মিত সমর্থনের উপর নির্ভর করতে পারেন, অথবা সেগুলি ম্যানুয়ালি তৈরি করতে সেই API ব্যবহার করতে পারেন।

পূর্বশর্ত

  • আপনার প্রকল্পের জন্য ডেটা সংযোগ সেট আপ করুন

  • Vertex AI APIs সক্ষম করুন৷

সেটআপ

আপনি স্থানীয় ডেভেলপমেন্ট ফ্লো (যদি আপনি একজন ওয়েব, কোটলিন অ্যান্ড্রয়েড বা iOS ডেভেলপার হন) অথবা একটি IDX ফ্লো (ওয়েব ডেভেলপারদের জন্য) এর মধ্যে বেছে নিতে পারেন। আপনি একটি স্থানীয় ডাটাবেস বা আপনার প্রোডাকশন Data Connect প্রজেক্ট এবং এর ক্লাউড এসকিউএল পোস্টগ্রেএসকিউএল ইনস্ট্যান্স ডেভেলপমেন্টের জন্য ব্যবহার করতে পারেন।

এই নির্দেশাবলী অনুমান করে যে আপনি কুইকস্টার্ট গাইড অনুসরণ করে আপনার Data Connect প্রকল্প তৈরি করেছেন।

স্থানীয় PostgreSQL এর সাথে একীভূত করুন

  1. একটি স্থানীয় PostgreSQL উদাহরণ সেট আপ করুন।
  2. নিজেকে Vertex AI ব্যবহারকারী IAM ভূমিকা প্রদান করুন
  3. আপনার পরিবেশে Google ক্লাউড অ্যাপ্লিকেশন ডিফল্ট শংসাপত্র সেট আপ করুন৷
  4. আপনার স্থানীয় PostgreSQL উদাহরণে pgvector এক্সটেনশন ইনস্টল করুন।
  5. pgvector সংগ্রহস্থলের নির্দেশাবলী অনুযায়ী CREATE EXTENSION vector ব্যবহার করে এক্সটেনশন সক্রিয় করুন।

IDX এর সাথে একীভূত করুন

  1. ডেটা কানেক্ট টেমপ্লেট ব্যবহার করে আপনার IDX ওয়ার্কস্পেস সেট আপ করুন।
  2. নিজেকে Vertex AI ব্যবহারকারী IAM ভূমিকা প্রদান করুন
  3. pgvector সংগ্রহস্থলের নির্দেশাবলী অনুযায়ী CREATE EXTENSION vector ব্যবহার করে এক্সটেনশন সক্রিয় করুন।

আপনার স্কিমা ডিজাইন করুন

ভেক্টর অনুসন্ধান করতে, আপনার স্কিমাতে Vector ধরণের একটি নতুন ক্ষেত্র যোগ করুন। উদাহরণস্বরূপ, যদি আপনি চলচ্চিত্রের বর্ণনা ব্যবহার করে একটি শব্দার্থিক অনুসন্ধান করতে চান, তাহলে চলচ্চিত্রের বিবরণের সাথে যুক্ত ভেক্টর এম্বেডিংগুলিকে ধরে রাখতে একটি ক্ষেত্র যুক্ত করুন। এই স্কিমাতে, description ক্ষেত্রের জন্য ভেক্টর এম্বেডিং সংরক্ষণ করতে descriptionEmbedding যোগ করা হয়।

type Movie @table {
 id: ID! @col(name: "movie_id") @default(id: ID! @col(name: "movie_id") @default(expr: "uuidV4()")
 title: String!
 description: String
 descriptionEmbedding: Vector! @col(size:768)
 // ...
}

এম্বেডিং তৈরি এবং পুনরুদ্ধার করুন

Data Connect _embed সার্ভার মান সহ ভেক্টর এম্বেডিংয়ের জন্য সমন্বিত সমর্থন নিয়ে আসে। এটি Data Connect ভেক্টর এম্বেডিং তৈরি করতে নির্দেশ করে অভ্যন্তরীণভাবে Vertex AI-এর এমবেডিং API-কে কল করে। _embed সার্ভার মানটি মিউটেশন এবং প্রশ্ন উভয় ক্ষেত্রেই ব্যবহার করা যেতে পারে।

মিউটেশন

Data Connect মাধ্যমে একটি এম্বেডিং তৈরি এবং সঞ্চয় করুন

আপনার ভেক্টর অনুসন্ধান অ্যাপে, আপনি সম্ভবত অনুরোধ করতে চাইবেন যে আপনি আপনার ডাটাবেসে রেকর্ড যুক্ত করার সাথে সাথেই এমবেডিং তৈরি করা হবে। এখানে একটি createMovie মিউটেশন Movie টেবিলে একটি মুভি রেকর্ড যোগ করে এবং একটি নির্দিষ্ট এমবেডিং model সাথে একটি মুভির বিবরণ পাস করে।

mutation createMovie($movieData: Movie_Data! @pick(fields: ["title", "genre", "description"])) {
  movie_insert(data: {
    ...movieData,
    descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: $movieData.description}
  })
}

কিছু ক্ষেত্রে, আপনি মুভির বিবরণ এবং এম্বেডিং আপডেট করতে চাইতে পারেন।

mutation updateDescription($id: String!, $description: String!) {
  movie_update(id: $id, data: {
    description: $description,
    descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: $description}
  })
}

একটি ক্লায়েন্ট থেকে পরবর্তী মিউটেশন কল করতে:

import { updateMovieDescriptionWithEmbed } from 'lib/dataconnect-sdk/';

await updateMovieDescriptionWithEmbed({ id: movieId, description: description});

// Use the response

প্রশ্ন

নিম্নলিখিত মত একটি ক্যোয়ারী ব্যবহার করে ভেক্টর এম্বেডিং আনুন. উল্লেখ্য যে ক্যোয়ারী দ্বারা প্রত্যাবর্তিত descriptionEmbedding হল ফ্লোটগুলির একটি অ্যারে, যা সাধারণত মানব-পঠনযোগ্য নয়। সুতরাং, Data Connect জেনারেট করা SDK গুলি সরাসরি ফেরত দেওয়া সমর্থন করে না৷

আপনি সাদৃশ্য অনুসন্ধান করতে ফেরত ভেক্টর এম্বেডিং ব্যবহার করতে পারেন, যেমনটি পরবর্তী বিভাগে বর্ণিত হয়েছে।

query getMovieDescription($id: String!) @auth(is: PUBLIC) {
 movie(id: $id)
   id
   description
   descriptionEmbedding
}

সাদৃশ্য অনুসন্ধান সঞ্চালন

এখন আমরা সাদৃশ্য অনুসন্ধান করতে পারি।

প্রতিটি Vector ক্ষেত্রের জন্য, Data Connect একটি গ্রাফকিউএল ফাংশন তৈরি করে যা সাদৃশ্য অনুসন্ধান বাস্তবায়ন করে। এই উৎপন্ন ফাংশনের নাম হল ${pluralType}_${vectorFieldName}_similarity । নিম্নলিখিত উদাহরণে এবং রেফারেন্স তালিকায় দেখানো হিসাবে এটি কয়েকটি পরামিতি সমর্থন করে।

আপনি একটি গ্রাফকিউএল ফাংশন সংজ্ঞায়িত করতে পারেন যা সাদৃশ্য অনুসন্ধানকে আহ্বান করে। উপরে উল্লিখিত হিসাবে, _embed সার্ভার মান Vertex AI এর এমবেডিং এপিআই ব্যবহার করে ভেক্টর এম্বেডিং তৈরি করতে Data Connect নির্দেশ করে, এই ক্ষেত্রে মুভির বর্ণনা এম্বেডিংয়ের সাথে তুলনা করার জন্য ব্যবহৃত অনুসন্ধান স্ট্রিংয়ের জন্য এমবেডিং তৈরি করতে।

এই উদাহরণে, সাদৃশ্য অনুসন্ধান 5টি সিনেমা পর্যন্ত ফেরত দেবে যার বিবরণ শব্দার্থগতভাবে ইনপুট কোয়েরির সবচেয়ে কাছাকাছি। ফলাফল সেটটি দূরত্বের আরোহী ক্রমে সাজানো হয়েছে - সবচেয়ে কাছের থেকে দূরতম।

query searchMovieDescriptionUsingL2Similarity ($query: String!) @auth(level: PUBLIC) {
    movies_descriptionEmbedding_similarity(
      compare_embed: {model: "textembedding-gecko@003", text: $query},
      method: L2,
      within: 2,
      where: {content: {ne: "No info available for this movie."}}, limit: 5)
      {
        id
        title
        description
      }
  }

সাদৃশ্য ক্যোয়ারী কল

ক্লায়েন্ট কোড থেকে একটি মিল অনুসন্ধান কল করতে:

import { searchMovieDescriptionUsingL2similarity} from 'lib/dataconnect-sdk';

const response = await searchMovieDescriptionUsingL2similarity({ query });

// Use the response

কাস্টম এম্বেডিং ব্যবহার করুন

Data Connect আপনাকে _embed সার্ভার মান ব্যবহার না করে সরাসরি Vector হিসেবে এম্বেডিংয়ের সাথে কাজ করতে দেয়।

একটি কাস্টম এম্বেডিং সংরক্ষণ করুন

Vertex Embeddings API ব্যবহার করে, একটি ম্যাচিং মডেল নির্দিষ্ট করুন এবং সঠিক মাত্রার এমবেডিং ফলাফলের অনুরোধ করুন।

তারপরে, স্টোরেজের জন্য আপডেট অপারেশনে পাস করার জন্য একটি Vector ফ্লোটগুলির ফেরত অ্যারে নিক্ষেপ করুন।

mutation updateDescription($id: String!, $description: String!, $descriptionEmbedding: Vector!) {
  movie_update(id: $id, data: {
    // title, genre...
    description: $description,
    descriptionEmbedding: $descriptionEmbedding
  })
}

কাস্টম এম্বেডিং ব্যবহার করে সাদৃশ্য অনুসন্ধান করুন

অনুসন্ধান পদগুলির জন্য এম্বেডিংগুলি পুনরুদ্ধার করতে এবং সেগুলিকে Vectors কাস্ট করতে একই অপারেশনটি সম্পাদন করুন৷

তারপর, প্রতিটি অনুসন্ধান সম্পাদন করতে _similarity ক্যোয়ারী কল করুন।

query searchMovieDescriptionUsingL2Similarity($compare: Vector!, $within: Float, $excludesContent: String, $limit: Int) @auth(level: PUBLIC) {
    movies_descriptionEmbedding_similarity(
      compare: $compare,
      method: L2,
      within: $within,
      where: {content: {ne: $excludesContent}}, limit: $limit)
      {
        id
        title
        description
      }
  }

উৎপাদনে নিয়োজিত করুন

আপনার স্কিমা এবং সংযোগকারী স্থাপন করুন

একটি সাধারণ Data Connect পুনরাবৃত্তির শেষ ধাপ হল আপনার সম্পদ উৎপাদনে স্থাপন করা।

firebase deploy কমান্ড ব্যবহার করে ক্লাউডএসকিউএল-এ Vector ধরন সমন্বিত আপনার স্কিমা স্থাপন করার সময়, আপনার ক্লাউডএসকিউএল ইন্সট্যান্সে ভার্টেক্স এআই-ভিত্তিক এমবেডিং জেনারেশন সক্ষম করতে Firebase CLI প্রয়োজনীয় পদক্ষেপ নেয়।

firebase deploy --only dataconnect

আপনি যদি আপনার ক্লাউডএসকিউএল ইনস্ট্যান্সে এমবেডিং সমর্থন ম্যানুয়ালি সক্ষম করতে চান, বা একটি CLI ত্রুটির সম্মুখীন হন, তাহলে এই নির্দেশাবলী অনুসরণ করুন।

ভেক্টর অনুসন্ধান সিনট্যাক্স

স্কিমা এক্সটেনশন

Data Connect Vector ডাটা টাইপ মানচিত্র পোস্টগ্রেএসকিউএল-এর vector টাইপ যেমন pgvector এক্সটেনশন দ্বারা সংজ্ঞায়িত করা হয়েছে। pgvector-এর vector টাইপ PostgreSQL-এ একক নির্ভুল ফ্লোটিং পয়েন্ট সংখ্যার অ্যারে হিসাবে সংরক্ষণ করা হয়।

Data Connect , Vector টাইপকে JSON সংখ্যার অ্যারে হিসাবে উপস্থাপন করা হয়। ইনপুটগুলিকে float32 মানের একটি অ্যারেতে বাধ্য করা হয়। জবরদস্তি ব্যর্থ হলে, একটি ত্রুটি উত্থাপিত হয়।

ভেক্টরের মাত্রা সেট করতে @col নির্দেশের আকারের প্যারামিটার ব্যবহার করুন।

type Question @table {
    text: String!
    category: String!
    textEmbedding: Vector! @col(size: 768)
}

size শুধুমাত্র Vector ধরনের জন্য সমর্থিত. Vector ক্রিয়াকলাপ, যেমন সাদৃশ্য-অনুসন্ধান, প্রয়োজনীয় যে সমস্ত Vector মাত্রা একই আছে।

directive @col(
  # … existing args
  """
  Defines a fixed column size for certain scalar types.

  - For Vector, size is required.
  - For all other types, size is currently unsupported and hence supplying it will result in a schema error.
  """
  size: Int
) on FIELD_DEFINITION

প্রশ্ন এবং মিউটেশনের জন্য সার্ভার মান _embed

_embed

এই সার্ভার মান Vertex AI এর এমবেডিং API ব্যবহার করে এম্বেডিং তৈরি এবং সঞ্চয় করতে Data Connect পরিষেবাকে নির্দেশ করে৷ এই সার্ভার মান উভয় প্রশ্ন এবং মিউটেশন ব্যবহার করা যেতে পারে.

সাদৃশ্য অনুসন্ধানের জন্য পরামিতি

method: COSINE|INNER_PRODUCT|L2

দূরত্ব ফাংশন কাছাকাছি প্রতিবেশীদের জন্য অনুসন্ধান করতে ব্যবহৃত. বর্তমানে-সমর্থিত অ্যালগরিদম হল pgvector সার্চ অ্যালগরিদমের একটি উপসেট।

within: float

দূরত্বের একটি সীমাবদ্ধতা যার মধ্যে নিকটতম প্রতিবেশী অনুসন্ধান করা হয়।

where: FDC filter condition

স্কিমা, প্রশ্ন এবং মিউটেশন গাইড দেখুন।

limit: int

ফলাফলের সংখ্যা।