Анализ, категоризация и индексация метаданных

У меня есть большая (~ 2,5 млн записей) база данных метаданных изображений. Каждая запись представляет собой изображение и имеет уникальный идентификатор, поле описания, список ключевых слов, разделенных запятыми (скажем, 20-30 ключевых слов на изображение) и некоторые другие поля. Там нет реальной схемы базы данных, и я не могу узнать, какие ключевые слова существуют в базе данных, не перебирая каждое изображение и не считая их. Кроме того, метаданные поступают от нескольких разных поставщиков, у каждого из которых есть свое представление о том, как заполнять различные поля.

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

  1. Некоторые из этих изображений имеют определенные ограничения на использование (указаны в тексте), но каждый поставщик формулирует их по-своему, и невозможно гарантировать согласованность. Я хотел бы иметь простой тест, который я мог бы применить к изображению, который указывает, свободен ли этот образ от ограничений или нет. Он не должен быть идеальным, просто «достаточно хорошим». Я подозреваю, что мог бы использовать для этого какой-то байесовский фильтр, верно? Я мог бы обучить фильтр с набором изображений, которые, как я знаю, либо ограничены, либо не ограничены, и тогда фильтр сможет делать прогнозы для остальных изображений? Или есть лучшие способы?
  2. Я также хотел бы иметь возможность индексировать эти изображения в соответствии с «сходством ключевых слов», чтобы, если у меня есть одно изображение, я мог быстро определить, с какими другими изображениями оно имеет наибольшее количество общих ключевых слов. В идеале алгоритм также должен учитывать, что некоторые ключевые слова более значимы, чем другие, и взвешивать их по-разному. Я даже не знаю, с чего начать поиск здесь, и был бы очень рад любым указателям :)

Я работаю в основном на Java, но выбор языка здесь не имеет значения. Я больше заинтересован в том, чтобы узнать, какие подходы лучше всего подходят для начала чтения. Заранее спасибо :)


person fred-o    schedule 10.02.2009    source источник


Ответы (2)


(1) Похоже на проблему с классификацией слов в вашем тексте в качестве функций, а также «Ограничено» и «Не ограничено» в качестве ярлыков. Байесовская фильтрация или любой алгоритм классификации должны помочь.

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

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

Надеюсь, это поможет вам начать.

person Imran    schedule 10.02.2009
comment
Кластеризация, кажется, заслуживает изучения. Спасибо! - person fred-o; 11.02.2009

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

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

person Javier    schedule 10.02.2009
comment
Использование реляционной базы данных, к сожалению, нецелесообразно для приложения, которое я имею в виду. Кроме того, при поиске «похожести ключевых слов» я на самом деле ищу не изображения с заданным набором ключевых слов, а изображения с «хорошим перекрытием» (трудно описать, если вы не знаете терминологию). - person fred-o; 11.02.2009
comment
если это не реляционное, но у вас может быть более одной таблицы, вы все равно можете работать с отношениями самостоятельно. и любой алгоритм «перекрытия» начинается с поиска изображений с заданным (набором) ключевым словом (ами). - person Javier; 11.02.2009
comment
независимо от того, являются ли они реляционными или нет, если у вас есть сопоставление ключевого слова и изображения, вы можете выполнить несколько предварительных обработок. например, вы можете определить, какие ключевые слова являются более дискриминационными, поэтому вы знаете, какое из его ключевых слов использовать в первую очередь, чтобы уменьшить целевое подмножество. - person Javier; 11.02.2009
comment
@fred-o: Как вы считаете, что реляционная установка невозможна? Кажется, что реляционная модель абсолютно идеальна для того, что вы пытаетесь сделать. - person monksy; 27.10.2009