Spaces:
Runtime error
Runtime error
import nltk | |
import numpy as np | |
from nltk.stem.porter import PorterStemmer | |
import json | |
import torch | |
import torch.nn as nn | |
import random | |
import gradio as gr | |
nltk.download('punkt') | |
nltk.download('punkt_tab') | |
with open('dataset.json', 'r') as file: | |
dataset = json.load(file) | |
class NeuralNetwork(nn.Module): | |
def __init__(self, input_size, hidden_size, num_classes): | |
super(NeuralNetwork, self).__init__() | |
self.l1 = nn.Linear(input_size, hidden_size) | |
self.l2 = nn.Linear(hidden_size, hidden_size) | |
self.l3 = nn.Linear(hidden_size, num_classes) | |
self.relu = nn.ReLU() | |
def forward(self, x): | |
out = self.l1(x) | |
out = self.relu(out) | |
out = self.l2(out) | |
out = self.relu(out) | |
out = self.l3(out) | |
return out | |
data = torch.load('model_chatbot.pth', map_location=torch.device('cpu')) | |
input_size = data["input_size"] | |
hidden_size = data["hidden_size"] | |
output_size = data["output_size"] | |
all_words = data["all_words"] | |
tags = data["tags"] | |
model_state = data["model_state"] | |
device = torch.device('cpu') | |
model = NeuralNetwork(input_size, hidden_size, output_size).to(device) | |
model.load_state_dict(model_state) | |
model.eval() | |
# Fungsi untuk tokenisasi, stemming, dan bag-of-words | |
stemmer = PorterStemmer() | |
def tokenize(sentence): | |
return nltk.word_tokenize(sentence) | |
def stem(word): | |
return stemmer.stem(word.lower()) | |
def bag_of_words(tokenized_sentence, all_words): | |
tokenized_sentence = [stem(w) for w in tokenized_sentence] | |
bag = np.zeros(len(all_words), dtype=np.float32) | |
for idx, w in enumerate(all_words): | |
if w in tokenized_sentence: | |
bag[idx] = 1.0 | |
return bag | |
# Fungsi prediksi | |
def predict(sentence): | |
sentence = tokenize(sentence) | |
X = bag_of_words(sentence, all_words) | |
X = X.reshape(1, X.shape[0]) | |
X = torch.from_numpy(X).to(device) | |
output = model(X) | |
_, predicted = torch.max(output, dim=1) | |
tag = tags[predicted.item()] | |
probs = torch.softmax(output, dim=1) | |
prob = probs[0][predicted.item()] | |
if prob.item() > 0.75: | |
for intent in dataset['intents']: | |
if tag == intent["tag"]: | |
return random.choice(intent['response']) | |
else: | |
return "Saya tidak mengerti pertanyaan Anda." | |
# Buat interface Gradio | |
iface = gr.Interface( | |
fn=predict, | |
inputs=gr.Textbox(placeholder="Silahkan masukkan pertanyaan...."), | |
outputs="markdown", | |
title="Chatbot Hukum Pajak", | |
description="Selamat Datang di chatbot pajak.\n\nChatbot ini bisa hanya bisa menjawab beberapa pertanyaan dasar tentang hukum pajak dari pasal 21, pasal 22, pasal 23, dan pasal 24.\n\nContoh pertanyaan seperti berikut:\n\n1. Apa itu pajak?\n\n2. Apa itu pajak penghasilan?\n\n3. Bisakah kamu jelaskan apa itu pajak penghasilan berdasarkan pasal 22?\n\n4. dan lain-lain.\n\nJika ingin melihat bagaimana chatbot ini dilatih, kalian bisa melihat dataset sederhana yang saya buat:\n\nhttps://huggingface.co./chandra10/chatbot_pajak/resolve/main/dataset.json\n\nModel chatbot ini belum sempurna. Jadi, silahkan beri saran di community") | |
# Jalankan interface | |
iface.launch(share=True) |