Gensim train word2vec на wikipedia - предварительная обработка и параметры
Я пытаюсь обучить модель word2vec из gensim
, используя итальянскую википедию
"http://dumps.wikimedia.org/itwiki/latest/itwiki-latest-pages-articles.xml.bz2"
Тем не менее, я не уверен, какова лучшая предварительная обработка для этого корпуса.
Модель gensim
принимает список токенизированных предложений.
Моя первая попытка - просто использовать стандартный препроцессор WikipediaCorpus
из gensim
. Это извлекает каждую статью, удаляет пунктуацию и разбивает слова на пробелы. С помощью этого инструмента каждое предложение будет соответствовать целой модели, и я не уверен в влиянии этого факта на модель.
После этого я тренирую модель с параметрами по умолчанию. К сожалению, после тренировки мне кажется, что мне не удается получить очень значимое сходство.
Какова наиболее подходящая предварительная обработка в корпусе Википедии для этой задачи? (если эти вопросы слишком широки, пожалуйста, помогите мне, указав на соответствующий учебник/статью)
Это код моего первого испытания:
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)
Ответы
Ответ 1
Твой подход прекрасен.
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
).
Чтобы ускорить вычисление, вы можете рассматривать "кэширование" предварительно обработанных статей как простой файл .txt.gz
, одно предложение (документ) на строку, а затем просто используя word2vec.LineSentence corpus. Это экономит синтаксический разбор XML файлов с поддержкой bzipped на каждой итерации.
Почему word2vec не создает "значимых сходств" для итальянской вики, я не знаю. Английская вики, похоже, работает нормально. См. Также здесь.
Ответ 2
Я работал над проектом по массажу корпуса Википедии и извлечению из него векторов.
Я мог бы скоро создать итальянские векторы, но если вы хотите сделать это самостоятельно, взгляните на:https://github.com/idio/wiki2vec