我有一个大的(~2.5M记录)图像元数据数据库。每条记录代表一个图像,并具有唯一的ID,描述字段,以逗号分隔的关键字列表(例如每个图像20-30个关键字)以及其他一些字段。没有真正的数据库模式,我无法知道数据库中存在哪些关键字而不迭代每个图像并计算它们。此外,元数据来自几个不同的供应商,每个供应商都有自己的想法,如何填写不同的领域。
我想对这些元数据做一些事情,但由于我对这种算法完全不熟悉,我甚至不知道从哪里开始寻找。
我主要使用Java,但语言选择与此无关。我更感兴趣的是学习哪种方法最适合我开始阅读。在此先感谢:)
答案 0 :(得分:2)
绝对必须首先将“关键字列表”字段转换为真正的标记方案。最简单的是一个标签表,以及与图像表的“多对多”关系(即第三个表,其中每个记录具有图像的外键和关键字的另一个外键)。它可以快速找到具有一组关键字的所有图像。
用于检测限制措辞的贝叶斯过滤器很有意思。除非你时间紧迫,否则我会说它去吧。如果是这种情况,一些简单的模式匹配应该可以获得超过90-95%的案例,其余的可以由几个运营商快速完成。答案 1 :(得分:1)
(1)看起来像是一个分类问题,文字中的单词作为特征,“受限制”和“不受限制”作为标签。贝叶斯过滤或任何分类算法应该可以解决问题。
(2)看起来像是一个聚类问题。首先,您需要提供一个良好的相似度函数,该函数会根据关键字返回两个图像的相似度分数。余弦相似性可能是一个很好的起点,因为您正在比较关键字。从那里你可以计算一个相似性矩阵,只记住数据集中每个图像的“最近邻居”列表,或者你可以进一步使用聚类算法来得出实际的图像聚类。
由于您有如此多的记录,您可能希望跳过计算整个相似度矩阵,并且只需为数据集的小型随机样本计算聚类。然后,您可以将其他数据点添加到适当的群集。如果要保留更多相似性信息,可以查看软聚类。
希望这会让你开始。