Embedding has been hot in recent years partly due to the success of Word2Vec, (see demo in my previous entry) although the idea has been around in academia for more than a decade. The idea is to transform a vector of integers into continuous, or embedded, representations. Keras, a Python package that implements neural network models (including the ANN, RNN, CNN etc.) by wrapping Theano or TensorFlow, implemented it, as shown in the example below (which converts a vector of 200 features into a continuous vector of 10):
from keras.layers import Embedding from keras.models import Sequential # define and compile the embedding model model = Sequential() model.add(Embedding(200, 10, input_length=1)) model.compile('rmsprop', 'mse') # optimizer: rmsprop; loss function: mean-squared error
We can then convert any features from 0 to 199 into vectors of 20, as shown below:
import numpy as np model.predict(np.array([10, 90, 151]))
array([[[ 0.02915354, 0.03084954, -0.04160764, -0.01752155, -0.00056815, -0.02512387, -0.02073313, -0.01154278, -0.00389587, -0.04596512]], [[ 0.02981793, -0.02618774, 0.04137352, -0.04249889, 0.00456919, 0.04393572, 0.04139435, 0.04415271, 0.02636364, -0.04997493]], [[ 0.00947296, -0.01643104, -0.03241419, -0.01145032, 0.03437041, 0.00386361, -0.03124221, -0.03837727, -0.04804075, -0.01442516]]])
Of course, one must not omit a similar algorithm called GloVe, developed by the Stanford NLP group. Their codes have been wrapped in both Python (package called glove) and R (library called text2vec).
Besides Word2Vec, there are other word embedding algorithms that try to complement Word2Vec, although many of them are more computationally costly. Previously, I introduced LDA2Vec in my previous entry, an algorithm that combines the locality of words and their global distribution in the corpus. And in fact, word embedding algorithms with a similar ideas are also invented by other scientists, as I have introduced in another entry.
However, there are word embedding algorithms coming out. Since most English words carry more than a single sense, different senses of a word might be best represented by different embedded vectors. Incorporating word sense disambiguation, a method called sense2vec has been introduced by Trask, Michalak, and Liu. (arXiv:1511.06388). Matthew Honnibal wrote a nice blog entry demonstrating its use.
There are also other related work, such as wang2vec that is more sensitive to word orders.
Big Bang Theory (Season 2, Episode 5): Euclid Alternative
DMV staff: Application?
Sheldon: I’m actually more or a theorist.
Note: feature image taken from Big Bang Theory (CBS).
- Kwan-yuet Ho, “Toying with Word2Vec,” WordPress (2015).
- GloVe (Python: glove; R: text2vec)
- Kwan-yuet Ho, “LDA2Vec: a hybrid of LDA and Word2Vec,” WordPress (2016).
- Kwan-yuet Ho, “Local and Global: Words and Topics,” WordPress (2016).
- Andrew Trask, Phil Michalak, John Liusense2vec – A Fast and Accurate Method for Word Sense Disambiguation In Neural Word Embeddings,” arXiv:1511.06388 (2015).
- sense2vec on Github.
- Matthew Honnibal, “Sense2Vec with spaCy and Gensim,” Spacy (2016).