Terhubung dengan kami

Alat AI 101

Melacak Model Bahasa Besar (LLM) dengan MLflow: Panduan Lengkap

mm
Evaluasi Panduan MLflow LLM

Seiring dengan berkembangnya kompleksitas dan skala Model Bahasa Besar (LLM), pelacakan performa, eksperimen, dan penerapannya menjadi semakin menantang. Di sinilah MLflow berperan – menyediakan platform komprehensif untuk mengelola seluruh siklus hidup model pembelajaran mesin, termasuk LLM.

Dalam panduan mendalam ini, kami akan membahas cara memanfaatkan MLflow untuk melacak, mengevaluasi, dan menerapkan LLM. Kami akan membahas semuanya, mulai dari menyiapkan lingkungan hingga teknik evaluasi lanjutan, dengan banyak contoh kode dan praktik terbaik.

Fungsionalitas MLflow dalam Model Bahasa Besar (LLM)

aliran ml Telah menjadi alat penting dalam komunitas pembelajaran mesin dan ilmu data, terutama untuk mengelola siklus hidup model pembelajaran mesin. Dalam hal Model Bahasa Besar (LLM), MLflow menawarkan serangkaian alat canggih yang secara signifikan menyederhanakan proses pengembangan, pelacakan, evaluasi, dan penerapan model-model ini. Berikut ikhtisar tentang bagaimana MLflow berfungsi dalam ranah LLM dan manfaat yang diberikannya bagi para insinyur dan ilmuwan data.

Pelajari tentang komponen inti MLflow

Melacak dan Mengelola Interaksi LLM

Sistem pelacakan LLM MLflow merupakan peningkatan dari kemampuan pelacakan yang ada, disesuaikan dengan kebutuhan unik LLM. Hal ini memungkinkan pelacakan interaksi model secara komprehensif, termasuk aspek-aspek utama berikut:

  • Parameter Teknis: Mencatat pasangan nilai kunci yang merinci parameter masukan untuk LLM, seperti parameter khusus model top_k dan temperatureIni menyediakan konteks dan konfigurasi untuk setiap proses, memastikan semua aspek konfigurasi model tertangkap.
  • Metrik: Ukuran kuantitatif yang memberikan wawasan tentang kinerja dan keakuratan LLM. Ini dapat diperbarui secara dinamis seiring berjalannya proses, menawarkan wawasan real-time atau pasca-proses.
  • Prediksi: Menangkap masukan yang dikirim ke LLM dan keluaran terkait, yang disimpan sebagai artefak dalam format terstruktur untuk memudahkan pengambilan dan analisis.
  • Artefak:Di luar prediksi, MLflow dapat menyimpan berbagai file keluaran seperti visualisasi, model serial, dan file data terstruktur, yang memungkinkan dokumentasi dan analisis terperinci tentang kinerja model.

Pendekatan terstruktur ini memastikan bahwa semua interaksi dengan LLM dicatat dengan cermat, memberikan garis keturunan yang komprehensif dan pelacakan kualitas untuk model penghasil teks.

Evaluasi LLM

Mengevaluasi LLM menghadirkan tantangan unik karena sifat generatifnya dan kurangnya kebenaran dasar. MLflow menyederhanakannya dengan alat evaluasi khusus yang dirancang untuk LLM. Fitur utama meliputi:

  • Evaluasi Model Serbaguna: Mendukung evaluasi berbagai jenis LLM, apakah itu model pyfunc MLflow, URI yang menunjuk ke model MLflow terdaftar, atau callable Python apa pun yang mewakili model Anda.
  • Metrik Komprehensif: Menawarkan serangkaian metrik yang disesuaikan untuk evaluasi LLM, termasuk metrik yang bergantung pada model SaaS (misalnya, relevansi jawaban) dan metrik berbasis fungsi (misalnya, ROUGE, Flesch Kincaid).
  • Koleksi Metrik yang Telah Ditentukan Sebelumnya: Bergantung pada kasus penggunaan, seperti menjawab pertanyaan atau meringkas teks, MLflow menyediakan metrik yang telah ditentukan sebelumnya untuk menyederhanakan proses evaluasi.
  • Pembuatan Metrik Khusus: Memungkinkan pengguna untuk menentukan dan menerapkan metrik khusus untuk memenuhi kebutuhan evaluasi tertentu, meningkatkan fleksibilitas dan kedalaman evaluasi model.
  • Evaluasi dengan Kumpulan Data Statis: Memungkinkan evaluasi kumpulan data statis tanpa menentukan model, yang berguna untuk penilaian cepat tanpa menjalankan kembali inferensi model.

Penerapan dan Integrasi

MLflow juga mendukung penerapan dan integrasi LLM yang lancar:

  • Server Penerapan MLflow: Bertindak sebagai antarmuka terpadu untuk berinteraksi dengan beberapa penyedia LLM. Ini menyederhanakan integrasi, mengelola kredensial dengan aman, dan menawarkan pengalaman API yang konsisten. Server ini mendukung berbagai model dasar dari vendor SaaS populer serta model yang dihosting sendiri.
  • Titik Akhir Terpadu: Memfasilitasi peralihan yang mudah antar penyedia tanpa perubahan kode, meminimalkan waktu henti, dan meningkatkan fleksibilitas.
  • Tampilan Hasil Terintegrasi: Memberikan hasil evaluasi komprehensif, yang dapat diakses langsung dalam kode atau melalui MLflow UI untuk analisis mendetail.

MLflow adalah rangkaian alat yang komprehensif dan integrasi menjadikannya aset yang sangat berharga bagi para insinyur dan ilmuwan data yang bekerja dengan model NLP tingkat lanjut.

Menyiapkan Lingkungan Anda

Sebelum kita mulai melacak LLM dengan MLflow, mari kita siapkan lingkungan pengembangan kita. Kita perlu menginstal MLflow dan beberapa pustaka penting lainnya:

pip install mlflow>=2.8.1
pip install openai
pip install chromadb==0.4.15
pip install langchain==0.0.348
pip install tiktoken
pip install 'mlflow[genai]'
pip install databricks-sdk --upgrade

Setelah instalasi, sebaiknya mulai ulang lingkungan Python Anda untuk memastikan semua pustaka telah dimuat dengan benar. Di Jupyter Notebook, Anda dapat menggunakan:

import mlflow
import chromadb

print(f"MLflow version: {mlflow.__version__}")
print(f"ChromaDB version: {chromadb.__version__}")

Ini akan mengonfirmasi versi pustaka utama yang akan kita gunakan.

Memahami Kemampuan Pelacakan LLM MLflow

Sistem pelacakan LLM MLflow dikembangkan berdasarkan kemampuan pelacakan yang sudah ada, dengan menambahkan fitur-fitur yang dirancang khusus untuk aspek-aspek unik LLM. Mari kita uraikan komponen-komponen utamanya:

Proses dan Eksperimen

Di MLflow, "pengjalanan" mewakili satu eksekusi kode model Anda, sedangkan "eksperimen" adalah kumpulan eksekusi terkait. Untuk LLM, proses mungkin mewakili satu kueri atau sekumpulan perintah yang diproses oleh model.

Komponen Pelacakan Utama

  1. Parameter Teknis: Ini adalah konfigurasi masukan untuk LLM Anda, seperti suhu, top_k, atau max_tokens. Anda dapat mencatatnya menggunakan mlflow.log_param() or mlflow.log_params().
  2. Metrik: Ukuran kuantitatif kinerja LLM Anda, seperti akurasi, latensi, atau skor khusus. Gunakan mlflow.log_metric() or mlflow.log_metrics() untuk melacak ini.
  3. Prediksi:Untuk LLM, sangat penting untuk mencatat perintah input dan output model. MLflow menyimpan ini sebagai artefak dalam format CSV menggunakan mlflow.log_table().
  4. Artefak: File atau data tambahan apa pun yang terkait dengan proses LLM Anda, seperti pos pemeriksaan model, visualisasi, atau sampel kumpulan data. Menggunakan mlflow.log_artifact() untuk menyimpan ini.

Mari kita lihat contoh dasar pencatatan proses LLM:

Contoh ini menunjukkan parameter logging, metrik, dan input/output sebagai artefak tabel.

import mlflow
import openai

def query_llm(prompt, max_tokens=100):
    response = openai.Completion.create(
        engine="text-davinci-002",
        prompt=prompt,
        max_tokens=max_tokens
    )
    return response.choices[0].text.strip()

with mlflow.start_run():
    prompt = "Explain the concept of machine learning in simple terms."
    
    # Log parameters
    mlflow.log_param("model", "text-davinci-002")
    mlflow.log_param("max_tokens", 100)
    
    # Query the LLM and log the result
    result = query_llm(prompt)
    mlflow.log_metric("response_length", len(result))
    
    # Log the prompt and response
    mlflow.log_table("prompt_responses", {"prompt": [prompt], "response": [result]})
    
    print(f"Response: {result}")

Menyebarkan LLM dengan MLflow

MLflow menyediakan kemampuan canggih untuk menerapkan LLM, sehingga memudahkan Anda untuk menyajikan model Anda di lingkungan produksi. Mari kita pelajari cara menerapkan LLM menggunakan fitur-fitur penerapan MLflow.

Membuat Titik Akhir

Pertama, kita akan membuat titik akhir untuk LLM kita menggunakan klien penerapan MLflow:

import mlflow
from mlflow.deployments import get_deploy_client

# Initialize the deployment client
client = get_deploy_client("databricks")

# Define the endpoint configuration
endpoint_name = "llm-endpoint"
endpoint_config = {
    "served_entities": [{
        "name": "gpt-model",
        "external_model": {
            "name": "gpt-3.5-turbo",
            "provider": "openai",
            "task": "llm/v1/completions",
            "openai_config": {
                "openai_api_type": "azure",
                "openai_api_key": "{{secrets/scope/openai_api_key}}",
                "openai_api_base": "{{secrets/scope/openai_api_base}}",
                "openai_deployment_name": "gpt-35-turbo",
                "openai_api_version": "2023-05-15",
            },
        },
    }],
}

# Create the endpoint
client.create_endpoint(name=endpoint_name, config=endpoint_config)

Kode ini menyiapkan titik akhir untuk model GPT-3.5-turbo menggunakan Azure OpenAI. Perhatikan penggunaan rahasia Databricks untuk manajemen kunci API yang aman.

Menguji Titik Akhir

Setelah titik akhir dibuat, kita dapat mengujinya:

<div class="relative flex flex-col rounded-lg">

response = client.predict(
endpoint=endpoint_name,
inputs={"prompt": "Explain the concept of neural networks briefly.","max_tokens": 100,},)

print(response)

Ini akan mengirimkan prompt ke model yang kami terapkan dan mengembalikan respons yang dihasilkan.

Mengevaluasi LLM dengan MLflow

Evaluasi sangat penting untuk memahami kinerja dan perilaku LLM Anda. MLflow menyediakan alat komprehensif untuk mengevaluasi LLM, termasuk metrik bawaan dan khusus.

Mempersiapkan LLM Anda untuk Evaluasi

Untuk mengevaluasi LLM Anda dengan mlflow.evaluate(), model Anda harus dalam salah satu bentuk berikut:

  1. An mlflow.pyfunc.PyFuncModel instance atau URI yang menunjuk ke model MLflow yang dicatat.
  2. Fungsi Python yang mengambil input string dan menghasilkan string tunggal.
  3. URI titik akhir Penerapan MLflow.
  4. set model=None dan memasukkan keluaran model dalam data evaluasi.

Mari kita lihat contoh menggunakan model MLflow yang dicatat:

import mlflow
import openai

with mlflow.start_run():
    system_prompt = "Answer the following question concisely."
    logged_model_info = mlflow.openai.log_model(
        model="gpt-3.5-turbo",
        task=openai.chat.completions,
        artifact_path="model",
        messages=[
            {"role": "system", "content": system_prompt},
            {"role": "user", "content": "{question}"},
        ],
    )

# Prepare evaluation data
eval_data = pd.DataFrame({
    "question": ["What is machine learning?", "Explain neural networks."],
    "ground_truth": [
        "Machine learning is a subset of AI that enables systems to learn and improve from experience without explicit programming.",
        "Neural networks are computing systems inspired by biological neural networks, consisting of interconnected nodes that process and transmit information."
    ]
})

# Evaluate the model
results = mlflow.evaluate(
    logged_model_info.model_uri,
    eval_data,
    targets="ground_truth",
    model_type="question-answering",
)

print(f"Evaluation metrics: {results.metrics}")

Contoh ini mencatat model OpenAI, menyiapkan data evaluasi, lalu mengevaluasi model menggunakan metrik bawaan MLflow untuk tugas menjawab pertanyaan.

Metrik Evaluasi Khusus

MLflow memungkinkan Anda menentukan metrik khusus untuk evaluasi LLM. Berikut contoh pembuatan metrik khusus untuk mengevaluasi profesionalisme respons:

from mlflow.metrics.genai import EvaluationExample, make_genai_metric

professionalism = make_genai_metric(
    name="professionalism",
    definition="Measure of formal and appropriate communication style.",
    grading_prompt=(
        "Score the professionalism of the answer on a scale of 0-4:\n"
        "0: Extremely casual or inappropriate\n"
        "1: Casual but respectful\n"
        "2: Moderately formal\n"
        "3: Professional and appropriate\n"
        "4: Highly formal and expertly crafted"
    ),
    examples=[
        EvaluationExample(
            input="What is MLflow?",
            output="MLflow is like your friendly neighborhood toolkit for managing ML projects. It's super cool!",
            score=1,
            justification="The response is casual and uses informal language."
        ),
        EvaluationExample(
            input="What is MLflow?",
            output="MLflow is an open-source platform for the machine learning lifecycle, including experimentation, reproducibility, and deployment.",
            score=4,
            justification="The response is formal, concise, and professionally worded."
        )
    ],
    model="openai:/gpt-3.5-turbo-16k",
    parameters={"temperature": 0.0},
    aggregations=["mean", "variance"],
    greater_is_better=True,
)

# Use the custom metric in evaluation
results = mlflow.evaluate(
    logged_model_info.model_uri,
    eval_data,
    targets="ground_truth",
    model_type="question-answering",
    extra_metrics=[professionalism]
)

print(f"Professionalism score: {results.metrics['professionalism_mean']}")

Metrik khusus ini menggunakan GPT-3.5-turbo untuk menilai profesionalisme respons, yang menunjukkan bagaimana Anda dapat memanfaatkan LLM itu sendiri untuk evaluasi.

Teknik Evaluasi LLM Tingkat Lanjut

Seiring dengan semakin canggihnya LLM, teknik evaluasinya pun semakin canggih. Mari kita jelajahi beberapa metode evaluasi lanjutan menggunakan MLflow.

Evaluasi Retrieval-Augmented Generation (RAG).

Sistem RAG menggabungkan kekuatan model berbasis pengambilan dan model generatif. Mengevaluasi sistem RAG memerlukan penilaian komponen pengambilan dan pembangkitan. Berikut cara Anda dapat menyiapkan sistem RAG dan mengevaluasinya menggunakan MLflow:

from langchain.document_loaders import WebBaseLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI

# Load and preprocess documents
loader = WebBaseLoader(["https://mlflow.org/docs/latest/index.html"])
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(documents)

# Create vector store
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(texts, embeddings)

# Create RAG chain
llm = OpenAI(temperature=0)
qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=vectorstore.as_retriever(),
    return_source_documents=True
)

# Evaluation function
def evaluate_rag(question):
    result = qa_chain({"query": question})
    return result["result"], [doc.page_content for doc in result["source_documents"]]

# Prepare evaluation data
eval_questions = [
    "What is MLflow?",
    "How does MLflow handle experiment tracking?",
    "What are the main components of MLflow?"
]

# Evaluate using MLflow
with mlflow.start_run():
    for question in eval_questions:
        answer, sources = evaluate_rag(question)
        
        mlflow.log_param(f"question", question)
        mlflow.log_metric("num_sources", len(sources))
        mlflow.log_text(answer, f"answer_{question}.txt")
        
        for i, source in enumerate(sources):
            mlflow.log_text(source, f"source_{question}_{i}.txt")

    # Log custom metrics
    mlflow.log_metric("avg_sources_per_question", sum(len(evaluate_rag(q)[1]) for q in eval_questions) / len(eval_questions))

Contoh ini menyiapkan sistem RAG menggunakan LangChain dan Chroma, lalu mengevaluasinya dengan mencatat pertanyaan, jawaban, sumber yang diambil, dan metrik khusus ke MLflow.

Evaluasi Strategi Chunking

Cara Anda membagi dokumen dapat memengaruhi kinerja RAG secara signifikan. MLflow dapat membantu Anda mengevaluasi berbagai strategi chunking:

import mlflow
from langchain.text_splitter import CharacterTextSplitter, TokenTextSplitter

def evaluate_chunking_strategy(documents, chunk_size, chunk_overlap, splitter_class):
    splitter = splitter_class(chunk_size=chunk_size, chunk_overlap=chunk_overlap)
    chunks = splitter.split_documents(documents)
    
    with mlflow.start_run():
        mlflow.log_param("chunk_size", chunk_size)
        mlflow.log_param("chunk_overlap", chunk_overlap)
        mlflow.log_param("splitter_class", splitter_class.__name__)
        
        mlflow.log_metric("num_chunks", len(chunks))
        mlflow.log_metric("avg_chunk_length", sum(len(chunk.page_content) for chunk in chunks) / len(chunks))
        
        # Evaluate retrieval performance (simplified)
        correct_retrievals = sum(1 for _ in range(100) if simulate_retrieval(chunks))
        mlflow.log_metric("retrieval_accuracy", correct_retrievals / 100)

# Evaluate different strategies
for chunk_size in [500, 1000, 1500]:
    for chunk_overlap in [0, 50, 100]:
        for splitter_class in [CharacterTextSplitter, TokenTextSplitter]:
            evaluate_chunking_strategy(documents, chunk_size, chunk_overlap, splitter_class)

# Compare results
best_run = mlflow.search_runs(order_by=["metrics.retrieval_accuracy DESC"]).iloc[0]
print(f"Best chunking strategy: {best_run['params.splitter_class']} with size {best_run['params.chunk_size']} and overlap {best_run['params.chunk_overlap']}")

Skrip ini mengevaluasi berbagai kombinasi ukuran potongan, tumpang tindih, dan metode pemisahan, mencatat hasilnya ke MLflow untuk memudahkan perbandingan.

Memvisualisasikan Hasil Evaluasi LLM

MLflow menyediakan berbagai cara untuk memvisualisasikan hasil evaluasi LLM Anda. Berikut beberapa tekniknya:

Menggunakan UI MLflow

Setelah menjalankan evaluasi, Anda dapat menggunakan MLflow UI untuk memvisualisasikan hasil:

  1. Mulai UI MLflow: mlflow ui
  2. Buka browser web dan navigasikan ke http://localhost:5000
  3. Pilih eksperimen Anda dan jalankan untuk melihat metrik, parameter, dan artefak

Visualisasi Kustom

Anda dapat membuat visualisasi khusus dari hasil evaluasi menggunakan pustaka seperti Matplotlib atau Plotly, lalu mencatatnya sebagai artefak:

 
import matplotlib.pyplot as plt
import mlflow

def plot_metric_comparison(metric_name, run_ids):
    plt.figure(figsize=(10, 6))
    for run_id in run_ids:
        run = mlflow.get_run(run_id)
        metric_values = mlflow.get_metric_history(run_id, metric_name)
        plt.plot([m.step for m in metric_values], [m.value for m in metric_values], label=run.data.tags.get("mlflow.runName", run_id))
    
    plt.title(f"Comparison of {metric_name}")
    plt.xlabel("Step")
    plt.ylabel(metric_name)
    plt.legend()
    
    # Save and log the plot
    plt.savefig(f"{metric_name}_comparison.png")
    mlflow.log_artifact(f"{metric_name}_comparison.png")

# Usage
with mlflow.start_run():
    plot_metric_comparison("answer_relevance", ["run_id_1", "run_id_2", "run_id_3"])

Fungsi ini membuat plot garis yang membandingkan metrik tertentu di beberapa proses dan mencatatnya sebagai artefak.

Alternatif untuk MLflow Sumber Terbuka

Ada banyak alternatif selain open source aliran ml untuk mengelola alur kerja pembelajaran mesin, masing-masing menawarkan fitur dan integrasi unik.

MLflow yang dikelola oleh Databricks

MLflow terkelola, dihosting oleh batu bata data, menyediakan fungsionalitas inti MLflow sumber terbuka tetapi dengan manfaat tambahan seperti integrasi yang mulus dengan ekosistem Databricks, fitur keamanan canggih, dan infrastruktur terkelola. Hal ini menjadikannya pilihan yang sangat baik bagi organisasi yang membutuhkan keamanan dan skalabilitas yang tangguh.

Pembelajaran Mesin Azure

Pembelajaran Mesin Azure Menawarkan solusi pembelajaran mesin menyeluruh pada platform cloud Azure milik Microsoft. Solusi ini menyediakan kompatibilitas dengan komponen MLflow seperti registri model dan pelacak eksperimen, meskipun tidak berbasis MLflow.

Platform ML Khusus

Beberapa perusahaan menyediakan produk ML terkelola dengan beragam fitur:

  • neptunus.ai: Berfokus pada pelacakan eksperimen dan pengelolaan model.
  • Bobot & Bias: Menawarkan pelacakan eksperimen ekstensif, pembuatan versi kumpulan data, dan alat kolaborasi.
  • Komet ML: Menyediakan pelacakan eksperimen, pemantauan produksi model, dan pencatatan data.
  • Valohai: Mengkhususkan diri dalam pipeline dan orkestrasi pembelajaran mesin.

aliran meta

aliran meta, yang dikembangkan oleh Netflix, adalah kerangka kerja sumber terbuka yang dirancang untuk mengatur alur kerja data dan pipeline ML. Meskipun unggul dalam mengelola penerapan skala besar, ia tidak memiliki fitur pelacakan eksperimen dan manajemen model yang komprehensif dibandingkan dengan MLflow.

Amazon SageMaker dan Vertex AI Google

Kedua Amazon SageMaker dan Vertex AI dari Google menyediakan solusi MLOps ujung ke ujung yang terintegrasi ke dalam platform cloud masing-masing. Layanan ini menawarkan alat canggih untuk membuat, melatih, dan menerapkan model pembelajaran mesin dalam skala besar.

Perbandingan terperinci

MLflow Terkelola vs. MLflow Sumber Terbuka

MLflow yang dikelola oleh Databricks menawarkan beberapa keunggulan dibandingkan versi sumber terbuka, termasuk:

  • Penyiapan dan Penerapan: Integrasi yang mulus dengan Databricks mengurangi waktu dan tenaga penyiapan.
  • Skalabilitas: Mampu menangani beban kerja pembelajaran mesin skala besar dengan mudah.
  • Keamanan dan Manajemen: Fitur keamanan unik seperti kontrol akses berbasis peran (RBAC) dan enkripsi data.
  • integrasi: Integrasi mendalam dengan layanan Databricks, meningkatkan interoperabilitas dan fungsionalitas.
  • Penyimpanan dan Pencadangan Data: Strategi pencadangan otomatis memastikan keamanan dan keandalan data.
  • Biaya: Pengguna membayar untuk platform, penyimpanan, dan sumber daya komputasi.
  • Dukungan dan Pemeliharaan: Dukungan dan pemeliharaan khusus yang disediakan oleh Databricks.

Kesimpulan

Melacak Model Bahasa Besar dengan MLflow memberikan kerangka kerja yang kuat untuk mengelola kompleksitas pengembangan, evaluasi, dan penerapan LLM. Dengan mengikuti praktik terbaik dan memanfaatkan fitur-fitur canggih yang diuraikan dalam panduan ini, Anda dapat membuat eksperimen LLM yang lebih terorganisir, dapat direproduksi, dan berwawasan luas.

Ingatlah bahwa bidang LLM berkembang pesat, dan teknik baru untuk evaluasi dan pelacakan terus bermunculan. Tetap perbarui rilis MLflow terbaru dan penelitian LLM untuk terus menyempurnakan proses pelacakan dan evaluasi Anda.

Saat Anda menerapkan teknik ini dalam proyek Anda, Anda akan mengembangkan pemahaman yang lebih mendalam tentang perilaku dan kinerja LLM Anda, yang mengarah pada model bahasa yang lebih efektif dan andal.

Saya telah menghabiskan lima tahun terakhir membenamkan diri dalam dunia Machine Learning dan Deep Learning yang menakjubkan. Semangat dan keahlian saya telah membuat saya berkontribusi pada lebih dari 50 proyek rekayasa perangkat lunak yang beragam, dengan fokus khusus pada AI/ML. Keingintahuan saya yang berkelanjutan juga menarik saya ke Natural Language Processing, bidang yang ingin saya jelajahi lebih jauh.