2009-02-10 93 views
1

我有一个大的(〜2.5M记录)图像元数据的数据库。每条记录都代表一张图片,并且具有唯一的ID,说明字段,以逗号分隔的关键字列表(每个图片包含20-30个关键字)以及其他一些字段。没有真正的数据库模式,我无法知道数据库中存在哪些关键字,而无需遍历每个图像并对它们进行计数。此外,元数据来自几个不同的供应商,每个供应商都有自己的关于如何填写不同领域的想法。分析,分类和索引元数据

我想用这个元数据做一些事情,但由于我对这类算法完全陌生,所以我甚至不知道从哪里开始寻找。

  1. 其中一些图像对它们有一定的使用限制(以文本形式给出),但每个供应商用不同的方式表述它们,并且没有办法保证一致性。我想要一个简单的测试,我可以将其应用于图像,以显示该图像是否不受限制。它不一定是完美的,只是'够好'。我怀疑我可以使用某种贝叶斯过滤器,对吧?我可以使用我知道的图像文集来训练过滤器,这些文件可以是受限的或无限制的,然后过滤器可以对其余图像做出预测?或者有更好的方法吗?
  2. 我还希望能够根据'关键字相似性'对这些图像进行索引,这样如果我有一个图像,我可以快速地分辨出哪些图像与最常见的关键字共享。理想情况下,该算法还会考虑到一些关键字比其他关键字更重要,并对它们进行不同的权衡。我甚至不知道从哪里开始寻找在这里,而且会很高兴为任何指针:)

我在Java的主要工作,但语言选择在这里无关紧要。我更有兴趣了解哪些方法最适合我开始阅读。在此先感谢:)

回答

1

(1)看起来像文本中词语的分类问题,特征为“限制”和“不受限制”作为标签。贝叶斯过滤或任何分类算法都应该这样做。

(2)看起来像一个聚类问题。首先,您想要提供一个很好的相似度函数,根据关键字返回两个图像的相似度分数。余弦相似性可能是一个很好的起点,因为您正在比较关键字。从那里你可以计算一个相似度矩阵,并记住数据集中每个图像的“最近邻居”列表,或者你可以进一步使用聚类算法来获得实际的图像簇。由于您有这么多记录,您可能需要跳过计算整个相似度矩阵,并且只为您的数据集的随机小样本计算群集。然后,您可以将其他数据点添加到适当的群集。如果你想保留更多的相似性信息,你可以看看软聚类。

希望这会让你开始。

2

绝对你必须开始把你的'关键字列表'字段变成一个真正的标签方案。最简单的是一张标签表,以及与图像表(即每个记录具有图像的外键和关键字的另一个外键)的“多对多”关系。它可以真正快速地找到具有一定关键字集的所有图像。

贝叶斯过滤器检测限制措施,很有趣。我会说,去除它,除非你时间紧迫。如果是这样的话,一些简单的模式匹配应该可以获得超过90-95%的案例,其余的可以通过几个操作员快速完成。

+0

使用关系数据库对于我所想要的应用程序来说是不可行的。此外,当搜索“关键字相似性”时,我并不真正在寻找具有一组给定关键字的图像,而是具有“良好重叠”的图像(当您不知道术语时难以描述)。 – 2009-02-10 21:31:40

+0

如果它不是关系型的,但你可以有多个表,你仍然可以自己处理关系。任何'重叠'算法都是从找到具有给定(一组)关键字的图像开始的。 – Javier 2009-02-11 15:25:48