{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Визуализация моделей ArtmModel прямо в ноутбуке" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Постановка проблемы\n", "\n", "Основная идея нового Python API — интерактивная работа с тематическими моделями. При интерактивной работе пользователь (исследователь) может последовательно выполнять различные действия с тематической моделью:\n", " - делать итерации EM-алгоритма,\n", " - менять параметры модели и обучения,\n", " - оценивать метрики качества,\n", " - смотреть на внутренности модели.\n", "\n", "Пользователь может повторять эти действия в любом порядке несколько раз, размышляя в промежутках о существе мира и неполноценности человеческого языка.\n", "\n", "Здесь мы акцентируем внимание на пункте **смотреть на внутренности модели**. Как можно *посмотреть* на тематическую модель? Один из способов — интерактивная визуализация [LDAvis](https://github.com/cpsievert/LDAvis).\n", "\n", "Давайте добавим в новое API функции для немедленной визуализации тематической модели при помощи LDAvis, чтобы это стало неотъемлемой частью инструментария исследователя." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Решение: метод `ArtmModel.visualize()`\n", "\n", "`ArtmModel` — изюминка нового Python API, напоминает класс модели из [SciKit-Learn](http://scikit-learn.org/), позволяет работать с моделью как с изменяющимся объектом, выполняя основные операции в одну строчку.\n", "\n", "В каждый момент времени объект класса `ArtmModel` содержит в себе текущее состояние тематической модели. Добавим метод для построения визуализации:\n", "```\n", " model.visualize()\n", "```\n", "\n", "Далее будет описан прототип этого метода (proof-of-concept)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Реализация\n", "\n", "Для того чтобы все работало требуется:\n", " - поставить Python-библиотеку [Jinja2](http://jinja.pocoo.org/) \n", " - в одном каталоге с ноутбуком лежал файл `ldavis.js` (эту необходимость нужно устранить в будущем)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from visualization_ldavis import TopicModelVisualization\n", "\n", "class ArtmModel(object):\n", " \n", " def visualize(self):\n", " import json\n", " with open('lda.json') as f:\n", " data = json.load(f)\n", " return TopicModelVisualization(data)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Пример работы" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "model = ArtmModel()\n", "# ... дальше мы типо работаем с моделью ..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "В какой-то момент необходимо *посмотреть* на модель:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "\n", "\n", "\n", "" ], "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "vis = model.visualize()\n", "vis" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "А затем сохранить эту визуализацию в отдельный файл и отправить коллегам по почте:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "vis.to_file('model_visualization.html', title='My Cool Model')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Новый файл `model_visualization.html` не зависит от файла `ldavis.js` и его можно просто открыть в браузере." ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.8" } }, "nbformat": 4, "nbformat_minor": 0 }