Spaces:
Sleeping
Sleeping
File size: 4,344 Bytes
03d9d99 b576153 f3da86a b576153 f3da86a 781ff79 f3da86a 781ff79 b576153 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
import streamlit as st
#title
st.title("Smart Detection System of AI-Generated Text Models")
#subtitle
st.markdown("## This is a POC repo for Smart Detection System of AI Generated Text Models project, it is a pre-trained model that detect the probablities of using any of the known LLM (chatgpt3, chatgpt4, GoogleBard, HuggingfaceChat)##")
import os
import requests
import pickle
import pandas as pd
import nltk
from spacy_huggingface_hub import en_core_web_sm
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize, sent_tokenize
import numpy as np
nltk.download('punkt')
nltk.download('stopwords')
nltk.download('averaged_perceptron_tagger')
# Check if the file exists
if not os.path.isfile('RandomForestClassifier.pkl'):
# Download the zip file if it doesn't exist
url = 'https://jaifar.net/RandomForestClassifier.pkl'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
}
response = requests.get(url, headers=headers)
# Save the file
with open('RandomForestClassifier.pkl', 'wb') as file:
file.write(response.content)
# At this point, the pickle file should exist, either it was already there, or it has been downloaded and extracted.
with open('RandomForestClassifier.pkl', 'rb') as file:
clf_loaded = pickle.load(file)
# # Loading a SpaCy model for Named Entity Recognition and Lemmatization
# !pip install https://huggingface.co/spacy/en_core_web_sm/resolve/main/en_core_web_sm-any-py3-none-any.whl
# Using spacy.load().
# import spacy
nlp = spacy.load("en_core_web_sm")
# # Importing as module.
# import en_core_web_sm
# nlp = en_core_web_sm.load()
nlp = spacy.load('en_core_web_sm')
# # Your input paragraph
# input_paragraph = "Your paragraph here..."
# # Read the paragraph from a text file
# with open('paragraph.txt', 'r') as file:
# input_paragraph = file.read()
input_paragraph = st.text_area("Input your text here")
df = pd.DataFrame(columns=["paragraph"])
df = df.append({"paragraph": input_paragraph}, ignore_index=True)
# Variable to control number of words to retrieve
num_words = 500
# Retrieving only the first num_words words of the paragraph
input_paragraph = ' '.join(word_tokenize(input_paragraph)[:num_words])
# Extracting features
def extract_features(text):
words = word_tokenize(text)
sentences = sent_tokenize(text)
doc = nlp(text)
avg_word_length = sum(len(word) for word in words) / len(words)
avg_sent_length = sum(len(sent) for sent in sentences) / len(sentences)
punctuation_count = len([char for char in text if char in '.,;:?!'])
stopword_count = len([word for word in words if word in stopwords.words('english')])
lemma_count = len(set(token.lemma_ for token in doc))
named_entity_count = len(doc.ents)
tagged_words = nltk.pos_tag(words)
pos_counts = nltk.FreqDist(tag for (word, tag) in tagged_words)
pos_features = {
'pos_IN': pos_counts['IN'],
'pos_DT': pos_counts['DT'],
'pos_NN': pos_counts['NN'],
'pos_,': pos_counts[','],
'pos_VBZ': pos_counts['VBZ'],
'pos_WDT': pos_counts['WDT'],
'pos_TO': pos_counts['TO'],
'pos_VB': pos_counts['VB'],
'pos_VBG': pos_counts['VBG'],
'pos_.': pos_counts['.'],
'pos_JJ': pos_counts['JJ'],
'pos_NNS': pos_counts['NNS'],
'pos_RB': pos_counts['RB'],
'pos_CC': pos_counts['CC'],
'pos_VBN': pos_counts['VBN'],
}
features = {
'avg_word_length': avg_word_length,
'avg_sent_length': avg_sent_length,
'punctuation_count': punctuation_count,
'stopword_count': stopword_count,
'lemma_count': lemma_count,
'named_entity_count': named_entity_count,
}
features.update(pos_features)
return pd.Series(features)
#return pd.DataFrame(features)
# Creates a button named 'Press me'
press_me_button = st.button("Press me")
if press_me_button:
# Display the text entered by the user
input_features = df['paragraph'].apply(extract_features)
predicted_llm = clf_loaded.predict(input_features)
st.write(f"Predicted LLM: {predicted_llm[0]}")
# Get the features of the input paragraph
#input_features = extract_features(input_paragraph)
|