Классификация документов с неполным обучающим набором

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


person chrisb    schedule 28.06.2012    source источник


Ответы (3)


Предположения

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

  • Примечание. Хотя методы устранения неоднозначности (WSD) будут работать, они требуют слишком больших усилий и для этой цели являются излишними.

Предложение: локализованная языковая модель + самозагрузка

Подумайте об этом так: у вас есть не неполный обучающий набор, а меньший обучающий набор. Идея состоит в том, чтобы использовать эти небольшие обучающие данные для создания более крупных обучающих данных. Это начальная загрузка.

Для каждого вхождения вашей функции в обучающие данные постройте языковую модель, основанную только на окружающих ее словах. Вам не нужно строить модель для всего документа. В идеале должно хватить только предложений, содержащих эту функцию. Это то, что я называю локализованной языковой моделью (LLM).

Постройте два таких LLM из ваших обучающих данных (назовем их T_0): один для соответствующих документов, скажем M1, и другой для нерелевантных документов, скажем, M0. Теперь, чтобы собрать больше обучающих данных, классифицируйте документы на основе M1 и M0. Для каждого нового документа d, если d не содержит ключевого слова, он будет автоматически добавлен как «плохой» документ. Если d содержит ключевое слово, тогда рассмотрите локальное окно вокруг этого слова в d (тот же размер окна, который вы использовали для построения LLM), и вычислите недоумение этой последовательности слов с M0 и M1. Классифицируйте документ как принадлежащий к тому классу, который не вызывает затруднений.

Чтобы формализовать, псевдокод:

T_0 := initial training set (consisting of relevant/irrelevant documents)
D0 := additional data to be bootstrapped
N := iterations for bootstrapping

for i = 0 to N-1
  T_i+1 := empty training set
  Build M0 and M1 as discussed above using a window-size w
  for d in D0
    if feature-word not in d
    then add d to irrelevant documents of T_i+1
    else
      compute perplexity scores P0 and P1 corresponding to M0 and M1 using
      window size w around the feature-word in d.
      if P0 < P1 - delta
        add d to irrelevant documents of T_i+1
      else if P1 < P0 - delta
        add d to relevant documents of T_i+1
      else
        do not use d in T_i+1
      end
    end
  end
  Select a small random sample from relevant and irrelevant documents in
  T_i+1, and (re)classify them manually if required.
end
  • T_N - ваш последний тренировочный набор. В приведенной выше начальной загрузке параметр дельта необходимо определить с помощью экспериментов с некоторыми отложенными данными (также называемыми данными разработки).
  • Переклассификация небольшой выборки вручную выполняется таким образом, чтобы шум во время начальной загрузки не накапливался за все N итераций.
person Chthonic Project    schedule 04.07.2012

  1. Во-первых, вам следует позаботиться о том, чтобы извлечь функции из примеров документов. Считать каждое слово - не лучший способ. Вам может понадобиться какой-нибудь метод, например TFIDF, чтобы научить классификатора тому, какие слова важно классифицировать, а какие нет.

  2. Создайте правильный словарь. В вашем случае слово французский поцелуй должно быть уникальным словом, а не последовательностью французский + поцелуй. Важно использовать правильную технику для создания правильного словаря.

  3. Оставшиеся ошибки в выборках являются нормальными, мы называем это «нелинейно разделимым». Существует огромное количество передовых исследований, как решить эту проблему. Например, SVM (машина опорных векторов) будет тем, что вы хотите использовать. Обратите внимание, что однослойный перцептрон Rosenblatt обычно показывает очень плохую производительность для набора данных, который нельзя разделить линейно.

person Skyler    schedule 03.07.2012

  1. Некоторые виды нейронных сетей (например, персептрон Розенблатта) могут быть обучены на основе ошибочного набора данных и могут показывать лучшую производительность, чем tranier. Более того, во многих случаях вам следует делать ошибки, чтобы избежать перетренированности.
  2. Вы можете случайным образом пометить все немаркированные документы, обучить несколько сетей и оценить их производительность на тестовом наборе (конечно, не стоит включать немаркированные документы в тестовый набор). После этого вы можете в цикле пересчитать веса немаркированных документов как w_i = сумма качества (j) * w_ij, а затем повторить обучение, пересчитать вес и так далее. Поскольку процедура эквивалентна введению нового скрытого слоя и пересчету его весов с помощью процедуры Хебба, общая процедура должна сходиться, если ваши положительные и отрицательные наборы линейно разделяются в некотором пространстве сетевых функций.
person distantTransformer    schedule 28.06.2012
comment
Я не согласен. Однослойный перцептрон Rosenblatt показывает очень плохую производительность для набора данных, который нельзя разделить линейно. - person Skyler; 03.07.2012