Иерархическое обучение для doc2vec: как будет работать присвоение одинаковых меток предложениям одного и того же документа?

Каков эффект присвоения одной и той же метки кучке предложений в doc2vec? У меня есть набор документов, по которым я хочу изучить векторы с помощью gensim для задачи классификации «файлов», где файл относится к набору документов для данного идентификатора. У меня есть несколько способов маркировки, и я хочу знать, в чем будет разница между ними и какой из них лучший -

  • Берем документ d1, присваиваем тегам метку doc1 и тренируемся. Повторите для других

  • Берем документ d1, присваиваем тегам метку doc1. Затем разделите документ на предложения и присвойте его тегам метку doc1, а затем тренируйтесь как с полным документом, так и с отдельными предложениями. Повторите для других

Например (не обращайте внимания на то, что предложение не токенизировано) -

Document -  "It is small. It is rare" 
TaggedDocument(words=["It is small. It is rare"], tags=['doc1'])
TaggedDocument(words=["It is small."], tags=['doc1'])
TaggedDocument(words=["It is rare."], tags=['doc1'])
  • Аналогично предыдущему, но также назначьте уникальный ярлык для каждого предложения вместе с doc1. Полный документ содержит все теги предложений вместе с doc1.

Пример -

Document -  "It is small. It is rare" 
TaggedDocument(words=["It is small. It is rare"], tags=['doc1', 'doc1_sentence1', 'doc1_sentence2'])
TaggedDocument(words=["It is small."], tags=['doc1', 'doc1_sentence1'])
TaggedDocument(words=["It is rare."], tags=['doc1', 'doc1_sentence2'])

У меня также есть несколько дополнительных категориальных тегов, которые я бы назначил. Итак, что было бы лучшим подходом?


person HMK    schedule 24.06.2018    source источник


Ответы (1)


Вы все это можете! Назначение одного и того же тега нескольким текстам имеет почти тот же эффект, что и объединение этих текстов в один более крупный текст и присвоение ему этого тега. Небольшие отличия будут для Doc2Vec режимов, где есть контекстное окно - PV-DM (dm=1). С отдельными текстами никогда не было бы контекстов, тянущихся через конец / начало предложения.

Фактически, поскольку оптимизированные пути кода gensim имеют ограничение в 10 000 токенов для размеров текста, большие документы разбиваются на вложенные документы, но повторение их тегов иногда необходимо в качестве временного решения.

То, что вы специально предложили, обучение как полного документа, так и его фрагментов, будет работать, но также будет иметь эффект удвоения объема текста (и, следовательно, примеров обучения-внимания / индивидуального-предсказания) для 'doc1' теги по сравнению с более узкими тегами для отдельных предложений. Возможно, вы захотите этого или нет - это может повлиять на относительное качество каждого из них.

Что лучше, неясно - это зависит от вашего корпуса и конечных целей, поэтому его следует определять путем экспериментов с четкой конечной оценкой, чтобы вы могли автоматизировать / систематизировать тщательный поиск лучшего.

Однако несколько важных замечаний:

  • Doc2Vec, как правило, лучше работает с документами, содержащими не менее дюжины или более слов в документе.
  • 'words' необходимо токенизировать - это список строк, а не строка.
  • Он извлекает выгоду из большого количества разнообразных данных, и, в частности, если вы тренируете более крупную модель - больше уникальных тегов (включая перекрывающиеся) и многомерные векторы - вам понадобится больше данных, чтобы избежать переобучения.
person gojomo    schedule 25.06.2018
comment
Спасибо. Я не особо понимаю, что вы имеете в виду под эффектом удвоения текста и примеров обучения-внимания / индивидуального-предсказания? Приведет ли это к переобучению? - person HMK; 25.06.2018
comment
Переобучение в основном представляет собой риск, если у вас есть большая модель (с общим количеством настраиваемых параметров, которые здесь, по сути, являются векторами word / doc) и относительно небольшими данными. Но также вы не можете превратить небольшие данные в большие, просто повторив их. (Если у вас есть только 2 уникальных документа, он не станет таким же хорошим, как 2 миллиона документов, если повторять их каждый миллион раз.) Если вы предоставляете 2 тега для документа, это немного похоже на добавление документа дважды, один раз с одним. тег, и один раз с другим. Фактически, в режиме PV-DBOW (dm=0) это работает именно так. … - person gojomo; 25.06.2018
comment
В режимах PV-DM (dm=1) два тега в одном и том же документе не совсем такие, но предлагаемый вами подход подачи текста один раз целиком, а затем снова разделение на предложения, где предложения снова имеют два тега, означает 'doc1' тег участвует в вдвое большем количестве индивидуальных предсказаний целевого слова (индивидуальных предсказаний-примеров) во время обучения, по сравнению с любым (1) простым обучением на полном документе; или (2) просто обучение предложениям с двойными тегами. Так что в некотором смысле к нему прилагаются больше усилий. Это может быть хорошо или плохо, в зависимости от ваших потребностей. … - person gojomo; 25.06.2018
comment
Иллюстративный пример: если некоторые документы кажутся особенно важными, вы можете рассмотреть возможность повторения только их, а другие документы должны появляться один раз. Таким образом, повторяющиеся документы больше повлияют на модель. Или подумайте, что, если в документах сильно различается длина слов, они получают несбалансированные усилия по обучению. (Документ из 100 слов позволяет модели попытаться предсказать свои 100 слов, то есть 100 подталкиваний модели за проход обучения; документ из 10 слов только 10.) Вы можете попытаться перегрузить небольшие документы, повторяя их, или недооценить более длинные документы ( возможно, случайным образом отбрасывая слова), чтобы попытаться выровнять их влияние на качество модели и вектора. … - person gojomo; 25.06.2018
comment
(Я привожу эти примеры в качестве иллюстраций эффекта, а не конкретных рекомендаций. Но если вы дошли до точки, где вы заметили, например, что полные векторы документов хороши, а предложения плохие, или длинные векторы документов хороши и короткие -doc-vectors плохо, вы можете попробовать поэкспериментировать с такими вариантами.) - person gojomo; 25.06.2018
comment
Спасибо, действительно помогает. Так что у меня возник вопрос об одинаковых категориальных тегах. Скажем, у меня есть 3 документа, первые два из которых имеют категорию «действие», а другой - «романтика» для несвязанной задачи классификации (не классификации жанра). Помогло бы использование action и romance в качестве дополнительных тегов для этих документов, т. Е. Научится ли оно более различительному встраиванию между документами action и romance? Я знаю, что это немного расплывчатый вопрос, и он будет зависеть от задачи, но я хотел знать, как именно на вектор документа влияет присутствие одного из его категориальных тегов в другом документе. - person HMK; 02.07.2018
comment
Вам придется попробовать, это зависит от многих деталей корпуса / настроек / целей / и т. Д. Я видел случаи, когда добавление известных категорий помогало улучшить работу результирующих векторов документов для классификатора нижестоящего. Но в другой раз, когда я пробовал это, я не видел повышения. Может быть золотая середина в относительной детализации категорий по сравнению с размером корпуса, уникальными идентификаторами документов, размером модели или другими факторами. (Повторный вывод одиночных doc-векторов в конце для текстов, у которых во время обучения было несколько тегов, также может иметь смысл.) - person gojomo; 02.07.2018