Doc2Vec - Как пометить абзацы (gensim)

17

Мне интересно, как пометить (пометить) предложения / абзацы / документы с помощью doc2vec в gensim - с практической точки зрения.

Вам нужно иметь каждое предложение / абзац / документ со своей уникальной меткой (например, «Sent_123»)? Это кажется полезным, если вы хотите сказать «какие слова или предложения больше всего похожи на одно конкретное предложение, помеченное как« Sent_123 ».

Можно ли повторять ярлыки в зависимости от содержимого? Например, если каждое предложение / параграф / документ относится к определенному элементу продукта (и для данного элемента продукта есть несколько предложений / параграф / документ), вы можете пометить предложения на основе элемента и затем вычислить сходство между словом или предложение и этот ярлык (который, я думаю, был бы средним из всех тех предложений, которые были связаны с товаром)?

B_Miner
источник

Ответы:

10

Оба возможны. Каждому документу можно присвоить уникальный идентификатор (например, последовательный серийный номер) в виде doctag или doctag с общей строкой, представляющего что-то еще об этом, или оба одновременно.

Конструктор TaggedDocument принимает список тегов. (Если вам случится ограничиться обычными целочисленными значениями, начиная с 0, модель Doc2Vec будет использовать их в качестве прямых индексов в своем массиве резервных копий, и вы сэкономите много памяти, которая в противном случае была бы выделена для поиска строки -> индекса , что может быть важно для больших наборов данных. Но вы можете использовать строки doctags или даже смесь int и string doctags.)

Вам придется экспериментировать с тем, что лучше всего подходит для ваших нужд.

Для некоторых задач классификации подход, который иногда работает лучше, чем я ожидал, полностью пропускает идентификаторы для каждого текста и просто обучает модель Doc2Vec на примерах известного класса с желаемыми классами в качестве doctag. Затем вы получаете «векторы документов» только для класса doctags - не для каждого документа - потенциально гораздо меньшей модели. Более поздние логические векторы для новых текстов приводят к векторам, значимо близким к родственным векторам документа класса.

gojomo
источник
Это здорово, большое спасибо! Кроме того, когда я начинаю играть с genim - мне любопытно, можно ли рассчитать сходство между документом (независимо от того, используются ли уникальные или общие теги) и словом - можно ли это сделать в вашем опыте?
B_Miner
1
Некоторые режимы обучения создают векторы слова и документа внутри «одного и того же пространства», поэтому сходство может быть значимым. См., Например, эту статью - arxiv.org/abs/1507.07998, которая даже выполняет своего рода «арифметику аналогий» с использованием doc-векторов (статьи из Википедии) и слово-векторов. Обучение в этой работе, как режим DBOW gensim с одновременным пропуском грамм словесного обучения: dm=0, dbow_words=1.
Годжомо
Спасибо @gojomo! Я добавил запрос о том, как это сделать, в список gensim
B_Miner
Пожалуйста, поправьте меня, если я ошибаюсь. В последнем абзаце вы предлагаете пометить каждый документ так, как мы помечаем вопросы на этом сайте. А после обучения мы получим векторное представление каждого тега. Когда приходит новый документ, мы можем просто использовать метрику сходства для предложения тегов для нового документа.
пользователь
@user - да, это возможно, а иногда и полезно, хотя в этом нет необходимости.
Годжомо
9

doc2vecМодель получает свой алгоритм от word2vec.

В word2vecэтом нет необходимости маркировать слова, потому что каждое слово имеет свое семантическое значение в словаре. Но в случае doc2vecнеобходимости необходимо указать, сколько слов или предложений передают семантическое значение, чтобы алгоритм мог идентифицировать его как единое целое. По этой причине мы указываем labelsили tagsпредложение или абзац в зависимости от уровня передаваемого смыслового значения.

Если мы указываем одну метку для нескольких предложений в абзаце, это означает, что все предложения в абзаце необходимы для передачи значения. С другой стороны, если мы указываем переменные метки для всех предложений в абзаце, это означает, что каждое из них передает семантическое значение, и они могут иметь или не иметь сходство между ними.

Проще говоря, labelозначает смысловой смысл чего-то.

yazhi
источник
If we specify a single label to multiple sentences in a paragraph, it means that all the sentences in the paragraph are required to convey the meaning.Я не уверен, что правильно понимаю. Из алгоритмов POV, все ли предложения с одинаковым тегом необходимы для семантического определения или все предложения с одинаковым тегом описывают одно и то же? В первом случае ни одно предложение само по себе не является самодостаточным, во втором случае отдельное предложение является самодостаточным.
пользователь
@user: Это второй случай, из алгоритма POV, тег определяется как сущность, которая при использовании в одном предложении фиксирует значение всех слов. Таким же образом при использовании в нескольких предложениях он также фиксирует слова во всех других предложениях.
Яжи