我有一个庞大的(~250万条记录)图像元数据数据库。每个记录代表一个图像,并且有一个唯一的ID、一个描述字段、一个逗号分隔的关键字列表(比如每个图像20-30个关键字)和一些其他字段没有真正的数据库模式,我不知道哪些关键字存在于数据库中,而不必重复遍历每个图像并对它们进行计数。此外,元数据来自几个不同的供应商,每个供应商对如何填写不同的字段都有自己的想法。
我想用这些元数据做一些事情,但是由于我对这种算法还很陌生,我甚至不知道从哪里开始寻找。
其中一些图片对它们有一定的使用限制(以文本形式给出),但每个供应商对它们的措辞不同,无法保证一致性。我想有一个简单的测试,我可以适用于一个图像,给出一个指示,如果该图像是没有限制或没有。它不一定要完美,只要“足够好”。我想我可以用某种贝叶斯滤波器来做这个,对吧?我可以用一个我知道是受限制的或无限制的图像集来训练过滤器,然后过滤器就可以对其余的图像进行预测了还是有更好的方法?
我也希望能够索引这些图像根据'关键字相似性',这样,如果我有一个图像,我可以很快地告诉其他哪些图像共享最多的关键字。理想情况下,该算法还将考虑到一些关键字比其他关键字更重要,并对它们进行不同的加权。我甚至不知道从哪里开始找,如果有人指点我,我会很高兴的:)
我主要在Java中工作,但是语言选择在这里是无关紧要的。我更感兴趣的是学习什么方法最适合我开始阅读。提前谢谢:)
最佳答案
(1)文本中的单词作为特征,而“restricted”和“not restricted”作为标签,这看起来是一个分类问题。贝叶斯滤波或任何分类算法都应该做到这一点。
(2)看起来像一个聚类问题。首先,您需要找到一个好的相似度函数,该函数根据两个图像的关键字返回它们的相似度得分。余弦相似性可能是一个很好的起点,因为您正在比较关键字。从那里你可以计算一个相似度矩阵,只需记住数据集中每个图像的“最近邻居”列表,或者你可以进一步使用聚类算法得出实际的图像聚类。
由于您有这么多记录,您可能希望跳过计算整个相似性矩阵,而只为数据集的一个随机小样本计算集群。然后,您可以将其他数据点添加到适当的集群中。如果您想保留更多的相似性信息,可以查看软聚类。
希望这能帮你开始。