Содержание

Webcom Performance – агентство перфоманс маркетинга с 23-годами опыта

Webcom Performance – агентство перфоманс маркетинга с 23-годами опыта

Столкнулись со следующими трудностями?

  • Есть сайт, а клиентов с него нет?

  • Переходы есть, а заявок с сайта нет?

  • Хотите рекламу в интернете, но не знаете с чего начать?

  • Нужно повысить узнаваемость нового бренда?

  • Реклама крутится, но не знаете, насколько эффективно?

Мы знаем, как решить ваши задачи!

  • Анализ конкурентов

    Мы проведем детальный анализ текущей ситуации в интернете и оценим сильные и слабые стороны ключевых игроков рынка

  • Подготовка сайта

    Мы проведем детальный анализ сайта в целом. Определим, адаптирован ли сайт для продвижения в интернете и выявим ошибки, препятствующие достижению желаемых бизнес-результатов

  • Анализ аудитории

    Мы определим наиболее эффективные рекламные каналы, которые привлекают больше целевой аудитории на сайт

  • Комплексное продвижение

    Изучив аудиторию, определив эффективные рекламные каналы, мы подготовим комплексную стратегию продвижения с оптимальным набором инструментов цифрового маркетинга, нацеленную на увеличение присутствия бизнеса в сети и рост продаж

Для комплексного продвижения бизнеса мы будем использовать микс инструментов digital-маркетинга

Контекстная реклама

Поисковый маркетинг

Видеореклама в интернете

Реклама в социальных сетях

Мобильная реклама

Реклама мобильных приложений

Ремаркетинг/ ретаргетинг

Веб-аналитика

Аудит сайта

Бизнес-консалтинг

Медийная реклама

Копирайтинг

Обучение

Все инструменты

Наш 23-летний опыт и экспертиза

позволяют предложить конкретные решения для продвижения бизнесов и услуг в различных сферах

  • Красота и
    здоровье

  • Автомобильные
    дилеры

  • Строительные
    организации

  • Мебель и
    окна

  • Туристические
    услуги

  • Банки и
    страхование

  • Юридические
    услуги

  • Рестораны и
    кафе

  • Медицинская
    тематика

  • Агентства
    недвижимости

Среди тысяч наших клиентов

в разные годы сотрудничества:

Перейти в портфолио

Истории успешного сотрудничества

  • Ив роше

    • Проблемы, с которыми пришел клиент:

      • Небольшое количество переходов с контекстной рекламы
      • Уход посетителя с сайта без совершения целевого действия (покупки/звонка)
      • Низкая осведомленность об акциях и скидках
    • Что мы предприняли:

      Настроили сценарии — показы специфических рекламных сообщений для пользователей, совершивших определенное действие на сайте

    • Результат:

      • Количество переходов +75%

      • Количество вернувшихся пользователей +10%

      • Стоимость перехода -30%

      • Конверсия +21%

  • Мегатоп

    • Проблема, с которой пришел клиент:

      • Низкая осведомленность пользователей о новых товарах, скидках.
    • Что мы предприняли:

      Оптимизировали продвигаемые страницы согласно ключевым фразам: написали тексты, составили заголовки.

    • Результат:

      • Количество посещений раздела «Магазины» +42%

      • Количество новых пользователей +39%

      • Рост трафика из поисковых систем

        +43%

      • Количество посещений +46%

  • Намас-м

    • Бизнес-задача, с которой обратился клиент:

      • Микроконверсии: копирование контактов, просмотр pdf прайс-листа
      • Макроконверсии: скачивание pdf прайс-листа
    • Что мы предприняли:

      Запустили тестовую рекламную кампанию, собрали ключевые запросы и минус-слова, использовали все доступные расширения.

    • Результат:

      • CTR по итогам рекламной кампании в Google 15%

      • Показы не опускались ниже позиции 2.1

      • Рекламный трафик от всего входящего трафика 13%

      • Максимально возможное количество целевых кликов

    • Бизнес-задача, с которой обратился клиент:

      • Необходимость понять свою целевую аудиторию
      • Повышение конверсии сайта
      • Выработка маркетинговой стратегии для офлайн-продвижения
    • Что мы предприняли:

      Доработали сайт для запуска рекламы, оптимизировали работу его мобильной версии. Адаптировали продвижение под интересы целевой аудитории.

    • Результат:

      • В 17 раз вырос брендовый спрос по названию магазина

      • В 2,5 раза выросла конверсия на мобильных устройствах

      • Доля визитов с мобильных устройств выросла до 50%

      • 17 магазинов было открыто к декабрю 2018 года

    • Бизнес-задача, с которой обратился клиент:

      • Увеличение продаж продукта
      • Формирование осведомленности о бренде
      • Формирование потребности и желания покупки
    • Что мы предприняли:

      Выбрали интересы и темы, которые напрямую связаны с косметической тематикой, расширили таргетинг на косвенные интересы и темы.

    • Результат:

      • Коэффициент просмотра увеличился в 1,5 раза

      • Количество переходов на сайт увеличилось в 2 раза

      • Интересы:
        CTR = 1,7% VTR = 46,6%

      • Темы:
        CTR = 10,3% VTR = 42,8%

Мелочь, но приятно

Что о нас говорят клиенты

  • За время сотрудничества компания проявила себя как ответственный исполнительный и клиентоориентированный подрядчик. Webcom Group готова гибко адаптироваться под требования заказчика, создавая качественный и отвечающий потребностям бизнеса продукт.

    Вареникова Екатерина Сергеевна, Начальник Управления маркетинга ЗАО «МТБанк»

  • Компания ТЧУП «Косметика Плюс», благодарит вас за помощь в продвижении сайта интернет-магазина «Ив Роше» и эффективной рекламе в интернете, что положительно сказывается на повышении посещаемости.

    Савченко Ольга Викторовна, Заместитель директора по сети «Ив Роше»

  • Мы будем рекомендовать Webcom Group своим партнёрам, как надёжную и профессиональную команду, обладающую огромным опытом в области оптимизации и продвижения сайтов.

    Гамезо Андрей Петрович, Директор ООО «Алютех Инкорпорейтед»

  • За время сотрудничества компания зарекомендовала себя как компетентный и надежный партнер, хотим отметить высокий профессионализм команды специалистов и оперативность выполнения работ.

    Булаш Николай Александрович, Руководитель коммерческого департамента СООО «МТС»

  • Задачи, которые мы доверили Webcom Group, выполняются качественно и своевременно. Наш ydachnik.by стал гораздо популярнее, благодаря слаженной работе Вебком Групп!

    Сергей Кишко, Директор ООО «Акватехнологии»

  • Вместе как одна большая команда мы решаем нестандартные задачи, которые ставит перед собой наш бизнес. Опыт команды «Вебком Групп» позволяет решать их самыми креативными способами, укладываясь в сроки и исполняя договоренности.

    Рекомендуем компанию «Вебком Групп» как надежного подрядчика по продвижению в сети Интернет.

    Александр Владимирович Лиходиевский, Руководитель отдела интернет-продвижения ЗАО «ПАТИО»

  • Импортер компании Volkswagen благодарит сотрудников компании за качественное обслуживание, оперативное реагирование и желание помочь в любой ситуации. СООО «Атлант-М Фарцойгхандель» готово дать рекомендации Webcom Group как надежному партнеру и профессионалу в своем деле.

    Александр Демидович, Заместитель директора по маркетингу и развитию СООО «Атлант-М Фарцойгхандель»

Оценка 4.9 на основании 611 отзывов

Смотреть все отзывы

О компании

Webcom Performance – независимое агентство перфоманс-маркетинга, входящее в группу компаний Webcom. Мы эффективно решаем бизнес-задачи клиентов в интернете, используя все разнообразие инструментов digital-маркетинга. Наше продвижение достигает поставленных целей и KPI, так как в работе мы ориентируемся на измеримый результат и повышение уровня продаж.

Подробнее

Наш статус

Webcom Group является сертифицированным агентством рекламных систем

Мы единственная компания из Беларуси, получившая статус Meta Business Partner.

Нажмите на бейдж, чтобы узнать, что это для вас значит

В нашей команде работают более 100 сертифицированных специалистов, включая сертифицированных преподавателей Google и Яндекс

C удовольствием поделимся с вами наработанной экспертизой в нашем учебном центре webcom academy

Webcom Academy уже более 15 лет специализируется на подготовке специалистов и корпоративном обучении в области интернет-маркетинга. Учебный центр предлагает программы по: SEO (поисковое продвижение), контекстной и таргетированной рекламе, веб-аналитике, контент-маркетингу, SMM и пр.

Научите меня

Появились вопросы?

Я с удовольствием на них отвечу! Заполните форму, и я вам перезвоню.

*Отправляя заявку, Вы подтверждаете, что полностью ознакомлены и согласны с условиями Соглашения об обработке персональных данных

Webcom Performance – агентство перфоманс маркетинга с 23-годами опыта

Webcom Performance – агентство перфоманс маркетинга с 23-годами опыта

Столкнулись со следующими трудностями?

  • Есть сайт, а клиентов с него нет?

  • Переходы есть, а заявок с сайта нет?

  • Хотите рекламу в интернете, но не знаете с чего начать?

  • Нужно повысить узнаваемость нового бренда?

  • Реклама крутится, но не знаете, насколько эффективно?

Мы знаем, как решить ваши задачи!

  • Анализ конкурентов

    Мы проведем детальный анализ текущей ситуации в интернете и оценим сильные и слабые стороны ключевых игроков рынка

  • Подготовка сайта

    Мы проведем детальный анализ сайта в целом. Определим, адаптирован ли сайт для продвижения в интернете и выявим ошибки, препятствующие достижению желаемых бизнес-результатов

  • Анализ аудитории

    Мы определим наиболее эффективные рекламные каналы, которые привлекают больше целевой аудитории на сайт

  • Комплексное продвижение

    Изучив аудиторию, определив эффективные рекламные каналы, мы подготовим комплексную стратегию продвижения с оптимальным набором инструментов цифрового маркетинга, нацеленную на увеличение присутствия бизнеса в сети и рост продаж

Для комплексного продвижения бизнеса мы будем использовать микс инструментов digital-маркетинга

Контекстная реклама

Поисковый маркетинг

Видеореклама в интернете

Реклама в социальных сетях

Мобильная реклама

Реклама мобильных приложений

Ремаркетинг/ ретаргетинг

Веб-аналитика

Аудит сайта

Бизнес-консалтинг

Медийная реклама

Копирайтинг

Обучение

Все инструменты

Наш 23-летний опыт и экспертиза

позволяют предложить конкретные решения для продвижения бизнесов и услуг в различных сферах

  • Красота и
    здоровье

  • Автомобильные
    дилеры

  • Строительные
    организации

  • Мебель и
    окна

  • Туристические
    услуги

  • Банки и
    страхование

  • Юридические
    услуги

  • Рестораны и
    кафе

  • Медицинская
    тематика

  • Агентства
    недвижимости

Среди тысяч наших клиентов

в разные годы сотрудничества:

Перейти в портфолио

Истории успешного сотрудничества

  • Ив роше

    • Проблемы, с которыми пришел клиент:

      • Небольшое количество переходов с контекстной рекламы
      • Уход посетителя с сайта без совершения целевого действия (покупки/звонка)
      • Низкая осведомленность об акциях и скидках
    • Что мы предприняли:

      Настроили сценарии — показы специфических рекламных сообщений для пользователей, совершивших определенное действие на сайте

    • Результат:

      • Количество переходов +75%

      • Количество вернувшихся пользователей +10%

      • Стоимость перехода -30%

      • Конверсия +21%

  • Мегатоп

    • Проблема, с которой пришел клиент:

      • Низкая осведомленность пользователей о новых товарах, скидках.
    • Что мы предприняли:

      Оптимизировали продвигаемые страницы согласно ключевым фразам: написали тексты, составили заголовки.

    • Результат:

      • Количество посещений раздела «Магазины» +42%

      • Количество новых пользователей +39%

      • Рост трафика из поисковых систем +43%

      • Количество посещений +46%

  • Намас-м

    • Бизнес-задача, с которой обратился клиент:

      • Микроконверсии: копирование контактов, просмотр pdf прайс-листа
      • Макроконверсии: скачивание pdf прайс-листа
    • Что мы предприняли:

      Запустили тестовую рекламную кампанию, собрали ключевые запросы и минус-слова, использовали все доступные расширения.

    • Результат:

      • CTR по итогам рекламной кампании в Google 15%

      • Показы не опускались ниже позиции 2.1

      • Рекламный трафик от всего входящего трафика 13%

      • Максимально возможное количество целевых кликов

    • Бизнес-задача, с которой обратился клиент:

      • Необходимость понять свою целевую аудиторию
      • Повышение конверсии сайта
      • Выработка маркетинговой стратегии для офлайн-продвижения
    • Что мы предприняли:

      Доработали сайт для запуска рекламы, оптимизировали работу его мобильной версии. Адаптировали продвижение под интересы целевой аудитории.

    • Результат:

      • В 17 раз вырос брендовый спрос по названию магазина

      • В 2,5 раза выросла конверсия на мобильных устройствах

      • Доля визитов с мобильных устройств выросла до 50%

      • 17 магазинов было открыто к декабрю 2018 года

    • Бизнес-задача, с которой обратился клиент:

      • Увеличение продаж продукта
      • Формирование осведомленности о бренде
      • Формирование потребности и желания покупки
    • Что мы предприняли:

      Выбрали интересы и темы, которые напрямую связаны с косметической тематикой, расширили таргетинг на косвенные интересы и темы.

    • Результат:

      • Коэффициент просмотра увеличился в 1,5 раза

      • Количество переходов на сайт увеличилось в 2 раза

      • Интересы:
        CTR = 1,7% VTR = 46,6%

      • Темы:
        CTR = 10,3% VTR = 42,8%

Мелочь, но приятно

Что о нас говорят клиенты

  • За время сотрудничества компания проявила себя как ответственный исполнительный и клиентоориентированный подрядчик. Webcom Group готова гибко адаптироваться под требования заказчика, создавая качественный и отвечающий потребностям бизнеса продукт.

    Вареникова Екатерина Сергеевна, Начальник Управления маркетинга ЗАО «МТБанк»

  • Компания ТЧУП «Косметика Плюс», благодарит вас за помощь в продвижении сайта интернет-магазина «Ив Роше» и эффективной рекламе в интернете, что положительно сказывается на повышении посещаемости.

    Савченко Ольга Викторовна, Заместитель директора по сети «Ив Роше»

  • Мы будем рекомендовать Webcom Group своим партнёрам, как надёжную и профессиональную команду, обладающую огромным опытом в области оптимизации и продвижения сайтов.

    Гамезо Андрей Петрович, Директор ООО «Алютех Инкорпорейтед»

  • За время сотрудничества компания зарекомендовала себя как компетентный и надежный партнер, хотим отметить высокий профессионализм команды специалистов и оперативность выполнения работ.

    Булаш Николай Александрович, Руководитель коммерческого департамента СООО «МТС»

  • Задачи, которые мы доверили Webcom Group, выполняются качественно и своевременно. Наш ydachnik.by стал гораздо популярнее, благодаря слаженной работе Вебком Групп!

    Сергей Кишко, Директор ООО «Акватехнологии»

  • Вместе как одна большая команда мы решаем нестандартные задачи, которые ставит перед собой наш бизнес. Опыт команды «Вебком Групп» позволяет решать их самыми креативными способами, укладываясь в сроки и исполняя договоренности.

    Рекомендуем компанию «Вебком Групп» как надежного подрядчика по продвижению в сети Интернет.

    Александр Владимирович Лиходиевский, Руководитель отдела интернет-продвижения ЗАО «ПАТИО»

  • Импортер компании Volkswagen благодарит сотрудников компании за качественное обслуживание, оперативное реагирование и желание помочь в любой ситуации. СООО «Атлант-М Фарцойгхандель» готово дать рекомендации Webcom Group как надежному партнеру и профессионалу в своем деле.

    Александр Демидович, Заместитель директора по маркетингу и развитию СООО «Атлант-М Фарцойгхандель»

Оценка 4.9 на основании 611 отзывов

Смотреть все отзывы

О компании

Webcom Performance – независимое агентство перфоманс-маркетинга, входящее в группу компаний Webcom. Мы эффективно решаем бизнес-задачи клиентов в интернете, используя все разнообразие инструментов digital-маркетинга. Наше продвижение достигает поставленных целей и KPI, так как в работе мы ориентируемся на измеримый результат и повышение уровня продаж.

Подробнее

Наш статус

Webcom Group является сертифицированным агентством рекламных систем

Мы единственная компания из Беларуси, получившая статус Meta Business Partner.

Нажмите на бейдж, чтобы узнать, что это для вас значит

В нашей команде работают более 100 сертифицированных специалистов, включая сертифицированных преподавателей Google и Яндекс

C удовольствием поделимся с вами наработанной экспертизой в нашем учебном центре webcom academy

Webcom Academy уже более 15 лет специализируется на подготовке специалистов и корпоративном обучении в области интернет-маркетинга. Учебный центр предлагает программы по: SEO (поисковое продвижение), контекстной и таргетированной рекламе, веб-аналитике, контент-маркетингу, SMM и пр.

Научите меня

Появились вопросы?

Я с удовольствием на них отвечу! Заполните форму, и я вам перезвоню.

*Отправляя заявку, Вы подтверждаете, что полностью ознакомлены и согласны с условиями Соглашения об обработке персональных данных

Как создать семантический поиск на естественном языке для произвольных объектов с помощью глубокого обучения | by Hamel Husain

Комплексный пример того, как построить систему, которая может осуществлять семантический поиск объектов. Авторы Hamel Husain & Ho-Hsiang Wu

Фотография Хубота.

Мощь современных поисковых систем неоспорима: вы можете получить информацию из Интернета в любой момент. К сожалению, эта сверхспособность не вездесуща. Есть много ситуаций, когда поиск сводится к строгому поиску по ключевым словам или когда объекты не являются текстом, поиск может быть недоступен. Кроме того, строгий поиск по ключевым словам не позволяет пользователю выполнять семантический поиск, а это означает, что информация не так легко обнаруживается.

Сегодня мы делимся воспроизводимым, минимально жизнеспособным продуктом, который иллюстрирует, как вы можете включить семантический поиск для произвольных объектов! Конкретно, мы покажем вам, как создать систему, которая выполняет семантический поиск в коде Python, но этот подход можно обобщить и на другие объекты (такие как изображения или звуковые клипы).

Чем так интересен семантический поиск? Рассмотрим следующий пример:

Семантический поиск в работе с кодом Python. * См. раздел «Отказ от ответственности» ниже.

Представлен поисковый запрос « Ping REST API и вернуть результаты». Однако поиск дает разумные результаты, даже если найденный код и комментарии не содержат слов Ping, REST или API.

Это иллюстрирует силу семантического поиска : мы можем искать контент по его значению в дополнение к ключевым словам , и максимизировать шансы пользователя найти информацию, которую он ищет. Последствия семантического поиска очень глубоки — например, такая процедура позволит разработчикам искать код в репозиториях, даже если они не знакомы с синтаксисом или не могут предвидеть правильные ключевые слова. Что еще более важно, вы можете обобщить этот подход на такие объекты, как изображения, аудио и другие вещи, о которых мы еще не думали.

Если это недостаточно увлекательно, вот живая демонстрация того, что вы сможете построить к концу этого урока :

Иногда я использую блокноты Jupyter и пользовательские магические функции для создания демонстраций, когда я не могу построить красивую Веб-сайт. это может быть быстрый способ интерактивно продемонстрировать свою работу!

Перед тем, как погрузиться в технические детали, полезно дать вам общее представление о том, как мы будем выполнять семантический поиск. Основная идея состоит в том, чтобы представить как текст, так и объект, который мы хотим найти (код), в общем векторном пространстве, как показано ниже:0003 Пример: Текст 2 и код должны быть представлены одинаковыми векторами, поскольку они напрямую связаны.

Цель состоит в том, чтобы отобразить код в векторное пространство естественного языка таким образом, чтобы пары (текст, код), описывающие одно и то же понятие, были близкими соседями, тогда как несвязанные пары (текст, код) находились дальше друг от друга, что измеряется косинусным сходством.

Есть много способов достичь этой цели, однако мы продемонстрируем подход, заключающийся в использовании предварительно обученной модели, которая извлекает функции из кода, и тонкой настройке этой модели для проецирования скрытых функций кода в векторное пространство естественного языка. Одно предупреждение: мы используем термин вектор и встраивание взаимозаменяемо на протяжении всего этого урока.

Методы, представленные в этом сообщении в блоге, устарели и были значительно усовершенствованы в последующем проекте под названием CodeSearchNet с соответствующим документом.

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

Мы рекомендуем ознакомиться со следующими элементами перед чтением этого руководства:

  • Последовательные модели: Будет полезно ознакомиться с информацией, представленной в предыдущем руководстве.
  • Прочтите этот документ на высоком уровне и поймите интуицию представленного подхода. Мы опираемся на аналогичные концепции для того, что представляем здесь.

Этот учебник будет разбит на 5 конкретных шагов. Эти шаги проиллюстрированы ниже и будут полезным справочным пособием по мере прохождения учебного курса. После завершения обучения будет полезно вернуться к этой диаграмме, чтобы понять, как все шаги сочетаются друг с другом.

Интеллект-карта этого урока. Версия в высоком разрешении доступна здесь.

Здесь каждый шаг 1–5 соответствует блокноту Jupyter. Мы рассмотрим каждый шаг более подробно ниже.

Блокнот, часть 1

Сотрудники Google собирают и хранят данные из репозиториев GitHub с открытым исходным кодом в BigQuery. Это отличный открытый набор данных для всех видов интересных проектов по науке о данных, включая этот! Когда вы подписываетесь на учетную запись Google Cloud, они дают вам 300 долларов, чего более чем достаточно для запроса данных для этого упражнения. Получение этих данных очень удобно, так как вы можете использовать SQL-запросы для выбора типа файлов, которые вы ищете, а также другие метаданные о репозиториях, такие как коммиты, звездочки и т. д.

Шаги для получения этих данных описаны в этой записной книжке. К счастью, некоторые замечательные люди из команды Kubeflow в Google прошли эти этапы и любезно разместили данные для этого упражнения, которое также описано в этой записной книжке.

После сбора этих данных нам нужно разобрать эти файлы на пары (код, строка документации). В этом руководстве одна единица кода будет либо функцией верхнего уровня, либо методом. Мы хотим собрать эти пары в качестве обучающих данных для модели, которая будет суммировать код (подробнее об этом позже). Мы также хотим удалить из кода все комментарии и оставить только код. Это может показаться сложной задачей, однако существует замечательная библиотека под названием 9.0011 и в стандартной библиотеке Python, которые можно использовать для извлечения функций, методов и строк документации. Мы можем удалить комментарии из кода, преобразовав код в AST, а затем обратно из этого представления в код, используя пакет Astor. Понимание AST или того, как работают эти инструменты, не требуется для этого руководства, но это очень интересные темы!

Дополнительные сведения об использовании этого кода см. в этой записной книжке.

Чтобы подготовить эти данные для моделирования, мы разделяем данные на обучающие, проверочные и тестовые наборы. Мы также поддерживаем файлы (которые мы называем «происхождение»), чтобы отслеживать исходный источник каждой пары (код, строка документации). Наконец, мы применяем те же преобразования к коду, который не содержит строки документации, и сохраняем его отдельно, так как нам также понадобится возможность поиска в этом коде!

Записная книжка части 2

Концептуально построение модели последовательностей для суммирования кода идентично своднику задач GitHub, который мы представили ранее — вместо тел задач мы используем код Python, а вместо заголовков задач мы используем строки документации.

Однако, в отличие от текста выпуска GitHub, код не является естественным языком. Чтобы полностью использовать информацию в коде, мы могли бы ввести оптимизации для конкретных доменов, такие как LSTM на основе дерева и токенизацию с учетом синтаксиса. В этом уроке мы собираемся не усложнять и рассматривать код как естественный язык (и при этом получать разумные результаты).

Построение обобщателя функций само по себе очень крутой проект, но мы не собираемся уделять этому слишком много времени (но мы рекомендуем вам это сделать!). Вся сквозная процедура обучения для этой модели описана в этой записной книжке. Мы не обсуждаем предварительную обработку или архитектуру для этой модели, поскольку она идентична обобщателю проблемы.

Наша мотивация для обучения этой модели состоит не в том, чтобы использовать ее для задачи обобщения кода, а скорее в качестве экстрактора функций общего назначения для кода. С технической точки зрения, этот шаг необязателен, так как мы выполняем его только для инициализации весов модели для связанной нижестоящей задачи. На более позднем этапе мы извлечем кодировщик из этой модели и точно настроим его для другой задачи. Ниже приведен скриншот некоторых примеров выходных данных этой модели:

Пример результатов функции суммирования на тестовом наборе. Блокнот смотрите здесь.

Мы видим, что, хотя результаты не идеальны, есть убедительные доказательства того, что модель научилась извлекать некоторый семантический смысл из кода, что является нашей главной целью в этой задаче. Мы можем количественно оценить эти модели, используя метрику BLEU, которая также обсуждается в этой записной книжке.

Следует отметить, что обучение модели seq2seq обобщению кода — не единственный метод, который можно использовать для создания экстрактора функций для кода. Например, вы также можете обучить GAN и использовать дискриминатор в качестве средства извлечения признаков. Однако эти другие подходы выходят за рамки данного руководства.

Блокнот, часть 3

Теперь, когда мы создали механизм для представления кода в виде вектора, нам нужен аналогичный механизм для кодирования фраз на естественном языке, подобных тем, которые можно найти в строках документации и поисковых запросах.

Существует множество предварительно обученных моделей общего назначения, которые будут генерировать высококачественные вложения фраз (также называемые вложениями предложений). В этой статье представлен отличный обзор ландшафта. Например, универсальный кодировщик предложений Google очень хорошо работает во многих случаях и доступен на Tensorflow Hub.

Несмотря на удобство этих предварительно обученных моделей, может быть полезно обучить модель, которая фиксирует предметно-ориентированный словарь и семантику строк документации. Есть много методов, которые можно использовать для создания вложений предложений. Они варьируются от простых подходов, таких как усреднение векторов слов, до более сложных методов, таких как те, которые используются при создании универсального кодировщика предложений.

В этом руководстве мы будем использовать модель нейронного языка с помощью AWD LSTM для создания вложений предложений. Я знаю, это может показаться пугающим, но замечательная библиотека fast.ai предоставляет абстракции, которые позволяют вам использовать эту технологию, не беспокоясь о слишком многих деталях. Ниже приведен фрагмент кода, который мы используем для построения этой модели. Дополнительные сведения о том, как работает этот код, см. в этой записной книжке.

Часть функции train_lang_model, вызываемой в этом блокноте. Использует fast.ai.

При построении языковой модели важно тщательно продумать корпус, который вы используете для обучения. В идеале вы хотите использовать корпус, относящийся к той же предметной области, что и ваша нижестоящая проблема, чтобы вы могли адекватно охватить соответствующую семантику и словарный запас. Например, отличным корпусом для решения этой проблемы будут данные о переполнении стека, так как это форум, на котором очень подробно обсуждается код. Однако, чтобы упростить этот учебник, мы повторно используем набор строк документации в качестве нашего корпуса. Это неоптимально, поскольку обсуждения переполнения стека часто содержат более богатую семантическую информацию, чем то, что содержится в однострочной строке документации. Мы оставляем читателю в качестве упражнения возможность изучить влияние на конечный результат с помощью альтернативного корпуса.

После обучения языковой модели наша следующая задача — использовать эту модель для создания вложения для каждого предложения. Обычный способ сделать это — обобщить скрытые состояния языковой модели, такой как подход объединения в пул, описанный в этой статье. Однако для простоты мы просто усредним все скрытые состояния. Мы можем извлечь среднее значение по скрытым состояниям из языковой модели fast.ai с помощью этой строки кода:

Как извлечь вложение предложения из языковой модели fast.ai. Здесь используется эта схема.

Хороший способ оценить вложения предложений — измерить эффективность этих вложений в последующих задачах, таких как анализ тональности, текстовое сходство и т. д. Часто можно использовать тесты общего назначения, такие как приведенные здесь примеры, для измерения качества вложений. Однако эти обобщенные тесты могут не подходить для этой проблемы, поскольку наши данные очень специфичны для предметной области. К сожалению, мы еще не разработали набор последующих задач для этой области, исходный код которого мы можем открыть. В отсутствие таких последующих задач мы можем, по крайней мере, проверить работоспособность этих вложений, содержащих семантическую информацию, исследуя сходство между фразами, которые, как мы знаем, должны быть похожими. На приведенном ниже снимке экрана показаны некоторые примеры, где мы ищем сходство векторизованных строк документации с фразами, предоставленными пользователем (взято из этой записной книжки):

Ручная проверка сходства текста в качестве проверки работоспособности. Больше примеров в этой тетради.

Следует отметить, что это только проверка работоспособности — более строгий подход заключается в измерении влияния этих вложений на различные последующие задачи и использовании этого для формирования более объективного мнения о качестве ваших вложений. Более подробное обсуждение этой темы можно найти в этой записной книжке.

Записная книжка части 4

На этом этапе может быть полезно вернуться к диаграмме, представленной в начале этого руководства, чтобы проверить, где вы находитесь. На этой диаграмме вы найдете это представление части 4:

Визуальное представление задач, которые мы будем выполнять в Части 4.

Большинство элементов этого шага взяты из предыдущих шагов этого руководства. На этом этапе мы настроим модель seq2seq из части 2, чтобы предсказать встраивание строк документации вместо строк документации. Ниже приведен код, который мы используем для извлечения кодировщика из модели seq2seq и добавления плотных слоев для тонкой настройки:

Создайте модель, отображающую код в векторное пространство естественного языка. Для получения дополнительной информации см. этот блокнот.

После обучения замороженной версии этой модели мы размораживаем все слои и обучаем модель на несколько эпох. Это помогает лучше настроить модель для этой задачи. Вы можете увидеть полную процедуру обучения в этом блокноте.

Наконец, мы хотим векторизовать код, чтобы мы могли построить поисковый индекс. В целях оценки мы также будем векторизовать код, который не содержит строки документации, чтобы увидеть, насколько хорошо эта процедура обобщает данные, которые мы еще не видели. Ниже приведен фрагмент кода (взятый из этой записной книжки), который выполняет эту задачу. Обратите внимание, что мы используем библиотеку ktext для применения к этим данным тех же шагов предварительной обработки, которые мы изучили на обучающем наборе.

Сопоставьте код с векторным пространством естественного языка с помощью модели code2emb. Для получения дополнительной информации см. этот блокнот.

После сбора векторизованного кода мы готовы перейти к последнему и заключительному шагу!

Блокнот части 5

На этом шаге мы создадим поисковый индекс, используя артефакты, созданные на предыдущих шагах, как показано ниже:

Диаграмма части 5 (извлечена из основной диаграммы, представленной вначале)

В части 4 мы векторизовали весь код, не содержащий строк документации. Следующим шагом является помещение этих векторов в поисковый индекс, где можно быстро найти ближайших соседей. Хорошая библиотека Python для быстрого поиска ближайших соседей — nmslib. Чтобы пользоваться быстрым поиском с помощью nmslib, вы должны предварительно вычислить поисковый индекс следующим образом:

Как создать поисковый индекс с помощью nmslib.

Теперь, когда вы построили поисковый индекс векторов кода, вам нужен способ превратить строку (запрос) в вектор. Для этого вы будете использовать языковую модель из части 3. Чтобы упростить этот процесс, мы предоставили в lang_model_utils.py вспомогательный класс под названием Query2Emb, который демонстрируется в этой записной книжке.

Наконец, как только мы сможем превратить строки в векторы запросов, мы сможем получить ближайших соседей для этого вектора следующим образом:

 idxs, dists = self.search_index.knnQuery(query_vector, k=k) 

Индекс поиска вернет два элемента (1) список индексов, представляющих собой целые позиции ближайших соседей в наборе данных (2) расстояния между ними соседи из вашего вектора запроса (в этом случае мы определили наш индекс для использования косинусного расстояния). Получив эту информацию, можно легко построить семантический поиск. Пример того, как это можно сделать, представлен в приведенном ниже коде:

Класс, который объединяет все части, необходимые для построения семантического поиска.

Наконец, в этой записной книжке показано, как использовать приведенный выше объект search_engine для создания интерактивной демонстрации, которая выглядит следующим образом:

Это тот же самый gif, который был представлен в начале этого руководства.

Поздравляем! Вы только что научились создавать семантический поиск. Я надеюсь, что это стоило поездки.

Несмотря на то, что в этом руководстве описывается, как создать семантический поиск кода, вы можете использовать аналогичные методы для поиска видео, аудио и других объектов. Вместо использования модели, которая извлекает функции из кода (часть 2), вам нужно обучить или найти предварительно обученную модель, которая извлекает функции из выбранного вами объекта. Единственным предварительным условием является наличие достаточно большого набора данных с аннотациями на естественном языке (например, расшифровками аудио или подписями к фотографиям).

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

  • {Обновление от 01.01.20202}: методы, обсуждаемые в этом сообщении в блоге, устарели, особенно в отношении архитектуры модели и метода. Обновленную версию этого же проекта см. в проекте CodeSearchNet и в соответствующем документе.
  • Методы, обсуждаемые в этом сообщении в блоге, упрощены и касаются только поверхности того, что возможно. То, что мы представили, представляет собой очень простой семантический поиск, однако для того, чтобы такой поиск был эффективным, вам, возможно, придется дополнить этот поиск поиском по ключевым словам и дополнительными фильтрами или правилами (например, возможностью поиска в определенном репо, пользовательском , или организация и другие механизмы информирования об актуальности).
  • Существует возможность использовать специфические для предметной области архитектуры, использующие преимущества структуры кода, такие как древовидные lstms. Кроме того, есть и другие стандартные приемы, такие как использование внимания и случайное принуждение учителей, которые мы опустили для простоты.
  • Одна часть, которую мы упустили, касается оценки поиска. Это сложная тема, которая заслуживает отдельного поста в блоге. Чтобы эффективно решить эту проблему, вам нужен объективный способ измерения качества результатов поиска. Это будет предметом будущего сообщения в блоге.

Надеемся, вам понравился этот пост. Пожалуйста, не стесняйтесь связаться с нами:

  • Hamel Husain: Twitter, LinkedIn или GitHub.
  • Ho-Hsiang Wu: LinkedIn, GitHub
  • Репозиторий этой статьи на GitHub.
  • Чтобы упростить задачу для тех, кто пытается воспроизвести этот пример, мы упаковали все зависимости в контейнер Nvidia-Docker. Для тех, кто не знаком с Docker, этот пост может оказаться полезным. Вот ссылка на образ докера для этого руководства на Dockerhub.
  • Моя главная рекомендация для тех, кто хочет приобрести навыки глубокого обучения, — пройти Fast.AI от Джереми Ховарда. Там я научился многим навыкам, которые мне понадобились для этого поста в блоге. Кроме того, в этом руководстве используется библиотека fastai.
  • Следите за этой книгой, она все еще находится в стадии раннего выпуска, но содержит полезные подробности по этому вопросу.
  • В этом выступлении Авниш Салуджа рассказывает о том, как Airbnb исследует использование общих векторных пространств для обеспечения семантического поиска объявлений, а также других информационных продуктов.

Мокап пользовательского интерфейса поиска был разработан Джастином Палмером (вы можете увидеть некоторые другие его работы здесь). Также спасибо следующим людям за их обзор и вклад: Ike Okonkwo, David Shinn, Kam Leung.

Любые идеи или мнения, представленные в этой статье, являются нашими собственными. Любые представленные идеи или методы не обязательно предвещают будущие продукты GitHub. Цель этого блога только в образовательных целях.

CakeML

О

CakeML — это функциональный язык программирования и экосистема доказательств и инструментов, построенных вокруг языка. Экосистема включает в себя проверенный компилятор, который может выполнять самозагрузку.

Проект CakeML состоит из следующих компонентов, каждый из которых является свободным программным обеспечением.

Определение языка. Язык CakeML основан на значительном подмножестве Standard ML. Его формальная семантика определяется логикой высшего порядка (HOL) в функциональном стиле с большим шагом. Ядро языка (его синтаксис и семантика) достаточно стабильно, но стандартная базовая библиотека все еще находится в стадии разработки. Взносы приветствуются!

Серверная часть компилятора. Компилятор CakeML состоит из многих частей. Наиболее важной частью является проверенный бэкенд компилятора, который преобразует нетипизированный AST в конкретный машинный код для одной из 6 целевых архитектур. Было доказано, что серверная часть компилятора создает только машинный код, совместимый с поведением исходных программ. Серверная часть проходит через несколько промежуточных языков (как показано на этой диаграмме) и выполняет некоторые оптимизации.

Внешний интерфейс компилятора 1. У компилятора есть два интерфейса. Первый — это инструмент синтеза корректуры (называемый транслятором). Он генерирует CakeML AST из ML-подобных функций в HOL и доказывает, что сгенерированный AST имеет то же поведение, что и функция HOL. Первоначальная версия этого инструмента создавала только чистый код CakeML, но более поздние версии могут создавать код, который выполняет ввод-вывод и использует состояние, включая локальное состояние.

Внешний интерфейс компилятора 2. Второй интерфейс компилятора состоит из традиционного синтаксического анализатора, за которым следует механизм вывода типов. Оба они оказались надежными и полными в отношении декларативных спецификаций. Для синтаксического анализатора это означает, что наша реализация синтаксического анализатора PEG находит правильное дерево синтаксического анализа, если оно существует, в соответствии с традиционной грамматикой для конкретного синтаксиса CakeML (SML). Надежность и полнота средства вывода типа означает, что если программа может быть типизирована, то средство вывода найдет тип (который является наиболее общим типом).

Начальная загрузка компилятора. Компилятор CakeML был загружен внутри HOL. Под загрузкой мы подразумеваем, что компилятор скомпилировал себя. Это было достигнуто за счет того, что внешний интерфейс 2 в сочетании с внутренним интерфейсом представляет собой функцию HOL, которую мы можем передать в цепочку инструментов, состоящую из внешнего интерфейса 1 и внутреннего интерфейса. Результатом является проверенный двоичный файл, который доказуемо реализует сам компилятор (с внешним интерфейсом 2). Недавно собранный загрузочный двоичный файл находится здесь в виде файлов tar.gz. Начальная загрузка описана здесь и здесь.

Апостериорная проверка программ CakeML. Мы адаптировали инфраструктуру проверки CFML от Charguéraud к CakeML. Обычно мы рекомендуем, чтобы проверенный код CakeML создавался путем синтеза с использованием внешнего интерфейса 1. Однако в некоторых случаях удобнее проводить рассуждения в стиле Хоара в логике разделения CFML. Версия CFML для CakeML поддерживает рассуждения о ссылках, массивах, исключениях и вводе-выводе и используется для проверки частей базовой библиотеки CakeML.

проверенных приложений, созданных с помощью CakeML. Инструменты CakeML предназначены для создания верифицированных приложений с использованием синтеза для проверки (внешний интерфейс 1) и компиляции внутри HOL (логическая оценка внутреннего интерфейса компилятора). На сегодняшний день самым крупным примером является самозагружаемый компилятор CakeML. Другие сквозные проверенные приложения, созданные с использованием инструментов CakeML:

  • счетчик частоты слов (учебный пример)
  • Unix-подобные инструменты, такие как grep, Сортировать, кот, разница, и пластырь
  • средство проверки статей OpenTheory
  • средство проверки сертификатов для границ ошибок с плавающей запятой
  • Candle: проверенная реализация HOL Light, работающая на CakeML

Этот веб-сайт содержит дополнительную информацию о проекте CakeML, ссылки на статьи, учебные программы, вспомогательные инструменты и предложения для магистров и докторантов.

  • Мы продолжаем серию онлайн-бесед, начатую в прошлом году:

    • 28 января: Артур Шаргеро
      Новый взгляд на формулы характеристик
    • 03 фев: Майкл Норриш
      HOL Советы и рекомендации
    • 11 февраля: Риккардо Дзанетти
      На пути к формально проверенному компилятору нестрогого языка
    • 16 марта: Йонг Киам Тан
      Эффективная проверка SAT с помощью CakeML
    • 31 марта: Хайко Беккер
      Развитие тактического языка с Лесси (демонстрация)
    • 13 апр: Андреас Лёв
      Различия между проверкой (программного) компилятора и (аппаратного) инструмента синтеза
    • 27 апр: Леонид Меркин, Руслан Резин, Николай Васильев
      InnoChain: формально проверенная система распределенного реестра на основе CakeML и HOL4
    • 03 июня: София Гильегард, Йохан Веннербек
      Решение головоломок с доказательством — Написание проверенной цепочки кодирования SAT в HOL4
    • 09 июня: Минчао Ву
      TacticZero: Учимся доказывать теоремы с нуля с помощью глубокого обучения с подкреплением

    Приглашаем всех на эти переговоры! Чтобы получить дополнительную информацию о предстоящих выступлениях, присоединяйтесь к нашему каналу в Slack (по этой ссылке) и смотрите объявления на канале #general .

  • На CPP’21 четыре статьи на базе HOL4:

    • Andreas Lööw:
      Lutsig: проверенный компилятор Verilog для проверенной разработки схем
    • Хайко Беккер, Натаниэль Бос, Иван Гавран, Ева Дарулова, Рупак Маджумдар:
      Лесси: HOL4 Тактика на примере
    • Эллиот Кэтт, Майкл Норриш:
      О формализации колмогоровской сложности
    • Магнус О. Мирин:
      Минималистичный проверенный компилятор с начальной загрузкой (Proof Pearl)

    Ссылки включают видео выступлений.

  • Ознакомьтесь с нашей статьей OOPSLA’20 о проверенной семантике стоимости пространства для CakeML.

  • В этом году (2020) вместо этого у нас будет серия онлайн-докладов. нашей обычной личной встречи разработчиков. Ниже перечислены проведенные/запланированные переговоры:

    • 21 августа: Томас Сьюэлл
      Добавление примитива Eval в язык CakeML
    • 27 августа: Алехандро Гомес-Лондоньо
      Хореографии и стоимостная семантика для надежных коммуникационных систем – pdf
    • 02 сен: Оскар Абрахамссон
      Проверенная проверка доказательств для логики высшего порядка – pdf
    • 08 сентября: Майкл Норриш
      HOL Советы и рекомендации
    • 11 сентября: Андреас Лёв
      Lutsig: проверенный компилятор Verilog для проверенной разработки схем
    • 22 сентября: Арве Генгельбах
      Теоретико-модельное консервативное расширение HOL со специальной перегрузкой — подробнее здесь
    • 29 сентября: Конрад Слинд
      Поддержка архитектурных преобразований, повышающих безопасность, с помощью CakeML
    • 06 окт: Тибо Готье
      Знакомство с TacticToe и HolyHammer
    • 20 октября: Йоханнес Оман Похьола
      seL4 + CakeML = очень проверенная инициализация системы
    • 30 ноября: Хрутвик Канабар
      Система семантических типов для CakeML

    Приглашаем всех на эти переговоры! Чтобы получить дополнительную информацию о предстоящих выступлениях, присоединяйтесь к нашему каналу в Slack (по этой ссылке) и смотрите объявления на канале #general .

  • Программная логика CakeML была обновлена, чтобы иметь возможность подтверждать свойства живучести для программ, не завершающих работу, см. наш ITP’19.бумага для деталей.

  • У нас есть документ CAV’19 по оптимизации в стиле быстрой математики для программ с плавающей запятой.

  • В этом году собрание разработчиков CakeML состоится 13-14 мая 2019 года в Чалмерсе, Швеция.

  • Наша статья о проверенной компиляции на проверенном процессоре будет представлена ​​на PLDI’19.

  • Наша новая журнальная статья The Verified CakeML Compiler Backend описывает версию 2 компилятора CakeML, Journal of Functional Programming, Volume 29, 2019.

  • Команда CakeML в Чалмерсе открыла вакансию постдока. Крайний срок подачи заявок: 28 февраля 2019 г. .

  • В следующем документе FMCAD’18 используется CakeML: проверенная программа проверки сертификатов для границ ошибок конечной точности в Coq и HOL4

  • Следующие документы, связанные с CakeML, были представлены на FLoC 2018:

    • Proof-Production Synthesis CakeML с вводом-выводом и локальным состоянием из монадических функций HOL, IJCAR’18

    • Проверка преобразования LTL в автоматы Бючи с помощью очень слабых чередующихся автоматов, ITP’18

    • Проверка программного обеспечения с помощью ITP должна использовать извлечение двоичного кода для сокращения TCB (короткая статья), ITP’18

    • Проверка программы при наличии ввода-вывода: семантика, проверенные библиотечные процедуры и проверенные приложения, VSTTE’18

    • Проверенный сертификат проверки для подсчета голосов, ВСТТЭ’18

  • В Кенте открыта вакансия на CakeML. Крайний срок подачи заявок: 21 мая 2018 г.

  • В Chalmers открыта двухлетняя вакансия постдока по темам, связанным с CakeML. Крайний срок подачи заявок: 18 мая 2018 г.

  • У Хупела и Нипкова есть статья на ESOP’18 об проверенном компиляторе от Isabelle/HOL до CakeML

    .
  • В следующем документе на PLDI’18 используется CakeML: VeriPhy: проверенные исполняемые файлы контроллера из Верифицированные модели киберфизических систем

  • О CakeML будет рассказ на семинаре DeepSpec на PLDI’18

  • Data61 снова нанимает инженеров по тестированию в Сиднее, Австралия. Крайний срок подачи заявок: 15 апреля 2018 г.

  • 29 мая состоялась встреча разработчиков CakeML 2018 в Чалмерсе.

  • Data61 нанимает инженеров-доказательств и научного сотрудника в Сиднее, Австралия. Опыт/интерес CakeML был бы очень желателен для обоих. Крайний срок подачи заявок: 21 ноября 2017 г.

  • Наша статья о проверке эффективных вызовов функций в CakeML будет представлена ​​на ICFP’17.

  • Наша статья о проверенном сборщике мусора для CakeML будет представлена ​​на ITP’17.

  • Мы загрузили компилятор CakeML для RISC-V. Результат загрузки в логике доступен (как и для x86-64).

  • Рамана Кумар получил премию Джона К. Рейнольдса за докторскую диссертацию в 2017 году за докторскую диссертацию по самокомпиляции и самопроверке.

  • Учебники по CakeML будут на PLDI’17 (учебник на целый день) и ICFP’17 (учебник на полдня). Эти учебные пособия позволят участникам опробовать инструменты экосистемы CakeML и использовать их для создания сквозные проверенные двоичные файлы. Учебники — хороший способ принять участие в CakeML.

  • Мы выпустили несколько предварительных версий CakeML версии 2.

  • В Технологическом университете Чалмерса, Швеция, есть две открытые вакансии доктора философии, связанные с CakeML. Крайний срок подачи заявок: 25 апреля 2017 г.

  • ESOP’17 принял нашу статью (препринт) о проверенных формулах характеристик (CF) для CakeML.

  • CPP’17 принял нашу статью (препринт) о конкретных аспектах компиляции и ассемблирования CakeML в реальный машинный код.

  • Наша статья IFL’15 (препринт) о Система типов и алгоритм вывода CakeML были удостоены награды Приз Питера Ландина за лучшую статью.

    Последняя публикация доступна здесь.

  • ICFP’16 принял нашу статью (препринт) о новом компиляторе CakeML, A New Verified Compiler Backend for CakeML . Схему нового компилятора можно увидеть справа.

  • В нашей статье ESOP’16 (препринт) описывается и пропагандируется использование функциональной семантики больших шагов как для рассуждений о языках программирования, так и для проверки компилятора.

    Paper © Springer 2016. Окончательная версия публикации доступна на link.springer.com.

  • CakeML вместе с нашей формализацией HOL в HOL используется в исследованиях безопасности ИИ, поддерживаемых Институтом будущего жизни, в частности, для улучшения нашего понимания рефлексивного мышления. Наш документ ITP’15, посвященный размышлениям, предшествует и поддерживает работу над этим проектом.

    Бумага © Springer 2015. Окончательная версия публикации доступна на link.springer.com.

  • Новое представление для сопоставления с образцом в HOL, как описано в этом документе ITP’15 о сопоставлении с образцом, было включено в транслятор HOL-to-CakeML.

    Бумага © Springer 2015. Окончательная версия публикации доступна на link.springer.com.

  • Мы прочитали гостевую лекцию в рамках курса Advanced Topics in Software Verification в UNSW о начальной загрузке проверенного компилятора CakeML. (См. слайды для 10-й недели 2016 г. или 12-й недели 2015 г.)

  • Бета-версия (см. элемент ниже) теперь также поддерживает символьные литералы.

  • Бета-версия проверенной реализации CakeML (версия 1) доступна здесь. Чтобы собрать и запустить код: разархивируйте , затем создайте и ./cake .

    Обратите внимание, что это бета-версия с несколькими известными проблемами: (1) переполнение стека проверяется ОС, что приводит к segfault; (2) компиляция в Mac OS выдает некоторые предупреждения компилятора. Если вы столкнетесь с другими проблемами, сообщите нам об этом по адресу [email protected].

    Это проверенное программное обеспечение. Почему у него могут быть проблемы? Краткий ответ заключается в том, что мы могли недостаточно тщательно проверить наши предположения. Достаточно ли точна наша модель машины x86-64? Правильно ли мы взаимодействуем с непроверенным кодом C? Предположения были проверены, но никогда нельзя быть на 100% уверенным, что тестирование выявило все возможные проблемы.

  • Доступна предварительная версия CakeML Compiler Explorer. Этот веб-сервис позволяет запускать проверенный компилятор и просматривать результаты различных этапов компиляции.

  • В нашей статье ITP’14 описывается работа по формализации семантики и надежности логики высшего порядка, включая поддержку ее принципов определения и создание проверенной реализации ядра средства доказательства теорем в CakeML. В документе описывается метод поддержки определений посредством перевода в HOL без сохранения состояния.

    С тех пор мы разработали прямую семантику для всего HOL (поддерживающую как определения, так и неопределяющие расширения контекста, включая новые аксиомы). Эта версия была представлена ​​в нашем докладе ITP’14. Это описано более подробно в нашей последующей статье JAR.

    ITP Paper © Springer 2014. Окончательный вариант публикации доступен на link.springer.com. JAR Paper © авторы, 2016 г. Окончательная версия опубликована в Journal of Automated Reasoning, том 56, выпуск 3, 2016 г., и доступна в открытом доступе здесь.

  • Мы читали в Кембридже курс MPhil по спецификации, реализации и проверке языков функционального программирования.

  • В нашей статье POPL’14 описывается CakeML и проверенная реализация x86-64 цикла чтения-оценки-печати для CakeML с использованием приведенного ниже компилятора с начальной загрузкой, проверенного перевода из байт-кода в x86-64 и в основном синтезированной проверенной среды выполнения.

    Бумага © авторы 2014. Это авторская версия работы. Он размещен здесь для вашего личного использования. Не для перераспределения. Окончательная версия была опубликована в материалах 41-го ежегодного симпозиума ACM SIGPLAN-SIGACT по принципам языков программирования здесь.

  • Мы написали, проверили и загрузили компилятор (включая лексирование, синтаксический анализ, вывод типов и генерацию кода) из CakeML в CakeML Bytecode. Теорема корректности охватывает как завершающие, так и расходящиеся программы и говорит, что сгенерированный код ведет себя в соответствии с семантикой в ​​​​любом случае. Компилятор написан на HOL; мы используем транслятор, упомянутый ниже, для создания проверенной реализации CakeML, а затем оцениваем компилятор этой реализации (начальной загрузки) для создания проверенного байт-кода.

  • Одним из наших первоначальных целевых исследований является создание проверенной версии CakeML средства доказательства теорем HOL Light. Для этого тематического исследования мы расширили инструмент перевода, упомянутый ниже, чтобы он мог переводить в код CakeML с отслеживанием состояния. Первоначальные результаты описаны в нашей короткой статье ITP’13.

    Бумага © Springer 2013. Окончательная версия публикации доступна на link.springer.com.

  • Мы разработали инструмент, который переводит функции из логики высшего порядка в CakeML. Этот инструмент производит доказательства: для каждого перевода он доказывает теорему, которая утверждает, что сгенерированный код CakeML правильно реализует исходную функцию HOL в соответствии с операционной семантикой CakeML. Подробнее см. в нашем документе ICFP’12 и последующем документе JFP.

    ICFP Paper © ACM 2012. Это авторская версия работы. Он размещен здесь для вашего личного использования. Не для перераспределения. Окончательная версия была опубликована в материалах 17-й Международной конференции ACM SIGPLAN по функциональному программированию здесь. Документ JFP © Издательство Кембриджского университета, 2014 г. Окончательная версия была опубликована в Journal of Functional Programming, Volume 24, Issue 2-3, 2014, и доступна здесь.

Люди

В настоящее время самые активные разработчики:
  • Хрутвик Канабар ,
  • Магнус Мирин ,
  • Майкл Норриш ,
  • Томас Сьюэлл ,
  • Йонг Киам Тан ,
Авторы:
  • Оскар Абрахамссон ,
  • Йоханнес Оман Пойола ,
  • Роб Артан ,
  • Хайко Беккер ,
  • Мэтью Брекнелл ,
  • Эрик Карлссон ,
  • Фанни Каниве ,
  • Коннор Кэшман ,
  • Маурисио Чименто ,
  • Квентин Корради ,
  • Николай Кафлин ,
  • Грегорио Курелло ,
  • Ева Дарулова ,
  • Хьюго Фере ,
  • Энтони Фокс ,
  • Арве Генгельбах ,
  • София Гильегард ,
  • Алехандро Гомес-Лондоньо ,
  • Майк Гордон ,
  • Армаэль Гено ,
  • Рикард Хьорт ,
  • Сон Хо ,
  • Джейкоб Холмгрен ,
  • Ларс Хупель ,
  • Феликс Кам ,
  • Стивен Келл ,
  • Рамана Кумар ,
  • Квентин Ладевез ,
  • Тео Лоран ,
  • Джон Линд ,
  • Андреас Лёв ,
  • Александр Михайлович ,
  • Небойша Михайлович ,
  • Доминик Маллиган ,
  • Прашант Мундкур ,
  • Оскар Нюберг ,
  • Скотт Оуэнс ,
  • Кристиан Перссон ,
  • Кристофер Пулте ,
  • Матье Роде ,
  • Ли Рённинг ,
  • Хенрик Ростедт ,
  • Адам Сандберг Эрикссон ,
  • Конрад Слинд ,
  • Майкл Шпилька ,
  • Парта Сусарла ,
  • Хира Сьеда ,
  • Тимотей Томандл .