Sentiment Analysis¶
Through Fine-tuning Word Language Model¶
This script can be used to train a sentiment analysis model from scratch, or fine-tune a pre-trained language model. The pre-trained language models are loaded from Gluon NLP Toolkit model zoo. It also showcases how to use different bucketing strategies to speed up training.
Use the following command to run without using pre-trained model (log)
$ python finetune_lm.py --gpu 0 --batch_size 16 --bucket_type fixed --epochs 3 --dropout 0 --no_pretrained --lr 0.005 --valid_ratio 0.1 --save-prefix imdb_lstm_200 # Test Accuracy 85.60
Use the following command to run with pre-trained model (log)
$ python finetune_lm.py --gpu 0 --batch_size 16 --bucket_type fixed --epochs 3 --dropout 0 --lr 0.005 --valid_ratio 0.1 --save-prefix imdb_lstm_200 # Test Accuracy 86.46
TextCNN¶
This script can be used to train a sentiment analysis model with convolutional neural networks, i.e., textCNN:
Kim, Y. (2014). Convolutional neural networks for sentence classification. arXiv preprint arXiv:1408.5882.
epoch:
MR |
SST-1 |
SST-2 |
Subj |
TREC |
CR |
MPQA |
|
---|---|---|---|---|---|---|---|
rand |
200 |
200 |
200 |
200 |
200 |
200 |
200 |
static |
200 |
200 |
200 |
200 |
200 |
200 |
200 |
non-static |
200 |
200 |
200 |
200 |
200 |
200 |
200 |
multichannel |
200 |
200 |
200 |
200 |
200 |
200 |
200 |
log:
MR |
SST-1 |
SST-2 |
Subj |
TREC |
CR |
MPQA |
|
---|---|---|---|---|---|---|---|
rand |
[1]/log |
[5]/log |
[9]/log |
[13]/log |
[17]/log |
[21]/log |
[25]/log |
static |
[2]/log |
[6]/log |
[10]/log |
[14]/log |
[18]/log |
[22]/log |
[26]/log |
non-static |
[3]/log |
[7]/log |
[11]/log |
[15]/log |
[19]/log |
[23]/log |
[27]/log |
multichannel |
[4]/log |
[8]/log |
[12]/log |
[16]/log |
[20]/log |
[24]/log |
[28]/log |
test accuracy (SST-1, SST-2, and TREC) or cross-validation accuracy (MR, Subj, CR and MPQA):
MR |
SST-1 |
SST-2 |
Subj |
TREC |
CR |
MPQA |
|
---|---|---|---|---|---|---|---|
rand |
75.8 |
44.3 |
82.1 |
89.3 |
90.2 |
79.5 |
85.3 |
static |
79.4 |
48.1 |
87.1 |
91.8 |
91.4 |
83.1 |
89.6 |
non-static |
80.0 |
47.0 |
85.6 |
91.9 |
93.2 |
82.9 |
89.2 |
multichannel |
80.0 |
48.1 |
85.8 |
92.1 |
93.2 |
83.3 |
89.6 |
[1]:
$ python sentiment_analysis_cnn.py --gpu 0 --batch_size 50 --epochs 200 --dropout 0.5 --model_mode rand --data_name MR
[2]:
$ python sentiment_analysis_cnn.py --gpu 0 --batch_size 50 --epochs 200 --dropout 0.5 --model_mode static --data_name MR
[3]:
$ python sentiment_analysis_cnn.py --gpu 0 --batch_size 50 --epochs 200 --dropout 0.5 --model_mode non-static --data_name MR
[4]:
$ python sentiment_analysis_cnn.py --gpu 0 --batch_size 50 --epochs 200 --dropout 0.5 --model_mode multichannel --data_name MR
[5]:
$ python sentiment_analysis_cnn.py --gpu 0 --batch_size 50 --epochs 200 --dropout 0.5 --model_mode rand --data_name SST-1
[6]:
$ python sentiment_analysis_cnn.py --gpu 0 --batch_size 50 --epochs 200 --dropout 0.5 --model_mode static --data_name SST-1
[7]:
$ python sentiment_analysis_cnn.py --gpu 0 --batch_size 50 --epochs 200 --dropout 0.5 --model_mode non-static --data_name SST-1
[8]:
$ python sentiment_analysis_cnn.py --gpu 0 --batch_size 50 --epochs 200 --dropout 0.5 --model_mode multichannel --data_name SST-1
[9]:
$ python sentiment_analysis_cnn.py --gpu 0 --batch_size 50 --epochs 200 --dropout 0.5 --model_mode rand --data_name SST-2
[10]:
$ python sentiment_analysis_cnn.py --gpu 0 --batch_size 50 --epochs 200 --dropout 0.5 --model_mode static --data_name SST-2
[11]:
$ python sentiment_analysis_cnn.py --gpu 0 --batch_size 50 --epochs 200 --dropout 0.5 --model_mode non-static --data_name SST-2
[12]:
$ python sentiment_analysis_cnn.py --gpu 0 --batch_size 50 --epochs 200 --dropout 0.5 --model_mode multichannel --data_name SST-2
[13]:
$ python sentiment_analysis_cnn.py --gpu 0 --batch_size 50 --epochs 200 --dropout 0.5 --model_mode rand --data_name Subj
[14]:
$ python sentiment_analysis_cnn.py --gpu 0 --batch_size 50 --epochs 200 --dropout 0.5 --model_mode static --data_name Subj
[15]:
$ python sentiment_analysis_cnn.py --gpu 0 --batch_size 50 --epochs 200 --dropout 0.5 --model_mode non-static --data_name Subj
[16]:
$ python sentiment_analysis_cnn.py --gpu 0 --batch_size 50 --epochs 200 --dropout 0.5 --model_mode multichannel --data_name Subj
[17]:
$ python sentiment_analysis_cnn.py --gpu 0 --batch_size 50 --epochs 200 --dropout 0.5 --model_mode rand --data_name TREC
[18]:
$ python sentiment_analysis_cnn.py --gpu 0 --batch_size 50 --epochs 200 --dropout 0.5 --model_mode static --data_name TREC
[19]:
$ python sentiment_analysis_cnn.py --gpu 0 --batch_size 50 --epochs 200 --dropout 0.5 --model_mode non-static --data_name TREC
[20]:
$ python sentiment_analysis_cnn.py --gpu 0 --batch_size 50 --epochs 200 --dropout 0.5 --model_mode multichannel --data_name TREC
[21]:
$ python sentiment_analysis_cnn.py --gpu 0 --batch_size 50 --epochs 200 --dropout 0.5 --model_mode rand --data_name CR
[22]:
$ python sentiment_analysis_cnn.py --gpu 0 --batch_size 50 --epochs 200 --dropout 0.5 --model_mode static --data_name CR
[23]:
$ python sentiment_analysis_cnn.py --gpu 0 --batch_size 50 --epochs 200 --dropout 0.5 --model_mode non-static --data_name CR
[24]:
$ python sentiment_analysis_cnn.py --gpu 0 --batch_size 50 --epochs 200 --dropout 0.5 --model_mode multichannel --data_name CR
[25]:
$ python sentiment_analysis_cnn.py --gpu 0 --batch_size 50 --epochs 200 --dropout 0.5 --model_mode rand --data_name MPQA
[26]:
$ python sentiment_analysis_cnn.py --gpu 0 --batch_size 50 --epochs 200 --dropout 0.5 --model_mode static --data_name MPQA
[27]:
$ python sentiment_analysis_cnn.py --gpu 0 --batch_size 50 --epochs 200 --dropout 0.5 --model_mode non-static --data_name MPQA
[28]:
$ python sentiment_analysis_cnn.py --gpu 0 --batch_size 50 --epochs 200 --dropout 0.5 --model_mode multichannel --data_name MPQA