SUBJSent é uma CLI de classificação de subjetividade de sentenças que tem como objetivo disponibilizar diversas estratégias de classificação de subjetividade de forma simples e descomplicada. Atualmente a classificação se limita à sentenças em inglês, mas há planos para expandi-la também para o português.
A CLI tem duas tasks principais: train e predict. As configurações de ambas podem ser ajustadas no arquivo config.json.
$ pip install -r requirements.txt
-
$ python subjsent --task train
-
- data_path - caminho para um arquivo csv com as colunas text e label, e.g.
text, label uma sentença subjetiva, 1 uma sentença objetiva, 0 ...
- embeddings
- type - tipo de embeddings que será utilizado pelo modelo, "word" ou "sentence".
- model
- type - tipo de modelo a ser utilizado, "CNN" ou "MLP".
- train
- data_path - caminho para um arquivo csv com as colunas text e label, e.g.
-
Após a execução a seguinte pasta será criada no diretório saved_models:
saved_models/ ├── Model #/ ├── model.h5 // Arquivo do modelo. ├── results.txt // Arquivo com as métricas de teste. ├── plots.png // Imagem com os plots das métricas de treino.
$ python subjsent --task predict
-
- data_path - caminho para um arquivo csv com a coluna text, contendo as sentenças, e.g.
text sentença 1 sentença 2 ...
- model_path - caminho para um arquivo h5, contendo o modelo que será utilizado durante o predict.
- embeddings
- type - O tipo de embeddings que será utilizado pelo modelo, "word" ou "sentence".
- data_path - caminho para um arquivo csv com a coluna text, contendo as sentenças, e.g.
-
Após a execução a seguinte pasta será criada no diretório data_output:
data_output/ ├── Result #/ ├── result.csv // Arquivo contento o valor predito de cada sentença.
-
Chave - Descrição
Clique para mostrar
-
data_path - caminho para o csv de interesse. No caso do train para o csv com as sentenças e com os labels e no caso do predict para o csv com as sentenças.
-
model_path - caminho para um arquivo h5, contendo o modelo que será utilizado no predict.
-
embeddings
-
type - tipo de embedding que será utilizado, "word" ou "sentence".
-
length - dimensão dos embeddings.
-
path - caminho para os embeddings, que podem estar em formato txt ou bin no caso de word embeddings ou em formato válido para o hub.load no caso de sentence embeddings.
-
binary - booleano que indica se o arquivo de embeddings é um .bin ou não.
-
convert_to_w2v - booleano que indica se é necessária a conversão para o formato de embeddings do word2vec, caso esteja utilizando o GloVe marque esse campo como true.
-
-
model
-
type - tipo de modelo que será utilizado. Atualmente é possível utilizar dois tipos de modelos: "CNN" e "MLP". Só é possível utilizar a CNN com embeddings de palavras e só é possível utilizar o MLP com embeddings de sentença.
-
activation - função de ativação que será utilizada nas camadas da rede neural, deve conter uma string que representa uma ativação válida do keras .
-
dense_connections - array de inteiros com a quantidade de unidades de cada uma das camadas densas.
-
dropout_rate - array com floats entre 0 e 1 que representam as taxas de dropout que serão aplicadas no modelo.
-
num_filters - quantidade de filtros que serão aplicados nas camadas de convolução, válido apenas para a CNN.
-
kernel_sizes - tamanho das mascaras de convolução, válido apenas para a CNN.
-
metrics - array com strings que representam as métricas a serem calculadas durante o treinamento, deve conter strings que representam metricas válidas do keras.
-
optimizer - string que representa o otimizador utilizado pelo modelo, deve conter uma string que representa um otimizador válido do keras.
-
learning_rate - float que representa a taxa de apredizagem que será aplicada ao otimizador.
-
loss - string que representa a função de loss que será utilizada no modelo, deve conter uma string que representa uma função de loss válida do keras.
-
-
train
-
test_size - float que representa a porcentagem dos dados que será separada para o teste.
-
validation_size - float que representa a porcentagem do conjunto de treino que será separada para validação.
-
batch_size - inteiro que representa o tamanho do batch utilizado durante o treinamento.
-
epochs - inteiro que representa o número de épocas do treinamento.
-
plot_history - booleano que indica se as métricas de treino devem ser plotadas ou não.
-
-
preprocess
- remove_stopwords - booleano que indica se as stopwords deve ou não serem removidas durante o preprocessamento, o conjunto de stopwords utilizado é o english do nltk.
-
Há duas arquiteturas disponíveis para treinamento, uma CNN e um MLP. Mais detalhes sobre elas podem ser encontrados aqui.
A arquitetura da CNN foi baseada no artigo Convolutional Neural Networks for Sentence Classification de Yoon Kim.
A CNN deve ser utilizada ,obrigatoriamente, em conjunto com word embeddings, enquanto o MLP deve ser utilizado em conjunto com sentence embeddings.
No preprocessamento das sentenças da CNN é feita a tokenização e posteriormente um padding a fim de normalizar o tamanho do input da mesma. O padding é feito com base na sentença com maior quantidade de tokens.
No MLP o preprocessamento fica a cargo do modelo utilizado para gerar os embeddings, por isso é importante ficar atento para a quantidade máxima de tokens permitida pelo modelo em questão.
A CNN foi testada com word2vec e GloVe, enquanto que o MLP foi testado com a versão 5 do Universal Sentence Encoder Large - que utiliza transformers.