01. Open Ai Embeddings

01. OpenAIEmbeddings

OpenAIEmbeddings

Penyematan dokumen (Embedding) adalah proses mengubah konten dokumen menjadi vektor numerik.

Proses ini mengkuantifikasi makna dokumen dan dapat digunakan untuk berbagai tugas pemrosesan bahasa alami. Model bahasa yang sudah dilatih sebelumnya termasuk BERT dan GPT, yang menangkap informasi kontekstual untuk menyandikan makna dokumen.

Penyematan dokumen memasukkan dokumen yang telah ditokenisasi ke dalam model untuk menghasilkan vektor penyematan, yang kemudian dirata-ratakan untuk membuat vektor dari keseluruhan dokumen. Vektor ini dapat digunakan untuk klasifikasi dokumen, analisis sentimen, menghitung kemiripan antar dokumen, dan banyak lagi.

Pelajari lebih lanjut (opens in a new tab)

Setting

Pertama, instal langchain-openai dan atur variabel lingkungan yang diperlukan.

Python
# File konfigurasi untuk mengelola API key sebagai variabel lingkungan
from dotenv import load_dotenv
 
# Memuat informasi API key
load_dotenv()

List of Supported Models

MODELPAGES PER DOLLARPERFORMANCE ON MTEB EVALMAX INPUT
text-embedding-3-small62,50062.3%8191
text-embedding-3-large9,61564.6%8191
text-embedding-ada-00212,50061.0%8191
Python
from langchain_openai import OpenAIEmbeddings
 
# Membuat embedding menggunakan model "text-embedding-3-large" dari OpenAI.
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
Python
text = "Ini adalah kalimat contoh untuk menguji embedding."

Query embeddings (Penyematan query)

embeddings.embed_query(text) adalah fungsi yang mengubah teks yang diberikan menjadi vektor penyematan.

Fungsi ini dapat digunakan untuk memetakan teks ke ruang vektor untuk menemukan teks yang mirip secara semantik atau untuk menghitung kemiripan antar teks.

Python
# Membuat hasil kueri dengan meng-embedding teks.
query_result = embeddings.embed_query(text)

query_result[:5] memilih 5 elemen pertama dari daftar query_result dengan melakukan slicing.

Python
# Memilih 5 item pertama dari hasil kueri.
query_result[:5]
Output
[0.02264428697526455, 0.01525240857154131, -0.008504921570420265, 0.016455985605716705, 0.011023912578821182]

Document embeddings (Penyematan Dokument)

Gunakan fungsi embeddings.embed_documents() untuk menyematkan dokumen teks.

  • Berikan satu dokumen sebagai daftar ke fungsi penyematan dengan memberikan [text] sebagai argumen.
  • Tetapkan vektor penyematan yang dikembalikan sebagai hasil pemanggilan fungsi ke variabel doc_result.
Python
doc_result = embeddings.embed_documents(
    [text]
)  # Membuat vektor dokumen dengan meng-embedding teks.

doc_result[0][:5] mengiris dan memilih lima karakter pertama dari elemen pertama daftar doc_result.

Python
# Memilih 5 item pertama dari elemen pertama hasil dokumen.
doc_result[0][:5]
Output
[0.02264428697526455, 0.01525240857154131, -0.008504921570420265, 0.016455985605716705, 0.011023912578821182]

Dimenstion spesification

Kelas model text-embedding-3 memungkinkan Anda menentukan ukuran embedding yang dikembalikan.

Misalnya, secara default, text-embedding-3-small mengembalikan penyematan dengan dimensi 1536.

Python
# Mengembalikan panjang elemen pertama dari hasil dokumen.
len(doc_result[0])
Output
1536

Menyesuaikan dimensi

Namun demikian, Anda bisa mengurangi ukuran penyematan hingga 1024 dengan mengoperkan dimensi=1024.

Python
# Menginisialisasi objek yang membuat embedding 1024 dimensi menggunakan model "text-embedding-3-small" dari OpenAI.
embeddings_1024 = OpenAIEmbeddings(model="text-embedding-3-small", dimensions=1024)
Python
# Membuat embedding dari teks yang diberikan dan mengembalikan panjang vektor embedding pertama.
len(embeddings_1024.embed_documents([text])[0])
Output
1024

Menghitung kesamaan

Python
sentence1 = "Halo? Senang bertemu dengan Anda."
sentence2 = "Halo? Senang bertemu dengan Anda!"
sentence3 = "Halo? Senang bertemu denganmu"
sentence4 = "Hi, nice to meet you."
sentence5 = "I like to eat apples."
Python
from sklearn.metrics.pairwise import cosine_similarity
 
sentences = [sentence1, sentence2, sentence3, sentence4, sentence5]
embedded_sentences = embeddings_1024.embed_documents(sentences)
Python
def similarity(a, b):
    return cosine_similarity([a], [b])[0][0]
Python
# sentence1 = "Halo? Senang bertemu dengan Anda!"
# sentence2 = "Halo? Senang bertemu denganmu"
# sentence3 = "Hi, nice to meet you."
# sentence4 = "I like to eat apples."
 
for i, sentence in enumerate(embedded_sentences):
    for j, other_sentence in enumerate(embedded_sentences):
        if i < j:
            print(
                f"[Kesamaan {similarity(sentence, other_sentence):.4f}] {sentences[i]} \t <=====> \t {sentences[j]}"
            )
 
Output
[Kesamaan 0.9730] Halo? Senang bertemu dengan Anda.      <=====>         Halo? Senang bertemu dengan Anda!
[Kesamaan 0.9636] Halo? Senang bertemu dengan Anda.      <=====>         Halo? Senang bertemu denganmu
[Kesamaan 0.4673] Halo? Senang bertemu dengan Anda.      <=====>         Hi, nice to meet you.
[Kesamaan 0.1162] Halo? Senang bertemu dengan Anda.      <=====>         I like to eat apples.
[Kesamaan 0.9464] Halo? Senang bertemu dengan Anda!      <=====>         Halo? Senang bertemu denganmu
[Kesamaan 0.4508] Halo? Senang bertemu dengan Anda!      <=====>         Hi, nice to meet you.
[Kesamaan 0.1124] Halo? Senang bertemu dengan Anda!      <=====>         I like to eat apples.
[Kesamaan 0.4431] Halo? Senang bertemu denganmu          <=====>         Hi, nice to meet you.
[Kesamaan 0.1247] Halo? Senang bertemu denganmu          <=====>         I like to eat apples.
[Kesamaan 0.2250] Hi, nice to meet you.          <=====>         I like to eat apples.