Train emoji embeddings based on emoji descriptions.

Overview

emoji2vec

This is my attempt to train, visualize and evaluate emoji embeddings as presented by Ben Eisner, Tim Rocktรคschel, Isabelle Augenstein, Matko Boลกnjak, and Sebastian Riedel in their paper [1]. Most of their results are used here to build an equivalently robust model in Keras, including the rather simple training process which is solely based on emoji descriptions, but instead of using word2vec (as it was originally proposed) this version uses global vectors [2].

Overview

  • src/ contains the code used to process the emoji descriptions as well as training and evaluating the emoji embeddings
  • res/ contains the positive and negative samples used to train the emoji embeddings (originated here) as well as a list of emoji frequencies; it should also contain the global vectors in a directory called glove/ (for practical reasons they are not included in the repository, but downloading instructions are provided below)
  • models/ contains some pretrained emoji2vec models
  • plots/ contains some visualizations for the obtained emoji embeddings

Dependencies

The code included in this repository has been tested to work with Python 3.5 on an Ubuntu 16.04 machine, using Keras 2.0.8 with Tensorflow as the backend.

List of requirements

Implementation notes

Following Eisner's paper [1], training is based on 6088 descriptions of 1661 distinct emojis. Since all descriptions are valid, we randomly sample negative instances so that there is one positive example per negative example. This approach proved to produce the best results, as stated in the paper.

There are two architectures on which emoji vectors have been trained:

  • one based on the sum of the individual word vectors of the emoji descriptions (taken from the paper)

emoji2vec

  • the other feeds the actual pretrained word embeddings to an LSTM layer (this is my own addition which can be used by setting use_lstm=True i.e -l=True)

emoji2vec_lstm

Not like in the referenced paper, we used global vectors which need to be downloaded and placed in the res/glove directory. You can either download them from the original GloVe page or you can run these bash commands:

! wget -q http://nlp.stanford.edu/data/glove.6B.zip
! unzip -q -o glove.6B.zip

Arguments

All the hyperparameters can be easily changed through a command line interface as described below:

  • -d: embedding dimension for both the global vectors and the emoji vectors (default 300)
  • -b: batch size (default 8)
  • -e: number of epochs (default 80, but we always perform early-stopping)
  • -dr: dropout rate (default 0.3)
  • -lr: learning rate (default 0.001, but we also have a callback to reduce learning rate on plateau)
  • -u: number of hidden units in the dense layer (default 600)
  • -l: boolean to set or not the LSTM architecture (default is False)
  • -s: maximum sequence length (needed only if use_lstm=True, default 10, but the actual, calculated maximum length is 27 so a post-truncation or post-padding is applied to the word sequences)

Training your own emoji2vec

To train your own emoji embeddings, run python3 emoji2vec.py and use the arguments described above to tune your hyperparameters.

Here is an example that will train 300-dimensional emoji vectors using the LSTM-based architecture with a maximum sequence length of 20, batch size of 8, 40 epochs, a dropout of 0.5, a learning rate of 0.0001 and 300 dense units:

python3 emoji2vec.py -d=300 -b=8 -e=40 -dr=0.5 -lr=0.0001 -u=300 -l=True -s=20 

The script given above will create and save several files:

  • in models/ it will save the weights of the model (.h5 format), a .txt file containing the trained embeddings and a .csv file with the x, y emoji coordinates that will be used to produce a 2D visualization of the emoji2vec vector space
  • in plots/ it will save two plots of the historical accuracy and loss reached while training as well as a 2D plot of the emoji vector space
  • it will also perform an analogy-task to evaluate the meaning behind the trained vectorized emojis (printed on the standard output)

Using the pre-trained models

Pretrained emoji embeddings are available for download and usage. There are 100 and 300 dimensional embeddings available in this repository, but any dimension can be trained manually (you need to provide word embeddings of the same dimension, though). The complete emoji2vec weights, visualizations and embeddings (for different dimensions and performed on both architectures) are available for download at this link.

For the pre-trained embeddings provided in this repository (trained on the originally proposed architecture), the following hyperparameter settings have been made (respecting, in large terms, the original authors' decisions):

  • dim: 100 or 300
  • batch: 8
  • epochs: 80 (usually, early stopping around the 30-40 epochs)
  • dense_units: 600
  • dropout: 0.0
  • learning_rate: 0.001
  • use_lstm: False

For the LSTM-based pre-trained embeddings provided in the download link, the following hyperparameter settings have been made:

  • dim: 50, 100, 200 or 300
  • batch: 8
  • epochs: 80 (usually, early stopping around the 40-50 epochs)
  • dense_units: 600
  • dropout: 0.3
  • learning_rate: 0.0001
  • use_lstm: True
  • seq_length: 10

Example code for how to use emoji embeddings, after downloading them and setting up their dimension (embedding_dim):

from utils import load_vectors

embeddings_filename = "/models/emoji_embeddings_%dd.txt" % embedding_dim
emoji2vec = utils.load_vectors(filename=embeddings_filename)

# Get the embedding vector of length embedding_dim for the dog emoji
dog_vector = emoji2vec['๐Ÿ•']

Visualization

A nice visualization of the emoji embeddings has been obtained by using t-SNE to project from N-dimensions into 2-dimensions. For practical purposes, only a fraction of the available emojis has been projected (the most frequent ones, extracted according to emoji_frequencies.txt).

Here, the top 200 most popular emojis have been projected in a 2D space:

emoji2vec_vis

Making emoji analogies

The trained emoji embeddings are evaluated on an analogy task, in a similar manner as word embeddings. Because these analogies are broadly interpreted as similarities between pairs of emojis, the embeddings are useful and extendible to other tasks if they can capture meaningful linear relationships between emojis directly from the vector space [1].

According to ACL's wiki page, a proportional analogy holds between two word pairs: a-a* :: b-b* (a is to a* as b is to b*). For example, Tokyo is to Japan as Paris is to France and a king is to a man as a queen is to a woman.

Therefore, in the current analogy task, we aim to find the 5 most suitable emojis to solve a - b + c = ? by measuring the cosine distance between the trained emoji vectors.

Here are some of the analogies obtained:

๐Ÿ‘‘ - ๐Ÿšน + ๐Ÿšบ = [' ๐Ÿ‘ธ ', ' ๐Ÿ‡ฎ๐Ÿ‡ฑ ', ' ๐Ÿ‘ฌ ', ' โ™‹ ', ' ๐Ÿ’Š ']

๐Ÿ’ต - ๐Ÿ‡บ๐Ÿ‡ธ + ๐Ÿ‡ช๐Ÿ‡บ = [' ๐Ÿ‡ฆ๐Ÿ‡ด ', ' ๐Ÿ‡ธ๐Ÿ‡ฝ ', ' ๐Ÿ‡ฎ๐Ÿ‡ช ', ' ๐Ÿ‡ญ๐Ÿ‡น ', ' ๐Ÿ‡ฐ๐Ÿ‡พ ']

๐Ÿ•ถ - โ˜€ + โ›ˆ = [' ๐Ÿ‘ž ', ' ๐Ÿ  ', ' ๐Ÿ– ', ' ๐Ÿ•’ ', ' ๐ŸŽ ']

โ˜‚ - โ›ˆ + โ˜€ = [' ๐ŸŒซ ', '๐Ÿ’…๐Ÿพ', ' ๐ŸŽ ', ' ๐Ÿ“› ', ' ๐Ÿ‡ง๐Ÿ‡ฟ ']

๐Ÿ… - ๐Ÿˆ + ๐Ÿ• = [' ๐Ÿ˜ฟ ', ' ๐Ÿ ', ' ๐Ÿ‘ฉ ', ' ๐Ÿฅ ', ' ๐Ÿˆ ']

๐ŸŒƒ - ๐ŸŒ™ + ๐ŸŒž = [' ๐ŸŒš ', ' ๐ŸŒ— ', ' ๐Ÿ˜˜ ', '๐Ÿ‘ถ๐Ÿผ', ' โ˜น ']

๐Ÿ˜ด - ๐Ÿ›Œ + ๐Ÿƒ = [' ๐ŸŒž ', ' ๐Ÿ’ ', ' ๐ŸŒ ', ' โ˜ฃ ', ' ๐Ÿ˜š ']

๐Ÿฃ - ๐Ÿฏ + ๐Ÿฐ = [' ๐Ÿ’ฑ ', '๐Ÿ‘๐Ÿฝ', ' ๐Ÿ‡ง๐Ÿ‡ท ', ' ๐Ÿ”Œ ', ' ๐Ÿ„ ']

๐Ÿ’‰ - ๐Ÿฅ + ๐Ÿฆ = ['๐Ÿ’‡๐Ÿผ', ' โœ ', ' ๐ŸŽข ', ' ๐Ÿ“ฒ ', ' โ˜ช ']

๐Ÿ’Š - ๐Ÿฅ + ๐Ÿฆ = [' ๐Ÿ“ป ', ' ๐Ÿ˜ ', ' ๐ŸšŒ ', ' ๐Ÿˆบ ', '๐Ÿ‡ผ']

๐Ÿ˜€ - ๐Ÿ’ฐ + ๐Ÿค‘ = ['๐Ÿšต๐Ÿผ', ' ๐Ÿ‡น๐Ÿ‡ฒ ', ' ๐ŸŒ ', ' ๐ŸŒ ', ' ๐ŸŽฏ ']

License

The source code and all my pretrained models are licensed under the MIT license.

References

[1] Ben Eisner, Tim Rocktรคschel, Isabelle Augenstein, Matko Boลกnjak, and Sebastian Riedel. โ€œemoji2vec: Learning Emoji Representations from their Description,โ€ in Proceedings of the 4th International Workshop on Natural Language Processing for Social Media at EMNLP 2016 (SocialNLP at EMNLP 2016), November 2016.

[2] Jeffrey Pennington, Richard Socher, and Christopher D. Manning. "GloVe: Global Vectors for Word Representation," in Proceedings of the 2014 Conference on Empirical Methods In Natural Language Processing (EMNLP 2014), October 2014.

Owner
Miruna Pislar
Miruna Pislar
PyTorch implementation of "ContextNet: Improving Convolutional Neural Networks for Automatic Speech Recognition with Global Context" (INTERSPEECH 2020)

ContextNet ContextNet has CNN-RNN-transducer architecture and features a fully convolutional encoder that incorporates global context information into

Sangchun Ha 24 Nov 24, 2022
๐Ÿ”ฅ๐Ÿ”ฅHigh-Performance Face Recognition Library on PaddlePaddle & PyTorch๐Ÿ”ฅ๐Ÿ”ฅ

face.evoLVe: High-Performance Face Recognition Library based on PaddlePaddle & PyTorch Evolve to be more comprehensive, effective and efficient for fa

Zhao Jian 3.1k Jan 02, 2023
Code for the paper: Sketch Your Own GAN

Sketch Your Own GAN Project | Paper | Youtube Our method takes in one or a few hand-drawn sketches and customizes an off-the-shelf GAN to match the in

677 Dec 28, 2022
LV-BERT: Exploiting Layer Variety for BERT (Findings of ACL 2021)

LV-BERT Introduction In this repo, we introduce LV-BERT by exploiting layer variety for BERT. For detailed description and experimental results, pleas

Weihao Yu 14 Aug 24, 2022
Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data

Real-ESRGAN Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data Ported from https://github.com/xinntao/Real-ESRGAN Depend

Holy Wu 44 Dec 27, 2022
Official and maintained implementation of the paper "OSS-Net: Memory Efficient High Resolution Semantic Segmentation of 3D Medical Data" [BMVC 2021].

OSS-Net: Memory Efficient High Resolution Semantic Segmentation of 3D Medical Data Christoph Reich, Tim Prangemeier, ร–zdemir Cetin & Heinz Koeppl | Pr

Christoph Reich 23 Sep 21, 2022
Exact Pareto Optimal solutions for preference based Multi-Objective Optimization

Exact Pareto Optimal solutions for preference based Multi-Objective Optimization

Debabrata Mahapatra 40 Dec 24, 2022
[BMVC 2021] Official PyTorch Implementation of Self-supervised learning of Image Scale and Orientation Estimation

Self-Supervised Learning of Image Scale and Orientation Estimation (BMVC 2021) This is the official implementation of the paper "Self-Supervised Learn

Jongmin Lee 17 Nov 10, 2022
CvT-ASSD: Convolutional vision-Transformerbased Attentive Single Shot MultiBox Detector (ICTAI 2021 CCF-C ไผš่ฎฎ)The 33rdย IEEE International Conference on Tools with Artificial Intelligence

CvT-ASSD including extra CvT, CvT-SSD, VGG-ASSD models original-code-website: https://github.com/albert-jin/CvT-SSD new-code-website: https://github.c

้‡‘ไผŸๅผบ -ไธŠๆตทๅคงๅญฆไบบๅทฅๆ™บ่ƒฝๅฐๆธฃๆธฃ~ 5 Mar 07, 2022
Least Square Calibration for Peer Reviews

Least Square Calibration for Peer Reviews Requirements gurobipy - for solving convex programs GPy - for Bayesian baseline numpy pandas To generate p

Sigma <a href=[email protected]"> 1 Nov 01, 2021
Object tracking and object detection is applied to track golf puts in real time and display stats/games.

Putting_Game Object tracking and object detection is applied to track golf puts in real time and display stats/games. Works best with the Perfect Prac

Max 1 Dec 29, 2021
Non-Imaging Transient Reconstruction And TEmporal Search (NITRATES)

Non-Imaging Transient Reconstruction And TEmporal Search (NITRATES) This repo contains the full NITRATES pipeline for maximum likelihood-driven discov

13 Nov 08, 2022
Styled Augmented Translation

SAT Style Augmented Translation Introduction By collecting high-quality data, we were able to train a model that outperforms Google Translate on 6 dif

139 Dec 29, 2022
A pre-trained language model for social media text in Spanish

RoBERTuito A pre-trained language model for social media text in Spanish READ THE FULL PAPER Github Repository RoBERTuito is a pre-trained language mo

25 Dec 29, 2022
Code for ICCV 2021 paper: ARAPReg: An As-Rigid-As Possible Regularization Loss for Learning Deformable Shape Generators..

ARAPReg Code for ICCV 2021 paper: ARAPReg: An As-Rigid-As Possible Regularization Loss for Learning Deformable Shape Generators.. Installation The cod

Bo Sun 132 Nov 28, 2022
Voxel Transformer for 3D object detection

Voxel Transformer This is a reproduced repo of Voxel Transformer for 3D object detection. The code is mainly based on OpenPCDet. Introduction We provi

173 Dec 25, 2022
Official code of the paper "Expanding Low-Density Latent Regions for Open-Set Object Detection" (CVPR 2022)

OpenDet Expanding Low-Density Latent Regions for Open-Set Object Detection (CVPR2022) Jiaming Han, Yuqiang Ren, Jian Ding, Xingjia Pan, Ke Yan, Gui-So

csuhan 64 Jan 07, 2023
How to train a CNN to 99% accuracy on MNIST in less than a second on a laptop

Training a NN to 99% accuracy on MNIST in 0.76 seconds A quick study on how fast you can reach 99% accuracy on MNIST with a single laptop. Our answer

Tuomas Oikarinen 42 Dec 10, 2022
Simple Baselines for Human Pose Estimation and Tracking

Simple Baselines for Human Pose Estimation and Tracking News Our new work High-Resolution Representations for Labeling Pixels and Regions is available

Microsoft 2.7k Jan 05, 2023
Source code for the paper: Variance-Aware Machine Translation Test Sets (NeurIPS 2021 Datasets and Benchmarks Track)

Variance-Aware-MT-Test-Sets Variance-Aware Machine Translation Test Sets License See LICENSE. We follow the data licensing plan as the same as the WMT

NLP2CT Lab, University of Macau 5 Dec 21, 2021