TL; DR: В рамках серии экспериментов по генерации текста с помощью нейронных сетей в какой-то момент мне пришла в голову не очень свежая идея генерации названий цветов.

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

А теперь подробнее:

Сначала я проверил, делал ли кто-то подобное до меня, и, конечно же, нашел похожий проект: там исследователь из Колорадо Джанель Шейн использовала базу 7700 названий цветов от компании Sherwin-Williams. крупнейший в мире производитель красок. Затем она научила символьную RNN генерировать имена для компонентов в стиле RGB. Позже она также написала продолжение, в котором проверила еще несколько идей.

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

Прежде всего, я решил сделать хороший набор данных, а не рисовать названия цветов (где маркетологи придумывают абстрактные слова для продажи), а что-то более близкое к реальному цветовому восприятию человека. Кстати, вспомнил, что с таким набором данных я уже сталкивался шесть лет назад и даже что-то написал об этом в своем блоге. Специалисты CrowdFlower, занимающиеся автоматизацией опросов, такие как Mechanical Turk от Amazon, опубликовали отобранную вручную базу названий для 4000 цветов. Более того, для каждого из них, помимо стандартного английского имени, собрали его имя на 8 других языках и перевод этих имен обратно на английский. В результате для каждого цвета было до 9 разных английских названий.

С тех пор CrowdFlower был переименован в Figure Eight Inc., изменил адрес сайта и сосредоточился на AI & ML, но тот же набор данных все еще можно найти в Интернете (с нарушенной кодировкой, но английские имена там все еще верны.
Я также добавил несколько небольших вручную очищенных наборов данных, собранных вручную из разных уголков Интернета, так что в результате у меня было примерно 15K уникальных пар имен RGB +.

Одна из идей, которую я хотел проверить, - это использование расширенного числового представления цвета. Вместо использования одного из пробелов RGB, HSL, YIQ,…, я решил сгенерировать несколько альтернативных представлений из RGB (с помощью модуля colorsys Python), а затем обусловил генерацию имени конкатенированным вектором различных представлений. Дело в том, что отдельные компоненты в разных представлениях могут влиять на разные слова имени. Например, в названии темно-красный, вероятно, темнота хорошо определяется компонентом L HSL, а краснота Легче всего определить по R-составляющей RGB. Технически сеть может узнать это сама, но на небольшом наборе данных и без прямого таргетинга на это мало шансов. В качестве архитектуры я использовал многоуровневый LSTM на основе символов с нормализацией слоев и парой костылей.

Для визуализации я взял клиентский код Dave Oleson и Dawn Ho на основе D3.js, написанный ими однажды для того оригинального поста от CrowdFlower. Я немного переписал его и использовал набор сгенерированных имён для тех же 4000 цветов в качестве входных данных.

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