jarif's picture
Upload 3 files
c810fbc verified
raw
history blame
No virus
3.29 kB
import gradio as gr
from transformers import DistilBertTokenizer, TFDistilBertModel
import numpy as np
import tensorflow as tf
from sklearn.model_selection import train_test_split
import pandas as pd
# Load your data
df = pd.read_csv("final_bn_data.csv")
# Extract text and label columns
sentences = df["text"]
labels = df["label"]
# Load tokenizer and model
distil_bert_tokenizer = DistilBertTokenizer.from_pretrained('distilbert-base-uncased')
distil_bert_model = TFDistilBertModel.from_pretrained('distilbert-base-uncased')
# Tokenize sentences
max_len = 40
input_ids = []
attention_masks = []
for sent in sentences:
distil_bert_input_shape = distil_bert_tokenizer.encode_plus(sent, add_special_tokens=True, max_length=max_len, pad_to_max_length=True, return_attention_mask=True, truncation=True)
input_ids.append(distil_bert_input_shape['input_ids'])
attention_masks.append(distil_bert_input_shape['attention_mask'])
input_ids = np.array(input_ids)
attention_masks = np.array(attention_masks)
# Split data into train and test sets
X_train_input, X_test_input, Y_train_label, Y_test_label, train_mask, test_mask = train_test_split(input_ids, labels, attention_masks, test_size=0.3, random_state=42, shuffle=True)
# Define model architecture
def create_model():
input_shape = tf.keras.Input(shape=(max_len,), dtype='int32')
masks = tf.keras.Input(shape=(max_len,), dtype='int32')
distil_bert_layer = distil_bert_model(input_ids=input_shape, attention_mask=masks)[0]
X = tf.keras.layers.GRU(128, return_sequences=True)(distil_bert_layer)
X = tf.keras.layers.GlobalMaxPool1D()(X)
X = tf.keras.layers.Dense(64, activation="tanh")(X)
X = tf.keras.layers.Dense(32)(X)
X = tf.keras.layers.Dense(16)(X)
X = tf.keras.layers.Dense(8)(X)
X = tf.keras.layers.Dense(4)(X)
X = tf.keras.layers.Dropout(0.5)(X)
X = tf.keras.layers.Dense(2, activation='softmax')(X)
model = tf.keras.Model(inputs=[input_shape, masks], outputs=X)
return model
# Create model instance
model = create_model()
# Compile model
loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
metric = tf.keras.metrics.SparseCategoricalAccuracy('accuracy')
optimizer = tf.keras.optimizers.Adam(learning_rate=2e-5)
model.compile(loss=loss, optimizer=optimizer, metrics=[metric])
# Train model
history = model.fit([X_train_input, train_mask], Y_train_label, batch_size=32, epochs=20, validation_data=([X_test_input, test_mask], Y_test_label))
# Define Gradio interface
def classify_bangla_fake_news(description):
input_ids = distil_bert_tokenizer.encode(description, add_special_tokens=True, max_length=40, truncation=True, padding='max_length')
input_mask = [1] * len(input_ids)
input_ids = np.asarray(input_ids).reshape(1, -1)
input_mask = np.asarray(input_mask).reshape(1, -1)
prediction = model.predict([input_ids, input_mask])[0]
predicted_class = np.argmax(prediction)
return "Fake" if predicted_class == 0 else "Real"
iface = gr.Interface(
fn=classify_bangla_fake_news,
inputs="text",
outputs="label",
title="Bangla Fake News Detection",
description="Enter a Bangla news article and get prediction whether it's real or fake."
)
# Launch the Gradio interface
iface.launch(inline=False)