Source: http://snap.stanford.edu/class/cs224w-2017/projects/cs224w-52-final.pdf