реализация классификатора персептрона - PullRequest
9 голосов
/ 12 января 2011

Привет, я довольно новичок в Python и в НЛП.Мне нужно реализовать классификатор персептрон.Я искал через некоторые сайты, но не нашел достаточно информации.На данный момент у меня есть ряд документов, которые я сгруппировал по категориям (спорт, развлечения и т. Д.).У меня также есть список наиболее часто используемых слов в этих документах, а также их частоты.На конкретном веб-сайте было указано, что у меня должна быть какая-то решающая функция, принимающая аргументы x и w.х, по-видимому, является своего рода вектором (я не знаю, что такое w).Но я не знаю, как использовать имеющуюся у меня информацию для построения алгоритма персептрона и как использовать его для классификации моих документов.У тебя есть идеи?Спасибо:)

Ответы [ 5 ]

16 голосов
/ 12 января 2011

Как выглядит перцептрон

Снаружи перцептрон - это функция, которая принимает n аргументы (т.е. n -мерный вектор) и выдает m выходные данные (т.е. m -мерный вектор).

Внутри персептрон состоит из слоев нейронов , так что каждый нейрон в слое получает вход от всех нейронов предыдущего слоя и использует этот входрассчитать один выход.Первый слой состоит из n нейронов и получает входные данные.Последний слой состоит из m нейронов и содержит выход после того, как персептрон завершил обработку ввода.

Как рассчитывается выходной сигнал из ввода

Каждое соединение от нейрона iк нейрону j имеет вес w(i,j) (позже я объясню, откуда они взялись).total input нейрона p второго слоя является суммой взвешенного выхода нейронов из первого слоя.Итак,

total_input(p) = Σ(output(k) * w(k,p))

, где k пробегает все нейроны первого слоя.Активация нейрона вычисляется из общего ввода нейрона путем применения функции активации .Часто используемой функцией активации является функция Ферми, поэтому

activation(p) = 1/(1-exp(-total_input(p))).

Выход нейрона рассчитывается на основе активации нейрона путем применения output function.Часто используемая функция вывода - это идентификатор f(x) = x (и действительно, некоторые авторы рассматривают функцию вывода как часть функции активации).Я просто предположу, что

output(p) = activation(p)

Когда рассчитывается выходной сигнал от всех нейронов второго слоя, используйте этот выход для расчета выходного сигнала третьего слоя.Итерируйте, пока не достигнете выходного слоя.

Откуда берутся веса

Сначала веса выбираются случайным образом.Затем вы выбираете несколько примеров (из которых вы знаете желаемый результат).Подайте каждый пример перцептрону и рассчитайте ошибку , т. Е. Насколько далеко от требуемого выхода находится фактический выход.Используйте эту ошибку для обновления весов.Один из самых быстрых алгоритмов для расчета новых весов - это Resilient Propagation .

Как создать Perceptron

Некоторые вопросы, на которые вам нужно ответить:

  1. Каковы соответствующие характеристики документов и как их можно кодировать в n -мерный вектор?
  2. Какие примеры следует выбрать для корректировки весов?
  3. Как следуетвывод интерпретировать для классификации документа?Пример: один выход, который дает наиболее вероятный класс по сравнению с вектором, который присваивает вероятности каждому классу.
  4. Сколько нужно скрытых слоев и сколько они должны быть?Я рекомендую начинать с одного скрытого слоя с n нейронами.

Первая и вторая точки очень важны для качества классификатора.Персептрон может правильно классифицировать примеры, но потерпеть неудачу в новых документах.Вам, вероятно, придется экспериментировать.Чтобы определить качество классификатора, выберите два набора примеров;один для обучения, один для проверки.К сожалению, из-за отсутствия практического опыта я не могу дать вам более подробных советов для ответа на эти вопросы.

7 голосов
/ 12 января 2011

Я думаю, что попытка решить проблему НЛП с помощью нейронной сети, когда вы не знакомы ни с одним из них, может быть слишком далеко. То, что вы делаете это на новом языке, меньше всего беспокоит вас.

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

Краткое объяснение x и w. И x, и w - векторы. х является входным вектором. x содержит нормализованные частоты для каждого интересующего вас слова. w содержит веса для каждого интересующего вас слова. Перцептрон работает, умножая входную частоту для каждого слова на его соответствующий вес и суммируя их. Он передает результат в функцию (обычно сигмоидную функцию), которая превращает результат в значение между 0 и 1. 1 означает, что персептрон положителен, что входные данные являются экземпляром класса, который он представляет, и 0 означает, что он уверен, что входные данные действительно не являются примером своего класса.

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

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

5 голосов
/ 12 января 2011

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

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

Теперь вы знаете, как создать хороший тематический классификатор текста.

Превращение алгоритма, который дал вам Освальд (и который вы разместили в своем другом вопросе ), в код, является Малым Вопросом Программирования (TM). И если во время работы вы встретите незнакомые термины, такие как TF-IDF, попросите своего учителя помочь вам объяснить эти термины.

1 голос
/ 25 марта 2015

Многослойные персептроны (Специальная архитектура NeuralNet для общей проблемы классификации.) Теперь доступна для Python от людей из GraphLab:

https://dato.com/products/create/docs/generated/graphlab.deeplearning.MultiLayerPerceptrons.html#graphlab.deeplearning.MultiLayerPerceptrons

0 голосов
/ 31 марта 2011

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

Мой код здесь (не хочу раздувать сообщение): http://cnippit.com/content/perceptron-statistically-recognizing-english

Входные данные:

  • Я беру текстовый файл, разбив его на триграммы (например, "abcdef" => ["abc", "bcd", "cde", "def"])
  • Я вычисляю относительные частоты каждой из них и подаю их в качестве входов для перцептрона (так что есть 26 ^ 3 входов)делает, кажется, работает довольно хорошо.Успех довольно сильно зависит от тренировочных данных.Я получал плохие результаты до тех пор, пока не обучил его французскому / испанскому / немецкому тексту и т. Д.

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

    Несколько классов: Если у вас есть несколько классов, между которыми вы хотите провести различие (т. е. не так просто, как "is A или NOT-A"), то один подходэто использовать персептрон для каждого класса.Например.один для спорта, один для новостей и т. д.

    Тренируйте спорт-персептрон по данным, сгруппированным как спорт или НЕ-спорт.Аналогично для новостей или не-новостей и т. Д.

    Когда вы классифицируете новые данные, вы передаете свой ввод всем персептронам, и в зависимости от того, какой из них возвращает истину (или "срабатывает"), это класс, к которому принадлежат данные.

    Я использовал этот подход еще в университете, где мы использовали набор персептронов для распознавания рукописных символов.Это просто и работает довольно эффективно (точность> 98%, если я правильно помню).

...