Progetto di rilevamento di notizie false in Python [con codifica]

Pubblicato: 2020-12-14

Hai mai letto una notizia che sembra fasulla? Tutti incontriamo articoli di questo tipo e istintivamente riconosciamo che qualcosa non va. A causa di così tanti post là fuori, è quasi impossibile separare il giusto dallo sbagliato. Qui, non stiamo parlando solo di affermazioni spurie e di punti fattuali, ma piuttosto di cose che sembrano sbagliate in modo intricato nel linguaggio stesso.

Ti sei mai chiesto come sviluppare un progetto di rilevamento di notizie false? Ma non c'è via d'uscita semplice per scoprire quali notizie siano false e quali no, soprattutto di questi tempi, con la velocità di diffusione delle notizie sui social. Tuttavia, alcune soluzioni potrebbero aiutare a identificare questi errori.

Ci sono due modi per affermare che alcune notizie sono false o meno: in primo luogo, un attacco ai punti fattuali. In secondo luogo, la lingua. Il primo può essere fatto solo attraverso ricerche sostanziali in Internet con sistemi di query automatizzati. Potrebbe essere un compito arduo, soprattutto per qualcuno che ha appena iniziato con la scienza dei dati e l'elaborazione del linguaggio naturale.

Quest'ultimo è possibile attraverso una pipeline di elaborazione del linguaggio naturale seguita da una pipeline di apprendimento automatico. È così che implementeremmo il nostro progetto di rilevamento di notizie false in Python. È un altro dei problemi che vengono riconosciuti come un problema di apprendimento automatico posto come un problema di elaborazione del linguaggio naturale. Se sei un principiante e sei interessato a saperne di più sulla scienza dei dati, dai un'occhiata ai nostri corsi online di scienza dei dati delle migliori università.

Leggi: Idee e argomenti del progetto Python

Esistono molti set di dati per questo tipo di applicazione, ma utilizzeremo quello menzionato qui . I dati contengono circa 7500+ feed di notizie con due etichette target: falso o reale. Il set di dati comprende anche il titolo della notizia specifica.

I passaggi in cantiere per l'elaborazione del linguaggio naturale sarebbero i seguenti:

  1. Acquisizione e caricamento dei dati
  2. Pulizia del set di dati
  3. Rimozione di simboli extra
  4. Rimozione della punteggiatura
  5. Rimozione delle stopword
  6. Stemming
  7. Tokenizzazione
  8. Estrazioni di funzionalità
  9. Vettorizzatore TF-IDF
  10. Vectorizzatore contatore con trasformatore TF-IDF
  11. Formazione e verifica del modello di machine learning

Prima di iniziare a discutere le fasi di implementazione del progetto di rilevamento delle fake news , importiamo le librerie necessarie:

Codice:

importa panda come pd
importa numpy come np
importare ri
stringa di importazione
da nltk.corpus import stopwords
da nltk.tokenize import word_tokenize

stop_words = set(stopwords.words( 'inglese' ))

Il primo passo è acquisire i dati. Abbiamo già fornito il link al file CSV; ma è anche fondamentale discutere l'altro modo per generare i dati.

Uno dei metodi è il web scraping. Per questo, dobbiamo codificare un web crawler e specificare i siti da cui è necessario ottenere i dati. Ma attenzione, ci sono due problemi con questo approccio.

Innanzitutto, potrebbe essere illegale eliminare molti siti, quindi è necessario occuparsene. E in secondo luogo, i dati sarebbero molto grezzi. L'intera pipeline verrebbe aggiunta a un elenco di passaggi per convertire i dati grezzi in un file CSV funzionante o in un set di dati. Quindi, utilizziamo il file CSV preimpostato con dati organizzati.

Tuttavia, se sei interessato, puoi dare un'occhiata al corso di upGrad sulla scienza dei dati, in cui sono disponibili risorse sufficienti con spiegazioni adeguate sull'ingegneria dei dati e sul web scraping. Assicurati di controllare quelli qui .

È così che importiamo il nostro set di dati e aggiungiamo le etichette. Nota come eliminiamo le colonne non necessarie dal set di dati. Se richiesto su un valore più alto, puoi mantenere quelle colonne. Ma in questo momento, il nostro progetto di rilevamento delle notizie false funzionerebbe senza problemi solo sulle colonne del testo e dell'etichetta di destinazione.

Codice:

df_text = pd.read_csv( 'fake_or_real_news.csv' , encoding= 'latin-1' )
df_text.columns = [ 'id' , 'title' , 'text' , 'label' ] df_text.drop(['id', 'title'], axis=1)

Andando avanti, il passaggio successivo consiste nel pulire i dati esistenti. Perché questo passaggio è necessario? È fondamentale capire che stiamo lavorando con una macchina e insegnandole a biforcare il falso e il reale. In questo momento abbiamo dati testuali, ma i computer lavorano sui numeri. Quindi prima è necessario convertirli in numeri, e un passo prima è assicurarsi che stiamo solo trasformando quei testi che sono necessari per la comprensione.

Il primo passaggio nella pipeline di pulizia è verificare se il set di dati contiene simboli aggiuntivi da cancellare. Potrebbero essere indirizzi web o uno qualsiasi degli altri simboli di riferimento, come at(@) o hashtag. Ecco il codice:

Codice:

# Rimuovi gli URL
testo = re.sub( r”http\S+|www\S+|https\S+” , , testo, flags=re.MULTILINE)
# Rimuove i riferimenti utente @ e '#' dal testo
testo = re.sub( r'\@\w+|\#' , , testo)

Una volta rimosso, il passaggio successivo è eliminare gli altri simboli: i segni di punteggiatura. Se ci pensiamo, la punteggiatura non ha un chiaro input per comprendere la realtà di una particolare notizia. A volte, può essere possibile che se ci sono molti segni di punteggiatura, allora la notizia non è reale, ad esempio, l'uso eccessivo di esclamazioni.

Ma questi sono casi rari e richiederebbero un'analisi specifica basata su regole. Quindi, per questo progetto di rilevamento di notizie false , rimuoveremmo la punteggiatura. Ecco come farlo:

Codice:

text = text.translate(str.maketrans( , , string.punctuation))

Il passo successivo è arginare la parola al suo interno e tokenizzare le parole. Tokenizzazione significa trasformare ogni frase in un elenco di parole o simboli. Ecco un codice di due righe che deve essere aggiunto:

Codice:

token = word_tokenize(testo)
parole = [w per w in token se non w in stop_words]

Il passo successivo è cruciale. La conversione di token in numeri significativi. Questo passaggio è anche noto come estrazione di funzionalità. Per la nostra applicazione, utilizzeremo il metodo TF-IDF per estrarre e creare le funzionalità per la nostra pipeline di machine learning.

TF-IDF significa essenzialmente frequenza del documento a frequenza inversa. Come suggerito dal nome, raccogliamo le informazioni sul set di dati tramite la frequenza dei termini e la frequenza dei termini nell'intero set di dati o nella raccolta di documenti.

TF-IDF può essere facilmente calcolato mescolando entrambi i valori di TF e IDF. Entrambe le formule implicano rapporti semplici.

TF = n. di volte il termine compare nel documento / numero totale di termini.

IDF = log di ( n. totale di documenti / n. di documenti in cui compare il termine )

Ora Python ha due implementazioni per la conversione TF-IDF. Il primo è un vettorizzatore TF-IDF e il secondo è il trasformatore TF-IDF. La differenza è che il trasformatore richiede un'implementazione di un sacco di parole prima della trasformazione, mentre il vettorizzatore combina entrambi i passaggi in uno. Potremmo anche usare il vettorizzatore di conteggio che è una semplice implementazione di bag-of-words. Ma il TF-IDF funzionerebbe meglio sul particolare set di dati.

Ecco come potrebbe essere implementato TF-IDF.

Codice:

da sklearn.feature_extraction.text import TfidfVectorizer

tf_vector = TfidfVectorizer(sublinear_tf= True )
tf_vector.fit(df_text[ 'testo' ])

Il passaggio successivo è la pipeline di Machine learning. Proprio come la tipica pipeline ML, abbiamo bisogno di ottenere i dati in X e y. Per fare ciò, utilizziamo X come matrice fornita come output dal vettorizzatore TF-IDF, che deve essere appiattito.

Possiamo usare la funzione di viaggio in Python per convertire la matrice in un array. I valori y non possono essere aggiunti direttamente in quanto sono ancora etichette e non numeri. Per convertirli in 0 e 1, utilizziamo il codificatore di etichette di sklearn.

Questo codificatore trasforma i testi dell'etichetta in target numerati. Ad esempio, supponiamo di avere un elenco di etichette come questa: ['real', 'fake', 'fake', 'fake']

Ciò di cui abbiamo essenzialmente bisogno è un elenco come questo: [1, 0, 0, 0]. Quello che fa il codificatore di etichette è che prende tutte le etichette distinte e crea un elenco. Per il nostro esempio, l'elenco sarebbe ['falso', 'reale'].

Ecco l'implementazione dello stesso:

Codice:

X_text = tf_vector.transform(df_text[ 'testo' ].ravel())
y_values ​​= np.array(df_text[ 'label' ].ravel())

dalla preelaborazione dell'importazione di sklearn
le = preelaborazione.LabelEncoder()
le.fit(y_values) le.transform(y_values)

Una volta terminato, le divisioni di formazione e test sono terminate. Può essere ottenuto utilizzando il pacchetto di preelaborazione di sklearn e importando la funzione di suddivisione del test del treno.

Codice:

da sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X_text, y_values, test_size= 0.15 , random_state= 120 )

Il passaggio finale consiste nell'utilizzare i modelli. Sono disponibili molti buoni modelli di apprendimento automatico, ma anche i semplici modelli di base funzionerebbero bene sulla nostra implementazione di progetti di rilevamento di notizie false . Per prima cosa implementiamo un modello di regressione logistica. Ecco come implementare utilizzando sklearn.

Codice:

da sklearn.metrics import precision_score

da sklearn.linear_model import LogisticRegression

modello = LogisticRegression(solver= 'lbfgs' )
model.fit(X_treno, y_treno)
y_predict = modello.predict(X_test)
print(punteggio_accuratezza(y_test, y_predict))

Il modello si comporta abbastanza bene. Una precisione del 92 percento su un modello di regressione è abbastanza decente. Puoi anche implementare altri modelli disponibili e verificarne le esattezze.

Quindi, ecco come puoi implementare un progetto di rilevamento di notizie false utilizzando Python.

Nota che ci sono molte cose da fare qui. La pipeline della PNL non è ancora del tutto completa. Sono disponibili molte altre funzioni che possono essere applicate per ottenere estrazioni di funzionalità ancora migliori.

Leggi anche: Idee per progetti open source Python

Il modo in cui le fake news stanno adattando la tecnologia, sarebbero necessari modelli di elaborazione sempre migliori. E questi modelli sarebbero maggiormente coinvolti nella comprensione del linguaggio naturale e meno posti come un modello di apprendimento automatico stesso. I modelli possono anche essere messi a punto in base alle caratteristiche utilizzate. Il set di dati potrebbe essere adattato dinamicamente per farlo funzionare sui dati correnti. Ma ciò richiederebbe un modello esaurientemente addestrato sugli articoli di attualità.

Quindi, se sono disponibili più dati, potrebbero essere realizzati modelli migliori e l'applicabilità dei progetti di rilevamento di notizie false può essere migliorata. Ma lo schema interno e le condutture principali rimarrebbero gli stessi. Le condutture spiegate sono altamente adattabili a qualsiasi esperimento che potresti voler condurre. Sentiti libero di provare e giocare con diverse funzioni.

Se sei curioso di imparare la scienza dei dati per essere all'avanguardia nei rapidi progressi tecnologici, dai un'occhiata al programma Executive PG in Data Science di upGrad & IIIT-B e migliora le tue competenze per il futuro.

Quali sono le competenze richieste per sviluppare un progetto di rilevamento di notizie false in Python?

Python viene utilizzato per la creazione di progetti di rilevamento di notizie false grazie alla sua tipizzazione dinamica, alle strutture dati integrate, alle potenti librerie, ai framework e al supporto della comunità. Le altre competenze richieste per sviluppare un progetto di rilevamento di notizie false in Python sono Machine Learning, Natural Language Processing e Artificial Intelligence. La conoscenza di queste abilità è un must per gli studenti che intendono fare questo progetto. Gli studenti possono facilmente apprendere queste abilità online.

In che modo le aziende utilizzano i progetti di rilevamento di notizie false di Python?

Poiché la maggior parte delle notizie false si trova sulle piattaforme dei social media, può essere difficile separare le notizie reali da quelle false. Le piattaforme di social media e la maggior parte delle società di media utilizzano il progetto di rilevamento di notizie false per determinare automaticamente se le notizie che circolano sono inventate o meno. La maggior parte delle aziende utilizza l'apprendimento automatico in aggiunta al progetto per automatizzare questo processo di ricerca di notizie false piuttosto che affidarsi agli esseri umani per svolgere il noioso compito.

Quali sono alcune altre applicazioni reali di Python?

Python ha una vasta gamma di applicazioni del mondo reale. Python supporta i sistemi operativi multipiattaforma, il che rende molto più gestibile lo sviluppo di applicazioni che lo utilizzano. Python viene utilizzato per alimentare alcune delle app più famose al mondo, tra cui YouTube, BitTorrent e DropBox. Python è spesso impiegato nella produzione di giochi innovativi. Python è utilizzato anche nell'apprendimento automatico, nella scienza dei dati e nell'intelligenza artificiale poiché aiuta nella creazione di algoritmi ripetuti basati sui dati archiviati. Python è un vero toccasana quando si tratta di estrarre grandi quantità di dati dai siti Web, che gli utenti possono successivamente utilizzare in varie operazioni del mondo reale come confronto dei prezzi, annunci di lavoro, ricerca e sviluppo e così via.