2014-05-19 14 views
14

मैं इतालवी विकिपीडिया "http://dumps.wikimedia.org/itwiki/latest/itwiki-latest-pages-articles.xml.bz2" का उपयोग gensim से word2vec मॉडल प्रशिक्षित करने के लिए कोशिश कर रहा हूँGensim ट्रेन word2vec - preprocessing और मानकों

हालांकि, मैं नहीं यकीन है कि यह कोष के लिए सबसे अच्छा preprocessing है क्या कर रहा हूँ।

गैन्सिम मॉडल टोकनयुक्त वाक्यों की एक सूची स्वीकार करता है। मेरी पहली कोशिश केवल मानक विकिपीडिया कोर्न्सस प्रीप्रोसेसर का उपयोग जेन्सेम से करना है। यह प्रत्येक आलेख निकालें, रिक्त स्थान पर विराम चिह्न और विभाजित शब्दों को हटा दें। इस उपकरण के साथ प्रत्येक वाक्य एक पूरे मॉडल के अनुरूप होगा, और मुझे मॉडल पर इस तथ्य के प्रभाव की जानकारी नहीं है।

इसके बाद मैं मॉडल को डिफ़ॉल्ट मानकों के साथ प्रशिक्षित करता हूं। दुर्भाग्य से प्रशिक्षण के बाद ऐसा लगता है कि मैं बहुत सार्थक समानताओं को प्राप्त करने के लिए तैयार नहीं हूं।

इस कार्य के लिए विकिपीडिया कॉर्पस पर सबसे उपयुक्त प्रीप्रोसेसिंग क्या है? (यदि यह सवाल बहुत व्यापक हैं मुझे एक प्रासंगिक ट्यूटोरियल/लेख को इंगित करके मदद करें)

यह मेरा पहला परीक्षण की कोड:

from gensim.corpora import WikiCorpus 
import logging 
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO) 
corpus = WikiCorpus('itwiki-latest-pages-articles.xml.bz2',dictionary=False) 
max_sentence = -1 

def generate_lines(): 
    for index, text in enumerate(corpus.get_texts()): 
     if index < max_sentence or max_sentence==-1: 
      yield text 
     else: 
      break 

from gensim.models.word2vec import BrownCorpus, Word2Vec 
model = Word2Vec() 
model.build_vocab(generate_lines()) #This strangely builds a vocab of "only" 747904 words which is << than those reported in the literature 10M words 
model.train(generate_lines(),chunksize=500) 

उत्तर

7

आपका दृष्टिकोण ठीक है।

model.build_vocab(generate_lines()) #This strangely builds a vocab of "only" 747904 words which is << than those reported in the literature 10M words 

यह (डिफ़ॉल्ट min_count=5 है), क्योंकि प्रूनिंग निराला शब्दों का हो सकता है।

गणना को तेज करने के लिए, आप preprocessed लेखों को सादा .txt.gz फ़ाइल, प्रति पंक्ति एक वाक्य (दस्तावेज़) के रूप में "कैशिंग" पर विचार कर सकते हैं और फिर बस word2vec.LineSentence कॉर्पस का उपयोग कर सकते हैं। यह प्रत्येक पुनरावृत्ति पर bzipped विकी एक्सएमएल पार्सिंग बचाता है।

क्यों word2vec इतालवी विकी के लिए "सार्थक समानताएं" उत्पन्न नहीं करता है, मुझे नहीं पता। अंग्रेजी विकी ठीक काम करता प्रतीत होता है। here भी देखें।

+0

धन्यवाद, मैं अब तक word2vec और Gensim का उपयोग कर कुछ अच्छा प्रारंभिक अनुभव था। हालांकि, मेरे आवेदन के लिए वर्तमान सीमा यह है कि प्रशिक्षण के दौरान शब्दावली ऑनलाइन नहीं सीखा जा सकता है। मैंने इसे अभी तक विस्तार से नहीं देखा है, लेकिन मुझे आश्चर्य है कि ऑनलाइन शब्दावली का विस्तार करने की संभावना देकर कोड को संशोधित करना संभव होगा ... क्या आपके पास इस पर कोई विचार है? धन्यवाद! –

3

मैं विकिपीडिया कॉर्पस को मालिश करने और इसके बाहर वैक्टर प्राप्त करने के लिए एक परियोजना पर काम कर रहा हूं। मैं जल्द ही इतालवी वैक्टर उत्पन्न हो सकता है, लेकिन मामले में आप अपने दम पर यह करने के लिए पर एक नज़र डालें हैं: https://github.com/idio/wiki2vec

संबंधित मुद्दे