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.
Pertama, instal langchain-openai dan atur variabel lingkungan yang diperlukan.
# File konfigurasi untuk mengelola API key sebagai variabel lingkunganfrom dotenv import load_dotenv# Memuat informasi API keyload_dotenv()
List of Supported Models
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]
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."
# 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 inenumerate(embedded_sentences):for j, other_sentence inenumerate(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.