Стэк для машинного обучения на исходном коде
Вадим Марковцев, source{d}
Machine learning on source code
Предпосылки
- GitHub
- 🚀Машинное обучение хайп не думать
- 💰Большие компании пишут кучу 💩 кода
- 📜Пишем код так же как в 2000-х
Проекты, похожие на MariaDB/server?
Обнаружим похожий код
- По стилю
- По структуре
- По именам
И получим
- 💪Глобальный граф
- Лицензии
- Рефакторинг
class foobar:
def connecttoserver(self):
myserverhost = globalconfig.server.host
class FooBar:
def connect_to_server(self):
myServerHost = globalConfig.server.host
- Предсказание имен классов, функций, переменных
- Предсказание типов
- Какие комментарии бессмысленны?
- Какие комментарии прикольные?
Ваш код это место преступления
Стэк для MLonCode
PGA
- 270к siva файлов
- Индекс в CSV
Подробно в статье.
PGA индекс
- URL
- FILE_COUNT
- LANGS (байты, строки, файлы)
- COMMITS_[HEAD]_COUNT
- BRANCHES_COUNT
- LINES_COUNT (пустые, комментарии, код)
- LICENSE
source{d} engine
- Чтение siva для Spark
- Классификация и парсинг
- Открытый код - лицензия Apache
- GitHub
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()
Universal AST
- Более-менее одинаковая структура
- Более-менее стандартные роли узлов
- Прикидывается XML (XPath запросы)
- 4 варианта обхода
dashboard.bblf.sh
Интеграция
>>> 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")
sourced-ml
- GitHub
- Python 3.4+
- Используется Tensorflow, humanize
- clint tqdm
Хотелки
- Автозагрузка моделей из интернета
- "Магазин моделей"
- Вменяемый, современный формат (не HDF5)
- Версионирование
- Воспроизводимость
- Поддержка разных ЯП
Modelforge
- Автозагрузка моделей из интернета
- "Магазин моделей"
- Вменяемый, современный формат - ASDF
- Версионирование
- Воспроизводимость
- Поддержка разных ЯП
GitHub
Итог
- Машинное обучение на исходном коде - это интересно
- Есть данные
- Есть инструменты