|
|
|
|
<!DOCTYPE html>
|
|
|
|
|
<html lang="en">
|
|
|
|
|
|
|
|
|
|
<head>
|
|
|
|
|
<meta charset="UTF-8">
|
|
|
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
|
|
|
<title>Document</title>
|
|
|
|
|
<style>
|
|
|
|
|
@font-face {
|
|
|
|
|
font-family: Serreria;
|
|
|
|
|
src: url({{ STATIC_DIR }}/MFI-Serreria/MFI-Serreria-Extravagante.otf) format('opentype');
|
|
|
|
|
font-weight: normal;
|
|
|
|
|
font-style: normal;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@font-face {
|
|
|
|
|
font-family: PTSerif;
|
|
|
|
|
src: url({{ STATIC_DIR }}/PT_Serif/PTSerif-Regular.ttf) format('truetype');
|
|
|
|
|
font-weight: normal;
|
|
|
|
|
font-style: normal;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@font-face {
|
|
|
|
|
font-family: PTSerif;
|
|
|
|
|
src: url({{ STATIC_DIR }}/PT_Serif/PTSerif-Italic.ttf) format('truetype');
|
|
|
|
|
font-weight: normal;
|
|
|
|
|
font-style: italic;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@font-face {
|
|
|
|
|
font-family: "Fira mono";
|
|
|
|
|
src: url({{ STATIC_DIR }}/fira-mono/FiraMono-Regular.ttf) format("truetype");
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
font-style: normal;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@font-face {
|
|
|
|
|
font-family: "Fira mono";
|
|
|
|
|
src: url({{ STATIC_DIR }}/fira-mono/FiraMono-Medium.ttf) format("truetype");
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
font-style: normal;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@font-face {
|
|
|
|
|
font-family: "Fira mono";
|
|
|
|
|
src: url({{ STATIC_DIR }}/fira-mono/FiraMono-Bold.ttf) format("truetype");
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
font-style: bold;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@page {
|
|
|
|
|
size: 210mm 297mm;
|
|
|
|
|
margin: 10mm 20mm 15mm 20mm;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@page chain {
|
|
|
|
|
margin: 0mm 10mm 15mm 10mm;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@page title {
|
|
|
|
|
background: green;
|
|
|
|
|
margin: 10mm 10mm 15mm 10mm;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@page:left {
|
|
|
|
|
@bottom-left {
|
|
|
|
|
text-align: left;
|
|
|
|
|
content: counter(page);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@page:right {
|
|
|
|
|
@bottom-right {
|
|
|
|
|
text-align: right;
|
|
|
|
|
content: counter(page);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@page:empty {
|
|
|
|
|
@bottom-right {
|
|
|
|
|
content: '';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@bottom-left {
|
|
|
|
|
content: '';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@page title {
|
|
|
|
|
@bottom-right {
|
|
|
|
|
content: '';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@bottom-left {
|
|
|
|
|
content: '';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#chapter-chain {
|
|
|
|
|
page: chain;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
:root {
|
|
|
|
|
--font-size: 10pt;
|
|
|
|
|
--line-height: 15pt;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
html,
|
|
|
|
|
body {
|
|
|
|
|
font-family: PTSerif;
|
|
|
|
|
font-size: var(--font-size);
|
|
|
|
|
line-height: var(--line-height);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
h1 {
|
|
|
|
|
page: title;
|
|
|
|
|
color: white;
|
|
|
|
|
page-break-after: right;
|
|
|
|
|
font-family: Serreria;
|
|
|
|
|
font-weight: normal;
|
|
|
|
|
font-size: 24pt;
|
|
|
|
|
line-height: 30pt;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
h1 em {
|
|
|
|
|
text-decoration: underline;
|
|
|
|
|
font-style: normal;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
h2 {
|
|
|
|
|
font-family: Serreria;
|
|
|
|
|
font-size: 18pt;
|
|
|
|
|
line-height: 24pt;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ul {
|
|
|
|
|
margin: 0 0 0 1.1em;
|
|
|
|
|
padding: 0;
|
|
|
|
|
list-style-type: none;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ul li:before {
|
|
|
|
|
content: '– ';
|
|
|
|
|
position: absolute;
|
|
|
|
|
margin-left: -1.1em;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
section.step {
|
|
|
|
|
page-break-before: always;
|
|
|
|
|
text-align: center;
|
|
|
|
|
height: 282mm;
|
|
|
|
|
/* position: relative; */
|
|
|
|
|
margin: 0;
|
|
|
|
|
padding: 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
section.step.first {
|
|
|
|
|
page-break-before: right;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
section.step_content {
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
position: absolute;
|
|
|
|
|
top: 20mm;
|
|
|
|
|
left: 0;
|
|
|
|
|
right: 0;
|
|
|
|
|
bottom: 0mm;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.traces {
|
|
|
|
|
list-style-type: none;
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: row;
|
|
|
|
|
position: absolute;
|
|
|
|
|
top: 50%;
|
|
|
|
|
left: 0;
|
|
|
|
|
right: 0;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
line-height: 1.2em;
|
|
|
|
|
margin: 0;
|
|
|
|
|
padding: 0;
|
|
|
|
|
vertical-align: text-bottom;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.options {
|
|
|
|
|
list-style-type: none;
|
|
|
|
|
margin: 0 4em 0 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.options li {
|
|
|
|
|
line-height: var(--line-height);
|
|
|
|
|
height: var(--line-height);
|
|
|
|
|
margin: 0;
|
|
|
|
|
padding: 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.traces li:before,
|
|
|
|
|
.options li:before {
|
|
|
|
|
content: '';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.sentence {
|
|
|
|
|
z-index: 1;
|
|
|
|
|
position: absolute;
|
|
|
|
|
top: 3mm;
|
|
|
|
|
padding: 0.5em 20mm 3em 20mm;
|
|
|
|
|
width: 100%;
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
/* background: -webkit-linear-gradient(to top, rgba(255,255,255,0), white 2.5em); */
|
|
|
|
|
/* background: linear-gradient(to top, rgba(255,255,255,0), white 2.5em); */
|
|
|
|
|
/* background: white; */
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.tree {
|
|
|
|
|
z-index: 1;
|
|
|
|
|
position: absolute;
|
|
|
|
|
padding: 0 20mm 0 20mm;
|
|
|
|
|
bottom: -10mm;
|
|
|
|
|
width: 100%;
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
/* background: -webkit-linear-gradient(to top, rgba(255,255,255,0), white 2.5em); */
|
|
|
|
|
/* background: linear-gradient(to bottom, rgba(255,255,255,0), white 2.5em); */
|
|
|
|
|
/* background: white; */
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[data-picked] {
|
|
|
|
|
text-decoration: underline;
|
|
|
|
|
position: relative;
|
|
|
|
|
/* font-style: italic; */
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.last-word-previous-step [data-picked] {
|
|
|
|
|
text-decoration: none;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[data-picked]::after {
|
|
|
|
|
content: ' → ';
|
|
|
|
|
text-decoration: none;
|
|
|
|
|
position: absolute;
|
|
|
|
|
left: calc(100% + 1.5em);
|
|
|
|
|
top: 0;
|
|
|
|
|
height: 1.2em;
|
|
|
|
|
display: block;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.traces> :last-child [data-picked]::after {
|
|
|
|
|
display: none;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.chapter {
|
|
|
|
|
page-break-before: right;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.chapter#chapter-introduction,
|
|
|
|
|
.chapter#chapter-description,
|
|
|
|
|
.chapter#chapter-technical-description,
|
|
|
|
|
.chapter#chapter-credits {
|
|
|
|
|
width: 65%;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.pagedjs_right_page .chapter#chapter-introduction,
|
|
|
|
|
.pagedjs_right_page .chapter#chapter-description,
|
|
|
|
|
.pagedjs_right_page .chapter#chapter-technical-description,
|
|
|
|
|
.pagedjs_right_page .chapter#chapter-credits {
|
|
|
|
|
margin-left: 30%;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.pagedjs_right_page .sources {
|
|
|
|
|
float: left;
|
|
|
|
|
margin-left: calc(-1 * (40% + 3em));
|
|
|
|
|
width: 40%;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.pagedjs_left_page .sources {
|
|
|
|
|
float: left;
|
|
|
|
|
margin-right: calc(-1 * (100% + 3em));
|
|
|
|
|
width: 40%;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.sources a {
|
|
|
|
|
word-break: break-all;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
a {
|
|
|
|
|
text-decoration: underline dotted;
|
|
|
|
|
color: currentColor;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pre, code, table {
|
|
|
|
|
font-family: "Fira mono";
|
|
|
|
|
font-size: .8rem;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
th {
|
|
|
|
|
font-weight: normal;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
h4 {
|
|
|
|
|
font-size: 1rem;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
h4:first-child {
|
|
|
|
|
margin-top: 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.pagedjs_right_page p.images {
|
|
|
|
|
margin-left: -25%;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.pagedjs_left_page p.images {
|
|
|
|
|
margin-right: -25%;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
img {
|
|
|
|
|
display: inline-block;
|
|
|
|
|
max-width: 45%;
|
|
|
|
|
vertical-align: top;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.complete_sentence {
|
|
|
|
|
height: 282mm;
|
|
|
|
|
text-align: center;
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
page-break-before: right;
|
|
|
|
|
page-break-after: left;
|
|
|
|
|
padding-left: 15mm;
|
|
|
|
|
padding-right: 15mm;
|
|
|
|
|
}
|
|
|
|
|
</style>
|
|
|
|
|
{% if DEBUG %}
|
|
|
|
|
<link href="{{ STATIC_DIR }}/pagedjs-interface.css" rel="stylesheet" type="text/css">
|
|
|
|
|
<script src="https://unpkg.com/pagedjs/dist/paged.polyfill.js"></script>
|
|
|
|
|
{% endif %}
|
|
|
|
|
</head>
|
|
|
|
|
|
|
|
|
|
<body>
|
|
|
|
|
<h1>Paseo por los árboles de Madrid con <em>{{ author }}</em> y {{ title }}</h1>
|
|
|
|
|
|
|
|
|
|
<section class="chapter" id="chapter-chain">
|
|
|
|
|
<h2 id="poema-paseo">Paseo por los árboles de Madrid con <em>{{ author }}</em> y {{ title }}</h2>
|
|
|
|
|
{% for sentence, previous_steps, tree, traces, last_word_previous_step in path %}
|
|
|
|
|
<section class="step{% if loop.first %} first{% endif %}">
|
|
|
|
|
<section class="sentence">
|
|
|
|
|
{{ previous_steps }}
|
|
|
|
|
</section>
|
|
|
|
|
<section class="step_content">
|
|
|
|
|
<ul class="traces">
|
|
|
|
|
{% if last_word_previous_step %}
|
|
|
|
|
<li class="last-word-previous-step">
|
|
|
|
|
<ul class="options">
|
|
|
|
|
<li data-picked>{{ last_word_previous_step}}</li>
|
|
|
|
|
</ul>
|
|
|
|
|
</li>
|
|
|
|
|
{% endif %}
|
|
|
|
|
{% for word, dice, options in traces %}
|
|
|
|
|
<li style="margin-top: calc(-{{ dice }} * var(--line-height))">
|
|
|
|
|
<ul class="options">
|
|
|
|
|
{% for option in options %}
|
|
|
|
|
<li {% if loop.index0==dice %}data-picked{% endif %}>
|
|
|
|
|
{{ option }}
|
|
|
|
|
</li>
|
|
|
|
|
{% endfor %}
|
|
|
|
|
</ul>
|
|
|
|
|
<!-- Rolled: {{ dice }} -->
|
|
|
|
|
</li>
|
|
|
|
|
{% endfor %}
|
|
|
|
|
</ul>
|
|
|
|
|
</section>
|
|
|
|
|
<section class="tree">
|
|
|
|
|
{{ tree.properties.NOMBRE_COMUN }} en {{ tree.properties.MINTDIRECCIONAUX }}
|
|
|
|
|
</section>
|
|
|
|
|
</section>
|
|
|
|
|
{% endfor %}
|
|
|
|
|
<section class="complete_sentence">
|
|
|
|
|
{{ complete_sentence }}
|
|
|
|
|
</section>
|
|
|
|
|
</section>
|
|
|
|
|
|
|
|
|
|
<section class="chapter" id="chapter-introduction">
|
|
|
|
|
<h2 id="introducci-n">Introducción</h2>
|
|
|
|
|
<p>Paseo por los árboles de Madrid es un libro en la <em>Editorial Algoliteraria: crear alianzas con los
|
|
|
|
|
árboles</em>.<br>El autor de este libro es el algoritmo de las cadenas de Markov. Genera simultáneamente
|
|
|
|
|
un poema y un paseo por los árboles del barrio de Las Letras, en el centro de Madrid.<br>El poema se crea a
|
|
|
|
|
partir de una novela elegida por el lector. Éste tiene la opción entre dos novelas de grandes escritores
|
|
|
|
|
españoles del siglo 19: </p>
|
|
|
|
|
<ul>
|
|
|
|
|
<li><em>La madre naturaleza</em> de la escritora feminista Emilia Pardo Bazán publicada en 1887. Usa en esta
|
|
|
|
|
obra una prosa poética y descriptiva, y en sus páginas se siente el amor que profesa al paisaje gallego,
|
|
|
|
|
con un conocimiento de la botánica y de las costumbres rurales muy superior al de sus contemporáneos.
|
|
|
|
|
</li>
|
|
|
|
|
<li><em>Miau</em> del escritor Benito Pérez Galdós publicada en 1888. Enmarcada en el género realista,
|
|
|
|
|
satiriza el Madrid burocrático de finales del siglo XIX a partir de las vicisitudes vitales de su
|
|
|
|
|
protagonista, Ramón Villaamil, un competente exempleado del Ministerio de Hacienda, al que una serie de
|
|
|
|
|
intrigas han dejado cesante.</li>
|
|
|
|
|
</ul>
|
|
|
|
|
<p>El paseo se genera a partir de la base de datos con árboles en Madrid, <a
|
|
|
|
|
href="http://www-2.munimadrid.es/DGPVE_WUAUA/welcome.do">Un Alcorque, un Árbol</a>. Cada palabra
|
|
|
|
|
significativa - sustantivo, adjetivo, verbo o adverbio - está relacionada a un árbol en el Barrio de las
|
|
|
|
|
Letras de Madrid. Las otras palabras crean el camino entre los diferentes árboles. Así se puede ir caminando
|
|
|
|
|
por el barrio recitando partes del poema a cada árbol que se encuentra en el paseo.<br>Este libro es por
|
|
|
|
|
definición infinito y único.<br>Está creada por Anaïs Berck. Es un seudónimo que representa una colaboración
|
|
|
|
|
entre humanos, algoritmos y árboles. Anaïs Berck explora las especificidades de la inteligencia humana en
|
|
|
|
|
compañía de las inteligencias artificiales y vegetales.<br>La Editorial Algoliteraria es una colección de
|
|
|
|
|
publicaciones en las cuales los algoritmos son los autores de libros inusuales. Este libro fue creado como
|
|
|
|
|
parte de una residencia en el centro de arte contemporáneo Medialab Prado en Madrid. La residencia fue
|
|
|
|
|
concedida por el programa "Residencia Cultura Digital" iniciado por el Gobierno Flamenco. </p>
|
|
|
|
|
<p>En esta obra Anaïs Berck está representadx por: </p>
|
|
|
|
|
<ul>
|
|
|
|
|
<li>el algoritmo de las cadenas de Markov del cual se encuentra una descripción en este libro,</li>
|
|
|
|
|
<li>los árboles de Madrid, que tienen su geolocalización entre Medialab Prado, Plaza del Sol y Atocha Renfe,
|
|
|
|
|
dentro de la base de datos <a href="http://www-2.munimadrid.es/DGPVE_WUAUA/welcome.do">Un Alcorque, un
|
|
|
|
|
Árbol</a>, </li>
|
|
|
|
|
<li>los seres humanos Emilia Pardo Bazán, Benito Pérez Gáldos, Jaime Munárriz, Luis Morell, An Mertens, Eva
|
|
|
|
|
Marina Gracia, Gijs de Heij, Ana Isabel Garrido Mártinez, Alfredo Calosci, Daniel Arribas Hedo.</li>
|
|
|
|
|
</ul>
|
|
|
|
|
</section>
|
|
|
|
|
|
|
|
|
|
<section class="chapter" id="chapter-description">
|
|
|
|
|
<h2 id="descripci-n-general-de-las-cadenas-de-markov">Descripción general de las cadenas de Markov</h2>
|
|
|
|
|
<section class="sources">
|
|
|
|
|
<h4 id="fuentes">Fuentes</h4>
|
|
|
|
|
<ul>
|
|
|
|
|
<li>
|
|
|
|
|
<a
|
|
|
|
|
href="https://spectrum.ieee.org/andrey-markov-and-claude-shannon-built-the-first-language-generation-models">https://spectrum.ieee.org/andrey-markov-and-claude-shannon-built-the-first-language-generation-models</a>
|
|
|
|
|
</li>
|
|
|
|
|
<li><a href="http://langvillea.people.cofc.edu/MCapps7.pdf">http://langvillea.people.cofc.edu/MCapps7.pdf</a></li>
|
|
|
|
|
<li>
|
|
|
|
|
<a
|
|
|
|
|
href="https://www.irishtimes.com/news/science/that-s-maths-andrey-markov-s-brilliant-ideas-are-still-bearing-fruit-1.3220929">https://www.irishtimes.com/news/science/that-s-maths-andrey-markov-s-brilliant-ideas-are-still-bearing-fruit-1.3220929</a>
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
<a
|
|
|
|
|
href="http://www.alpha60.de/research/markov/DavidLink_TracesOfTheMouth_2006.pdf">http://www.alpha60.de/research/markov/DavidLink_TracesOfTheMouth_2006.pdf</a>
|
|
|
|
|
</li>
|
|
|
|
|
</ul>
|
|
|
|
|
</section>
|
|
|
|
|
<h3 id="historias">Historias</h3>
|
|
|
|
|
<p>Andrey Andreyevich Markov fue un matemático ruso que vivió entre 1856 y 1922. Sus estudios más famosos fueron
|
|
|
|
|
con las cadenas de Markov, un algoritmo que permite predecir los cambios futuros una vez que se conoce el
|
|
|
|
|
estado actual. El primer trabajo sobre el tema se publicó en 1906. También se interesó por la literatura.
|
|
|
|
|
Intentó establecer un modelo matemático lingüístico mediante cadenas de Markov contando manualmente las
|
|
|
|
|
letras de la novela en verso de Alexander Pusjkin, Eugene Onegin. A continuación, aplicó el método a la
|
|
|
|
|
novela Años de infancia del nieto de Bagrov, de S.T. Aksakov. Esto vincula las cadenas de Markov
|
|
|
|
|
directamente con el campo de la literatura, el texto y el lenguaje. Y el vínculo vivirá firmemente a lo
|
|
|
|
|
largo de la historia de este algoritmo. </p>
|
|
|
|
|
<p>El siguiente texto se basa en el artículo de Oscar Schwartz para IEEE Spectrum, <a
|
|
|
|
|
href="https://spectrum.ieee.org/andrey-markov-and-claude-shannon-built-the-first-language-generation-models">Andrey
|
|
|
|
|
Markov & Claude Shannon Counted Letters to Build the First Language-Generation Models</a>.<br>En
|
|
|
|
|
1913, Andrey Markov se sentó en su estudio de San Petersburgo con un ejemplar de la novela en verso del
|
|
|
|
|
siglo XIX de Alexander Pushkin, <a href="https://en.wikipedia.org/wiki/Eugene_Onegin">Eugene Onegin</a>, un
|
|
|
|
|
clásico literario de la época. Esta obra consta de casi 400 estrofas de tetrámetro yámbico. Sin embargo,
|
|
|
|
|
Markov no se puso a leer el famoso texto de Pushkin. Más bien, tomó un bolígrafo y un trozo de papel, y
|
|
|
|
|
escribió las primeras 20.000 letras del libro en una larga cadena de letras, eliminando todos los signos de
|
|
|
|
|
puntuación y los espacios. A continuación, dispuso estas letras en 200 cuadrículas (de 10 por 10 caracteres
|
|
|
|
|
cada una) y comenzó a contar las vocales en cada fila y columna, contabilizando los resultados.<br>Al
|
|
|
|
|
separar las vocales de las consonantes, Markov ponía a prueba una teoría de la probabilidad que había
|
|
|
|
|
desarrollado en 1906 y que ahora llamamos Proceso de Markov o Cadena de Markov. Hasta ese momento, el campo
|
|
|
|
|
de la probabilidad se había limitado principalmente a analizar fenómenos como la ruleta o el lanzamiento de
|
|
|
|
|
una moneda, en los que el resultado de eventos anteriores no cambia la probabilidad de los eventos actuales.
|
|
|
|
|
Pero Markov pensaba que la mayoría de las cosas ocurren en cadenas de causalidad y dependen de resultados
|
|
|
|
|
anteriores. Quería una forma de modelar estos sucesos mediante un análisis probabilístico.<br>Markov creía
|
|
|
|
|
que el lenguaje era un ejemplo de sistema en el que los sucesos pasados determinan en parte los resultados
|
|
|
|
|
presentes. Para demostrarlo, quería mostrar que en un texto como la novela de Pushkin, la probabilidad de
|
|
|
|
|
que una determinada letra aparezca en algún momento del texto depende, hasta cierto punto, de la letra que
|
|
|
|
|
la precede.<br>Para ello, Markov comenzó a contar las vocales en Eugene Onegin, y descubrió que el 43% de
|
|
|
|
|
las letras eran vocales y el 57% consonantes. A continuación, Markov separó las 20.000 letras en pares de
|
|
|
|
|
combinaciones de vocales y consonantes. Descubrió que había 1.104 pares vocal-vocal, 3.827 pares
|
|
|
|
|
consonante-consonante y 15.069 pares vocal-consonante y consonante-vocal. Lo que esto demostró,
|
|
|
|
|
estadísticamente hablando, fue que para cualquier letra del texto de Pushkin, si era una vocal, las
|
|
|
|
|
probabilidades eran que la siguiente letra fuera una consonante, y viceversa.<br>Markov utilizó este
|
|
|
|
|
análisis para demostrar que Eugene Onegin de Pushkin no era sólo una distribución aleatoria de letras, sino
|
|
|
|
|
que tenía algunas cualidades estadísticas subyacentes que podían modelarse. El enigmático trabajo de
|
|
|
|
|
investigación que surgió de este estudio, titulado <a
|
|
|
|
|
href="http://cs.petrsu.ru/~olbgvl/greatapp/my_project/example_eng.html">An Example of Statistical
|
|
|
|
|
Investigation of the Text Eugene Onegin Concerning the Connection of Samples in Chains</a>(Un ejemplo de
|
|
|
|
|
investigación estadística del texto Eugene Onegin sobre la conexión de muestras en cadenas), no fue muy
|
|
|
|
|
citado en vida de Markov, y no se tradujo al inglés hasta 2006. Markov se vio obligado a interrumpir sus
|
|
|
|
|
experimentos de recuento de letras, cuando había perdido casi por completo la vista debido a un glaucoma.
|
|
|
|
|
Aunque Markov hubiera tenido más tiempo y mejor vista para llevar a cabo sus experimentos, las extensiones
|
|
|
|
|
habrían sido muy difíciles de completar, dada la época preinformática en la que vivió, en la que los
|
|
|
|
|
esfuerzos computacionales debían pagarse en años-hombre. </p>
|
|
|
|
|
<p class="images"><img src="{{ STATIC_DIR }}/images/markov_1.jpeg" alt="">
|
|
|
|
|
<img src="{{ STATIC_DIR }}/images/markov_2.jpeg" alt=""><br>
|
|
|
|
|
Estas imágenes muestran las notas originales de Markov al calcular las probabilidades necesarias para su
|
|
|
|
|
cadena Pushkin.
|
|
|
|
|
</p>
|
|
|
|
|
<h3 id="influencia">Influencia</h3>
|
|
|
|
|
<p>Algunos de los conceptos centrales de Markov en torno a la probabilidad y el lenguaje se extendieron por el
|
|
|
|
|
mundo entero, y acabaron encontrando su rearticulación en el enormemente influyente documento de Claude
|
|
|
|
|
Shannon, <a href="https://people.math.harvard.edu/~ctm/home/text/others/shannon/entropy/entropy.pdf">A
|
|
|
|
|
Mathematical Theory of Communication</a>, que se publicó en 1948.<br>El documento de Shannon esbozaba
|
|
|
|
|
una forma de medir con precisión la cantidad de información en un mensaje y, al hacerlo, sentaba las bases
|
|
|
|
|
de una teoría de la información que llegaría a definir la era digital. A Shannon le fascinaba la idea de
|
|
|
|
|
Markov de que, en un texto dado, se podía aproximar la probabilidad de que apareciera alguna letra o
|
|
|
|
|
palabra. Al igual que Markov, Shannon lo demostró realizando algunos experimentos textuales (en inglés) que
|
|
|
|
|
implicaban la elaboración de un modelo estadístico del lenguaje, y luego dio un paso más al tratar de
|
|
|
|
|
utilizar el modelo para generar texto de acuerdo con esas reglas estadísticas.<br>En un primer experimento
|
|
|
|
|
de control, empezó generando una frase eligiendo letras al azar de un alfabeto de 27 símbolos (26 letras,
|
|
|
|
|
más un espacio), y obtuvo el siguiente resultado: </p>
|
|
|
|
|
<p>XFOML RXKHRJFFJUJ ZLPWCFWKCYJ FFJEYVKCQSGHYD QPAAMKBZAACIBZLHJQD </p>
|
|
|
|
|
<p>La frase era ruido sin sentido, dijo Shannon, porque cuando nos comunicamos no elegimos las letras con igual
|
|
|
|
|
probabilidad. Como había demostrado Markov, las consonantes son más probables que las vocales. Pero a un
|
|
|
|
|
mayor nivel de granularidad, las E son más comunes que las S, que son más comunes que las Q. Para tener en
|
|
|
|
|
cuenta este hecho, Shannon modificó su alfabeto original para que se ajustara más a la probabilidad del
|
|
|
|
|
inglés: era un 11% más probable sacar una E del alfabeto que una Q. Cuando volvió a sacar letras al azar de
|
|
|
|
|
este corpus recalibrado, obtuvo una frase que se acercaba un poco más al inglés. </p>
|
|
|
|
|
<p>OCRO HLI RGWR NMIELWIS EU LL NBNESEBYA TH EEI ALHENHTTPA OOBTTVA NAH BRL. </p>
|
|
|
|
|
<p>In a series of subsequent experiments, Shannon demonstrated that as you make the statistical model even more
|
|
|
|
|
complex, you get increasingly more comprehensible results. Shannon, via Markov, revealed a statistical
|
|
|
|
|
framework for the English language, and showed that by modeling this framework—by analyzing the dependent
|
|
|
|
|
probabilities of letters and words appearing in combination with each other—he could actually generate
|
|
|
|
|
language. </p>
|
|
|
|
|
<p>Cuanto más complejo sea el modelo estadístico de un texto dado, más precisa será la generación del lenguaje,
|
|
|
|
|
o como dijo Shannon, mayor será el "parecido con el texto inglés ordinario". En el experimento
|
|
|
|
|
final, Shannon recurrió a un corpus de palabras en lugar de letras y consiguió lo siguiente: </p>
|
|
|
|
|
<p>THE HEAD AND IN FRONTAL ATTACK ON AN ENGLISH WRITER THAT THE CHARACTER OF THIS POINT IS THEREFORE ANOTHER
|
|
|
|
|
METHOD FOR THE LETTERS THAT THE TIME OF WHO EVER TOLD THE PROBLEM FOR AN UNEXPECTED. </p>
|
|
|
|
|
<p>Tanto para Shannon como para Markov, la idea de que las propiedades estadísticas del lenguaje podían ser
|
|
|
|
|
modeladas ofrecía una forma de replantear problemas más amplios en los que estaban trabajando. Para Markov,
|
|
|
|
|
amplió el estudio de la estocasticidad más allá de los eventos mutuamente independientes, abriendo el camino
|
|
|
|
|
para una nueva era en la teoría de la probabilidad. Para Shannon, le ayudó a formular una forma precisa de
|
|
|
|
|
medir y codificar unidades de información en un mensaje, lo que revolucionó las telecomunicaciones y,
|
|
|
|
|
finalmente, la comunicación digital. Pero su enfoque estadístico en la modelación y la generación del
|
|
|
|
|
lenguaje también marcó el comienzo de una nueva era para el procesamiento del lenguaje natural, que se ha
|
|
|
|
|
ramificado en la era digital hasta nuestros días. Como señala David Link en su artículo Traces of the Mouth,
|
|
|
|
|
los esfuerzos de Markov en retrospectiva "representan un intento temprano y trascendental de entender
|
|
|
|
|
el fenómeno del lenguaje en términos matemáticos". No es exagerado decir que el análisis de texto de
|
|
|
|
|
Markov es, en principio, similar a lo que Google y otras empresas llevan a cabo ahora de forma rutinaria y a
|
|
|
|
|
gran escala: analizar las palabras de los libros y los documentos de Internet, el orden en que aparecen las
|
|
|
|
|
palabras, analizar las frases de búsqueda, detectar el spam, etc. </p>
|
|
|
|
|
<h3 id="applicaciones">Applicaciones</h3>
|
|
|
|
|
<p>Dado que las cadenas de Markov pueden diseñarse para modelar muchos procesos del mundo real, se utilizan en
|
|
|
|
|
una gran variedad de situaciones. Aparecen en física y química cuando se utilizan probabilidades para
|
|
|
|
|
cantidades desconocidas. En el tratamiento de la información, desempeñan un papel en el reconocimiento de
|
|
|
|
|
patrones, el análisis y la síntesis automática del habla y la compresión de datos. Los meteorólogos,
|
|
|
|
|
ecologistas y biólogos los utilizan. Otras aplicaciones son el control de coches sin conductor, la
|
|
|
|
|
traducción automática, los patrones de colas y la predicción del crecimiento de la población, los precios de
|
|
|
|
|
los activos, los cambios de moneda y las crísis del mercado. También artistas han utilizado las cadenas de
|
|
|
|
|
Markov, como el músico Iannis Xenakis, que desarrolló la "Música estocástica libre" basada en las
|
|
|
|
|
cadenas de Markov. </p>
|
|
|
|
|
<p>En 2006 - el centenario del artículo de Markov - Philipp Von Hilgers y Amy Langville resumieron <a
|
|
|
|
|
href="http://langvillea.people.cofc.edu/MCapps7.pdf">las cinco mayores aplicaciones de las cadenas de
|
|
|
|
|
Markov</a>. Entre ellas se encuentra la que utilizamos la mayoría de nosotros a diario: el Page Rank de
|
|
|
|
|
Google. Cada vez que buscamos en Internet, la clasificación de las páginas web se basa en una solución de la
|
|
|
|
|
cadena de Markov masiva. Se puede decir que todas las páginas web son estados, y los enlaces entre ellas son
|
|
|
|
|
transiciones que poseen probabilidades específicas. En otras palabras, podemos decir que, independientemente
|
|
|
|
|
de lo que busques en Google, hay una probabilidad finita de que acabes en una página web concreta. Si
|
|
|
|
|
utilizas Gmail, habrás notado su función de autorrelleno. Esta función predice automáticamente tus frases
|
|
|
|
|
para ayudarte a escribir correos electrónicos rápidamente. Las cadenas de Markov ayudan considerablemente en
|
|
|
|
|
este sector, ya que pueden proporcionar predicciones de este tipo de forma eficaz.<br>Y por último, pero no
|
|
|
|
|
menos importante, ¿te has preguntado alguna vez por qué el spam tiene todas esas divertidas cadenas de
|
|
|
|
|
palabras sin sentido? Son construcciones bastante extrañas, no tan aleatorias como si se sacaran palabras al
|
|
|
|
|
azar de un sombrero, casi gramaticales la mayor parte de las veces, pero aún así son un claro galimatías.
|
|
|
|
|
También aquí las cadenas de Markov han asumido gran parte del trabajo. </p>
|
|
|
|
|
</section>
|
|
|
|
|
|
|
|
|
|
<section class="chapter" id="chapter-technical-description">
|
|
|
|
|
<h2 id="descripci-n-t-cnica-de-las-cadenas-de-markov">Descripción técnica de las cadenas de Markov</h2>
|
|
|
|
|
<section class="sources">
|
|
|
|
|
<h4>Fuentes:</h4>
|
|
|
|
|
<ul>
|
|
|
|
|
<li>
|
|
|
|
|
<a
|
|
|
|
|
href="https://en.wikipedia.org/wiki/Examples_of_Markov_chains">https://en.wikipedia.org/wiki/Examples_of_Markov_chains</a>
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
<a
|
|
|
|
|
href="https://higherkindedtripe.wordpress.com/2012/02/26/markov-chains-or-daddy-where-does-spam-come-from/">https://higherkindedtripe.wordpress.com/2012/02/26/markov-chains-or-daddy-where-does-spam-come-from/</a>
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
<a
|
|
|
|
|
href="https://towardsdatascience.com/predicting-the-weather-with-markov-chains-a34735f0c4df">https://towardsdatascience.com/predicting-the-weather-with-markov-chains-a34735f0c4df</a>
|
|
|
|
|
</li>
|
|
|
|
|
</ul>
|
|
|
|
|
</section>
|
|
|
|
|
<p>En un proceso de Markov podemos predecir los cambios futuros una vez que conocemos el estado actual.
|
|
|
|
|
Wikipedia describe muy bien la diferencia entre las cadenas de Markov y otros sistemas: "Un juego de
|
|
|
|
|
serpientes y escaleras o cualquier otro juego cuyas jugadas se determinan enteramente por los dados es una
|
|
|
|
|
cadena de Markov, de hecho, una cadena de Markov absorbente. Esto contrasta con los juegos de cartas, como
|
|
|
|
|
el blackjack, donde las cartas representan una "memoria" de las jugadas anteriores. Para ver la
|
|
|
|
|
diferencia, considere la probabilidad de un determinado evento en el juego. En los juegos de dados
|
|
|
|
|
mencionados, lo único que importa es el estado actual del tablero. El siguiente estado del tablero depende
|
|
|
|
|
del estado actual y de la siguiente tirada de dados. No depende de cómo han llegado las cosas a su estado
|
|
|
|
|
actual. En un juego como el blackjack, un jugador puede obtener ventaja recordando qué cartas se han
|
|
|
|
|
mostrado ya (y, por tanto, qué cartas ya no están en la baraja), por lo que el siguiente estado (o mano) del
|
|
|
|
|
juego no es independiente de los estados pasados".
|
|
|
|
|
Así, para un proceso de Markov, sólo el estado actual determina el siguiente estado; la historia del sistema
|
|
|
|
|
no tiene ningún impacto. Por eso describimos un proceso de Markov como sin memoria. Lo que ocurre a
|
|
|
|
|
continuación viene determinado completamente por el estado actual y las probabilidades de transición.<br>A
|
|
|
|
|
continuación, describimos un funcionamiento clásico de las cadenas de Markov, junto a una versión
|
|
|
|
|
simplificada que hemos utilizado para desarrollar un juego de Markov y el código de este libro. </p>
|
|
|
|
|
<h3 id="versi-n-cl-sica">Versión clásica</h3>
|
|
|
|
|
<p>Este ejemplo está tomado de la siguiente fuente: <a
|
|
|
|
|
href="https://higherkindedtripe.wordpress.com/2012/02/26/markov-chains-or-daddy-where-does-spam-come-from/">https://higherkindedtripe.wordpress.com/2012/02/26/markov-chains-or-daddy-where-does-spam-come-from/</a>
|
|
|
|
|
</p>
|
|
|
|
|
<p>Coge un texto de "entrenamiento".<br>Haz una lista de todas las palabras que contiene.<br>Para cada
|
|
|
|
|
palabra, haga una lista de todas las demás palabras que vienen después de ella, con el número de veces que
|
|
|
|
|
aparece cada palabra. Así, con la frase "the quick brown fox jumped over the lazy dog", acabarías
|
|
|
|
|
con la lista: </p>
|
|
|
|
|
<ol>
|
|
|
|
|
<li>the -> (1, quick), (1, lazy) </li>
|
|
|
|
|
<li>quick -> (1, brown)</li>
|
|
|
|
|
<li>brown -> (1, fox)</li>
|
|
|
|
|
<li>fox -> (1, jumped)</li>
|
|
|
|
|
<li>jumped -> (1, over)</li>
|
|
|
|
|
<li>over -> (1, the)</li>
|
|
|
|
|
<li>lazy -> (1, dog)</li>
|
|
|
|
|
<li>dog -></li>
|
|
|
|
|
</ol>
|
|
|
|
|
<p>Convierte la lista en una matriz, en la que las filas representan las palabras "principales" y las
|
|
|
|
|
columnas representan las palabras "siguientes", y cada número de la matriz dice cuántas veces
|
|
|
|
|
apareció la palabra siguiente después de la palabra principal. Obtendrás: </p>
|
|
|
|
|
<table>
|
|
|
|
|
<thead>
|
|
|
|
|
<tr>
|
|
|
|
|
<th style="text-align:left"></th>
|
|
|
|
|
<th style="text-align:center">the</th>
|
|
|
|
|
<th style="text-align:center">quick</th>
|
|
|
|
|
<th style="text-align:center">brown</th>
|
|
|
|
|
<th style="text-align:center">fox</th>
|
|
|
|
|
<th style="text-align:center">jumped</th>
|
|
|
|
|
<th style="text-align:center">over</th>
|
|
|
|
|
<th style="text-align:center">lazy</th>
|
|
|
|
|
<th style="text-align:right">dog</th>
|
|
|
|
|
</tr>
|
|
|
|
|
</thead>
|
|
|
|
|
<tbody>
|
|
|
|
|
<tr>
|
|
|
|
|
<td style="text-align:left">the</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">1</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">1</td>
|
|
|
|
|
<td style="text-align:right">0</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td style="text-align:left">quick</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">1</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:right">0</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td style="text-align:left">brown</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">1</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:right">0</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td style="text-align:left">fox</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">1</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:right">0</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td style="text-align:left">jumped</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">1</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:right">0</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td style="text-align:left">over</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">1</td>
|
|
|
|
|
<td style="text-align:right">0</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td style="text-align:left">lazy</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:right">1</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td style="text-align:left">dog</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:right">0</td>
|
|
|
|
|
</tr>
|
|
|
|
|
</tbody>
|
|
|
|
|
</table>
|
|
|
|
|
<p>Divide cada número de la matriz por el total de su fila y verás que cada fila se convierte en una especie de
|
|
|
|
|
distribución de probabilidad.</p>
|
|
|
|
|
<table>
|
|
|
|
|
<thead>
|
|
|
|
|
<tr>
|
|
|
|
|
<th style="text-align:left"></th>
|
|
|
|
|
<th style="text-align:center">the</th>
|
|
|
|
|
<th style="text-align:center">quick</th>
|
|
|
|
|
<th style="text-align:center">brown</th>
|
|
|
|
|
<th style="text-align:center">fox</th>
|
|
|
|
|
<th style="text-align:center">jumped</th>
|
|
|
|
|
<th style="text-align:center">over</th>
|
|
|
|
|
<th style="text-align:center">lazy</th>
|
|
|
|
|
<th style="text-align:right">dog</th>
|
|
|
|
|
</tr>
|
|
|
|
|
</thead>
|
|
|
|
|
<tbody>
|
|
|
|
|
<tr>
|
|
|
|
|
<td style="text-align:left">the</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0.5</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0.5</td>
|
|
|
|
|
<td style="text-align:right">0</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td style="text-align:left">quick</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">1</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:right">0</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td style="text-align:left">brown</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">1</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:right">0</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td style="text-align:left">fox</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">1</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:right">0</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td style="text-align:left">jumped</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">1</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:right">0</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td style="text-align:left">over</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">1</td>
|
|
|
|
|
<td style="text-align:right">0</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td style="text-align:left">lazy</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:right">1</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td style="text-align:left">dog</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:center">0</td>
|
|
|
|
|
<td style="text-align:right">0</td>
|
|
|
|
|
</tr>
|
|
|
|
|
</tbody>
|
|
|
|
|
</table>
|
|
|
|
|
<p>Se puede interpretar como que "si la primera palabra es un 'the', hay un 50% de posibilidades de
|
|
|
|
|
que la siguiente palabra sea 'quick', y un 50% de posibilidades de que la siguiente palabra sea
|
|
|
|
|
'lazy'. Para todas las demás palabras, sólo hay una palabra posible a continuación".<br>Casi
|
|
|
|
|
todas las palabras tienen sólo una posible palabra siguiente porque el texto es muy corto. Pero si se
|
|
|
|
|
entrena con un texto más extenso y se interpretan las filas como una distribución de probabilidades, se
|
|
|
|
|
puede empezar a ver para cada palabra qué tipo de palabra tiende a seguirla. Esto ofrece una visión muy
|
|
|
|
|
interesante del carácter del texto escrito.<br>Si tomas esa gran "matriz de transición" que has
|
|
|
|
|
entrenado a partir de un texto grande, puedes usarla para generar realmente un nuevo texto de la siguiente
|
|
|
|
|
manera: </p>
|
|
|
|
|
<ol>
|
|
|
|
|
<li>
|
|
|
|
|
<p>Elija al azar una palabra "semilla" del texto. Para obtener los mejores resultados, utilice
|
|
|
|
|
una con muchas palabras siguientes posibles.</p>
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
<p>Encuentre la fila de la matriz correspondiente a esa palabra. Elija la siguiente palabra al azar,
|
|
|
|
|
ponderada según las probabilidades de la fila. Es decir, si la columna correspondiente a la palabra
|
|
|
|
|
"azul" tiene el número 0,05, tienes un 5% de posibilidades de elegir "azul" como
|
|
|
|
|
siguiente palabra, y así sucesivamente (al dividir cada número por el total de su fila nos
|
|
|
|
|
aseguramos de que estas probabilidades sumen 1).</p>
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
<p>Vuelve al paso 2 utilizando esta segunda palabra como la nueva palabra "semilla". Continúe
|
|
|
|
|
este proceso para generar una cadena de palabras tan larga como desee. Si acaba con una palabra a la
|
|
|
|
|
que no le siguen otras (algo poco común cuando se entrena con una prueba grande, pero posible:
|
|
|
|
|
imagine que la última palabra de una novela fuera la única ocurrencia de la palabra
|
|
|
|
|
"xilófono", o lo que sea), simplemente elija una palabra al azar.</p>
|
|
|
|
|
</li>
|
|
|
|
|
</ol>
|
|
|
|
|
<p>Se puede ver cómo las cadenas de palabras generadas con este método seguirán las "tendencias" de
|
|
|
|
|
los datos de entrenamiento, lo que significa que si se generara una nueva matriz de transición a partir de
|
|
|
|
|
las palabras generadas, ésta tendría, en promedio, el mismo aspecto que la matriz de transición original, ya
|
|
|
|
|
que se eligieron las palabras de acuerdo con esos pesos. Este proceso completamente mecánico puede generar
|
|
|
|
|
datos que se parecen, estadísticamente, a un idioma significativo. Por supuesto, no es necesariamente
|
|
|
|
|
gramatical, y está ciertamente desprovisto de significado superior, ya que fue generado a través de este
|
|
|
|
|
proceso simplista.<br>Esas "cadenas" de palabras construidas por el proceso anterior son un
|
|
|
|
|
ejemplo de cadenas de Markov. Y también son la respuesta a la pregunta "¿de dónde viene el spam?".
|
|
|
|
|
Esas divagaciones casi gramaticales debajo de los anuncios de "Viagra", generadas mediante el
|
|
|
|
|
proceso anterior, son la forma que tienen los creadores de spam de engañar a su filtro de spam. Incluyen
|
|
|
|
|
estas cadenas para dar a sus anuncios una similitud estadística con la correspondencia humana significativa.
|
|
|
|
|
Esto funciona porque los filtros de spam utilizan (al menos en parte) modelos probabilísticos que dependen
|
|
|
|
|
de las transiciones y frecuencias de las palabras para clasificar el correo electrónico entrante como spam.
|
|
|
|
|
Los emisores de spam y los redactores de los filtros se enzarzan en un eterno juego del gato y el ratón
|
|
|
|
|
generado aleatoriamente. </p>
|
|
|
|
|
<h3 id="versi-n-simplificada">Versión simplificada</h3>
|
|
|
|
|
<p>Con <a href="https://algolit.net">Algolit</a>, un grupo de investigación artística sobre código y literatura
|
|
|
|
|
libres con sede en Bruselas, desarrollamos un juego de cadenas de Markov con frases y cartas. Esto ocurrió
|
|
|
|
|
como parte del festival Désert Numérique, en La Drôme en Francia en 2014. El juego fue desarrollado por
|
|
|
|
|
Brendan Howell, Catherine Lenoble y An Mertens. Puedes escuchar el programa de radio: <a
|
|
|
|
|
href="http://desert.numerique.free.fr//archives/?id=1011&ln=fr">http://desert.numerique.free.fr//archives/?id=1011&ln=fr</a>.<br>A
|
|
|
|
|
continuación, el juego se presentó en Transmediale, en Berlín, en 2015, respetando las siguientes reglas.
|
|
|
|
|
</p>
|
|
|
|
|
<ol>
|
|
|
|
|
<li>
|
|
|
|
|
<p>Tomamos un texto, por ejemplo:</p>
|
|
|
|
|
<blockquote>
|
|
|
|
|
<p>Cqrrelations read as poetry to statisticians. Can statisticians read poetry with machines?
|
|
|
|
|
Cqrrelations is a practise for artists, for datatravellers, statisticians and other lovers of
|
|
|
|
|
machines to explore a world of blurry categorisations and crummylations. Machines correlate to
|
|
|
|
|
dissidents, dissidents correlate to statisticians.</p>
|
|
|
|
|
</blockquote>
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
<p>Creamos una base de datos para este texto; cada palabra es una entrada y toma la palabra siguiente
|
|
|
|
|
como valor posible. La entrada de "Cqrrelations" tendrá dos valores:</p>
|
|
|
|
|
<ol>
|
|
|
|
|
<li>read</li>
|
|
|
|
|
<li>is</li>
|
|
|
|
|
</ol>
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
<p>Una vez creada la base de datos, elegimos una palabra inicial para un nuevo texto, por ejemplo
|
|
|
|
|
Cqrrelations.</p>
|
|
|
|
|
</li>
|
|
|
|
|
<li>Tiramos el dado, los números impares darán "leer" como 2ª palabra de nuestro texto; los
|
|
|
|
|
números pares darán "es" como 2ª palabra.</li>
|
|
|
|
|
<li>Volvemos a tirar el dado y elegimos una palabra entre los valores de la palabra elegida. Esto da la
|
|
|
|
|
siguiente palabra de nuestra frase.</li>
|
|
|
|
|
<li>Continuamos 5 hasta llegar a una palabra con un punto (.)</li>
|
|
|
|
|
<li>Podemos repetir la regla 3 hasta la 6 hasta que estemos satisfechos con la cantidad de frases generadas
|
|
|
|
|
</li>
|
|
|
|
|
</ol>
|
|
|
|
|
<p>Basado en el texto de entrada el resultado en Transmediale fue: </p>
|
|
|
|
|
<blockquote>
|
|
|
|
|
<p>A world of blurry categorisations and other lovers of blurry categorisations and other lovers of blurry
|
|
|
|
|
categorisations and other lovers of machines. Cqrrelations read poetry to dissidents correlate to
|
|
|
|
|
machines. Lovers of machines to statisticians.” </p>
|
|
|
|
|
</blockquote>
|
|
|
|
|
</section>
|
|
|
|
|
|
|
|
|
|
<section class="chapter" id="chapter-code">
|
|
|
|
|
<h2 id="c-digo">Código</h2>
|
|
|
|
|
{% for path, source in sources %}
|
|
|
|
|
<h3>{{ path }}</h3>
|
|
|
|
|
<pre>{{ source }}</pre>
|
|
|
|
|
{% endfor %}
|
|
|
|
|
</section>
|
|
|
|
|
|
|
|
|
|
<section class="chapter" id="chapter-credits">
|
|
|
|
|
<h2 id="cr-ditos">Créditos</h2>
|
|
|
|
|
<p>Este libro es una creación de Anaïs Berck para Medialab como parte del programa "Residencia Cultura
|
|
|
|
|
Digital" iniciado por el Gobierno Flamenco.<br>En esta obra Anaïs Berck está representadx por:</p>
|
|
|
|
|
<ul>
|
|
|
|
|
<li>el algoritmo de las cadenas de Markov del cual se encuentra una descripción en este libro,</li>
|
|
|
|
|
<li>los árboles de Madrid, que tienen su geolocalización entre Medialab Prado, Plaza del Sol y Atocha Renfe,
|
|
|
|
|
dentro de la base de datos <a href="http://www-2.munimadrid.es/DGPVE_WUAUA/welcome.do">Un Alcorque, un
|
|
|
|
|
Árbol</a>, </li>
|
|
|
|
|
<li>los seres humanos Emilia Pardo Bazán, Benito Pérez Gáldos, Jaime Munárriz, Luis Morell, An Mertens, Eva
|
|
|
|
|
Marina Gracia, Gijs de Heij, Ana Isabel Garrido Mártinez, Alfredo Calosci, Daniel Arribas Hedo.</li>
|
|
|
|
|
</ul>
|
|
|
|
|
<p>La copia de este libro es única y el tiraje es por definición infinito.<br>
|
|
|
|
|
Esta copia es el número {{ edition_count }} de copias descargadas.<br>
|
|
|
|
|
Condiciones colectivas de (re)uso (CC4r), 2021<br>Copyleft con una diferencia: Se le
|
|
|
|
|
invita a copiar, distribuir y modificar esta obra bajo los términos de la <a
|
|
|
|
|
href="https://gitlab.constantvzw.org/unbound/cc4r">CC4r</a>.</p>
|
|
|
|
|
|
|
|
|
|
</section>
|
|
|
|
|
|
|
|
|
|
</body>
|
|
|
|
|
|
|
|
|
|
</html>
|