значимость периодов в предложениях при обучении документов с помощью Doc2Vec - PullRequest
0 голосов
/ 05 апреля 2020

Сомнение - 1

Я обучаю Doc2Ve c с 150000 документов. Поскольку эти документы находятся в правовой сфере, их действительно сложно очистить и подготовить для дальнейшего обучения. Поэтому я решил удалить все периоды из документа. Сказав это, я запутался в том, как параметр Window_size в doc2ve c теперь распознает предложения. В этом вопросе представлены два представления: Doc2Ve c: дифференцировать предложение и документ

  1. Алгоритм работает только с фрагментами текста, не имея представления о том, какое предложение / параграф / документ и т. д. c могут быть.
  2. Для токенизации даже характерно сохранение знаков препинания, таких как периоды между предложениями, в качестве отдельных токенов.

Поэтому я нахожусь в путаница, если мой принятый подход устранения пунктуации (периоды) является правильным. Пожалуйста, предоставьте мне несколько поддерживающих ответов.

Сомнение-2

Документы, которые я выбрал, варьируются от 500 до 5500 токенов, поэтому мой подход - иметь довольно четные документы для обучения doc2ve c и даже сократить словарный запас: рассмотрим документ размером более 1500 токенов, в этом случае я использую первые от 50 до 400 токенов + от 600 до 1000 токенов + последние 250 токенов. Мотивация для такого подхода основана на документе, связанном с классификацией документов с использованием BERT, в котором последовательность из 512 токенов была сгенерирована следующим образом.

Поэтому я хочу знать, является ли эта идея достаточно хорошей для продолжения или она не рекомендуется делать это?

Обновление - я только что увидел корпус common_text, используемый gensim в учебной ссылке https://radimrehurek.com/gensim/models/doc2vec.html и обнаружил, что документы в этом корпусе являются просто жетонами слов и не содержат знаков препинания. Например:

from gensim.test.utils import common_texts, common_dictionary, common_corpus

print(common_texts[0:10])

Вывод:

[['human', 'interface', 'computer'], ['survey', 'user', 'computer', 'system', 'response', 'time'], ['eps', 'user', 'interface', 'system'], ['system', 'human', 'system', 'eps'], ['user', 'response', 'time'], ['trees'], ['graph', 'trees'], ['graph', 'minors', 'trees'], ['graph', 'minors', 'survey']]

То же самое было сделано в руководстве https://radimrehurek.com/gensim/auto_examples/tutorials/run_doc2vec_lee.html. Так что мой подход удаления периодов в документе действителен, если да, то как будет работать параметр окна, потому что в документации он определяется следующим образом: окно (int, необязательно) - максимальное расстояние между текущим и прогнозируемым словом в предложении .

1 Ответ

1 голос
/ 05 апреля 2020

Некоторые люди держат точки и другие знаки препинания как отдельные токены, некоторые исключают их.

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

Несмотря на любые ссылки на «предложения» в документах, классы Word2Vec / Doc2Vec / et c в gensim не имеют никакого понимания предложений или особой чувствительности к пунктуации. Они просто видят списки токенов, которые вы передаете, как отдельные элементы в корпусе. Таким образом, если вы должны оставить точки в, как в коротком тексте, как ...

['the', 'cat', 'was', 'orange', '.', 'it', 'meowed', '.']

... тогда строка '.' это просто другое псевдослово, которое получит вектор, и обучение windows пройдет через него, как и любое другое слово. (И, 'meowed' будет в 5 жетонах от 'cat', и, таким образом, будет иметь некоторое влияние, если window=5.)

Я не совсем понимаю, что вы имеете в виду "использовать Первые 50 для 400 жетонов + от 600 до 1000 жетонов + последние 250 жетонов ". Doc2Vec отлично работает до текстов 10000 токенов. (Большее количество токенов будет игнорироваться из-за внутреннего предела реализации gensim.) Нет необходимости или обычно разбивать документы на более мелкие порции, если у вас нет какой-либо другой необходимости моделировать меньшие порции текста.

Крошечный набор common_texts списков слов - это надуманный бит размером с игрушку, демонстрирующий использование базового c кода - это не пример рекомендуемых практик. Демонстрации, основанные на корпусе «Ли», также представляют собой краткое введение в крошечный и простой подход, которого едва хватает для демонстрации базового использования и результатов. Это текстовое токенизация - с помощью служебного метода simple_preprocess() - это нормально, но не «правильно» или «лучше» по сравнению со всеми другими возможностями.

...