Gensim train word2vec в википедии - предварительная обработка и параметры

Я пытаюсь обучить модель 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)

person Luca Fiaschi    schedule 19.05.2014    source источник


Ответы (2)


Ваш подход в порядке.

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. Это избавляет от синтаксического анализа сжатого вики-файла XML на каждой итерации.

Я не знаю, почему word2vec не производит «значимого сходства» для итальянской вики. Английский вики вроде работает нормально. См. Также здесь.

person Radim    schedule 30.05.2014
comment
Спасибо, у меня был хороший начальный опыт использования word2vec и Gensim. Однако для моего приложения текущее ограничение состоит в том, что словарный запас, похоже, не изучается онлайн во время обучения. Я еще не рассматривал это подробно, но мне интересно, можно ли изменить код, дав возможность расширить словарный запас в Интернете ... вы что-нибудь думали по этому поводу? Спасибо! - person Luca Fiaschi; 31.05.2014

Я работал над проектом по массажу корпуса Википедии и извлечению из него векторов. Возможно, скоро я сгенерирую итальянские векторы, но если вы захотите сделать это самостоятельно, посмотрите: https://github.com/idio/wiki2vec

person David Przybilla    schedule 20.02.2015