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
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
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.
query_result[:5] memilih 5 elemen pertama dari daftar query_result dengan melakukan slicing.
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[0][:5] mengiris dan memilih lima karakter pertama dari elemen pertama daftar doc_result.
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.
Menyesuaikan dimensi
Namun demikian, Anda bisa mengurangi ukuran penyematan hingga 1024 dengan mengoperkan dimensi=1024.
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."
# Membuat hasil kueri dengan meng-embedding teks.
query_result = embeddings.embed_query(text)
# Memilih 5 item pertama dari hasil kueri.
query_result[:5]
# Mengembalikan panjang elemen pertama dari hasil dokumen.
len(doc_result[0])
1536
# 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
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 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.