Что такое «энтропия и получение информации»? - PullRequest
327 голосов
/ 07 декабря 2009

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

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

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

Ответы [ 7 ]

1028 голосов
/ 07 декабря 2009

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

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

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

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

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

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

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

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

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

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

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

Эта двоичная энтропийная функция изображена на рисунке ниже (случайная величина может принимать одно из двух значений). Он достигает своего максимума, когда вероятность составляет p=1/2, то есть p(X=a)=0.5 или аналогично p(X=b)=0.5 с вероятностью 50% / 50% либо a, либо b (неопределенность максимальная). Функция энтропии находится на нулевом минимуме, когда вероятность равна p=1 или p=0 с полной уверенностью (p(X=a)=1 или p(X=a)=0 соответственно, последнее подразумевает p(X=b)=1).

https://en.wikipedia.org/wiki/File:Binary_entropy_plot.svg

Конечно, определение энтропии можно обобщить для дискретной случайной величины 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 (измерено в * 1144). * биты как единицы информации ).

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

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

39 голосов
/ 04 июля 2014

Для начала было бы лучше понять 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 для всего журнала.

20 голосов
/ 07 декабря 2009

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

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

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

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

-log p<sub>i</sub>

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

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

I = -&#931 p<sub>i</sub> log(p<sub>i</sub>)

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

Red bulb burnt out: p<sub>red</sub> = 0, p<sub>green</sub>=1, I = -(0 + 0)  = 0
Red and green equiprobable: p<sub>red</sub> = 1/2, p<sub>green = 1/2</sub>, I = -(2 * 1/2 * log(1/2)) = log(2)
Three colors, equiprobable: p<sub>i</sub>=1/3, I = -(3 * 1/3 * log(1/3)) = log(3)
Green and red, green twice as likely: p<sub>red</sub>=1/3, p<sub>green</sub>=2/3, I = -(1/3 log(1/3) + 2/3 log(2/3)) = log(3) - 2/3 log(2)

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

8 голосов
/ 14 декабря 2009

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

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

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

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

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

4 голосов
/ 07 декабря 2009

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

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

//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)

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

3 голосов
/ 01 августа 2018

Неформально

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

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


Формально

энтропия - отсутствие порядка предсказуемости

0 голосов
/ 26 марта 2015

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

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

...