Иерархическое обучение для doc2vec: как будет работать назначение одинаковых меток предложениям одного и того же документа? - PullRequest
0 голосов
/ 25 июня 2018

Каков эффект присвоения одной и той же метки группе предложений в 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'])

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

1 Ответ

0 голосов
/ 25 июня 2018

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

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

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

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

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

  • Doc2Vec имеет тенденцию работать лучше с документами, по крайней мере, дюжиной или более слов на документ.
  • 'words' необходимо токенизировать - список строк, а не строка.
  • Он выигрывает от большого количества разнообразных данных, в частности, если вы тренируетесь с более крупной моделью - с более уникальными тегами (включая перекрывающиеся) и многомерными векторами - вам понадобится больше данных, чтобы избежать переобучения.
...