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.
# File konfigurasi untuk mengelola API key sebagai variabel lingkungan
from dotenv import load_dotenv
# Memuat informasi API key
load_dotenv()
List of Supported Models
MODEL | PAGES PER DOLLAR | PERFORMANCE ON MTEB EVAL | MAX INPUT |
---|---|---|---|
text-embedding-3-small | 62,500 | 62.3% | 8191 |
text-embedding-3-large | 9,615 | 64.6% | 8191 |
text-embedding-ada-002 | 12,500 | 61.0% | 8191 |
from langchain_openai import OpenAIEmbeddings
# Membuat embedding menggunakan model "text-embedding-3-large" dari OpenAI.
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
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.
# 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.
# Memilih 5 item pertama dari hasil kueri.
query_result[:5]
[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
.
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.
# Memilih 5 item pertama dari elemen pertama hasil dokumen.
doc_result[0][:5]
[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.
# Mengembalikan panjang elemen pertama dari hasil dokumen.
len(doc_result[0])
1536
Menyesuaikan dimensi
Namun demikian, Anda bisa mengurangi ukuran penyematan hingga 1024 dengan mengoperkan dimensi=1024.
# 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)
# Membuat embedding dari teks yang diberikan dan mengembalikan panjang vektor embedding pertama.
len(embeddings_1024.embed_documents([text])[0])
1024
Menghitung kesamaan
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."
from sklearn.metrics.pairwise import cosine_similarity
sentences = [sentence1, sentence2, sentence3, sentence4, sentence5]
embedded_sentences = embeddings_1024.embed_documents(sentences)
def similarity(a, b):
return cosine_similarity([a], [b])[0][0]
# 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]}"
)
[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.