Успех хакатона!

Этот пост написали Элиот Ха, Кейт Палло, Ченни Рен и Хартек Сабхарвал. Каждый был членом команды Early Bird - заявки, выигравшей AppNexus Challenge на хакатоне New York DeveloperWeek 2018. Хакатоны DeveloperWeek представляют собой крупнейшую в стране серию хакатонов, ориентированных на вызовы, и проводятся несколько раз в течение года по всей стране. В Нью-Йоркском хакатоне 2018 приняли участие более 35 различных команд с более чем 150 хакерами. Помимо победы в испытании AppNexus, Team Early Bird также вошли в пятерку лучших команд на хакатоне.

Формирование команды

Если вы уже бывали на каком-либо широко «открытом» хакатоне раньше, то знаете, что первый час на этих мероприятиях - одно из самых интересных мест для всех. Учитывая, что направления и проблемы обычно публикуются заранее, среда, созданная разнообразием участников, поистине потрясающая. Скорее всего, можно найти группу людей, которые только что встретились, стоящими рядом с преданной командой, установленной на рабочем месте. Члены первой группы могут пытаться определить, может ли идея сработать, в то время как другие могут церемонно облизывать свои отбивные, приступая к реализации проекта, который был в идеале в течение нескольких дней.

19 июня в 9:00 в субботу сцена в Бруклинском выставочном центре не стала исключением. Это был долгожданный нью-йоркский хакатон DeveloperWeek, и хаос, созданный сотнями хакеров, пытающихся либо найти проект, либо лихорадочно начать прогрессировать, приближался к пику. На этом конкретном хакатоне было несколько разных задач, в которых могли участвовать хакеры, что не всегда так. Следовательно, разговоры были сосредоточены на том, в каких задачах каждый хотел бы участвовать. Из этих разговоров быстро сформировалась наша команда - мы все были чрезвычайно заинтересованы в работе над проблемой вредоносного содержимого, представленной AppNexus.

Подсказка была относительно простой, но отнюдь не простой. Учитывая набор вредоносных объявлений (графическая реклама с сомнительными намерениями), найдите способ определить, является ли новая представленная реклама вредоносной или нет. Когда два студента CS поступили на второй год обучения в университете, один участник поступил на магистерскую программу по кибербезопасности, а другой - на магистерскую программу по искусственному интеллекту, мы все были очень взволнованы по разным причинам. У нас была не только четко определенная и объективно измеренная цель, но и огромная широта подходов, которые мы могли предпринять! Эта задача также представила способ использования машинного обучения на пересечении кибербезопасности, а определение плохого контента представляет собой одну из наиболее распространенных проблем, с которыми сегодня сталкиваются несколько ведущих технологических компаний. Кроме того, мы гордились тем, что работаем с инновационным и солидным партнером. Изучая проблему, мы обнаружили несколько сообщений в блогах и официальных документов, представленных AppNexus по этой теме, в том числе одно специально о мошеннической рекламе. Объединенные нашим энтузиазмом, мы продолжили выполнение поставленной задачи.

Обзор задачи

Нашим первым шагом было изучение данных. Задача заключалась в двух различных типах вредоносного контента - вводящие в заблуждение утверждения и рекламные проспекты в виде таблоидов. Их определения и примеры каждого из них следующие:

Tabloid Advertorial: изображения, в которых содержание объявления не соответствует содержанию целевой страницы. Другими словами, он будет использоваться, чтобы заставить пользователя что-то щелкнуть.

Утверждения, вводящие в заблуждение. Заявления, содержащиеся в объявлении, необоснованны или заведомо ложны. Другими словами, утверждения, которые просто не соответствуют действительности. Самым классическим примером может служить Змеиное масло - волшебная смесь, способная вылечить все недуги.

Имея набор из примерно двухсот рекламных объявлений, помеченных как Tabloid Advertorial или вводящие в заблуждение утверждения, мы начали исследовать количественные методы, которые позволили бы создать представление каждой рекламы. Практически сразу стало понятно, что нам нужно будет использовать машинное обучение. Любое возможное представление, которое мы могли бы определить сами, просто не было бы достаточно хорошим для достижения желаемой точности при обнаружении новых вредоносных рекламных объявлений. Машинное обучение решило бы эту проблему - вместо того, чтобы явно указывать нашему алгоритму, что анализировать, наша программа узнает, что искать, изучив набор данных. Изученные нами методы казались многообещающими и легко доступными. Однако сразу же возникло несколько вопросов, независимо от того, какой метод мы думали применить. Во-первых, независимо от желаемого алгоритма машинного обучения, который мы реализовали, почти всем им потребуется сопоставимый набор не вредоносной рекламы. Мы бы стали называть это «качественной рекламой». Эти объявления не только помогут в обучении нашей системы, но и будут полезны при тестировании. Кроме того, у каждой модели, которую мы исследовали, было перечислено несколько недостатков и мер предосторожности. Какой из них лучше? Почему мы должны использовать одно вместо другого для этой конкретной цели?

Идея проекта

Зная эти основные вопросы, мы решили принять меры и найти «качественную рекламу» или новую рекламу, которая не была вредоносной. Эта, казалось бы, простая задача оказалась довольно сложной! Практически любым способом, который мы пробовали, кажется, что запрос «Настоящая реклама» на самом деле дает графические результаты для «Поддельной рекламы», учитывая недавние разногласия в этой области. Это заставило нас задуматься: что такое вредоносный контент? Наша команда попробовала провести традиционный мозговой штурм, и облако слов, появившееся в результате нашего разговора, выглядело так, будто кто-то просто случайно выбрал термины из словаря. Такие фразы, как «крупный текст», «кража» и «большие проценты» были смешаны между собой таким образом, который, казалось бы, не имел отношения друг к другу. Остановившись, мы долго думали и придумали два уникальных метода достижения нашей цели.

Во-первых, мы заметили, что запросы объявлений от компаний из списка Fortune 500 привели к появлению большого количества высококачественных рекламных объявлений. Однако мы не хотели вносить предвзятость в наши данные по обучению, выбирая только контент из знакомых нам компаний. Итак, мы обратились к своего рода методу случайного блуждания - мы использовали специальный онлайн-генератор названий компаний, чтобы создать список крупных корпораций. Оттуда мы использовали расширение Google Chrome, чтобы загрузить большую часть рекламы этой компании, а также удалить любую рекламу, которая все еще казалась потенциально вредоносной. Затем мы повторили этот процесс для нескольких компаний.

Кроме того, мы подумали о носителях, которые не могут создавать вредоносный контент из-за своей природы. Итак, мы получили изображения от поставщиков, которые имеют гораздо меньшую выборку рекламных объявлений с более тщательной проверкой - Печатная реклама! Эта идея пришла нам в голову, когда мы вспоминали некоторые из наших любимых шоу и думали о первом эпизоде ​​хита «Безумцы». На протяжении всего эпизода Дон Дрейпер пытается создать новую рекламную кампанию для сигаретной компании. Это было особенно сложно, учитывая, что недавние важные исследования выявили отрицательные эффекты курения. Если такой рекламодатель, как мистер Дрейпер, так серьезно подумал об одном рекламном объявлении, то, несомненно, те, которые были представлены, были в пределах нашего качественного ведра. Используя тот же метод, что и выше, мы получили дополнительный набор изображений, что еще больше разнообразило нашу «качественную рекламу».

Следующим шагом было разделение наших данных на обучающие и тестовые наборы и применение алгоритма машинного обучения. Мы подумали, что вариант использования может помочь нам определить, какой алгоритм машинного обучения или какой набор алгоритмов машинного обучения использовать. После некоторого поиска мы поняли, что только что лично столкнулись с проблемой, которую можно решить - создать собственное определение вредоносного контента! Поскольку вредоносный контент может означать очень много разных вещей в разных контекстах, мы хотели создать интуитивно понятную систему, которая позволила бы любому пользователю «настраивать» свое собственное определение.

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

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

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

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

Шаг 0. Создайте два разных алгоритма машинного обучения для определения вредоносного содержания. Затем протестируйте новые креативы, используя оба алгоритма независимо, и получите наиболее консервативный результат.

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

Шаг 2. Переобучение исходных систем машинного обучения на основе данных, введенных пользователем.

Мы назвали себя Team Early Bird - мы хотели не только позволить тем, кто использует наш инструмент, ловить червей, что в нашем случае было нежелательным рекламным контентом, но и помогать пользователям получать ПРАВИЛЬНЫХ червей, исходя из их собственных индивидуальных целей.

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

Фундаментальная система 1 - Анализ текста

Как люди, наше первое впечатление о злонамеренных намерениях обычно возникало из общего спам-текста в объявлениях, но мы не были уверены, как это повлияет на анализ. Во-первых, мы извлекли текст из изображений с помощью Tesseract в Python, одного из лучших доступных механизмов оптического распознавания символов (OCR) с открытым исходным кодом. Однако он сам по себе не смог достаточно точно прочитать рекламу, чтобы получить полезные данные. Строки были не только ненадежными, но и многие изображения не давали ни единого полностью сформированного слова. Сгрудившись вокруг одного ноутбука, мы изо всех сил пытались понять, как в любом анализе будут использоваться редкие фразы, такие как «Посмотри,» и «st0Ck, идущий вверх», почти напоминающие текстовые сообщения начала 2000-х годов. Чтобы исправить это, мы программно изменили размер и улучшили изображения перед обработкой. Наряду с некоторой дополнительной очисткой текста, такой как разрешение только символов ASCII, наш вывод существенно улучшился.

Нашим следующим шагом было извлечение полезных функций из текста с помощью обработки естественного языка (NLP), быстро развивающейся области в CS, которая позволяет компьютерам понимать на некотором уровне человеческий язык. Одна из техник в НЛП - анализ настроений, который берет предложение и определяет, является ли оно в основном положительным, отрицательным или нейтральным. Как правило, такая программа использует базу данных положительных и отрицательных слов и фраз, а также отслеживает структуру предложений и отрицания. Невероятно эффективная реализация включена в библиотеку Stanford CoreNLP, и именно она развернута в нашей модели. Наша гипотеза заключалась в том, что вредоносная реклама будет использовать более сильную и убедительную лексику, чтобы побудить пользователей щелкнуть, в то время как не-вредоносная реклама будет использовать более нейтральный язык, чтобы лучше передать сообщение и избежать негативной лексики, чтобы сохранить положительные ассоциации с брендом.

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

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

Глядя на результаты, которые мы думали про себя, если бы мы были компьютером, чего еще мы хотели бы? Весь проведенный нами анализ упростил рекламу до одного базового числа, в то время как любая надежная модель машинного обучения потребовала бы большого количества данных и множества столбцов. Нам нужны были такие же существенные метрики, но с большей детализацией. Изучив разнообразный набор курсовых работ, накопленных между нами, мы остановились на следующем; «Как насчет базовой статистики?» Помимо настроений, вероятно, было бы полезно знать такие вещи, как наиболее распространенные слова и то, как часто они появляются по сравнению с аналогами в разных типах рекламы. Это привело нас к выполнению простого анализа n-граммов. Во-первых, мы вычислили наиболее часто встречающиеся слова, присутствующие в обоих типах вредоносной рекламы. Это потребовало токенизации текста и удаления стоп-слов, которые представляют собой такие фразы, как «то» или «есть», которые являются общими для всех видов рекламы, но семантически практически бессмысленны. Это было сделано с помощью NLTK, другой библиотеки НЛП. Мы узнали об этом из онлайн-конкурса Kaggle, посвященного аналогичной задаче. Мы повторили этот процесс отдельно для таблоидов и вводящей в заблуждение рекламы.

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

Наконец, мы повторили предыдущий анализ с биграммами, которые представляют собой номенклатуру НЛП для двух последовательных слов. Это имело смысл, потому что определенные группы слов становятся гораздо более полезными рядом с другими, чем сами по себе. Наиболее распространенные биграммы в вредоносной рекламе включают такие фразы, как «подробнее», «простой трюк», «узнайте, как» и «элита Голливуда» - все они явно напоминают спам-рекламу.

Это привело нас к нашему второму дню в выставочном центре, и темп был лихорадочным. Единственные настоящие перерывы в работе были связаны с длительными загрузками программного обеспечения и компиляцией кода. Некоторые из нас посещали конференции, посвященные последним разработкам в отрасли, например «Blockchain Framework Exonum 0.8 для разработчиков». Некоторые из нас, те, кто не верил в ажиотаж вокруг блокчейнов, собирали товары компании и обедали на блюде прекрасных сыров AppNexus. Некоторые из нас, которых отталкивали от сыра и блокчейна, продолжали смотреть на код, возможно, обнаружив ошибочную запятую через полчаса компиляции кода. И Элиот выиграл вертолет RC.

В качестве последнего компонента машинного обучения, связывающего все это воедино, мы экспериментировали как с моделью случайного леса, так и с машиной опорных векторов (SVM). Случайный лес в идеале позволяет свести к минимуму переоснащение и избежать значительного учета гиперпараметров. Он показал многообещающие результаты перекрестной проверки. Однако в конечном итоге мы выбрали SVM из-за небольшого количества функций (7) и небольшого размера выборки (398). Это дало нам ошеломляющую точность в 90% при классификации таблоидной, вводящей в заблуждение и не вредоносной рекламы и на 95% при классификации рекламы как вредоносной или не вредоносной. Ниже приведено изображение, представляющее нашу систему классификатора текста.

Наш код и наборы изображений для этой фундаментальной системы можно найти на GitHub.

Фундаментальная система 2 - Классификация изображений

Учитывая, что классификация изображений в чистом виде - это очень сложная вещь для интуитивного мышления, нам было очень интересно посмотреть, какими будут наши результаты и что на самом деле повлечет за собой процесс машинного обучения. Мы хотели сделать довольно простую классификацию изображений с помощью сверточной нейронной сети (CNN) - модели глубокого обучения, которую мы могли бы реализовать с помощью Python. Мы узнали, что создание CNN с нуля потребует обучения на нескольких тысячах различных типов изображений, чтобы быть достаточно точными для производства. Вскоре наша команда поняла, что нашей общей вычислительной мощности четырех ноутбуков будет недостаточно! В отчаянии мы начали изучать использование сервисов облачных вычислений, таких как AWS и Azure. Мы углубились в документацию, но стало очевидно, что на самом деле добиться использования значительных ресурсов мощности, в которых мы нуждались, будет непросто. Неужели это невозможно? Стоит ли искать другую, более простую систему? Мы задумались над этими вопросами, но, к счастью, нашли потенциальное решение - изменить предварительно обученную модель! Чтобы понять это и присущие им преимущества, мы можем изучить очень упрощенную версию CNN.

По сути, CNN использует концепции нейронов из биологии для очень эффективного обнаружения паттернов. Скорее всего, это не шок, поскольку в последние несколько лет эта концепция широко освещалась в основных новостных агентствах. Вы часто слышите, что эти модели глубокого обучения имеют много разных уровней. Но что это значит и как это связано с мозгом? Эти слои можно интуитивно представить как разные системы, обнаруживающие очень специфический тип небольшого рисунка. Например, один слой может идентифицировать определенную черту чьего-то лица, например, чьи-то глаза. На самом деле эти слои обнаруживают узоры гораздо меньшего размера, например, одну крошечную часть буквы, но идея та же - небольшие группы детекторов узоров. Затем эти слои группируются вместе, часто с использованием процессов упрощения, таких как объединение (использование подмножеств данных для упрощения вычислений), чтобы обнаружить что-то гораздо более крупное и более сложное. Продолжая наш предыдущий пример, CNN может попытаться определить, содержит ли изображение человеческое лицо. Это называется окончательной классификацией, потому что она объединяет результаты из предыдущих групп детекторов небольших образов для определения одного окончательного атрибута, который может иметь значительную дисперсию. По сути, это то, что пытается сделать ваш собственный мозг - вы ищете небольшие узоры, такие как волосы, морщины, уши и т. Д., И на основе совокупности всех этих данных можете сделать вывод. Никто или один набор черт не определяет лицо, но интуитивно вы просто как бы «знаете».

Рисунок: упрощенный пример CNN

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

Tensorflow - это библиотека с открытым исходным кодом для численных вычислений, специализирующаяся на приложениях машинного обучения. TensorFlow представляет область распознавания изображений и использует предварительно обученную модель (Inception) для распознавания изображений. Модель, которую мы хотели бы импортировать, уже была обучена на наборе данных ImageNet Large Visual Recognition Challenge - огромной базе данных. Модели от Tensorflow мощны, поскольку они могут различать тысячи разных классов, от далматинцев до посудомоечных машин, и очень сложны. Однако их фактическая загрузка занимает всего несколько минут. Мы могли бы воспользоваться преимуществами Tensorflow, переобучив последний шаг процесса в одной конкретной модели - просто указав выбранному алгоритму классифицировать изображения на таблоидные рекламные материалы, вводящие в заблуждение заявления или качественные объявления. Таким образом, мы получили бы почти все преимущества CNN без необходимости полностью создавать все меньшие системы шаблонов, которые были построены на предыдущих уровнях!

Итак, мы установили Tensorflow и переобучили MobileNet (небольшую эффективную сверточную нейронную сеть) под свои нужды. Во-первых, мы настроили MobileNet, установив входное разрешение и относительный размер модели как долю от максимально возможного MobileNet.

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

После того, как все этапы обучения были завершены, мы запустили окончательный сценарий для проверки точности оценки на наборе изображений, которые хранились отдельно от обучающего набора. После запуска скрипта на нескольких изображениях наши результаты были относительно положительными. В зависимости от того, как изображения были разделены в процессе обучения, и от конкретных фотографий, которые тестировались, мы достигли общей точности от 45% до 55% при размещении наших рекламных объявлений в правильной группе. Эти более низкие результаты, вероятно, были связаны с небольшим количеством изображений для тестирования, но они также представляли собой значительное улучшение по сравнению с исходным уровнем случайного угадывания (~ 33%). Наша вторая концепция алгоритма машинного обучения была подтверждена, и, таким образом, были разработаны две наши основные системы. Поскольку практически весь процесс разработки происходит в командной строке, код для реализации этой системы не был включен в репозиторий Github. Однако этот учебник Google TensorFlow был общей основой, которую мы использовали для обучения нашей системы машинного обучения.

Планирование следующих шагов

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

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

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

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

Имея больше времени, мы хотели бы использовать больше техник НЛП, чтобы лучше понять смысл текста в рекламе. Примеры включают комбинирование различных форм слов, использование word2vec для рассмотрения сходства слов, использование синтаксического анализатора для анализа структуры предложения и более продвинутое НЛП для поиска определенных эмоций, созданных в рекламе. Мы также планируем выполнить поиск по сетке, чтобы оптимизировать гиперпараметры SVC, и дополнительно обработать изображения для лучшего извлечения текста OCR (преобразовать в двоичную форму, удалить шум). Кроме того, мы хотели бы создать гораздо большую базу данных изображений как для тестирования, так и для обучения нашего классификатора изображений. Наконец, мы хотели бы объединить результаты обеих систем и фактически протестировать наши собственные входные данные, чтобы создать версию вредоносного контента Team Early Bird.

Спасибо, AppNexus, за то, что представили задачу на хакатоне NYC DeveloperWeek и позволили нам стать частью этого блога!