# Installing Dependencies
!pip install tensorflow transformers -q
!pip install datasets -q
!pip install transformers[torch]
!pip install evaluate
!pip install transformers datasets
!pip install gensim -q
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.6/7.6 MB 58.1 MB/s eta 0:00:00
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 294.8/294.8 kB 31.6 MB/s eta 0:00:00
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.8/7.8 MB 107.2 MB/s eta 0:00:00
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.3/1.3 MB 77.2 MB/s eta 0:00:00
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 519.6/519.6 kB 8.8 MB/s eta 0:00:00
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 115.3/115.3 kB 10.4 MB/s eta 0:00:00
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 194.1/194.1 kB 18.1 MB/s eta 0:00:00
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 134.8/134.8 kB 15.7 MB/s eta 0:00:00
Requirement already satisfied: transformers[torch] in /usr/local/lib/python3.10/dist-packages (4.33.1)
Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (3.12.2)
Requirement already satisfied: huggingface-hub<1.0,>=0.15.1 in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (0.17.1)
Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (1.23.5)
Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (23.1)
Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (6.0.1)
Requirement already satisfied: regex!=2019.12.17 in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (2023.6.3)
Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (2.31.0)
Requirement already satisfied: tokenizers!=0.11.3,<0.14,>=0.11.1 in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (0.13.3)
Requirement already satisfied: safetensors>=0.3.1 in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (0.3.3)
Requirement already satisfied: tqdm>=4.27 in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (4.66.1)
Requirement already satisfied: torch!=1.12.0,>=1.10 in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (2.0.1+cu118)
Collecting accelerate>=0.20.3 (from transformers[torch])
Downloading accelerate-0.22.0-py3-none-any.whl (251 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 251.2/251.2 kB 3.7 MB/s eta 0:00:00
Requirement already satisfied: psutil in /usr/local/lib/python3.10/dist-packages (from accelerate>=0.20.3->transformers[torch]) (5.9.5)
Requirement already satisfied: fsspec in /usr/local/lib/python3.10/dist-packages (from huggingface-hub<1.0,>=0.15.1->transformers[torch]) (2023.6.0)
Requirement already satisfied: typing-extensions>=3.7.4.3 in /usr/local/lib/python3.10/dist-packages (from huggingface-hub<1.0,>=0.15.1->transformers[torch]) (4.5.0)
Requirement already satisfied: sympy in /usr/local/lib/python3.10/dist-packages (from torch!=1.12.0,>=1.10->transformers[torch]) (1.12)
Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from torch!=1.12.0,>=1.10->transformers[torch]) (3.1)
Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch!=1.12.0,>=1.10->transformers[torch]) (3.1.2)
Requirement already satisfied: triton==2.0.0 in /usr/local/lib/python3.10/dist-packages (from torch!=1.12.0,>=1.10->transformers[torch]) (2.0.0)
Requirement already satisfied: cmake in /usr/local/lib/python3.10/dist-packages (from triton==2.0.0->torch!=1.12.0,>=1.10->transformers[torch]) (3.27.4.1)
Requirement already satisfied: lit in /usr/local/lib/python3.10/dist-packages (from triton==2.0.0->torch!=1.12.0,>=1.10->transformers[torch]) (16.0.6)
Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->transformers[torch]) (3.2.0)
Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->transformers[torch]) (3.4)
Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->transformers[torch]) (2.0.4)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->transformers[torch]) (2023.7.22)
Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch!=1.12.0,>=1.10->transformers[torch]) (2.1.3)
Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.10/dist-packages (from sympy->torch!=1.12.0,>=1.10->transformers[torch]) (1.3.0)
Installing collected packages: accelerate
Successfully installed accelerate-0.22.0
Collecting evaluate
Downloading evaluate-0.4.0-py3-none-any.whl (81 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 81.4/81.4 kB 2.0 MB/s eta 0:00:00
Requirement already satisfied: datasets>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from evaluate) (2.14.5)
Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.10/dist-packages (from evaluate) (1.23.5)
Requirement already satisfied: dill in /usr/local/lib/python3.10/dist-packages (from evaluate) (0.3.7)
Requirement already satisfied: pandas in /usr/local/lib/python3.10/dist-packages (from evaluate) (1.5.3)
Requirement already satisfied: requests>=2.19.0 in /usr/local/lib/python3.10/dist-packages (from evaluate) (2.31.0)
Requirement already satisfied: tqdm>=4.62.1 in /usr/local/lib/python3.10/dist-packages (from evaluate) (4.66.1)
Requirement already satisfied: xxhash in /usr/local/lib/python3.10/dist-packages (from evaluate) (3.3.0)
Requirement already satisfied: multiprocess in /usr/local/lib/python3.10/dist-packages (from evaluate) (0.70.15)
Requirement already satisfied: fsspec[http]>=2021.05.0 in /usr/local/lib/python3.10/dist-packages (from evaluate) (2023.6.0)
Requirement already satisfied: huggingface-hub>=0.7.0 in /usr/local/lib/python3.10/dist-packages (from evaluate) (0.17.1)
Requirement already satisfied: packaging in /usr/local/lib/python3.10/dist-packages (from evaluate) (23.1)
Collecting responses<0.19 (from evaluate)
Downloading responses-0.18.0-py3-none-any.whl (38 kB)
Requirement already satisfied: pyarrow>=8.0.0 in /usr/local/lib/python3.10/dist-packages (from datasets>=2.0.0->evaluate) (9.0.0)
Requirement already satisfied: aiohttp in /usr/local/lib/python3.10/dist-packages (from datasets>=2.0.0->evaluate) (3.8.5)
Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.10/dist-packages (from datasets>=2.0.0->evaluate) (6.0.1)
Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from huggingface-hub>=0.7.0->evaluate) (3.12.2)
Requirement already satisfied: typing-extensions>=3.7.4.3 in /usr/local/lib/python3.10/dist-packages (from huggingface-hub>=0.7.0->evaluate) (4.5.0)
Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests>=2.19.0->evaluate) (3.2.0)
Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests>=2.19.0->evaluate) (3.4)
Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests>=2.19.0->evaluate) (2.0.4)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests>=2.19.0->evaluate) (2023.7.22)
Requirement already satisfied: python-dateutil>=2.8.1 in /usr/local/lib/python3.10/dist-packages (from pandas->evaluate) (2.8.2)
Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas->evaluate) (2023.3.post1)
Requirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets>=2.0.0->evaluate) (23.1.0)
Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets>=2.0.0->evaluate) (6.0.4)
Requirement already satisfied: async-timeout<5.0,>=4.0.0a3 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets>=2.0.0->evaluate) (4.0.3)
Requirement already satisfied: yarl<2.0,>=1.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets>=2.0.0->evaluate) (1.9.2)
Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets>=2.0.0->evaluate) (1.4.0)
Requirement already satisfied: aiosignal>=1.1.2 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets>=2.0.0->evaluate) (1.3.1)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.8.1->pandas->evaluate) (1.16.0)
Installing collected packages: responses, evaluate
Successfully installed evaluate-0.4.0 responses-0.18.0
Requirement already satisfied: transformers in /usr/local/lib/python3.10/dist-packages (4.33.1)
Requirement already satisfied: datasets in /usr/local/lib/python3.10/dist-packages (2.14.5)
Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from transformers) (3.12.2)
Requirement already satisfied: huggingface-hub<1.0,>=0.15.1 in /usr/local/lib/python3.10/dist-packages (from transformers) (0.17.1)
Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.10/dist-packages (from transformers) (1.23.5)
Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from transformers) (23.1)
Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.10/dist-packages (from transformers) (6.0.1)
Requirement already satisfied: regex!=2019.12.17 in /usr/local/lib/python3.10/dist-packages (from transformers) (2023.6.3)
Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from transformers) (2.31.0)
Requirement already satisfied: tokenizers!=0.11.3,<0.14,>=0.11.1 in /usr/local/lib/python3.10/dist-packages (from transformers) (0.13.3)
Requirement already satisfied: safetensors>=0.3.1 in /usr/local/lib/python3.10/dist-packages (from transformers) (0.3.3)
Requirement already satisfied: tqdm>=4.27 in /usr/local/lib/python3.10/dist-packages (from transformers) (4.66.1)
Requirement already satisfied: pyarrow>=8.0.0 in /usr/local/lib/python3.10/dist-packages (from datasets) (9.0.0)
Requirement already satisfied: dill<0.3.8,>=0.3.0 in /usr/local/lib/python3.10/dist-packages (from datasets) (0.3.7)
Requirement already satisfied: pandas in /usr/local/lib/python3.10/dist-packages (from datasets) (1.5.3)
Requirement already satisfied: xxhash in /usr/local/lib/python3.10/dist-packages (from datasets) (3.3.0)
Requirement already satisfied: multiprocess in /usr/local/lib/python3.10/dist-packages (from datasets) (0.70.15)
Requirement already satisfied: fsspec[http]<2023.9.0,>=2023.1.0 in /usr/local/lib/python3.10/dist-packages (from datasets) (2023.6.0)
Requirement already satisfied: aiohttp in /usr/local/lib/python3.10/dist-packages (from datasets) (3.8.5)
Requirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (23.1.0)
Requirement already satisfied: charset-normalizer<4.0,>=2.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (3.2.0)
Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (6.0.4)
Requirement already satisfied: async-timeout<5.0,>=4.0.0a3 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (4.0.3)
Requirement already satisfied: yarl<2.0,>=1.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (1.9.2)
Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (1.4.0)
Requirement already satisfied: aiosignal>=1.1.2 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (1.3.1)
Requirement already satisfied: typing-extensions>=3.7.4.3 in /usr/local/lib/python3.10/dist-packages (from huggingface-hub<1.0,>=0.15.1->transformers) (4.5.0)
Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (3.4)
Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (2.0.4)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (2023.7.22)
Requirement already satisfied: python-dateutil>=2.8.1 in /usr/local/lib/python3.10/dist-packages (from pandas->datasets) (2.8.2)
Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas->datasets) (2023.3.post1)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.8.1->pandas->datasets) (1.16.0)
# Import libraries and modules
import tensorflow as tf
import numpy as np
from tensorflow.keras.layers import Embedding, LSTM, Dense, Bidirectional, Dropout
from tensorflow.keras.models import Sequential
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
from sklearn.model_selection import train_test_split
from datasets import load_dataset
from gensim.models import Word2Vec
# Load dataset
dataset = load_dataset("climatebert/climate_sentiment")
train_data = dataset['train']
test_data = dataset['test']
# Preprocess data by tokenizing the text
# Initialize a Tokenizer with maximum 10000 vocabularies
vocab_size = 10000
tokenizer = Tokenizer(num_words=10000)
# Fit the tokenizer
tokenizer.fit_on_texts(train_data['text']+test_data['text'])
# Convert the text data into sequences
X_train = tokenizer.texts_to_sequences(train_data['text'])
X_test = tokenizer.texts_to_sequences(test_data['text'])
y_train = np.array(train_data['label'])
y_test = np.array(test_data['label'])
# Pad sequences to a fixed length 100 and store as processed text (X)
seq_len = 100
X_train = pad_sequences(X_train, maxlen=seq_len)
X_test = pad_sequences(X_test, maxlen=seq_len)
# Create RNN Models
# Model 1: LSTM Model
model1 = Sequential([ # Stack layers sequenctially
# Embedding layer to convert integer tokens into dense vectors
Embedding(input_dim=vocab_size, output_dim=128, input_length=seq_len),
# Bidirectional LSTM layer with 64 units, return sequences, and 32 units
Bidirectional((LSTM(64, return_sequences=True))),
Bidirectional((LSTM(32))),
Dropout(0.25), # Dropout for regularization
Dense(64),
Dropout(0.25),
Dense(16),
# Dense layer with a single output using softmax activation function for multiclass classification
Dense(3, activation='softmax') # Output layer for classification
])
# Compile model using sparse categorical crossentropy, Adam optimizer, and accuracy as metrics
model1.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
# Train model using training data
model1.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_test, y_test))
Epoch 1/10
32/32 [==============================] - 19s 251ms/step - loss: 1.0645 - accuracy: 0.4070 - val_loss: 0.8651 - val_accuracy: 0.5562
Epoch 2/10
32/32 [==============================] - 6s 200ms/step - loss: 0.6623 - accuracy: 0.6950 - val_loss: 0.8244 - val_accuracy: 0.5875
Epoch 3/10
32/32 [==============================] - 5s 149ms/step - loss: 0.3463 - accuracy: 0.8580 - val_loss: 0.9347 - val_accuracy: 0.6906
Epoch 4/10
32/32 [==============================] - 5s 152ms/step - loss: 0.1036 - accuracy: 0.9670 - val_loss: 1.0385 - val_accuracy: 0.7125
Epoch 5/10
32/32 [==============================] - 5s 148ms/step - loss: 0.0388 - accuracy: 0.9940 - val_loss: 1.7328 - val_accuracy: 0.7031
Epoch 6/10
32/32 [==============================] - 4s 115ms/step - loss: 0.0481 - accuracy: 0.9880 - val_loss: 1.5649 - val_accuracy: 0.6562
Epoch 7/10
32/32 [==============================] - 3s 95ms/step - loss: 0.0226 - accuracy: 0.9940 - val_loss: 1.5769 - val_accuracy: 0.6750
Epoch 8/10
32/32 [==============================] - 3s 111ms/step - loss: 0.0215 - accuracy: 0.9970 - val_loss: 1.5751 - val_accuracy: 0.6906
Epoch 9/10
32/32 [==============================] - 3s 85ms/step - loss: 0.0145 - accuracy: 0.9970 - val_loss: 1.6290 - val_accuracy: 0.6875
Epoch 10/10
32/32 [==============================] - 2s 52ms/step - loss: 0.0054 - accuracy: 0.9990 - val_loss: 1.7136 - val_accuracy: 0.7094
# Model 2: Word2Vec Embedding
word2vec_model = Word2Vec(sentences=train_data['text']+test_data['text'], vector_size=128, window=5, min_count=1, sg=0)
word2vec_model.save("word2vec.model")
# Embedding matrix for embedding layer
embedding_matrix = np.zeros((vocab_size, 128))
for word, i in tokenizer.word_index.items():
if i < vocab_size:
if word in word2vec_model.wv:
embedding_matrix[i] = word2vec_model.wv[word]
WARNING:gensim.models.word2vec:Each 'sentences' item should be a list of words (usually unicode strings). First item here is instead plain <class 'str'>.
model2 = Sequential([ # Stack layers sequenctially
# Embedding layer to convert integer tokens into dense vectors
Embedding(input_dim=vocab_size, output_dim=128, input_length=seq_len, weights=[embedding_matrix], trainable=True),
# Bidirectional LSTM layer with 64 units, return sequences, and 32 units
Bidirectional((LSTM(64, return_sequences=True))),
Bidirectional((LSTM(32))),
Dropout(0.25), # Dropout for regularization
Dense(64),
Dropout(0.25),
Dense(16),
# Dense layer with a single output using softmax activation function for multiclass classification
Dense(3, activation='softmax') # Output layer for classification
])
# Compile model using sparse categorical crossentropy, Adam optimizer, and accuracy as metrics
model2.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
# Train model using training data
model2.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_test, y_test))
Epoch 1/10
32/32 [==============================] - 15s 244ms/step - loss: 1.0704 - accuracy: 0.4010 - val_loss: 1.0054 - val_accuracy: 0.5219
Epoch 2/10
32/32 [==============================] - 4s 120ms/step - loss: 0.7616 - accuracy: 0.6490 - val_loss: 0.7508 - val_accuracy: 0.6469
Epoch 3/10
32/32 [==============================] - 4s 138ms/step - loss: 0.3461 - accuracy: 0.8710 - val_loss: 0.7756 - val_accuracy: 0.7188
Epoch 4/10
32/32 [==============================] - 4s 128ms/step - loss: 0.1257 - accuracy: 0.9640 - val_loss: 0.9138 - val_accuracy: 0.7063
Epoch 5/10
32/32 [==============================] - 3s 96ms/step - loss: 0.0438 - accuracy: 0.9890 - val_loss: 1.4328 - val_accuracy: 0.6812
Epoch 6/10
32/32 [==============================] - 3s 89ms/step - loss: 0.0310 - accuracy: 0.9950 - val_loss: 1.4759 - val_accuracy: 0.6938
Epoch 7/10
32/32 [==============================] - 3s 85ms/step - loss: 0.0199 - accuracy: 0.9940 - val_loss: 1.7292 - val_accuracy: 0.6750
Epoch 8/10
32/32 [==============================] - 3s 103ms/step - loss: 0.0427 - accuracy: 0.9920 - val_loss: 2.0534 - val_accuracy: 0.5875
Epoch 9/10
32/32 [==============================] - 2s 58ms/step - loss: 0.0390 - accuracy: 0.9880 - val_loss: 1.3599 - val_accuracy: 0.6719
Epoch 10/10
32/32 [==============================] - 1s 43ms/step - loss: 0.0330 - accuracy: 0.9920 - val_loss: 1.4953 - val_accuracy: 0.7000
# Libraries and modules for text classification using BERT
import tensorflow as tf
import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification, Trainer, TrainingArguments
from sklearn.model_selection import train_test_split
from datasets import load_dataset, DatasetDict
# Load dataset (using same dataset with previous RNN Models)
dataset = load_dataset("climatebert/climate_sentiment")
dataset
# Tokenize the text data using BERT tokenizer
# Initialize BERT tokenizer from pre-trained "bert-base-uncased" model
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
# Define a tokenize function to apply tokenization to the examples in the dataset
def tokenize_function(examples):
return tokenizer(
examples["text"],
padding="max_length", # to ensure all tokenized sequences have the same length
truncation=True) # truncate exceeded token length
# Applying tokenization function to the dataset through map function
tokenized_datasets = dataset.map(tokenize_function, batched=True)
# Initialize model and metric
model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased", num_labels=3)
Some weights of BertForSequenceClassification were not initialized from the model checkpoint at bert-base-uncased and are newly initialized: ['classifier.bias', 'classifier.weight']
You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.
import numpy as np
import evaluate
# Load accuracy metric
metric = evaluate.load("accuracy")
# Custom function to compute evaluation metrics
def compute_metrics(eval_pred):
logits, labels = eval_pred
predictions = np.argmax(logits, axis=-1)
return metric.compute(predictions=predictions, references=labels)
from transformers import TrainingArguments, Trainer
# Define training arguments for the trainer
training_args = TrainingArguments(output_dir="test_trainer", evaluation_strategy="epoch")
# Create a Trainer object for model training and evaluation
trainer = Trainer(
model = model, # specifies the model to be trained
args=training_args, # training arguments
train_dataset=tokenized_datasets['train'], # tokenized training dataset
eval_dataset=tokenized_datasets['test'], # tokenized test dataset
compute_metrics=compute_metrics # custom metric computation
)
# start training
trainer.train()
# Evaluate RNN models
loss1, acc1 = model1.evaluate(X_test, y_test)
loss2, acc2 = model2.evaluate(X_test, y_test)
# Evaluate Attention-based model
result = trainer.evaluate()
print(f"Model 1: LSTM")
print(f"Accuracy of LSTM: {acc1}")
print(f"Loss of LSTM: {loss1}\n")
print(f"Model 2: Word2Vec")
print(f"Accuracy of Word2Vec: {acc2}")
print(f"Loss of Word2Vec: {loss2}\n")
print(f"Model 3: BERT")
print(f"Accuracy of BERT: {result['eval_accuracy']}")
print(f"Loss of BERT: {result['eval_loss']}\n")
10/10 [==============================] - 0s 17ms/step - loss: 1.7136 - accuracy: 0.7094
10/10 [==============================] - 0s 16ms/step - loss: 1.4953 - accuracy: 0.7000
Model 1: LSTM
Accuracy of LSTM: 0.7093750238418579
Loss of LSTM: 1.713641881942749
Model 2: Word2Vec
Accuracy of Word2Vec: 0.699999988079071
Loss of Word2Vec: 1.4952857494354248
Model 3: BERT
Accuracy of BERT: 0.81875
Loss of BERT: 0.6998484134674072
# Make predictions for the three models
# Predictions from RNN models
predictions1 = model1.predict(X_test)
predictions2 = model2.predict(X_test)
# Predictions from Attention-based model
result = trainer.predict(tokenized_datasets['test'])
10/10 [==============================] - 0s 12ms/step
10/10 [==============================] - 0s 11ms/step
# Loop through a subset of examples to see inference result
labels = ['risk', 'neutral', 'opportunity']
for i in range(10):
print(f"Text: {tokenized_datasets['test']['text'][i]}")
print(f"LSTM Prediction: {labels[np.argmax(predictions1[i])]}")
print(f"Word2Vec Prediction: {labels[np.argmax(predictions2[i])]}")
print(f"BERT Prediction: {labels[np.argmax(result[0][i])]}")
print(f"Groundtruth: {labels[tokenized_datasets['test']['label'][i]]}\n")
Text: Sustainable strategy ‘red lines’ For our sustainable strategy range, we incorporate a series of proprietary ‘red lines’ in order to ensure the poorest- performing companies from an ESG perspective are not eligible for investment.
LSTM Prediction: neutral
Word2Vec Prediction: neutral
BERT Prediction: neutral
Groundtruth: risk
Text: Verizon’s environmental, health and safety management system provides a framework for identifying, controlling, and reducing the risks associated with the environments in which we operate. Besides regular management system assessments, internal and third-party compliance audits and inspections are performed annually at hundreds of facilities worldwide. The goal of these assessments is to identify and correct site-specific issues, and to educate and empower facility managers and supervisors to implement corrective actions. Verizon’s environment, health and safety efforts are directed and supported by experienced experts around the world that support our operations and facilities.
LSTM Prediction: risk
Word2Vec Prediction: neutral
BERT Prediction: risk
Groundtruth: neutral
Text: In 2019, the Company closed a series of transactions related to the sale of its Canadian fossil fuel-based electricity generation business. A transaction with Heartland Generation Ltd., an affiliate of Energy Capital Partners, included the sale of 10 partly or fully owned natural gas-fired and coal-fired electricity generation assets located in Alberta and British Columbia. In two other separate transactions, the Company sold its 50 per cent ownership interest in the Cory Cogeneration Station to SaskPower International and its 50 per cent ownership interest in Brighton Beach Power to Ontario Power Generation.
LSTM Prediction: neutral
Word2Vec Prediction: opportunity
BERT Prediction: neutral
Groundtruth: neutral
Text: In December 2020, the AUC approved the Electricity Distribution and Natural Gas Distribution requests to defer the compulsory distribution rate increases which would normally come into effect on January 1, 2021 for both businesses. The rate relief was requested to defer significant distribution rate increases which would be passed onto end use customers due to the formulaic approach of rate calculations under the AUC PBR mechanism. Electricity Distribution and Natural Gas Distribution cited the current economic situation in Alberta, including the hardships faced by some end use customers due to the COVID-19 pandemic, as rationale to proceed with these interim rates. Electricity Distribution and Natural Gas Distribution are to file an application by March 1, 2021, outlining the duration of the rate freeze and collection timelines, expected deferral values including carrying costs and anticipated impacts to customers.
LSTM Prediction: risk
Word2Vec Prediction: risk
BERT Prediction: neutral
Groundtruth: risk
Text: Finally, there is a reputational risk linked to the possibility that oil companies may be perceived by institutions and the general public as the entities mainly responsible of the climate change. This could possibly make Eni’s shares less attractive to investment funds and individual investors who assess the risk profile of companies against their environmental and social footprint when making investment decisions.
LSTM Prediction: risk
Word2Vec Prediction: neutral
BERT Prediction: risk
Groundtruth: risk
Text: Ecoefficiency Eco-efficiency management provides a reduction in the consumption of natural resources, such as water and energy, thus minimizing the environmental impact, in addition to the expenses with the acquisition of said inputs. With the same goal, GHG emissions and consumption of materials were rationalized, such as: paper, toner and fuel, reducing the generation of solid waste.
LSTM Prediction: neutral
Word2Vec Prediction: neutral
BERT Prediction: neutral
Groundtruth: neutral
Text: The Group and its customers are exposed to climate related events, including climate change. These events include severe storms, drought, fires, cyclones, hurricanes, floods and rising sea levels. The Group and its customers may also be exposed to other events such as geological events (including volcanic seismic activity or tsunamis), plant, animal and human diseases or a pandemic.
LSTM Prediction: risk
Word2Vec Prediction: risk
BERT Prediction: risk
Groundtruth: risk
Text: Both our Board and executive leadership team recognize that operating responsibly, which includes minimizing the environmental impact of our operations, is fundamental to the long-term success of Verizon. We believe building a better future involves making climate aware- ness “business as usual” throughout our organization, starting at the top. This is why our Board’s oversight role and management governance structures are evolving to include more regular assessment and discussion of climate-related risks and opportunities.
LSTM Prediction: neutral
Word2Vec Prediction: neutral
BERT Prediction: neutral
Groundtruth: neutral
Text: Although it is intended that governments will ratchet up their commitments to emissions reduction – their ‘Nationally Determined Contributions’ – it is not clear that governments will do this, or will do so in time. Governments may also not live up to, or may renege upon, the commitments they have made.
LSTM Prediction: neutral
Word2Vec Prediction: risk
BERT Prediction: neutral
Groundtruth: neutral
Text: Climate-related risks and opportunities have grown in importance for us as a business. As an insurance company understanding and managing risk is at the heart of what we do, and we recognise that climate change poses material long-term impacts to the business.
LSTM Prediction: risk
Word2Vec Prediction: risk
BERT Prediction: risk
Groundtruth: risk