Slide 1

Slide 1 text

Стэк для машинного обучения на исходном коде Вадим Марковцев, source{d}

Slide 2

Slide 2 text

Machine learning on source code

Slide 3

Slide 3 text

Предпосылки  GitHub Машинное обучение хайп не думать Большие компании пишут кучу кода Пишем код так же как в 2000-х

Slide 4

Slide 4 text

twitter/mysql Tokutek/mysql-5.5 facebook/mysql-5.6 percona/percona-xtrabackup Tokutek/mariadb-5.5 percona/percona-server atcurtis/mariadb webscalesql/webscalesql-5.6 alibaba/AliSQL mysql/mysql-server Проекты, похожие на MariaDB/server?

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

Обнаружим похожий код • По стилю • По структуре • По именам И получим Глобальный граф  Лицензии  Рефакторинг

Slide 7

Slide 7 text

Еще пример: DeepCode.ai.

Slide 8

Slide 8 text

class foobar: def connecttoserver(self): myserverhost = globalconfig.server.host

Slide 9

Slide 9 text

class FooBar: def connect_to_server(self): myServerHost = globalConfig.server.host

Slide 10

Slide 10 text

• Предсказание имен классов, функций, переменных • Предсказание типов • Какие комментарии бессмысленны? • Какие комментарии прикольные?

Slide 11

Slide 11 text

Ваш код это место преступления • Идея: майнить историю разработки • Книга • codescene.io

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

Стэк для MLonCode

Slide 14

Slide 14 text

clone discover classify checkout filter parse analyze

Slide 15

Slide 15 text

Откуда брать данные • GHTorrent - все кроме самих репозиториев, 70GB • Public Git Archive - репозитории, 3TB • GitHub в Google BigQuery • rovers & borges - DIY

Slide 16

Slide 16 text

PGA • 270к siva файлов • Индекс в CSV Подробно в статье.

Slide 17

Slide 17 text

PGA индекс • URL • FILE_COUNT • LANGS (байты, строки, файлы) • COMMITS_[HEAD]_COUNT • BRANCHES_COUNT • LINES_COUNT (пустые, комментарии, код) • LICENSE

Slide 18

Slide 18 text

source{d} engine • Чтение siva для Spark • Классификация и парсинг • Открытый код - лицензия Apache • GitHub

Slide 19

Slide 19 text

source{d} engine >>> from sourced.engine import Engine >>> engine = Engine(spark, "/path/to/siva/files", "siva") >>> engine.repositories.references.head_ref \ .commits.tree_entries.blobs \ .classify_languages() \ .select("blob_id", "path", "lang") \ .show()

Slide 20

Slide 20 text

Как парсить • Регулярки - Pygments, highlight.js • Абстрактное синтаксическое дерево (AST) - ANTLR • Компиляция

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

 Universal AST • Более-менее одинаковая структура • Более-менее стандартные роли узлов • Прикидывается XML (XPath запросы) • 4 варианта обхода dashboard.bblf.sh

Slide 23

Slide 23 text

Клиент для Питона pip3 install bblfsh python3 -m bblfsh -f /path/to/file bblfsh/client-python 01. 02.

Slide 24

Slide 24 text

Интеграция >>> engine.repositories.references.head_ref \ .commits.tree_entries.blobs \ .classify_languages() \ .filter('lang = "Python"') \ .extract_uasts() \ .query_uast('//*[@roleIdentifier]') \ .extract_tokens("result", "tokens") \ .select("blob_id", "path", "tokens")

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

Мощь

Slide 27

Slide 27 text

sourced-ml • GitHub • Python 3.4+ • Используется Tensorflow, humanize • clint tqdm

Slide 28

Slide 28 text

Хотелки  Автозагрузка моделей из интернета  "Магазин моделей"  Вменяемый, современный формат (не HDF5)  Версионирование  Воспроизводимость  Поддержка разных ЯП

Slide 29

Slide 29 text

Modelforge  Автозагрузка моделей из интернета  "Магазин моделей"  Вменяемый, современный формат - ASDF  Версионирование  Воспроизводимость  Поддержка разных ЯП GitHub

Slide 30

Slide 30 text

Итог  Машинное обучение на исходном коде - это интересно  Есть данные  Есть инструменты

Slide 31

Slide 31 text

Конец Контакты:  [email protected]  tmarkhor  vmarkovtsev  blog.sourced.tech  Awesome #MLonCode