import gradio as gr import torch from torch import tensor from torch.nn import functional as F from sklearn.preprocessing import LabelEncoder import pandas as pd label_encoder = LabelEncoder() coeffs = torch.load('fakejobposts.pth') indep_cols = ['job_title', 'company_name', 'company_desc', 'job_desc', 'job_requirement', 'salary', 'location', 'employment_type', 'department'] def calc_preds(coeffs, indeps): layers, consts = coeffs n = len(layers) res = indeps for i, l in enumerate(layers): res = res @ l + consts[i] if i != n-1: res = F.relu(res) if torch.sigmoid(res) > 0.5: return 'Real Job Post' else: return 'Fake Job Post' # return torch.sigmoid(res) def preprocess_input(input_data): df = pd.DataFrame([input_data], columns=indep_cols) for column in df.columns: if df[column].dtype == 'O': # 'O' stands for object type (string) df[column] = label_encoder.fit_transform(df[column]) else: df[column] = df[column].astype(float) t_indep = tensor(df[indep_cols].values, dtype=torch.float) vals, indices = t_indep.max(dim=0) t_indep = t_indep / vals return t_indep def main(inputs): t_indep = preprocess_input(inputs) return calc_preds(coeffs, t_indep) def main(job_title, company_name, company_desc, job_desc, job_requirement, salary, location, employment_type, department): inputs = [job_title, company_name, company_desc, job_desc, job_requirement, salary, location, employment_type, department] t_indep = preprocess_input(inputs) return calc_preds(coeffs, t_indep) iface = gr.Interface( fn=main, inputs="text", outputs="text", title="Real/Fake Job Posting Identifier", description="Identifies job posts as real or fake." ) iface.launch()