Vektör Yerleştirmeleri için textembedding-gecko@003 komutunu kullanma

1. Giriş

Last Updated: 2024-04-08

Metin yerleştirme

Metin yerleştirme, metin verilerinin sayısal gösterimlere dönüştürülmesi sürecini ifade eder. Genellikle vektörler olan bu sayısal temsiller, bir metindeki kelimeler arasındaki semantik anlamı ve ilişkileri yakalar. Şöyle düşünün:

Metin, nüanslar ve belirsizliklerle dolu karmaşık bir dil gibidir.

Metin yerleştirme, bu dili bilgisayarların anlayabileceği ve işleyebileceği daha basit bir matematiksel biçime çevirir.

Metin yerleştirmenin avantajları

  • Verimli işlemeyi sağlar: Sayısal gösterimler, bilgisayarlar tarafından ham metne kıyasla çok daha hızlı işlenir. Bu, arama motorları, öneri sistemleri ve makine çevirisi gibi görevler için çok önemlidir.
  • Semantik anlamı yakalar: Yerleştirmeler, kelimelerin yalnızca gerçek anlamının ötesine geçer. Kelimeler arasındaki bağlamı ve ilişkileri yakalayarak daha ayrıntılı analizler yapılmasına olanak tanır.
  • Makine öğrenimi performansını artırır: Metin yerleştirmeleri, makine öğrenimi modellerinde özellik olarak kullanılabilir. Bu da duygu analizi, metin sınıflandırma ve konu modelleme gibi görevlerde daha iyi performans sağlar.

Metin yerleştirme kullanım alanları

Metin yerleştirmeleri, metni sayısal gösterimlere dönüştürerek doğal dil işlemede (NLP) çeşitli uygulamaların kilidini açar. Bazı önemli kullanım alanları şunlardır:

1. Arama Motorları ve Bilgi Erişimi:

Metin yerleştirmeleri, arama motorlarının sorguların arkasındaki anlamsal anlamı anlamasına ve tam anahtar kelimeler olmasa bile bunları alakalı dokümanlarla eşleştirmesine olanak tanır.

Arama motorları, bir arama sorgusunun yerleştirmelerini doküman yerleştirmeleriyle karşılaştırarak benzer konuları veya kavramları ele alan dokümanları belirleyebilir.

2. Öneri Sistemleri:

Öneri sistemleri, yorumlar, puanlar veya tarama geçmişi aracılığıyla ifade edilen kullanıcı davranışlarını ve tercihlerini analiz etmek için metin yerleştirmelerini kullanır.

Sistem daha sonra kullanıcının etkileşimde bulunduğu ürünlerin, makalelerin veya diğer içeriklerin yerleştirmelerini karşılaştırarak benzer öğeler önerebilir.

3. İntihal Algılama:

İki metin parçasının yerleştirmelerini karşılaştırmak, anlamsal yapılarındaki önemli benzerlikleri bularak olası intihalleri tespit etmeye yardımcı olabilir.

Bunlar yalnızca birkaç örnektir ve metin yerleştirme teknikleri geliştikçe olasılıklar artmaya devam eder. Bilgisayarlar, yerleştirmeler sayesinde dili daha iyi anladıkça gelecekte daha da yenilikçi uygulamalar bekleyebiliriz.

textembedding-gecko@003

Textembedding-gecko@003, Google Cloud Platform (GCP) tarafından Vertex AI ve yapay zeka araçları ve hizmetleri paketi aracılığıyla sunulan, önceden eğitilmiş bir metin yerleştirme modelinin belirli bir sürümüdür.

Ne oluşturacaksınız?

Bu codelab'de bir Python komut dosyası oluşturacaksınız. Bu komut dosyası:

  • textembedding-gecko@003'ü çağırmak ve metni metin yerleştirmelerine (vektörler) dönüştürmek için Vertex API'yi kullanın.
  • Metinlerden ve bunların vektörlerinden oluşan simüle edilmiş bir veritabanı oluşturun
  • Vektörleri karşılaştırarak simüle edilmiş vektör veritabanımızda bir sorgu gerçekleştirin ve en olası yanıtı alın.

Neler öğreneceksiniz?

  • GCP'de metin yerleştirme nasıl kullanılır?
  • textembedding-gecko@003 nasıl çağrılır?
  • Workbench'te çalıştırma
  • Komut dosyalarını yürütmek için Vertex AI Workbench'i kullanma

Gerekenler

  • Chrome'un son sürümü
  • Python bilgisi
  • Google Cloud projesi
  • Vertex AI - Workbench'e erişim

2. Hazırlanma

Vertex AI Workbench örneği oluşturma

  1. Google Cloud Console'daki proje seçici sayfasında bir Google Cloud projesi seçin veya oluşturun.
  1. Proje seçiciye gitme
  2. Google Cloud projeniz için faturalandırmanın etkinleştirildiğinden emin olun.
  3. Notebooks API'yi etkinleştirin.

Google Cloud Console, gcloud CLI veya Terraform'u kullanarak Vertex AI Workbench örneği oluşturabilirsiniz. Bu eğitimin amacı doğrultusunda, Google Cloud Console'u kullanarak oluşturacağız. Diğer yöntemler hakkında daha fazla bilgiyi burada bulabilirsiniz.

  1. Google Cloud Console'da, Vertex AI menüsünün Not Defterleri bölümünde bulunan Instances (Örnekler) sayfasına gidin ve Workbench'i tıklayın. 56c087d619c464dd.png
  2. Örnekler'e gidin.
  3. Yeni oluştur'u tıklayın. 381ff9b895e77641.png
  4. Örnek oluştur iletişim kutusundaki Ayrıntılar bölümünde, yeni örneğiniz için aşağıdaki bilgileri girin:

Name (Ad): Yeni örneğiniz için bir ad girin. Ad, bir harfle başlamalıdır; ardından en fazla 62 küçük harf, sayı veya kısa çizgi (-) gelmelidir ve kısa çizgiyle bitmemelidir.

Bölge ve Alt Bölge: Yeni örnek için bir bölge ve alt bölge seçin. En iyi ağ performansı için size coğrafi olarak en yakın bölgeyi seçin.

GPU yüklemenize gerek yoktur.

Ağ bölümünde aşağıdakileri sağlayın:

: Ağ seçeneklerini, mevcut projenizdeki bir ağı veya yapılandırılmışsa ana makine projesindeki bir Paylaşılan VPC ağını kullanacak şekilde ayarlayın. Ana makine projesinde Paylaşılan VPC kullanıyorsanız hizmet projesinden Notebooks Hizmet Aracısı'na Compute Ağı Kullanıcısı rolünü (roles/compute.networkUser) de vermeniz gerekir.

Ağ alanında: İstediğiniz ağı seçin. Ağda Özel Google Erişimi etkin olduğu veya ağ internete erişebildiği sürece bir VPC ağı seçebilirsiniz.

Alt ağ alanında: İstediğiniz alt ağı seçin. Varsayılan olanı seçebilirsiniz.

Örnek özelliklerinde varsayılanı (e2-standard-4) bırakabilirsiniz.

d47bdc2d7f516c46.png

  1. Oluştur'u tıklayın.

Vertex AI Workbench bir örnek oluşturur ve otomatik olarak başlatır. Örnek kullanıma hazır olduğunda Vertex AI Workbench, Open JupyterLab bağlantısını etkinleştirir. Bu sekmeyi tıklayın.

Python 3 not defteri oluşturma

  1. JupyterLab'de, Başlatıcı'daki Not Defteri bölümünde Python3 yazan Python logolu simgeyi tıklayın. e16bb118cd28256f.png
  2. Untitled (Başlıksız) adında ve ipynb uzantılı bir Jupyter not defteri oluşturulur. da9bd34cf307156c.png
  3. Sol taraftaki dosya tarayıcısı bölümünü kullanarak dosyayı yeniden adlandırabilir veya olduğu gibi bırakabilirsiniz.

Artık kodumuzu not defterine yerleştirmeye başlayabiliriz.

3. Gerekli kitaplıkları içe aktarma

Örnek oluşturulduktan ve JupyterLab açıldıktan sonra codelab'imiz için gerekli tüm kitaplıkları yüklememiz gerekir.

Gerekli bilgiler:

  1. numpy
  2. pandalar
  3. vertexai.language_models'dan TextEmbeddingInput, TextEmbeddingModel

Aşağıdaki kodu kopyalayıp bir hücreye yapıştırın:

from vertexai.language_models import TextEmbeddingInput, TextEmbeddingModel

import numpy as np
import pandas as pd

URL şuna benzer olacaktır:

6852d323eedcac93.png

4. Simüle edilmiş bir vektör veritabanı oluşturma

Kodumuzu test etmek için metinlerden ve gecko@003 metin yerleştirme modeli kullanılarak çevrilen ilgili vektörlerinden oluşan bir veritabanı oluşturacağız.

Amaç, kullanıcıların bir metni arayıp vektöre çevirmesi, veritabanımızda arayıp en yakın sonucu döndürmesidir.

Vektör veritabanımızda 3 kayıt olacak. Veritabanını şu şekilde oluşturacağız:

Aşağıdaki kodu kopyalayıp yeni bir hücreye yapıştırın.

DOCUMENT1 = {
    "title": "Operating the Climate Control System",
    "content": "Your Googlecar has a climate control system that allows you to adjust the temperature and airflow in the car. To operate the climate control system, use the buttons and knobs located on the center console.  Temperature: The temperature knob controls the temperature inside the car. Turn the knob clockwise to increase the temperature or counterclockwise to decrease the temperature. Airflow: The airflow knob controls the amount of airflow inside the car. Turn the knob clockwise to increase the airflow or counterclockwise to decrease the airflow. Fan speed: The fan speed knob controls the speed of the fan. Turn the knob clockwise to increase the fan speed or counterclockwise to decrease the fan speed. Mode: The mode button allows you to select the desired mode. The available modes are: Auto: The car will automatically adjust the temperature and airflow to maintain a comfortable level. Cool: The car will blow cool air into the car. Heat: The car will blow warm air into the car. Defrost: The car will blow warm air onto the windshield to defrost it."}

DOCUMENT2 = {
    "title": "Touchscreen",
    "content": "Your Googlecar has a large touchscreen display that provides access to a variety of features, including navigation, entertainment, and climate control. To use the touchscreen display, simply touch the desired icon.  For example, you can touch the \"Navigation\" icon to get directions to your destination or touch the \"Music\" icon to play your favorite songs."}

DOCUMENT3 = {
    "title": "Shifting Gears",
    "content": "Your Googlecar has an automatic transmission. To shift gears, simply move the shift lever to the desired position.  Park: This position is used when you are parked. The wheels are locked and the car cannot move. Reverse: This position is used to back up. Neutral: This position is used when you are stopped at a light or in traffic. The car is not in gear and will not move unless you press the gas pedal. Drive: This position is used to drive forward. Low: This position is used for driving in snow or other slippery conditions."}

documents = [DOCUMENT1, DOCUMENT2, DOCUMENT3]

df_initial_db = pd.DataFrame(documents)
df_initial_db.columns = ['Title', 'Text']
df_initial_db

Bu durumda, aşağıdaki gibi bir sonuç elde edilir:

26baa3b876c0605d.png

Kodu analiz edelim

DOCUMENT1, DOCUMENT2 ve DOCUMENT3 değişkenlerinde, başlıkları ve içerikleriyle dokümanları taklit edecek bir sözlük saklıyoruz. Bu "dokümanlar", Google tarafından üretilen bir arabanın simüle edilmiş kılavuzuna atıfta bulunuyor.

Bir sonraki satırda, bu 3 belgeden (sözlük) bir liste oluşturuyoruz.

documents = [DOCUMENT1, DOCUMENT2, DOCUMENT3]

Son olarak, pandas'ı kullanarak bu listeden df_initial_db adlı bir DataFrame oluştururuz.

df_initial_db = pd.DataFrame(documents)
df_initial_db.columns = ['Title', 'Text']
df_initial_db

5. Metin yerleştirmeleri oluşturma

Şimdi, belgelerden oluşan simüle edilmiş veritabanımızdaki her kayıt için gecko@003 modelini kullanarak bir metin yerleştirmesi elde edeceğiz.

Aşağıdaki kodu kopyalayıp yeni bir hücreye yapıştırın:

def embed_fn(df_input):
    list_embedded_values = []
    for index, row in df_input.iterrows():        
        model = TextEmbeddingModel.from_pretrained("textembedding-gecko@003")
        embeddings = model.get_embeddings([(row['Text'])])        
        list_embedded_values.append(embeddings[0].values)
    df_input['Embedded text'] = list_embedded_values
    return df_input        
                                           
df_embedded_values_db = embed_fn(df_initial_db)
df_embedded_values_db      

Bu durumda, aşağıdaki gibi bir sonuç elde edilir:

4c4af091c7a82861.png

Kodu analiz edelim

Yerleştirme işlemini gerçekleştirmek için metni içeren bir pandas DataFrame'i giriş olarak alacak embed_fn adlı bir işlev tanımladık. Ardından işlev, vektör olarak kodlanmış metni döndürür.

def embed_fn(df_input):
    list_embedded_values = []
    for index, row in df_input.iterrows():        
        model = TextEmbeddingModel.from_pretrained("textembedding-gecko@003")
        embeddings = model.get_embeddings([(row['Text'])])        
        list_embedded_values.append(embeddings[0].values)
    df_input['Embedded text'] = list_embedded_values
    return df_input             

Her satırın kodlanmış metnini list_embedded_values adlı listede saklayıp ekleyeceğiz.

Pandas'taki iterrows yöntemini kullanarak DataFrame'deki her satırı yineleyebilir ve Text sütunundaki (simüle edilmiş veritabanımızdaki manuel bilgileri içeren) değerleri alabiliriz.

Gecko@003 modelini kullanarak normal metin göndermek ve vektörünü döndürmek için TextEmbeddingModel.from_pretrained işlevini çağırarak kullanılacak modeli ayarladığımız değişken modelini ilk kullanıma hazırlarız.

model = TextEmbeddingModel.from_pretrained("textembedding-gecko@003")
embeddings = model.get_embeddings([(row['Text'])])                     

Ardından, değişken yerleştirmelerde model.get_embeddings işlevi aracılığıyla gönderdiğimiz metnin vektörünü yakalarız.

İşlevin sonunda, veri çerçevesinde Embedded text (Yerleştirilmiş metin) adlı yeni bir sütun oluştururuz. Bu sütun, gecko@003 modeline göre oluşturulan vektörlerin listesini içerir.

df_input['Embedded text'] = list_embedded_values
return df_input             

Son olarak, df_embedded_values_db değişkeninde, simüle edilmiş veritabanındaki orijinal verilerimizi içeren DataFrame'in yanı sıra her satır için vektör listesini içeren yeni bir sütunu yakalıyoruz.

df_embedded_values_db = embed_fn(df_initial_db)
df_embedded_values_db      

6. Vektör veritabanına soru sorma

Veritabanımız artık metinleri ve bunların vektörlerini içerdiğinden soru sormaya ve yanıt bulmak için veritabanımıza sorgu göndermeye devam edebiliriz.

Bunun için aşağıdaki kodu kopyalayıp yeni bir hücreye yapıştırın:

question='How do you shift gears in the Google car?'
model = TextEmbeddingModel.from_pretrained("textembedding-gecko@003")
embeddings = model.get_embeddings([(question)])        
text_to_search=embeddings[0].values
len(text_to_search)

Sonuç şöyle görünür:

6b7cf9b08e3b4573.png

Kodu analiz edelim

Önceki adımdaki işlevde olduğu gibi, önce soru değişkenini veritabanımıza sormak istediğimiz soruyla başlatırız.

question='How do you shift gears in the Google car?'

Ardından, model değişkeninde TextEmbeddingModel.from_pretrained işlevi aracılığıyla kullanmak istediğimiz modeli (bu örnekte gecko@003 modeli) ayarlıyoruz.

model = TextEmbeddingModel.from_pretrained("textembedding-gecko@003")

Yerleştirmeler değişkeninde, model.get_embeddings işlevini çağırır ve vektöre dönüştürülecek metni (bu örnekte sorulacak soruyu) iletiriz.

embeddings = model.get_embeddings([(question)])        

Son olarak, text_to_search değişkeni, sorudan çevrilen vektörlerin listesini tutar.

Vektörün uzunluğunu yalnızca referans olarak yazdırırız.

text_to_search=embeddings[0].values
len(text_to_search)

7. Vektörleri karşılaştırma

Artık simüle edilmiş veritabanımızda bir vektör listesi ve vektöre dönüştürülmüş bir soru var. Bu sayede, sorunun vektörünü veritabanımızdaki tüm vektörlerle karşılaştırarak sorumuzu daha doğru bir şekilde yanıtlamaya en yakın olanı bulabiliriz.

Bunu yapmak için sorunun vektörü ile veritabanının her vektörü arasındaki mesafeyi ölçeriz. Vektörler arasındaki mesafeleri ölçmek için birden fazla teknik vardır. Bu özel kod laboratuvarında Öklid uzaklığı veya L2 normunu kullanacağız.

73ea8635c4570bea.png

Python'da bunu yapmak için numpy işlevinden yararlanabiliriz.

Aşağıdaki kodu kopyalayıp yeni bir hücreye yapıştırın:

list_embedded_text_from_db = df_embedded_values_db['Embedded text']
shortest_distance=1
for position, embedded_value in enumerate(list_embedded_text_from_db):
    distance=np.linalg.norm((np.array(embedded_value) - np.array(text_to_search)), ord = 2)
    print(distance)
    if distance<shortest_distance:
        shortest_distance=distance
        shortest_position=position
        
print(f'The shortest distance is {shortest_distance} and the position of that value is {shortest_position}')

Sonuç şu şekilde görünmelidir:

b70563b50ea86668.png

Kodu analiz edelim

Öncelikle yerleştirilmiş metni veya veritabanımızın vektörlerini içeren sütunu listeye dönüştürüp list_embedded_text_from_db adlı listede saklayarak işe başlıyoruz.

Ayrıca, gerçek en kısa mesafeyi bulana kadar güncellemeye devam etmek için shortest_distance değişkenini 1 olarak başlattık.

list_embedded_text_from_db = df_embedded_values_db['Embedded text']
shortest_distance=1

Ardından, bir for döngüsü kullanarak yineleme yapar ve sorudan gelen vektör ile veritabanındaki her vektör arasındaki mesafeyi alırız.

numpy linalg.norm işlevini kullanarak aralarındaki mesafeyi hesaplarız.

Hesaplanan mesafe, shortest_distance değişkenindeki mesafeden kısaysa hesaplanan mesafe bu değişkene ayarlanır.

Ardından, en kısa mesafeyi ve bu mesafenin bulunduğu listedeki konumu yakalarız. shortest_distance ve shortest_position değişkenlerinde.

for position, embedded_value in enumerate(list_embedded_text_from_db):
    distance=np.linalg.norm((np.array(embedded_value) - np.array(text_to_search)), ord = 2)
    print(distance)
    if distance<shortest_distance:
        shortest_distance=distance
        shortest_position=position

8. Sonuçlar

Soru ile veritabanı arasındaki en kısa mesafeyi tutan vektörün listedeki konumunu bildiğimiz için sonuçları yazdırabiliriz.

Aşağıdaki kodu kopyalayıp yeni bir hücreye yapıştırın:

print("Your question was:\n "+question+ " \nAnd our answer is:\n "+
      df_embedded_values_db.at[shortest_position, 'Title']+": "+
      df_embedded_values_db.at[shortest_position, 'Text'])

Komutu yürüttükten sonra aşağıdakine benzer bir sonuç alırsınız:

7a0e429171a19afe.png

9. Tebrikler

Tebrikler, textembedding-gecko@003 modelini kullanarak gerçek bir kullanım alanında ilk uygulamanızı başarıyla oluşturdunuz.

Metin yerleştirmelerinin temellerini ve GCP Workbench'te gecko003 modelini nasıl kullanacağınızı öğrendiniz.

Artık bilgilerinizi daha fazla kullanım alanına uygulamak için gereken temel adımları biliyorsunuz.

Yapabilecekleriniz

Şu codelab'lere göz atın:

Referans belgeler