From 517eb53cd2913797473db8d20defe75a88e6de07 Mon Sep 17 00:00:00 2001 From: Pavan Mandava Date: Fri, 31 Jul 2020 20:04:55 +0200 Subject: [PATCH] WIP : README Documentation --- README.md | 79 +++++++++++++++--- plots/confusion_matrix_plot.png | Bin 0 -> 33291 bytes ...ific Publications.pdf => scicite_paper.pdf | Bin testing/model_testing.py | 13 +-- 4 files changed, 75 insertions(+), 17 deletions(-) create mode 100644 plots/confusion_matrix_plot.png rename Structural Scaffolds for Citation Intent Classification in Scientific Publications.pdf => scicite_paper.pdf (100%) diff --git a/README.md b/README.md index f1140af..08ffa20 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,74 @@ -# citation-analysis -Project repo for Computational Linguistics Team Laboratory at the University of Stuttgart +# Citation Intent Classification +Project repo for Computational Linguistics Team Lab at the University of Stuttgart. +## Introduction +This repository contains code and datasets for classifying citation intents in research papers. -### **Evaluation** -we plan to implement and use ***f1_score*** metric for evaluation of our classifier +We implemented 3 different classifiers and evaluated the results: -> F1 score is a weighted average of Precision and Recall(or Harmonic Mean between Precision and Recall). -> The formula for F1 Score is: -> F1 = 2 * (precision * recall) / (precision + recall) + - Perceptron Classifier - Baseline (Implemented from scratch) + - Feedforward Neural Network Classifier (using [PyTorch](https://pytorch.org/)) + - BiLSTM + Attention with ELMo Embeddings (using [AllenNLP](https://allennlp.org/) library) +This README documentation focuses on running the code base, training the models and predictions. For more information about our project work and detailed error analysis, check [this](https://www.overleaf.com/project/5f1b0e8a6d0fb80001ceb5eb) report. +For more information on the Citation Intent Classification in Scientific Publications, follow this [link](https://arxiv.org/pdf/1904.01608.pdf) to the original published paper and the [GitHub repo](https://github.com/allenai/scicite) + +## Environment & Setup +TODO + +## Data +We have 3 different intents/classes in the dataset: + + - background (background information) + - method (use of methods) + - result (comparing results) + +**Dataset Class distribution:** +| | background | method | result | +|:---|:---:|:---:|:---:| +| train | 4.8 K | 2.3 K | 1.1 K | +| test | 1 K | 0.6 K | 0.2 K | + +## Methods (Classification) +### 1) Perceptron Classifier (Baseline Classifier) +We implemented [Perceptron](https://en.wikipedia.org/wiki/Perceptron) as a baseline classifier, from scratch (including evaluation). Perceptron is an algorithm for supervised learning of classification. It's a Linear and a Binary Classifier, which means it can only decide whether or not an input feature belongs to some specific class and also it's only capable of learning linearly separable patterns. ```python -eval.metrics.f1_score(y_true, y_pred, labels, average) +class Perceptron: + def __init__(self, label: str, weights: dict, theta_bias: float): + def score(self, features: list): + def update_weights(self, features: list, learning_rate: float, penalize: bool, reward: bool): + +class MultiClassPerceptron: + def __init__(self, epochs: int = 5000, learning_rate: float = 1, random_state: int = 42) + def fit(self, X_train: list, labels: list) + def predict(self, X_test: list) ``` -#### Parameters: -**y_true** : 1-d array or list of gold class values -**y_pred** : 1-d array or list of estimated values returned by a classifier -**labels** : list of labels/classes +Since we have 3 different classes for Classification, we create a Perceptron object for each class. Each Perceptron has score and update functions. During training, for a set of input features it takes the score from the Perceptron for each label and assigns the label with max score(for all the data instances). It compares the assigned label with the true label and decides whether or not to update the weights (with some learning rate). + +Check the source [code](/blob/master/classifier/linear_model.py) for more details on the implementation of Perceptron Classifier. + +#### Running the Model + +> `(citation-env) [user@server citation-analysis]$ python -m testing.model_testing` + +[link](/blob/master/testing/model_testing.py) to the source code. All the Hyperparameters can be modified to experiment with. + +**Evaluation** +we used ***f1_score*** metric for evaluation of our baseline classifier. + +> F1 score is a weighted average of Precision and Recall(or Harmonic Mean between Precision and Recall). +> The formula for F1 Score is: +> F1 = 2 * (precision * recall) / (precision + recall) + +```python +eval.metrics.f1_score(y_true, y_pred, labels, average) +``` +**Parameters**: +**y_true** : 1-d array or list of gold class values +**y_pred** : 1-d array or list of estimated values returned by a classifier +**labels** : list of labels/classes **average**: string - [None, 'micro', 'macro'] If None, the scores for each class are returned. + +[Link](/blob/master/eval/metrics.py) to the metrics source code. + +### Results diff --git a/plots/confusion_matrix_plot.png b/plots/confusion_matrix_plot.png new file mode 100644 index 0000000000000000000000000000000000000000..3db13a4dc735a6e0b65156c2502e762107bcbbaf GIT binary patch literal 33291 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