2011-11-11 68 views
4

我正在使用的詞彙:如何使用Freebase標記非常大的未標記的NLP數據集?

nounphrase - 引用特定人物,地點或想法的短語。不同的名詞短語的例子包括「巴拉克奧巴馬」,「奧巴馬」,「水瓶」,「黃石國家公園」,「谷歌Chrome瀏覽器」等。

category - 定義哪些名詞性詞組屬於它的語義概念哪些不是。類別的例子包括「政治家」,「家庭用品」,「食物」,「人物」,「運動隊」等。因此,我們會認爲「巴拉克奧巴馬」屬於「政治家」和「人民」不屬於「食物」或「運動隊」。

我有一個非常大的未標記的NLP數據集,包含數百萬個名詞短語。我想用Freebase來標記這些名詞短語。我有Freebase類型的映射到我自己的類別。我需要做的是爲我擁有的每個Freebase類型下載每個示例。

我面對的問題是需要弄清楚如何構建這種類型的查詢。在高層次上,查詢應詢問Freebase「主題XX的所有例子是什麼?」並且Freebase應該回答「這是主題XX的所有示例的列表」。如果有人能給我這個查詢的語法,我將非常感激。如果能在Python來完成,這將是真棒:)

回答

4

查詢的基本形式(一個人,例如)是

[{ 
    "type":"/people/person", 
    "name":None, 
    "/common/topic/alias":[], 
    "limit":100 
}]​ 

有文件可在http://wiki.freebase.com/wiki/MQL_Manual

使用Python庫http://code.google.com/p/freebase-python/中的freebase.mqlreaditer()是循環所有這些的最簡單方法。在這種情況下,「limit」子句確定用於查詢的塊大小,但是您會在API級別單獨獲取每個結果。

順便說一句,你怎麼打算歧義傑克·肯尼迪總統,從投擲者,從足球運動員,從書籍,等等等等http://www.freebase.com/search?limit=30&start=0&query=jack+kennedy你可能要考慮的遊離鹼獲取更多的信息(出生&死亡日期,書籍作者,其他類型分配等),如果你有足夠的上下文可以使用它來消除歧義。

過去的某一點,可能更容易和/或更有效地從大量的數據工作,轉儲,而不是API http://wiki.freebase.com/wiki/Data_dumps

編輯 - 這裏是它假定你有列表的工作Python程序在一個名爲「types.txt」文件類型ID:

import freebase 

f = file('types.txt') 
for t in f: 
    t=t.strip() 
    q = [{'type':t, 
      'mid':None, 
      'name':None, 
      '/common/topic/alias':[], 
      'limit':500, 
      }] 
    for r in freebase.mqlreaditer(q): 
     print '\t'.join([t,r['mid'],r['name']]+r['/common/topic/alias']) 
f.close() 

如果您的查詢要複雜得多,你可能會想將這個限制,從運行到超時保留,但對於像一個簡單的查詢這將提高超過默認值100的限制將通過查詢更大的塊來提高效率。

+0

非常感謝湯姆!我最終使用了數據轉儲。然而,Python代碼非常有用,因爲我非常想知道如何從Freebase獲取實例。我也很感謝你對消除歧義的評論。目前,我的研究小組中的一名博士生正在從機器學習的角度來關注這個消歧問題。看看他是否可以使用Freebase來增強是目前的方法將是有趣的。 – Malcolm

1

這裏描述的一般問題在自然語言處理中稱爲實體鏈接。

不加掩飾的自我插頭:

見我們的主題書章介紹,並進行大規模的實體連接的方法。

http://cs.jhu.edu/~delip/entity_linking.pdf

@deliprao

+0

謝謝你閱讀本章。我相信它會派上用場。 – Malcolm