Лекция Стивена Вольфрама

ВНИМАНИЕ!!!

БЛОГ ПЕРЕЕХАЛ НА НОВЫЙ АДРЕС https://blog.wolframmathematica.ru

Онлайн машина вычисления знаний Wolfram|Alpha ®

Онлайн машина вычисления знаний Wolfram|Alpha ®

суббота, 9 марта 2013 г.

Понятию Цепь Маркова исполнилось 100 лет
Ponjatiju_Cep_Markova_ispolnilos_100_let_Large.png
Понятию “Цепь Маркова” исполнилось 100 лет

Перевод поста Олександра Павлыка (Oleksandr Pavlyk), Kernel Technology
Общее количество использованных в посте встроенных функций или символов: 104

Список имен используемых встроенных функций и символов в порядке их появления в коде:
WolframAlpha | List ({...}) | SetDelayed (:=) | Pattern (:) | Blank (_) | Block | Set (=) | Tally | CompoundExpression (;) | DivideBy (/=) | Part ([[…]]) | All | Length | Apply (@@) | Rule (->, ->) | Short | ToLowerCase | StringSplit | ExampleData | RegularExpression | DeleteCases | StringReplace | Import | FileNameJoin | NotebookDirectory | CharacterEncoding | Thread | CharacterRange | Alternatives (|) | Flatten | Characters | String ("...") | If | StringMatchQ | Map (/@) | N | Partition | Join | Cases | ListPlot | Table | Entropy | ImageSize | PlotMarkers | Automatic | Medium | AxesLabel | Function (&) | Style | Slot (#) | Bold | PlotLegends | MatrixForm | ReplaceAll (/.) | Outer | DiscreteMarkovProcess | Mean | FirstPassageTimeDistribution | Differences | Pick | Range | DiscretePlot | PDF | ExtentSize | Times (*, ×) | Power (^) | PlotStyle | Black | Show | Histogram | ChartStyle | Out (%) | DeleteDuplicates | PlotRange | GatherBy | Most | Graph | RuleDelayed (:>, :->) | HoldPattern | Property | DirectedEdge | SparseArray | VertexList | WeightedAdjacencyMatrix | EdgeWeight | StringJoin (<>) | Riffle | First | Rest | Extract | Transpose | RandomFunction | VertexDelete | Condition (/;) | Greater (>) | VertexDegree | WeaklyConnectedComponents | Column | Background | LightYellow | LightGray | SortBy | VertexIndex | Take
Оригинальный пост: Centennial of Markov Chains
Перевод сделала Ольга Лавренюк, аспирантка СПбГУЭФ (ФИНЭК)
Адаптацию кода под русский текст произведения сделал Роман Осипов, администратор Русскоязычной поддержки Wolfram Mathematica, сертифицированный инструктор технологий и учебных курсов Wolfram Research
23 января 1913 года по Юлианскому календарю Андрей Андреевич Марков представил Петербургской Академии наук свой анализ произведения Пушкина «Евгений Онегин». Он обнаружил, что последовательность согласных и гласных букв в тексте может быть описана как случайная последовательность, где вероятный тип буквы зависит только от типа предыдущей или предыдущих двух букв.
В те времена Российская Империя использовала Юлианский календарь. Сотая годовщина знаменитого представления на самом деле была 5 февраля 2013 года, по текущему Григорианскому календарю.
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_1.gif
Чтобы выполнить свой анализ, Марков изобрел то, что сейчас известно как “Марковские цепи”, которые могут быть представлены в виде вероятностной диаграммы состояний, где переходы между состояниями обозначаются вероятностями их осуществления.
Ponjatiju_Cep_Markova_ispolnilos_100_let_2.gif
Алиса в стране чудес: Изучение проблемы
В данной работе мы повторим исследования, которые Марков проводил с текстом Пушкина, с  текстом “Приключений Алисы в стране чудес” Льюиса Кэролла. Для этого давайте определим функцию подсчета частоты элементов списка, возвращающих результат в виде списка правил.
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Во-первых, извлечем слова из текста, записав их с маленькой буквы.
Оригинал (английский язык)
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_3.gif
Перевод (русский язык)
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_4.gif
Разделим текст на последовательность букв:
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_5.gif
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_6.gif
Определим их категорию — гласные или согласные:
Оригинал (английский язык)
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Перевод (русский язык)
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_7.gif
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_8.gif
И вычислим частоту встречи гласных и согласных букв в тексте:
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_9.gif
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_10.gif
Тем самым, если мы рассмотрим текст, как случайную последовательность гласных или согласных, то вероятность появления гласных будет p=0.3866 (английский) и p=0.42965 (русский).
Как и Марков, давайте рассмотрим частоту появления идущих подряд символов определенного типа:
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_11.gif
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_12.gif
Затем найдем вероятность того, какого типа будет буква, следующая за данной, гласной или согласной:
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_13.gif
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_14.gif
В своей работе Марков заметил, что последовательность гласных и согласных лучше описывается моделью, где вероятность гласной зависит от предшествующей буквы, чем моделью, где не зависит. Более того, он заметил, что модель, где вероятность зависит от двух предшествующих букв, подходит еще лучше
С помощью Mathematica мы можем продолжить это исследование. Марков обнаружил, что пара идущих подряд гласной-согласной несет больше информации, чем последовательность гласная-согласная сама по себе. Одним из способов измерения объема информации, заключенной в данных, служит вычисление информационной энтропии, для чего в Mathematica служит встроенная функция Entropy. Чем выше энтропия, тем больше содержится информации. Давайте вычислим ее для последовательностей из k разных сочетаний гласных-согласных (известных как k-граммы) для различных значений k.
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_15.gif
График подтверждает результаты Маркова. Любопытно, что он также показывает, что 20-граммы несут совсем немного больше информации, чем 30-граммы (для английского языка, для перевода на русский картина аналогична).
Вероятностная модель на основе 2-граммов, описывающая последовательность сейчас известна как Марковский процесс.
Марковский процесс описывает процесс изменения распределения вероятности Ponjatiju_Cep_Markova_ispolnilos_100_let_16.png  в пространстве состояний на шаге n. Предполагая, что пространство состояний конечно (в данном примере оно состоит из 2-ух элементов {“гласная”, ”согласная”}), распределение вероятностей можно рассматривать как вектор, и условные вероятности перехода могут быть представлены в виде матрицы P:
Ponjatiju_Cep_Markova_ispolnilos_100_let_17.png
В данном случае матрица перехода выглядит так:
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_18.gif
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_19.gif
Если предположить, что начальное состояние является гласной буквой (обозначим как 1 в коде), модель на основе 2-граммов определяется в Mathematica следующим образом:
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_20.gif
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_21.gif
Теперь мы можем узнать распределение расстояний между двумя гласными в тексте и сравнить результат с данными:
Оригинал (английский язык)
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_22.gif
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_23.gif
Перевод (русский язык)
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_24.gif
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_25.gif
Таким образом, модель Маркова точно предсказывает, что среднее расстояние между гласными в тексте равно примерно 2,586 буквы (2.327 буквы для русского языка, причем для русского языка предсказание отличается от вычисленного по данным значениям лишь в 5-м знаке!). Распределение расстояний, предсказываемое моделью, также хорошо подтверждается аналогичными расстояниями, вычисленными по тексту:
Оригинал (английский язык)
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_26.gif
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_27.gif
Перевод (русский язык)
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_28.gif
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_29.gif
Генерация текста
В тексте “Алисы в стране Чудес” используется всего 1484 уникальных слова на языке оригинала (и 5734 в переводе на русский):
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_30.gif
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_31.gif
Повторив тот же анализ со словами, а не гласными-согласными буквами, мы сможем обнаружить, что 4-граммы содержат всю основную информацию (для обоих языков):
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_32.gif
С моделью на основе 4-gграммов, частота Ponjatiju_Cep_Markova_ispolnilos_100_let_33.png описывает вероятность появления Ponjatiju_Cep_Markova_ispolnilos_100_let_34.png, учитывая три последних слова Ponjatiju_Cep_Markova_ispolnilos_100_let_35.png.
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_36.gif
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_37.gif
Рассмотрим переходы Ponjatiju_Cep_Markova_ispolnilos_100_let_38.png в виде направленного графа,  связывая каждое ребро с помощью свойства “Probability” (вероятность), которое определяет условную вероятность перехода.
Оригинал (английский язык)
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_39.gif
Перевод (русский язык)
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_40.gif
Полагая, что начальный вектор вероятности задается частотами последовательных пар слов, мы можем задать дискретный марковский процесс.
Оригинал (английский язык)
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_41.gif
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_42.gif
Перевод (русский язык)
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_43.gif
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_44.gif
Теперь зададим  функцию, соединяющую последовательность k-граммов, получаемую в результате обхода графа в текст.
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
We can now simulate the resulting Markov chain to generate a random 100-words text:
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_45.gif
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_46.gif
Лингвистический анализ
Граф, полученный на основе 4-граммов, имеет заметные длинные линейные подграфы, которые представляют собой длинные нити из вершин. Слова, появляющиеся в этих цепочках, будут всегда появляться вместе в случайно сгенерированном текст. Интересно установить длины такого рода неизменных последовательностей.
Эти длинные подграфы могут быть выделены путем удаления из исходного графа всех вершин, которые имеют больше двух ребер.
Оригинал (английский язык)
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_47.gif
Перевод (русский язык)
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_48.gif
Воспользуемся функцией WeaklyConnectedComponents для извлечения вершин этих строк. После сортировки их в том порядке, в котором они появлялись в тексте, мы воссоздадим 6 самых длинных последовательностей. Каждый отрывок из текста, за исключением пунктуации, в котором каждые последовательности из четырех слов встречаются в тексте однократно:
Оригинал (английский язык)
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_49.gif
Перевод (русский язык)
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Ponjatiju_Cep_Markova_ispolnilos_100_let_50.gif
Как можно заметить, 6 последовательностей действительно весьма длинные. На самом деле, они крайне длинные. Средняя длина таких фрагментов 8 слов. Можно было бы продолжать этот анализ на другие произведения литературы и сравнить результаты, но мы оставим это на другой раз.
Конечные Марковские процессы в Mathematica могут быть использованы для решения широкого круга прикладных и теоретических задач. Есть много примеров использования в Wolfram Demonstrations Project, которые помогут вам отметить 100-летний юбилей существования понятия “Цепь Маркова”.

Блог принадлежит “Русскоязычной поддержке Wolfram Mathematica
При любом использовании материалов блога, ссылка на блог обязательна.
SpikeyСоздано с помощью Wolfram Mathematica 9

Комментариев нет:

Отправить комментарий