জেমিনি এপিআই শব্দ, বাক্যাংশ, বাক্য এবং কোডের জন্য এম্বেডিং তৈরি করার জন্য টেক্সট এম্বেডিং মডেল অফার করে। শব্দার্থিক অনুসন্ধান, শ্রেণিবিন্যাস এবং ক্লাস্টারিংয়ের মতো এম্বেডিং কাজগুলি কীওয়ার্ড-ভিত্তিক পদ্ধতির তুলনায় আরও সঠিক, প্রসঙ্গ-সচেতন ফলাফল প্রদান করে।
AI পণ্যগুলির জন্য বিল্ডিং রিট্রিভাল অগমেন্টেড জেনারেশন (RAG) সিস্টেম একটি সাধারণ ব্যবহারের ক্ষেত্রে। উন্নত তথ্যগত নির্ভুলতা, সুসংগততা এবং প্রাসঙ্গিক সমৃদ্ধির সাথে মডেল আউটপুটগুলিকে উল্লেখযোগ্যভাবে বৃদ্ধি করতে এম্বেডিংগুলি গুরুত্বপূর্ণ ভূমিকা পালন করে। আপনি যদি একটি পরিচালিত RAG সমাধান ব্যবহার করতে পছন্দ করেন, তাহলে আমরা ফাইল অনুসন্ধান সরঞ্জাম তৈরি করেছি যা RAG পরিচালনা করা সহজ এবং আরও সাশ্রয়ী করে তোলে।
এম্বেডিং তৈরি করা হচ্ছে
টেক্সট এম্বেডিং তৈরি করতে embedContent পদ্ধতি ব্যবহার করুন:
পাইথন
from google import genai
client = genai.Client()
result = client.models.embed_content(
model="gemini-embedding-001",
contents="What is the meaning of life?"
)
print(result.embeddings)
জাভাস্ক্রিপ্ট
import { GoogleGenAI } from "@google/genai";
async function main() {
const ai = new GoogleGenAI({});
const response = await ai.models.embedContent({
model: 'gemini-embedding-001',
contents: 'What is the meaning of life?',
});
console.log(response.embeddings);
}
main();
যাও
package main
import (
"context"
"encoding/json"
"fmt"
"log"
"google.golang.org/genai"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
contents := []*genai.Content{
genai.NewContentFromText("What is the meaning of life?", genai.RoleUser),
}
result, err := client.Models.EmbedContent(ctx,
"gemini-embedding-001",
contents,
nil,
)
if err != nil {
log.Fatal(err)
}
embeddings, err := json.MarshalIndent(result.Embeddings, "", " ")
if err != nil {
log.Fatal(err)
}
fmt.Println(string(embeddings))
}
বিশ্রাম
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-001:embedContent" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: ${GEMINI_API_KEY}" \
-d '{
"model": "models/gemini-embedding-001",
"content": {
"parts": [{
"text": "What is the meaning of life?"
}]
}
}'
আপনি স্ট্রিংগুলির তালিকা হিসাবে পাস করে একসাথে একাধিক অংশের জন্য এম্বেডিং তৈরি করতে পারেন।
পাইথন
from google import genai
client = genai.Client()
result = client.models.embed_content(
model="gemini-embedding-001",
contents= [
"What is the meaning of life?",
"What is the purpose of existence?",
"How do I bake a cake?"
]
)
for embedding in result.embeddings:
print(embedding)
জাভাস্ক্রিপ্ট
import { GoogleGenAI } from "@google/genai";
async function main() {
const ai = new GoogleGenAI({});
const response = await ai.models.embedContent({
model: 'gemini-embedding-001',
contents: [
'What is the meaning of life?',
'What is the purpose of existence?',
'How do I bake a cake?'
],
});
console.log(response.embeddings);
}
main();
যাও
package main
import (
"context"
"encoding/json"
"fmt"
"log"
"google.golang.org/genai"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
contents := []*genai.Content{
genai.NewContentFromText("What is the meaning of life?"),
genai.NewContentFromText("How does photosynthesis work?"),
genai.NewContentFromText("Tell me about the history of the internet."),
}
result, err := client.Models.EmbedContent(ctx,
"gemini-embedding-001",
contents,
nil,
)
if err != nil {
log.Fatal(err)
}
embeddings, err := json.MarshalIndent(result.Embeddings, "", " ")
if err != nil {
log.Fatal(err)
}
fmt.Println(string(embeddings))
}
বিশ্রাম
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-001:embedContent" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"content": {
"parts": [
{
"text": "What is the meaning of life?"
},
{
"text": "How much wood would a woodchuck chuck?"
},
{
"text": "How does the brain work?"
}
]
},
"taskType": "SEMANTIC_SIMILARITY"
}'
কর্মক্ষমতা উন্নত করতে কাজের ধরণ নির্দিষ্ট করুন
শ্রেণীবিভাগ থেকে শুরু করে ডকুমেন্ট অনুসন্ধান পর্যন্ত বিস্তৃত কাজের জন্য আপনি এম্বেডিং ব্যবহার করতে পারেন। সঠিক টাস্ক টাইপ নির্দিষ্ট করলে এম্বেডিংগুলি উদ্দেশ্যমূলক সম্পর্কের জন্য অপ্টিমাইজ করা যায়, নির্ভুলতা এবং দক্ষতা সর্বাধিক হয়। সমর্থিত টাস্ক টাইপের সম্পূর্ণ তালিকার জন্য, সমর্থিত টাস্ক টাইপ টেবিলটি দেখুন।
নিচের উদাহরণটি দেখায় যে কীভাবে আপনি SEMANTIC_SIMILARITY ব্যবহার করে টেক্সটের স্ট্রিংগুলির অর্থ কতটা মিল তা পরীক্ষা করতে পারেন।
পাইথন
from google import genai
from google.genai import types
import pandas as pd
from sklearn.metrics.pairwise import cosine_similarity
client = genai.Client()
texts = [
"What is the meaning of life?",
"What is the purpose of existence?",
"How do I bake a cake?",
]
result = client.models.embed_content(
model="gemini-embedding-001",
contents=texts,
config=types.EmbedContentConfig(task_type="SEMANTIC_SIMILARITY")
)
# Create a 3x3 table to show the similarity matrix
df = pd.DataFrame(
cosine_similarity([e.values for e in result.embeddings]),
index=texts,
columns=texts,
)
print(df)
জাভাস্ক্রিপ্ট
import { GoogleGenAI } from "@google/genai";
import * as cosineSimilarity from "compute-cosine-similarity";
async function main() {
const ai = new GoogleGenAI({});
const texts = [
"What is the meaning of life?",
"What is the purpose of existence?",
"How do I bake a cake?",
];
const response = await ai.models.embedContent({
model: 'gemini-embedding-001',
contents: texts,
taskType: 'SEMANTIC_SIMILARITY'
});
const embeddings = response.embeddings.map(e => e.values);
for (let i = 0; i < texts.length; i++) {
for (let j = i + 1; j < texts.length; j++) {
const text1 = texts[i];
const text2 = texts[j];
const similarity = cosineSimilarity(embeddings[i], embeddings[j]);
console.log(`Similarity between '${text1}' and '${text2}': ${similarity.toFixed(4)}`);
}
}
}
main();
যাও
package main
import (
"context"
"fmt"
"log"
"math"
"google.golang.org/genai"
)
// cosineSimilarity calculates the similarity between two vectors.
func cosineSimilarity(a, b []float32) (float64, error) {
if len(a) != len(b) {
return 0, fmt.Errorf("vectors must have the same length")
}
var dotProduct, aMagnitude, bMagnitude float64
for i := 0; i < len(a); i++ {
dotProduct += float64(a[i] * b[i])
aMagnitude += float64(a[i] * a[i])
bMagnitude += float64(b[i] * b[i])
}
if aMagnitude == 0 || bMagnitude == 0 {
return 0, nil
}
return dotProduct / (math.Sqrt(aMagnitude) * math.Sqrt(bMagnitude)), nil
}
func main() {
ctx := context.Background()
client, _ := genai.NewClient(ctx, nil)
defer client.Close()
texts := []string{
"What is the meaning of life?",
"What is the purpose of existence?",
"How do I bake a cake?",
}
var contents []*genai.Content
for _, text := range texts {
contents = append(contents, genai.NewContentFromText(text, genai.RoleUser))
}
result, _ := client.Models.EmbedContent(ctx,
"gemini-embedding-001",
contents,
&genai.EmbedContentRequest{TaskType: genai.TaskTypeSemanticSimilarity},
)
embeddings := result.Embeddings
for i := 0; i < len(texts); i++ {
for j := i + 1; j < len(texts); j++ {
similarity, _ := cosineSimilarity(embeddings[i].Values, embeddings[j].Values)
fmt.Printf("Similarity between '%s' and '%s': %.4f\n", texts[i], texts[j], similarity)
}
}
}
বিশ্রাম
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-001:embedContent" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"taskType": "SEMANTIC_SIMILARITY",
"content": {
"parts": [
{
"text": "What is the meaning of life?"
},
{
"text": "How much wood would a woodchuck chuck?"
},
{
"text": "How does the brain work?"
}
]
}
}'
কোড স্নিপেটগুলি দেখাবে যে চালানোর সময় টেক্সটের বিভিন্ন অংশগুলি একে অপরের সাথে কতটা মিল।
সমর্থিত কাজের ধরণ
| কাজের ধরণ | বিবরণ | উদাহরণ |
|---|---|---|
| অর্থগত_সাদৃশ্য | টেক্সট সাদৃশ্য মূল্যায়নের জন্য এম্বেডিংগুলি অপ্টিমাইজ করা হয়েছে। | সুপারিশ ব্যবস্থা, সদৃশ সনাক্তকরণ |
| শ্রেণীবিভাগ | প্রিসেট লেবেল অনুসারে পাঠ্য শ্রেণীবদ্ধ করার জন্য এম্বেডিংগুলি অপ্টিমাইজ করা হয়েছে। | অনুভূতি বিশ্লেষণ, স্প্যাম সনাক্তকরণ |
| ক্লাস্টারিং | এম্বেডিংগুলিকে তাদের মিলের উপর ভিত্তি করে ক্লাস্টার টেক্সটের জন্য অপ্টিমাইজ করা হয়েছে। | নথি সংগঠন, বাজার গবেষণা, অসঙ্গতি সনাক্তকরণ |
| পুনরুদ্ধার_ডকুমেন্ট | ডকুমেন্ট অনুসন্ধানের জন্য অপ্টিমাইজ করা এম্বেডিং। | অনুসন্ধানের জন্য নিবন্ধ, বই, অথবা ওয়েব পৃষ্ঠাগুলির সূচী তৈরি করা। |
| পুনরুদ্ধার_কোয়েরি | সাধারণ অনুসন্ধান প্রশ্নের জন্য অপ্টিমাইজ করা এম্বেডিং। প্রশ্নের জন্য RETRIEVAL_QUERY ব্যবহার করুন; নথি পুনরুদ্ধারের জন্য RETRIEVAL_DOCUMENT ব্যবহার করুন। | কাস্টম অনুসন্ধান |
| কোড_রিট্রিভাল_কোয়েরি | প্রাকৃতিক ভাষা প্রশ্নের উপর ভিত্তি করে কোড ব্লক পুনরুদ্ধারের জন্য অপ্টিমাইজ করা এম্বেডিং। প্রশ্নের জন্য CODE_RETRIEVAL_QUERY ব্যবহার করুন; কোড ব্লক পুনরুদ্ধারের জন্য RETRIEVAL_DOCUMENT ব্যবহার করুন। | কোড পরামর্শ এবং অনুসন্ধান |
| প্রশ্ন_উত্তর | প্রশ্নোত্তর সিস্টেমে প্রশ্নের জন্য এম্বেডিং, প্রশ্নের উত্তর দেয় এমন নথি খুঁজে বের করার জন্য অপ্টিমাইজ করা হয়েছে। প্রশ্নের জন্য QUESTION_ANSWERING ; নথি পুনরুদ্ধারের জন্য RETRIEVAL_DOCUMENT ব্যবহার করুন। | চ্যাটবক্স |
| FACT_VERIFICATION সম্পর্কে | যেসব বিবৃতি যাচাই করা প্রয়োজন, সেইসব নথি উদ্ধারের জন্য অপ্টিমাইজ করা যা বিবৃতির সমর্থনে বা খণ্ডন করার প্রমাণ ধারণ করে। লক্ষ্য পাঠ্যের জন্য FACT_VERIFICATION ব্যবহার করুন; নথি উদ্ধারের জন্য RETRIEVAL_DOCUMENT ব্যবহার করুন। | স্বয়ংক্রিয় তথ্য-পরীক্ষা ব্যবস্থা |
এম্বেডিং আকার নিয়ন্ত্রণ করা
জেমিনি এম্বেডিং মডেল, gemini-embedding-001 , ম্যাট্রিওশকা রিপ্রেজেন্টেশন লার্নিং (MRL) কৌশল ব্যবহার করে প্রশিক্ষিত করা হয় যা একটি মডেলকে উচ্চ-মাত্রিক এম্বেডিং শিখতে শেখায় যার প্রাথমিক অংশ (বা উপসর্গ) থাকে যা একই ডেটার দরকারী, সহজ সংস্করণও।
আউটপুট এম্বেডিং ভেক্টরের আকার নিয়ন্ত্রণ করতে output_dimensionality প্যারামিটার ব্যবহার করুন। একটি ছোট আউটপুট ডাইমেনশন্যালিটি নির্বাচন করলে স্টোরেজ স্পেস বাঁচানো যায় এবং ডাউনস্ট্রিম অ্যাপ্লিকেশনের জন্য কম্পিউটেশনাল দক্ষতা বৃদ্ধি পায়, যদিও মানের দিক থেকে খুব কম ত্যাগ স্বীকার করতে হয়। ডিফল্টরূপে, এটি একটি 3072-ডাইমেনশনাল এম্বেডিং আউটপুট দেয়, তবে স্টোরেজ স্পেস বাঁচাতে আপনি গুণমান না হারিয়ে এটিকে ছোট আকারে ছোট করতে পারেন। আমরা 768, 1536, অথবা 3072 আউটপুট ডাইমেনশন ব্যবহার করার পরামর্শ দিই।
পাইথন
from google import genai
from google.genai import types
client = genai.Client()
result = client.models.embed_content(
model="gemini-embedding-001",
contents="What is the meaning of life?",
config=types.EmbedContentConfig(output_dimensionality=768)
)
[embedding_obj] = result.embeddings
embedding_length = len(embedding_obj.values)
print(f"Length of embedding: {embedding_length}")
জাভাস্ক্রিপ্ট
import { GoogleGenAI } from "@google/genai";
async function main() {
const ai = new GoogleGenAI({});
const response = await ai.models.embedContent({
model: 'gemini-embedding-001',
content: 'What is the meaning of life?',
outputDimensionality: 768,
});
const embeddingLength = response.embedding.values.length;
console.log(`Length of embedding: ${embeddingLength}`);
}
main();
যাও
package main
import (
"context"
"fmt"
"log"
"google.golang.org/genai"
)
func main() {
ctx := context.Background()
// The client uses Application Default Credentials.
// Authenticate with 'gcloud auth application-default login'.
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
defer client.Close()
contents := []*genai.Content{
genai.NewContentFromText("What is the meaning of life?", genai.RoleUser),
}
result, err := client.Models.EmbedContent(ctx,
"gemini-embedding-001",
contents,
&genai.EmbedContentRequest{OutputDimensionality: 768},
)
if err != nil {
log.Fatal(err)
}
embedding := result.Embeddings[0]
embeddingLength := len(embedding.Values)
fmt.Printf("Length of embedding: %d\n", embeddingLength)
}
বিশ্রাম
curl -X POST "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-001:embedContent" \
-H 'Content-Type: application/json' \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"content": {"parts":[{ "text": "What is the meaning of life?"}]},
"output_dimensionality": 768
}'
কোড স্নিপেট থেকে উদাহরণ আউটপুট:
Length of embedding: 768
ছোট আকারের জন্য মান নিশ্চিত করা
৩০৭২ মাত্রার এম্বেডিং স্বাভাবিক করা হয়েছে। স্বাভাবিক করা এম্বেডিংগুলি ভেক্টর দিক তুলনা করে আরও সঠিক শব্দার্থিক সাদৃশ্য তৈরি করে, মাত্রার তুলনা করে না। ৭৬৮ এবং ১৫৩৬ সহ অন্যান্য মাত্রার জন্য, আপনাকে নিম্নরূপ এম্বেডিংগুলিকে স্বাভাবিক করতে হবে:
পাইথন
import numpy as np
from numpy.linalg import norm
embedding_values_np = np.array(embedding_obj.values)
normed_embedding = embedding_values_np / np.linalg.norm(embedding_values_np)
print(f"Normed embedding length: {len(normed_embedding)}")
print(f"Norm of normed embedding: {np.linalg.norm(normed_embedding):.6f}") # Should be very close to 1
এই কোড স্নিপেট থেকে উদাহরণ আউটপুট:
Normed embedding length: 768
Norm of normed embedding: 1.000000
নিম্নলিখিত সারণীতে বিভিন্ন মাত্রার জন্য এমটিইবি স্কোর দেখানো হয়েছে, যা এম্বেডিংয়ের জন্য একটি সাধারণভাবে ব্যবহৃত মানদণ্ড। উল্লেখযোগ্যভাবে, ফলাফলটি দেখায় যে কর্মক্ষমতা এম্বেডিং মাত্রার আকারের সাথে কঠোরভাবে আবদ্ধ নয়, নিম্ন মাত্রাগুলি তাদের উচ্চ মাত্রার প্রতিরূপের সাথে তুলনীয় স্কোর অর্জন করে।
| এমআরএল ডাইমেনশন | MTEB স্কোর |
|---|---|
| ২০৪৮ | ৬৮.১৬ |
| ১৫৩৬ | ৬৮.১৭ |
| ৭৬৮ | ৬৭.৯৯ |
| ৫১২ | ৬৭.৫৫ |
| ২৫৬ | ৬৬.১৯ |
| ১২৮ | ৬৩.৩১ |
ব্যবহারের ক্ষেত্রে
বিভিন্ন সাধারণ AI ব্যবহারের ক্ষেত্রে টেক্সট এম্বেডিং অত্যন্ত গুরুত্বপূর্ণ, যেমন:
- পুনরুদ্ধার-অগমেন্টেড জেনারেশন (RAG): এম্বেডিংগুলি একটি মডেলের প্রেক্ষাপটে প্রাসঙ্গিক তথ্য পুনরুদ্ধার এবং অন্তর্ভুক্ত করে জেনারেট করা টেক্সটের মান উন্নত করে।
তথ্য পুনরুদ্ধার: ইনপুট টেক্সটের একটি অংশের মাধ্যমে সবচেয়ে শব্দার্থগতভাবে অনুরূপ টেক্সট বা ডকুমেন্ট অনুসন্ধান করুন।
অনুসন্ধান পুনঃর্যাঙ্কিং : কোয়েরির বিপরীতে প্রাথমিক ফলাফলগুলিকে অর্থগতভাবে স্কোর করে সবচেয়ে প্রাসঙ্গিক আইটেমগুলিকে অগ্রাধিকার দিন।
অসঙ্গতি সনাক্তকরণ: এম্বেডিংয়ের গ্রুপগুলির তুলনা লুকানো প্রবণতা বা বহির্মুখীতা সনাক্ত করতে সাহায্য করতে পারে।
শ্রেণীবিভাগ: টেক্সটের বিষয়বস্তুর উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে শ্রেণীবদ্ধ করুন, যেমন অনুভূতি বিশ্লেষণ বা স্প্যাম সনাক্তকরণ
ক্লাস্টারিং: আপনার এমবেডিংগুলির ক্লাস্টার এবং ভিজ্যুয়ালাইজেশন তৈরি করে জটিল সম্পর্কগুলিকে কার্যকরভাবে উপলব্ধি করুন।
এম্বেডিং সংরক্ষণ করা হচ্ছে
যখন আপনি এম্বেডিংগুলিকে উৎপাদনে নিয়ে যান, তখন উচ্চ-মাত্রিক এম্বেডিংগুলিকে দক্ষতার সাথে সংরক্ষণ, সূচীকরণ এবং পুনরুদ্ধারের জন্য ভেক্টর ডাটাবেস ব্যবহার করা সাধারণ। গুগল ক্লাউড পরিচালিত ডেটা পরিষেবাগুলি অফার করে যা এই উদ্দেশ্যে ব্যবহার করা যেতে পারে যেমন BigQuery , AlloyDB , এবং Cloud SQL ।
নিম্নলিখিত টিউটোরিয়ালগুলি জেমিনি এম্বেডিংয়ের মাধ্যমে অন্যান্য তৃতীয় পক্ষের ভেক্টর ডাটাবেসগুলি কীভাবে ব্যবহার করবেন তা দেখায়।
মডেল সংস্করণ
| সম্পত্তি | বিবরণ |
|---|---|
| মডেল কোড | জেমিনি এপিআই |
| সমর্থিত ডেটা প্রকারগুলি | ইনপুট টেক্সট আউটপুট টেক্সট এম্বেডিং |
| টোকেন সীমা [*] | ইনপুট টোকেন সীমা ২,০৪৮ আউটপুট মাত্রার আকার নমনীয়, সমর্থন করে: 128 - 3072, প্রস্তাবিত: 768, 1536, 3072 |
| সংস্করণ |
|
| সর্বশেষ আপডেট | জুন ২০২৫ |
অবচয়হীন এম্বেডিং মডেলগুলির জন্য, অবচয় পৃষ্ঠাটি দেখুন।
ব্যাচ এম্বেডিং
যদি ল্যাটেন্সি কোনও উদ্বেগের বিষয় না হয়, তাহলে Batch API সহ Gemini Embeddings মডেলটি ব্যবহার করে দেখুন। এটি ডিফল্ট Embedding মূল্যের 50% এ অনেক বেশি থ্রুপুট প্রদান করতে সাহায্য করে। Batch API কুকবুক থেকে কীভাবে শুরু করবেন তার উদাহরণ খুঁজুন।
দায়িত্বশীল ব্যবহারের বিজ্ঞপ্তি
জেনারেটিভ এআই মডেলগুলি নতুন কন্টেন্ট তৈরি করে, তার বিপরীতে, জেমিনি এম্বেডিং মডেলটি কেবল আপনার ইনপুট ডেটার ফর্ম্যাটকে একটি সংখ্যাসূচক উপস্থাপনায় রূপান্তর করার উদ্দেশ্যে তৈরি। যদিও গুগল একটি এমবেডিং মডেল সরবরাহ করার জন্য দায়ী যা আপনার ইনপুট ডেটার ফর্ম্যাটকে অনুরোধ করা সংখ্যাসূচক-ফরম্যাটে রূপান্তরিত করে, ব্যবহারকারীরা তাদের ইনপুট করা ডেটা এবং এর ফলে এম্বেডিংয়ের সম্পূর্ণ দায়িত্ব বহন করে। জেমিনি এম্বেডিং মডেল ব্যবহার করে আপনি নিশ্চিত করেন যে আপনার আপলোড করা যেকোনো কন্টেন্টের উপর আপনার প্রয়োজনীয় অধিকার রয়েছে। এমন কন্টেন্ট তৈরি করবেন না যা অন্যদের বৌদ্ধিক সম্পত্তি বা গোপনীয়তার অধিকার লঙ্ঘন করে। এই পরিষেবার আপনার ব্যবহার আমাদের নিষিদ্ধ ব্যবহার নীতি এবং গুগলের পরিষেবার শর্তাবলী সাপেক্ষে।
এম্বেডিং দিয়ে তৈরি করা শুরু করুন
মডেলের ক্ষমতাগুলি অন্বেষণ করতে এবং আপনার এম্বেডিংগুলিকে কীভাবে কাস্টমাইজ এবং ভিজ্যুয়ালাইজ করতে হয় তা শিখতে এম্বেডিং কুইকস্টার্ট নোটবুকটি দেখুন।