۲۹ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

با استفاده از Google’s Palm API جستجوی مشابه را آسان کنید

یاد بگیرید که چگونه از Google Cloud Vertex AI و مدل زبان بزرگ PalM 2 برای ایجاد جاسازی‌های متنی و جستجوی متن رتبه‌بندی شده بر اساس شباهت معنایی استفاده کنید.

یاد بگیرید که چگونه از Google Cloud Vertex AI و مدل زبان بزرگ PalM 2 برای ایجاد جاسازی‌های متنی و جستجوی متن رتبه‌بندی شده بر اساس شباهت معنایی استفاده کنید.

در مقاله‌های قبلی از API PalM Google برای ایجاد یک پست وبلاگ و ساخت ربات چت استفاده کردیم. در این مقاله، نحوه تولید جاسازی متن و انجام جستجوهای معنایی با استفاده از API PalM را بررسی خواهیم کرد. PaLM API مدل زبان بزرگ PalM 2 Google را از طریق پلتفرم Google Cloud Vertex AI در دسترس توسعه دهندگان قرار می دهد.

برخلاف پرس‌و‌جوهای معمولی مبتنی بر الگوی رشته‌ای یا عبارات منظم، جستجوی معنایی متنی را با معانی مشابه بازیابی می‌کند. این در ساخت ربات های پرسش و پاسخ، طبقه بندی متن، سیستم های توصیه و ترجمه ماشینی مفید است.

جستجوی تشابه بر اساس یافتن فاصله بین دو بردار و بازیابی نزدیکترین آنها است. بردارها نمایش عددی کلمات یا عبارات هستند. متن با عبور دادن آن از طریق یک مدل یادگیری ماشینی که برای ترجمه شباهت معنایی به فضای برداری آموزش داده شده است، به جاسازی های برداری تبدیل می شود. در یک جاسازی متن، بردار کلمات و عبارات با معانی مشابه در نزدیکی یکدیگر قرار خواهند گرفت.

برای این آموزش، ما از textembedding-gecko، مدلی مبتنی بر مدل پایه PalM 2، برای ایجاد جاسازی‌های متنی استفاده خواهیم کرد.

برای راهنمایی دقیق برای تنظیم محیط و پیکربندی SDK، لطفاً به مقاله قبلی من مراجعه کنید. این راهنما فرض می کند که شما آن آموزش را تکمیل کرده اید.

اگر می خواهید شغلی در هوش مصنوعی داشته باشید، پایتون را یاد بگیرید

برای انجام جستجوی معنایی، TREC (طبقه بندی سوالات) از Kaggle. فایل فشرده را دانلود کرده و فایل test.csv را در فهرست داده ها قرار دهید. ما این فایل را بارگیری می کنیم و زیرمجموعه ای از سوالات را به مدل PalM 2 ارسال می کنیم تا جاسازی های متنی ایجاد شود.

کتابخانه vertexai.preview.language_models دارای چندین کلاس از جمله ChatModel، TextEmbedding، و TextGenerationModel است. در اینجا ما بر روی TextEmbeddingModel برای تولید کلمه embeddings تمرکز خواهیم کرد.

به عنوان اولین قدم، اجازه دهید کلاس‌های مناسب را از کتابخانه وارد کنیم.

from vertexai.preview.language_models import TextEmbeddingModel
import pandas as pd
import numpy as np

ما تابعی ایجاد خواهیم کرد که متن را می پذیرد و جاسازی های مرتبط را برمی گرداند. این تابع برای هر ردیف از یک Pandas DataFrame فراخوانی می شود.

def text_embedding(text) -> None:
    model = TextEmbeddingModel.from_pretrained("textembedding-gecko@001")
    embeddings = model.get_embeddings([text]) 
    return [embedding.values for embedding in embeddings]

در مرحله بعد تابعی را تعریف می کنیم که حاصل ضرب نقطه ای دو بردار را انجام می دهد و مقدار را برمی گرداند. هر چه مقدار بالاتر باشد، معنی نزدیکتر است.

def vector_similarity(vec1, vec2):
    return np.dot(np.squeeze(np.array(vec1)),np.squeeze(np.array(vec2)))

با فرض اینکه test.csv را دانلود کرده اید و فایل را در فهرست داده ها قرار داده اید، آن را در یک Pandas DataFrame بارگیری می کنیم.

df=pd.read_csv('./data/test.csv')

بعد، ستونی را که حاوی سوال است استخراج می کنیم و زیرمجموعه ای از DataFrame با ۱۰ سطر اول ایجاد می کنیم. می‌توانید این عدد را افزایش دهید تا متن بیشتری بارگیری شود، اما اجرای آن را کند می‌کند زیرا ما نقطه پایانی PALM 2 را برای هر ردیف فراخوانی می‌کنیم.

df=df[['text']]
df=df.head(10)

چاپ DataFrame 10 ردیف اول را نشان می دهد.

df

vertex ai palm semantic search 01

هدف ما بازیابی سوالی از این لیست است که معنایی مشابه درخواست ارسال شده توسط کاربر دارد.

5 راه آسان برای اجرای LLM به صورت محلی

بیایید PaLM 2 API را فراخوانی کنیم و خروجی را در ستون جدیدی که به DataFrame اضافه شده است ذخیره کنیم.

df=df.assign(token=(df["text"].apply(lambda x : text_embedding(x))))

خط بالا تابع text_embedding را برای هر ردیف برای فراخوانی API فراخوانی می کند و نتیجه را در ستون نشانه مرتبط با متن ذخیره می کند.

بیایید DataFrame جدید را چاپ کنیم تا بررسی کنیم که آیا بردارهای مرتبط به هر ردیف اضافه شده است یا خیر.

df

vertex ai palm semantic search 02

توجه کنید که نشانه ستون حاوی بردار مرتبط با متن مربوطه است.

وقتی سؤالی را جستجو می‌کنیم که معنای مشابهی با پرس و جوی ما دارد، یک حاصل ضرب نقطه‌ای از بردار مرتبط با پرس و جو را با هر بردار در DataFrame انجام می‌دهیم. هر کدام که بالاترین مقدار را داشته باشد، معنایی مشابه فرمان دارد.

سوال ۳ در DataFrame این است که “اتم چیست؟” بیایید عبارت جستجوی “Tell me about atom” را بفرستیم که به همین معنی است.

پیشنهاد پشته کد داغ اجرای جاوا را سرعت می بخشد

ابتدا باید با فراخوانی API، جاسازی‌های عبارت را ایجاد کنیم.

prompt = "Tell me about atom"
prompt_embedding=text_embedding(prompt)

سپس تابع vector_similarity را فراخوانی می کنیم تا حاصل ضرب نقطه ای بردارها را انجام داده و آن را به عنوان یک ردیف جدید در زیر شباهت ستون ذخیره کنیم.

vertex ai palm semantic search 03

همانطور که می بینید، ردیف ۳ دارای بالاترین مقدار ۰.۷۹ است، به این معنی که “اتم چیست؟” شبیه ترین معنی را به عبارت جستجوی ما دارد.

بیایید DataFrame را مرتب کنیم و متن مرتبط با بالاترین امتیاز شباهت را بازیابی کنیم.

df.nlargest(1,'similarity').iloc[0]['text']

vertex ai palm semantic search 04

در نهایت، بیایید عبارت “دلیل کهربایی شدن ماه چیست؟” را امتحان کنیم.

prompt = "what's the reason for the moon to become amber?"
prompt_embedding=text_embedding(prompt)
df["similarity"]=df["token"].apply(lambda x: vector_similarity(x,prompt_embedding[0]))
df.nlargest(1,'similarity').iloc[0]['text']

همانطور که در زیر نشان داده شده است، این اعلان سؤال را از ردیف ۸ برمی‌گرداند که این است: «چرا ماه نارنجی می‌شود؟»

vertex ai palm semantic search 05

در زیر کد کامل مرجع شما آمده است.

from vertexai.preview.language_models import TextEmbeddingModel
import pandas as pd
import numpy as np

def text_embedding(text) -> None:
    model = TextEmbeddingModel.from_pretrained("textembedding-gecko@001")
    embeddings = model.get_embeddings([text]) 
    return [embedding.values for embedding in embeddings]

def vector_similarity(vec1, vec2):
    return np.dot(np.squeeze(np.array(vec1)),np.squeeze(np.array(vec2)))

df=pd.read_csv('./data/test.csv')

df=df[['text']]
df=df.head(10)

df=df.assign(token=(df["text"].apply(lambda x : text_embedding(x))))

prompt = "Tell me about atom"
prompt_embedding=text_embedding(prompt)
df["similarity"]=df["token"].apply(lambda x: vector_similarity(x,prompt_embedding[0]))
df.nlargest(1,'similarity').iloc[0]['text']

prompt = "what's the reason for the moon to become amber?"
prompt_embedding=text_embedding(prompt)
df["similarity"]=df["token"].apply(lambda x: vector_similarity(x,prompt_embedding[0]))
df.nlargest(1,'similarity').iloc[0]['text']

این مینی‌سریال من در Google’s Palm API به پایان می‌رسد. ما تکمیل متن، تکمیل گپ و جستجوی مشابهت را با استفاده از مدل زبان بزرگ PalM 2 موجود در Google Cloud Vertex AI کاوش کردیم. a>.