Что такое "энтропия и получение информации"?

Я читаю эту книгу (NLTK), и это сбивает с толку. Энтропия определяется как:

Энтропия - это сумма вероятности каждой метки раз лог-вероятность той же метки

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

Ответ 1

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

Чтобы проиллюстрировать, представьте задачу learning classify фамилии в мужские/женские группы. Это дано список имен, каждый из которых помечен как m или f, мы хотим узнать model, который соответствует данным и может использоваться для прогнозирования пола нового невидимого имени.

name       gender
-----------------        Now we want to predict 
Ashley        f              the gender of "Amro" (my name)
Brian         m
Caroline      f
David         m

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

# name    ends-vowel  num-vowels   length   gender
# ------------------------------------------------
Ashley        1         3           6        f
Brian         0         2           5        m
Caroline      1         4           8        f
David         0         2           5        m

Цель состоит в том, чтобы построить дерево решений . Примером tree будет:

length<7
|   num-vowels<3: male
|   num-vowels>=3
|   |   ends-vowel=1: female
|   |   ends-vowel=0: male
length>=7
|   length=5: male

в основном каждый node представляет тест, выполняемый по одному атрибуту, и мы идем влево или вправо в зависимости от результата теста. Мы продолжаем перемещаться по дереву, пока не достигнем листа node, который содержит предсказание класса (m или f)

Итак, если мы запустим имя Amro в этом дереве, мы начнем с тестирования "это длина < 7?" и ответ "да", поэтому мы идем по этой ветке. Следуя ветки, следующим испытанием "является количество гласных < 3?" снова оценивает значение true. Это приводит к листу node, помеченному m, и, таким образом, предсказание является мужчиной (каким бы я ни оказался, поэтому дерево предсказало исход правильно).

Дерево решений построено сверху вниз, но возникает вопрос, каким образом вы выбираете, какой атрибут разбивать на каждом node? Ответ - найти функцию, которая наилучшим образом разбивает целевой класс на самые чистые дочерние узлы (т.е. Узлы, которые не содержат сочетание как мужских, так и женских, довольно чистых узлов только с одним классом).

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

Энтропия, с другой стороны, является мерой примеси (противоположность). Он определяется для двоичного класса со значениями a/b как:

Entropy = - p(a)*log(p(a)) - p(b)*log(p(b))

Эта функция

Конечно, определение энтропии может быть обобщено для дискретной случайной величины X с N результатами (а не только двумя):

entropy

(logв формуле обычно принимается за логарифм на базу 2)


Вернемся к нашей задаче классификации имен, посмотрим на пример. Представьте себе, что в какой-то момент процесса построения дерева мы рассматривали следующий раскол:

     ends-vowel
      [9m,5f]          <--- the [..,..] notation represents the class
    /          \            distribution of instances that reached a node
   =1          =0
 -------     -------
 [3m,4f]     [6m,1f]

Как видите, перед расколом у нас было 9 самцов и 5 самок, т.е. P(m)=9/14 и P(f)=5/14. Согласно определению энтропии:

Entropy_before = - (5/14)*log2(5/14) - (9/14)*log2(9/14) = 0.9403

Затем мы сравниваем его с энтропией, вычисленной после рассмотрения раскола, глядя на две дочерние ветки. В левой ветки ends-vowel=1 имеем:

Entropy_left = - (3/7)*log2(3/7) - (4/7)*log2(4/7) = 0.9852

и правой ветки ends-vowel=0, имеем:

Entropy_right = - (6/7)*log2(6/7) - (1/7)*log2(1/7) = 0.5917

Мы объединяем энтропии влево/вправо, используя количество экземпляров в каждой ветки как весовой коэффициент (осталось 7 экземпляров, а 7 экземпляров справа) и получить окончательную энтропию после раскола:

Entropy_after = 7/14*Entropy_left + 7/14*Entropy_right = 0.7885

Теперь, сравнив энтропию до и после раскола, мы получим меру информационный выигрыш, или сколько информации мы получили, выполнив разделение с использованием этой конкретной функции:

Information_Gain = Entropy_before - Entropy_after = 0.1518

Вы можете интерпретировать приведенный выше расчет следующим образом: выполнив разделение с помощью функции end-vowels, мы смогли уменьшить неопределенность в результатах предсказания поддерева на небольшое количество 0,1518 (измеренное в bits как единицы информации).

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

Обратите внимание, что я пропустил некоторые подробности, которые выходят за рамки этой публикации, в том числе, как обращаться с числовые функции, отсутствующие значения, overfitting и pruning деревья и т.д.

Ответ 2

Для начала было бы лучше понять the measure of information.

Как нам measure информация?

Когда что-то маловероятно, мы говорим, что это большая новость. Кроме того, когда мы говорим что-то предсказуемое, это не очень интересно. Итак, чтобы количественно определить interesting-ness, функция должна удовлетворять

  • если вероятность события 1 (предсказуемая), то функция дает 0
  • если вероятность события близка к 0, то функция должна давать большое число
  • если случается вероятность 0,5 событий, она дает one bit информации.

Одна естественная мера, удовлетворяющая ограничениям,

I(X) = -log_2(p)

где p - вероятность события X. И устройство находится в bit, тот же бит-компьютер использует. 0 или 1.

Пример 1

Справедливая монета:

Сколько информации мы можем получить от одного флага с монеткой?

Ответ: -log(p) = -log(1/2) = 1 (bit)

Пример 2

Если метеорит ударит по Земле завтра, p=2^{-22}, тогда мы получим 22 бита информации.

Если солнце завтра встанет, p ~ 1, то это будет 0 бит информации.

Энтропия

Итак, если мы ожидаем на interesting-ness события Y, то это энтропия. т.е. энтропия является ожидаемым значением интересности события.

H(Y) = E[ I(Y)]

Более формально, энтропия - это ожидаемое количество бит события.

Пример

Y = 1: происходит событие X с вероятностью p

Y = 0: событие X не происходит с вероятностью 1-p

H(Y) = E[I(Y)] = p I(Y==1) + (1-p) I(Y==0) 
     = - p log p - (1-p) log (1-p)

Лог базы 2 для всех журналов.

Ответ 3

Я не могу дать вам графику, но, может быть, я могу дать четкое объяснение.

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

Предположим, что мы вернулись к красному/зеленому, но красная лампочка сгорела (это общеизвестно), чтобы лампа всегда светилась зеленым светом. Канал теперь бесполезен, мы знаем, какая следующая вспышка будет, поэтому вспышки не передают никакой информации, никаких новостей. Теперь мы ремонтируем лампочку, но накладываем правило, что красная лампочка может не мигать дважды подряд. Когда лампа мигает красным цветом, мы знаем, что будет следующей вспышкой. Если вы попытаетесь отправить бит поток по этому каналу, вы обнаружите, что вы должны кодировать его с большим количеством вспышек, чем у вас есть бит (на самом деле на 50% больше). И если вы хотите описать последовательность вспышек, вы можете сделать это с меньшим количеством бит. То же самое относится, если каждая вспышка независима (контекстно-свободна), но зеленые вспышки чаще встречаются, чем красные: чем больше искажается вероятность того, что меньше бит вам нужно описать последовательность, и тем меньше информации, которую она содержит, вплоть до все-зеленый, предел выгорания лампы.

Оказывается, есть способ измерить объем информации в сигнале, основанный на вероятностях разных символов. Если вероятность получения символа x i равна p i, тогда рассмотрим величину

-log pi

Чем меньше p i, тем больше это значение. Если x i становится вдвое меньше, это значение увеличивается на фиксированную сумму (log (2)). Это должно напоминать вам добавить один бит к сообщению.

Если мы не знаем, что будет символом (но мы знаем вероятности), то мы можем вычислить среднее значение этого значения, сколько мы получим, суммируя различные возможности:

I = -Σ pi log(pi)

Это информационный контент за одну вспышку.

Red bulb burnt out: pred = 0, pgreen=1, I = -(0 + 0)  = 0
Red and green equiprobable: pred = 1/2, pgreen = 1/2, I = -(2 * 1/2 * log(1/2)) = log(2)
Three colors, equiprobable: pi=1/3, I = -(3 * 1/3 * log(1/3)) = log(3)
Green and red, green twice as likely: pred=1/3, pgreen=2/3, I = -(1/3 log(1/3) + 2/3 log(2/3)) = log(3) - 2/3 log(2)

Это информационный контент или энтропия сообщения. Он максимален, когда разные символы равновероятны. Если вы физик, вы используете естественный журнал, если вы компьютерный ученый, вы используете log 2 и получаете бит.

Ответ 4

Я действительно рекомендую вам прочитать информацию о теории информации, байесовских методах и MaxEnt. Место для начала - это (свободно доступная онлайн) книга Дэвида Маккей:

http://www.inference.phy.cam.ac.uk/mackay/itila/

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

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

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

Ответ 5

Когда я реализовал алгоритм вычисления энтропии изображения, я нашел эти ссылки, см. здесь и здесь.

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

//Loop over image array elements and count occurrences of each possible
//pixel to pixel difference value. Store these values in prob_array
for j = 0, ysize-1 do $
    for i = 0, xsize-2 do begin
       diff = array(i+1,j) - array(i,j)
       if diff lt (array_size+1)/2 and diff gt -(array_size+1)/2 then begin
            prob_array(diff+(array_size-1)/2) = prob_array(diff+(array_size-1)/2) + 1
       endif
     endfor

//Convert values in prob_array to probabilities and compute entropy
n = total(prob_array)

entrop = 0
for i = 0, array_size-1 do begin
    prob_array(i) = prob_array(i)/n

    //Base 2 log of x is Ln(x)/Ln(2). Take Ln of array element
    //here and divide final sum by Ln(2)
    if prob_array(i) ne 0 then begin
        entrop = entrop - prob_array(i)*alog(prob_array(i))
    endif
endfor

entrop = entrop/alog(2)

Я получил этот код откуда-то, но я не могу выкопать ссылку.

Ответ 6

Когда вы читаете книгу о NLTK, было бы интересно узнать о модуле классификатора MaxEnt http://www.nltk.org/api/nltk.classify.html#module-nltk.classify.maxent

Для классификации интеллектуального анализа данных этапы могут быть: предварительная обработка (токенизация, обработка паром, выбор функции с помощью информационного усиления...), преобразование в числовое значение (частота или TF-IDF) (я думаю, что это ключевой шаг понять при использовании текста в качестве входного сигнала для алгоритма, который принимает только числовые), а затем классифицировать с помощью MaxEnt, это просто пример.