Projeto de detecção de notícias falsas em Python [com codificação]

Publicados: 2020-12-14

Já leu uma notícia que parece falsa? Todos nós encontramos esses artigos de notícias e instintivamente reconhecemos que algo não parece certo. Por causa de tantos posts por aí, é quase impossível separar o certo do errado. Aqui, não estamos falando apenas de alegações espúrias e de pontos factuais, mas sim de coisas que parecem intrincadamente erradas na própria linguagem.

Você já se perguntou como desenvolver um projeto de detecção de notícias falsas? Mas não há saída fácil para descobrir quais notícias são falsas e quais não são, principalmente nos dias de hoje, com a velocidade de propagação das notícias nas redes sociais. Ainda assim, algumas soluções podem ajudar a identificar essas irregularidades.

Existem duas formas de afirmar que alguma notícia é falsa ou não: Primeiro, um ataque aos pontos factuais. Em segundo lugar, a linguagem. O primeiro só pode ser feito por meio de pesquisas substanciais na internet com sistemas automatizados de consulta. Pode ser uma tarefa esmagadora, especialmente para alguém que está apenas começando com ciência de dados e processamento de linguagem natural.

O último é possível por meio de um pipeline de processamento de linguagem natural seguido por um pipeline de aprendizado de máquina. É como implementaríamos nosso projeto de detecção de notícias falsas em Python. É outro dos problemas que são reconhecidos como um problema de aprendizado de máquina colocado como um problema de processamento de linguagem natural. Se você é iniciante e está interessado em aprender mais sobre ciência de dados, confira nossos cursos online de ciência de dados das melhores universidades.

Leia: Ideias e tópicos do projeto Python

Existem muitos conjuntos de dados para esse tipo de aplicativo, mas usaríamos o mencionado aqui . Os dados contêm cerca de 7.500 feeds de notícias com dois rótulos de destino: falsos ou reais. O conjunto de dados também consiste no título da notícia específica.

As etapas no pipeline para o processamento de linguagem natural seriam as seguintes:

  1. Adquirindo e carregando os dados
  2. Limpando o conjunto de dados
  3. Removendo símbolos extras
  4. Removendo pontuações
  5. Removendo as palavras irrelevantes
  6. Derivação
  7. Tokenização
  8. Extrações de recursos
  9. Vetorizador TF-IDF
  10. Vetorizador de contador com transformador TF-IDF
  11. Treinamento e verificação do modelo de aprendizado de máquina

Antes de começarmos a discutir as etapas de implementação do projeto de detecção de notícias falsas , vamos importar as bibliotecas necessárias:

Código:

importar pandas como pd
importar numpy como np
importar re
seqüência de importação
de palavras irrelevantes de importação nltk.corpus
de nltk.tokenize importar word_tokenize

stop_words = set(stopwords.words( 'português' ))

O primeiro passo é adquirir os dados. Já fornecemos o link para o arquivo CSV; mas também é crucial discutir a outra maneira de gerar seus dados.

Um dos métodos é a raspagem da web. Para isso, precisamos codificar um rastreador da Web e especificar os sites dos quais você precisa obter os dados. Mas tenha cuidado, há dois problemas com essa abordagem.

Primeiro, pode ser ilegal descartar muitos sites, então você precisa cuidar disso. E segundo, os dados seriam muito brutos. Todo o pipeline seria anexado com uma lista de etapas para converter esses dados brutos em um arquivo CSV ou conjunto de dados viável. Por isso, usamos o arquivo CSV predefinido com dados organizados.

No entanto, se estiver interessado, você pode conferir o curso de ciência de dados do upGrad, no qual há recursos suficientes disponíveis com explicações adequadas sobre engenharia de dados e web scraping. Certifique-se de verificar esses aqui .

É assim que importamos nosso conjunto de dados e anexamos os rótulos. Observe como descartamos as colunas desnecessárias do conjunto de dados. Se necessário em um valor mais alto, você pode manter essas colunas. Mas agora, nosso projeto de detecção de notícias falsas funcionaria sem problemas apenas nas colunas de texto e rótulo de destino.

Código:

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)

Seguindo em frente, o próximo passo é limpar os dados existentes. Por que essa etapa é necessária? É crucial entender que estamos trabalhando com uma máquina e ensinando-a a bifurcar o falso e o real. No momento, temos dados textuais, mas os computadores trabalham com números. Então, primeiro é necessário convertê-los em números, e um passo antes disso é ter certeza de que estamos apenas transformando os textos que são necessários para o entendimento.

A primeira etapa no pipeline de limpeza é verificar se o conjunto de dados contém símbolos extras para limpar. Podem ser endereços da web ou qualquer outro símbolo(s) de referência, como at(@) ou hashtags. Aqui está o código:

Código:

#Remover URLs
text = re.sub( r”http\S+|www\S+|https\S+” , , text, flags=re.MULTILINE)
# Remova as referências do usuário @ e '#' do texto
texto = re.sub( r'\@\w+|\#' , , texto)

Uma vez que removemos isso, o próximo passo é limpar os outros símbolos: as pontuações. Se pensarmos sobre isso, as pontuações não têm uma entrada clara na compreensão da realidade de uma notícia específica. Às vezes, pode ser possível que, se houver muitas pontuações, as notícias não sejam reais, por exemplo, uso excessivo de exclamações.

Mas esses são casos raros e exigiriam uma análise específica baseada em regras. Então, para este projeto de detecção de notícias falsas , estaríamos removendo as pontuações. Aqui está como fazê-lo:

Código:

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

O próximo passo é levar a palavra ao seu núcleo e tokenizar as palavras. Tokenização significa transformar cada frase em uma lista de palavras ou tokens. Aqui está um código de duas linhas que precisa ser anexado:

Código:

tokens = word_tokenize(texto)
palavras = [w para w em tokens se não w em stop_words]

O próximo passo é crucial. A conversão de tokens em números significativos. Essa etapa também é conhecida como extração de recursos. Para nosso aplicativo, estamos usando o método TF-IDF para extrair e construir os recursos para nosso pipeline de aprendizado de máquina.

TF-IDF significa essencialmente o termo frequência inversa do documento. Conforme sugerido pelo nome, coletamos as informações sobre o conjunto de dados por meio de sua frequência de termos, bem como a frequência de termos em todo o conjunto de dados ou coleção de documentos.

O TF-IDF pode ser facilmente calculado misturando os dois valores de TF e IDF. Ambas as fórmulas envolvem razões simples.

TF = não. de vezes que o termo aparece no documento / número total de termos.

IDF = log de ( nº total de documentos / nº de documentos em que o termo aparece )

Agora Python tem duas implementações para a conversão TF-IDF. O primeiro é um vetorizador TF-IDF e o segundo é o transformador TF-IDF. A diferença é que o transformador requer uma implementação de pacote de palavras antes da transformação, enquanto o vetorizador combina as duas etapas em uma. Também poderíamos usar o vetorizador de contagem que é uma implementação simples de bag-of-words. Mas o TF-IDF funcionaria melhor no conjunto de dados específico.

Aqui está como o TF-IDF pode ser implementado.

Código:

de sklearn.feature_extraction.text import TfidfVectorizer

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

A próxima etapa é o pipeline de aprendizado de máquina. Assim como o pipeline típico de ML, precisamos colocar os dados em X e y. Para isso, usamos X como a matriz fornecida como saída pelo vetorizador TF-IDF, que precisa ser achatada.

Podemos usar a função travel em Python para converter a matriz em um array. Os valores y não podem ser anexados diretamente, pois ainda são rótulos e não números. Para convertê-los em 0s e 1s, usamos o codificador de rótulos do sklearn.

Este codificador transforma os textos das etiquetas em alvos numerados. Por exemplo, suponha que temos uma lista de rótulos como este: ['real', 'fake', 'fake', 'fake']

O que precisamos essencialmente é uma lista como esta: [1, 0, 0, 0]. O que o codificador de rótulo faz é pegar todos os rótulos distintos e fazer uma lista. Para o nosso exemplo, a lista seria ['fake', 'real'].

Segue a implementação do mesmo:

Código:

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

do pré- processamento de importação do sklearn
le = pré-processamento.LabelEncoder()
le.fit(y_values) le.transform(y_values)

Uma vez feito, as divisões de treinamento e teste são feitas. Isso pode ser obtido usando o pacote de pré-processamento do sklearn e importando a função de divisão de teste de trem.

Código:

de sklearn.model_selection importar 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 )

O passo final é usar os modelos. Existem muitos bons modelos de aprendizado de máquina disponíveis, mas mesmo os modelos básicos simples funcionariam bem em nossa implementação de projetos de detecção de notícias falsas . Primeiro implementamos um modelo de regressão logística. Aqui está como implementar usando sklearn.

Código:

de sklearn.metrics importar precisão_score

de sklearn.linear_model importar LogisticRegression

model = LogisticRegression(solver= 'lbfgs' )
model.fit(X_train, y_train)
y_predict = model.predict(X_test)
print(accuracy_score(y_test, y_predict))

O modelo funciona muito bem. Uma precisão de 92% em um modelo de regressão é bastante decente. Você também pode implementar outros modelos disponíveis e verificar as precisões.

Então, é assim que você pode implementar um projeto de detecção de notícias falsas usando Python.

Observe que há muitas coisas para fazer aqui. O pipeline de PNL ainda não está totalmente concluído. Existem muitas outras funções disponíveis que podem ser aplicadas para obter extrações de recursos ainda melhores.

Leia também: Ideias de projetos de código aberto Python

A forma como as notícias falsas estão adaptando a tecnologia, seriam necessários modelos de processamento cada vez melhores. E esses modelos seriam mais voltados para a compreensão da linguagem natural e menos colocados como um modelo de aprendizado de máquina em si. Os modelos também podem ser ajustados de acordo com os recursos utilizados. O conjunto de dados pode ser dinamicamente adaptável para fazê-lo funcionar nos dados atuais. Mas isso exigiria um modelo exaustivamente treinado nas notícias atuais.

Assim, se mais dados estiverem disponíveis, melhores modelos poderão ser feitos e a aplicabilidade de projetos de detecção de notícias falsas pode ser melhorada. Mas o esquema interno e os pipelines principais permaneceriam os mesmos. Os pipelines explicados são altamente adaptáveis ​​a qualquer experimento que você queira realizar. Sinta-se à vontade para experimentar e brincar com diferentes funções.

Se você está curioso sobre aprender ciência de dados para estar na frente dos avanços tecnológicos em ritmo acelerado, confira o Programa PG Executivo em Ciência de Dados do upGrad & IIIT-B e se qualifique para o futuro.

Quais são as habilidades necessárias para desenvolver um projeto de detecção de notícias falsas em Python?

O Python é usado para criar projetos de detecção de notícias falsas devido à sua tipagem dinâmica, estruturas de dados integradas, bibliotecas poderosas, estruturas e suporte da comunidade. As outras habilidades necessárias para desenvolver um projeto de detecção de notícias falsas em Python são Aprendizado de Máquina, Processamento de Linguagem Natural e Inteligência Artificial. O conhecimento destas competências é uma obrigação para os alunos que pretendem fazer este projeto. Os alunos podem facilmente aprender essas habilidades online.

Como as empresas usam os Projetos de Detecção de Fake News do Python?

Como a maioria das notícias falsas é encontrada em plataformas de mídia social, pode ser difícil separar as notícias verdadeiras das notícias falsas. As plataformas de mídia social e a maioria das empresas de mídia utilizam o Projeto de Detecção de Fake News para determinar automaticamente se as notícias que circulam são fabricadas ou não. A maioria das empresas usa aprendizado de máquina além do projeto para automatizar esse processo de encontrar notícias falsas, em vez de depender de humanos para realizar a tarefa tediosa.

Quais são algumas outras aplicações da vida real do python?

Python tem uma ampla gama de aplicações do mundo real. O Python oferece suporte a sistemas operacionais multiplataforma, o que torna o desenvolvimento de aplicativos muito mais gerenciável. O Python é usado para alimentar alguns dos aplicativos mais conhecidos do mundo, incluindo YouTube, BitTorrent e DropBox. Python é frequentemente empregado na produção de jogos inovadores. O Python também é usado em aprendizado de máquina, ciência de dados e inteligência artificial, pois auxilia na criação de algoritmos de repetição baseados em dados armazenados. Python é um salva-vidas quando se trata de extrair grandes quantidades de dados de sites, que os usuários podem usar posteriormente em várias operações do mundo real, como comparação de preços, anúncios de emprego, pesquisa e desenvolvimento e assim por diante.