Меня зовут Джордж, я технический предприниматель, получивший образование в Стэнфорде, и работаю с искусственным интеллектом. Инженер. Подпишитесь на меня здесь, на канале George Davila Durandal или на LinkedIn, чтобы узнать больше о технологиях и коде.

На прошлой неделе команда специалистов по обработке данных в Anaconda, компании, разработавшей знаменитую систему управления пакетами Python, известную как conda, выпустила библиотеку, известную как PyScript. PyScript нелепо претендует на то, чтобы вставить код Python прямо в HTML а-ля

<html>
   <head>
     <title>PyScript Test</title>
     <script defer src="https://pyscript.net/alpha/pyscript.js">
     </script>
   </head>
   <py-script> 
   print('Hello world welcome to PyScript') 
   </py-script>
</html>

Да, это настоящая функциональная веб-страница.

Почему?

Увидев приведенный выше пример, вы можете сделать вывод, что команда специалистов по обработке и анализу данных Anaconda сошла с ума. Но на самом деле PyScript представляет собой весьма полезное новшество.

Недавно произошла малоизвестная война. Различные фреймворки борются за то, чтобы стать интерфейсом для машинного обучения и науки о данных.

Большинство специалистов по данным и инженеров по машинному обучению являются бэкэнд-инженерами. Большинство инженеров машинного обучения, занимающихся построением моделей, выполняют свою повседневную работу на Python, а меньшая часть использует C++. Большинство специалистов по данным выполняют свою повседневную работу в Python, R, Julia или даже в Excel. Относительно немногие свободно владеют интерфейсными технологиями. Даже те, кто это делает, могут найти подрывной и трудоемкий процесс создания надлежащего внешнего интерфейса для своих моделей.

Такие фреймворки, как Streamlit, Gradio и PyWebIO, пытались преодолеть этот разрыв. Все эти фреймворки являются питоническими интерфейсами, что позволяет нам писать веб-интерфейсы непосредственно на питоне (и, что очень важно, в удобной для него манере). Вы можете написать все, от простых калькуляторов до демонстраций переноса стиля изображения, используя эти фреймворки, даже не покидая Python. Каждый из них имеет свои преимущества. Streamlit чрезвычайно пифоничен, красиво оформлен и с ним легко взаимодействовать. Gradio автоматически подключается к Интернету, что упрощает развертывание приложения с ноутбука. Но у этих фреймворков есть острая проблема, заключающаяся в том, что их нелегко развернуть и/или интегрировать в интерфейсы JS. т.е. Я не могу просто вставить на свой веб-сайт кнопку с надписью Нажмите на меня, чтобы запустить этот скрипт Python в режиме установил и забыл. По крайней мере, вам нужно где-то разместить скрипт python (Pythonanywhere — довольно хороший и простой облачный хост для этого варианта использования, но он все еще требует немалой настройки и/или затрат).

С другой стороны, несмотря на то, что замечательный фреймворк Tensorflow.js технически является бэкенд-фреймворком, он позволяет очень легко создавать интерфейсы машинного обучения, которые работают на пользовательских устройствах через WASM и WebGL. ML5.js — это особенно замечательная квинтэссенция этой простоты внешнего интерфейса, поскольку вы можете развертывать модели ML, такие же сложные, как модели сегментации человека, в браузере всего 70 строк кода. Увы, у этого все еще есть проблемы: 1) он написан на javascript и 2) медленнее, чем его аналог python tensorflow (который использует C, а не JS на бэкэнде). Поэтому, если инженер Python изучил Tensorflow.js только для того, чтобы написать веб-демонстрацию, ему все равно пришлось бы развертывать окончательную модель на Python, тратя впустую время и ресурсы. И в любом случае многие модели машинного обучения написаны на sklearn, поэтому возникает проблема несовместимости как языка, так и фреймворка.

PyScript решает некоторые из этих проблем. Он запускает python в браузере только с простого сервера. Таким образом, вы можете разместить демоверсию ML/DS на бесплатном веб-сайте github.io, как показано ниже. Мало того, вы можете легко передавать входные и выходные данные из python в javascript или html или наоборот. На практике это означает, что вы можете встроить модель Python на свой веб-сайт и не слишком беспокоиться о хостинге или обслуживании.

Кодирование в PyScript



GitHub — pyscript/pyscript
PyScript — это Pythonic, альтернатива Scratch, JSFiddle или другим «простым в использовании
платформам программирования, превращающая Интернет в…github. ком»



Предполагается, что PyScript может запускать python прямо в вашем html. Итак, следующий JavaScript

<script> 
document.write('Hello World');
</script>

И следующий PyScript

<py-script> 
print('Hello World') 
</py-script>

Получите эквивалентные результаты. Если вы похожи на меня, вы, вероятно, предполагали, что pyscript print() будет эквивалентен JS console.log(), и действительно, это то, что я предполагал, когда впервые писал примеры выше. Но, по-видимому, в настоящее время это не так (вероятно, это должно измениться, как я покажу ниже, мы можем в любом случае назначить вывод python элементу html, поэтому print=console.log, вероятно, будет более полезным соотношением).

Вот рабочая демонстрация приведенного выше примера hello world:



Для более сложной демонстрации мы можем взглянуть на пример, написанный Tirthajyoti Sarkar, который использует библиотеки Python, такие как numpy и matplotlib, для создания случайных распределений и графиков:



Мы должны отметить фрагмент кода

<py-env>      
- matplotlib 
</py-env>

Это настройка среды, эффективно действующая как обычно «pip install matplotlib». Numpy — это стандартная библиотека Python, поэтому кажется, что pyscript поставляется с конфигурацией Python по умолчанию, и мы импортируем внешние библиотеки, включая их в ‹py-env›.

Далее мы можем наблюдать, что скрипт python извлекает значения из элементов html и передает цифры обратно в качестве выходных данных, используя собственную функцию элемента PyScript.

<py-script>
import numpy as np
import matplotlib.pyplot as plt  
out = Element("outputDiv")
input_num = Element("how-many")
dist_type = Element("dist").value
out2 = Element("outputDiv2")
...
out.write(f"Here are {n} random variates from Normal distribution: {r}") 
...
out2.write(fig1)
</py-script>

Чтобы увидеть, как он справляется с более сложными библиотеками Python, я попытался развернуть пример кластеризации k-means команды scikit-learn PyScript на моей странице github.io:



Скорее всего, для загрузки приведенной выше страницы потребуется некоторое время, но когда это произойдет, вы увидите, что библиотека PyScript способна размещать более сложный код. Чтобы разместить это, мне нужно было загрузить только один HTML-файл на github. Его простота — хорошая передышка от громоздкого управления средой, обычно связанного с машинным обучением.

Так что у нас это! Способ простой интеграции скрипта Python во внешний интерфейс. В частности, библиотека scikit-learn является важной опорой современного машинного обучения и науки о данных. Таким образом, возможность легко размещать модели sklearn и делиться ими вполне может сделать PyScript фаворитом среди специалистов по данным, особенно тех, кто хочет размещать проекты или разрабатывать доказательства концепций. Целые веб-сайты могут быть даже построены вокруг этого. Предположим, например, что вы строите модель sklearn, которая сообщает кому-то, сколько отжиманий нужно сделать, исходя из его роста и веса. Вместо развертывания модели Python в облаке и доступа к ней через API через JQuery — как вы сделали бы это неделю назад — теперь вы можете использовать PyScript. PyScript, вероятно, останется более медленным из двух вариантов в обозримом будущем; поэтому модели корпоративного уровня должны быть правильно развернуты и организованы. Но это довольно хорошо заполняет эту золотую середину представления миру минимально жизнеспособной модели.

Примечания

Бритон существует уже довольно давно. Я видел его около года назад, но быстро обнаружил, что он не адаптирован для современных вариантов использования ML/DS. Наоборот, кажется, что PyScript был создан с нуля с учетом этих областей. Ему меньше недели, и его уже можно использовать со sklearn.

Судя по моим тестам, Tensorflow.js намного быстрее, чем PyScript, когда дело доходит до выводов в браузере.