{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# How to evaluate embeddings using linear algebra and analogies " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The dimensions of the word and phrase vectors do not have an explicit meaning. However, the embeddings encode similar usage as proximity in the latent space in a way that carries over to semantic relationships. This results in the interesting properties that analogies can be expressed by adding and subtracting word vectors.\n", "\n", "Just as words can be used in different contexts, they can be related to other words in different ways, and these relationships correspond to different directions in the latent space. Accordingly, there are several types of analogies that the embeddings should reflect if the training data permits.\n", "\n", "The word2vec authors provide a list of several thousand relationships spanning aspects of geography, grammar and syntax, and family relationships to evaluate the quality of embedding vectors (see directory [analogies](data/analogies))." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "## Imports" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2020-06-21T02:02:00.366112Z", "start_time": "2020-06-21T02:01:59.675597Z" }, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "%matplotlib inline\n", "from pathlib import Path\n", "import pandas as pd\n", "import numpy as np\n", "\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "" } }, "source": [ "### Settings" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2020-06-21T02:02:00.377200Z", "start_time": "2020-06-21T02:02:00.367549Z" }, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "sns.set_style('white')\n", "pd.set_option('float_format', '{:,.2f}'.format)\n", "np.random.seed(42)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2020-06-21T02:02:00.382459Z", "start_time": "2020-06-21T02:02:00.378877Z" } }, "outputs": [], "source": [ "analogy_path = Path('data', 'analogies-en.txt')" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2020-06-21T02:02:00.390451Z", "start_time": "2020-06-21T02:02:00.383658Z" } }, "outputs": [], "source": [ "def format_time(t):\n", " m, s = divmod(t, 60)\n", " h, m = divmod(m, 60)\n", " return f'{h:02.0f}:{m:02.0f}:{s:02.0f}'" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Evaluation: Analogies" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2020-06-21T02:02:00.476793Z", "start_time": "2020-06-21T02:02:00.391463Z" }, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "df = pd.read_csv(analogy_path, header=None, names=['category'], squeeze=True)\n", "categories = df[df.str.startswith(':')]\n", "analogies = df[~df.str.startswith(':')].str.split(expand=True)\n", "analogies.columns = list('abcd')" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2020-06-21T02:02:00.511818Z", "start_time": "2020-06-21T02:02:00.478472Z" }, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
categoryabcd
1: capital-common-countriesathensgreecebaghdadiraq
2: capital-common-countriesathensgreecebangkokthailand
3: capital-common-countriesathensgreecebeijingchina
4: capital-common-countriesathensgreeceberlingermany
5: capital-common-countriesathensgreecebernswitzerland
\n", "
" ], "text/plain": [ " category a b c d\n", "1 : capital-common-countries athens greece baghdad iraq\n", "2 : capital-common-countries athens greece bangkok thailand\n", "3 : capital-common-countries athens greece beijing china\n", "4 : capital-common-countries athens greece berlin germany\n", "5 : capital-common-countries athens greece bern switzerland" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.concat([categories, analogies], axis=1)\n", "df.category = df.category.ffill()\n", "df = df[df['a'].notnull()]\n", "df.head()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2020-06-21T02:02:00.529477Z", "start_time": "2020-06-21T02:02:00.513126Z" }, "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "analogy_cnt = df.groupby('category').size().sort_values(ascending=False).to_frame('n')\n", "analogy_example = df.groupby('category').first()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2020-06-21T02:02:00.540665Z", "start_time": "2020-06-21T02:02:00.530425Z" }, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nabcd
category
: capital-world8556abujanigeriaaccraghana
: city-in-state4242chicagoillinoishoustontexas
: gram6-nationality-adjective1640albaniaalbanianargentinaargentinean
: gram7-past-tense1560dancingdanceddecreasingdecreased
: gram8-plural1332bananabananasbirdbirds
: gram3-comparative1332badworsebigbigger
: gram4-superlative1122badworstbigbiggest
: gram5-present-participle1056codecodingdancedancing
: gram1-adjective-to-adverb992amazingamazinglyapparentapparently
: gram9-plural-verbs870decreasedecreasesdescribedescribes
: currency866algeriadinarangolakwanza
: gram2-opposite812acceptableunacceptableawareunaware
: family506boygirlbrothersister
: capital-common-countries506athensgreecebaghdadiraq
\n", "
" ], "text/plain": [ " n a b c \\\n", "category \n", ": capital-world 8556 abuja nigeria accra \n", ": city-in-state 4242 chicago illinois houston \n", ": gram6-nationality-adjective 1640 albania albanian argentina \n", ": gram7-past-tense 1560 dancing danced decreasing \n", ": gram8-plural 1332 banana bananas bird \n", ": gram3-comparative 1332 bad worse big \n", ": gram4-superlative 1122 bad worst big \n", ": gram5-present-participle 1056 code coding dance \n", ": gram1-adjective-to-adverb 992 amazing amazingly apparent \n", ": gram9-plural-verbs 870 decrease decreases describe \n", ": currency 866 algeria dinar angola \n", ": gram2-opposite 812 acceptable unacceptable aware \n", ": family 506 boy girl brother \n", ": capital-common-countries 506 athens greece baghdad \n", "\n", " d \n", "category \n", ": capital-world ghana \n", ": city-in-state texas \n", ": gram6-nationality-adjective argentinean \n", ": gram7-past-tense decreased \n", ": gram8-plural birds \n", ": gram3-comparative bigger \n", ": gram4-superlative biggest \n", ": gram5-present-participle dancing \n", ": gram1-adjective-to-adverb apparently \n", ": gram9-plural-verbs describes \n", ": currency kwanza \n", ": gram2-opposite unaware \n", ": family sister \n", ": capital-common-countries iraq " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "analogy_cnt.join(analogy_example)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "ExecuteTime": { "end_time": "2020-06-21T02:03:02.440216Z", "start_time": "2020-06-21T02:03:02.125152Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "analogy_cnt.join(analogy_example)['n'].sort_values().plot.barh(title='# Analogies by Category',\n", " figsize=(14, 6))\n", "sns.despine()\n", "plt.tight_layout()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.7" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": true, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": { "height": "47px", "left": "38px", "right": "1340px", "top": "66.5px", "width": "362px" }, "toc_section_display": true, "toc_window_display": true } }, "nbformat": 4, "nbformat_minor": 4 }