Membuat Aplikasi Text Summarization dengan Gradio

Dalam era informasi yang terus berkembang, kita sering kali dihadapkan pada teks yang panjang. Membaca dan memahami semua informasi tersebut bisa memakan waktu dan tenaga yang tidak sedikit, terlebih lagi jika topik yang dibahas termasuk kompleks. Maka dari itu, akan lebih efektif jika kita bisa membaca ringkasan yang menjelaskan intinya saja. Di sinilah teknologi summarization atau penyimpulan teks bisa memiliki peran penting. Meringkas teks adalah proses mengambil bagian-bagian penting dari teks yang panjang dan merangkum informasi tersebut menjadi bentuk yang lebih singkat namun tetap informatif.

Pada artikel ini, kita akan membuat aplikasi text summarization sederhana menggunakan model distilbart-cnn-12-6 yang tersedia di Hugging Face. Model ini adalah versi distilled dari BART (Bidirectional and Auto-Regressive Transformers), yang telah dilatih khusus untuk tugas summarization menggunakan dataset CNN. Pada artikel ini, kita akan belajar bagaimana menggunakan API dari Hugging Face untuk membuat aplikasi text summarization dengan interface yang interaktif menggunakan Gradio.

Intuisi Text Summarization

Text summarization merupakan salah satu task yang umum di dalam Natural Language Processing (NLP). Tujuan dari text summarization adalah menghasilkan versi lebih singkat dari dokumen sambil tetap mempertahankan informasi penting. Terdapat dua jenis utama text summarization:

  1. Extractive Summarization: Metode ini memilih kalimat-kalimat penting dari teks asli dan menyusunnya menjadi ringkasan. Pendekatan ini tidak mengubah teks asli, melainkan hanya mengekstrak bagian-bagian penting.

  2. Abstractive Summarization: Metode ini memahami teks asli dan kemudian menghasilkan ringkasan yang mungkin berisi kata-kata atau frasa yang tidak ada dalam teks asli. Pendekatan ini lebih kompleks dan menyerupai cara manusia merangkum informasi.

DistilBART

DistilBART merupakan model transformer yang telah di-distilled, dalam artian model ini merupakan versi yang lebih kecil dan cepat dari model asli BART. Proses distillation dilakukan dengan cara mentransfer pengetahuan dari model besar (teacher model) ke model yang lebih kecil (student model), tentunya tanpa mengorbankan performa secara signifikan. Model BART sendiri merupakan kombinasi dari encoder BERT dan decoder GPT, yang membuatnya sangat efektif untuk berbagai tugas generatif dalam NLP, termasuk summarization.

Model distilbart-cnn-12-6 telah dilatih menggunakan dataset CNN/Daily Mail yang berisi artikel berita dan ringkasannya. Model ini mempelajari pola-pola dalam teks berita dan bagaimana membuat ringkasan yang informatif dan koheren.

Hugging Face Inference API

Hugging Face menyediakan API inference yang memungkinkan kita menggunakan model-model yang tersedia tanpa perlu melatih ulang atau menyimpan model ke local. Dengan API ini, kita hanya perlu mengirimkan teks melalui request HTTP, dan model akan mengembalikan hasil yang dalam hal ini berupa ringkasan teks. Ini sangat memudahkan integrasi model AI ke dalam aplikasi tanpa membutuhkan sumber daya komputasi yang besar.

Membuat Aplikasi dengan Gradio

Setelah mengetahui sekilas dari model yang digunakan, kita akan mengimplementasikan kode untuk membuat aplikasi penyimpulan teks menggunakan model distilbart-cnn-12-6 dari Hugging Face dan antarmuka Gradio. Untuk mengetahui lebih lanjut tentang dokumentasi model yang kita gunakan, kita bisa merujuk ke https://huggingface.co/sshleifer/distilbart-cnn-12-6.

Mengatur Kunci API

Pertama, kita perlu mengatur dan memuat kunci API dari Hugging Face untuk dapat mengakses layanan inference mereka. Kunci API ini biasanya disimpan dalam file .env untuk keamanan.

import json
import requests
import gradio as gr
from dotenv import dotenv_values

config = dotenv_values(".env")
hf_api_key = config['HF_API_KEY']

Pada kode di atas, kita menggunakan pustaka dotenv untuk memuat kunci API dari file .env. Pastikan kita telah menambahkan kunci API kita di file .env dengan format HF_API_KEY=your_hugging_face_api_key.

Membuat Fungsi untuk Mengakses API

Selanjutnya, kita akan membuat fungsi get_completion yang akan mengirimkan teks ke API Hugging Face dan menerima hasil ringkasan dari teks yang dimasukkan.

API_URL = "https://api-inference.huggingface.co/models/sshleifer/distilbart-cnn-12-6"

def get_completion(inputs, parameters=None, ENDPOINT_URL=API_URL): 
    headers = {
      "Authorization": f"Bearer {hf_api_key}",
      "Content-Type": "application/json"
    }
    data = { "inputs": inputs }
    if parameters is not None:
        data.update({"parameters": parameters})
    response = requests.request("POST", ENDPOINT_URL, headers=headers, data=json.dumps(data))
    return json.loads(response.content.decode("utf-8"))

Fungsi get_completion menggunakan modul requests untuk mengirimkan teks ke API Hugging Face. Fungsi ini menerima parameter inputs yang merupakan teks yang akan diringkas dan parameter opsional parameters untuk pengaturan tambahan. Hasil dari API akan dikembalikan dalam bentuk JSON.

Membuat Fungsi Summarization

Kita kemudian membuat fungsi summarize yang akan memanggil fungsi get_completion dan mengembalikan teks ringkasan.

def summarize(input):
    output = get_completion(input)
    return output[0]['summary_text']

Membuat Antarmuka Gradio

Terakhir, kita akan membuat interface menggunakan Gradio.

interface = gr.Interface(
    fn=summarize, 
    inputs=[gr.Textbox(label="Text to summarize", lines=6)],
    outputs=[gr.Textbox(label="Result", lines=3)],
    title="Text summarization with distilbart-cnn",
    description="Summarize any text using the `sshleifer/distilbart-cnn-12-6` model under the hood!"
)

interface.launch()

Interface ini memungkinkan pengguna untuk memasukkan teks yang ingin diringkas dan menampilkan hasil ringkasan. Dengan Gradio, kita dapat dengan mudah menampilkannya di browser.

Berikut contoh ketika saya mencoba memasukkan teks tentang indonesia dari halaman wikipedia.

Kesimpulan

Pada artikel ini, kita telah belajar cara menggunakan model distilbart-cnn-12-6 dari Hugging Face untuk melakukan penyimpulan teks. Kita juga telah membuat antarmuka interaktif menggunakan Gradio yang memungkinkan pengguna untuk merangkum teks dengan mudah. Teknologi ini sangat bermanfaat dalam membantu kita menangani informasi yang berlebihan dan mendapatkan intisari dari teks yang panjang. Dengan pemahaman dan alat ini, kita dapat membangun aplikasi yang lebih cerdas dan efisien dalam memproses teks. Terimakasih sudah membaca artikel ini, selamat belajar!


Source Code: Link to GitHub Repository