Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Стэк для машинного обучения на исходном коде

Стэк для машинного обучения на исходном коде

Вадим Марковцев (Lead Engineer, Machine Learning at Sourced.Tech) @ Moscow Python Meetup 55

"Машинное обучение на исходном коде (MLoSC) - новая и интересная область исследований, которая расположена на пересечении глубокого обучения, майнинга, работы с естественными языками, социальных наук и программирования. Мы накопили петабайты исходников и историей разработки в открытом доступе, и в то же время было предпринято очень мало попыток использовать весь невероятный человеческий опыт, который в них заключен. Доклад делает обзор текущего состояния дел в MLoSC и рассказывает о доступных инструментах на Python и некоторых примерах их использования, таких как "глубокое" предсказание кода и структурные эмбеддинги для масштабируемой дедупликации".

Видео: http://www.moscowpython.ru/meetup/55/ml-on-source-code/

Moscow Python Meetup
PRO

April 24, 2018
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

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

    View Slide

  2. Machine
    learning
    on source
    code

    View Slide

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

    View Slide

  4. 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?

    View Slide

  5. View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  12. View Slide

  13. Стэк для MLonCode

    View Slide

  14. clone
    discover
    classify
    checkout
    filter
    parse
    analyze

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  19. 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()

    View Slide

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

    View Slide

  21. View Slide

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

    View Slide

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

    View Slide

  24. Интеграция
    >>> 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")

    View Slide

  25. View Slide

  26. Мощь

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide