2017-04-19 68 views
3

我想在使用python和gensim的英文維基百科上訓練word2vec模型。我密切關注着https://groups.google.com/forum/#!topic/gensim/MJWrDw_IvXw禁用Gensim在解析wiki語料庫時刪除標點符號等

它適用於我,但我不喜歡產生的word2vec模型是命名實體被拆分,使得模型對我的特定應用程序不可用。我需要的模型必須將命名實體表示爲單個向量。

這就是爲什麼我計劃用spacy解析維基百科文章並將諸如「north carolina」之類的實體合併到「north_carolina」中,以便word2vec將它們表示爲單個向量。到現在爲止還挺好。

的spacy解析必須是預處理,這本來我作爲鏈接討論使用建議的一部分:

... 
wiki = WikiCorpus(wiki_bz2_file, dictionary={}) 
for text in wiki.get_texts(): 
    article = " ".join(text) + "\n" 
    output.write(article) 
... 

這消除了標點符號,停用詞,數字和大寫並將其保存在每篇文章單獨的行生成輸出文件。問題在於,這個預處理的文本中,spacy的NER並不真正起作用,因爲我猜它依賴於NER(?)的標點符號和大寫字母。

有誰知道我是否可以「禁用」gensim的預處理,以便它不會刪除標點符號等,但仍然直接從壓縮的維基百科轉儲解析維基百科文章到文本?或者有人知道一個更好的方法來完成這個?提前致謝!

+0

更新:我從Gensim複製了WikiCorpus類,自己在需要它們的地方添加spaCy操作。現在,這似乎是要走的路,如果你想改變gensim預處理維基百科文本的方式 – marlonfl

+0

順便說一句,如果你已經實現了這個並解決了這個問題,如果你可以在這裏分享這個方法,那將是非常好的。 – sophros

回答

0

如果空間在句子級別上運行,我不會感到驚訝。爲此,它很可能使用句子邊界(點,問號等)。這就是爲什麼不錯的NER(或者甚至是早期的POS Tagger)可能會失敗。至於代表gensim的LSI的命名實體的方式 - 我會建議添加一個人爲的標識符(一個不存在的單詞)。從模型的角度來看,它沒有任何區別,它可以爲您節省重新處理gensim預處理的負擔。

你可能想參考model.wv.vocab其中model = gensim.models.Word2Vec(...)因此,你將不得不訓練模型兩次。或者,嘗試從原始文本中創建一個詞彙集,然後選擇一組隨機的字母,這些字母在詞彙表中不存在。