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
- Google Cloud Console'daki proje seçici sayfasında bir Google Cloud projesi seçin veya oluşturun.
- Proje seçiciye gitme
- Google Cloud projeniz için faturalandırmanın etkinleştirildiğinden emin olun.
- 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.
- 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.

- Örnekler'e gidin.
- Yeni oluştur'u tıklayın.

- Ö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ğ: 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.

- 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
- JupyterLab'de, Başlatıcı'daki Not Defteri bölümünde Python3 yazan Python logolu simgeyi tıklayın.

- Untitled (Başlıksız) adında ve ipynb uzantılı bir Jupyter not defteri oluşturulur.

- 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:
- numpy
- pandalar
- 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:

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:

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:

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:

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.

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:

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:

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: