Правильный способ представления документов, содержащих несколько предложений, в обучении на основе файлов Gensim - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь использовать файловое обучение gensim (пример из документации ниже):

from multiprocessing import cpu_count
from gensim.utils import save_as_line_sentence
from gensim.test.utils import get_tmpfile
from gensim.models import Word2Vec, Doc2Vec, FastText
 # Convert any corpus to the needed format: 1 document per line, words delimited by " "
corpus = api.load("text8")
corpus_fname = get_tmpfile("text8-file-sentence.txt")
save_as_line_sentence(corpus, corpus_fname)
 # Choose num of cores that you want to use (let's use all, models scale linearly now!)
num_cores = cpu_count()
 # Train models using all cores
w2v_model = Word2Vec(corpus_file=corpus_fname, workers=num_cores)
d2v_model = Doc2Vec(corpus_file=corpus_fname, workers=num_cores)
ft_model = FastText(corpus_file=corpus_fname, workers=num_cores)

Тем не менее, мой настоящий корпус содержит много документов, каждый из которых содержит много предложений. Например, давайте предположим, что мой корпус - пьесы Шекспира. Каждая пьеса - это документ, в каждом документе много предложений, и я хотел бы изучить вложения для каждой пьесы, но вложения слова только из одного предложения. Поскольку обучение на основе файлов предназначено для одного документа на строку, я предполагаю, что я должен поставить одну игру на строку. Однако в документации для обучения на основе файлов нет примеров документов с несколькими предложениями. Есть ли способ заглянуть внутрь модели, чтобы увидеть документы и пары контекста слов, которые были найдены до того, как они обучены?

Как правильно построить этот файл, поддерживая границы предложений?

Спасибо

1 Ответ

1 голос
/ 25 января 2020

Эти реализации алгоритма не имеют реального понимания или зависимости от реальных предложений. Они просто берут тексты - наборы слов-токенов.

Часто тексты, предоставляемые для Word2Vec, состоят из нескольких предложений. Иногда знаки пунктуации, такие как периоды окончания предложения, даже сохраняются как псевдо-слова. (И когда предложения были действительно последовательными друг с другом в исходных данных, перекрывающийся контекст слова windows между предложениями может даже принести пользу.)

Так что вам не нужно беспокоиться о «поддержание границ предложения». Любые тексты, которые вы предоставляете, которые являются разумными единицами слов, которые действительно встречаются, также будут работать. (Особенно в Word2Vec и FastText, даже изменение ваших разрывов между текстами на предложения, или абзацы, или разделы, или документы вряд ли сильно повлияет на конечные векторы слов - это просто изменение подмножества учебные контексты, и, вероятно, не каким-либо образом существенно изменяет, какие слова влияют на какие другие слова.)

Однако в gensim есть еще один предел реализации, на который следует обратить внимание: каждый обучающий текст может только длиной 10 000 токенов, и если вы предоставите более крупные тексты, дополнительные токены будут игнорироваться.

Итак, обязательно используйте тексты с токенами 10 КБ или короче - даже если вам нужно произвольно разделить более длинные. (Как указано выше, любой такой произвольный дополнительный разрыв в группировке токенов вряд ли окажет заметное влияние на результаты.)

Однако это представляет особую проблему при использовании Doc2Vec в режиме corpus_file, поскольку в этом случае режим, вы не можете указать предпочитаемый tags для текста. (Текстовый тег в этом режиме, по сути, представляет собой просто номер строки.)

В исходном режиме последовательности последовательности обходной путь для этого предела токена в 10k состоял в том, чтобы просто разбить большие документы на несколько документов - но используйте то же самое повторное tags для всех поддокументов из исходного документа. (Это очень близко соответствует влиянию do c любого размера на обучение.)

Если у вас есть документы с токенами более 10k, я бы порекомендовал либо не использовать режим corpus_file, либо изобразить некоторые из них. способ использовать логические поддокументы с токенами менее 10 тыс., затем, возможно, моделировать ваши большие документы как набор их поддокументов или иным образом настраивать последующие задачи для работы с теми же единицами поддокументов.

...