Este estudo de pesquisa foi realizado por Othman El Houfi e Dimitris Kotzinos. Um artigo detalhado é publicado aqui: https://bit.ly/3mzvdup
Como informações falsas e notícias falsas estão se propagando em toda a Internet e redes sociais, a necessidade de operações de verificação de fatos se torna necessária para manter um ambiente digital verdadeiro, onde informações gerais podem ser exploradas de maneira confiável, seja na política, finanças ou em outros domínios. A necessidade desta avaliação de reivindicações on-line vem do fato de que notícias falsas e informações falsas podem ter um grande impacto negativo na política, na economia (eleições de 2016 nos EUA) e na saúde pública (Covid-19).
Várias soluções foram propostas para lidar com esse problema e limitar a disseminação de informações falsas, manual e automático. Sem dúvida, as abordagens manuais feitas em sites como Politifact.com, factcheck.org e snopes.com não constroem uma solução viável a longo prazo, pois a velocidade e a escala da propagação de informações aumentam exponencialmente, tornando essa operação de verificação de fatos manuais, onde os fatos humanos- os verificadores não podem escalar na mesma taxa limitada e incapaz de solucionar a solução.
Aqui, apresentamos nossa contribuição a esse respeito: uma solução automatizada para verificação de fatos usando modelos de idiomas de última geração usados hoje para tarefas de PNL (Bert, Roberta, XLNet ...) e cinco conjuntos de dados bem conhecidos (febre, reivindicações multifc, mentiroso, covid19, e antiváx) contendo uma reivindicação/tweets de classificação.
Provamos com sucesso que o ajuste fino de um LM com as configurações corretas pode atingir uma precisão de 98% e o escore F1 de 98% nos conjuntos de dados CoVID19 e Antivax, bem como uma precisão de 64% e f1 scings de 63% em febre no conjunto de dados.
Termos do índice: Processamento de linguagem natural, modelo de idioma pré-treinado, Wikipedia, corpus de texto, ajuste fino, processamento de texto, inferno natural, infecção de idiomas, verificação de fatos, notícias falsas, Twitter, redes complexas.
Para executar este programa, você deve primeiro instalar os seguintes pacotes:
$ pip3 install numpy pandas sklearn transformers wandb texttable
$ pip3 install torch torchvision torchaudio torchinfo
$ pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cpuOu você pode instalar todas as dependências usando o arquivo requisito.txt neste repositório:
$ pip3 install -r requirements.txtRecomenda-se usar uma GPU para modelos de linguagem baseados em transformadores de ajuste fino, pois é uma tarefa difícil que requer poder computacional. O programa ainda pode funcionar em uma CPU.
Para a implantação do LMS, usamos a linguagem de programação do Python e a biblioteca de rosto abraçada que fornece aos transformadores API para baixar facilmente e ajustar modelos pré-treinados de ponta. O uso de modelos pré-treinados pode reduzir seus custos de computação, pegada de carbono e economizar tempo de treinar um modelo do zero.
Para rastrear métricas de treinamento, métricas de validação, uso de disco, uso da CPU e outras mudanças de ambiente durante nossos experimentos, usamos API de pesos e vieses (WANDB). Para cada etapa ou época, enviamos todas as pontuações e alterações no perfil do projeto Wandb e visualizamos tudo em tempo real.
Para executar o programa, você deve estar no ./lm_for_fact_checking/model repositório e executar:
$ ./language_model.py or $ python3 language_model.pyPara obter mais controlabilidade, você pode adicionar opções a esta linha de comando, aqui está a lista de opções:
$ ./language_model.py --help
usage: language_model.py [-h] [-r] [-d DATASET] [-n NUM_LABELS] [-e EPOCH] [-t TRAIN_BATCH] [-v EVAL_BATCH]
options:
-h, --help show this help message and exit
-r, --report Possible values ["none", "wandb"]. If used all logs during training and evaluation
are reported through Wandb API (must be connected with the right credentials).
-d DATASET, --dataset DATASET
Choose dataset by specifying its name: FEVER, MultiFC, Liar...
-n NUM_LABELS, --num_labels NUM_LABELS
Specify the number of labels in the dataset. Required if dataset is manually
specified (minimum is 2).
-e EPOCH, --epoch EPOCH
Specify the number of training epochs.
-t TRAIN_BATCH, --train_batch TRAIN_BATCH
Specify the size of training batch.
-v EVAL_BATCH, --eval_batch EVAL_BATCH
Specify the size of validation batch.
Por exemplo, se você deseja executar o programa no conjunto de dados Fever:
$ ./language_model.py -d FEVER -n 3 -e 3 -t 20 -v 20Criamos uma ordem de código genérico para fornecer a outros desenvolvedores/pesquisadores um aplicativo fácil de plug e reprodução. Ao executar o programa, você interage com uma interface simples que permite escolher o LM que deseja usar e uma lista de operações como ajuste fino ou avaliar o modelo.
Hi, choose a Language Model:
1 - bert-base-uncased
2 - roberta-base
3 - albert-base-v2
4 - distilbert-base-uncased
5 - xlnet-base-cased
6 - google/bigbird-roberta-base
7 - YituTech/conv-bert-base
0 - Quit program
4
**************** distilbert-base-uncased Model ****************
1 - Show dataset description
2 - Start model fine-tuning
3 - Start model predictions
4 - Show model metrics
0 - Quit program
Por fim, você pode editar mais parâmetros no arquivo ./lm_for_fact_checking/model/conf.py . Você também pode adicionar seu perfil wandb e outros LMs:
DEFAULT_PARAMS = {
# Transformer model
'MODEL_NAME' : None ,
# Dataset name
'DATASET_NAME' : 'FEVER' ,
'DATA_NUM_LABEL' : 2 , # minimum 2 labels
# hyperparams
'MAX_SEQ_LEN' : 128 ,
'TRAIN_BATCH_SIZE' : 20 ,
'EVAL_BATCH_SIZE' : 20 ,
'EPOCHS' : 3 ,
'LR' : 3e-5 ,
'OPTIM' : 'adamw_hf' ,
# Huggingface Trainer params
'EVAL_STEPS' : 100 ,
'SAVE_STEPS' : 100 ,
'LOGGING_STEPS' : 100 ,
'SAVE_TOTAL_LIMIT' : 1 ,
'EARLY_STOPPING_PATIENCE' : 3 ,
'REPORT' : 'none' ,
}
WANDB_PARAMS = {
'project' : 'LM-for-fact-checking' ,
'entity' : 'othmanelhoufi' ,
}
""" Here you can add more LMs to the list for more experiments """
MODEL_LIST = [
'bert-base-uncased' ,
'roberta-base' ,
'albert-base-v2' ,
'distilbert-base-uncased' ,
'xlnet-base-cased' ,
'google/bigbird-roberta-base' ,
'YituTech/conv-bert-base'
]Se você deseja usar um conjunto de dados diferente, siga a mesma arquitetura usada para os conjuntos de dados existentes neste repositório.