2009-02-10 95 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