Nothing Special   »   [go: up one dir, main page]

Untitled

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 189

Inteligencia

artificial con el
ZX SPECTRUM
ROBIN JONES
MICHAEL F AIRHURST

Inteligencia
artificial con el
ZX SPECTRUM

1986

~ARANINF~
MADRID
Traducido por
LUIS CAMPOY GUILLEN
© Robin Jones and Michael Fairhurst
© de la edición española, Paraninfo, S. A. - Madrid (España)
© de la traducción española Paraninfo, S. A. - Madrid (España)
Título original inglés:
ARTIFICIAL INTELLlGENCE: ZX SPECTRUM
publicado por SHIV A PUBLlSHING L1MITED
64 Welsh Row, Nantwich, Cheshire CW5 5ES, England
Reservados los derechos para todos los países de lengua española.
Ninguna parte de esta publicación, incluido el diseño de la
cubierta puede ser reproducida, almacenada o transmitida
de ninguna forma, ni por ningún medio, sea éste electrónico,
químico, mecánico, electro-óptico, grabación, fotocopia o cualquier
otro, sin la previa autorización escrita por parte de la Editorial
IMPRESO EN ESPAÑA
PRINTED IN SP AIN

ISBN: 1-85014-026-X (Ed. inglesa)


ISBN: 84-283-1488-8 (Ed. española)
Depósito Legal: M-26483-1986

~RA~!NFelu] Magallanes, 25 - 28015 Madrid (09303/34/86)

ALCO, artes gráficas. Jaspe, 34 - 28026 - MADRID


Indice de materias

Introducción ......................................... 7
1. ¿Qué es la inteligencia artificial? ....................... 9
2. Intróducción al reconocimiento de patrones 14
3. Técnicas para el reconocimiento de patrones .............. 27
4. Reconocimiento de voz .................... .. ..... ... 38
5. Aprendiendo mallas ............. . ............... .. .. 47
6. Mallas de aprendizaje y patrones visuales ....... ........... 63
7. La comprensión del lenguaje natural. . . . . . . . . . . . . . . . . . .. 76
8. Representación del conocimiento ............... . ..... " 97
9. Juego ............................................ 117
10. Proceso de imagen .. .. .... . ..... . ................ . . . 13 1
11. Proceso de la información y modelos biológicos. . . . . . . . . . .. 148
12. Breve examen de la anatomía del ordenador ... . ....... .. . 160
Apéndice 1: PATREC-Sistema de reconocimiento de patrones de
aprendizaje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 169
Apéndice 2: LIZ-Implantación simplificada de Eliza ........... 175
Apéndice 3: CONOCIMIENTo-Sistema de representación y recu-
peración del conocimiento . . . . . . . . . . . . . . . . . . . . . . . . . . .. 180
Indice alfabético . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 185

5
, Introducción

Quizás deberíamos comenzar diciendo lo que no es este libro. No es


un libro de cocina. Ciertamente, contiene una serie de listados de pro-
gramas que Vd. puede introducir en su Spectrum y ejecutarlos para ob-
tener unos interesantes, ejemplos de la utilización del ordenador para
reconocimiento de patrones, bases de conocimiento, interacción conver-
sacional, etc. Sin embargo, los resultados no serán "profesionales" en el
sentido de que vaya a disponer de un buen soporte para gráficos, de
menús detallados, páginas de ayuda; ni siquiera encontrará mensajes
particularmente de ayuda. Es una política deliberadamente seguida en
el curso de este libro.
Nos gustaría saber que Vd. ha comprendido un tema o, por lo menos,
una sección del tema, antes de apresurarse a utilizar el teclado. De este
modo, los programas ilustrarán y apoyarán sus conocimientos; no los
ignore. Luego, haga lo posible por ampliar y profundizar sobre los te-
mas que aquí se exponen. De hecho, en la mayor parte de los capítulos
hay proyectos que sugieren ideas para una investigación complementa-
ria. La mayoría de las rutinas son bastante cortas (diez a doce senten-
cias) que podrá usted tratar en trozos fragmentados, probarlas de modo
independiente y quizás modificarlas para adecuarlas a sus propias nece-
sidades antes de proseguir. La desventaja de esta solución es que quizás
encuentre alguna dificultad para saber donde se encuentra en un deter-
minado momento o quizás desee referirse a una rutina que no puede
localizar fácilmente. Por ello, hemos iI).cluido una serie de apéndices que
contienen los listados totales de los programas principales. También
incluyen las modificaciones marginales mencionadas, aunque no implan-
tadas, del texto. No se hacen comentarios detallados ya que, después de
todo, eso es una función del propio texto.
7
INTRODUCCION

Ahora expondremos lo que si, es el libro. Confiamos en que el libro


sea una introducción moderada sobre algunas de las técnicas de la inteli-
gencia artificial (lA) que se han venido desarrollando desde los últimos
treinta años aproximadamente. No es una exposición superficial : exis-
ten temas a los que se les ha dado más o menos peso, que podrían mere-
cer una discusión y otros que se han omitido enteramente. Alegaremos
en nuestra defensa que en todas nuestras exposiciones nos hemos ceñi-
do a los aspectos lA que se pueden implantar con facilidad en el ZX
Spectrum. Insistimos: "con facilidad". No es nuestro deseo que se en-
frente con grandes cantidades de código de máquina impenetrable. Para
una mejor utilización de este libro necesitará disponer de cierta expe-
riencia en BASIC y tampoco vendría mal tener cierto conocimiento del
código de máquina, aunque no es absolutamente imprescindible. No
necesita ser un mago del ensamblador Z80 para poder efectuar un segui-
miento de lo que está sucediendo. No obstante, si dispone de esos cono-
cimientos, podrá tomar muchas de las rutinas que presentamos y con-
vertirlas a ~ódigo de máquina, agilizando en gran medida las respuestas
del Spectrum. .
Hay una puntualización a hacer antes de comenzar. Es fácil involu-
crarse en exces<;> con un programa en particular y contemplar entusias-
mado su comportamiento aparentemente inteligente. Sugerimos que
cuide su sentido de admiración sobre la potencia de las actividades
intelectuales humanas al compararla con las pequeñas pretensiones de
los programas aquí presentados o con cualquiera de sus descendientes
más potentes y sofisticados.
Isaac Newton decía: "No sIlo que pensará el mundo de mí, pero res-
pecto a mí, pienso que he sido como un muchacho que se divertía en la
playa tratando de buscar un guijarro bonito o una concha más bella de
lo ordinario, mientras que ante mí estaba todo un gran océano de ver-
dad por descubrir".
Todos los científicos deberían recordar esto , con más razón quienes
están inmersos en una ciencia tan inmadura y joven como es la lA.

Hasta aquí hemos hablado de nosotros en plural. Sin embargo, cada uno de
nosotros escribió algún capítulo en solitario, por 10 que es más natural utilizar
la primera persona "yo" en lugar de "nosotros" ; así lo haremos en adelante,
por lo que cuando digamos "nosotros deberá significar "El lector y yo".

8
1
¿Qué es la inteligencia artificial?

Parece adecuado comenzar definiendo nuestros términos. ¿Por qué


algo o alguien es (o no es) artificialmente inteligente?
El término ':artificial" es fácilmente comprensible. Una cosa, un dis-
positivo, un artefacto construido por el hombre puede tener inteligencia
"artificial". El ser humano disfruta del término real. Pero, ¿cómo mues-
tra su inteligencia una persona o una máquina? Bien, procediendo inteli-
gentemente, podríamos contestar, pero a nadie conformará esta res-
puesta; es una definición de tipo circular. Por tanto, vamos a tener que
discurrir sobre 10 que caracteriza a un comportamiento inteligente. Po-
dríamos comenzar pensando en algunos ejemplos. Conducir un coche a
todos se nos antoja que pueda ser una actividad inteligente. Esa inteli-
gencia se muestra cuando reducimos nuestra velocidad al contemplar a
un niño jugando con una pelota. Podría ocurrir que la pelota rodara a
la calle y el niño tratara de ir a por ella. Contemplar esta escena e imagi-
narse Vd. mismo en una situación 30 segundos después, distinta de la
que Vd. está realmente, parece también una actividad peculiarmente
humana. En distintas áreas, esos 30 segundos pueden convertirse fácil-
mente en 30 minutos o en 5 años. Nosotros mostramos el mismo tipo
de habilidad con los juegos: "Si ahora me enroco, él no me puede
comer con su alfil el peón de rey, y si le deja allí y no mueve su rey,
puedo comérmele con mi torre en el próximo movimiento y moverla
después". O también, en temas más serios: "Si amplío mi casa, se incre-
mentará el valor de mi propiedad , pero al mismo tiempo que obtendré
una revalorización, costará más dinero calentar la casa".
Por otro lado, podemos pensar en actividades que no nos parecen
nada inteligentes. Abrir una botella, etiquetar botes de conserva (en
forma correcta, por supuesto), introducir una recarga de tinta en la
pluma o el bolígrafo, todas estas actividades parecen triviales del ser

9
¿QUE ES LA INTELIGENCIA ARTIFICIAL?

humano que pueden realizarse sin forzar nuestros músculos mentales en


grado importante. Bien, pues todas estas actividades las podría realizar
un brazo robot bajo control de un programa con bastante aproximación
a la velocidad y destreza con que lo efectúa un humano y tendríamos la
"intelligentsia artificial" (término a veces desacreditado utilizado para
describir a quienes se encuentran investigando sobre la inteligencia arti-
ficial) rodando por las calles.
Por supuesto, es posible realizar todo eso "conduciendo un robot de
la mano" , es decir, enseñándole a base de guiar sus movimientos una
vez, de forma que recuerde simplemente la secuencia de operaciones
exactas controladas por motor y que posteriormente las repitiera exac-
tamente. Rápidamente se dispondría a abrir botellas que no estuvieran a
su alcance o etiquetaría dos botellas con una sola etiqueta si es que esta-
ban demasiado juntas. A esto difícilmente se puede considerar como
comportamiento inteligente.
Sin embargo, los programas de ajedrez los tenemos desde hace 20
años, y no hace falta que le diga que puede Vd. adquirir uno bastante
decente para incorporarlo en cualquier micro casero. Estos programas
se ejecutan en máquinas que tengan una potencia y velocidad razona-
bles y pondrán en un compromiso a más de un jugador. Pero sin duda ,
no hay ningún programa de ajedrez que haya logrado batir todavía a un
gran maestro, pero habrá millones de jugadores no profesionales a los
que vencerá; estoy seguro de que esas personas se sentirán ofendidas si
por ello pone Vd. en duda su inteligencia.
Por tanto, ¿un programa de juego de ajedrez es o no es "inteligente"?
En apariencia parece que sí, ya que efectúa movimientos razonables,
prevee las trampas que le pone su opositor e incluso él mismo pone tam-
bién alguna trampa. Visto desde dentro, sin embargo, podemos ver
cómo se consigue esto por medio de un procedimiento que utiliza ente-
ramente estructuras arborescentes y evalúa así las posiciones del tablero
en forma numérica (vea capítulo 9). Por tanto, se diferencia sólo en su
mayor complejidad, respecto a un programa para cálculo de pagos de
amortizaciones, que ciertamente no se puede considerar que caiga den-
tro del campo de la inteligencia artificial. A comienzos de los años 50,
Alan Turing, matemático inglés y cien tífico de ordenadores ya propuso
un posible test para el comportamiento inteligente . Propuso que una
persona se enfrentara con dos terminales de ordenador con los que
podría conversar a través de los teclados. Uno de los terminales estaría
conectado a un ordenador que se programaría para mantener una con-
versación con él. El otro estaría conectado a un segundo terminal ope-
rado por un ser humano. Si la persona no podía establecer la diferencia
en calidad entre las dos conversaciones que sostenía , el ordenador ha-
bría pasado la prueba de inteligencia de Turing.
10
¿QUE ES LA INTELIGENCIA ARTIFICIAL?

Sin embargo, hay quien nos quiere hacer creer que precisamente,
debido a que podemos describir un proceso formal para resolver su pro-
blema, tal como el juego de ajedrez, no puede ser inteligente. Este argu-
mento parece confundir la inteligencia con la intuición. Después de
todo, un chispazo instantáneo de inspiración es un hecho claramente
intuitivo y no existe un conjunto de procesos que podamos describir
entre las premisas y la conclusión. Ahora mismo Vd. está comprometi-
do en una actividad intuitiva. El reconocimiento simple de las letras de
esta página requiere una técnica que ciertamente Vd. no acertaría a des-
cribir. ¿Cómo puede ser que acierte a reconocer una "p", una "P" o
una "p", si en cierto modo significan lo mismo? Luego tiene que con-
juntar las letras para llegar a formar palabras y finalmente tomar el sen-
tido que incorporan las frases. Este es el momento auténtico del esfuer-
zo. Las ideas que presento aquí son bastante abstractas, si bien no debe
tener (espero) dificultades en seguirlas. Pero Vd. no tiene idea de cómo
está ensamblando esas ideas o incluso qué significa realmente formar un
concepto.
Quizás la inteligencia tenga algo que ver con el nivel de abstracción
involucrado en una actividad. Después de todo, disciplinas como la
filosofía y las matemáticas tratan casi exclusivamente con ideas abstrac-
tas y tendemos a pensa"r que sus practicantes son particularmente inteli-
gentes. Pero, ¿los números no son algo abstracto? El concepto "3 na-
ranjas" puede ser bastante concreto pero el "3" en sí mismo es incapaz
de tener una interpretación correcta. ¡Los ordenadores son espe,cial-
mente buenos para el tratamiento numérico!
En términos de definición no ha habido más avances. De hecho po-
dríamos argumentar que la frase "inteligencia artificial" se escogió de
forma poco cuidadosa, dado que el concepto de "inteligencia" es algo
abstracto. Pero lo tenemos adherido a nosotros casi del mismo modo
que el teclado QWERTY que ya nadie (o casi nadie) cuestiona.
Por tanto, me gustaría proponer una definición que más o menos
ignora del todo la palabra "inteligencia" . Yo diría que quienes de algún
modo están comprometidos con lA, intentan, de forma limitada, mode-
lar algunos aspectos del comportamiento humano. Los juegos de sobre-
mesa, la lectura de libros, abrir una botella , todas son actividades huma-
nas de una forma que el cálculo de tablas de amortización no 10 es, (se
uqe voy a recibir varias cartas de queja por esta última afirmación; lo
siento, pero Vds. saben a qué me estoy refiriendo).
Esto es lo que para mí hace tan fascinante el área lA. El investigador
puede desarrollar una técnica para resolver un problema y enfrentarlo
luego a las posibilidades de realización del mismo problema por un ser
humano o puede estudiar primero la técnica humana e intentar mode-

11
¿QUE ES LA INTELIGENCIA ARTIFICIAL?

larIa. En la última solución, el investigador comienza por aprender algo


de un psicólogo. En la primera, el psicólogo puede aprender algo de él,
ya que si el modelo desarrollado se produce para mostrar las caracterís-
ticas del tipo humano, puede utilizarse como hipótesis para la psicolo-
gía humana del problema. En la práctica, puede existir mucho más diá-
logo del que aquí se sugiere entre el psicólogo y el hombre lA.
De nuevo, quizás estemos interesados en un modelo más "físico" del
cerebro humano. En este caso hablaremos con un neurólogo en lugar de
con el psicólogo, quien tiende a considerar el cerebro como una "caja
negra" que sólo puede observar desde el exterior. Por tanto, es un área
altamente interdisciplinaria.
Como ya ha sugerido, la modelación del comportamiento humano se
presenta bajo diferentes perspectivas y premisas y de diferentes modos.
Sin embargo, hay dos cosas que son comunes a todas las actividades
humanas. Los humanos aprenden y luego generalizan. El aprendizaje es
un proceso que nos es familiar incluso aunque el mecanismo por el que
suceda se presente oscuro. Intentamos solucionar algo, falla, adoptamos
una segunda solución, y funciona. Hemos aprendido una técnica. Por
supuesto, alguien nos podría haber indicado que nuestra primera solu-
ción no funcionaría, en cuyo caso hubiéramos sido enseñados. Por
tanto , nos interesaremos en examinar las formas en que un programa
puede aprender por él mismo, así como las formas en que podemos en-
señar a uno.
La generalización no es un término familiar, pero es una actividad
común. Comenzamos con ejemplos sencillos de un concepto y luego ha-
cemos hipótesis de naturaleza general. Esto se observa mucho en los
niños. Indíquele a un niño lo que es un coche (rojo en este caso) y
apuntará a un toldo rojo diciendo "coche". Se le ha indicado (implícita-
mente) que coche es rojo y el generaliza esto con la hipótesis de que

Mi robot puede
vencer al tuyo en
el test de Turing .

H
.
"'<.

12
¿QUE ES LA INTELIGENCIA ARTIFICIAL?

todo lo que sea rojo es un coche. Con mucha sensatez luego prueba su
hipótesis gritando "coche" cada vez que ve algo rojo, si no se le indica,
por supuesto, que está equivocado. El test ha fallado, la hipótesis es fal-
sa. Con frecuencia tales hipótesis son ciertas o casi ciertas y el niño
aprende mucho y muy deprisa. Por ejemplo, si se le enseña un Ford
Fiesta y se le dice que es un coche puede formar la hipótesis de que
"todas las cosas con cuatro ruedas son coches" que no está lejos de la
verdad, necesitando sólo una pequeña revisión para que distinga los ca-
miones, los coches de caballos, etc.
Examinaremos en breve las formas en que se pueden programar los
ordenadores para imitar las características humanas, al menos de forma
limitada.

l3
2
Introducción al
reconocimiento de patrones ·
El término "reconocimiento de patrones" es en sí mismo explicativo
¿o no lo es? Si se le pregunta qué significa para Vd ., probablemente dirá
algo como : "el reconocimiento de patrones describe lo que Vd. hace
cuando reconoce un patrón, es decir, cuando examina algo, como un
cuadro, y sabe qué es lo que está examinando". Bien, esto es válido en
cierta medida, pero una definición tan simple oculta una multitud de
problemas prác,ticos que nosotros, como seres humanos, con frecuencia
damos por supuesto. ¿Se ha detenido a pensar cuántas actividades dia-
rias implican este tipo de proceso que acabamos de describir?
El simple acto de leer estas palabras, requiere la posibilidad de reco-
nocimiento de patrones. En realidad, no es tan simple como eso, ya que
este "reconocimiento" sucede a distintos niveles. A nivel más bajo, para
leer este libro Vd. debe ser capaz de reconocer que ciertos patrones de
tinta y papel forman las letras, que son unos símbolos que, en términos
de su experiencia anterior, son significativos para Vd. Estas letras gene-
ralmente significan poco por sí mismas, pero agrúpelas para formar
palabras y frases y tendrá disponible gran cantidad de información. Sin
embargo, para extraer esta información, Vd. debe conocer (reconocer)
que una "S" es distinta de una "T", por supuesto, pero también que la
secuencia de las letras L-A-S está permitida, mientras que la secuencia
L-S-A no es una palabra válida.
Sin pensamos en las frases debemos aprender pronto que no todas las
disposiciones de orden de palabras conforman frases válidas. Intente
decir" ¿Hora qué decirme puede es?" a un policía, por ejemplo, y pro-
bablemente le pida que se someta a la prueba del alcohol y sople por ese
pequeño dispositivo o quizás le prepare una confortable cama para que
pase Vd . la noche. En otras palabras, la estructura gramatical es impor-
tante y hay que añadirla ciertas reglas gramaticales (¿patrones?). Esta
idea la desarrollaremos con más detalle en el capítulo 7.
14
INTRODUCCION AL RECONOCIMIENTO DE P'ATRONES

Finalmente, antes de dejar nuestro ejemplo, es importante darse


cuenta de que el concepto de reconocimiento se aplica incluso a un ni-
vel más alto y que una palabra de una frase debe transmitirle el recono-
cimiento de una idea o concepto en particular o la ejecución de una
función gramatical reconocible si su propósito es el de transmitir infor-
mación tal y como se pretendía. En otras palabras, podemos escribir
una frase gramaticalmente perfecta como:
"El mirlo rojo habló dentro de la felicidad fría" que no significa al so-
lutamente nada. ¿O no es así?
El otro punto muy importante a considerar en el reconocimiento de
patrones que nosotros deberíamos seguir es que el término define una
multitud increíble de actividades que, aunque todas ellas se encuentran
involucradas con el concepto de reconocimiento, tienen que ver con
diferentes aspectos del comportamiento. Nosotros somos capaces de re-
conocer las caras (la mayoría con dos ojos, dos orejas, una nariz, una
boca y con frecuencia con pelo), y sin embargo, ¿por qué son tan dife-
rentes? Podemos oir e interpretar sonidos, no sólo de una conversación,
sino también los de una olla hirviendo, el tema de una sinfonía de
Mozart y muchos,más. Reconocemos los síntomas de un resfriado o una
gripe y observamos la diferencia entre un Mercedes y un Seat 133. Po-
demos identificar a distintos locutores e incluso detectar en ellos esas
pequeñas inflexiones en la voz que denotan angustia, sorpresa, miedo y
otras sensaciones. Por si no fuera suficiente, piense en el proceso menos
definible aún que seguimos en situaciones donde reconocemos el estilo
de un compositor o las características de la trama de una película tipo
Spaghetti Western.
Por tanto, queda claro que, según hemos visto, el reconocimiento de
patrones es tan importante para el ser humano que es difícil pensar
cómo podríamos existir en el mundo real sin esa posibilidad. Sin embar-
go, esta discusión es particularmente relevante en el presente contexto
debido a dos razones.
La primera, que la discusión anteriormente expuesta no deja lugar a
dudas de que el reconócimiento de patrones es un problema que requie-
re una inteligencia considerable y, siguiendo las ideas del capítulo 1, a
cualquier máquina que incorpore una capacidad semejante en alguna o
todas esas áreas se la puede considerar, con cierto grado de razón que se
comporta "inteligentemente". En segundo lugar, la gran diversidad de
tareas del reconocimiento de patrones sugiere que cuando desarrollemos
las técnicas con las que abordar los problemas de reconocimiento de pa-
trones que son en lo posible independientes del problema, vamos a
encontrarnos además muy ocupados.
15
INTRODUCClON AL RECONOCIMIENTO DE PATRONES

APLICACIONES DEL RECONOCIMIENTO DE PATRONES

Quizás esté pensando que todo esto es un trozo de arenque. El reco-


nocimiento de patrones es muy interesante pero ello no significa que
necesariamente haya de existir un punto en que se deba intentar progra-
mar un ordenador para llevar a cabo las mismas tareas, a menos que, por
supuesto disfrute de la gimnasia intelectual. Por lo tanto, quizáS es una
buena idea que antes de adentrarnos en el reconocimiento de patrones
de forma ligeramente más detallada, consideremos algunas aplicaciones
del mundo real para los sistemas que ejecutan un reconocimiento de
patrones.
El problema es que realmente existen tantas posibles aplicaciones que
aparecen obvias con tan relativamente poca reflexión, que es difícil sa-
ber qué ejemplos se deberían escoger. He aquí simplemente algunas de
las muchas aplicaciones posibles, para ilustrar algunas áreas de interés:

Procesos de fabricacibn

Bien, todos hemos oído de los coches construidos por las manos de
los robots.
A pesar de que, según el contexto de la discusión del capítulo 1, mu-
chos de los robots utilizados actualmente en fabricación no son real-
mente "inteligentes", ya que simplemente realizan una secuencia repeti-
tiva de operaciones, existe un gran interés en la utilización de robots
basados en sensores que son capaces de trabajar y captar el ambiente
en el que trabajan. Un área típica de aplicación, existen muchas, es la
inspección automática para detección de defectos en los productos y
mejorar así el control de calidad. El reconocimiento de patrones involu-
crado aquí trataría de "reconocer" un componente (en una línea de
montaje, por ejemplo) de calidad aceptable y distinguirle de los que se
consideran defectuosos o inaceptables por alguna razón. Así mismo, se
podrían utilizar en las fábricas robots que incorporaran un dispositivo
sensor visual para localizar, identificar y acceder a un componente para
efectuar un ensamblaje automático, luego transferirlo a una fase subsi-
guiente del proceso de fabricación, etc.

Reconocimiento de voz

Un gran apartado del reconocimiento de patrones está relacionado


con el problema del reconocimiento de voz. El problema aquí es el de
tratar de diseñar un sistema que pueda responder a una información ha-
16
INTRODUCCION AL RECONOCIMIENTO DE PATRONES

blada, en lugar de a señales de control eléctricas o, como es el caso nor-


mal con un ordenador, señales obtenidas desde un teclado.
Al margen de que la interacción hombre-máquina sería más "amisto-
sa", el reconocimiento automático de voz facilitaría mucho la vida,
digamos por ejemplo, para los operadores de máquina que tienen ocu-
padas las manos; o podría facilitar un medio, potencialmente muy
potente, de identificación individual a efectos de seguridad. El recono-
cimiento de voz abriría también un abanico de oportunidades para los
minusválidos, ya que encontrarían en la comunicación oral mayor faci-
lidad que en la operación manual de interruptores o del teclado.
Además, el reconocimiento de voz es un tema de un interés tan ex-
tendido que he dedicado un capítulo entero (capítulo 4) a la discusión
de los principios más importantes.

Exploraciones Médicas

Los patrones en datos clínicos que describen un caso "normal" o


"anormal" son muy comunes en la diagnosis médica o en el control de
pacientes. El reconocimiento de patrones puede utilizarse como ayuda
en el proceso masivo de imágenes de rayos X o para monitorizar un
electrocardiograma que muestra la actividad eléctrica del corazón. En
estos casos, en los que se hace absolutamente crítica una interpretación
correcta, puede ser apropiado limitar el grado de la automatización de
la detección de un aspecto sospechoso, o sólo potencialmente anormal,
permitiendo que sea el doctor quien realice un examen final.

Proceso de Datos

Existen muchos procesos en el mundo de los negocios y el comercial


que requieren la lectura de documentos o información escrita de distin-
tos tipos. El reconocimiento de patrones podría aportar la base para dis-
poner de una herramienta muy potente para aplicaciones tales como la
lectura directa de facturas o pedidos, o la clasificación automática de
cheques. Una lectura automática del código postal haría mucho más
eficiente el tratamiento del correo, mientras que muchos procesos de
gestión se beneficiarían de la posibilidad de entrada de datos directa por
medio de la lectura automática de caracteres escritos a mano.
17
INTRODUCCION AL RECONOCIMIENTO DE PATRONES

Ambientes Nocivos

Existen muchas situaciones en las que un ambiente de trabajo es tan


peligroso que los operadores humanos no pueden funcionar adecuada-
mente dentro de él. En tales situaciones, o allí donde un operador deba
trabajar por control remoto, el disponer de la posibilidad de reconoci-
miento de patrones sería algo muy positivo. Por ejemplo, en una planta
química se podría detectar automáticamente la acumulación de una
masa de gases explosivos o avisar de la presencia de una polución excesi-
va en alguna fase del proceso.
Hasta aquí y con la exposición anterior, sólo hemos arañado en la
superficie; seguramente Vd. podría ampliar la lista ,expuesta, pero con-
fío en que estará de acuerdo en que el reconocimiento de patrones es
un tema importante y un sugestivo objeto de estudio.

SOLUCIONES PARA EL RECONOCIMIENTO DE PATRONES

A pesar de que en los capítulos 2 a 6 examinaremos el reconocimien-


to de patrones desde un punto de vista más práctico, es importante, en
principio, disponer de un conocimiento más general de algunos de los
conceptos subyacentes y los principios relevantes. Esto quizás se consi-
ga mejor por medio de ejemplos; por tanto, consideraremos tres ejem-
plos (todos ellos con patrones visuales que representan caracteres alfa-
numéricos) que nos conducirán a las ideas principales con las que nos
volveremos a encontrar más tarde para tratarlas de forma más rigurosa.

Ejemplo 1: Sistemas OCR (Reconocimiento 6ptico de caracteres)

Este tipo de sistema queda mejor ilustrado si consideramos el forma-


to usual de un cheque bancario. Como muestra la figura 2.1 el cheque
contiene en la parte inferior una serie de cifras que proporcionan infor-
mación sobre el código de clasificación del banco, el número de cheque
y el número de cuenta del cliente. Estos números impresos se utilizan
para automatizar algunos de los procesos del tratamiento de los cheques
y por tanto se necesita qUy sean legibles por una máquina. Así pues,
¿cómo solucionamos el problema de .diseñar una máquina que lea estos
datos?
Una solución sencilla que puede ser muy efectiva consiste en constuir
una máscara para cada uno de los caracteres que se puedan dar (en la
figura 2.2 se muestran algunos ejemplos). Para identificar un carácter se
18
jBSj ~S~~~7s-\NTANDER

~o, nDCS2~Doms ~ O ffi OO~

~O~OOC52~0085~ 0800~ 27896


número de cheque número de sucursal número de cuenta

Fig. 2.1.-Formato usual de un cheque bancario.

le compara simplemente con cada máscara hasta que se encuentre su


semejante, que indicará su reconocimiento.
Es fácil ver que el patrón de prueba mostrado sería reconocido como
un "cuatro", ya que coincide con la máscara correspondiente.
Vd. no necesita una perspicacia extraordinaria para ver que esta sen-
cilla solución sólo es satisfactoria debido a que hemos aplicado algunas
restricciones bastante severas al problema. Específicamente:

l. Los caracteres están perfectamente bien definidos y se han impreso utili-


zando un formato ~special y generalmente aceptado al que están sujetos
todos los usuarios potenciales del sistema.
2. Los caracteres utilizados se han seleccionado cuidadosamente (siendo el
número de caracteres diferentes disponibles restringido) de forma que sean
distinguibles rápidamente. Por esto todos ellos parecen ligeramente singu-
lares, como si fueran de la era espacial.
3. Lo que puede no ser tan obvio pero igualmente importante es que las con-
diciones bajo las que se intenta el reconocimiento son también una gran

1![Q]~~~l!~
Patrón de 'O' " , '2 ' '3' '4' '5'
prueba Máscara Máscara Máscara Máscara Máscara Máscara
Fig. 22.-Ejemplos de máscaras de caracteres.

19
INT.RODUCCION AL RECONOCIMIENTO DE PATRONES

ayuda. Por ejemplo, sabemos siempre donde buscar los números en el che-
que, todos ellos son del mismo tamaño, los cheques normalmente están
bastante limpios, etc.

Parece pues que nuestra primera excursión al reconocimiento auto-


mático de patrones quizás no es tan impresionante como hubiéramos
podido esperar. Además, se podría decir que el proceso que hemos exa-
minado no es inteligente en absoluto, y yo probablemente estaría de
acuerdo. Necesitamos ampliar un poco el área de problema para poder
ver con más claridad los principios implicados.
Seguramente se habrá percatado de que en la tarea específica que he-
mos estado describiendo es bastante posible (y además común) obtener
los datos que se van a clasificar no por la imagen óptica, sino de forma
alternativa por medio de una tinta magnética especial. En este caso, por
supuesto, en sentido estricto, no estaríamos tratando del reconocimien-
to de caracteres ópticos pero es claro que los principios serían exacta-
mente los mismos.

Ejemplo 2: Reconocimiento de caracteres de imprenta

Consideremos ahora el problema de diseñar un sistema que necesita-


mos, digamos, para reconocer/distinguir un conjunto de caracteres alfa-
béticos impresos con una máquina de escribir, asumiendo que todos
nuestros datos corresponden a ejemplos de letras del alfabeto.
A primera vista podríamos pensar que, al igual que en el ejemplo
anterior, hemos restringido el problema 10 suficiente como para poder
aplicar una técnica de búsqueda de coincidencia (matching) similar a la
utilizada en el caso OCR. Sin embargo, después de una pequeña refle-
xión, veremos que no es probable que en este caso sea satisfactorio. La
esencia del problema es el hecho de que dos máquinas de escribir no
siempre producen idénticos caracteres de escritura, e incluso algunos
pueden ser muy diferentes. Cualquiera que haya podido observar la varie-
dad de bolas de impresión que existen para las máquinas de escribir
eléctricas, sabrá a 10 que me estoy refiriendo. Como veremos, en la prác-
tica ésta no es la única dificultad, pero de todos modos continuaremos.
Por 10 tanto, es probable que sin almacenar las máscaras correspondien-
tes a un gran número de patrones de ejemplo para comparación, el mé-
todo de búsqueda de semejanza de máscara no sea efectivo y realmente
necesitemos encontrar una solución mejor y más sutil.
Un esquema más general y potencialmente mucho más flexible que la
técnica de búsqueda de coincidencia con máscaras es la que presenta-

20
INTRODUCCION AL RECONOCIMIENTO DE PATRONES

mos por medio de un tipo de modelo o estructura conceptual de un


procedimiento de reconocimiento de patrones generalizado del siguien-
te modo. (Observe que a este nivel no nos preocupa demasiado cómo
construir una máquina a partir de sus componentes físicos, sino que
estamos luchando para encontrar un procedimiento que funcione).
En este esquema lo único que debemos asumir es que el proceso de
reconocimiento puede dividirse en una serie de etapas separadas de
forma conveniente y comoquiera que no estamos interesados todavía en
cómo se efectuaría la implantación, podemos hacer que estos sub-proce-
sos sean llevados a cabo por "demonios" que corresponderían a unos
mecanismos físicos todavía sin especificar. Para definir el proceso total
del reconocimiento, necesitamos identificar las cuatro etapas distintas
(y por tanto cuatro tipos diferentes de demonios) ilustradas en la figura
2.3. Podemos pues asumir el proceso de reconocimiento de la forma
siguiente:

Etapa.1. La primera etapa de proceso, que en realidad es obvia y fácil de com-


prender, consiste en observar la presencia de un patrón a procesar y
el paso de estos datos a la siguiente etapa. Asumimos que esto lo
hace un De11'}onio Imagen y es fácil ver que en la vida real pueden

EJ
6/ ,~
v\l\~k0\
I ~~.cP / ~0~
0/ ~~ ~
' \ 1~1 \ W /
\$ t®.-:&
." ES~NA
0
.~/
G\;)
?'~íI~~ :J @~
~ .~ G I-
~ '\ ~ O

Fig. 23.-Pandemonium.

21
INTRODUCCION AL RECONOCIMIENTO DE PATRONES

tener su répica en forma de cámara de IV o un dispositivo semejante


que facilite una interfase entre una imagen y los datos que representa
esa imagen.
Etapa 2. El Demonio Imagen pasa los datos de su imagen a un grupo de De-
monios de Rasgos. Cada uno de estos Demonios de Rasgos tiene que
investigar la imagen para detectar la presencia o ausencia de algún
rasgo muy específico y bien definido. Podría ser, por ejemplo, una
línea recta horizontal, una línea recta vertical, una curva, etc.
Etapa 3. Cada Demonio de Rasgps pone disponible, para la siguiente etapa de
proceso, su propia información, de la que se hacen cargo los Demo-
nios Cognoscitivos. Estos demonios son los responsables de buscar la
ocurrencia de todo un conjunto de rasgos que se espera sucedan en
cualquier clase específica de patrón. En este ejemplo 10 que sucede-
ría es que un Demonio Cognoscitivo buscaría todos los rasgos de una
" A" , otro buscaría los de la "B" y así sucesivamente hasta llegar a
otro que se encargaría de buscar 10 s de la "z".
En este modelo asumiremos que un Demonio Cognoscitivo señaliza o
indica la presencia de los rasgos que tiene asignados buscar por me-
dio de un grito y cuanto más rasgos encontrara más fuerte gritaría.
Etapa 4. Un único Demonio de Decisión sería el responsable de la etapa final
del proceso, teniendo a su cargo el nada envidiable trabajo de tener
que escuchar los gritos de todos los Demonios Cognoscitivos para
poder identificar cuál de ellos es el que grita más alto. Luego este de-
monio asigna el patrón de identificación (la imagen originalmente
percibida por el Demonio Imagen) a la clase asociada con el Demo-
nio Cognoscitivo que grita más alto .

No quedará sorprendido al conocer que este tipo de modelo fue bau-


tizado originalmente como "Pandemonium". Como puede ver se con-
centra en la descripción de un procedimiento posible de reconocimiento
de patrones en lugar de en una implantación en particular. Sin embargo,
es importante darse cuenta de que al enfatizar que un patrón puede
considerarse en términos de los rasgos de sus componentes en lugar de
como una entidad única aislada, hemos seguido un camino más largo
que la técnica original, que es claramente inadecuada para este tipo de
aplicación.
Esto no quiere decir que el Pandemonium sea necesariamente la me-
jor solución ni siquiera que funcione en condiciones reales sin unas mo-
dificaciones complementarias. Como ejemplo ilustrativo, la tabla 2.1
muestra un ejemplo (pequeño) de tipos o clases posibles, junto a un
conjunto de rasgos (más bien arbitrarios) que pueden escogerse. Para
que vea Vd. algunos de los problemas que pueden aparecer en este
22
INTRODUCCION AL RECONOCIMIENTO DE PATRONES

Tabla 2.1. Algunos tipos de caracteres y sus .rasgos asociados

F L O P R

Líneas verticales 1 1 1 1

Líneas horizontales 2 1 2 2

Líneas obl ícuas 1

Angulos rectos 3 1 3 3

Angulos agudos

Curvas continuas 1

Curvas discontinuas 1 1

tipo de esquemas de reconocimiento, reflexione sobre las preguntas


siguientes:

1. ¿Qué sucede cuando Vd. intenta incrementar el número de tipos distin-


tos a reconocer?
2. Con patrones reales, ¿cómo es de sensible el sistema a la variabilidad de los
rasgos?
3. ¿Qué dificultad existe para detectar los rasgos que Vd. haya escogido?
4. ¿Es posible siempre definir cada carácter posible de forma única?

Por supuesto, existen otras preguntas que Vd. deberá responder en


situaciones particulares, pero parece que nos encontrarnos en el buen
camino, ya que hemos encontrado un método, que si se aplica cuidado-
samente, muestra cualidades corno para pensar que pueda producir una
técnica de reconocimiento generalizada.
Ahora sigamos con nuestro tercer ejemplo.

23
INTRODUCCION AL RECONOCIMIENTO DE PATRONES

Ejemplo 3: Reconocimiento de alfanuméricos cualesquiera

Quizás éste sea el problema más general que deseemos solventar en el


reconocimiento de caracteres. Supongamos que deseamos diseñar un sis-
tema que reconozca cualquier carácter alfanumérico de toda la gama
posible, las letras de la A a Z y los números de O al 9. Para evitar dema-
siada confusión, la letra O y el número O son el mismo carácter y la
letra 1 y el número 1 tampoco debemos distinguirlos. Además, asumire-
mos que estamos tratando patrones en un ambiente operativo real (pue-
de que para leer la dirección o al menos los códigos postales de unos
sobres para el correo).

x~ xxx xxxxxx x xx x
xxxx xxxxxxxxxxxx ~xxxxx xxxxxx
xx xxx xxxxxxxxxxxx xxxxxxxxx xxxx xxxx
xxxxxxx xx,xxxxxxxxxxx xxxxxxxxxxx xx xxx
xxx xxxx xxx xxx X xxxxxxXJQxx xx xxx
xxx x xxx xxx xx x xxx x xxxx· XI xx
xxx xxx xxx xx xxxxx xxxx xx xx
xxx xx xxx xxx xxxxx Xxx x xx xxx
xxx xxx xxx xx xxxx xxxxxx IX xx
xxx xxx xx xxx xxxxx xxxxxx x xx
xxx xxx xx xxx xxx x xxxxxx xx xx
xxx xxxx xx xxx xxxx xxxxxx x x
xxx xxx xx xx xxx xxxxxxx XI x
xxx xxxx xx xx xxxx xxxxxxx xx xx
xxx xxxx xx xx xxx x xxxxxxx IX xx
~xxxxxx xx xx xxxxxxx xxxx x x xx xxx
xxxxxxx xx xxx xxxxxxxxxxx xx xx
XXXXI llXxxxxxxxxxx XXXXXXXX:K xxx x xxx
xxx XXXXXIXXXXXX XXXXXX XXXXXXXXX
xxxxxxxxx XXXXXX

(a) (b) (e) (d)

x X
xx xxx
XXXXx xx XXXXXx XXXXXXX
xxxxxxxx xxx xxxxxxx XXXXXXXX
XXXXXXXXX xx XXXXXXXXX X~XXXXXXX
xxx xxx XX xxx xx xxx
xx xx xx X xxx xxx x x
xxx xx xx xxx xx xxx X
xx xxx x xx x xxx xx xxx x
xx xxx x xx X X xx xx xxx X
xx xxx x xxx x xxx xx xxx XX
xx xxx X XX X X X xxx xx
xx xx x xxx x x XX XX
xxx xx XX X xx xx xx
XX xx X xxx ~ xx xxx X xx
X xxx X xx X xx XX X
xx xxx Xx X X xx XX X
xx xx xx X xxx XX X
XXXX xx xx x XXXXX xxx x
XXXXXXXXXXXX xx XXXXXXXX x
XXXXXXIX xxx X XXXIII!
XXXX XXX XX XXXX
xxx XXX
x ·xXXXXXX ~ X
(e) (n (g)

Fig. 2.4.-Ejemplos de la letra O impresa a máquina.

24
INTRODUCCION AL RECONOCIMIENTO DE PATRONES

En este tipo de situación nos vamos a percatar de algunos pequeños


problemas que hasta ahora habíamos dejado de lado. Una breve ojeada
a la figura 2.4 servirá para ilustrar lo que quiero decir.
Aquí hemos tomados algunos patrones sencillos que corresponden a
la letra "O" y está claro que incluso aunque supongamos que son carac-
teres escritos solamente a máquina, podemos esperar que existan algu-
nas ligeras variaciones en la posible apariencia de los patrones a procesar
(estos ejemplos se han extraido de datos reales de sobres de correo).
Observe que estamos considerando unos patrones que se han convertido
él una representación de "puntos en blanco y negro" para facilitar el
proceso, pero de esto discutiremos en capítulos posteriores. Las figuras
2.4 (a) y (b) muestran la variación típica en la silueta del diseño del tipo
de letra y en (c) y (d) también se muestra cómo incluso una imagen
semejante puede aparecer en versiones más o menos gruesas. La figura
2.4 (e) muestra lo que puede suceder fácilmente al extraer los datos o al
pasar la información a un sistema de ordenador; aquí, como ve, los ca-
racteres qu.edan rotos y distorsionados. La figura 2.4 (f) ilustra el pro-
blema muy común del ruido en el patrón; en otras palabras, se han des-
lizado algunos puntos negros singulares (que surgen seguramente por las
notas de suciedad en el. papel, arrugas, etc.) mientras que otros puntos
son blancos cuando debían ser negros (quizás debido a que la máquina
de escribir tenía la cinta de carbón muy usada o el papel no absorbió
debidamente la tinta). Finalmente, la figura 2.4 (g) muestra otro proble-
ma común; aquí la extracción del carácter para proceso no ha sido muy
satisfactoria y ha arrastrado consigo parte del carácter adyacente.
Por lo tanto, verá que nuestras técnicas, aunque útiles para algunas
situaciones específicas o/ razonablemente bien controladas, no son real-
mente apropiadas tal como están, cuando aparecen complicaciones. Por
esta razón, necesitamos desarrollar unas técnicas que tengan más rigor.

Jefe, opino que han fabrica-


do los robots demasiado in-
teligentes . Están de huelga
reclamando más sueldo.

BRYSLEN
Fábrica de Automóviles
Proyecto de Inteligencia
Artificial

~~
25
INTRODUCCION AL RECONOCIMIENTO DE PATRONES

Esto lo haremos en capítulos posteriores, pero al menos en este momen-


to Vd. ya tiene una vaga idea de los principales problemas que hay que
solucionar si queremos que el reconocimiento de patrones, esa actividad
diaria que constantemente necesitamos, se lleve a los dominios de la
práctica como implantación a través de los ordenadores.

26
3
Técnicas para el
reconocimiento de patrones
Como vimos en el capítulo anterior, necesitamos desarrollar un poco
más nuestras ideas sobre el reconocimiento automático de patrones,
antes de abordar con éxito problemas del mundo real. En este capítulo
intentaremos por lo tan.to dirigirnos hacia otras técnicas generalmente
aplicables y mejor definidas; pero para ello debemos comenzar por defi-
nir con algo más de precisión algunos términos y estar de acuerdo con
algunas notaciones de expresión.
Comenzaremos con la idea de patrón. Aunque, como ya hemos visto,
pensemos que conocemos intuitivamente lo que es un patrón, necesita-
mos precisar más para que sea de utilidad. Puesto que la idea del proce-
so de un patrón (por ejemplo, su reconocimiento) requiere que tenga-
mos algo concreto que manejar, podemos comenzar observando que la
generación de un patrón debe implicar una forma de medidas del am-
biente (por ejemplo , obtención de datos en forma numérica). Esto pue-
de comprender diferentes procedimientos ya que las medidas pueden
corresponder a cosas como la intensidad de una luz en distintos puntos
de una imagen visual (obtenida por ejemplo a través de una cámara de
TV), la presencia o ausencia de los síntomas específicos en el diagnósti-
co de una dolencia, las frecuencias presentes en una onda sonora, etc.
Sin embargo, lo más importante es que si nos concentramos en el hecho
de que estamos midiendo una cantidad numérica que tiene alguna rela-
ción con el ambiente físico, podemos representar un patrón (cualquie-
ra) como una cadena de medidas de los elementos de un patrón. Estos
elementos son los que generalmente denominamos rasgos (features) de
un patrón o descriptores de un patrón (ya que considerados juntos,
"describen" el patrón) y ya podemos presentar así una notación o for-
27
TECNICAS PARA EL RECONOCIMIENTO DE PATRONES

ma de representación por la que se exprese un patrón (que llamaremos


X) como su cadena de rasgos medidos, tales como :

He aquí un ejemplo sencillo, al que volveremos más tarde, para ilus-


trar la idea. Examine la figura 3.1. Es la simple representación de la
letra O en puntos en blanco y negro. Si ahora representamos esta ima-
gen como una secuencia de puntos blancos y negros (de izquierda a
derecha y de arriba a abajo) podríamos decir que nuestra paterna X se
identifica como una cadena de 36 rasgos, donde en este caso cada rasgo
es equivalente a un cuadrado de la parrilla mostrada y las medidas del
rasgo tendrán un valor de 1 (para un punto neg;ó) ó O (para un punto
blanco). El patrón mostrado se podría escribir as!:

x = (011110111111110011110011111111011110)
Observará que existen ciertas ventajas significativas al medir los ras-
gos de esta forma, en particular cuando deseamos continuar con el pro-
ceso de los patrones utilizando un ordenador.
Por supuesto, no es necesario restringirnos únicamente a la medida
de rasgos tan simples ni a patrones tan obvios como las imágenes visua-
les del ejemplo que hemos tomado .

* * **
• •

******
** **
• •

** **
• •

******
****
• •

Fig. 3.1.-Representaci6n de la letra O con puntos blancos y negros.

28
TECNICAS PARA EL RECONOCIMIENTO DE PATRONES

Tipos de patrones y su discriminación

.,Consideremos ah?ra otro ejemplo que no sólo aportará una ilustra-


Clan comI?lementana del concepto de los rasgos o descriptores de los
patrones s100 que nos ~resentará también otra idea importante. El ejem-
plo. que vamos a consIderar trata de distinguir entre un hombre y una
~u~er. No hay qu~ pensar ?~masiado para darse cuenta de que en prin-
CIpIO no encerrana gran dIfIcultad para un ser humano y que existen
~u~ha~, fo~as, unas más obvias que otras, para poder establecer esa
dIst1Ocl0!l' S10 embargo, nuestra intención es utilizar la idea de los ras-
gos medlbles y yo supongo, que causemos un mínimo de perplejidad de
acuerdo, con nuestro~ patrones en la vida real. Por lo tanto, escogeremos
dos para~etros medlbles con los que trabajar; un buen punto de arran-
que podna ser tomar la altura y el peso como candidatos apropiados
para nuestros rasgos seleccionados.
Si med~mos estos ra~gos pa~a .una serie de patrones ejemplo (perso-
nas) podnamos produclf un graftco como el que se muestra en la figura
3.2 que ilustra la relación altura/peso para una muestra típica de hom-
bres y mujeres. Si representamos a lo largo de un eje la altura y sobre
otro eje el peso y dibujamos los "hombres" como puntos + y los "muje-
res" como puntos' o, podemos ver que, al menos en este sencillo ejem-
plo, la posición de un patrón (la combinación de los rasgos de peso y
altura medidos para un caso en particular) en este espacio de rasgos pue-
de utilizarse para categorizar nuestra muestra. Esto es debido a que,
según indica la figura 3.2 todos los puntos que defirten la categoría
hombres son distintos de los puntos de la categoría mujeres y, para pro-
barlo, podemos trazar una, línea que separe ambos grupos.
Ahora, por supuesto, si tomamos más muestras es probable que estos
dos grupos puedan llegar a ser algo menos distintos y, además puede
existir incluso cierto grado de solapamiento (todos hemos visto a las
mujeres lanzadoras de disco), pero en gran medida es posible establecer
que la distinción entre las dos categorías (tipos de patrones, si lo prefie-
re) se mantenga sustancialmente.
Ahora, si lo contemplamos aunque sea con una pequeña tendencia
matemática, podemos ver que en este caso es muy fácil defirtir una regla
de reconocimiento con la que decidir, para un ejemplo desconocido (re-
presentado por un par de medidas para peso y altura), si debiéramos cla-
sificar una determinada muestra como hombre o como mujer. Aquí la
regla es sencilla de ver, ya que el límite entre las dos clases o tipos es
una línea recta matemáticamente muy conveniente. Este tipo de super-
ficie de decisión o funci6n discriminante, como se denomirta frecuente-
mente, puede utilizarse, por lo tanto, para formular una regla de clasifi-

29
TECNICAS PARA EL RECONOCIMIENTO DE PATRONES

""
ALTURA
HOMBRES

~
-lo
O
~ +
O +

O
~ +
O
O O
~ + -lo
O
O

O
MUJERES
~
PESO

Fig. 3.2.-:-Relación peso/altura para una muestra típica de hombres y mujeres.

cación calculando simplemente a qué lado de la línea cae un punto en .


particular (en breve veremos un ejemplo de esto). Comprobará que en
algunas situaciones más complejas una simple línea recta puede no ser
suficiente y se requiere una forma diferente de función discriminante;
pero el principio sería el mismo.
Este ejemplo también indica algunos otros aspectos importantes del
reconocimiento de patrones. Por ejemplo, está claro que el gráfico di-
bujado es posible en principio, debido a que hemos realizado medidas
específicas sobre los grupos de patrones que esperamos identificar.
Aquí escogemos (de modo arbitrario) la altura y el peso y, a juzgar por
nuestros resultados, estos parámetros parecen ser una elección razona-
ble para esta tarea. La elección de rasgos puede ser crucial para el dise-
ño satisfactorio de un sistema de reconocimiento de patrones y debe
considerarse con sumo cuidado. Debe tener en cuenta lo siguiente :

30
TECNICAS PARA EL RECONOCIMIENTO DE PATRONES

l. ¿.Hubiese sid? satisfactorio haber elegido otros dos parámetros, como por
ejemplo el numero de dientes y la longitud del pelo, como los rasgos a uti-
lizar para esta tarea?
2. ¿Serían igualmente apropiados los rasgos que hemos utilizado, si hubiéra-
mos tratado de distinguir unos jugadores de una Liga de Baloncesto de
unos jugadores de la Liga de Fútbol?
, También se ~abrá fijado en que para tareas más complejas se necesita-
na un mayor numero de rasgos para poder realizar una decisión de reco-
n?ci":liento: El problema entonces habría que representarlo en un espa-
CIO dImenSIonal mayor (cualquier espacio con más de tres dimensiones
se. llama "hipe~espacio"; sí, no se asombre, existe), y la función discri-
mmante asumIría una forma matemática relativamente compleja, en
lugar de la fo~a de l~nea rect~ ~ácilmente visualizable de nuestro ejem-
plo. Vd. podna ver sm gran dIfIcultad la forma de ampliar esta idea a
tres dimensiones .
. ~or ~upuesto, también verá que, en general, para determinar la línea
dlvlsona entre los tipos (es decir, para determinar las características de
la función discriminante), necesitamos algunos ejemplos con nombre y
etiqueta de los tipos que debemos identificar.
Podemos ver, entonces que, en algunos casos, por ejemplo, en los
casos sencillos de reconocimiento de dos tipos, una función matemática
sencilla (aquí una ecuación de una línea) puede ser todo lo que se nece-
site para poder discriminar entre patrones que pertenecen a tipos dife-
rentes. Tal y como precisamos anteriormente, podemos literalmente
"ver" a qué clase pertenece un patrón trazando un diagrama donde se
han dibujado los rasgos, dibujando la línea recta divisoria y encontran-
do en qué lado de la lí,nea cae el patrón en cuestión.
Por supuesto que existe el problema de que, generalmente, no desea-
mos tener que dibujar monótonamente el cuadro cada vez que quere-
mos clasificar un patrón nuevo y, por tanto, como alternativa, utilizare-
mos las propiedades matemáticas de la función discriminante. En la
figura 3.3 , se ilustra esto brevemente. Aquí, de nuevo, hemos dibujado
dos grupos de patrones, cada uno de ellos representado por sólo dos
rasgos, como antes. De nuevo hemos deducido una función discriminan-
te, dibujando en los ejes de los rasgos una línea recta que divide los dos
grupos de patrones. Sin embargo, podemos ser más precisos, ya que po-
dríamos escribir una expresión para la relación general entre los descrip-
tores Xl y X2 correspondientes a la ecuación de la función discriminan-
te de la línea recta que hemos utilizado. Puesto que estamos tratando
con una línea recta, esto es sencillo y para este caso, la ecuación de la
línea sería:
2x¡ ...:.. X2 - 2 =O
31
TECNICAS PARA EL RECONOCIMIENTO DE PATRONES

XI

12
Clase A
11

10
Función
Discriminante
9

8
)(
~
7
" )(

Clase B
6
" )( O

5
O
4 " Y O O

3 " O

O
2 O O
O O
O

O X2
O 2 3 4 5 6 7 8 9 10 11 12

Fig. 3.3.-Función discriminante.

Esta ecuación representa la línea divisoria entre los dos tipos o clases.
Dicho de otro modo, cualquier patrón que tenga medidas de descripto-
res que satisfagan exactamente a la ecuación de arriba (Xl ~ 5 y X2 = 8,
por ejemplo), serían teóricamente inclasificables, ya que caerían exac-
tamente sobre la línea .
Por otro lado, cualquier patrón con los valores Xl y X2 tales como:

2x¡ -Xz -2>0

32
TECNICAS PARA EL RECONOCIMIENTO DE PATRONES

caería por encima de la línea, tal como la hemos dibujado en la figura


3.3 y por tanto se supone que pertenece a la clase A, mientras que cual-
quier patrón con valores para x 1 y X2 tales como:
2x¡ .;... X2 - 2 <O

caerían debajo de la línea del gráfico y por tanto se clasificarían como


pertenecientes a la clase B.
Así pues, verá que nuestro procedimiento de reconocimiento podría
describirse como sigue :

Etapa l. Obtener los valores de los descriptores de patrones x yx para un


patrón desconocido representado por (x 1 , X2). 1 2,

Etapa 2. Sustituir estos valores en la ecuación de la [unción discriminante


dada por: '
f(X)=2x¡ -X 2 -2

Etapa 3. Si [ (X) > O asignar el patrón a la Clase A.


Etapa 4. Si [(X) < O asignar el patrón a la Clase B.
Vd. no necesita ser un gran matemático o un genio de la programación
para llevar esto a la práctica, ¿no es así?
Por supuesto, este método funcionará para funciones discriminantes
que puedan representarse mediante funciones no lineales, permitiendo
así el reconocimiento de patrones que no caen tan claramente dentro
de dos grupos como en el caso de nuestro ejemplo, pero estas funciones
discriminantes son mucho más difíciles de deducir y manejar.
Si Vd. ha pensado cuidadosamente 10 que hemos estado haciendo
hasta aquí, se habrá percatado de que a menos que tengamos mucha
suerte con los datos que tenemos que procesar, algunos de los puntos
que dibujamos podrían caer muy cerca de la línea que representa la fun-
ción discriminante. Para estos puntos tendríamos poca confianza en la
decisión de clasificación, ya que la decisión sería marginal. Además, po-
dríamos encontrarnos el caso de que algunos puntos cayeran a un lado
en particular de la línea en lugar de en el otro simplemente porque
hubiéramos medido los valores de los descriptores con algo menos de
precisión de la que hubiéramos podido hacerlo. Entonces Vd. podrá
pensar que es una buena idea intentar asegurarse que se tiene un grado
razonable de confianza en la decisión que toma. ¿Cómo podría Vd.
conseguir esto?
Antes de continuar, si examina la tabla 3.1 verá algunos datos de
ejemplos complementarios que he incluido para que ejercite Vd. por su
33
TECNICAS PARA EL RECONOCIMIENTO DE PATRONES

Tabla 3.1.

Número de patrón

Al A2 A3 A4 As A6 A7 As A9 A lo All AIl
<{

'"'"
~ XI 30 35 40 35 35 45 45 50 55 60 55 60
u
X2 25 75 60 45 35 40 55 65 70 60 50 65

BI 82 B3 B4 Bs 86 B7 Bs B9 8 10 BII BI2
ca
'"'"
'"
U Xl 30 40 45 55 65 55 65 70 80 70 85 80
X2 15 20 31 31 35 40 45 25 20 55 45 40

cuenta. Vea si puede Vd. deducir una función discriminante apropiada


utilizando aproximadamente la mitad de los patrones y en qué afecta
esto a la clasificación del resto.

Esquema alternativo de clasificación

Finalmente, en este capítulo , presentaremos otra so~ución para. ,el


reconocimiento de patrones que no depende tanto de la mterpretaclOn
"visual", a pesar de que nuevamente su éxito depende de la suposición
de que los miembros de un tipo tenderán a "agruparse" en base a sus
medidas de rasgos, mientras que las agrupaciones para tipos diferentes
tenderán a ser distintas. Esta técnica llamada de agrupación es muy
atractiva ya que utiliza la idea de distancia entre los patrones, y la dis-
tancia es un concepto con el que estamos familiarizados intuitivamente.
'Naturalmente, si vamos a utilizar el concepto de distancia como pará-
metro definido y medible en lugar de en un sentido puramente mtuiti-
vo , debemos acordar lo que significa el término. Aquí el problema es
que en reconocimiento de patrones podemos definir la "distancia" de
muchas maneras, aunque una medida utilizada comúnmente es la llama-
da distancia Euclídea (que en realidad es el mismo tipo de distancia que
Vd. mide normalmente con una regla sobre un papel). Utilizaremos la
palabra "distancia" para referirnos, a partir de ahora, a la distancia
Euclídea y por tanto debemos definir cómo medir su valor en un con-
texto de reconocimiento de patrones.
34
TECNICAS PARA EL RECONOCIMIENTO DE PATRONES

Supongamos que consideramos dos únicos patrones, cada uno de


ellos representado por dos únicos descriptores como anteriormente. Si
etiquetamos el primer patrón como PI = (XII , X12) Y el segundo como
P2 = (X 2 ) , x 22 ), la distancia (d) entre ellos vendrá dada por:
d=v'(x¡¡ '''':'X2¡)2 + (X12 "':'X22}2

Profundizando, Vd. puede demostrar que esto se corresponde con


nuestro concepto "normal" de distancia, trazando unos pocos puntos
en una hoja de papel gráfico o simplemente aplicando el Teorema de
Pitágoras (suponiendo siempre, por supuesto , que Vd. lo recuerda).
También debe observar que podemos ampliar esta definición para
tener en cuenta tantos rasgos o descriptores como necesitemos utilizar
para cualquier tipo particular de patrón. Por ejemplo, si se han elegido
tres descriptores, se calculará como:
- --.' -)2- - - - - -2--( - - )2
d =v' (x ¡ 1 - X21 + (x 12 - X22) + X¡3 - X23

y así sucesivamente.
Entonces, ¿cómo utilizamos esta idea de distancia entre patrones
como base para el reconocimiento de algunos patrones de identidad des-
conocida? Bien, podemos comenzar asumiendo que (como antes) tene-
mos disponibles algunos ejemplos etiquetados e identificados de los
tipos de patrones que estamos tratando. Empleando la técnica de agru-
paci0n para reconocer un patrón desconocido, es relativamente sencillo
calcular su distancia con todos los patrones de ejemplo que tenemos y
asignarla al tipo en que se encuentra el patrón más cercano a ella, con
arreglo a nuestro criterio de distancia elegido. Podríamos expresar el
procedimiento en términos del flujograma de la figura 3.4 y Vd. debe-
ría estar capacitado para escribir por sí mismo un programa que realiza-
ra el procedimiento.
Antes de abandonar la idea de agrupación, es interesante destacar
otra característica útil de esta solución y es que puede permitirnos con-
siderar la posibilidad de clasificar patrones incluso si no disponemos de
ningún ejemplo etiquetado de miembros típicos de una clase. En esta si-
tuación, nos podemos encontrar enfrentados a un conjunto de patrones
de identidad desconocida que necesitamos dividir en categorías de
acuerdo con sus propiedades comunes. Utilizando un procedimiento de
agrupación podríamos examinar uno a uno cada patrón y asignarlo a
una agrupación si su distancia desde cualquier agrupación actualmente
disponible es menor que cualquier valor de entrada elegido arbitraria-
mente. Si un patrón se encuentra fuera de este límite de entrada enton-

35
TECNICAS PARA EL RECONOCIMIENTO DE PATRONES

Encontrar la distancia mínima (d¡) entre x y cual-


Quier otro patrón de las muestras disponibles del tipo
el

Hacer lo mismo para


e2 para dar d2

no

Asignación temporal Asignación temporal


de x a el de x a el

Asignar
x a e2

Asignar x
a el

Tomar sigu ¡ente tipo


y llamarlo e2

Fig. 3.4.-Flujograma para mostrar la técnica de agrupación.

36
TECNICAS PARA EL RECONOCIMIENTO DE PATRONES

ces se utiliza para formar una nueva agrupación; de esta forma podemos
dividir nuestro conjunto de patrones en un conjunto de agrupaciones de
tipos de patrones. Por supuesto, hemos obviado la pregunta de cómo
escoger el límite de entrada para los miembros de un tipo, pero esta
aplicación puede ser un ejemplo muy útil de este tipo de técnica.
En este capítulo hemos pasado de las ideas básicas y la teoría del
reconocimiento de patrones a algunas técnicas sencillas que pueden
aplicarse en una situación práctica. Aunque hemos utilizado unos
ejemplos sencillos para ilustrar nuestros procedimientos, pienso que
Vd. ya puede comel).zar a ver cómo estas técnicas pueden extenderse
a situaciones más complejas. Sin embargo, tenga cuidado, ya que el
reconocimiento de patrones puede ser un proceso muy complejo y
a menos que los problemas estén muy bien definidos, puede que le
sucedan cosas extrañas. No se desanime, ya que precisamente este as-
pecto del reconocimiento de patrones es el que hace que en este área
de trabajo exista mucha competencia y también recompens.as Y ~llo
explica porqué tantos científicos están tratando todavía de mvestIgar
los problemas fundamentales de este tema ademá~ de explorar nuevas
y excitantes aplicaciones de las técnicas ya establecIdas.
Continuamos ahora con una tercera solución para el reconocimient~
de patrones que próporcionará algo más de flexibilidad Y presentara
también una discusión más detallada sobre cómo tratar patrones en su
ordenador. Para ampliar esto, por supuesto, debería intentar encontrar
la distancia Euclídea más corta al capítulo 5 ...

37
4
Reconocimiento de voz
En nuestra discusión de introducción en el capítulo 2 sobre las ideas
básicas del reconocimiento de patrones, yo mencioné específicamente
el problema del reco~ocimiento de vo~, ha~ien~o hincapi~ en el ~ec~o
de que este área partIcular es de gran mteres e lffip~rta?cla por SI mIs-
ma. En este capítulo discutiremos algunos de los prmclpales puntos d~
este área y, más específicamente, demostraremos cómo el reconOCI-
miento de voz, aunque se encuentra ciertamente .en. el campo del reco-
nocimiento de patrones requiere un proceso especIahzado.
El problema básico radica en el hecho de ~ue, .a diferencia de~ r~co­
nocimiento de patrones y las tareas que esto lffiphca, tales como lm~ge­
nes visuales de caracteres alfabéticos o incluso imágenes más complejas,
como radiografías con rayos X o imágenes tipo TV en las que los rasgos
y las características se pueden definir con relativa facilidad, por su pro-
pia naturaleza, la voz es algo difícil de definir de forma precisa tal y
como hacíamos en los ejemplos anteriores. Existen dos motivos funda-
mentales donde radica la dificultad. En primer lugar, a diferencia de la
imagen visual, que es algo que se puede considerar en términos bastante
concretos en el sentido de que Vd. generalmente la puede dibujar en un
papel y puede medir los parámetros apropiados que le permitan almace-
narla de forma bastante natural dentro de un ordenador, la voz, ~omo
decíamos es un concepto más vago y más abstracto. En segundo lugar,
la voz intrínsecamente varía con el tiempo. Es decir si Vd. intenta loca-
lizar la voz en un momento dado, entonces destruye su cualidad esen-
cial por propia naturaleza. La voz sólo se define en términos de la
variación en el tiempo y esto es más bien distinto de lo que hemos visto
hasta ahora.
Inevitablemente, por tanto, para aplicar el tipo de técnicas que he-
mos discutido previamente a los datos que constituyen la voz necesita-
38
RECONOCIMIENTO DE VOZ

mas tratar nuestros datos en forma diferente de la adoptada hasta


ahora. Desgraciadamente, en muchos aspectos se descuidan y se subesti-
man estas dificultades. La mayoría de los escritores de ciencia ficción se
han percatado de que sin un ordenador que hable y entienda, su última
historia de aventuras está en cierto modo incompleta; aunque, en gene-
ral, no nos sentimos interesados por los pensamientos futuristas, la
adopción ampliamente difundida de la idea se convierte gradualmente
en una forma de pensar que sugiere que el reconocimiento de voz no es
fundamentalmente más dificultoso que la mayoría del resto de tareas de
ordenador. Además, estos problemas generales se combinan con fre-
cuencia con el hecho de que en el uso normal del lenguaje natural, los
seres humanos utilizamos unos giros en la conversación y unas construc-
ciones altamente coloquiales que incluso para algún nativo de la lengua
serían de difícil comprensión, y menos aún para una estúpida máquina.
Antes de seguir adelante, me gustaría apuntar que en este libro no va
a ser posible explicar en detalle los aspectos técnicos del reconocimien-
to de voz, pero mostraremos cuáles son los problemas que comporta.
También puede que Vd. se percate de que mucho de lo que aquí se ex-
pone está estrechamente relacionado con todo el mundo de la com-
prensión y entendimiento del lenguaje natural, que más tarde tratare-
mos en este libro.

Algunos principios básicos del reconocimiento de voz

Al acercamos al área del reconocimiento de voz es necesario clarificar


algunos puntos para evitar confusiones y establecer una observación im-
portante necesaria para diferenciar entre la idea de reconocimiento de
voz como tal y comprensión o entendimiento de la voz.

~~ Su protocolo de recono-
Pues que no
cimiento de conversación
se hablen
se ha parado

~,.
9.". ~~
Jm~~
AI-/f;.6

39
RECONOCIMIENTO DE VOZ

El objetivo principal del reconocimiento de voz, al menos en lo que


concierne a este capítulo, es el de generar una señal en respuesta a una
expresión hablada directamente relacionada con el sonido expresado .
Dicho de otra forma, el reconocimiento de voz solamente busca catego-
rizar una entrada hablada dentro de un rango de tipos posibles. El obje-
tivo de un sistema de comprensión de la voz iría mucho más lejos, en
el sentido de que, para comprender una expresión hablada, se requiere
no sólo que el sistema categorice un sonido, sino que responda también
a él, de forma apropiada al contenido o significado de esa expresión.
Debemos poner cuidado con la utilización de la palabra "compren-
sión" ya que Vd. podría argumentar, con cierta justificación, que una
máquina no puede comprender realmente nada (volvemos de nuevo a
la vieja discusión filosófica), pero aquí hablamos solamente de com-
prensión en el sentido en que se le puede decir a un ordenador que com-
prenda un programa para sumar dos números. ¡Quizás sea mejor dejar
esta engañosa cuestión antes de que nos quememos!
En cualquier caso pienso que Vd. probablemente se da cuenta de que
el reconocimiento de voz es sólo una parte de lo que se podría llamar
un sistema de comprensión de voz, pero una parte muy necesaria. Lue-
go nuestro objetivo puede ser simplemente llegar a un punto en el que
nuestro sistema reciba una entrada hablada y la traduzca a una forma
escrita o impresa o que produzca algún otro tipo de representación de la
expresión que sea adecuado para un proceso posterior (por ejemplo,
para intentar extraer su "significado"). Si podemos llegar hasta aquí,
podemos decir que hemos reconocido la voz.

PRODUCCION DE SEÑALES DE VOZ

, La p~o~ucción .de la voz humana es un pequeño milagro de ingenie-


na mecamca. El aIre reservado en un depósito apropiado (los pulmones)
se ~xpele a trav~s de distintas ~avi~ades tal~s como la boca, la nariz,
etcetera, prod~c~~ndo unas e~c1tac10nes. y VIbraciones que tienen por
resu1tad~ l~ em1SlOn de ~n som~o determmado. Estos sonidos se pueden
hac~r I?as mteresantes SI ademas se producen simultáneamente algunas
oscdaclOnes en l~s cuerdas vocales. Este proceso es muy similar a la for-
ma e~ que func1~~a la mayoría de los instrumentos musicales, ya que
el s?mdo real eI?lhdo dependerá de las resonancias producidas en unas
caVIdades apropIadas. En el caso humano, por supuesto, estas cavidades
pueden vanar de forma por medio de unos movimientos hábiles de la
boca, los labios, la lengua, etc., produciendo así una gama muy amplia
de sonidos diferentes.
40
RECONOCIMIENTO DE VOZ

Es útil poder referirse a algunos patrones de sonidos específicos fun-


damentales que constituyen la base de nuestro lenguaje hablado; con
arreglo a esto es posible identificar un grupo de sonidos específicos o
fonemas a partir de los cuales se genera el lenguaje. He aquí algunos
ejemplos de fonemas :

El sonido de una "a" pronunciado en la palabra "casa".


El sonido de una "e" pronunciado en la palabra "pico".
El sonido de una "e" pronunciado en la palabra "cielo".
El sonido de una "t" pronunciado en la palabra "pato" .

y así sucesivamente.
Para complicar las cosas, nosotros generalmente etiquetamos los fo-
nemas con símbolos especiales a efectos de identificación.
Quizás deba observar que los fonemas se pueden agrupar en catego-
rías cuya disp~sición depende de la forma en que el grupo total de fone-
mas se produce físicamente.
Sonidos fricativos tales como la f surgen al expeler aire a través de un
paso constreñido antes de excitar una resonancia en la cavidad, pero si
se añade una vibración de las cuerdas vocales, el fonema se convierte en
una V. La categoría de fonemas que produce el sonido más alarmante
y potencialmente peligroso contine los sonidos explosivos*. Estos soni-
dos se producen cerrando la boca, creando una cámara de aire a presión
y luego soltando la presión con una vibración simultánea de las cuerdas
vocales. Afortunadamente para las personas esto es más fácil de realizar
que de describir. Un ejemRlo de un explosivo es el fonema b.

CARACTERISTICAS DE LAS SEÑALES DE VOZ

Es bien sabido que cada fonema se produce por una única combina-
ción de la actividad muscular del aparato vocal, pero ello no nos ayuda
demasiado para poder dis~ñar un sistema de reconocimiento (aunque
quienes son capaces de leer en los labios, mtentan hacer esto exacta-
mente). Lo que necesitamos en realidad es un medio de obtener descrip-
tores de patrones para la voz, de forma semejante a la que adoptamos
para patrones visuales. Para tener una idea de cómo solucionar esta
cuestión, necesitamos penetrar con un poco más de profundidad en
la naturaleza de la propia señal de la voz y hacernos algunas pregun-

• En fonética se acostumbran a denominar bilabiales la "b" y la "p". (N. del editor).

41
RECONOCIMIENTO DE VOZ

tas sobre el resultado de la actividad muscular que genera un sonido


hablado.
Cada sonido hablado se puede concebir como generador de una onda
de sonido, o patrón de vibraciones, en el aire. Puesto que la mayor parte
de los sonidos son bastante complejos, es conveniente pensar que cada
expresión individual está compuesta por un número de distintos compo-
nentes, cada uno de ellos de diferente frecuencia, y en los que la intensi-
dad del sonido puede ser distinta para diferentes frecuencias.
Si examinamos la distribución de las intensidades para todos los com-
ponentes de la frecuencia de un sonido fonético en particular, veremos
que, debido a que existen frecuencias particulares que resuenan en la
cavidad bucal (algo así como el efecto que produce Vd. en algunas bue-
nas notas cuando canta en el baño), hay ciertos 'l(l.lores de frecuencia
en los que se produce una alta intensidad de excitación. Estas frecuen-
cias críticas se conocen como frecuencias formantes y, como veremos,
pueden ser de gran ayuda a la hora de clasificar los sonidos. Además, en
una aproximación simple al reconocimiento de fonemas, es posible pen-
sar en las frecuencias formantes como unas posibles candidatas a ser los
descriptores de patrón que andamos buscando. Puesto que para un fo-
nema dado se encontrará normalmente una serie de formantes, se acos-
tumbra a etiquetarlos para una mejor referencia, como FI, F2, F3, ... y
así sucesivamente, comenzando con la frecuencia más baja y siguiendo
con las superiores. .

UNA SOLUCION PARA EL RECONOCIMIENTO DE VOZ

Si nos fijamos en los sonidos de las vocales, veremos que el formante


puede ser sumam~nte útil. Debido a la forma en que los órganos vocales
produ~en los somdos de las vocales adoptando una posición fija mien-
tras ~~bran las cuerdas vo~ales, las frecuencias del formante son fijas
tamblen (la forma de la cavIdad de resonancia no cambia).
Sup~ngamos que tom~mos un número de ejemplos de cada uno de
los somdos vocales a, e, 1, o, u, y medimos las dos primeras frecuencias
del formante (F 1 Y F 2 ) para cada ejemplo. Descartaremos de momen-
to, los formantes más altos. Ahora podemos intentar utiliza~ la posición
. d.e estos formantes (es decir, las frecuencias en las que suceden las inten-
SIdades punta) como descriptores de patrón para describir el fonema.
Por supuesto, es natural que dentro de una clase de fonemas veamos
d~ferencias in?ividuales, al igual que en el caso visual, un conjunto de
ejemplos ~scntos a mano de la letra "A" será ligeramente diferente;
p.ero examme algunos resultados típicos como los que se muestran en la
fIgura 4.1. Podemos ver que si permitimos un pequeño grado de solapa-
42
RECONOCIMIENTO DE VOZ

Formante
Fl

Formante F2
Fig. 4.1.-Relación entre las frecuencias formantes de las vocales.

miento, las clases de fonemas tienden a fonnar agrupaciones separadas e


individuales en este espacio de rasgos, y por tanto, en principio, se po-
dría encontrar un conjunto de funciones de decisión que podría utili-
zarse para identificar una expresión como miembro de una de estas cla-
ses. Así pues, para este caso sencillo, hemos especificado el problema de
fonna que corresponde exactamente a las situaciones abordadas en
capítulos anteriores.
Desgraciadamente, cuando extendemos el problema para incluir un
rango más amplio de fonemas y/o patrones de sonido más complejos, la
situación se presenta algo menos clara. Una razón principal de esto es
que en la producción de muchos sonidos los órganos vocales están real-
mente en movimiento mientras se produce el sonido. Este movimiento
del aparato productor del sonido significa que la fonna de la cavidad
bucal también cambia, resultando en un cambio en la posición del for-
manteo Si intentáramos utilizar la representación previa para tales casos,
43
RECONOCIMIENTO DE VOZ

donde midiéramos las dos primeras frecuencias formantes para utilizar-


las como descriptores de patrón, tendríamos la situación mostrada en la
figura 4.2, donde un patrón queda ahora definido por una traza o tra-
yectoria de patrón como una función del tiempo a lo largo del espacio
del patrón. Esto hace que la aplicación directa de nuestras anteriores
técnicas sean un poco más problemáticas.
En realidad, una solución que podríamos intentar sería una toma de
muestras a intervalos regulares de la duración de una onda de voz, qui-
zás cada treinta milisegundos o algo así, ya que los cambios tienen lugar
de forma bastante rápida, midiendo la primera y la segunda frecuencia
formante en cada tiempo de muestreo. Esto podría facilitarnos la infor-
mación para introducir el trazado de la trayectoria, tal como se ilustra y
luego podríamos intentar comparar esta trayectoria con las trazas pro-
ducidas por unos patrones de sonido arquetipo almacenados y definidos
previamente. Por ejemplo, si estamos preparados para trabajar con un

Formante'
F.

Fonnante F 2
Fig. 4.2. -Cambios en las posiciones de las forman tes.

44
RECONOCIMIENTO DE VOZ

vocabulario bien definido de palabras aisladas, por ejemplo, "COMIEN-


ZO", "PARADA", "IZQUIERDA", "DERECHA", "ARRIBA", "ABA-
JO", "RAPIDO", "LENTO", podemos intentar identificar un sonido
comparando la traza que produce con las trazas arquetipos de todas las
palabras conocidas del vocabulario escogido, tomando la mayor coinci-
dencia entre ellos para identificar la expresión.
Verá que esta técnica, aunque es una solución al problema en cues-
tión, puede sufrir todas las dificultades que hemos encontrado anterior-
mente. Por ejemplo, podríamos esperar que si elegimos palabras simila-
res en el vocabulario, la búsqueda de coincidencia será menos fiable y,
se podría esperar una degradación progresiva según incrementamos el
número de palabras diferentes que haya que distinguir.
Existen otros problemas, por supuesto, que surgen en gran parte de-
bido a las diferencias individuales en las características físicas de los
diferentes locutores, a la hora del día, a si el locutor está resfriado, etc.
Quizás desee reflexionar un poco en cómo pronunciarían una misma
palabra diferentes locutores (puede que incluso sean habitantes de dis-
tintas regiones del país), para demostrar así otro área de dificultad
que se encuentra incluso en el problema restringido del reconocimiento
de una palabra aislada. .
No debemos omitir, en nuestra rápida inclusión al área del reconoci-
miento de voz, el hecho obvio de que los seres humanos inteligentes
generalmente no conversan con palabras netas aisladas, sino que tienden
a encadenar palabras para formar oraciones, frases e incluso fragmentos
enteros de prosa.
Tan pronto como pasemos a los dominios de dicha voz ligada o con-
tinua, todas las dificultades que hemos discutido aparecen inmediata-
mente exageradas. Sería un ejercicio interesante para Vd., pensar con
más detalle sobre estos grados de dificultad añadidos, pero aquí le ex-
pondremos algunos apuntes sobre las áreas conflictivas:

l. En la voz continua no aparece siempre claro donde hay que situar los lími·
tes entre las palabras, en gran parte debido a que nosotros tendemos a no
establecer pausas a modo de puntos de señalización.
2. Al encadenar palabras para formar una expresión continua es inevitable
que la articulación de un sonido quede afectada por el movimiento de los
órganos vocales al cambiar de un fonema al siguiente. Como consecuencia,
se obtienen sonidos que son versiones distorsionadas de los sonidos arque·
tipo oídos aisladamente.
3. Con frecuencia omitimos enteramente algunos fonemas, particularmente si
su sonido es común al final de una palabra y el comienzo de la siguiente .

45
RECONOCIMIENTO DE VOZ

La mayoría de estos puntos, y otros, se pueden enfocar con más cla-


ridad si dedica algo de tiempo a pensar como sonaría la siguiente frase si
fuera hablada de un modo conversacional más bien farragoso:

"Todos los hombres son naturalmente buenos a 'menos que se demuestre lo


contrario".

Imagine que oye esto a través de una línea telefónica y vea las ambi-
güedades que pueden surgir si Vd. tuviera que analizar el mensaje basa-
do exclusivamente en los patrones de sonidos.
Esto nos lleva al punto final que, es, tal y como ilustra el ~timo
párrafo, que con frecuencia podemos utilizar información adicional al
idioma normal hablado para ayudar a analizar el cOhtenido de un men-
saje. Esta información adicional puede obtenerse-utilizando las reglas
gramaticales y estructurales de la lengua y el contexto real del mensaje
que viene dado al considerar el significado de las palabras involucradas
en él. Esta utilización de la información sintáctica y semántica puede
aportarnos más confianza en la forma en que de~cifremos un mensaje
hablado, pero la contrapartida es que el ordenador tiene que trabajar
más para llevar a cabo el análisis que necesitamos hacer.
Finalmente, desde el momento en que llegamos a la etapa en la que
consideramos el reconocimiento de voz en el contexto de pasajes de
voz continua, o la interpretación de diálogos conversacionales, nos esta-
mos acercando cada vez más al punto en el que nuestra distinción entre
reconocimiento de voz y comprensión de voz se convierte de nuevo en
algo importante y volvemos a las preguntas que nos hacíamos al co-
mienzo de este capítulo. Estamos también en un punto en el que el
área del lenguaje como un todo, en lugar de patrones de sonidos indivi-
duales, se convierte en el foco de atención; esto nos conducirá clara-
mente, tras una corta pausa en los dos próximos capítulos al área de la
Comprensión del Lenguaje Natural, que es el tema del capítulo 7.

46
5
Aprendiendo mallas
Una de las puntualizaciones que hice en el capítulo 2 sobre las posibi-
lidades del aprendizaje humano , se relacionaba con nuestra facilidad
para generalizar. En este capítulo, examinaremos un modelo electrónico
del proceso, de aprendizaje en el que es fácil ver cómo ocurre el proceso
de generalización.
Primero necesitamos algunos conocimientos. Piense por un minuto
en un fragmentq de m'emoria de ordenador que consta de ocho bits en
el que cada bit se puede direccionar por separado. Necesitamos pues
tres bits de direccionamiento para poder identificar los ocho bits de
datos numéricamente, del O al 7. También necesitamos un elemento de
datos para almacenar (un sólo bit) y una señal de control que indique al
sistema si debe escribir o leer un bit de la memoria. Por tanto, podría-
mos verlo así :
1, bit de datos I U 0
0
h
" 2
3
I 0 4

I 0 5
0 6

" 7
bits de
dirección

L....._ _ _ _ _~ sonda

I ~ b;, de control

,, = leer

1= escribir

47
APRENDIENDO MALLAS

El ejemplo anterior va a escribir un "1" en el bit 3. El bit de control


se pone a "1" para indicar que va a tener lugar una escritura, el dato a
escribir es un "1" Y los bits de dirección muestran un 3 binario.
Ahora, de forma un tanto primitiva, hemos "énseñado" a esta RAM
de 8 bits a que reconozca el patrón 011, ya que si el bit de control se
pone ahora a O (lectura) y toda la gama de patrones de bits (000 a 111)
se presentan en las entradas de dirección una a una, el dispositivo saca-
rá un "1" solamente cuando esté presente el patrón 011.
Por 10 tanto a nuestros efectos, podríamos volver a designar los ter-
minales del dispositivo de esta forma:
Memoria Elemento de aprendizaje

dirección
______-+. patrón

-------+. reconocer
control [leer

-+.
escribir _ _ _ _ _ _ enseñar

datos ______-+. señal de tipo de miembro

Por supuesto que varios patrones pueden considerarse como del mismo
tipo, mientras que 10 que se pretende que represente cada patrón puede
variar. Podría ser un patrón visual o cualquier otra estructura represen-
tativa diferente. Si pensamos en que nuestro patrón de 3 bits representa
enteros positivos, por ejemplo, podríamos enseñar al dispositivo a dis-
tinguir entre los números pares y los impares. Después de un ciclo com-
pleto de enseñanza, tendríamos:
clasificación '1
señal

0 0

,~oo{
0 2
1 3
0 4
5
0 Ó

reconocer _ _ _---' '-----+ salida


enseñar

48
APRENDI E NDO MALLAS

Hasta aquí todo esto no impresiona demasiado. Todo lo que hemos


conseguido que haga el dispositivo es re.c ordar algunas cosas (apenas nos
sorprende, al fin y al cabo, estamos utilizando una memoria), y las vuel-
va a traer en respuesta a un mandato. Esto es un aprendizaje de memo-
ria comparable a las tablas de multiplicación o un vocabulario de una
lengua extranjera.
Sin embargo, supongamos que ahora queremos tratar patrones de 6
bits. Un método sería disponer de un elemento de memoria mayor (de-
bería ser de 64 ' bits), pero una alternativa consistiría en dividir los pa-
trones de 6 bits en dos partes de 3 bits y utilizar dos de nuestros ele-
mentos de memoria de 8 bits como sigue:
señal de
clasificación

patrón

reconocer/enseñar

49
APRENDIENDO MALLAS

A las salidas de los dos elementos se les hace un "AND" conjunta-


mente. En otras palabras, la salida final es un "1" solamente si ambas
salidas son un "1 ".
Supongamos que deseamos entrenar a esta malla para distinguir de
nuevo entre números pares e impares. Comenzaremos presentando un
7 , que es 000111 :

1 o
0 1
0 2
o 0 3
o 0 4
o 0 5
0 6
0 7

0 o
0 1
0 2
0 3
0 4
0 5
0 6
1 7

Por tanto, la convención que estamos utilizando es que un número es


par (representado por un cero en el bit apropiado) a menos que digamos
al sistema que es impar poniendo la señal de clasificación al, en cuyo
caso se pone a" 1" un bit de cada elemento. Por supuesto, se asume que
ambos elementos están inicializados a ceros.
50
APRENDIENDO MALLAS

Ahora continuaremos al proceso de "entrenamiento" introduciendo


los números 29 (O I 110 1) Y 33 (100001) con la señal de clasificación
puesta a "1". Después de esto, nuestros dos elementos aparecerían así:

1 o
0
0 2
1 3
1 4
0 5
0 6

-
0 7

0 o
1 I
0 2
0 3
0 4
1 5
0 6
1 7

Descubramos ahora qué es lo que "sabe" nuestro dispositivo. Obvia-


mente si introducimos 7, 29 ó 33 con el sistema en modo de reconoci-
miento, ambos elementos sacarán unos (1 's); por tanto, la salida final
será un "1". Es exactamente lo mismo que sucedió para el caso de un
solo elemento. Sin embargo, supongamos que entramos 31 (O 11111).
Esto pone un 3 sobre el elemento más alto (y el bit 3 es un "1 ") y un 7
sobre el elemento bajo (en el que el bit 7 es un "1 "). Por tanto, la salida
final es un "1" Y el dispositivo ha reconocido un 31 como número im-
par sin habérselo tenido que decir.

51
APRENDIENDO MALLAS

En realidad, reconoce el 1, 5,25,31,37 Y 39, así como el conjunto


original de valores de entrenamiento. Por lo tanto, a pesar de que no
"comprende" totalmente el concepto de "un número impar", sí conoce
más números impares de los que le dijimos; lo que ha hecho ha sido
generalizar.

UN PROGRAMA SENCILLO DE APRENDIZAJE DE MALLA

Simulemos ahora esta estructura en un programa. Puesto que cada


elemento de memoria consta de 8 bits, será conveniente utilizar un
byte para cada uno. Así:

20 DIM n$(2)

realizará el trabajo de momento. Más tarde, habrá que cambiarla, ya


que nuestras mallas de aprendizaje van a ser mucho mayores de 2 ele-
mentos.
Ahora tenemos que escribir tres rutinas:

Inicializar (1000)
Enseñar (1200)
Reconocer (1400)

Los números entre paréntesis indican los números de línea en los que
comienza cada rutina. Al agrupar la codificación, Vd. puede escribir:

GOSUB 1400
GOSUB 1000

y así sucesivamente, o puede insertar una línea 10:

10 LET iníd = 1000: LET enseñar = 1200: LET recon = 1400


y luego escribir:

GOSUB recon
GOSUB íníci

etcétera.
52
APRENDIENDO MALLAS

Utilizaré la última solución ya que es más legible *. Según presente


nuevas rutinas, especificaré sus números de línea de comienzo y dejaré
a su elección que las llame por nombre o por número. Por supuesto, si
Vd. utiliza mi convención, tendrá que editar la línea 10 cada vez que se
añada una nueva rutina y si no lo hace así, deberá sustituir mis nombres
por números.

inicializar

Comenzaremos esta rutina con los razoriamientos usuales que son los
más sencillos:

1000 FOR p = 1 TO 2
1010 LET n$(p) = CHR$ O
1020 NEXT p
1030 RETURN

Dos puntos a observar: primero, que puesto que estamos tratando


con caracteres, tenemos que utilizar CHR$ para hacer la conversión. En
segundo lugar, la utilización aquí de un bucle FOR, que se hace conve-
niente ya que, según apunté anteriormente, nuestras mallas serán nor-
malmente de más de 2 elementos y, de este modo, solamente necesitare-
mos editar la línea 1000 para cambiar el tamaño.

enseñar

Comenzaremos con una descripción esquemática del algoritmo:

Tomar o leer el número y la señal de clasificación


Si señal = O entonces RETURN
Convertir número a binario (b$) (1600)
Seleccionar los 3 bits más bajos de b$
Poner un "1" en el bit apropiado del elemento inferior (1800)
Seleccionar los 3 bits más altos de b$
Poner un "1" en el bit apropiado del elemento superior
RETURN

* Para el BASIC de Microsoft se tendrían estas diferencias principales:


- El GOSUB tiene que llevar después un número de línea y no un símbolo.
- La función CHR$ lleva el argumento entre paréntesis.
- Para tomar fragmentos de una tira de caracteres emplear la función MIO $.
(N. del Editor).

53
APRENDIENDO MALLAS

Los números entre paréntesis indican los números de línea de co-


mienzo de las rutinas. La codificación es:

1200 INPUT "Entre número"; num


1210 INPUT "Clasificación" (O = impar, 1 = par";señal
1220 IFseñal=OTHEN RETURN
1230 GOSUB bina
1240 LET s$ = b$(TO 3): LET p = 1
1250 GOSUB ponbit
1260 LETs$=b$(4TO): LETp=2
1270 GOSUB ponbit
1280 RETURN

Esto sigue el algoritmo esquematizado con lJastante aproximación.


La subrutina bina en la línea 1600 devolverá una cadena binaria en b$.
Dos subcadenas (bits 1 a 3 y 4 a 6) pasan a su vez a ponbit (línea 1800)
que pone a 1 solamente el bit referenciado por s$. También p pasa a
ponbit para indicar qué byte (1 ó 2) se va a actualizar.

bina

El método estándar para convertir de decimal a binario es el de divi-


dir sucesivamente por 2 el número decimal, tomando el resto de cada
etapa y sumándoselo a la cadena binaria de esta forma:

1600 LET b$ =""


1610 IF num =0 THEN GOSUB pad: RETURN
1620 LET int = INT(num/2)
1630 LET rem = num - 2 * int
1640 LET b$ = STR$ rem + b$
1650 LET num = int
1660 GOTO 1610

En el proceso se destruye num, pero como en lo único que estamos


interesados es en su equivalente binario, no nos importa.
Observe que la nueva subrutina pad. enseñar espera que b$ tenga seis
dígitos, por lo que pad añade los ceros necesarios:

1700 IF LENb$>=6THEN RETURN


1710 LET b$ = "O" + b$
1720 GOTO 1700

54
APRENDIENDO MALLAS

El uso de "> =" en la línea 1700 indica que pad creará una cadena de
longitud seis para nuestros fines, pero bina puede aún utilizarse para va-
lores de num mayores de 63 y, en tal caso, creará simplemente una ca-
dena con longitud mínima.

ponbit

Ahora nos encontramos con un pequeño problema. Imagine que a


ponbit se le ha pasado la cadena 011, de forma que queremos poner el
bit 3. Supongamos también que el byte destino es actualmente:

00110000

En este caso es relativamente más fácil, puesto que todo lo que se


necesita es añadir 8 (q ue es un 2 3 ) al byte de destino. Sin embargo, si
la cadena h¡i sido 100 no se requiere ninguna acción, ya que el bit 4 ya
está puesto. Si añadiéramos 2 4 acabaría en :

01000000

lo cual es claramente erróneo.


La solución sencilla para el problema es la de ejecutar una operación
lógica OR sobre el byte destino y el valor 2 3 (ó 2 4 Ó 10 que sea). Luego
tenemos:

00110pOO
DR con 00001000 (= 23 )
= 00111000

00011000
DR con 00001000 (=2 3 )
=00011000

Ahora aquí esta el problema: el BASIC del Sinclair no combina cada


par de bits de esta forma cuando Vd . utiliza su operación OR. En reali-
dad hace algo extrañamente distinto. (Pruebe PRINT 36 OR 1 Y PRINT
36 OR O y verá lo que quiero decir). Por supuesto , está pensado para
su utilización en sentencias como:

IF a < 7 DR b= 12THEN ...

55
APRENDIENDO MALLAS

y puesto que evalúa expresiones condicionales como "a < 7" para O
(falso) ó 1 (verdadero), no importa si no se tratan los otros valores de
forma convenciona1.
Podríamos profundizar en esto de distintas formas, pero es obvio que
puesto que las operaciones lógicas con bits de este tipo se suministran
directamente en código Z80, una rutina en código de máquina es la so-
lución más sencilla.
Si no está familiarizado con el código de máquina en un Spectrum,
lo que sigue le puede parecer una receta de cocina, pero si Vd. quiere
comprender realmente 10 que hacemos, le sugiero que lea algún libro
especializado.

Primero localice su RAMTOP ...

Siempre que trate con rutinas en código de máquina deberá asignar


espacio de memoria para ellas, declarando así ese espacio no disponible
para BASIC. Es muy fácil:

1 CLEAR 31999

declara que cada byte de memoria cuya dirección exceda de 31999


quede fuera de los límites del BASIC. Así se dejan 600 bytes libres para
el código de máquina en una máquina de l6K y más de 32K en una
máquina de 48K. Si tiene una máquina de 48K probablemente desee
seleccionar un valor más alto, pero he organizado las cosas de forma que
el código funcione sin ninguna modificación en cualquiera de los mode-
los. El efecto exacto de CLEAR es el de alterar la variable RAMTOP del
sistema, pero también hace otras cosas. Por ejemplo, limpia todas las
variables; por 10 tanto asegúrese de que ésta es la primera línea de su co-
dificación.
Ahora, para la primera parte de nuestro camino,la codificación debe
funcionar. La rutina ponbit pasará a la rutina en código de máquina los
dos bytes a hacer un OR después de hacerles POKE a las posiciones
32000 y 32001. Esto significa que la codificación puede comenzar en la
posición 32002. El resultado será devuelto por la función USR; por tan-
to ponbit aparece así:

1800 POKE 32000,2 t V AL("B I N" + s$)


1810 POKE 32001,CODE n$(p)
1820 LET n$(p) = CHR$ USR or
1830 RETURN

56
APRENDIENDO MALLAS

Hay dos puntos a observar. Primero, en la línea 1800 el valor binario


representado por s$ se convierte a un número. Desafortunadamente,
Vd. no puede utilizar la función B1N con algo que no sea una cadena de
ceros y unos. Por tanto, debe crear· una cadena a partir de la cual V AL
pueda generar un número. No olvide que el "BIN" entre comillas debe
teclearse utilizando una pulsación de función única. (En otras palabras,
no es válido teclear "B", "1", y "N" como letras separadas). En segundo
lugar, yo he escrito "USR or" en la línea 1820, en lugar de "USR
32002" por razones de claridad. Por supuesto, habrá que corregir la
línea 10 para incluir:

LET or = 32002

El código de máquina

Llegamos ahora a la rutina de código de máquina. He aquí una posi-


bilidad:

LO 8,00 06·00
LO HL,7000 21 00 70
LO A, (HU 7E
INC HL 23
OR A, (HL) 86
LOC, A 4F
RET C9

Es bastante directo. HL se utiliza como apuntador para los dos bytes


de datos (7DOO hexadecimal es 32000 decimal). El registro A se carga
con el primer byte y hecho un O R con el segundo, habiendo incremen-
tado HL. El resultado se sitúa en el registro e y como B se limpió al co-
mienzo, el par Be contiene el resultado. Esto está bien, ya que USR
devuelve siempre el valor en Be. El código hexadecimal ensamblado se
muestra a la derecha y Vd. podría cargarlo con algo como:

30 FOR p = 32002 TO 32011


35 REAO byte
40 POKE p, byte
45 NEXT p
50 OATA 6,0,33,0,125,126,35,182,79,201

La sentencia DATA contiene los bytes en código de máquina conver-


tidos a decimal.
57
APRENDIENDO MALLAS

Pruebas

Al fin tenemos algo que puede probarse. Pruebe esto:

90 GOSUB inici
100 GOSUB enseñar
110 LET num = CODE n$(l ):GOSUB bina:PRINT b$
120 LET num = CODE n$(2):GOSUB bina:PRINT b$
130 GOTO 100

Esto le permitirá probar enseñar ' mostrando el estado actual de los


dos bytes n$ (1) y n$ (2) en binario después de cada ejemplo de ense-
ñanza. Utilice 7,29 y 33 como números impares M el conjunto de ense-
ñanza y obtendrá los patrones de bit mostrados en las páginas 50 y 51.

Reconocimiento

Ahora podemos escribir recon. El algoritmo esquematizado es:

Tomar o leer número


Convertir número a binario (b$)
Seleccionar los 3 bits más bajos de b$
Seleccionar el bit direccionado
Seleccionar los 3 bits más altos de b$
Seleccionar el bit direccionado
Si ambos bits direccionados son ''1'' el número es impar: RETURN
El número es par
RETURN

que se codifica así:

1400 INPUT" Introduzca número a reconocer"; num


1410 GOSUB bina
1420 LET s$ = b$(TO 3):LET p = 1
1430 GOSUB sacabit
1440 LET bitl = bit
1450 LET s$ = b$(4 TO): LET p =2
1460 GOSUB sacabit
1470 IF bit AND bitl THEN PRINT "impar":RETURN
1480 PR INT "par"
1490 RETURN

58
APRENDIENDO MALLAS

sacabit (línea 2000 en adelante) debe ver si el bit direccionado es O ó l.


En realidad devuelve el valor apropiado en bit :

2000 POKE 32000,2 t VAL("8IN" + s$)


2010 POKE 32001, COOE n$(p)
2020 LET bit = USR and
2030 RETURN

and es una rutina en código de máquina que hace el AND de los bytes
32000 y 3200l. El valor con el que se ha hecho POKE en la 32000 es
una máscara que permite solamente el ·paso del bit direccionado de
n$(p) que está en 32001. Funciona así: supongamos que tenemos 0100
en s$. Luego queremos examinar el bit 4 de n$(p). 2 t VAL ("BIN"
+ s$) es 2 t 4 = 16. Por tanto, el valor hecho poke e.s:
00010000

al que se le hace un AND con un patrón desconocido:

abcdefgh

generando:

OOOdOOOO

Por tanto, el bit 4 es el único permitido y el resultado es cero o no cero


con arreglo a si d era cero ó l. La rutina en código de máquina es, por
supuesto, muy semejant~ a la operación OR.

Hex Decimal
32012 LO 8,00 06 00 6, O,
LO HL, 7000 21 00 70 33, O, 125
LO A, (HL) 7E 126,
INC HL 23 35,
ANO A, (HL) A6 166,
LOC, A 4F 79,
32021 RET C9 201

Esta codificación se puede añadir a la sentencia DATA en la línea 50,


en cuyo caso, por supuesto, la línea 30 debe editarse como:

30 FOR p = 32002 TO 32021


(No olvide añadir "LET and = 32012" a la línea 10).
59
APRENDIENDO MALLAS

Prueba final

Sustituya la línea 130:

130 INPUT "mode";m$

y co¡tipúe:

140 If m$ = "e" THEN GOTO 100


150 GOSUB recon
160 GOTO 130

Esto situará al sistema en modo "enseñar" para éomenzar, pero conse-


cuentemente Vd. podrá alternar entre el modo '""'enseñar" y el de "reco-
nocer", entrando una "e" o una "r" respectivamente después del
"modo" de mensaje de diálogo (prompt).
Verá que el sistema trabaja de forma muy parecida a 10 que pronosti-
ca la teoría. Introduzca media docena de números impares al azar en
modo "enseñar" y los reconocerá, y probablemente algunos más en mo-
do "reconocer". Pero ¿tiene Vd. la impresión de que para algunos con-
juntos de números de entrenamiento concluye "reconociendo" más
números impares (o, si Vd. quiere, cometiendo menos erroes de recono-
cimiento) que para otros conjuntos, incluso cuando los conjuntos tie-
nen el mismo tamaño? Bien, está Vd. en 10 cierto si piensa que es así.

Minimizando el Conjunto de entrenamiento

Esto nos sugiere que hay que indicar al sistema unas pocas cosas para
que comprenda completamente el concepto de "número impar", en el
supuesto de que escojamos los ejemplos más sugestivos.
Puede ser instructivo examinar los patrones de bits creados al enseñar
los números impares 1, 3, 5, 7 y así sucesivamente hasta el 63. Por su-
puesto, podríamos hacerlo utilizando el programa llamador en curso,
pero sería más fácil sustituirlo por:
90 GOSUB inici:LETseñal = 1
95 FO R q = 1 TO 63 STEP 2
96 LET num =q
100 GOSUB enseñar + 20
110 LET num = CODE n$(l):GOSUB bina:PRINT b$
120 LET num = CODE n$(2) :GOSUB bina:PR INT b$: T AB 28;q
125 NEXT q

60
APRENDIENDO MALLAS

y observe los patrones de bits al desdoblarse. Obtendrá esto :

000001 000010 1
000001 001010 3
000001 101010 5
000001 10101010 7
000011 10101010 9
000011 10101010 11

Aquí tenemos algo interesante. Las cinco primeras entradas han cam-
biado el patrón de bits y, si Vd. quiere, se han incorporado al almace-
namiento del conocimiento. Pero la sexta (11) no puede haber hecho
nada útil ya que el patrón de bits permanece inalterado. Por supuesto,
si lo decimos de otra forma, significa que el sistema podría haber reco-
nocido el 11 habiéndose entrenado con los cinco números precedentes.
Continuemos:

000011 10101010 13
000011 10101010 15
000111 10101010 17

Así pues, el 13 y el 15 son también redundantes, pero el 17 altera al~o.


El próximo cambio tiene lugar en 25 , luego en 33 , 41, 49 y finalmente
en 57. Por tanto, un conjunto mínimo de entenamiento aparecería así :

1,3,5,7,9,17,25,33,41,49,57

Incluso esto puede mejorarse. Para ver cómo, piense en el problema a


la inversa. El patrón final de bits que aparece es:

11111111 10101010
abcd a bcd

Ahora, para comenzar, podemos seleccionar unos números que pongan


un bit en cada byte. Por ejemplo, los dos bits señalizados con una " a"
se ponen cuando al sistema se le ha "enseñado" 63 . Los señalizados con
una "b" se pondrán por el 53 , los de "e" y "d" se relacionan con el43
y 33 respectivamente. Luego necesitamos 4 números más para poner los
restantes 4 bits : 25, 17 , 9 y 1 se encargarán de ello. (Por supuesto, exis-
ten otras posibilidades; intente experimentarlas). Por tanto, necesitamos
decir al sistema solamente ocho números impares para poder identificar
los 32 del conjunto.

61
APRENDIENDO MALLAS

Otros conjuntos de entrenamiento

Recordemos que, aunque hemos seleccionado como ejemplo distin-


guir en tre unos números pares e impares, no existe nada en el programa
(excepto mensajes), que nos limite a estos tipos. Intente hacer que el
programa reconozca por ejemplo, los números múltiplos de 4 + 1 (5,9,
13, 17, etc.). Funciona bien ¿verdad?
Esto sugiere que Vd. podría hacer una modificación para que el siste-
ma realice un pequeño juego para utilizarlo en una fiesta familiar. Haga
que averigüe el siguiente número en una secuencia dada. Los números
dados actúan como conjunto de entrenamiento. El programa deberá
comprobar todos los números subsiguientes hasta encontrar uno que
pueda reconocer y 10 designe como número objetivo. ¡Así puede resol-
ver un test típico de inteligencia!
Hasta ahora pensamos que disponemos de una estructura más bien
mágica que es capaz de proezas notables de reconocimiento, pero sólo
parcialmente porque soy culpable de cierta prestidigitación. He escogi-
do ejemplos que son idóneos para reconocimiento. El procedimiento
se sentirá totalmente confundido al intentar distinguir los números
primos o los múltiplos de 3.
Sin embargo, tampoco podemos esperar que un cerebro de 2 bytes
vaya a rivalizar con Einstein.

62
6
Mallas de aprendizaje
y patrones visuales
N uestra primitiva malla de aprendizaje del capítulo 5 podría distin-
guir, de modo limitado, entre distintos tipos de números. Pero esto 10
hacía de un modo completamente no numérico; de hecho, simplemente
examinaba patrones de bits. Por tanto, no es un salto de gigante sugerir
que debemos ser capacer de diseñar un sistema semejante para recono-
cer patrones visuales (dibujos y símbolos) en el supuesto caso de que
puedan representarse como combinaciones de ceros y unos.
Esto es sencillo. Después de todo, una fotografía de un periódico
consta de puntos (o ausencia de ellos), por 10 que podemos utilizar un
"1" para el "punto" y un "O" para el "espacio" de forma casi idéntica.
En el caso de la fotografía impresa variando la densidad con la que
están empaquetados los puntos se consigue una escala de grises.
Nosotros no podemos hacer esto; por tanto, nuestras "imágenes"
serán en blanco y negro,(de momento, porque más tarde veremos como
se puede representar una escala gris).
Vamos a ceñirnos a un pequeño conjunto de patrones que conste de
los dígitos 1,2,3,4,5,6,7,8 Y 9.
El "5" a parecería así:

63
MALLAS DE APRENDIZAJE Y PATRONES VISUALES

yen la "retina" de la máquina sería:

00000000
00001100
01111100
01100000
01111000
00001100
00001100
00001100
00011100
00111000
00000000
00000000

Lo que he llamado la retina es, por supuesto, una matriz (array) de


dos dimensiones de ceros y unos. Ambas formas de la silueta están
alargadas en comparación con un "5" típico escrito a mano, alarga-
miento que muestra irregularidades que normalmente están presentes,
pero que ignoran (o se compensan) nuestros sistemas visuales. Por ejem-
plo , algunas partes de la línea son más gruesas que otras y la parte alta
de la figura no es perfectamente horizontal. Sin embargo, esto no repre-
senta un problema por dos razones. La primera es que ya hemos visto
que una malla de aprendizaje puede estar pensada para reconocer tipos
de patrones; también veremos más tarde que existen técnicas de proceso
de imágenes que "arreglan" una silueta antes de que intentemos reco-
nocerla.
Ahora el patrón de la retina facilitará la entrada a nuestro conjunto
de aprendizaje , que al igual que antes, constará de un conjunto de cel-
das de 1 byte. Cada celda tiene una entrada de 3 bits, por lo que necesi-
taremos 32 celdas en total. (Es decir, n$ debe redimensionarse a 32 de
longitud).
Hasta ahora hemos utilizado la conexión natural entre el patrón y el
número que representa para decidir la referencia ente los bits y las lí-
neas de dirección de celda. Realmente, la única razón para hacer esto
era la de facilitar la codificación. Las conexiones podrían haber sido al
azar sin afectar por ello a las posibilidades de reconocimiento del dispo-
sitivo. (Sin embargo, las conexiones cambiadas habrían alterado las cla-
ses de cosas para las que el reconocimiento era bueno. Por ejemplo, otra
configuración podría haber tratado mejor los múltiplos de 3, pero no
sería tan idónea para números pares e impares).
64
MALLAS DE APRENDIZAJE Y PATRONES VISUALES

Por tanto, en principio podríamos tener algo como:

Aunque ¿no vamos a tener problemas al modelar las conexiones de


manera tan confusa? Sorprendentemente no y además es mejor hacerlo
así, ya que podemos disponer de diferentes conexiones muy fácilmente
y por tanto experimentar para encontrar las configuraciones ideales.
Necesitamos 2 matrices bidimensionales. La primera es la propia reti-
na , que de momento hemos escogido de 8 X 12 :

DIM r$(12,8)

La segunda es un conjunto de coordenadas de fila y columna que


indica dónde encontrar cada elemento del dibujo ("pixels" o picture
element) en orden:

DIM c(96,2)

Por ejemplo, c puede comenzar así: c


7 2
3 6
4 4
6 5
8 1
9 6

65
MALLAS DE APRENDIZAJE Y PATRONES VISUALES

Esto nos indica que los tres pixels que forman la dirección o patrón
de entrada para la celda 1 se encuentran en r$ (7,2), r$ (3,6) y r$ (4,4)
Y que los de la celda 2 están en r$ (6,5), r$ (8,1) y r$ (9,6). Podernos
inicializar c laboriosamente a mano, o por medio de alguna rutina al
azar. En cualquier caso, nos ocuparemos de ello más adelante.
En este momento deberíamos comprobar la cantidad de memoria
que se va a utilizar. Cada número ocupa 5 bytes; por tanto, la matriz de
coordenadas es 96 X 2 X 5 = 960 bytes. Además, r$ es de 96 bytes y n$
será ahora de 32 bytes. Todavía estarnos aproximadamente sobre lK de
memoria, 10 cual no presenta problemas. Si deseamos incrementar más
tarde el tamaño de la retina, será bueno no olvidar que c puede crearse
como una matriz de caracteres, ya que no contiene nunca valores mayo-
res de 255. Esto disminuiría el espacio necesario para la matriz en una
quinta parte. De todas formas he hecho que la retina sea una matriz de
caracteres por razones que pronto veremos justificadas.

De momento asumiremos que la entrada a la retina es tratada por una


rutina llamada retín.

inici necesita cierta modificación marginal:

1000 FOR p= 1 TO 32

enseñar requiere más arreglos, pero la práctica totalidad de la estructura per-


manece igual:

1200 GOSUB retin


1210 INPUT "Clasificación (O = non - 5,1 = 5)";señal
1220 IF señal =OTHEN RETURN
1230 FO R p = 1 TO 32
1240 GOSU B tomabits
1250 GOSUB ponbit
1260 NEXT p
1270 RETURN

retin obtiene el patrón. El mecanismo de la señal de clasificación no se altera,


excepto, por supuesto, que el tipo de objetivo es "cosas que parezcan un 5"
o cualquier otra silueta que escoja.

Ahora necesitarnos poner cada una de los 32 celdas. Tomabits es una


rutina nueva para formar la dirección requerida seleccionando los bits
apropiados de la retina y situándolos en s$ (ya que ahí es donde ponbit
espera encontrarlos). ponbit no cambia, ya que se le pasa no sólo s$
sino también p, que le indica qué byte de n$ debe cambiar.

66
MALLAS DE APRENDIZAJE Y PATRONES VISUALES

tomabits comienza en 2200:


2200 LET s$ = " "
2210 FOR b= 1 T03
2220 LET row = 3 * (p - 1) + b
2230 LET s$ = r$(c(row, 1),c(row,2)) + s$
2240 NEXTb
2250 RETURN

. Aquí hay un par de pequeños trucos. El primero es que la fila se cal-


cula para decirnos qué filas de c vamos a tratar. Serían las filas 1, 2, 3
cuando p = 1; 4, 5 y 6 cuando p = 2 y así sucesivamente. La expresión
de la línea 2220 genera estos valores.
El segundo es que en la línea 2230, s$ se construye gradualmente
de igual manera que en bina, pero los subíndices de la matriz parecen
un poco chapuceramente pensados. Es fácil verlo si piensa Vd. en un
ejemplo:
Supongamos que b = 1, p = 2 Y c se crea como se mostró previamen-
te. Estamos interesados en este momento en la fila 3 * (2 - 1) + 1 = 4
que apunta al elt:fmento de la retina correspondiente al bit más bajo del
segundo byte de n$. Por tanto, estaríamos seleccionando r$ (6,5);
c (4,1) es 6 y c (4,2) es 5.

retin (2400)

Eventualmente, prob~blemente deseemos una versión de retin que


nos permita dibujar imágenes en alta resolución sobre la pantalla y cuyo
resultado se dibujará luego sobre nuestro array de 8 X 12.
Sin embargo, tengo dos objecciones que hacer a la introducción de
algo muy sofisticado, en este punto. La primera es que va a ser algo difí-
cil. La segunda (y más seria) es que las pruebas del resto del sistema se
harán más complejas de lo necesario. Si la representación externa de
una imagen aparece como un bloque de 8 X 12, es fácil relacionarla con
el array de 8 X 12 e imaginarnos unos patrones de pruebas apropiadas.
Si la relación es más complicada, también lo será la creación de las prue-
bas. Por tanto , por el momento, retin hace exactamente dos cosas:
l . Permitir al usuario introducir un patrón en una retina limpia.
2 . Permitir al usuario editar el patrón actual.

La opción 2 tiene un doble uso. El primero nos permite efectuar


cambios en caso de error. El segundo nos permite generar una serie de
67
MALLAS DE APRENDIZAJE Y PATRONES VISUALES

cuadros semejantes con un mínimo de dificultad, y de hecho vamos a


querer tener una serie de cuadros semejantes para un conjunto de entre-
namiento. He aquí el algoritmo:

1. GET opción (nuevo, editar o salir)


2. IF opción = s THEN RETURN
3. I F opción = n TH EN limpiar r$: editar: GOTO 1
4. editar: GOTO 1

Pensando así en el problema, sólo existe una diferencia entre introdu-


cir un nuevo cuadro y hacer una edición (edit). En el primer caso se lim-
pia primero la retina y luego se edita. Así nos ahorraríamos algo de tra-
bajo. He aquí la codificación:
2400 INPUT "nuevo, editar o salir"; 0$
2410 IF 0$ < > "n" AND 0$ < > "e" AND 0$ < > "s" THEN GOTO
2400
2420 IFo$="s"THENRETURN
2430 IF 0$ = "n" THEN GOSUB limpia:GOSUB editar:
GOTO 2400
2440 GOSUB editar
2450 GOTO 2400

limpia (2600)

Esto es fácil:
2600 FO R y = 1 TO 12
2610 LET r$(y) = "00000000"
2620 NEXT y
2630 RETURN

editar (2800)

Aquí el primer trabajo es el de mostrar el estado actual de r$. Utiliza-


ré un tablero de ajedrez con cuadros color verde y cyan para indicar una
retina limpia y luego sobreescribiré en negro para indicar un correspon-
diente "1" en r$. Por supuesto, Vd. podría tener un papel de un solo
color, pero esto dificultaría algo más el averiguar cuál e.s cada celda:

2800 FOR y = 1 TO 12 STEP 2


2810 FORx=1T08STEP2

68
MALLAS DE APRENDIZAJE Y PATRONES VISUALES

2820 PRINTPAPER4;ATy,x;" ";ATy+ 1,x+ 1;""


2830 PRINTPAPER5;ATy,x+ 1;" ";ATy+ 1,x;" "
2840 NEXT x
2850 NEXT y
2860 GOSUB copiar

Probablemente esté pensando en algo más claro que las líneas 2820-
2830 pero ¡es difícil escribirlo! Copiar tomará el patrón actual de unos
(1) en r$ y le mostrará como cuadros negros en la pantalla .
. Ahora las características de edición. Cada celda se puede editar co-
menzando a partir del ángulo superior izquierdo. La celda que se puede
editar actualmente, contendrá un signo "#" actuando como cursor. Las
teclas de cursor (sin SHIFT) permitirán que el cursor se desplace a vo-
luntad. Un editar consistirá en la simple pulsación de la tecla EDIT (de
nuevo, sin SHIFT), que combinará el estado de la celda marcada (es
decir, de plano de fondo a negro o de negro a plano de fondo). Se pue-
de abandonar el modo editar pulsando ENTER:

2870 LET x = 1: LET y = 1


2880 PRINTOVER 1;ATy,x:'#'
2890 LET dS = INKEY$
2900 IF c$ ="" THEN GOTO 2890
2905 FOR q = 1 TO 20:NEXT q
2910 IF COOE c$= 13 THEN RETURN
2920 I F c$ ="1" THEN GOSUB lanzar
2930 IF c$ = "5" ANO x > 1 THEN PRINT OVER1;
AT y,x:'#":LET x = x - 1 :GOTO 2880
2940 IF c$ = "6" AND Y < 12 THEN PRINT OVER1;
AT y,x:'#":LET y = y + 1:GOTO 2880
2950 IF c$="7" ANO y> 1 THEN PRINTOVER1;
ATY,x:'#":LETy=y-1:GOT02880
2960 IFc$="8" ANDx<8THEN PRINTOVER1;
AT y,x:'#": LET x = x + 1:GOTO 2880
2970 GOTO 2880

Hay uno o dos puntos a observar aquí. En primer lugar, el símbolo


"#" se mueve enteramente en modo "OVER 1", de forma que restaura
el contenido previo de cada celda después de que se ha movido. Sin em-
bargo, estamos utilizando en realidad tres colores de papel y el BASIC
no puede tratar esto. Por tanto, cuando el cursor pasa sobre una celda
vacía, se vuelve blanca. No encuentro en esto una incomodidad especial
pero, si piensa que le merece la pena, Vd. podría jugar con el fichero de
atributos para restaurar el papel verde y cyan. Las rutinas and y or le

69
MALLAS DE APRENDIZAJE Y PATRONES VISUALES

ayudarán en esta conexión. En segundo lugar, el bucle nulo FOR que se


ejecuta después de leer una tecla pulsada (línea 2905) facilita suficiente
demora para que Vd. pueda levantar el dedo de la tecla pulsada sin que
ocurra una segunda respuesta. El problema es que INKEY$ responde a
los cambios en el estado del teclado, por lo que si no tiene cuidado
i obtendrá una respuesta cuando pulse la tecla y otra cuando la libere!
Si utiliza PAUSE para facilitar esta demora, piénselo con cuidado; no
olvide que PAUSE queda desactivada al pulsar cualquier tecla.

copiar (3000)

No hay problema con esta rutina:

3000 FOR y = 1 TO 12
3010 FOR x = 1 TO 8
3020 IF r$ (y,x) = "1" THEN PRINT AT y,x; "."
3030 NEXT x
3040 NEXT y
3050 RETURN

lanzar (3200)

Lo único que hace lanzar es cambiar un "1" en r$ por un "O" y vice-


versa. Ahora si O y 1 fueran los únicos números, podría escribir:

LET r (y, x) = NOT r (y, x)

ya que 1 y O representan "verdadero" y "falso".

Pero como son caracteres, si quiero hacer ese truco tengo que conver-
tir el carácter en número (utilizando V AL), hacer un NOT al resultado
e invertir el proceso con STR$:
3200 LET r$(y,x) = STR$ NOT VAL r$(y,x)
3210 IF r$(y,x) = "1" THEN PRINT ATy,x;"."
3220 IF r$(y,x) = "0" THEN PRINT AT y,x;" "
3230 RETURN

70
MALLAS DE APRENDIZAJE Y PATRONES VISUALES

Algunos cabos sueltos

Existe una rutina diferida en el tiempo, cuya función es la de iniciali-


zar el array de coordenadas, c. La llamaremos pone y comienza en la lí-
nea 3400. La organización más sencilla posible para ces:

1 1
1 2
1 3
1 4
1 5
1 6
1 7
1 8
2 1
2 2
2 3
2 4
2 5
2 6
2 7
2 8

.--
12 5
12 6
12 7
12 8

En otras palabras, el ,primer grupo de tres ocupa la fila 1, columnas 1, 2


y 3; el siguiente grupo está en la fila 1, columnas 4,5 y 6;el siguiente
tiene tiene sus dos primeros elementos en la fila 1, columnas 7 y 8 ; pero
su tercer elemento está en la fila 2 columna 1 y así sucesivamente.
71
MALLAS DE APRENDIZAJE Y PATRONES VISUALES

En forma de diagrama aparecería así:


1 :2 3
r~-~A---~'r,---~A--_ _ _,~

Adoptando mi habitual filosofía (no complicar las cosas hasta haber-


las simplificado), utilizaremos esta disposición para comenzar:

3400 FO R y = 1 TO 12
3410 FORx=1T08
3420 LET e(8 * (y - 1) + x,1) = y
3430 LET e(8 * (y - 1) + x,2) = x
3440 NEXT x
3450 NEXT y
3460 RETURN

Ahora editamos la línea 90 de la rutina para:

90 GOSUB pone: GOSUBiniei

y la nueva versión de enseñar está en un estado de prueba.

72
MALLAS DE APRENDlZAJE y PATRONES VISUALES

Reconocimiento

Ahora tenemos que ejecutar en recon los mismos tipos de revisiones.


De nuevo, su formato general permanece invariable y, por supuesto, no
hay que preocuparse de ninguna rutina principal como la retino

1400 CLS:LETtot=O
1410 PRINT AT 20,0; "Introduzca la figura a reconocer"
1420 GOSUB retin
1430 FORp=1T032
1440 GOSUB tomabits
1450 GOSUB sacabit
1460 IF bit THEN LET tot = tot + 1
1470 NEXT P
1480 I F tot = 32 THEN PR INT "5"
1490 RETURN

Utilizamos retin para introducir una figura como antes. Utilizamos


también tomabits para formar la dirección apropiada para cada uno de
los 32 campos de tres bits y sacabit para averiguar si apunta a un "O"
o un "1". No olvide, sin embargo, que sacabit devuelve un cero o un
número positivo arbitrario para indicar" 1"; por tanto sumando el bit
a tot no nos dirá cuántas respuestas "1" hay. Deberemos comprobar
bit y si no es cero, sumar 1 a tot. Hago especial hincapié en esto porque
yo caí exactamente en esta misma trampa la primera vez que probé
esta rutina y luego quedé asombrado preguntándome porqué tot había
llegado a 332 cuando el bucle solamente se había ejecutado 32 veces.
Finalmente, debemos verificar tot para ver si todos los elementos
(32) han respondido" 1" y si ha sido así, imprimir un mensaje indican-
do que el patrón de prueba es un miembro del tipo de figuras que trata-
mos de identificar.

Pruebas

Las líneas 110 y 120 de la rutina llamadora no nos van a servir ya


mucho más, pero por otro lado tampoco será necesario ningún cambio
extra.
Una primera prueba sencilla es la de enseñar al sistema un único pa-
trón, dejarlo en r$ (no editándola) y comprobar que se reconoce correc-
tamente. Luego, haga un único edit (editar), es decir, cambie un ele-
mento de la retina e intente reconocer el resultado. Por supuesto no
será identificado como miembro de la clase del objetivo destino, pero lo
73
MALLAS DE APRENDIZAJE Y PATRONES VISUALES

importante es que como sólo ha cambiado un pixel, 31 de las 32 celdas


responderán" I ", por lo cual tot deberá ser 31.
Una vez completada esta simple comprobación, puede probar con
algunas más convincentes. Al cambiar dos pix els suficientemente distan-
ciados, el tot bajará a 30. Sin embargo, si los dos pixels son miembros
del mismo bloque de tres, el sistema identificará un solo cambio y tot
quedará con 31.

Cambios en la representación de la retina

Es por esto por lo que fue conveniente comenzar con una representa-
ción tan directa; es fácil decir qué pixels son miembros del mismo blo-
que o no. Sin embargo, ahora podemos combinarlo si queremos.
En el arra y c está cada par de coordenadas, por tanto lo único que
necesitamos hacer es volver a disponer su orden. Podríamos escribir una
rutina llamada desordenar, para hacer esto:

3600 FOR n = 1 TO 100


3610 LET pl = INT(RND * 96) + 1
3620 LET p2 = INT(RND * 96) + 1
3630 LETtl =e(pl,1):LETt2=e(pl,2)
3640 LET e(pl , 1) = e(p2, 1) :LET e(pl,2) = e(p2,2)
3650 LET e(p2, 1) = tl: LET e(p2,2) = t2
3660 NEXT n
3670 RETURN

Este algoritmo es muy común, si bien algo ineficaz. En cada bucle se


crean dos apuntadores al azar, pI Y p2 , y se intercambian los conteni-
dos de las filas correspondientes de c. Si se repite esto 100 veces, signifi-
ca que se han accedido a 200 filas aunque, por supuesto, se puede acce-
der a la misma fila varias veces y por término medio podemos esperar
que se acceda dos veces a cada fila.
Naturalmente, no hay problema en repetir esta operación cada vez
que se ejecuta el programa; por tanto, tendría sentido hacer:

GOSUB pone: GOSUB desordenar

como mandato directo y luego ejecutar el programa desde la línea 90


(pero ¡quite primero de aquí el GOSUB ponc!). Cuando Vd. guarde el
resultado, se preservarán los arrays o tablas, por supuesto.
74
MALLAS DE APRENDIZAJE Y PATRONES VISUALES

Proyectos

1. Estamos entrenando al sistema con una figura en particular. En otras pala-


bras, el programa nos permite decir "Esto es un 5" Y actuará sobre esa sen-
tencia . Si decimos "Esto no es un 5" el programa no toma acción ninguna.
Revíselo de forma que escriba un cero en el bit apropiado cuando se le
muestre una figura que na es miembro de la clase objetivo.
2. Lo que tenemos por el momento es un sistema que distinguirá un clase de
figuras de otras. Su modificación para que pueda distinguir entre varias
clases no presenta serios problemas. La señal de clasificación se convierte
en un array o vector en lugar de una única variable (por tanto, si estuviéra-
mos enseñando un "6" al dispositivo , f(6) se pone a "1" Y así suces.ivamen-
te); n$ se convierte en un array 2-D, ya que existirá un "diseño" de 32 by-
tes para cada una de las clases reconocibles; yeso cambia panbit y sacabit.
También cambia recan porque tiene que examinar cada diseño de n$ para
encontrar una coincidencia.
3. La prueba que propuse anteriormente de cambiar un solo pixel y asegurar
que. tot se reduce en uno exactamente , sugiere un camino interesante. Si
no se encuentra una coincidencia exacta, atenúe ligeramente las condicio-
nes para la coincidencia (es decir , acepte tot > 30, por ejemplo). ¿Esto nos
conducirá a un número mayor de errores de reconocimiento? ¿O simple-
mente mejora las características de una generalización?

75
7
La comprensión
del lenguaje natural
Durante casi cuarenta años los científicos relacionados con los orde-
nadores han dedicado un gran esfuerzo al diseño de lenguajes artificiales
con los que dialogar con los ordenadores. Primero vinieron los códigos
ensambladores y de máquina, lenguajes dificultosos en el sentido con-
vencional. Luego, a mediados de la década de los 50, apareció el FOR-
TRAN seguido rápidamente por el ALGOL60, COBOL, BASIC, LISP
y PL/ l. Después de una pausa vinieron APL, Pascal, C y más reciente-
mente Prolog, Ada y Occam. Esto no constituye, en absoluto, una rela-
ción exhaustiva: existen literalmente cientos de lenguajes de ordenador
que se utilizan actualmente. Existen además dentos de ellos más que
han florecido de forma breve, quizás en un ambiente limitado, antes de
ser sustituidos por otra alternativa más conveniente.
Por tanto, ¿por qué ha sido necesaria esta proliferación de lenguajes
de ordenador? ¿Por qué no se ha desarrollado un lenguaje de ordenador
multi-propósito? O incluso mejor, ¿por qué no se canalizó todo este
esfuerzo para lograr que el ordenador comprendiera los mandatos escri-
tos en idioma inglés ordinario? (o francés o castellano, etc.).
Veamos una a una todas estas preguntas. Primeramente, se han reali-
zado intentos para diseñar lenguajes multi-propósito. Hoy día, general-
mente están considerados como de difícil manejo. Su propia naturaleza
cerrada les hacen difíciles de recordar, menos aún la utilización correcta
de todas sus características. Los lenguajes modernos multi-propósito
tienden a tener pocas funciones intrínsecas, pero permiten al usuario
escribir las suyas propias y encadenarlas fácilmente con el cuerpo del
lenguaje, para hacerle crecer si así lQ desea. La última solución tiene, sin
embargo, un inconveniente en sí misma. Significa que se deben escribir
toda una serie de utilidades, clasificaciones, procedimientos de búsque-
da, etc. No son parte esencial del lenguaje. En cierto sentido, tenemos
algún tipo de código de máquina muy potente.
76
LA COMPRENSION DEL LENGUAJE NATURAL

Por tanto, la visión moderna es que es más tina cuestión de disponer


de caballos para una carrera que de que exista un consenso sobre qué
caballo para qué carrera. Si desea suscitar una controversia, seleccione
simplemen te cualquier problema que no sea trivial y pregunte a los cien-
tíficos de ordenador qué lenguaje escogerían para codificarlo.
Lo que surge, pues, es una alternativa, la de utilizar un lenguaje natu-
ral. Piense en las tres sentencias siguientes:

1. Ca1cular la suma de 17 y 38 .
2. Quizás desearía sumar 17 a 38.
3. ¿Cuánto es 17 más 38?

Para nosotros las tres tienen idéntico significado, aunque en el segun-


do ejemplo está claramente encubierto un mandato. Incluso las palabras
utilizadas y la forma en que se presentan, difieren drásticamente en
cada caso. En realidad, con excepción de los números, sólo hay una pa-
labra común a dos frases e incluso ésta no aparece en la tercera. En
BASIC tendríamos que escribir:

PRINT 17 + ·38

Pero , existen cambios marginales posibles:

PRINT38+ 17

o:

LET A = 38 : LET b = 17: PRINT a + b

"or'> " VEl DU RAISON? SALLE DE BAGACES?


DO YLJU LIKE GRAPES?
HotHEJI. · I N-LAW· S
UBJET O'ART? EEDR OOH
DARTBOARD

77
LA COMPRENSION DEL LENGUAJE NATURAL

pero en todos los casos la palabra PRINT y la operación "+" son ele-
mentos centrales de las posibilidades BASIC para interpretar y ejecutar
el mandato .
Es la asombrosa flexibilidad de un lenguaje natural la que le confiere
su potencia y es esa flexibilidad la que aporta los mayores dolores de
cabeza al diseñador potencial de un sistema de entendimiento o com-
prensión de un lenguaje natural.
Empleemos algo más de tiempo en la costa tratando de encontrar
algunas conchas marinas antes de adentrarnos en las aguas profundas.

SINTAXIS Y SEMANTICA

Existe una estructura gramatical en cada lenguaje natural que deter-


mina las categorías de las palabras: sustantivos, verbos, adjetivos, etc., el
orden en el que pueden aparecer y las terminaciones a aplicar a la raíces
de las palabras en casos específicos. Por ejemplo, en castellano sabemos
que una frase como "Tú ve el gato" es incorrecta gramaticalmente (o
sintácticamente) ya que cuando se utiliza ese verbo en segunda persona
del singular hay que añadirle una "s". Análogamente, " Tú el gato ves"
no es válida, porque el verbo aparece al final de la frase , lo cual sucede
en castellano en contadas ocasiones (aunque en alemán es algo muy
normal).
Es interesante observar que estos errores no afectan a nuestra posibi-
lidad de comprender lo que significan ambas sentencias. Por tanto, debe
existir algún otro mecanismo que opere junto con la sintaxis. Es lo que
llamamos la semántica. Es realmente otra palabra para el significado.
Al igual que se puede tener una frase sintácticamente incorrecta sin
destruir su significado, podemos inventar frases con una sintaxis perfec-
ta pero sin valor semántico, alguno. Por ejemplo:

Los conceptos azules se desvían sin fm

Ves a ramar un moreto berco .

En el primer caso, cada palabra nos es familiar, pero aunque la frase


es innegablemente perfecta en el sentido gramatical, no conlleva signifi-
cado alguno. No nos imaginamos que los conceptos tengan color alguno
como atributos y ¿qué puede significar que "los conceptos se desvían"?
En el segundo ejemplo, la mayoría de las palabras no tienen significado
78
LA COMPRENSION DEL LENGUAJE NATURAL

alguno. Esto no nos detiene para establecer la estructura que tiene pro-
bablemente la frase. "ramar" parece ser un verbo; "berco" un adjetivo
y "mareta" un sustantivo. Si yo le dijera:

Ves a ramar un moreto bercosamente

Vd. me podría decir "No tengo ni la más vaga idea de 10 que está Vd.
hablando, pero ha puesto un adverbio donde deber estar un adjetivo".
Es trañ o ¿verdad?
. La realidad es. que si no tuviéramos esta especial habilidad o in tui-
ción, seríamos incapaces de mejorar nuestro vocabulario o incluso
aprender el lenguaje en nuestra infancia. Después de todo, la alternativa
es rehusar obstinadamente a involucrarnos con una frase que incluye
una palabra nueva para nosotros, tal como procedería un intérprete o
un compilador de lenguaje. Por 10 tanto, si utilizo una palabra que no
está en su vocabulario, por ejemplo "mesa", Vd. dira "No comprendo la
palabra mes¡:¡" y yo respondo "Una mesa es una estructura de madera
con cuatro patas que soportan una superficie plana" y Vd. dice "No
comprendo la palabra mesa". ¿No es frustrante?
Así pues, parece como si las personas analizaran la sintaxis y la se-
mántica de una sentencia al unísono. Cada parte aporta pistas a la otra.
Podemos verlo muy claramente en mi ejemplo preferido:

La fruta baja del árbol.

Podemos considerar un sujeto (la fruta), un verbo (baja) y una circuns-


tancia (del árbol). Sin embargo, se podría haber considerado una estruc-
tura de sintaxis menos obvia. Supongamos que "fruta" es un sustantivo
y que "baja" es un calificativo. Ahora la frase se podría pensar con el
significado de:

la fruta (de la parte) baja del árbol.

Esta interpretación en realidad produce confusión. Por tanto, en este


caso, tenemos una estructura sintáctica ambigua que conduce a un valor
semántico ambiguo para la frase.
Si todo esto parece que no nos conduce a ninguna parte, tampoco lo
pretendemos en este momento. Estoy intentando sencillamente señalar
algunas de las dificultades con las que se encuentran los diseñadores de
sistemas de lenguaje natural y pienso que, colectivamente, estos ejem-
plos indican la razón de porqué tales sistemas son tan delicados en el
terreno práctico.
79
LA COMPRENSION DEL LENGUAJE NATURAL

De hecho, algunas de las primeras investigaciones dentro del campo


del proceso del lenguaje natural, se llevaron a cabo en el ámbito de la
traducción del lenguaje, no de su comprensión. Esto no sorprende
demasiado si considera que los ordenadores comenzaron a aparecer jus-
to en el momento en que organismos como las Naciones Unidas y la
Comunidad Ecónomica Europea vislumbraron la necesidad de traducir
miles de documentos a docenas de lenguajes diferentes. Obviamente era
muy tentador intentar diseñar sistemas de traducción. Fracasaron estre-
pitosamente por las razones que hemos expuesto. Existen algunas histo-
rias bien conocidas, tales como la de un sistema de traducción inglés/
ruso, ruso/inglés que se probó alimentándolo con proverbios ingleses,
pasándolos a ruso, utilizando "el sistema para su traducción de nuevo al
inglés, comparando posteriormente el original con el resultado. Este
resultado fue que ciertas frases originales inglesas volvían convertidas
en frases absolutamente confusas, distintas y sin sentido.

ARBOLES SINTACTICOS .

Demasiadas dificultades. Comencemos a intentar hacer algo. Es evi-


dente, a la vista de la discusión anterior, que será más fácil pensar en la
sintaxis de una frase que en su valor semántico; por tanto, de aquí
partiremos.
Se puede utilizar una estructura tipo árbol para construir forinas sin-
tácticas bastante bien. He aquí un ejemplo sencillo.

Adjetivo

Sustan-
tivo

80
LA COMPRENSION DEL LENGUAJE NATURAL

Imaginemos ahora que disponemos también de un vocabulario muy


limitado:

Determinantes Sustantivos Adjetivos Verbos


un maíz grande comer
una elefante/s tostado/a come
el comió
algún

Una frase como: .


El elefante grande comió el maíz tostado

es coherente con el vocabulario y con el árbol sintáctico. Podríamos


analizarla buscando la ocurrencia de izq uierda a derecha, de un verbo
conocido, en este caso "comió". Lo que precede al verbo forma el suje-
to y está formado por un determinante válido (el), un adjetivo (grande)
y el sustantivo (elefante). Lo que sigue a continuación es el objeto que
puede descomponerse de forma semejante en palabras. Incluso con una
gramática tan reducida y con tan corto vocabulario, sería posible inven-
tar frases prácticamente sin sentido. Un ejemplo, obvio puede ser "El
maíz grande comió un elefante".
Lo que necesita realmente un sistema de comprensión del lenguaje
natural es un tipo de "construcción universal" o base de conocimientos,
si lo prefiere, que le indique que "los elefantes comen cosas pero el
maíz no". No voy a intentar aún abordar ese problema, por tanto va-
mos a escamotearlo con un pequeño juego de manos.

ELlZA

A mediados de los años 60 un científico de ordenadores americano


llamado Joseph Weizenbaum desarrolló un sistema convencional del
lenguaje natural que atacaba el problema de la representación del cono-
cimiento de forma clara. Utilizó los conocimientos de sus colaboradores
humanos y simplemente los reflejó sobre él mismo.
El programa se llamó ELIZA por Eliza Doolittle, la protegida del pro-
fesor Higgins en la obra "Pigmalión" de George Bernard Shaw, (más
conocida como "My Fair Lady").
Un diálogo típico con Eliza podría comenzar:
Alguien: Hoy me siento algo cansado.
Eliza: ¿Por qué supones que te sientes hoy algo cansado?

81
LA COMPRENSION DEL LENGUAJE NATURAL

Alguien: He pasado mala noche.


Eliza: Entonces has pasado mala noche.
Alguién: Sí.
Eliza: Cuéntame algo más sobre tu mala noche.

¿Ve Vd. lo que quiero decir con "conocimientos reflejados"? Eliza está
analizando simplemente las frases que aparecen, de forma sintáctica, y
luego recomponiéndolas en una afirmación o una pregunta, cambiando
el "yo" por el "tú", "mi" por "tu", "siento" por "sientes" y así suce-
sivamente.
Eliza no tiene ni remota idea de lo que significa ."descansado" o que
está relacionado con el insomnio, o que "pasar una mala noche" es otra
forma de decir "pasar una noche en vela". ' Ni siquiera sabe que lo
común es dormir por la noche. Las personas utilizan una cantidad
extraordinaria de conocimientos acumulados para comprender incluso
el sentido de una conversación tan trivial como ésta.
Sin embargo, desde un punto de vista externo, Eliza llevaría a cabo,
de forma notable, el test de Turing. Puede ser engañoso para quien no
conozca como funciona. Por ejemplo, a un amigo mío sin relación con
los ordenadores le mostré cierto día una implantación del programa lla-
mado Analiza 11. Por espacio de veinte minutos mantuvo con el progra-
ma una conversación aparentemente sensata, si bien superficial y quedó
altamente impresionado. Sin embargo, el tema, por alguna razón, se
tornó en las actividades del servicio secreto y mi amigo tecleó:
Yo creó que tú eres un miembro de la Compañía TO YO SA

Analiza respondió:
¿Por qué crees que yo soy un miembro de la Compañ ía To tu SA?

Por supuesto así concluyó al instante el juego. AnaJiza no pudo distin-


guir las iniciales de la compañía al ir separadas por espacios. Lógicamen-
te no siempre puede Vd. asombrar a todo el mundo.
Quien haya jugado con Eliza durante bastante tiempo no podrá evitar
andar escuchando las conversaciones en los bares, autobuses o super-
mercados y pensar" ¿No podría yo haber mantenido con Eliza esa
charla?" Es asombroso observar cuantas conversaciones humanas se
asemejan a las de Eliza. Es como si la gente se pusiera en "modo Eliza"
cuando no están realmente interesados en lo que se está diciendo, pero
piensan que las respuestas son necesarias, aunque sólo sea por simple
cortesía.
82
LA COMPRENSION DEL LENGUAJE NATURAL

ANA LISIS DE LA SINTAXIS

Voy a presentar una implantación tipo Eliza muy primitiva. La pri-


mera tarea va a consistir en analizar una frase de entrada sintácticamen-
te; por tanto dedicaremos nuestro esfuerzo a este problema exclusiva-
mente.
En primer lugar, consideraremos qué limitaciones deseamos poner
sobre los diferentes tipos de sentencias que el programa va a ser capaz
de tratar. En esta versión Eliza tratará un número relativamente peque-
ño de formatos de sentencias. (De hecho, como vamos a finalizar con
una versión acortada de Eliza, le llamaré Liz pidiendo disculpas por su
naturaleza restringida.) En el fragmento de conversación que expuse
anteriormente, existen dos únicos formatos:

Yo «verbo» «objeto»
y

La notación que he empleado anteriormente es suficientemente


explicativa por ' sí misma. Cuando se hace referencia a una clase de
palabras, se muestra entre ángulos (( , »). Cuando está presente una
palabra en particular, aparece sin enmarcar.
Ahora, si Liz encuentra "Yo «verbo» «objeto»" podrá responder:
Por qué supone que Vd. «~verbo» «objeto»

De nuevo, he presentado una pieza extra en la notación. El signo "~"


indica que la forma verbal puede necesitar ser modificada, sobre todo si
el verbo es irregular.
Si la conversación hubiera comenzado:

Persona: Me siento algo cansado hoy.

Liz podría responder:

¿Por qué supones que te sientes algo cansado hoy?

donde la única transformación es "te" por "me" y "siento" por "sien-


tes".
Realmente vaya avanzar más rápidamente, desocupándome aquí de
la gramática, para tratar las formas de gerundio (como "pensando")
83
LA COMPRENSION DEL LENGUAJE NATURAL

como parte del objeto en lugar de como parte del verbo, ya que son tan
fijos como el objeto y están obligados a precederle.
Por supuesto, si Liz realizara siempre esta transformación exactamen-
te de esta forma, sería muy aburrido; por tanto deben existir transfor-
maciones opcionales, seleccionadas al azar. Una de ellas ,se muestra en
"Por tanto, tuvo Vd. una mala noche", cuyo formato general es:

Por tanto, Vd. «-verbo» «objeto»

Liz tendrá dificultades con las respuestas monosílabas como "sí" por-
que no aportan nada a Liz para que trabaje. A este tipo de respuesta las
llamaré de "no compromiso", ya que sus miembros nunca aportan nada
a 10 que ya se ha dicho. Algunos ejemplos son "No", "correcto" y "De
acuerdo". Este último no es un monosílabo, pero todavía hay alguno
peor. Dentro de la misma categoría están "Veo que" y "pensaría así",
pero ¡éstas además incluyen verbos! de forma que Liz en estos casos
generaría probablemente alguna prosa inmortal como "Por qué supo-
ne que pensaría así?
En mi diálogo de ejemplo, Eliza contendió con la respuesta de no
compromiso volviendo al último objeto. El formato general es:

Cuéntame más sobre el «objeto»

Bien, realmente eso no es del todo cierto. Nos llevaría a:

Cuéntame más sobre una mala noche.

que suena más pomposo. Por otra parte, intentar hacer la transforma-
ción de "una" a "su" sería contraproducente. Después de todo, es un
fragmento del idioma con una particular idiosincrasia. Implica la pose-
sión de la noche. Sería mejor solución transformar un artículo indeter-
minado "una" en el artículo determinado "la" en base a que todo lo
que se refiera a ello ha ocurrido con anterioridad. Cuéntame más sobre
la mala noche no suena demasiado mal.
Liz también se encontrará en dificultades con las preguntas, ya que
no conoce ninguna respuesta. Lo más sencillo es asumir que el interlo-
cutor humano está capacitado para introducir un signo de interrogación
para indicar la presencia de una pregunta. Luego Liz puede obrar a la
defensiva y ofrecer una serie de respuestas almacenadas tales como "Me
temo que no lo sé" o "No puedo responderle".
Esto nos lleva a otra posible transformación del objeto (la primera
fue "una" que se convirtió en "la"). Si Liz dice:
84
LA COMPRENSION DEL LENGUAJE NATURAL

No puedo responder

invita a la respuesta:

Yo no me imagino que Vd. pueda

Liz identificará "imagino" como verbo, así pues, si utiliza el formato


"por tanto Vd." "~verbo" "objeto", aparecerá con:

Por tanto tú te imaginas que tú puedes

cuando se hubiera dicho:

Por tanto tú no te imaginas que yo puedo

En otras palabras, "tú" debería haberse convertido en "yo". Ahora


está claro que las transformaciones del objeto a veces son necesarias.
Otro problema a solucionar es el de las frases que no conforman las
estructuras sintácticas discutidas hasta ahora. No parece probable que
vayamos a repasar todas las posibilidades sin experimentar, por lo que
el programa debería tener un mecanismo que permitiera introducir, de
forma sencilla, nuevas reglas según se hicieran necesarias. Sin embargo,
debido a la propia naturaleza de la conversación, muchas frases pueden
tener una estructura que puede reducirse al formato "Yo «verbo»
«objeto»" . Por ejemplo :

Me parece que el tiempo ha sido muy malo

y:

El tiempo ha sido muy malo

y ambos equivalentes, más o menos, a:

Creo que el tiempo ha sido muy malo.

Por tanto, podemos considerar la escritura de un pre-procesador que


forme la última sentencia a partir de cualquiera de las dos primeras. El
primer paso del algoritmo para conseguir todo esto podría ser:

l. Investigar la frase de entrada de derecha a izquierda.


2. Si el primer símbolo es un interrogante THEN parada : GOTO (1).
3. Búsqueda del verbo (buscaver) .

85
LA COMPRENSION DEL LENGUAJE NATURAL

4. IF la palabra precedente no es "Yo" THEN añadir "Yo pienso/creo que


el/la" antes de esta palabra.
S. Transformar «objeto» ~ «_objeto».
6. Seleccionar entre: Por tanto Vd.
Porqué piensa Vd. que
- «-verbo» «objeto»
Porqué supone Vd. que
Me pregunto porqué Vd.

Hay un par de puntos a considerar. El primero es que buscaver puede


no ser satisfactorio al no encontrar ningún verbo, particularmente en el
caso de las respuestas de no-compromiso. En tales casos encomendare-
mos a la operativa de búsqueda de verbo, la responsabilidad de generar
una frase como "cuéntame más sobre «-objeto». Por supuesto que
«- objeto» será entonces el último objeto requerido. El segundo punto,
es que buscaver necesita reconocer un verbo cuando se lo encuentre,
por lo que tendremos que facilitar un vocabulario que incluya las termi-
naciones irregulares. Para esto debemos considerar una estructura de
datos apropiada. He aquí una posibilidad muy sencilla:
v$
soy
es
eres
fue
fueron
sere

obtengo

obtiene
obtuve
puedo
seremos

sería
--
Cada entrada de v$ contiene una forma de cada verbo sin ninguna
ordenación. Ahora buscaver puede realizar una búsqueda lineal en esta
lista.
86
LA COMPRENSION DEL LENGUAJE NATURAL

A veces incluso pienso


que no eres más que y ¿qué me hace a mí
una estúpida máquina pensar que tú eres. una
estúpida máquina?

~
~(
,..a¡.
EL CODIGO

Intentemos ahora codificar algo de esto. Sabemos algunas de las ruti-


nas que necesitamos, por lo que podemos asignarlas algunas líneas de
comienzo .de su codificación:

10 LET parada = 1000:LET buscaver = 1200:


LET transobj = 1400

Necesitamos algunos arrays, de los cuales sólo de uno conocemos lo


suficiente para dimensionarlo:

20 DIMv$(100,10): LETo$=" "

Esto nos permitirá, trabajar con cien verbos y un maXlmo de diez


letras por verbo. Habrá observado que también he inicializado el objeto,
0$, a espacios. Así evitaremos que Liz intente manipular un objeto ine-
xistente. Ahora solicitaremos la primera entrada del usuario, tomamos
la primera frase y continuamos con el algoritmo:

100 PR INT "Hola, ¿qué quieres decirme?


110 INPUT s$
115 PRINT INK4;s$
120 IF s$(LEN s$) = "?" THEN GOSUB parada: GOTO 110
130 GOSUB buscaver

Necesitamos definir exactamente lo que devuelve buscaver. Por el


momento supondremos que es muy sencillo y que da un apuntador, p,
a la primera letra de un verbo identificado:

140 LETo$=s$(pTO)

87
LA COMPRENSION DEL LENGUAJE NATURAL

150 I F S$(p - 2) <> "1" THEN LET ep = p - 2:


GOSUB buscapal: LET 0$ = "pienso que el" + w$ + " " + 0$
Observe que aquí se supone que existe exactamente un espacio entre
cada palabra. Suponer esto es algo natural, y en cualquier caso, sería
fácil escribir un fragmento de codificación que agrupara el texto de
entrada, eliminando los espacios extra y las contracciones si las hubiera,
que hasta ahora no las estamos permitiendo. Acabo de presentar una
nueva subrutina llamada buscapal. Su función es la de devolver en w$ la
palabra anterior a la apuntada por p. Se pasa ep, que apunta al final de
la palabra a buscar:

160 GOSUB transobj


170 GOSUB select
180 PR INT r$ + 0$
190 GOTO 110

transobj transforma el objeto y el verbo (en realidad es el predicado)


según sea necesario y devuelve el resultado eri 0$. La subrutina select
genera una selección al azar a partir de las frases de comienzo posibles
de r$.
Ahora podemos comenzar a examinar en detalle las subrutinas.

parada (1000)

Esta subrutina es sencilla. Todo 10 que necesitamos hacer es seleccio-


nar de un conjunto de respuestas estándar, organizadas como, por ejem-
plo, éstas:

q$
Me temo que no puedo responder que
No lo se
No puedo responder preguntas como esa
¿Qué le hace preguntar eso?

Así la línea 20 se convierte en:

20 DIM v$ (100, 10) :DIM q$(4,40)

88
LA COMPRENSioN DEL LENGUAJE NATURAL

La codificación es:

1000 LET r = INT(RND * 4) + 1


1010 PRINT q$(r)
1020 RETURN

No estoy desarrollando codificación para establecer los arrays de tex-


to como q$ y v$ porque existen diferentes formas en que podría Vd.
hacerlo, todas ellas eficaces. Por ejemplo, puede utilizar sentencias
READ y DATA o puede inicializarlos en modo inmediato. Es conve-
niente hacer esto último, ya que entonces no existe evidencia de las
palabras clave o las frases del1istado; así la operativa del programa no es
transparente.

buscaver( 1,200)

1200 LET ep = LEN s$


1210 GOSUB buscapal
1220 LET t$ = w$ ,
1230 FOR v = 1 TO 100
1240 IFt$=v$(v)THEN RETURN
1270 NEXT v
1280 LET ep = p - 2
1290 IF p> 1 THEN GOTO 1210
1300 RETURN

Necesita una pequeña explicación. A buscapal se le da primeramente


un apuntador a la última palabra de s$ y la rutina la devuelve en w$,
junto con p, que apunta a su comienzo. Como todos los verbos en v$
tienen diez bytes de longitud, tenemos que compararlo con un campo
de 10 bytes, así pues 10 copiamos en t$ que dimensionamos (DIM) con
diez de longitud. Ahora 10 comparamos con cada verbo de v$. Si no se
encuentra coincidencia, ep se disminuye en 2 para que apunte al final
de la palabra anterior. El proceso continúa hasta que p = 1 cuando se ha
alcanzado el comienzo de s$ sin encontrar ningún verbo conocido.
Observe que si buscaver devuelve p = 1, es que no se encuentra nin-
gún verbo reconocible, por lo que se invocaría a una rutina llamada
barquillo ya que Liz no está seguro de lo que está pasando. Esto nos su-
giere una línea de codificación adicional en la rutina principal:

135 I F p = 1 TH EN GOSUB bélrquillo :GOTO 110

89
LA COMPRENSION DEL LENGUAJE NATURAL

Cuando esté Vd. probando esto, es posible que existan algunas llama-
das a barquillo no esperadas debido a que se haya olvidado de introdu-
cir algún verbo obvio en v$, por lo cual necesitará en realidad una rutina
adecuada para añadir entradas a v$.

transobj (1400)

Existen hasta ahora tres transformaciones que hemos considerado


necesarias:

l . Terminaciones verbales entre la primera y segunda persona.


2. Artículos indefinidos como "un" "una" "algunos/as" que se convierten en
"el" "la" "los" "las" .
3. Pronombres en primera persona que se transforman en segunda persona y
viceversa. Así "me" se convierte en "te"; "mío" en "tuyo".

Examinaremos 0$ de derecha a izquierda nuevamente, buscando es-


tas palabras clave y construyendo el objeto transformado en m$. La
transformación tipo 2 es un caso especial en cuanto a que la transforma-
ción se efectúa en un solo sentido, es decir, "un" se convierte en "el"
pero no a la inversa; por tanto la trataremos por separado. Por otro lado
"soy" se transforma en "eres" y viceversa; "mío" en "tuyo" y viceversa
y así sucesivamente.
Por lo tanto, podríamos disponer de dos arrays organizados de la
siguiente forma:
a$ b$

soy eras

fuí fuiste

mío tuyo

me te

De nuevo, constan de diez bytes para mayor coherencia.


Si se encuentra una palabra en a$., la sustituimos por su equivalente
de b$ y viceversa. Así pues, la codificación es:

1400 LET ep = LEN 0$


1410 LET s$ = o$:LET 0$ =" "

90
LA COMPRENSION DEL LENGUAJE NATURAL

1420 GOSUB buscapal


1425 LET t$ = w$
1430 I F w$ = "un" O R w$ = "una" or w$ = "algunos/as"
THEN LET w$ = "the":GOTO 1480
1440 FOR a = no 4
1450 IF t$ = atta) THEN LET w$ = b$(a):GOTO 1480
1460 IF t$ = b$(a) THEN LET w$ = a$(a):GOTO 1480
1470 NEXT a
1480 LET 0$ = w$ + 0$
1490 IF p> 1 THEN LETep=p-1:GOTO 1420
1500 RETURN

Observe que primeramente se transfiere 0$ a s$ para que buscapal pue-


da utilizarla. Luego, el objeto transformado se puede construir en 0$.
No se olvide tampoco de restaurar ep (línea 1490) antes de llamar de
nuevo a buscapal.

buscapal (1600)

No existe ningún problema en esta rutina.

1600 LET p = ep - 1
1610 IF p>O THEN IF s$(p) <>" "THEN LET p= p -1:
GOTO 1610
1620 LET p = p + 1
1630 LET w$ = s$(p TO epI
1640 RETURN

Observe que la línea 1610 no podría ser:

1610 IFp>OANDs$(p)<>"" ...

ya que si p es cero, BASIC trataría de comprobar s$(p) y Vd. obtendría


un error de índices. .

barquillo (1800)

La rutina barquillo puede hacer dos cosas básicas. Puede ser algo no
comprometedor, como decir "continúe" o puede utilizar el objeto ante-
rior (que estará todavía en 0$) para formar una frase como "Cuéntame
más sobre tus padres".
91
LA COMPRENSION DEL LENGUAJE NATURAL

Necesitamos otro array más:


c$ ......
Cuéntame más

Por favor continúa

Continúa

Estas tres frases se han seleccionado cuidadosamente de forma que


cada una de ellas se pueda utilizar por sí misma o seguidas de "sobre" y
luego el contenido de 0$. Bueno, aproximadamente 0$. Ya no necesita-
mos más el verbo. Por tanto necesitamos un apuntador al primer espa-
cio de 0$.

1800 FOR p= 1 to 10
1810 IF o$(p) ="" THEN GOTO 1830
1820 NEXT p
1830 LET r= INT(RND * 3) + 1
1840 LET r$ = c$( r)
1850 I F RND> 0.5 THEN LET r$ = r$ + "sobre porqué" + 0$
1860
1870
. PRINT r$
RETURN

La línea 1820 determina si la frase seleccionada de c$ se deja tal como


está o si se incorpora a ella el objeto anterior. Cualquiera de las formas
es igualmente probable, pero, obviamente Vd. puede jugar con el 0,5 a
fin de alterar las probabilidades de acuerdo con sus gustos personales.

select (2000)

2000 LET r = INT(RND * 4) +1


2010 LET r$ = d$(r)
2020 RETURN

Aquí se asume que d$ se ha creado con:


d$
Por tanto Vd.
Porque piensa que Vd.

Porque supone que Vd.

Desear.ía saber porque Vd.

92
LA COMPRENSION DEL LENGUAJE NATURAL

Cuentos

Hasta ahora he mantenido deliberadamente las características de


estas rutinas al mínimo, por dos razones. La primera de ellas que no de-
seaba que los árboles no dejaran ver el bosque y la segunda que Liz con-
sume gran tiempo en búsquedas, que son bastante lentas en BASIC, por
lo cual añadir complicaciones la harían incluso más lenta.
Así pues, lo primero que observará cuando ejecute Liz será una gran
cantidad de espacios producidos por la impresión de líneas de longitud
fija de los arrays de cadenas bidimensionales. Por ejemplo, si d$ tiene
30 bytes y select selecciona la opción "Por tanto Vd." , obtendrá 23
espacios extraños entre "Por tanto Vd." y el objeto.
Sería útil disponer de una rutina que los eliminara.

Bello Estás respondiendo


dla otra vez como Eliza,
Sydney.

~
tt .
c".~

Triturador (2200)

La rutina triturador aceptará cualquier cadena en k$ y la copiará en


1$ ignorando los espacios sobrantes. Se podría utilizar también en la en-
trada para anular los posibles espacios innecesarios que pudiese introdu-
cir el usuario.

2200 LET 1$ = " "


2210 FOR p = 1 TO LEN k$
2220 1F k$(p) <> " " TH EN LET 1$ = 1$ + k$(p): LET espacio =O
2230 1F k$(p) =" "THEN LET espacio = espacio + 1
2240 1F espacio = 1 TH EN LET 1$ = 1$ + " "
2250 NEXT p
2260 RETURN

Observe que triturador asume que el primer carácter en k$ no es un


espacio.
93
LA COMPRENSION DEL LENGUAJE NATURAL

Prueba

Inténtelo. La primera conversación (poco menos que sin sentido) que


mantuve con Liz, fue algo así:

Uz: Hola, ¿qué quieres contarme?


Yo: Hoy me siento algo irritado.
Liz: Desearía saber por qué te sientes hoy algo irritado.
Yo: La mafia me vigila.
liz: ¿Por qué supones que la mafiate vigila?
Yo: Se esconden tras las esquinas y·me espían.
Liz: Cuéntame más sobre por qué piensas que la mafia te vigila.
Yo: ¿Qué desearías saber?
liz: Me temo que no puedo contestar a eso.
Yo: OK.
liz: Por favor continúa.
Yo: Ellos tienen mucho cuidado de que no les vea.
liz: ¿Por qué piensas que el ellos tienen mucho cuidado de que
no les vea (1)7
Yo: Pienso que ellos son muy listos.
liz: Desearía saber por qué piensas que el ellos son muy listos (2).
Yo: Tú no me crees.
liz: ¿Por qué supones que el yo no te creo? (3) .

Bien, ya lo advertí al comienzo que esto era un primer intento del


algoritmo. Veamos qué modificaciones sugieren las formas no gramati-
cales señaladas (1), (2) Y (3).
Todas ellas tienen una cosa en común: aparecen otros pronombres
distintos a "yo". Liz los ha tratado como si fueran sustantivos y pone
artículos determinados delante de ellos.
Un segundo problema es que se han efectuado transformaciones inco-
rrectas de los verbos, ya que la segunda persona del singular y todas las
formas plurales son indistinguibles. Así pues, mientras la conversación
transcurra entre tú y yo, "soy" y "eres" se intercambian satisfactoria-
mente, pero cuando aparece "ellos", Liz se hace un pequeño lío ya que
"son" no se puede cambiar por "soy".
Finalmente, la transformación me-te funciona bien, ' pero la inversa
no está garantizada ya que el pronombre de la primera persona debería
ser "yo" si es el sujeto de un párrafo.

94
LA COMPRENS!ON DEL LENGUAJE NATURAL

Checksub (2400)

Escribiremos una rutina checksub para examinar estos casos especia-


les. La línea 150 queda así:

150 GOSUB checksub

y checksub será así:

2400 LET vt = 1
2410 IFs$(p-2)="Yo"THEN RETURN
2420 LET ep = p - 2: GOSUB buscapal
2430 IF w$ = "Vd." THEN LET 0$ = "pienso que yo" + o$:RETURN
2440 IF w$ = "nosotros" OR w$ = "ellos" OR w$ = "ello"
THEN LET 0$ = "piensan/mos" + w$ + " " + 0$:
LET vt = O:RETURN
2450 LET 0$ = "piensa que él" + w$ + " " + 0$:
. LET vt = O: RETURN

Esta rutina tratará bien los problemas derivados de los pronombres


y hace algo más, devuelve vt = 1 si es necesaria una transformación de
verbo y vt = O en caso contrario. Necesitamos modificar transabj para
tener esto en cuenta. ¡Es fácil! . Inserte:

1405 LET st = 3
1406 IFvtTHENLETst=l

y edite la línea 1440: '

1440 FOR a = st TO 4

Ahora, si se requiere una transformación de verbo , st es 1 como


antes, pero en caso contrario el bucle comienza en 3, evitando así con-
juntamente las parejas soy-eres y fui-fuiste .

Algunas reflexiones finales

Liz no es perfecto y .nunca lo podrá ser. Si yo digo:


El tiempo es algo desapacible

Liz puede responder


95
LA COMPRENSION DEL LENGUAJE NATURAL

Así pues Vd. piensa que el tiempo es el algo desapacible.

¡Imagínese en una salida de este tipo!


Todavía existe una amplia gama de ajustes que se pueden hacer para
mejorar su ejecutoria. Incremente el rango de frases que utiliza Liz; sus-
tituya "imaginar" o "creer" por "pensar" al azar; incremente su voca-
bulario de verbos.
He aquí algunas sugerencias más ambiciosas para agilizar sus múscu-
los mentales.

Proyectos

l. Modificar barquillo para que la conversación pueda volver a uno de los te·
mas anteriores, no al más reciente. Esto asegurará la creación de un array
para 0$ y la selección de uno de sus elementos al azar. Comoquiera que
este array no puede ser indefinidamente largo, en algún punto se deberán
descartar los antiguos objetos en favor de los más recientes. Sin embargo,
no olvide que en la conversación humana, no ocurre con frecuencia esta
especie de marcha atrás; por tanto debería haber un cierto peso a favor del
tema más reciente.
2. Por ahora, el vocabulario de Liz es fijo. Sería posible permitirle que , hasta
cierto punto, aprendiera verbos de su interIocu.tor humano . La palabra que
sigue a un "yo" es muy probable que sea un verbo y con cierta menos pro·
babilidad la que sigue a un "tú", "él", "nosotros", etc., también lo sea. Así
pues Liz podría preguntar si una palabra es un verbo cuando la encuentra
desconocida detrás de un pronombre y añadirla a v$ si obtiene una res·
puesta afirmativa.
Sin embargo , tenga cuidado con esto. Recuerde un consejo de alguien
que dijo:

"Casi todos los sustantivos pueden ser formas verbales".

3. Unas veces Liz le hace una pregunta y otras forma una afirmación. Por el
momento, en ninguno de ambos casos inserta el ' signo de interrogación.
Modifíquelo para que lo inserte de forma apropiada.
4. Permita que Liz trate ciertas contracciones como a el (al) de el (del) etc.
Haga también que Liz puede tratar correctamente las letras mayúsculas
(por ahora, no transformará "Tú" en "m~", por ejemplo).

96
8
Representación del conocimiento
Hemos visto 10 fácil que es engañar a un intérprete de lenguaje natu-
ral que dispone solamente de reglas de sintaxis (¿recuerda el maíz y el
elefante?) y cómo se enfrenta Liz con los problemas, ignorándolos. Por
supuesto, no podemos permitirnos una solución tan fácil; no sería de
utilidad.
Así pues, tenemos el.problema de cómo vamos a dar a la máquina un
"modelo universal"; de cómo, en realidad, podemos representar en ella
el conocimiento.
Para percatarnos de la dificultad que encierra este problema y cómo
10 resolvemos los humanos, aparentemente sin esfuerzo, consideremos
el párrafo siguiente:

·Julia pensó que podría conducir hasta la casa de Ana. Tocó el tim-
bre de la puerta , pero no obtuvo respuesta. Así pues, volvió a la
ciudad.

Consideremos ahora cuánto debe conocer un sistema para responder


preguntas como:

1. ¿Condujo Julia hasta la casa de Ana?


2. ¿Quién tocó el timbre de la puerta?
3. ¿Estaba Ana en casa?
4. ¿Quién volvió a la ciudad?

En lo que se refiere a la pregunta 1, sabemos que Julia actuó confor-


me a su pensamiento , aunque no se diga. De otro modo no hubiera po-
dido tocar el timbre de la puerta, deducción que implica que conozca-
97
REPRESENT ACION DEL CONOCIMIENTO

mas cosas tales como la situación de los timbres. La pregunta 2 implica


la misma información y también necesita conocer que no es probable
que Ana tocase su propio timbre de la puerta, a menos, por supuesto,
que lo esté probando; pero no hay nada que haga suponer esto. Tam-
bién deducimos que Ana no estaba en casa, ya que cuando la gente está
en casa responde al timbre. Sabemos también que es Julia quien volvió
a la ciudad, ya que el paradero de Ana es desconocido.
Así es como interpretaría el párrafo un ser humano, basado en su
conocimiento (o el sentido común si lo prefiere). Pero existe una alter-
nativa coherente con los hechos conocidos. Es que Julia cambiara de
idea sobre visitar a Ana, tocara su propio timbre, viera que estaba estro-
peado y fuera a la ciudad, ( ¡quizás para localizar a un electricista!).
Hasta aquí, en lo que se refiere al ser humano, existe el vacío sutil de
una secuencia apropiada sobre esta interpretación. Hacer que una má-
quina presente este gradode sutileza es una torpeza mental.
Sin embargo, podemos describir unas formas de conexión más sim-
ples de forma relativamente fácil.

ARBOLES DE CONOCIMIENTOS

Supongamos que dice Vd. a Liz, "Yo tuve una discusión con mi pa-
dre". Sería bueno que Liz pudiera decir "Cuéntame más sobre tus
padres". Para ello Liz necesi taría saber que existe una relación entre
"padre" y "padres" (en el sentido de padre o madre). Podemos formali-
zar estas relaciones por medio de árboles como éste:

l' arien-
te no de
sangre

" \ (arielite,
'por ma- I
tr"monio/

98
REPRESENTACION DEL CONOCIMIENTO

O como éste:
---.......
Muebles
' --

0siento

,Banqueta

Existen varios puntos a considerar sobre estos dos ejemplos. Lo ori-


mero es que están incompletos. No se menciona a los abuelos en el pri-
mer caso o a los bancos del parque en el segundo o cualquier otra de las
muchas posibilidades que existen. En segundo lugar, he organizado los
árboles de forma que de cada nodo del árbol no salen más de dos ramas.
. Podría haber escrito, por ejemplo:

pero deliberadamente he inventado el término "cuerpo" para evitar más


ramas. "Cuerpo" es una especie de nodo falso, ya que no es un término
que utilicemos comúnmente en este contexto. Todo esto se reduce a
que siempre es posible formar un árbol con dos ramas a 10 sumo par-
tiendo de cada nodo (árbol binario) introduciendo ese tipo de nodos
falsos. Este tipo de escamoteo nos ayudará más tarde a resolver los pro-
blemas de la codificación.
99
REPRESENT ACION DEL CONOCIMIENTO

Otro punto adicional; el mismo término puede aparecer en varios


sitios del árbol ("patas" aparece en tres sitios del árbol de muebles, por
ejemplo). En un sistema más sofisticado quizás se prefiera disponer sólo
de un nodo llamado "patas" y varias formas partiendo de él. Esto nue-
vamente dificultaría las cosas más de lo deseable en este momento, por
lo que es mejor distinguirlas como "patas de silla", "patas de mesa" y
así sucesivamente.

LA ESTRUCTURA INTERNA I)E LOS DATOS

Cada nodo puede quedar representado por un array tipo cadena que
alberga su contenido más dos apuntadores a sus nodos hijos. Así, el
árbol de los muebles aparecería así :

n$ p

1 muebles 2 3
2 asiento 4 5
r----
3 mesa 6 13
4 banqueta 12 7
5 silla 8 9
6 patas mesa 0 0
7 tapa banqueta 0 0
8 patas silla 0 0
9 cuerpo 10 11
10 respaldo 0 0
11 asiento 0 0
12 patas banqueta 0 0
13 tablero 0 0
100
REPRESENTACION DEL CONOCIMIENTO

Como hemos prometido utilizar árboles binarios, p tiene solamente


dos columnas. Observe que el orden de los nodos en n$ carece de im-
portancia. Los apuntadores cambiarán simplemente para adecuarse.
Utilizo ceros en p para indicar que se ha alcanzado un nodo terminal
(hoja).

CRECIMIENTO DE ARBOL

Deseamos poder facilitar al programa información sobre los muebles


(o sobre personas o lo que sea) en cualquier orden, tal como se nos an-
toje. Por tanda deberíamos ser capaces de algo como:

Las banquetas y las sillas son miembros del tipo asiento

y esperar que el sistema genere:

o:

Las patas y el cuerpo 'Son parte de la silla

y obtener:

Por supuesto que si estas dos operaciones se ejecutan en este orden,


el programa deberá ser capaz de percatarse de que "silla" se ha mencio-
nado anteriormente y hacer crecer al árbol en sentido descendente para
formar:
101
REPRESENTACION DEL CONOCIMIENTO

De esta forma, se pueden añadir nuestros conocimientos básicos de


forma absolutamente natural. Después de todo, en el mundo real, el
conocimiento es fruto de la experiencia y las experiencias nos abordan
de forma totalmente impredecible.
Supongamos que asumimos que nunca vamos a tener más de 100
nodos en nuestro árbol. Podríamos comenzar con:

10 DIM n$(100,20) :DIM p(100,2)


20 LETcrecer= 1000:LETbuscar=2000:LETpff= 1
30 INPUT "crecer o buscar (g/s)"; s$
40 IF s$ = "9" THEN GOSUB crecer
50 I F s$ = "s" THEN GOSUB buscar
60 GOTO 30

de forma que podemos añadir información al árbol con crecer o averi-


guar algo que ya conoce con buscar. Observe la inicialización de pff. Es
el Apuntador hacia la Primera posición Libre del árbol.

Crecer (1000)

La primera tarea será extraer los datos a añadir. Algo como:

1000 INPUT "Partes de"; e$( 1); "son"; e$(2); "y"; e$(3)

10 hará, al menos para el ejemplo de muebles. El término "Partes de" no


siempre será significativo ("Partes de padres son madre y padre" no tie-
ne mucho sentido, por ejemplo), así pues lo recordaremos para modifi-
carlo más adelante.

102
REPRESENT ACION DEL CONOCIMIENTO

Tal como están las cosas, el problema consiste en formar el subárbol:

y una frase típica de entrada sería:

Partes de la banqueta son las patas de banqueta y la tapa de


banqueta

en cuyo caso e$(l) es "banqueta", e$(2) es "patas de banqueta" y


e$(3) es "tapa de banqueta". El array de entrada e$ se dimensionará:

o 1M e$ (3,20)
para que coincida con n$. También mantendremos en un array, q un re-
gistro que contenga dónde apuntan los elementos de e$ (si ha lugar):

DIM q (3)

de forma que tendríamos:

e$ 'q

banqueta
o
patas de ban·
queta o
asiento
banqueta o
para comenzar. Ahora buscaremos en n$ cada elemento de e$ para em-
parejarlos. Si encuentra uno, hace que el elemento correspondiente de q
apunte adonde se le encontró:

1010 FOR i = 1 TO 3
1020 LET q(i) = O
1030 FOR r = 1 TO 100
1040 IF n$(r) = e$(i) THEN LET q(i) = r:GOTO 1060

103
REPRESENTACION DEL CONOCIMIENTO

1050 NEXT r
1060 NEXT i

Si esta rutina de búsqueda no encuentra emparejamiento, el elemento


correspondiente de q permanece a cero; así sabemos que se debe aña-
dir a n$.
1070 Fa R i = 1 TO 3
1080 I F q(i) < > o THEN GOTa 1120
1090 LET n$(pff) = e$(i)
1100 LETq(i)=pff
1110 LETpff=pff+l
1120 NEXT i

Cuando identificamos un elemento a añadir a n$, se le incorpora en


la fila pff (línea 1090). Luego, se registra su posición en q, y se incre-
menta pff. Ahora todo lo que se necesita es transferir esos enlaces a p:
1130 LETp(q(1),1)=q(2)
1140 LET p(q( 1),2) = q(3)
1150 RETURN

Para aclarar cómo actúa esta rutina, vamos a seguirla para las tres prime-
ras entradas (banqueta, patas de banqueta y tapa de banqueta) y luego
añadiremos "Partes de un asien to son banqueta 'y silla".
Por supuesto, es posible que no se encuentre emparejamiento en n$
para las tres primeras entradas; si fuera así, las líneas 1010 a 1060 ejecu-
tarían una búsqueda infructuosa sin tomar acción alguna. En conse-
cuencia, en el bloque de codificación siguiente (líneas 1070 a 1120) las
tres entradas de e$ se añaden a n$ (q(i) siempre es cero) y tenemos:
n$ p

banqueta 0 0
patas de
banqueta 0 f/J
asiento de
banqueta 0 f/J
e$ q

banqueta 1 pff ITJ


patas de
banqueta 2
asiento de
banqueta 3

104
REPRESENT ACION DEL CONOCIMIENTO

Examinemos ahora el efecto de las dos últimas líneas de la rutina;


q(l) = 1 y q(2) =2; por tanto, la línea 1130 se convierte en realidad en:
LETp (1,1) =2

y de forma semejante, la línea 1140 en:


LET p (1,2) =3

los ceros de la fila 1 de p se sustituyen por 2 y 3, apuntando correcta-

qm
mente a "patas de banqueta" y "tapa de banqueta". Cuando añadimos
asiento , banqueta y silla tenemos sobre la entrada:

e$, Asiento I 0
Banqueta I 0
Silla 0

(En realidad esto no es deHo del todo, ya que q no vuelve a valer cero
hasta que entra la rutina de búsqueda, pero el efecto es el mismo).
Esta vez la búsqueda detecta una referencia previa, por 10 que se
obtiene:
~$
asiento

ban~ueta
qEB
silla

ya que encuentra "banqueta" en la fila 1 de n$ y almacena esta infor-


mación en q; n$ tiene ahora "asiento" y "silla" incorporados y sus nú-
meros de fila son devueltos a q, obteniendo:
n$ p
'")
banqueta .3
patas de
banqueta 0 0
tapa de
banqueta 0 0
asiento 0 0
silla 0 (/1

105
REPRESENT ACION DEL CONOCIMIENTO

e$ q

asiento 4 pff

banqueta 1
silla 5

Luego p (4,1) toma el 1 y p (4,2) e15:


n$ p

1 banqueta 2 3
patas de
2 banqueta 0 0
tapa de
3 banqueta 0 0
4 asiento 1 5
5 silla 0 0

que da lugar al árbol:

RECORDANDO CONOCIMIENTOS

Ahora tenemos que escribir búsqueda, pero antes de ello, deberíamos


considerar qué tinos de operaciones de búsqueda necesitamos realizar
sobre el árbol.
106
REPRESENT ACION DEL CONOCIMIENTO

Por ejemplo , quizás deseemos conocer el nombre genérico para un


elemento ya mencionado. En nuestro ejemplo, será siempre "muebles"
o en general la raíz del árbol. Aquí debemos tener cuidado. Algunas
ramas del árbol son más precisas que otras. Si Liz utilizara un árbol
como éste y Vd . dijera "Yo rompí una pata de una silla" podría respon-
der "Cuéntame más sobre el mueble" que es un tipo de respuesta im-
probable en un ser humano. Volveremos más tarde a este problema.
Es más probable que deseemos saber algo sobre los nodos próximos a
algún nodo en particular. Existen dos posibilidades obvias:

1. Si no es un nodo raíz, ¿cuál es su madre?


2 . Si no es una hoja , ¿cuáles son sus hijas?
Finalmente, podríamos preguntar qué conexión existe entre dos
nodos dados. Esto implica medir el grado de conexión, el cual debería
definirse. La medida más simple consiste en contar el número de ramas
entre los dos nodos. Por ejemplo , la distancia entre "patas de mesa" y
"respaldo" es de 6, mientras que la distancia entre "silla" y "tapa de
silla" es sólo de 2. También puede ser útil observar si dos nodos están
en la misma rama. Por ejemplo, las distancias entre "banqueta" y " patas
de silla" y entre "asiento" y "respaldo" son 3 en ambos casos, pero
"respaldo" es una parte (remota) de "asiento", conexión que no es ver-
dadera para los otros dos nodos. Con esto no quiero indicar que estas
medidas sean perfectas (en cierta manera están distorsionadas por la
necesidad de presentar nodos falsos para mantener la naturaleza binaria
del árbol), pero ciertamente dan una idea aproximada y rápida de algu-
nas relaciones.
Así pues, búsqueda tiene la función básica de llamar a una de estas
tres rutinas:

2000 INPUT "encontrar madre, hijas, conexión,


sal ida (m/d/e/x)"; q$
2010 I F q$ = "m" THEN GOSUB madre :GOTO 2000
2020 I F q$ = "d" THEN GOSUB hijas:GOTO 2000
2030 I F q$ = "e" THEN GOSUB eonex:GOTO 2000
2040 =
IF q$ "x" THEN RETURN
2050 GOTO 2000

Alternativamente, Vd . podría pedir que el usuario tecleara el nombre


completo de la rutina requerida y luego llamarla con:

2010 GOSUB VAL q$

107
REPRESENTACION DEL CONOCIMIENTO

pero entonces es necesario comprobar que q$ contiene una palabra de-


finida.

madre (2200)

En primer lugar, averigüemos de quién vamos a encontrar la madre:

2200 DIM d$(20)


2210 INPUT "Encontrar madre de"; d$

y luego buscarla en n$

2220 FOR i = 1 TO 100


2230 IF n$(i) =d$ THEN GOTO 2250
2240 NEXT i

Supongamos que estamos examinando "silla"; cuya madre es "asiento"


y que el árbol completo se ha creado tal y como se muestra al comienzo
de este capítulo. Al salir del bucle, i será 5. Ahora, por supuesto, "asien-
to" tiene un apuntador 5 asociado, en el array p. Por tanto, el problema
ahora consiste en buscar p para el valor actual de i. La fila que lo contie-
ne, también contiene el nodo madre apropiado en n$.

2250 FOR r = 1 TO 100


2260 IF p(r,l) = i OR p(r,2) = i THEN PRINT n$(r):RETURN
2270 NEXT r

Si recorremos el bucle sin encontrar el apuntador requerido, entonces


el nodo no tiene madre:

2280 PRINT "El nodo es la raíz"


2290 RETURN

hijas (2400)

2400 O 1M m$(20)
2410 I NPUT "Averiguar las hijas de".; m$
2420 FOR i = 1 TO 100
2430 IF n$(i) = m$ THEN GOTa 2450
2440 NEXT i

108
REPRESENTACION DEL CONOCIMIENTO

¿No le sugiere esto nada? Pues bien, si desde las subrutinas madre e
hijas hubiera llamado a otra denominada buscanodo, me hubiera ahorra-
do tener que escribir dos veces esta codificación, que es la misma que
madre.
Sin embargo, el siguiente fragmento es diferente y muy sencillo. En
el supuesto caso de que no sean cero, los apuntadores de la fila que he-
mos encontrado nos dan las filas para las hijas:

2450 I F p(i,l) = O ANO p(i,2) = OTHEN PR INT


"Esto es una hoja":RETURN
2460 IF p(i,l) > O THEN PRINT n$ (p(i,l))
2470 IF p(i,2) > O THEN PRINT n$ (p(i,2))
2480 RETURN

conex (2600)

Esta vez comenzaremos por buscar dos nodos. Vamos pues a escribir
buscanodo. Definamos 'su función. Acepta t$ (previamente dimensiona-
do con longitud 20), busca coincidencia sobre n$ y devuelve i, que es la
fila donde encuentra la coincidencia. Si no se encontrara coincidencia
alguna , devuelve una variable coinc = O; si la encuentra la devuelve a l .
Así pues, buscanodo es:

2800 LET coinc = 1


2810 FOR i = 1 TO 100
2820 IFn$(i) =t$THEN RETURN
2830 NEXT i
2840 LET coinc = O
2850 RETURN

y las líneas 2200 a 2240 pueden sustituirse por:

2200 INPUT" Averiguar madre de"; d$


2210 LET t$ = d$:GOSUB busca nodo
2220 IF NOT coinc THEN PRINT "Nodo no encontrado" :
RETURN

Se podría hacer un cambio semejante a hijas teniendo además la ventaja


de poder detectar nodos desconocidos) comprobando el valor de coinc.
Pero, volvamos al problema ...
109
REPRESENT ACION DEL CONOCIMIENTO

2600 INPUT" 1er nodo"; t$


2610 GOSUB busca nodo
2620 IF NOTcoincTHEN PRINT"Nodonoencontrado":
RETURN
2630 LET j = i
2640 INPUT "20 nodo"; t$
2650 GOSUB buscanodo
2660 I F NOT coinc THEN PR INT "Nodo no encontrado":
RETURN
2670 LET k = i

Así pues, ahora tenemos apuntadores a los dos nodos que estamos in-
vestigando en j y en k. ¿Qué hacer con ellos? Como de costumbre, to-
memos un ejemplo para clarificar las ideas. Supongamos que creamos
dos arrays tipo cadena cuyos primeros miembros sean los dos nodos
recién encontrados. Si, por ejemplo, estamos conectando "banqueta" y
"patas de mesa":

a$ b$

~
Para cada uno de ellos trazamos un camino hacia la raíz:

a$ b$

banqueta patas mesa

a
• asiento b
• mesa

muebles muebles

Lo--" l..--""""""

Ahora comparamos los últimos elementos incorporados a los dos arrays.


Si son el mismo (como es el caso aquí), movemos ambos apuntadores
un lugar hacia atrás y repetimos el proceso hasta que no sean el mismo.
En este caso, los dos apuntadores (llamados a y b) se detendrán en 2. La
distancia entre "banqueta" y "patas de mesa" es 4, que es igual a a + b.
Pero en este ejemplo existe simetría que generalmente no está presen-
te. Pruebe con "silla" y "patas de banqueta":

110
REPRESENT ACION DEL CONOCIMIENTO

aS b$

a ____ patas de
-+ silla banqueta
-
I
asiento b --+ banqueta

muebles asiento

1-- muebles

a y b quedarán como se muestra y a + b = 3, como debe ser.


Pero, ¿qué ocurre en el caso especial de que los dos nodos estén en la
misma línea, como ocurre con "silla" y "tapa de silla"?

aS b$

a ----+ -
patas de
silla banqueta
I
asiento b ----+ cuerpo

muebles silla l
.....- asiento

muebles

L--'

Esta vez, uno de los apuntadores se transforma en cero antes de que


los elementos correspondientes sean distintos. Así, si a o b es cero, los
nodos están en línea, aun cuando sigue siendo verdadero que a + b es la
distancia entre ellos (en este caso 2).
Ahora algo más de codificación. La creación de a$ y b$ es en realidad
el mismo proceso, por tanto, tiene más sentido utilizar un único array y
pasar los parámetros a una rutina llamada rastreo que determinará qué
parte del array se va a examinar. La subrutina rastreo necesita también
el apuntador al nodo en cuestión:

2680 LET i = j: LET col = 1:GOSUB rastreo


2690 LET epl = a

La subrutina rastreo devuelve a, que es el apuntador al último elemen-


1 11
REPRESENT ACION DEL CONOCIMIENTO

to entrado que yo he transferido a epI (abreviatura de apuntador


de fin 1).

2700 LET i = k: LET col = 2:GOSUB rastreo


2710 LET ep2 = a

Todo esto supone entonces que a$ va a aparecer así:

a$

1 2
silla tapa de silla

asiento cuerpo

."---20 - - - - . ....---20 - - -..~

y se ha dimensionado con:

DIM a$(50,2,20l

(Puesto que el árbol es binario, el camino más largo de rastreo no puede


ser mayor que la mitad de su número máximo de nodos, que nosotros
establecemos en 100.)
Ahora, para buscar una no-coincidencia:

2720 I F ep1 = O OR ep2 = O THEN LET en línea = 1:GOTO 2750


2730 I F a$ (ep1, 1) = a$ (ep2,2l THEN LET epl = epl - 1 :
LET ep2 = ep2 - 1 :GOTO 2720
2740 LET en línea = O
2750 LET distancia = epl + ep2
2760 PRINT "distancia ="; distancia
2770 I F en línea THEN PR INT "en línea"
2780 RETURN

De todo esto se encarga la rutina rastreo ...


112
REPRESENTACION DEL CONOCIMIENTO

rastreo (3000)

Supongamos que tenemos una subrutina llamada menosuno en la


que, dado un apuntador a un nodo, i, devuelva en m$ su madre y un
apuntador a su madre en i nuevamente. También devuelve un O ó un 1
en raíz indicando si el nodo es o no es el raíz.

3000 LET a = 1 :LET a$(a,col) = n$(i)


3010 GOSUB menosuno
3020 IF raíz THEN RETURN
3030 LET a = a + 1
3040 LET a$(a,col) = m$
3050 GOTO 3010

menosuno (3200)

Ahora, ya tenemos escrito menosuno que cubre todos los casos y


propósitos. Es la segunda mitad de madre. Realmente madre debería
llamar a menosuno (y así lo hace en la versión final de este programa),
pero aquí presento esta codificación tal y como la concebí originalmen-
te. Pienso que es importante conocer que, al igual que en cualquier pro-
blema de diseño de ingeniería, a veces se hace necesario quitar las rue-
das, añadir un nuevo eje, y montarlas de nuevo en la forma inversa. Es
fácil tener la impresión de que el profesional puede escribir con gran
facilidad una codificación sin defecto de forma, lógica, correcta y ele-
gante. Muéstreme alguien que diga que él puede hacerlo y le diré que
está fanfarroneando.
Ahora me adentraré en el trabajo que nos ocupa:

3200 FOR r = 1 TO 100


3210 I F p(r, 1) = i OR p(r,2) = i THEN LET m$ = n$(r):
LET raíz = O:LET i = r:RETURN
3220 NEXT r
3230 LET raíz = 1
3240 RETURN

j y ya está! Hemos obtenido un modo de escribir y medir la relación


entre cualquier conjunto de elementos que pueden conformar una es-
tructura tipo árbol.

113
REPRESENTACION DEL CONOCIMIENTO

SISTEMAS EXPERTOS

Lo que hemos estado discutiendo es una forma primitiva de un tipo


de programa conocido como un sistema experto.
La idea es que un humano experto en alguna materia facilita al orde-
nador el conocimiento sobre su disciplina con el tipo de solución que
hemos estado discutiendo. Los gráficos creados en la práctica son más
complejos que los árboles que hemos estado utilizando. Con toda pro-
babilidad, existirán enlaces secundarios entre los nodos. Por ejemplo, en
el árbol de muebles, "patas de banqueta" está a una distancia de 4 de
"patas de silla" aunque ambos tienen la característica "patas"; por tan-
to existe un caso para crear un enlace directo entre ellos (y, por supues-
to, otro a "patas de mesa"). El tratamiento de estos enlaces extra pre-
senta otros problemas de programación adicionales, por lo cual he
preferido ignorarlos hasta ahora.
Para que este sistema sea de utilidad, no sólo debe ser capaz de me-
morizar conocimiento, sino de hacerlo de forma apropiada para el usua-
rio. Por ejemplo, yo podría construir una base de conocimientos médi-
cos sobre enfermedades contagiosas basado en los mismos principios
que los que he destacado. Puedo incluso utilizar exactamente el mismo
programa, excepto que el mensaje de diálogo de entrada "parte de" en
la subrutina crecer se debería cambiar por "síntomas de", más apro-
piado.
Ahora puedo entrar cosas como:

Los síntomas del sarampión son fiebre y granos que aparecen después de la
fiebre.

Sin embargo, cuando tratamos, en este caso de recopilar el conocimien-


to, deseamos que el programa actúe como emisor de diagnósticos. En
otras palabras, dados los síntomas de "fiebre" y "granos que aparecen
después de la fiebre" queremos que la máquina responda triunfalmente
"sarampión". En este ejemplo en particular esa conexión es sencilla de
establecer. Expresado en términos de parámetros para nuestro programa
sería:

Si conex devuelve distancia = 2 AND NOT enlínea THEN devolver madre de


un nodo de entrada.
Podemos fácilmente imaginar situaciones más complejas, en las que
no se ofrecen al programa datos suficientes para que trabaje. Suponga-
mos que le digo simplemente que el paciente tiene fiebre. Podría reco-
rrer el árbol buscando un nodo "fiebre", encontrar el otro nodo hija
114
REPRESENTACION DEL CONOCIMIENTO

correspondiente a él y luego preguntar si ese síntoma (granos después


de fiebre) también está presente. En una base grande de conocimientos
es posible que al usuario no le resulte obvio el porqué el programa efec-
túa esa pregunta; por tanto es importante también que el usuario tenga
la oportunidad de cuestionar el "razonamiento" del programa. En otras
palabras, el usuario debería ser capaz de preguntar" ¿Por qué?" y el
programa podría responder "Porque, si es así, el paciente tiene saram-
pión". Por supuesto que la hoja que representa el síntoma sobre el cual
está preguntando el programa puede estar a varios niveles por debajo en
el árbol: la conexión en este caso no se presentaría tan obvia de cara al
usuario.
En la vida real, todo esto no se encuentra tan claramente definido
como nos gustaría. Lo más probable es que un conjunto de síntomas
apunte a una enfermedad en particular con cierto grado de probabilidad
en lugar de con una absoluta certeza. Por tanto, un sistema experto
práctico incluiría algunos datos de probabilidad como parte del valor de
cada nodo.
En los útlimos cinco años aproximadamente se han desarrollado una
serie de sistemas expertos de gran potencia. Uno de ellos en particular,
llamado PROSPECTOR, se ha utilizado para localizar yacimientos mi-
nerales, una vez que se le ha dado detalles de la estructura geológica.
Otro sistema, llamado MYCIN, sugiere el tratamiento apropiado para
los pacientes que sufren de infecciones bacterianas.
Por supuesto, al margen del esfuerzo de programación requerido para
producir un sistema experto, el experto humano debe dedicar una gran
cantidad de tiempo al programa creando la base de conocimientos.
Cualquier tentativa seria implicará miles de horas y, dado que los exper-
tos humanos no tienen una dedicación continuada y completa, llevará
años completarlo. Todavía existe otro problema: ¿se ha percatado de la

......::.... ~~ No te preocupes, es
"I-/~:¡'

un sistema inteligente.

1 .z. ,
y

~ "'
ÁjJJ(L
'"" '

lIS
REPRESENTACION DEL CONOCIMIENTO

lentitud de búsqueda al recorrer nuestro árbol? Recuerde que la intro-


ducción de los datos sobre muebles le llevó a Vd. nada más que unos
pocos minutos. Una estructura de datos práctica va a consumir casi
todo el tiempo. Está claro que Vd. no escribiría un sistema real experto
en BASIC y lo debería ejecutar en una máquina más bien potente con
bastante memoria y un almacenamiento rápido de respaldo, pero inclu-
so así... Al contemplar problemas de este tipo se explica porqué los
usuarios de ordenadores estén siempre tratando de conseguir una mayor
velocidad y una mayor potencia.

Proyectos

1. Las búsquedas a través de n$ son actualmente ineficaces ya que los 100


elementos se examinan siempre aunque el árbol no esté lleno. Revise el
programa para eliminar este problema.
2. La mayoría de los manuales de mantenimiento de coches describen las ave-
rías y sus probables causas al final de cada capítulo. Utilizando estos datos
(u otros semejantes) y crecer, cree Vd. un árbol de diagnóstico apropiado.
Luego revise búsqueda para que realice los diagnósticos de una forma más
adecuada.
3. En este momento , el usuario tiene que forzar su visión del árbol según un .
patrón binario, ya que crecer hace hincapié eI1 que cada nodo madre tiene
sólo dos hijas. Sin embargo, el hecho de que esto se pueda hacer siempre,
significa que esto lo podría hacer crecer en lugar del propio usuario . Modi-
fíquelo apropiadamente. La rutina crecer tendrá que utilizar un conjunto
de nombres de nodos arbitrarios aunque distintos para los nodos falsos que
cree. Esto se hace fácilmente si se dispone de un contador (digamos, d) ini-
cializado al, dando al nodo falso el valor "dn" + STR$(d) e incrementan-
do luego d, de forma que los nodos falsos sean dnl, dn2, etc.
4. El proyecto 3 sugiere una modificación útil para la rutina conex . Actual-
mente conex cuenta las ramas que incluyen los nodos falsós, los cuales,
según he comentado anteriormente, pueden dar una visión parcial de la dis'
tancia entre dos nodos. Puesto que cada nodo falso comienza ahora con
" dn", (garantizando con las pruebas necesarias que los demás nodos no
comienzan con dn), sería relativamente fácil disponer que el proceso de
cómputo ignore la rama de entrada o salida a/desde un nodo falso (no
ambos, piénselo bien) para obtener una medida de la distancia másprecisa.
5. Proporcione a Liz un "área de experiencia" injertando un árbol de conoci-
mientos en él. Luego permita que utilice esto para efectuar cambios sutiles
en el tema de conversación o sustituir un término genérico por uno espe-
cífico.

116
9
Juego
Una de las áreas de la investigación sobre inteligencia artificial que
más éxito ha tenido en los últimos treinta años, se ha desarrollado sobre
el diseño de programas para juegos frente a un contrincante humano.
Esto no debe sorprender ya que, después de todo, en el tipo de proble-
mas que hemos examinado hasta ahora era necesario aportar a la máq ui-
na gran cantidad de infonnación (un modelo de universo) para dar sen-
tido a los datos que se le introducían. Un tablero de juego representa
todo un mundo en pequeño, por lo que es relativamente sencillo contar
al ordenador con exactitud todo lo que hay que saber. Aun así, en los
juegos especialmente atractivos como el ajedrez, los mejores jugadores
no saben todo 10 que hay que saber, por 10 que el modelo del ordenador
es necesariamente incompleto. En realidad, ésta es una de las condicio-
nes para que unjuego sea atractivo. Si los jugadores lo conocen comple-
tamente, saben la solución al primer movimiento efectuado. Esta es la
idea que se esconde detrás de la broma que supone que un programa de
ajedrez sumamente potente, jugando con las negras, responda a un mo-
vimiento de apertura peón a reina 4 reflexionando durante cuarenta y
cinco minutos para concluir luego abandonando.

ARBOLES DE JUEGO

Se puede ilustrar el curso de un juego mediante un árbol. Examine-


mos un ejemplo sencillo. Definiré las reglas de un juego de esta forma :

1. Existen dos jugadoresque se alternan para mover.


2 . El estado inicial del juego es que en el tablero existen cinco bastoncillos.

117
JUEGO

3. Un movimiento autorizado consiste en eliminar uno o dos bastoncillos.


4. Un jugador vence cuando el otro jugador elimina el último bastoncillo.

Probablemente se habrá dado cuenta de que este juego es una forma


simplificada del juego Nim (en el que hay más bastoncillos y más opcio-
nes). Si hajugado alguna vez con Nim sabrá que es unjuego muy simple.
El árbol muestra cada posible posición en el juego, mostrando los
enlaces entre las posiciones posibles sucesivas. Las letras de los nodos
son simples referencias, pero los números indican el número de baston-
cillos dejados en esta etapa:

Movimiento 1er jugador

Movimiento 2° jugador

Movimiento 1er jugador

Movimiento 2° jugador

Movimiento 1erjugador

Observe que no he dicho nada todavía sobre si un movimiento es


bueno o malo. Por ejemplo, si el juego llega al nodo E, eljugador 1 no
va a quitar dos bastoncillos porque llegaría al nodo K y perdería. Pero
éste sería un movimiento válido, es decir legal, y el árbol sólo trata
todos los posibles movimientos legales.

¿CUANDO UN MOVIMIENTO ES BUENO?

Asignemos ahora algunos valores a los nodos que indiquen la calidad


de un movimiento en particular. Obviamente esto se hace más fácil en
las hojas porque sabemos quién ha ganado. Definamos un valor 1 para
indicar que gana el jugador 1 y un valor -1 para indicar que gana elju-

118
JUEGO

gador 2. (Yo he utilizado -1 por sentido de simetría, pero Vd. podria


escoger el O.)
Por ejemplo, el nodo U tiene el valor -1 porque el jugador 1 toma el
último bastoncillo. De manera análoga, Q , R, S Y T están puestos a 1 y
K, M Y N a -1. En algunos casos, se pueden asignar valores a los nodos
que no son hojas. Por ejemplo, como el nodo P sólo tiene una rama al
nodo U debe tener el mismo valor que el nodo U (es decir -1). Esta es
otra forma de decir que una vez el juego ha llegado al nodo P, el jugador
2 tiene garantizada la victoria.
Ahora asumiremos que cada jugador efectúa su mejor movimiento
posible en cada jugada. Esto significa que si el jugador 1 tiene la opción
de ir a un nodo cuyo valor es 1, lo tomará, por lo cual el nodo a partir
del cual está moviéndose se puede decir que tiene un valor l. Análoga-
mente, el jugador 2 intentará llegar a un nodo - 1. Utilizando esta regla,
podemos "recorrer" el árbol hacia arriba partiendo de las hojas, eva-
luando cada nodo según se efectúa el recorrido. Examine una pequeña
zona del árbol:

(Valor 1 porque el jugador 1 puede


ir a L que es 1) . Movimiento 2 0 jugador
1

(Tiene que ser 1, ya que


sólo conduce a T) Movimiento 1er jugador
1

Movimiento 2 0 jugador
1

Si recorre Vd. el árbol desde abajo hacia la raíz, verá que la raíz se valo-
ra en 1. Dicho de otra forma, ¡el primer jugador puede ganar siempre!
Esto nos demuestra que Nim no es un juego atractivo. Además, los
juegos para los que se puede escribir u~ conjunto completo de movi-
119
JUEGO

mientas no pueden considerarse como atractivos, ya que de ser así el


juego se puede realizar de modo totalmente automático, sin posibilidad
de adivinanza o inspiración. Por otra parte, esta peculiaridad es la que
ofrece al ordenador más facilidad para el juego.
De hecho, es un ejercicio relativamente sencillo dejar que elordena-
dor se cree su propio árbol con arreglo a las reglas del juego, evaluando
cada nodo sobre la marcha y utilizando esta información para vencer a
un jugador humano, en el supuesto, claro está, de que juegue él prime-
ro. Dejaré esto como un problema sobre el que deberá Vd. reflexionar.
Nuestra experiencia en árboles quizás le sea útil.
En este capítulo, estoy más interesado en investigar las técnicas para
el tratamiento de juegos más complejos para los que no se puede cons-
truir árboles completos, sea debido a que la memoria disponible es insu-
ficiente, sea debido a que llevaría demasiado tiempo, o a la conjunción
de ambos.
Es fácil observar que los árboles quedan fuera de control rápidamente
si Vd. considera uno para el ajedrez. Las piezas blancas tienen veinte
posibles movimientos de apertura; es decir, dos posibles movimientos
con cada peón y dos con cada caballo. A partir de cada uno de esos
veinte nodos, las piezas negras pueden realizar cualquiera de los mismos
veinte movimientos. Es decir, 421 nodos después de un solo movimien-
to de cada uno. Se han efectuado estimaciones sobre el tiempo que lle-
varía jugar una partida de ajedrez ejecutando 'un árbol total. Yo me
inclino por presumir que un eray 1 (posiblemente la máquina más rápi-
da) se encontraría hoy por el movimiento número diez, si hubiera esta-
do trabajando en el problema desde los tiempos del Big Bang.

FUNCIONES DE EVALUACION

La solución al problema es agrandar el árbol solamente una pequeña


porción desde cada posición según va surgiendo. Sin embargo, esto pre-
senta una nueva dificultad. Los únicos nodos con valor cierto so.n las
hojas y si solamente hacemos crecer al árbol en un pequeño trozo, pro-
bablemente no alcancemos ninguna. Lo que necesitamos es una medida
de la calidad de una posición con la que podemos señalizar un nodo,
que no siendo una hoja puede estar tan lejos como seamos capaces de
alcanzar a ver en este movimiento.
A esta medida la llamaremos función de evaluación que deberá esco-
gerse con mucho cuidado para que sea satisfactoria para un determina-

120
JUEGO

do juego. Por ejemplo, piense en una función de evaluación sencilla


para el ajedrez. Es algo más complejo que el simple cómputo de piezas.
Podríamos asignar un valor a cada pieza (peón = 1, caballo = 3, alfil = 4,
torre = 6, reina = 10, por ejemplo) y luego evaluar simplemente el poder
de las blancas en base a estas premisas. Así, si se tienen 3 peones, los
dos caballos y una torre, tendrá 3 X 1 + 2 X 3 + 6 = 15. Sin embargo,
si esto es bueno o malo dependerá de las fuerzas de su oponente; po-
dríamos entonces restar su valor ponderado calculado de igual forma.
Si las negras tienen 2 peones, un caballo, una torre y su reina, su valor
será de 2 X 1 + 4 · + 6 + 10 = 22 Y la función de evaluación nos da
15 - 22 = -7. Por tanto, al igual que para Nim, el primer jugador se
procura el valor más alto posible mientras que el segundo intenta crear
uno bajo. La diferencia es que ahora tenemos ciertas sombras de duda
respecto al proceso. Por ejemplo, las blancas preferirían -3 a -7 aun-
que ninguna de ambas evaluaciones se puede considerar buena desde su
punto de vista. También sucede que con una función tan simple el sacri-
ficio de una reina nunca es beneficioso, aunque los jugadores de ajedrez
reconocen este hecho como una empresa válida en determinadas cir-
cunstancias. En cualquier caso no es probable que la función conduzca
a una jugada de jaque-mate, toda vez que esta jugada no se considera.
Así pues, se puede iniaginar un programa basado en esta idea que
acumule muchas piezas de ventaja, errando en su objetivo final al no apro-
vechar su superioridad. Los programas modernos de ajedrez tienen, ob-
viamente, funciones de evaluación mucho más sofisticadas que tienen
en cuenta cosas como la bondad en el control de las filas centrales,
cómo se protege al rey, la calidad de la formación de los peones, etc.
Incluso así, generalmente, son insuficientes al llegar a la parte final del
juego.

EL EFECTO HORIZONTE

Todos los árboles de juegos desarrollados parcialmente padecen de


un serio defecto. Recuerde el sacrificio de la reina que mencioné ante-
riormente. Si se evalúa ese movimiento, con toda seguridad se concep-
tuará como un mal movimiento. Sin embargo, el movimiento siguiente
puede que sea la emboscada para un jaque-mate. Si se detiene el proceso
de crecimiento del árbol antes de que se haya examinado la posición de
jaque-mate, el programa nunca llegará a saber que se llegó a esa situa-
ción. Es como si se mantuviera "sobre el horizonte". En consecuencia,
el programa descartará la opción de perder su reina.
Naturalmente, los jugadores humanos hacen algo parecido. Ellos
pueden ver además una serie de movimientos posteriores con cierta con-

121
JUEGO

fianza, pero tienden a tener una visión menos rígida sobre el valor de
las piezas y por lo tanto pueden sentirse deseosos de examinar opciones
extremas. En realidad, son más propicios al riesgo. Es difícil construir
en un programa este tipo de posturas. Es más difícil aún contemplar en
un programa otro atributo muy común en los seres humanos durante el
juego: las fanfarronadas. Incluso en el ajedrez, los humanos utilizan este
tipo de trucos sutiles. Un jugador efectúa un movimiento aparentemen-
te intrascendente, confiando en que su oponente reaccionará sin dete-
nerse a pensar demasiado en la jugada. Pero en el póker, por ejemplo,
las fanfarronadas, las baladronadas, constituyen quizás e180% del juego.
Aquí sí puede Vd. confiar en que elordenador sea especialmente bue-
no. Después de esto puede evaluar todas las probabilidades necesarias
con más efectividad que el elemento humano y con"una cara muy espe-
cial de póker. Sin embargo, no existen señales como tics nerviosos,
miradas confiadas o caras sudorosas que puedan detectar sus oponentes
humanos. E incluso aunque pudiéramos construirlas dentro del progra-
ma, sería difícil convencer a los jugadores humanos de que al ordenador
le preocupa perder una jugada.

OTHELLO

Si Vd. desarrolla un jugador NIM en BASIC, verá que no es ágil en


absoluto. Ya hemos visto en nuestras investigaciones anteriores sobre
el crecimiento y búsqueda sobre un árbol que se pierde mucho tiempo
esperando a que BASIC piense en el problema. Así pues, la implanta-
ción de cualquier juego serio es algo anodino a menos que lo vaya a rea-
lizar en código de máquina o en un lenguaje complicado de alto nivel,
como Pascal. Incluso así, con un procesador relativamente lento como
un Z80, si el programa contempla cinco o seis bazas o movimientos por
adelantado, puede tardar varios minutos en efectuar un movimiento y
para entonces su oponente humano se ha olvidado de lo que iba a hacer
o se ha aburrido y se ha marchado.
Por estas razones, no voy a implantar un juego completo para dos
personas, en BASIC. En su lugar, discutiré algunos de los problemas (y
sus posibles soluciones) de un juego en particular, Othello, y escribiré
algunas de las rutinas más importantes en BASIC a modo de ilustración.
¿Por qué Othello? Bien, en primer lugar, las reglas de este juego son su-
mamente sencillas y el ordenador dispone de ciertas ventajas, ya que un
jugador humano no puede ver fácilmente las jugadas futuras con antici-
pación. También sucede; como veremos más tarde, que las funciones de
evaluación son bastante fáciles de escribir.
122
JUEGO

EL TABLERO

Lo primero que necesitamos es una estructura interna para el tablero


de 8 X 8 de Othello. Realmente vamos a necesitar un gran número de
ellas, ya que existirá una por cada nodo del árbol. Así tendríamos:

DIM b (50,8,8)

que permite un máximo de 50 nodos. Esto ocuparía 50 X 8 X 8 X 5 =


= 16K. Existen varios métodos para acortar esta cifra, según veremos
más adelante. Nos referiremos a los jugadores como" 1" Y "-1"; así
pues, la configuración inicial del tablero es:

1 -1
-1 1

La ventaja de esto es que se pueden efectuar referencias a "jugador"


y "-jugador" de forma que una sola rutina pueda tratar los movimien-
tos, sea cual fuere el jugador.

EL GENERADOR DE MOVIMIENTOS LEGALES

El problema más engañoso de Othello es listar todos los movimientos


legales para un jugador. He dividido el problema en dos partes. La pri-
mera, anotar las posiciones donde el jugador actual se encuentra adya-
cente a una pieza del oponente (-jugador). Por supuesto que esto sólo
es legal si existe una pieza "jugador" al final de una línea recta trazada
entre estos dos puntos. Así pues, le llamaré un "generador de movi-

123
JUEGO

mientos para-legales" y anotaré su resultado en un array llamado m, or-


ganizado de esta forma:

m fila col

~bt::::==±=:::;::;:oJ;;;;>1

Esto permite al programa encontrar un máximo de diez movimientos


para-legales para posterior examen.
El generador de movimientos legales examina cada uno de estos mo-
vimientos y decide si son completamente legales o no. Para ello tiene
que examinar el tablero en cada una de las ocho direcciones, que en rea-
lidad son los puntos cardinales Norte, Noreste, Este, Sureste, Sur, Sur-
oeste, Oeste y Noroeste. Sería aburrido y tedioso tener que escribir
ocho rutinas distintas, especialmente porque sólo se diferencian en los
valores incrementales de fila y columna necesarios. Por tanto, utilizare-
mos un array i que especifique dichos incrementos:

fila col

-1 0 Norte
-1 1 Noreste
0 1 Este
1 1 Sureste
1 0 Sur
1 -1 Suroeste

0 -1 Oeste
-1 -1 Noroeste

124
JUEGO

Una rutina llamada prumov se encarga de examinar cada una de estas


posibilidades y devuelve un "1" en el elemento correspondiente de un
array llamado f si esa dirección en particular conduce a la captura de
piezas. Así, por ejemplo, si un movimiento captura piezas en dirección
Norte y Este, f aparecerá como:
f
- 1
0
1
0
0
0
0
0 I

Ahora, si la suma de todos los valores en fes cero, el movimiento no es


legal. Por otro lado, podemos realizar el movimiento y f nos indica en
qué direcciones podemos realizar capturas. Por tanto, la rutina generar
movimientos legales será algo parecido a:

1000 DIM f(8) (inicializar f)


1010 LET movimiento = O (crear un contador de movimientos)
1020 GOSUB gplm (generar movimientos para-legales)
1030 FOR p= 1 TO 10
1040 IF m(p,l) =0 (porque no hay más movimientos
THEN RETURN para-legales)

~
1050 ' FORd=lT08
probar movimiento en las 8
1060 GOSUB prumov
di recciones
1070 NEXT d
1080 LET sf = O (inicializar suma de f)

~
1090 FORd=lT08
1100 LET sf = sf + f(d) calcular suma de f
1110 NEXTd
1120 If sf > O THEN GOSUB (si el movimiento es legal, hágalo
mover:LET movimiento = y cuéntelo)
movimiento + 1

125
JUEGO

1130 If mover> 4 THEN (así el programa permite cinco


RETURN movimientos a examinar como
máximo)
1140 NEXTp
1150 RETURN

Generar movimientos para-legales (gplm)

1200 DIM m(10,2)


1210 FORfila=1T08
1220 FOR col = 1 TO 8
1230 LET a(fila + 1,col + 1) = b(n,fila,col)
1240 NEXT col
1250 NEXT fila

El segmento de rutina anterior inicializa m y luego toma el nodo actual


de b (el enésimo) y transfiere el estado del tablero a "a". Sin embargo
" a" está dimensionado a 10 X ] O, Y solamente se transfieren las 8 co-
lumnas y filas centrales. De esta forma , cuando se ejecutan las pruebas
sobre el cuadrado de una fila más arriba o una columna más adelante,
no hay necesidad de ver si existe tal fila o columna, ya que yo he puesto
un borde alrededor del tablero para asegurar que esto sea así.

1260 LET P = 1
1270 FOR fila= 1 T08
1280 FOR col = 1 TO 8
1290 IF a(fila,col) =0 THEN GOSUB adyacente
1300 I F ady TH EN LET m(p, 1) = fila;LET m(p,2) = col:
LET p = P + 1
1310 IF p > 10 THEN RETURN
1320 NEXTcol
1330 NEXT fila
1340 RETURN

Esta rutina examina simplemente cada punto del tablero buscando


un espacio . Cuando lo encuentra llama a una subrutina llamada ady a-
cente, que comprueba si un cuadrado adyacente se encuentra ocupado
por una pieza del componente. Si es así, devuelve una señal ady como
l ; en caso contrario ady es cero. Si ady es 1, esta posición se suma a m,
hasta que haya diez movimientos para-legales que escoger o hasta que
no quede ningún movimiento para-legal; lo primero que suceda.
126
JUEGO

prumov

Esta subrutina prumov tiene que decidir primero dónde mirar y qué
incrementos utilizar:

1400 LET fila = m(p, 1):LET col = m(p,2)


1410 LET incr = i(d, 1): LET incc = i(d,2)

Luego va a lo largo de esta línea, buscando un valor "jugador" para ro-


dear los valores " - jugador" con:

1420 LET fila = fila + incr: LET col = col + incc


1430 IF col> 8 OR fila> 8 THEN LET f(d) = O:RETURN
1440 I F b(n,fila,col) = jugador THEN LET f(d) = 1: RETURN
1450 GOTO 1420

mover

Esta rutina utiliza la misma información para cambiar todos los valo-
res "-jugador" a "jugador". Sin embargo, lo hace para las ocho direc-
ciones:

1600 LETfila=m(p,1):LETcol=m(p,2)
1610 FOR d = 1 TO 8
1620 LET incr = i(d,l): LET incc = i(d,2)
1630 IF NOT f(d) IHEN GOTO 1660
1640 LET fila = fila + incr: LET col = col + incc
1650 I F b(n,fila,col) = -jugador THEN LET b(n,fila,col)
= jugador:GOTO 1640
1660 NEXT d
1670 RETURN

adyacente

Lo cual nos lleva a la rutina más sencilla, la rutina ariyacente:

1800 LET ady = O


1810 FORx=lT08
1820 LET incr = i(x,l) :LET ince = i(x,2)

127
JUEGO

1830 I F a(fila + incr,col + incc) = -jugador THEN LET ady =1


1840 NEXT x
1850 RETURN

y esto es todo. Así pues, el generador de movimientos legales necesita


simplemente que se le pase n, que es el número del nodo a examinar,
además del jugador que será 1 ó -1 dependiendo de quien sea su turno
de juego.

La función de evaluación

Esta es una de las características mejores de un programa Othello. La


función de evaluación más simple es la suma de los valores de los cua-
dros del tablero.
Así:

LET ef = O
FOR fila = 1TO 8
FO R col = 1 TO 8
LET ef = ef + b(n,fila,col)
NEXT col
NEXT fila

dará, por ejemplo, ef = 4 si hay seis 1 (unos) y dos -1, mostrando así la
ventaja mantenida por eljugador 1. Sin embargo, vea la sección Proyec-
tos, donde encontrará algunas ideas adicionales.

LA PODA DEL ARBOL

Incluso un árbol como el que he ·descrito, crecerá a una velocidad


alarmante. En algún momento en medio del juego, tenemos un nodo
raíz, 5 nodos que parten de él, 5 nodos de cada uno de ellos (31 hasta
ahora) y si asignamos suficiente espacio al array, otros 125 en el siguien-
te nivel. Y todos ellos a pesar de que he limitado el crecimiento del
árbol de forma artificial considerando sólo 5 ramas en cada paso.
Sin embargo, es posible una solución más sensata que consistirá en la
poda del árbol. Supongamos que llegamos a una parte del árbol con las
siguientes características:

128
JUEGO

7 9 -2 3

Supongamos que en el nodo A le toca su turno aljugador 1, por tanto


va a tratar de aumentar al máximo la puntuación. Si los nodos E y F se
evalúan como se muestra y se respaldan, B tiene el valor 7 (porque le
toca su turno desde B a E o F al jugador -1 y tratará de reducir al míni-
mo la puntuación). Supongamos ahora que evaluamos el nodo Gen -2.
Con seguridad , el jugador -1 preferiría éste al 7, que es lo mejor que
puede hacer desde B; por tanto no hay necesidad de evaluar H.
Desde el punto de vista del jugador 1, C es una elección desacertada
porque el jugador -1 lo puede hacer por lo menos tan bien como para
obtener 'un - 2. De igual forma , D no es bueno porque el jugador -1
puede mejorar el 7 de B, bifurcando a 1. Por tanto, no necesitamos J
para nada.
A este 1 que actúa como un límite, le llamaremos alfa. Lo que hemos
dicho hasta este momento es que tan pronto como llegamos en la juga-
da la reducción de puntuación a un valor menor que éste , no necesita-
mos examinar ya ningún otro nodo hija (o sus descendientes).
Ahora invertiremos todo el argumento. En una jugada de aumento de
la puntuación, al llegar a un valor mayor que un límite beta, podemos
frenar la marcha.
129
JUEGO

Este proceso se le conoce como poda alfa-beta, término éste bastante


grandilocuente. Es un modo común y potente de reducir el espacio de
búsqueda.

Proyectos

l. A pesar de que ejecutarlo tardará una eternidad, intente combinar el gene-


rador de movimientos, la función de evaluación y las técnicas de desarrollo
y búsqueda de árboles del capítulo anterior para producir un jugador
Othello que funcione . Si desea una competición real, pruebe con una ver-
sión en código de máquina, ¡no es tan difícil!
2. La función de evaluación propuesta es más bien primitiva. Una función
mejor tendría en cuenta que es una mala táctica tomar un cuadrado adya-
cente a una esquina, ya que esto puede permitir que su oponente entre en
la esquina donde no puede ser atacado. Igualmente, cualquier cuadrado de
las filas y columnas 2 y 7 no son aconsejables. Revise la función para que
tome esto en consideración.
3. Podríamos incrementar el espacio de búsqueda disponible si no tenemos
cada posición del tablero registrada en cada nodo. Todo lo que necesita-
mos realmente es el movimiento que conduce a esa posición del tablero.
Por otro lado, se duplica así alguna evaluación y el proceso, en consecuen-
cia, se retarda de nuevo . De cualquier modo, inténtelo .

130
10
Proceso de imagen
Los capítulos dedicados a reconocimiento de patrones nos han mos-
trado que dado un conjunto de patrones que son suficientemente seme-
jantes, es relativamente fácil diseñar programas que los distingan de
otros patrones.
Ya he señalado que el término "patrón" no se aplica solamente a las
imágenes o formas visuales; sin embargo, en este capítulo voy a ceñir
nuestra discusión a las imágenes visuales.
El problema que tenemos con el reconocimiento de patrones visuales
es que los seres humanos tienden a reconocer imágenes, formas que
son realmente diferentes, como si pertenecieran a la misma clase. Por
ejemplo:

5 5)S 5
Todos ellos son cincos, ¿o no lo son? Y sin embargo existen diferen-
cias significativas entre ellos. Tres de ellos están formados por líneas
continuas, otro tiene un vano entre dos líneas y el quinto tiene dos
vanos. Cuatro de ellos tiene trazos horizontales, mientras que el otro
tiene un trazo diagonal. Todos menos uno tienen una línea vertical. Sus
tamaños son diferentes y uno de ellos tiene los trazos más gruesos que
los otros cuatro.
Es interesante observar que quizás Vd . no se había percatado de
todas estas diferencias antes de haberlas expuesto. ¿No necesita Vd. vol-
ver a mirar la figura para confirmar que lo que yo he dicho es cierto?
Seguramente sí.
131
PROCESO DE IMAGEN

Dicho de otra forma, parece que se necesita un proceso inicial sobre


la imagen formada en nuestra retina antes de intentar reconocerla. Esto
es lo que quiero expresar bajo el término "proceso de imagen" . Sus apli-
caciones no están restringidas a los sistemas de reconocimiento de pa-
trones a pesar de que ése es el contexto dentro del que se centra nuestra
discusión. Por ejemplo, las soberbias imágenes obtenidas por la NASA
de Saturno y sus anillos no aparecen verdaderamente claras hasta que
pasan por un proceso de mejora de calidad con ayuda de un ordenador
o, como yo diría, de "proceso de la imagen".
Así pues, este capítulo trata de las técnicas que le permiten crear
formas estándares a partir de un amplio rango de entradas. Sin embargo ,
tenga en mente que no todas son aplicables en cualquier circunstancia.
Por ejemplo, examinaremos una rutina que elimiriará las discontinuida-
des presentes en dos de nuestros "cincos". Obviamente, esto es algo
útil, a menos que el patrón bajo examen fuera la fotografía de rayos X
de una soldadura sobre una plataforma petrolífera. ¡Entonces existirán
discontinuidades que serían de lo más interesantes!

ENGROSAMIENTO Y ADELGAZAMIENTO

Abordemos primero el problema de la discontinuidad. En realidad


podríamos eliminar las pequeñas discontinuidades engrosando más la
imagen con la que comenzamos. Tracemos una imagen de muestra para
trabajar en gráficos de alta resolución.

10 PLOT 60,100
20 DRAW 0,31
25 PLOT 61,100
30 PLOT 60,135
40 DRAW 35,0
45 PLOT61,134
46 DRAW 34,0
50 PLOT 60,100
60 DRAW 10,-30,-4,4

esto dibuja un "5" con un pequeño corte en la parte superior. Vd. po-
dría escribir una rutina para hacerlo con la ayuda de un mando de jue-
gos, pero es difícil conseguir buenas curvas.
Ahora dibujaremos una casilla rodeándolo y otra casilla vacía para
albergar el resultado engrosado para comparar.

132
PROCESO DE IMAGEN

70 LET xs = 50:LET ys = 60
80 GOSUB casilla
90 LET xs = 140
100 GOSUBcasilla
110 STOP

casilla es sencilla:
1000 PLOT xS,ys
1010 D RAW 0,80
1020 DRAW 60,0
1030 DRAW 0,-80
1040 DRAW -60,0
1050 RETURN

Así obtendremos un rectángulo de 80 X 60 cuyo ángulo inferior iz-


quierdo está en las coordenadas xs,ys.

MIRANDO A TRAVES DE LA VENTANA

Ahora escogemos una ventana de 3 X 3 pixels a través de la cual po-


demos examinar la imagen. En alguna posición de la casílla podemos ver
algo parecido a:

o
O
O

cuando la ventana cubre parte del trazo vertical. Sustituimos el pixel


central' por la suma de los pixels de la ventana, en este caso 6. Repeti-
mos así el proceso para cada pixel. A la rutina que realiza esto la llama-
remos suma:

1400 FOR y=62TO 138


1410 FOR x=52TO 108
1420 GOSUB sumaven
1430 LET p$(y - 60,x - 50) = STR$ total
1440 NEXT x
1450 NEXT y
1460 RETURN

133
PROCESO DE IMAGEN

Aquí se suponen varias cosas. Lo primero que se asume es un borde


limpio alrededor del carácter de la casilla, ya que x e y están limitadas
a dos pixels de anchura desde el borde. Eso evita tener el borde mez-
clado con el carácter y efectuar preguntas innecesarias sobre dónde
se encuentra el pixel central actual. En segundo lugar, se llama a una
subrutina llamada sumaven que devuelve la suma, en total, para una
ventana especificada. En tercer lugar, el resultado pasa a un array tipo
cadena para ahorrar memoria, ya que cada entrada debe ser un dígito
comprendido entre el O y el 9.
Así ahora tenemos:

1 LET sumaven = 1200:LETsuma = 1400:LET casilla = 1000


2 D 1M p$(SO,60) .

y sumaven es:

1200 LET total = O


1210 FORr=y-1TOy+1
1220 FO R c = x - 1 TO x + 1
1230 LET total = totaL+ POINT(c,r)
1240 NEXT c
1250 NEXTr
1260 RETURN

Ejecútela introduciendo "GOSUB suma" como mandato directo. Luego


váyase y disfrute de varias partidas de golf o cualquier otro juego. ¡Tar-
dará en ejecutarse una eternidad!
Cuando se haya ejecutado, imprima el contenido de p$ con :

For n = SO TO 1 STEP - 1 :PR INT p$(n) :NEXT n

Observe que para conseguir la imagen, p$ debe imprimirse en orden in-


verso, ya que está formada desde abajo a arriba. Las diez filas superiores
se encuen tran reflejadas en la figura 10.1. La imagen de la parte alta del
"5" está todavía clara, pero si incluirnos todos los valores que no sean
cero , queda engrosada y la discontinuidad ha desaparecido . Por otro
lado, si incluimos solamente los pixels cuyos valores sean igualo mayo-
res que 6, por ejemplo, la curva total se adelgaza hasta no existir y la
discontinuidad se hace más patente.
Esto 10 podemos ver escribiendo una rutina llamada media que dibuja
los puntos dentro de la casilla de la parte derecha, con arreglo a un valor
de entrada suministrado:
134
PROCESO DE IMAGEN

()()()()()()(){JVVVUVVUVVV\JUUJUUVVU\.JV\.JVVJ

000000012333333333333333333333333333333333321000000000000
000000013566666666666666666666666666666666642000000000000
0000000135 2000000000000
000000001233333333333333333333333333333333321000000000000
00000oo 1221 """"",,"IV\A""""""JVV'JVV""""'VVVVVVVVVVVV""""""J'VV~'''V
00000002«2""""",,"~""""""""_""~JVV"JVV"~"""'VVVVVV~N~~~~
00000003663"""~~IV\A"""~JVV'JVV""""'~~'''''TVVVVVV~~'V~~
l~3663~J"",,"~""""""""JVV'JVV"l""'VVVl""Tl"~\~N~~N~~_~N

Fig. 10.1. -Impresión de las diez filas superiores de p$. Tenga en cuenta que en la pantalla la
visualización se desplazará de forma que la imagen no quedará clara.

1600 INPUT "entrada"; t


1610 FORy=62T0138
1620 FORx=142T0198
1630 I F VAL p$(y - 60,x - 140) > = t THEN PLOT x,y
1640NEXT x
1650 NEXT y
1660 RETURN

Si prueba esto (utilizando GOSUB media, como mandato directo),


con entrada de 1, 3 Y 6 respectivamente , obtendrá los resultados mos-
trados en la figura 10.2 . Así pues, seleccionando una entrada apropiada,
ENTRADA = 1

I I-l
I l~- - - -.\. I
I ------.-.-) II
ENTRADA=3

1--------)
--

----
I~
135
PROCESO DE IMAGEN

ENTRADA=6

l------.")
----_......,

Fig. 10. 2. -Resultado de utilizar diferentes entradas.

podemos hacer desaparecer las conexiones débiles o, por el contrario,


crear conexiones donde anteriormente no existían.
Por supuesto que deberemos cuidar de no utilizar esta técnica de
forma indiscriminada. Por ejemplo , el adelgazamiento de un "cinco"
con esta imagen:

puede conducir a:
6
¡que puede interpretarse como un 6!
6
EL ESQUELETO DE LA IMAGEN

Así pues, con un valor de entrada bajo podemos eliminar discontinui-


dades no deseables. Desafortunadamente, al mismo tiempo engrosamos
la imagen . En cualquier caso, probablemente comenzó siendo grueso
(es decir, varios pixels de anchura), ya que lo que queríamos es que tu-
viera el grosor de una línea trazada a lápiz, para lo cual debe tener más
anchura que un único pixel.
Idealmente, queremos crear un carácter estándar y la imagen esencial
en la que estamos interesados es el esqueleto del carácter real que se nos
presenta. Dicho en otras palabras, es la línea (o líneas) de un pixel de
anchura la que nos describe la imagen.
136
PROCESO DE IMAGEN

Las imágenes complejas pueden identificarse de forma satisfactoria


por su esqueleto (literalmente y metafóricamente). Es fácil ver que:

d
describe un perro o una criatura semejante (¿por qué no un gato?) sin
ningún detalle que desordene el proceso de reconocimiento.
Sin embargo , la extracción del esqueleto de una imagen viene a ser
como una ilusión o ficción trucada. Comencemos por examinar algunos
de los problemas más espinosos con los que nos vamos a encontrar.

Problema 1: ¿Cuándo un borde es un final (y viceversa)?

Piense en un simple rectángulo cuyo esqueleto he dibujado dentro


de él :

Este caso es el más sencillo de tratar. Una posible solución sería cincelar
los bordes hasta conseguir que quede una sola línea de grosor sencillo .
Pero si esculpimos el perímetro total con igual criterio, la línea resultan-
te será muy corta. Para obtener un esqueleto satisfactoriamente intuiti-
vo necesitaremos tomar más de los lados que de la parte alta o la baja.
Así pues, quizás deberíamos identificar los "puntos finales" y asegurar-
nos que éstos quedan intactos al cincelar los bordes. Pero ¿cómo encon-
tramos los puntos finales?

Problema 2: ¿Cuándo una línea está conectada?

Supongamos que por un momento volvemos al Problema l . Debemos


detener la eliminación de material· cuando la línea está próxima a perder
su conexión. Si la línea contiene una sección diagonal como ésta:
137
PROCESO DE IMAGEN

está ya conectada; tenemos el esqueleto. Pero si están conectados dos


pixels diagonalmente adyacentes, ¿por qué los dos espacios a uno y
otro lado de la línea no están conectados? ¡Si también tienen pixels
diagonalmente adyacentes!

Problema 3: Simetría

Si desarrollamos un algoritmo que trata un lado de la imagen de for-


ma exactamente igual que el otro, cuando las líneas tienen dos pixels
de grosor, se eliminarán ambos lados o no se eliminará ninguno.

Problema 4: Falsos puntos finales

Imagínese un b loq ue rectangular con un pequeño defecto:

Tenderíamos a considerar esto como un accidente, no como una parte


significativa de la imagen. Sin embargo, podría ser tomado por nuestro
algoritmo de punto final y retenido, dando:
138
PROCESO DE IMAGEN

puede ser bastante confuso.

UNA SOLUCION

Cuando hace unos pOCOS años me tropecé con este problema, estuve
trabajando sobre ello cerca de un mes y a punto estuve de intentar algo
más sencillo, como entrenar víboras venenosas, cuando cayó en mis
manos accidentalmente un artículo de una revista científica que hacía
referencia, de pasada, al hecho de que el cangrejo herradura tiene una
singular característica en su sistema visual. Cuando una célula nerviosa
de su retina reacciona ante una luz brillante, inhibe las restantes células
próximas a aquélla para que no reaccionen. En otras palabras, si Vd.
ilumina un círculo de luz en el ojo del cangrejo, él visualiza un punto de
luz. ¡Es un algoritmo de obtención del esqueleto maravillosamente
simple!
Esto me incomodó, ya que había pasado un mes investigando en un
problema cuya respuesta conocía el cangrejo hace dos millones de años.
Sin embargo, esto en sí mismo, no resuelve el problema completamente,
ya que no conserva la conectividad. Para esto, necesitamos conocer algo
sobre la densidad del patrón de la región del pixel que intentamos elimi-
nar. La rutina suma que ya hemos tratado hará parte del trabajo, pero
no hay razón para crear trozos de patrón que no existían allí anterior-
mente; por tanto sumaremos (suma) solamente aquellos puntos que no
sean cero . Por ejemplo, el patrón :
1
1
1
1
1
1
1
1

139
PROCESO DE IMAGEN

se transforma en:
2
3
5
4 7 7 7 6 4
6 9 9 9 9 6 +- ®
4 7 7 7 6 4
5 t
2 ®
Ciertas cosas quedan claras inmediatamente. En primer lugar, un "2"
ó un "3", no pueden eliminarse nunca, ya que en el ejemplo podemos
ver que deben representar el final de una línea del esqueleto y un punto
dentro de una línea del esqueleto respectivamente: Después de esto las
cosas se van enturbiando. Por ejemplo, el "6" señalizado con A se debe
preservar como final de una línea, mientras que el de B se debería elimi-
nar y, como de hecho sucede, los 4 podrían quitarse, pero los 5 se
deben mantener. Por supuesto, lo que hemos hecho ha sido crear una
cierta escala de gris. (Ya mencioné en el capítulo 6 que llegaríamos a
esto). Podemos imaginar que los 9 son más "luminosos" que los 2.
Ahora, ¿qué haría nuestro amigo el cangrejo? Bien, cuanto más lumi-
nosa sea la región que rodea a un pixel, más probabilidades tendrá de
que se suprima. Si sumamos (suma) los valores ·luminosos de una venta-
na de 3 X 3 alrededor de B obtenemos 41. Alrededor de A el valor es
de 35. Así, en alguna parte entre 35 y 41 hay un valor por debajo del
cual deberíamos conservar un pixel cuyo valor sea 6. Existirán valores
límites semejantes para los otros niveles de luminosidad. La tabla que
doy a continuación nos los muestra:

Nivel de Valor por debajo del cual


lum inosi dad se preservará un pixel

9 78
8 66
7 52
6 40
5 30
4 22
3 siempre preservado
2 siempre preservado
1 siempre preservado

140
PROCESO DE IMAGEN

Ya hemos visto que se pueden eliminar los 2 y los 3 y que un "1" será
un punto por sí mismo, por 10 cual también se mantendrá (puede que
sea el punto de una i).

ALGO DE CODIFICACION

Pongamoslo en práctica. Vamos a necesitar una rutina que ponga en


la parte izquierda, la imagen engrosada de la casilla de la parte derecha,
de forma que podamos utilizarla con las rutinas que ya disponemos.
Escribiremos una rutina llamada limpia para inicializar ambas casillas
y otra llamada copia para pasar de derecha a izquierda.

limpia (2000)

2000 FOR y = 62 TO 138


2010 PLOT INVERSE 1 ;52 + casnum * 90,y
2020 DRAW INVERSE 1; 56,0
2030 NEXTy
2040 RETURN

Esto supone que se pasa un parámetro con el número de casilla a


limpia, que se pone a cero para limpiar la casilla izquierda y a uno
para limpiar la casilla derecha.

copia (2200)

2200 FORy=62T0138
2210 FOR x = 142 TO 198
2220 IF POINT (x,y) THEN PLOT x - 90,y
2230 NEXT x
2240 NEXT y
2250 RETURN

Por tanto copia asume que la casilla izquierda está limpia y copia
sobre ella el contenido de la casilla de la parte derecha. Así pues, nues-
tro convenio es que todo el proceso tiene lugar de izquierda a derecha.
141
PROCESO DE IMAGEN

esquel (2400)

Lo primero será sumar solamente los pixels que están activados (on).

2400 DIM q$(80,60)


2410 FOR y = 62 TO 138
2420 FOR x = 52 TO 108
2430 IF POINT (x,y) THEN GOSUB sumaven:
LET q$(y - 60, x-50) = STR$ total
2440 NEXT x
2450 NEXT y

Observe que he dimensionado q$ de forma que se pueda limpiar rápida-


mente, pero eso significa que los pixels que quedan fuera del patrón
estarán representados por "espacios" en lugar de ceros. Podría haber
utilizado de nuevo p$, pero habría destruido el resultado de la suma
que podemos necesitar más tarde y que lleva bastante tiempo conse-
guirla.

Ahora debemos examinar q$, decidiendo sobre la marcha los ele-


mentos a mantener:

2460 FOR y = 62 TO 138


2480 FOR x = 142 TO 198
2490 LET c$ = q$(y - 60, x - 140)
2500 I F c$ = " " TH EN GOTO 2540
2510 IF VALc$<4 THEN PLOT x,y:GOTO 2540
2520 GOSUB lumin
2530 I F br < b(V AL c$)THEN PLOT x,y
2540 NEXTx
2550 NEXT y
2560 RETURN

Esto necesita cierta explicación. Primero, los espacios se ignoran (línea


2500). Luego se dibuja cualquier pixel menor de 4. Cualquier otro pixel
efectuará una llamada a una nueva subrutina, llamada lumin, que se en-
carga de evaluar el nivel de luminosidad local y lo devuelve en br. Este
se utiliza para decidir si se dibuja el punto correspondiente y supone la
existencia de un array b creado así:

142
PROCESO DE IMAGEN

b
--
1
2
3
4 22
5 30
6 40
7 52
8 66
9 78

Así, si por ejemplo br = 35 Y c$ = "6", br es menor que b(6) , por tanto


se dibuja el punto: Sin embargo, si br es 41 y c$ = "6" el punto no se
dibujará, tal como deseamos; b(1), b(2) Y b(3) no se mencionan, por 10
que no tienen porqué activarse.

lumin (2600)

Esta rutina es bastante parecida a sumaven, excepto que trabaja


sobre q$:

2600 LET br = O
2610 FOR r = y - 1 TO y + 1
2620 FO R e = x - 1 TO x + 1
2630 LET d$ = q$(r - 60, e - 140)
2640 IFd$<>""THEN LETbr=br+VALd$
2650 NEXTc
2660 NEXT r
2670 RETURN

Prueba de "esquel"

Ahora vamos a probarlo. Vd . puede crear un patrón con trazo grueso


con el que trabajar, introduciendo :
143
PROCESO DE IMAGEN

GOTO 10: GOSUB media

No lo ejecute con RUN; perderá p$ y tendrá que ejecutar nuevamente


suma. Luego:

LET casinum =O:GOSUB limpia:GOSUB copia:LET casinum = 1:


GOSUB limpia

sitúe el "5" grueso en la casilla izquierda y limpie la casilla derecha.


Finalmente:

GOSUB esquel

Obtendrá el resultado que aparece en la figura 10.3. Este es más delgado


que el original, pero no es un esqueleto. Esto no le debe sorprender si
piensa cómo funciona nuestro algoritmo. Elimina los pixels que no ofre-
cen problemas pero es muy conservador; ante la duda es precavido para
que quede preservada la conectividad. La solución es obvia, repita el
proceso:

I 1 I~ I
I 1
I~I
l___~ UJ
Fig. 10.3.-GOSUB esquel.

LET casinum = O:GOSUB limpia:GOSUB copia:LET casinum = 1:


GOSUB limpia:GOSUB esquel

Ahora obtendrá la figura 10.4. Repita nuevamente el proceso y verá que


no ha mejorado nada; así pues, no hay razón para seguir más adelante.
Sin embargo, todavía no hemos conseguido un verdadero esqueleto. No
obstante, observe cuidadosamente y verá que en conjunto, solamente
nos han quedado líneas de grosor doble o sencillo. Por supuesto que las
líneas de doble grosor aparecen por el problema de simetría que expusi-
mos anteriormente y corno ya dije entonces, no hay forma de que
pueda eliminarlas ningún algoritmo. Ahora, sin embargo, estarnos en
distinta posición. Sabernos que solamente existen líneas de grosor doble
144
PROCESO DE IMAGEN

s
Fig. 10.4.-Suficienre GOSUB esquel.

O sencillo; por tanto se puede examinar la pantalla tratando de encon-


trarlas, borrando las duplicadas sobre la marcha.

I íneadel (2800)

Escribiremos una rutina llamada lz'neadel. Para hacerlo:

2800 LET inex = 1: LET iney = O: LET longitud = O


2810 FOR y = 62 TO 138
2820 FOR x = 142 TO 198
2830 IF POINT (x,y) THEN GOSUB busealon
2840 I F longitud = 2 THEN PLOT INVERSE 1; x - 1, Y
2850 NEXT x
2860 NEXT y

Este segmento de codificación simplemente busca el comienzo de las


líneas horizontales. Cuando encuentra una, llama a buscalon para que
le diga la longitud que tiene. Si tiene dos elementos de longitud , se
borra uno de los pixels.

~ Ha abandonado la investigación La Estupidez


sobre Inteligencia Artificial Artificial
para dedicarse a algo más
tangible

~~
145
PROCESO D E IMAGEN

Tendremos que repetir esta operación ahora en dirección vertical y


utilizaremos buscalon de nuevo, así que hay que pasarle la información
sobre la dirección de la búsqueda de incx y incy:

2870 LET inex = o: LET iney =-1


2880 FOR x = 142 TO 198
2890 FOR y = 138 TO 62 STEP-1
2900 I F POINT (x,y) THEN GOSUB busealon
2910 I F longitud = 2 THEN PLOT INVERSE 1; x,y +1
2920 NEXTy
2930 NEXT x
2940 RETURN

buscalon (3000)

3000 LET longitud = 1


3010 LET x = x + in ex
3020 LET Y = Y + iney
3030 IF NOT POINT (x,y) THEN RETURN
3040 LET longitud = longitud + 1
3050 GOTO 3010

Esto es más que suficiente. Incrementa simplemente la longitud hasta


que encuentra un pixel vacío y vuelve. La figura 10.5 muestra su aplica-
ción para nuestra figura previamente adelgazada. Verá que el resultado
no es del todo perfecto. Existe una pequeña cruz cerca de la parte baja
de la curva. Vea la sección de proyectos donde encontrará como me-
jorarlo.

r-'--
L·----·· -.....
1,

_._--_. "
...

Otras técnicas de proceso de imágenes

He presentado las rutinas de este capítulo como entidades más o


menos individuales. Ha sido una política intencionada toda vez que
146
PROCESO DE IMAGEN

cada una de ellas consume mucho tiempo para ejecutarse en BASle.


Pretenden darle indicios sobre el tipo de técnicas empleadas.
Se podría escribir otro libro que tratara solamente de las técnicas
para proceso de imágenes, pero debido en parte a la lenta respuesta del
Spectrum y porque tenemos otras áreas interesantes que explorar, me
conformaré con sugerirle algunas ideas más como proyectos.

Proyectos

1. La rutina líneadel tiene un error. Si una línea de dos pixels se conecta con
otras dos líneas así:

uno de los pixels se destruye y se pierde la conectividad. Escriba una rutina


llamada conectar que devuelva un valor llamado nocon que sea un 1 si no
existe conexión y cero en caso contrario. Entonces la línea 2840 (por
ejemplo) se convierte en:

2840 I F longitud = 2 THEN GOSUB conectar


IF noc,;,n THEN PLOT INVERSE 1; x - 1, Y

Ahora podemos desembarazarnos de la cruz de 3 X 3 probando qué longi·


tud será 2 ó 3.
2. Escriba una rutina que convierta la imagen en alta resolución que se ha
procesado en una retina de 8 X 12 para que la reconozca el programa del
capítulo 6.
3. Una alternativa para describir una imagen por su esqueleto consiste en eli-
minar los detalles mostrando solamente sus bordes. Est a técnica es útil
para el análisis de escenas (tal como la visión de una sala por el ojo de un
robot). Intente inventar un algoritmo para que haga esto.
4. Una faceta importante de la percepción visual humana (y animal) es el
hecho de que normalizamos la imagen sobre nuestras retinas. Es decir, aun·
que se encuentre lejos un objeto, le vemos con la misma fonna con inde·
pendencia de que el tamaño de la imagen pueda variar terriblemente .
Invente una rutina que , dada una imagen, la agrande para rellenar una
"casilla" estándar sin distorsionar el resultado.

147
11
Proceso de la información
y modelos biológicos
Comenzamos este libro con una exposición sobre la naturaleza de la
inteligencia para ver si en determinadas circunstancias un sistema de
ordenador se podía considerar capaz de ser artificialmente inteligente.
Tratamos esta idea de inteligencia de modo puramente cualitativo (en
realidad, no estamos involucrados con el ordenador IQ o el MENSA,
¿o si lo estábamos?) y como recordará en todas nuestras discusiones,
daba la impresión de que medíamos o evaluábamos la inteligencia com-
parándola con el comportamiento equivalente. en los seres humanos.
Todo esto nos sugiere que consideramos a los seres humanos como los
definidores de la inteligencia o como los representantes del modo más
avanzado de comportamiento inteligente. Esto a su vez implica suponer
que el cerebro humano (que, al menos en este contexto podemos con-
siderar como un cierto tipo de ordenador biológico) es el sistema de
ordenador más apropiado y más capacitado para ejecutar procesos in-
teligentes.
Entonces nos podemos preguntar ¿por qué, a la vista de estas afirma-
ciones, no intentamos copiar la forma en que el cerebro humano lleva
a cabo su proceso para construir así un sistema de ordenador inteli-
gente? Esta es una pregunta engañosamente simple que tiene muchas
respuestas interrelacionadas, una de las cuales se relaciona con la clara
complejidad del cerebro y con el hecho difícilmente inseparable de que
sólo se conocen parcialmente los mecanismos del cerebro. No es éste el
lugar más adecuado para adentrarnos en una discusión pormenorizada
sobre este tema pero, por todo ello, es una cuestión de gran trascenden-
cia y en el curso de los años se han llevado a cabo intentos para tratar
de imitar la forma en que el cerebro ejecuta sus asombrosas proezas de
cálculo. Aunque hay que decir que dichos intentos se han enfocado
generalmente sobre áreas de problemas específicos, se han obtenido im-
148
PROCESO DE LA INFORMACION y MODELOS BIOLOGICOS

portantes logros y además hoy día existe una buena voluntad, por parte
de los investigadores, de reconocer el valor de una aproximación inter-
disciplinaria a la ciencia del cerebro. Así, los psicólogos, los fisiólogos,
los matemáticos, los informáticos e incluso los ingenieros electrónicos,
se han dado cuenta, en algún momento, de que tenían que contribuir
de alguna manera al avance sobre el conocimiento del ordenador más
complejo y mejor dotado que existe.
En este capítulo haremos un breve examen sobre una posible solu-
ción para tratar de imitar las propiedades de cálculo del cerebro. Como
verá, utilizamos algunos términos con cierto grado de libertad. Este
examen 10 realizaremos a un nivel muy bajo (en el sentido de concen-
trarnos sobre las propiedades de lo que quizás es la unidad más básica
aunque gobernable de la estructura maravillosa del cerebro) a fin de ver
cómo podemos describir sus propiedades de proceso de forma que se
preste a una comparación con los sistemas de cálculo artificiales.
Antes de comenzar debemos decir que no pretendemos que esta
aproximación nos lleve (o pueda llevarnos) directamente a la implanta-
ción de un procesador artificial "inteligente". Lo que intentaremos
mostrar, en primer lugar, es cómo un sistema así tiende a poseer, en su
propia naturaleza, alguna de las propiedades que pueden suponerse
razonablemente que son la base de la inteligencia (las cuales, en conse-
cuencia, se conectan con algunas de las ideas que se han presentado
anteriormente), y en segundo lugar, intentaremos mostrar cómo pode-
mos comenzar a extraer ciertas características como elementos clave
para el diseño de los sistemas "artificialmente inteligentes".

PIEZA FUNDAMENTAL DEL PROCESO BIOLOGICO

Vamos a intentar percibir lo que acarrea nuestra aproximación y


cómo podemos justificar nuestra metodología. Si estuviéramos inten-
tando aprender algo sobre la estructura fundamental de un muro, por
ejemplo , para poder constuir un edificio con propiedades análogas, po-
dríamos identificar un "ladrillo" como la unidad más pequeña con la
cual nos relacionamos. Probablemente, no nos interesa conocer cómo
están hechos los ladrillos, ni en las propiedades químicas de la arena u
otros componentes; más bien nuestro interés se centraría en las propie-
dades fundamentales del producto ya acabado. Aunque soy consciente
de que esta analogía que me he ingeniado podría llevarnos a una discu-
sión filosófica sin salida, todo lo que quiero sugerir es que una forma de
comenzar a pensar sobre las propiedades de cálculo del cerebro es la de
identificar sus "ladrillos" y comenzar a trabajar a partir de ellos. No nos
haremos demasiadas preguntas sobre cómo trabaja este "ladrillo" bio,ló-
149
PROCESO DE LA INFORMACION y MODELOS BIOLOGICOS

gico en términos de sus principales propiedades biológicas, pero nos


concentraremos sobre la [unción, intentando descubrir solamente las
características operativas que arrojen luz sobre nuestro tema inmediato
de interés.
Sobre la base de esta analogía podemos identificar la célula biológica
llamada neurona como la pieza de construcción fundamental del cere-
bro. Las neuronas se encuentran en muchas formas diferentes, por SU"
puesto, pero podemos pensar en una célula típica (vea figura 11.1) cu-
yas propiedades se pueden describir simplemente como sigue ...
De los

-Axon

';::::=====E:::::': __ A las dendritas

_ _ Sinapsis

Fig. TT.T.-Estructura de una célula neurona biológica.

La célula tiene un conjunto de fibras llamadas dendritas que trans-


portan información a la célula. Una fibra de salida de la célula trans-
porta información sobre su estado actual y es capaz de pasarla a otras
células con las que se encuentra conectada. Puesto que cada célula
podría tener un gran número de dendritas (normalmente alrededor de
10.000) y dado que el cerebro contiene un número enorme de estas
células (probablemente cerca de 10.000.000.000 ó así), se percatará
de porqué el cerebro tiene una gran complejidad y tratar de conocerlo
en todos sus detalles supone un desafío.

150
PROCESO DE LA INFORMAClON y MODELOS BIOLOGICOS

Ahora, desde nuestro punto de vista, es importante darse cuenta de


que la información se transmite por las células neuronas como impulsos
eléctricos. En otras palabras, una célula, en respuesta a algún patrón de
actividad sobre sus entradas (dendritas), puede emitir un impulso de
bajo voltaje que viaja a 10 largo de su fibra (axon) de salida y pasa esta
información a todas las células con las que está conectada. Cuando se
emite un impulso en este forma decimos que la célula "dispara", indi-
cando con este término que existe una actividad de la célula. Sin embar-
go, este disparo es un proceso total-a-nulo, ya que en cualquier instante
el impulso de voltaje aparece o no aparece y no tiene objeto una res-
puesta diferencial o graduada. Una situación análoga sería una en la que
nosotros encendemos o apagamos una luz eléctrica sin posibilidad de un
interruptor de atenuación que nos permitiera ajustar la intensidad. Es
más, la célula no disparará cada vez que reciba algún estímulo sobre sus
dendritas, ya que es preciso que la cantidad total de actividad de entra-
da sea mayor que un nivel residual mínimo (nivel de umbral) antes de
que tenga lugar la activación de la célula.
La otra característica interesante del mecanismo de transferencia de
información es el hecho de que las conexiones (llamadas sínapsís) entre
neuronas (generalmente la unión entre el axon de una neurona y la den-
drita de la siguiente) se pueden activar de dos formas diferentes. Una
conexión llamada excitativa tenderá a incrementar la probabilidad de
que la célula receptora dispare (es decir, produzca un componente aditi-
vo en la acumulación del estímulo total de entrada) mientras que una
conexión inhíbidora tiene el efecto de disminuir la probabilidad de que
la célula dispare (es decir, produzca un componente detractor en la acu-
mulación para alcanzar el umbral de disparo) .

UN PROTOTIPO DE NEURONA

A pesar de que algún lector que tenga un conocimiento real de la


fisiología de una célula se pueda sentir ligeramente ofendido por la sim-
plificación del proceso que presentaremos más adelante, podríamos
argumentar que la descripción ofrecida comprende todas las caracterís-
ticas funcionales importantes del comportamiento de la célula y facilita
la información que necesitamos para observar sus propiedades de cálcu-
lo. Aceptado esto, podemos representar las características básicas de la
célula a este nivel de cálculo de la forma ilustrada en la figura 11.2.
Aquí hemos llamado E (expresado con el signo -+ ) a las entradas excita-
tivas de las células e 1 a las entradas inhibidoras (expresadas con el signo
-o). Si suponemos que una línea que está activa (es decir, que ha recibi-
do o generado un impulso de disparo) puede ser considerada con el
151
PROCESO DE LA INFORMACION y MODELOS BIOLOGICOS

estado "1", es decir, E, 1 ó f = 1 y, de forma análoga, considerar una


línea de señal inactiva como estado "O" (recuerde que estamos repre-
sentado la célula como un dispositivo, disparando o no, esencialmente
binario) podemos resumir la operativa de la célula como sigue:

f=l

si:

pero:

f =O de otra forma

Entradas
excitativas

Em------+I
f = Salida

Entradas
inhibidoras
Las células disparan si (El +É
2 + '" Em) - (1 1 + 12 ... In) ~ T

Fig. 11.2.-Modelo de célula simple.

Hemos descrito la célula en términos de sus parámetros funcionales.


Ahora podemos comenzar a ver ~ómo estas células son capaces de ejecu-
tar tareas de proceso que pueden comprenderse como el cálculo de una
gama de funciones diferentes.
En la figura 11.3 se muestran algunas posibles configuraciones de
células simples. Examine la figura 11.3 (a) a modo de ejemplo. Aquí
podemos ver que en el supuesto de que una o ambas de sus dos fibras
de entrada estén estimuladas (es decir, reciban impulsos de disparo) la
152
PROCESO DE LA INFORMACION y MODELOS BIOLOGICOS

A A

B B
Función OR Función AND
(a) (b)

Fig. 11. 3. -Algunas funciones típicas de una célula.

célula disparará por sí misma, pero cuando ninguna de las fibras esté
activada, la célula permanecerá inactiva. Por otro lado, para la configu-
ración de la figura 11.3 (b), esta célula solamente disparará si sus dos
entradas se estimulan simultáneamente. No le llevará mucho tiempo ver
que estas dos células están calculando respectivamente las funciones
que se presentaron en el capítulo 5 como funciones OR y ANO.
Por lo tanto hemos llegado a la conclusión de que si tomamos una
célula de cálculo modelada con las propiedades funcionales de la neuro-
na biológica podemos describir su comportamiento utilizando ideas,
términos y notaciones que ya conocemos del lenguaje normal de cálcu-
lo. Sin embargo, podríamos ampliar estas ideas considerando algunos
ejemplos de pequeñas "redes" de células interconectadas. Considere,
como ejemplo, la red mostrada en la figura 11.4 (a). Un análisis de esta
red revelará que señalizará cuando una o dos de sus entradas A, B Ye

B ,l.

e
1--------.. f

Fig. 11.4 (a) .

153
PROCESO DE LA INFORMACION y MODELOS BIOLOGICOS

B
Fig.".4(b).

estén activas, pero supnmlra su salida (la dejará inactivada) si las tres
entradas se activan al tiempo. La configuración de la figura 11.4 (b) se
incluye como ejercicio para que pruebe Vd. solo. ¿Qué hace esta red?

UN MODELO DE NEURONA MAS FLEXIBLE

El tipo de neurona que hemos presentado y tratado hasta ahora es


muy limitado y no muy flexible, siendo más usual imitar el proceso de
las neuronas utilizando la versión ligeramente modificada que se ilustra
en la figura 11.5. Existen dos diferencias principales entre esta versión
del tipo de neurona y la anterior. La primera es que aquí hemos intro-
ducido un factor de ponderación (w) que modifica el efecto de una
entrada activada sobre la neurona receptora, de forma que cuanto más
grande es el valor de una ponderación en particular, más importancia
cobra la entrada correspondiente, y cuanto más pequeño es el valor,
menor importancia cobra esa entrada en particular. El segundo cambio
es que ya no necesitamos identificar las entradas especificadas como
excitativas o inhibidoras en su naturaleza, pudiendo seleccionar cual-
quiera de las formas, disponiendo simplemente que una entrada tenga
una ponderación asociada positiva para un efecto excitativo, o negativo
para un efecto inhibidor.

X1--0----
Suma =
X2 ----{W2~----__1 W1Xl + ... T
• • + WnX n .

La célula dispara si Xl wl + x2w2 ... xnw n ;;;¡: T

Fig. 11.5. -Un modelo alternativo de célula.

154
PROCESO DE LA INFORMACION y MODELOS BIOLOGICOS

Para esta verSlOn del tipo de neurona, podemos utilizar la siguiente


expresión para describir su operación :

f =1
si:

W¡X¡ +W2X2 + ... +wnx n ~T

y:

f = O en caso contrario.

Esta es una versión del modelo más clara que la que tomamos en un
principio.
Por ejemplo, podemos realizar una red aprendizaje (si quiere expre-
sarlo Vd. así), cambiando los valores de las ponderaciones y por supues-
x.--_ ·

x.---~ Suma T= l

x,--0------~ Función OR
(a)

x. - - -

x. - _ Suma T=3 f-----_. f

t7\
x, - - ____--;\!.I)---- - /'
Función ANO
(b)

x.--0-
x. (3 ))-------~ Suma T=6

x, ( 2 )f-------
Una función más compleja ·
(e)
Fig. 11.6. -Realización de las funciones de una célula.

155
PROCESO DE LA INFORMACION y MODELOS BIOLOGICOS

to, es posible obtener funciones de cálculo diferentes diseñando confi-


guraciones de células diferentes. Por ejemplo, en las configuraciones que
se muestran en la figura 11.6 (a) y (b) aparecen de nuevo las funciones
OR y AND respectivamente , mientras que la figura 11.6 (c) muestra un
sistema que ... bueno, ¿qué es lo que hace?

Sin embargo, existe otra forma de examinar este modelo que puede
ser mejor comprendida si consideramos un ejemplo específico. Por sen-
cillez, escogeremos una célula que tenga exactamente dos fibras de
en trada, como se muestra en la figura 11.7. Primeramente podemos
examinar de nuevo las expresiones que determinan si la célula disparará
para un patrón en particular de estímulo de entrada. En este caso, la
ecuación general presentada anteriormente se reduce a la siguiente ex-
presión específica:

f=1

si:

y:
f = O en caso contrario.

X1 -e-------..:ar-----I~I-----.. f

X2 - - '"oe------',
Fig. 11. 7.-Ejemplo de una célula generalizada de dos entradas.

En segundo lugar, podemos dibujar una representación del "espacio


de entrada" con una especie de gráfico con Xl y X2 como ejes (figura
11.8). Vemos que de esta forma cualquier patrón de estímulo en parti-
cular (es decir, ambas entradas activas, Xl activa con X2 inactiva, etc.)
correspondería a un punto específico en esta representación bidimen-
sional. En realidad, en este caso, debido a la naturaleza binaria asumida
de la actividad de la neurona para estos puntos, solamente puede existir
un equivalente con los puntos (Xl ,X2) = (0,0) ó (0,1) ó (1,0) ó (1,1).

156
PROCESO DE LA INFORMACION y MODELOS BIOLOGICOS

W1Xl + W2X2 = T

,. te ~X2
(X1X2) =(11,'" (fl, 1)

Fig. tt.B. -Espacio de entrada con función discriminantr!.

Pero si ahora examinamos nuestra expresión anterior en términos de


las condiciones requeridas para definir la línea que divide los estados de
disparo y no disparo de la célula, vemos que ésta corresponde a la ex-
presión escrita :

W 1X~ + w 2 X2 = T
Así pues, podemos dibujar esto sobre los ejes que definen nuestro
espacio de entrada como antes y ver que la expresión da lugar a una
línea recta que divide el espacio en dos regiones. Ahora, un punto dado
en el grafo (correspondiente a un patrón particular de estímulo sobre
las entradas) generará un estado de disparo/no disparo de la célula con
arreglo al lado de la línea donde cae el punto. Lo más importante de
todo es que la posición de la línea viene determinada por las pondera-
ciones w 1 y w 2 (también, por supuesto, por el valor de T , pero si quere-
mos, podemos considerarlo fijo para todas las células).
Verá ahora porqué hemos desarrollado el argumento de esta forma.
Para el descubrimiento que hemos realizado (examine de nuevo la últi-
ma ecuación que escribimos) al modelar la célula básica relacionada con
el cálculo biológico, volvemos a una descripción de sus propiedades de
157
PROCESO DE LA INFORMACION y MODELOS BIOLOGICOS

proceso que corresponde exactamente al modo en que formulábamos


en el capítulo 3 una aproximación al reconocimiento de patrones senci-
llos. La única diferencia consiste en que hemos restringido nuestros des-
criptores de patrones a valores binarios. La otra característica importan-
te del tipo de descripción que tenemos aquí es, por supuesto, que la
idea de aprendizaje (es decir, la adaptación de un patrón de comporta-
miento o el cambio de una función de cálculo como aparecería aquí)
corresponde en principio al proceso del cambio de la función de las cé-
lulas individuales. Esto, a su vez, corresponde en nuestro modelo al
cambio de los valores dados a las ponderaciones de entrada (asumiendo
que fijamos el umbral de la celda), por lo cual obtenemos un mecanis-
mo con el cual modelar la adaptación en una red de células.
Esta aproximación al modelado de las células de las neuronas es ins-
tructiva por otra razón, ya que provoca ciertas preguntas interesantes e
importantes sobre el tipo de cálculo que puede darse en tales redes. Por
ejemplo, en el supuesto anterior yo no pienso que ni el lector matemáti-
camente más impuesto sea capaz de encontrar un conjunto de valores
para w 1, Y w 2 tales que la célula dispare cuando una de las fibras de en-
trada solamente (no ambas) sea activada, pero que permanezca inactiva
cuando ambos canales de entrada portan la misma señal (ambas activas
o ambas inactivas a la vez) . Si Vd. piensa que puede resolver este proble-
ma, probablemente se hará famoso. Sin embargo, es más importante,
que se pregunte a sí mismo ¿por qué surge esta dificultad? A modo de
ejercicio , trate de descubrir cómo se podría llevar a cabo el cálculo des-
crito , pero de otra forma alternativa, sin cambiar la descripción de las
células con las que hemos trabajado.
En este capítulo he tratado de mostrar cómo es posible modelar, al
menos a un nivel funcional básico, la operativa de la pieza fundamental
de construcción de los sistemas biológicos del cálculo. Aunque todos
estamos de acuerdo en que, por más que esforcemos la imaginación ,
todo esto no produce ninguna revelacjón repentina sobre lo que real-
mente es la "inteligencia", ni tampoco descubre el modo más obvio o
avanzado para el diseño y construcción de máq uinas inteligentes, lo que
ciertamente nos aporta es la penetración, el conocimiento de los proce-
sos que subyacen en muchos de los aspectos específicos del comporta-
miento que generalmente consideramos como indicativos de inteligen-
cia. Más importante es quizás, haber demostrado que podemos describir
(aunque no explicar necesariamente en términos del mecanismo real)
muchos aspectos del proceso de las neuronas, utilizando el tipo de técni-
cas descriptivas que son muy familiares para los científicos e ingenieros
de ordenadores. Finalmente, utilizando esta aproximación, hemos visto
cómo, a pesar de que comenzamos desde un punto de vista muy distin-
to, hemos vuelto a las exposiciones presentadas en el capítulo 3, demos-
158
PROCESO DE LA INFORMACION y MODELOS BIOLOGICOS

trando que algunas de las funciones importantes de las redes semejantes


a las de las neuronas dan origen, de forma natural, a las propiedades de
proceso fundamentales en actividades inteligentes básicas, tales como el
reconocimiento y la clasificación de los patrones de estímulo.
En término de arquitectura, el tipo de sistema de cálculo descrito en
este capítulo está mucho más próximo al procesador "inteligente" bien
conocido por todos, que a un ordenador digital convencional. Quizás
por esta razón es importante que no caigamos fácilmente en la forma de
pensar que asume que el ordenador digital en su forma actual facilitará,
en última instancia, las respuestas a todas las preguntas que tratamos de
buscar sobre la inteligencia y el diseño de una generación de máquinas
inteligentes.

159
12
Breve examen de la anatomía
del ordenador
Si volviera a repasar todas las anteriores páginas de este libro quizás le
llame la atención un hecho destacable. Supongo que estoy exagerando
realmente, porque a menos que esté errado, el hecho al que me refiero
es muy probable que no haya pasado desapercibido para la mayoría de
los lectores y quizá para la mayor parte de la comunidad de usuarios de
ordenadores.
Pero , ¿cuál es este hecho? Simplemente que en todo lo anterior-
mente expuesto hemos asumido que el ordenador digital convencional
es el dispositivo de cálculo más apropiado (probablemente el único)
para la apliacación a tareas de inteligencia artificial. El hecho de haber
suscitado este tema, probablemente le hará desconfiar, por supuesto; en
particular puede que ahora esté preguntándose cosas como :

¿Significa que un IBM pe sería mejor que un Spectrum ?


¿Existe otro tipo de ordenador que yo podría haber utilizado?
¿ Qué razón hay para pensar en otras alternativas cuando a lo largo
de todo el libro se ha tratado de explicar cómo utilizar elordena-
dor convencional para la inteligencia artificial?

.
¿ Tiene este hombre la suficiente experJencia práctica?
... y quizás otras más.

Permítame que le diga antes de nada que estaría Vd . en lo cierto al


suponer que el ordenador digital convencional ha sido, todavía es, y
probablemente continúe siendo utilizado para el tipo de tareas que
hemos discutido hasta ahora. Sin embargo, parece una buena idea al
finalizar este libro presentarle otras posibilidades. Comencemos por exa-
minar algunas conclusiones y luego , por medio de un ejemplo anterior-
mente mencionado, tratar de sugerir algo más específico .
160
BREVE EXAMEN DE LA ANATOMIA DEL ORDENADOR

REVISION DEL PROCESO DE PATRON

Vamos a ilustrar nuestra discusión considerando el tipo de problema


con el que nos podemos encontrar al manipular patrones que represen-
tan datos visuales. Por ejemplo, la figura 12.1 (a) muestra una represen-
tación del carácter alfabético O en dos dimensiones, pero como puede
ver, el proceso de extracción de este dato de su fuente original (un
sobre de correo u · otro documento, análogo, quizás) ha sido afectado
más bien negativamente por el "ruido" o por cambios aleatorios en el
medio ambiente.
Sería interesante que, antes de in tentar procesar este carácter, pudié-
ramos limpiar un poco su apariencia. Concretamente, algo útil que
podríamos hacer sería intentar eliminar del cuadro cualquier punto
negro aislado (o puntos" 1" en lugar de puntos "O" en nuestra represen-
tación binaria normal). En un desarrollo normal de acontecimientos,
podríamos intentar llevarlo a cabo, desarrollando un programa adecua-
do para un ordenador digital. Brevemente, 10 que haríamos sería exami-
nar cada uno de los ocho vecinos inmediatos (Norte, Noreste, Este,
Sureste, Sur, Suroeste, Oeste, Noroeste) de un punto negro arbitrario
(digamos el punto P) del patrón y calcular si alguno de estos vecinos es
un punto negro. Cualquier vecino negro bastará para salvar de la extin-
ción a ese punto P del cuadro en particular, ya que asumiríamos que
una conexión a otro punto negro indica que P es parte de la informa-
ción importante del cuadro, no ruido de ambiente, pero si P tiene un
juego completo de ocho vecinos todos ellos blancos, tomamos P como
punto de ruido aislado y lo eliminamos (cambiamos a O su valor). Des-
graciadamente, así tendt;íamos que repetir este procedimiento tedioso
para cada punto negro del cuadro, e incluso aunque un punto fuera
blanco tendríamos que efectuar una pequeña comprobación para cer-
ciorarnos de ello.
En una situación práctica, donde probablemente vamos a tratar un
patrón c<;>mpuesto quizás por un mínimo de 64 X 64 puntos (ya veces
muchos más) para llevar a cabo incluso esta simple tarea, tendríamos
que examinar al menos 4096 elementos del cuadro, de la representa-
ción, y realizar un cálculo bastante extenso (incluyendo la búsqueda y
comprobación del valor de ocho vecinos) sobre todos los que sean
negros.
Por supuesto, se percatará de que este procedimiento es muy seme-
jante al tipo de operaciones previas al proceso descritas anteriormente
en el capítulo 10 y además implica el tipo de rutina de "presentación en
ventanas" desarrollado allí para adelgazamiento de patrones . También
recordará que dichas operaciones no eran demasiado rápidas en su eje-

161
BREVE EXAMEN DE LA ANATOMIA DEL ORDENADOR

cución. Recuerde también, que en un ambiente típico de proceso de


imágenes probablemente vamos a ejecutar esta operación además de
otras muchas operaciones y transformaciones potencialmente sobre un
gran número de patrones (es decir, la inspección automática de compo-
nentes en una línea de producción, imágenes médicas, etc.), y verá por-
qué, en los últimos años, los pensamientos se han centrado en las
cuestiones fundamentales sobre si puede ser provechoso considerar
estructuras alternativas de procesos. Alguien puede argumentar que los
informáticos habían estado tanto tiempo esperando resultados que
acabaron contemplando otras posibilidades simplemente para pasar
el rato.
y por supuesto, es inevitable que hayan evolucionado otras solucio-
nes alternativas. En particular, ha surgido un tipo de estructura que
consideramos de interés por dos razones distintas. En primer lugar, por-
que es muy eficaz para reducir la magnitud del problema que acabamos
de describir al obtener mayores velocidades de proceso y, en segundo
lugar, porque esta estructura comporta una más estrecha semejanza con
las estructuras encontradas en el cerebro que con las de un ordenador
convencional. Esto enlaza muy bien con 10 que dijimos en el capítulo
anterior y comoquiera que comenzamos nuestra discusión en el capítu-
lo 1 estableciendo que el cerebro es la unidad de medida de la inteligen-
cia, finalizaremos este libro de forma razonablemente satisfactoria.

UNA ESTRUCTURA DE CALCULO ALTERNATIVA

Examinemos pues un sistema de cálculo que entra dentro de esta cate-


goría más bien especializada. Si tomamos como modelo, como patrón,
el cerebro (si bien debo subrayar que el sistema que vamos a describir
no pretende ser una réplica del cerebro como tal) recordemos que con-

162
BREVE EXAMEN DE LA ANATOMIA DEL ORDENADOR

tiene una célula básica de cálculo llamada neurona, que puede calcular
una función relativamente sencilla, pero que trabajando simultáneamen-
te con otras muchas células semejantes interconectadas produce unos
resultados realmente impresionantes. Ahora conecte esta información
con la observación que hemos considerado en muchos de los procesos
prácticos de patrones. Un patrón ha consistido en un array bastante
regular de puntos y en una operación típica de proceso repetimos en
todos los puntos del array un cálculo muy semejante. Por ejemplo, si
aplicamos al patrón de la figura 12.1 (a) el algoritmo anterior de la
"eliminación del punto de ruido aislado", llevamos a cabo nuestra ope-
ración definida, para cada punto del array para producir el nuevo
patrón de la figura 12.1 (b).

X
X XX X xx X
XXXXXX X XXXXXX
XXXX XXXX XXXX XXXX
XX XXX xx xxx
XX XXX xx xxx
X xx X X XX xx xx
XX XX xx xx
XX X X XXX xx xxx
XX XX xx xx
X XX X xx
X XX XXX xx xxx
X' X X X X X X
XX X XX X
XX XX XX XX
XX X XX XX XX
XX XXX XX XXX
XX X XX XX XXX
X XXXX XXX X XXXX XXX
XXXXXXXXX XXXXXXXXX
XXXXXX X XXXXXX
X XXX XXX
(a) (b)

Fig. 121.-Patrones representando datos visuales.

Agrupe todas estas ideas y será casi obvio sugerir que quizás debería-
mos tomar una célula sencilla individual responsable de un número res-
tringido de operaciones asignando dicha célula como responsable para
cada punto del array. Si bien tendríamos que invertir más dinero en
equipo de procesador (duplicando el número de elementos de cálculo
requerido) podríamos hacer que cada procesador fuera mucho más sim-
163
BREVE EXAMEN DE LA ANATOMIA DEL ORDE NADOR

pIe que un microprocesador de propósito general y, como todas las


células pueden ser idénticas, su fabricación no sería demasiado cara.
¡Piense en lo rápido que podría llevarse a cabo una operación! Esto se
debe a que todas las células pueden trabajar simultáneamente y, por
tanto, cada punto del array podría procesarse al mismo tiempo. Si
escogemos para nuestra célula un diseño y algoritmos de proceso apro-
piados, podemos disponer que, en cada instante, cada célula esté ejecu-
tando la misma operación. Esto puede comportar ventajas enormes a la
hora de programar nuestro nuevo sistema de proceso.
Así pues, nuestro nuevo procesador se asemejaría a lo expuesto en la
ilustración de la figura 12.2, donde tenemos un array (en este caso un
arra y cuadrado, aunque son posibles otras configuraciones) donde cada
elemento es una célula simple de proceso y a 'cada una corresponde
exactamente un punto del patrón a procesar. Esta estructura se co-
noce a veces por el nombre de array iterativo y adopta el principio
de proceso paralelo (donde cada célula calcula simultáneamente,
en paralelo, una función idéntica) en lugar del proceso en serie del
ordenador convencional. Por supuesto, a pesar de haber restringido en

Célula 1 f - - - - - I Célula 2 f--- --I Célula 3

• •

• •

• • • •

Fig. 12.2-Un array.

164
BREVE EXAMEN DE LA ANATOMIA DEL ORDENADOR

cierta medida la disposición de las células en el array (un trazado regu-


lar, correspondencia estrict~ entre un punto del patrón y una célula de
proceso, todas las células calculan una función idéntica, etc.), en princi-
pio, tiene muchas características que identificamos al considerar la
estructura del array iterativo 10 que 10 hace especialmente interesante
para nosotros.

DISEÑO DE LAS CELULAS BASICAS DE PROCESO

Ahora debemos volver a la cuestión del diseño de las células de proce-


so individuales, ya que esto es materia de crucial importancia. Se puede
asegurar que podrían adoptarse muchos tipos diferentes de estructuras
de procesador para las células individuales, pero a fin de ilustrar algunas
características generalmente aplicables, supongamos que dentro de cada
célula tenemos los componentes mostrados en la figura 12.3. Los com-
ponentes principales sedan:

l. La célula tendrá que recibir información relativa al valor actual del


punto con el que está asociado . Esta información pasa a la célula
por la entrada denominada I.

Valor actual
del punto del
patrón

Función Nuevo valor


del punto de
los patrones
u
m
b
Desde las célu- )(
las vecinas
a
I
(T)

F ig. 12. 3. -Diseño de una célula básica de proceso.

165
BREVE EXAMEN DE LA ANATOMIA DEL ORDENADOR

2. Generalmente, una operación sobre un punto del cuadro necesitará


conocer no sólo el valor de ese punto en particular, sino también
los valores de los puntos vecinos inmediatos, que normalmente
serán ocho. Para simplificar el cálculo de la célula, vamos a supo-
ner que tenemos un dispositivo (UMBRAL) que detectará, hacien-
do X = 1, cuando T o más vecinos están almacenando un valor" 1"
(es decir, conectados a puntos negros). Por supuesto, debemos po-
der seleccionar un valor deseado para T.
3. El bloque rotulado "FUNCION" es un dispositivo capaz de detec-
tar cualquiera de las dos entradas X e 1 a fin de calcular el siguiente
valor del elemento patrón asociado a una célula en particular. De-
searíamos poder seleccionar una función apropiada en cualquier
momento, por lo que necesitamos algunas entradas de selección.
Como verá, este dispositivo es muy semejante a los que nos referi-
mos en el capítulo 5.
Por tanto, la "programación" de este array se corresponde con la se-
lección de umbrales y funciones apropiados para transformar en cada
instante el conjunto de puntos de patrones y, de forma exactamen-
te igual que sucedería con programas de ordenador convencionales,
podríamos necesitar varios pasos para llevar a cabo algún proceso
requerido.
Si Vd. está pensando que esta configuración de célula es arbitraria,
volveremos ahora al problema de la "eliminación de ruido" y mostrare-
mos cómo este array puede resolver la tarea.
En realidad, va a ser algo muy sencllo. En primer lugar, establecemos
el umbral T a "1" para asegurar que X se convierte en "1" si cualquiera
de los ocho vecinos de una célula en particular están asociados con un
punto de patrón negro. Solamente X será igual a "O" en el caso de que
todos los vecinos estén asociados con puntos de patrón blancos. Luego ,
seleccionamos nuestra vieja amiga, la función "AND" de la casilla
FUNCION (ya nos hemos encontrado muchas veces con esta función) .
Tomemos una célula específica y veamos lo que sucede al activarla
para que realice su cálculo (esto sucedería generalmente en la práctica
ap1i('~-'do una señal de control al array). Si el punto del patrón asociado
con ... célula es negro (haciendo 1 = 1) y al menos uno de los puntos
vecinos es negro (haciendo X = 1), la casilla de funciones, ahora conte-
niendo la función AND que hemos seleccionado, sacará un "1" (ya que
1 y X son ambas" 1") asegurando así que el punto del patrón asociado
con la célula sigue siendo un punto negro.
Si el punto del patrón es un punto blanco, entonces 1 = O y la salida
de la función AND será "O" con independencia del valor de X, dejando
166
BREVE EXAMEN DE LA ANATOMIA DEL ORDENADOR

blanco el punto. Finalmente, si el punto del patrón es negro (1 = 1) Y


ninguno de los puntos vecinos es negro (haciendo X = O), la salida de la
casilla FUNCION será "O" (blanco) y cambiará el punto del patrón de
negro a blanco.
Recuerde que este procedimiento se ejecutará en cada punto del
array del patrón simultáneamente. Este comportamiento es precisamen-
te lo que se necesita para llevar a cabo el algoritmo de eliminación de
ruidos que hemos descrito, pero con la ejecución de una única instruc-
ción (emitida simultáneamente para todas las células) en lugar de la se-
cuencia de operaciones, con un gran consumo de tiempo, que se reque-
rían cuando intentamos implantar el mismo algoritmo sobre nuestro
ordenador convencional de serie.
Por supuesto que éste es sólo un .tipo de operación, pero es fácil ver
cómo se podrían construir otras instrucciones, particularmente si am-
pliamos un poco las posibilidades de cada célula.
Este capítulo ha demostrado como, con un poco de imaginación,
podríamos presentar una nueva dimensión para la solución de algunos
problemas típicos del proceso de patrones y sugerir una aproximación
más amplia para la construcción de sistemas de proceso "inteligente".
Desde nuestro punto de arranque en la discusión sobre la naturaleza de
la inteligencia en relación con la capacidad humana, hemos pasado por
ejemplos de problemas típicos sobre inteligencia artificial, y ahora
hemos llegado a un punto en el que hemos vuelto a considerar el cere-
bro humano para obtener algunas ideas acerca de la solución de algunos
de esos problemas. Quizás una de las peculiaridades más excitantes de
este área de trabajo reside, en última instancia, en el hecho de que aun-
que los problemas que estamos abordando son fundamentales para las
actividades normales de los seres humanos, son con frecuencia tremen-
damente difíciles de definir con claridad y de forma conveniente para
la solución con ordenador. Por otra parte, cada uno de los problemas
que hemos abordado entra dentro de los límites de una serie de discipli-
nas diferentes y esto en sí mismo es un reto en el campo de la inteligen-
cia artificial.
Confío que con este examen a modo de introducción Vd., el lector,
experimente esta sensación de reto y desee ejercitar su ingenio para
explorar y ampliar estas ideas. Después de todo, eso es seguramente lo
que hace ser tan especiales a los seres humanos; tienen la posibilidad de
ejercitar la inteligencia en el estudio de la propia inteligencia.

167
Apéndice 1: PATREC-
Sistema de Reconocimiento de Patrones
de Red de Aprendizaje

Programa principal

CLEAR 31999
2 LET lilpia=2600: LET editar=2S00: LET copiar=3000: LET lanzar=3200:
LET retin=2400
10 LET ponc=3400: LET tOlabits=2200: LET sacabit=2000: LET and=32012:
LET inici=IOOO: LET enseñar=1200: LET recon=1400:
LET bina=1600:
LET pad=1700: LET ponbit=1800: LET or=32002
20 DI" rfI12,8): DI" cI96,2): DI" nf(32)
30 FOR p=32002 TO 32021
35 READ byte
40 POKE p,byte
45 NEXT P
50 DATA 6,0,33,0,125,126,35,182,79,201,6,0,33,0,125,126,35,166,1';201
"90 60 SUB pone: 60 SUB inici
100 60 SUB enseñar
110 LET nUI=CODE 0$ 11): 60 SUB bina: PRi~~T b$,
120 LET nUI=CODE nfW: 60 SUB bina: :'~INT b$
130 INPUT ".ode";I$
140 IF .f=Ut" THEN 60 TO !OO
150 60 SUB recon
lbO 60 TO 130

169
APENDICE 1: PA TREC-SISTEMA DE RECONOCIMIENTO DE PAT RONES DE RED

inici (1000)

Función: Inicializa el array n$ a nulos.

1000 FOR p=l TO 32


1010 LET n$(pl=CHR$ O
1020 NEH P
1030 RETURN

enseñar (1200)

Función: Acepta una paterna de la retina de visualización y un señaliza-


dor de clasificación. Modifica n$ adecuadamente.

120(1 60 SUB retin


1210 INPUT ·clasificacion(O=no-5,1=5)·;señal
1220 IF NOT señal THEN RElURN
1230 FOR p=1 TO 32
124(1 60 SUB tOlabits
1250 60 SUB ponbit
126(1 NEXT P
127(1 RETlIRN

recon (1400)

Función: Acepta una paterna de la retina de visualización y determina


si es un miembro del tipo de ,reconocimiento.

1400 CLS : LET tot=O


1410 PRINT Al 20,O;"Entre figura a reconocer'
1420 60 SUB retjn
1430 FOR p=l TO 32
1440 60 SUB toaabits
1450 60 SUB sacabit
1460 IF bit >O THEN LET tot=tot+l
1470 NEXT P
1480 IF tot=32 THEN PRINT "5"
1490 RETURN

170
APENDICE 1: PATREC-SISTEMA DE RECONOCIMIENTO DE PATRONES DE RED

bina (1600)

Función: Acepta un entero positivo en num y devuelve su equivalente


binario como una cadena en b$; b$ se garantiza que sea al
menos de 6 caracteres de longitud.

1600 lET b$=""


1610 IF NOT nUI THEN 60 SUB pad: RETURN
1620 lET int=INT (nul/21
1630 lET rea=nu-2hnt
1640 lET b$=STR$ rel+b$
1650 lET nUI=int
lbóO 60 TO 1610
1700 IF LEN b$}=b THEN RETURN
1710 LET b$="O"+b$
1720 60 10 1700

ponbit (1800)

Función: Acepta en s$ una cadena binaria y hace un OR al byte de


orden p de n$ con un "1" en el bit de orden s$ .

1800 pot:E 32000, rlJAL ("SIN "+5$)


1810 POKE 32001,CODE n~lp)
HI20 lET 0$ (p 1=CHR$ IUSR or 1
1830 RETURN

sacabit (2000)

Función: Acepta en s$ una cadena binaria y hace un AND al byte de


orden p con un "1" en el bit de orden s$ . Devuelve el resulta-
do en bit.

2000 POKE 32000,2"'IJAl ("SIN "+5$)


2010 POKE 32001,COOE 'n$(pl
2020 lET bit=USR and
2030 RETURN

171
APENDlCE 1: PATREC-SISTEMA DE RECONOCIMIENTO DE PATRONES DE RED

tomabits (2200)

Función: Forma una dirección binaria en s$ para el elemento de orden


p de n$ utilizando apuntadores en el arra y C.

2200 lET s~=·"


2210 FOR b=1 TO 3
2220 LET fi 1a=3t (p-Il +h
2230 lEl sf=rflclfila,ll,c(fila,21)+s$
2240 NEXT b
2250 RETURN

retin (2400)

Función: Permite al usuario crear o editar una paterna sobre la retina


de visualización.

2400 INPUT "Nuevo,Editar,Salir";o$


2410 IF o$O"n" AND 010"e" A~ID 0$0·5· THEN 60 iD 2400
2420 IF oS="s" lHEN RETURN
2430 IF o$="n" THEN 60 SUB lilpia: GO SUB editar: ' 60 lO 2400
2440 60 SUB editar
2450 60 TO 2400

limpia (2600)

Función: Limpia la retina r$ con ceros ASCII.

2600 FOR y=1 TO 12


2610 lET rfly)="OOOOOOOO"
2620 NEH Y
2630 RETURN

editar (2800)

Función: Permite al usuario editar la visualización actual de la retina


utilizando las teclas de cursor para mover un cursor "#" y la
172
APENDICE 1: PATREC-SISTEMA DE RECONOCIMIENTO DE PATRONES DE RED

tecla EDIT para alterar un pixel entre activado y desactivado_


(Todas las teclas se utilizan sin SHIFT)_
2800 FOR y=1 TO 12 STEP 2
2810 FOR x=1 TO 8 STEP 2
2820 PRINT PAPER 4¡AT y,x;" "¡AT y+1,x+1¡"
2830 PRINl PAPER S¡AT y,x+l¡" "¡Al y+1,x;" •
2840 NEXT x
2850 NEXT Y
28bO 60 SUB cQjliar
2870 LEl ):=1: LET y=1
28S0 PRINl OVER 1¡Al y, ~; ".',ft
2890 LET c$=INKEY$
2900 IF ($='" THEN 60 TO 2890
290S FOR q=l 10 20: NEXT q
2910 IF eODE ($=13 THEN RETURN
2920 IF e$="1" lHEN 60 SUB lanzar
2930 IF c$='S" ANO x)1 lHEN PRINT OVER l¡Al "X¡"AH: LET .=x-l: 60 10 2880
2940 IF d="b" AND y<12 THEN PRINT OVER l¡Al y,x;"''': LET ,=y+l: 60102880
2950 IF eS="7" AND y}l THEN PRINT OVER l;AT y,xi •.•.• : LET y=y-1: 60 10 2880
29bO IF ($="8" AND x(8 THEN PRINl OVER l;Al y,X¡"AH: LET x=xtl: 60 TO 2880
2970 60 TO 2880

copiar (3000)

Función: Copia el estado actual de r$ en la visualización de la retina.


3000 FOR y=l TO 12
3010 FOR x=1 TO 8
3020 IF r1(y,x}="I" lHEN PRINl Al "X;' H

303(1. NEXT x
3040 NEXT Y
3050 RETURN

lanzar (3200)

Función: Lanza un .pixel a r$ ya la pantalla bajo control de edit.


3200 LEl rS(y,x)=STRS NOI VAL r$(y,x)
3210 IF rS(v,x)="l" THEN PRINT Al y,x;" •
173
APENO ICE 1 : PATREC-SISTEMA DE RECONOCIMIENTO DE PATRONES DE RED

3220 IF r~ly,x)="O' THEN PRINT AT y,X¡" •


3230 RETURN

pone (3400)

Función: Inicializar el array c de los apuntadores de coordenadas


en n$_

3400 FOR y=1 TO 12


3410 FOR x=1 10 B
3420 LET cI8tly-ll t x,ll=y
3430 LET cI8'(y-Il t x,21=x
3440 NEXT x
3450 NEXT Y
3460 RETURN

174
Apéndice 2: LlZ-
Implantación Simplificada de Eliza

Programa principal
lO LET ehecksub=2400: LET tri turador=2200: LEl sel ect=2000: LEl barqui 11 0=1800:
LET buscapal=lbOO: LET parada=1000: LET buscaver=1200:
. LET transobj=r400
20 DI" e$(3,17): DI" aS(20,IO): DI" b$(20,lO): DI" q$(4,40}: DI" t$(lO}:
DI" v$(40}
lOO PRINT 'Hola, ¿qu~ quieres decirle?'
110 INPUT sS
115 PRINT INK 4;5$
120 IF sS(LEN sS}=''!'' THEN 60 SUB parada: 60 10 110
130 60 SUB busca ver
135 IF p=1 THEN 60 SUB barquillo: 60 10 110
140 LET o$=sSlp 10 )
150 60 SUB checksub
lbO SO SUB transobj
170 60 SUB select
180 LET kS=rS+o$: 6D SUB triturador: PRINT 1$
190 60 ro 11 (1 ,

parada (1000)

Función: Imprime una cadena al azar de q$.


1000 LET r=iNT IRND*4}+1
1010 PRINT q$(r)
1020 RETURN
175
APENDICE 2: L1Z-IMPLANTACION SIMPLIFICADA DE ELlZA

buscaver (1200)

Función: Acepta una frase o una sentencia en s$ y devuelve en t$ el


verbo más a la derecha (si se encuentra alguno), y un apunta-
dor al verbo en p. Si no se encuentra ningún verbo, al volver
p = l.
1200 LET ep=LEN sS
1210 60 SUB buscapal
1220 LET U=w$
1230 FOR v=1 lO 100
1240 IF U=vSiv) THEN RETURN
1270 HEXT v
1280 LET ep=p-2
1290 IF p>1 THEN 60 ID 1210
130(1 RETURN

transobj (1400)

Función: Acepta el objeto de una frase en p$ y vt que es falso o verda-


dero dependiendo de si es necesaria una transformación de
verbo. El objeto transformado se devuelve en 0$.

1400 LET ep=LEN 0$


1405 LET st=3
1406 IF vt THEN LET st=1
1410 LET 5$=OS: LET D$='"
1420 60 SUB bU5capal
1430 IF w$='un » OR wS=·una • OR wS="alguno • OR wS='algun •
IHEN LET wS="el ': 60 ID 1480
1435 LET U=WS
1440 FOR a=st TO 4
1450 IF t'=a$(a) IHEH LET wS=b$(ai: 60 TO 1480
1460 IF tS=bS(ai lHEN lEl wS=aSla); 60 TO 1480
1470 NEXT a
1480 LET o$=w$+o$
1490 IF p>1 lHEH LET ep=ep-I: 60 10 1420
1500 RETURN
176
APENDICE 2: LIZ·IMPLANTACION SIMPLIFICADA DE ELIZA

buscapal (1600)

Función: Acepta un apuntador en ep al final de una palabra en s$ y


devuelve la palabra anterior en w$ junto con los apuntadores
p y ep a su comienzo y final respectivamente.

lbOQ lEl p=ep-l


Ibl0 IF p}O lHEN IF s$(pIO· • lHEN lElp=p-l: SO 10 1610
1620 lET p=p+l
lb30 lET wS=sS,(p TO epI
1640 RETURH

barquillo (1800)

Función: Genera una frase en 1$ y la imprime cuando buscaver falla en


la búsqueda.

1800 FOR p=2 TO lO


1810 IF oS(p)=· • THEN SO TO 1830
1820 HEXT P
1830 lET r=[NT (RNO'3)+t
1840 lET rS=c$(r)
1850 [F RNO}0.5 THEN lET r$=rS+· sobre porQu~ Vd. ·+oS
18bO lET k$=r$: 60 SUB triturador: PR[NT IS
1870 RETURN

select (2000)

Función: Sejecciona al azar una frase de apertura para una respuesta de


Liz.
2000 lET r=[NT (RNO.41+l
2010 lET r$=dS(r)
2020 RETURH

triturador (2200)

Función: Acepta una cadena en k$ y elimina espacios extraños, devol-


viendo el resultado en 1$.
177
APENDICE 2: LIZ -IMPLANTACION SIMPLIFICADA DE ELIZA

2200 LET U="·


2210 FOR p=l TO LEN k$
2220 IF kS(p)O· THEN LET U=lS+kS(p}: LET espacio=O
I

2230 IF k$(p)=" "THEN LET espacio=espacio+!


2240 IF espacio=! THEN LET 1$=1$.· "
2250 NEXT P
2260 RETURN

checksub (2400)

Función: Comprueba el sujeto de la frase en s$. Si es "yo" o "tu" vt se


pone a verdadero. En caso contrario vf se pone a falso. Si el
sujeto no es "yo", se modifica 0$ apropiadamente.
2400 LET vt=1
24!0 IF s$(p-2)="yo" IHEN RETURN
2420 LET ep=p-2: 60 SUB buscapal
2430 IF w$="tu' THEN lET oS='piensas que yo "+ 0 $: RETURN
2440 IF w$="nosotros· OR w$="nos otras" THEN LET o$="piensais que yo 1

+0$: RETURN
2445 IF w$="ellos DR w$="ellas "THEN LET o$="piensan que yo "+ 0$: RETURN
I

2450 LET o$="pienso que el "+W$+" "+ 0$: LET vt=O:RETURN

LOS ARRAYS "OCU LTOS"

A continuación se relacionan los contenidos sugeridos de los arrays


que se encuentran deliberadamente ocultos para el usuario.
1. v$: Relación de verbos
soy eres es fue fuero. n serán turnar turna turnó
puedo. o.yde seré sería curro. curre co.rrí dejo. deja
hago. hace hice llevo. lleva llevó tengo. tiene tuvo.
digo. dice dije paro. paré parado. vuelco. vuelca vo.lcado.
cierro. cierra abro. abre abierto limpio. limpia limpio tomo.
toma tomo. turnó miro mira mirado co. cin o. co.cina cocinar
canto canta cantó repaso repasa repasó lavo lava lavado
quiero quiere quiso fijo. fija fijó vengo viene vino.
como come comí bebo bebe bebió leo lee hacer
hacemo.s hecho pongo pone tiro tira tiré digo dice
dicho veo ve visto pienso piensa pensado puedo puede
gusto gusta

178
APENDlCE 2 : LlZ-IMPLANTACION SIMPLIFICADA DE ELIZA

2. q$: Frases de parada

Me temo que no puedo responder a éso


No lo sé
No puedo responder a preguntas como ésta
¿Por qué me preguntas esto?

3. a$/b$: Trans.formaciones de verbos irregulares

soy eres
fui fuiste
mi tu
me te

4. c$: Frases de "continuar"


Cuéntame más
Por favor continúa
Prosigue

5. d$: Respuestas de frase inicial


Así que tú
Por qué piensas que
Por qué supones que
Desearía saber porqué tú

179
3: CONOCIMIENTO-
Apéndice
Sistema de Representación
y Recuperación del Conocimiento
Progama principal

10 DIII U(20): DHI a$(50,2,201: DHI d$(201: DIIII$(21: DI" n$(100,20 ):


DI" p(lOO,2): DI" e$(3,20): DI" q(3)
20 LET lenosuno=3200: LET rastreo=3000: LET buscanodo=2BOO:
lET conex=2600: lET hijas=2400: lET ladre=2200:
LET crecer=1000: LET buscar=2000
25 LET pff=l
30 INPUT 'crecer o buscaríc/b)'js$
40 IF s$='c' THEN 60 SUB crecer
50 IF s$="b" lHEN 60 SUB buscar
60 60 TO 30

crecer (1 000 )

Función: Permite que el usuario introduzca tres nodos (madre y dos


hijas) que luego se enlazan a un árbol ya existente.
1000 INPUT ·partes de";e$!1lj'son 'je$(2)j' y 'je$(3)
1010 FOR i=1 10 3
1020 LET q(i)=O
1030 FOR r=1 TO 100
1040 IF n$(r)=e$(i) THEN LET qlil=r:úO TO 1060
1050 NEXl r
lObO NEXT i
1070 FOR i=l 10 3
180
APENDICE 3: CONOCIMIENTO-SISTEMA DE REPRESENT ACION y RECUPERACION

1080 IF q(ilOO THEN 60 TO 1120


1090 LET n$'pffl=e$'il
1100 LET q'i)=pff
1110 LET pff=pff+l
1120 NEXT i
1130 LET p!q!I),I)=q'2)
1140 LET plq(I),21=qI3)
1150 RETURN

buscar (2000)

Función: Permite que el usuario examine un árbol para buscar las co-
nexiones entre nodos específicos.
2000 INPUT "encontrar .adre,hijas,conexion,salidal./h/c!sl";q$
2010 IF q$="." THEN 60 SUB .adre: 60 TO 2000
2020 IF q$="h" THEN 60 SUB hijas: 60 TO 2000
2030 IF q$="c" THEN 60 SUB conex: 60 TO 2000
2040 IF q$="s·, THEN RETURN
2050 60 TO 2000

madre (2200)

Función: Acepta un nodo en d$ e imprime su madre, si existe.


2200 INPUT "encontrar ladre de"jd$
2210 LET t$=dS: 60 SUB buscanodo
2215 IF NOT coinc THEN PRINT "nodo no encontrado·: RETURN
2220 60 SUB lenosuno
2230 IF raíz THEN PRINT "raíz·: RETURN
2240'PRINT .S
2250 RETURN

hijas (2400)

Función: Acepta un nodo en m$ e imprime sus hijas, si las hay.

2400 INPUT "averiguar las hijas de"jd


2410 LET U=IS: 60 SUB buscanodo
181
AP E NDICE 3: CONOCIMIENTO-SIST EMA DE REPRESENTACION y RECUPERACION

2420 IF NOl coiO!: THEN PRINl "nodo no encontrado': RETURN


2430 IF pli,II=O AND pli,2)=O THEN PRINT 'esta es una hoja':RETURN
2440 IF p(i,ll }O THEN PRINT n$ (p(i,1l1
2450 IF pli,2) }O THEN PRINT n$(pli,21)
2460 RETURN

conex (2600)

Función: Imprime la distancia (es decir, el número de ramas) entre dos


nodos de entrada e indica si están en línea directa.
2bOO INPUT 'pri.er nodo';U
2610 60 SUB buscanodo
2620 IF NOT coinc THE" PRINT 'nodo no encontrado": RETURN
2630 LET j=i
2640 INPUT ·segundo nodo'jt$
2650 60 SUB buscanodo
2660 IF NOT coinc THEN PRINT 'nodo no encontrado': RETURN
2670 LET k=i
2680 LET i=j: LET col=l: 60 SUB rastreo
2690 LET epl=a
2700 LET i=k: LET col=2: 60 SUB rastreo
2710 LET ep2=a
2720 IF epl=O OR ep2=0 THEN LET enlinea=l: 60 10 2750
2730 IF a$(epl,1)=a$(ep2,2) THEN LET epl=epl-l: LET ep2=ep2-1: 60 TO 2720
2740 LET enlinea=O
2750 LET distancia=epl+ep2
2760 PRINT "distancia='¡distancia
2770 IF enlinea THEN PRINT "enlinea"
2780 RETURN

buscanodo (2800)

Función : Acepta un nodo en t$ y busca concordancia en el árbol. Si se


encuentra una, devuelve coinc = 1 Y un apuntador al nodo en
i. En caso contrario , coinc= O.

2800 LET coinc=1


2810 FOR i=1 TO lOO

182
APENDICE 3: CONOCIMIENTO-SISTEMA DE REPR ESENTACION y RECUPE RACION

2820 IF n'li)=t' THEN RETURN


2830 NEXT i
2840 LET coinc=O
28~O RETURN

rastreo (3000)
Función: Acepta un apuntador i a un nodo y un apuntador col a un
camino. Crea un camino desde el nodo apuntado a la raíz y
devuelve ésta en aS .
3000 LET a'(I,coll=n'li): LET a=1
3010 60 SUB .enosuno
3020 IF raiz THEN RETURN
3030 LET a=a+ 1
3040 LET a'la,col'=.'
3050 60 TO '3010

menosuno (3200),
Función: Acepta un apuntador i a un nodo y devuelve el nodo en m$ ,
que apunta a it. Si el nodo no está apuntado, devuelve
raíz = l. En caso contrario raíz = O. También devuelve i apun-
tando al nodo anterior.
3200 FOR r=l TO lOO
3210 IF plr,I)=i OR p(r,2)=i THEN LET .'=n$lr): LET raiz=O: LET i=r: RETURN
3220 NEXT r
3230 LET raiz=l
3240 RETURN

183
Indice alfabético

Agrupaciones, 34 Efecto horizonte, 121


AND,49 Eliminación de ruidos, 161
Aprendiendo Mallas, 47 ELIZA,81
Aprendizaje, 47 Escala de grises, 63
Aprendizaje de memoria, 49 Espacio de rasgos, 29
Arbol binario, 99 Esqueleto, 136
Arbol de muebles (representación), 100 Explosivos, 41
Arboles de conocimientos, 98
Array iterativo, 164
Axon, 150 Fonemas, 41
Formantes,42
Fricativos, 41
Bazas, 122 Función discriminante, 30
Funciones de evaluación, 120

Cerebro, 149
Códigos postales, 24 Generador de movimientos legales, 123
Comprensión de la voz, 39 Generalización, 47
Conexión de líneas, 137
Confianza en la clasificación, 33
Conocimiento, 97 Hiperespacio, 31
Conversión de decimal a binario, 54 Hoja, 101

Demonio, 22 Lenguaje artificial, 76


Dentrita, 150 Lenguaje natural, 76
Descriptores, 27
Disparo de células, 151
Distancia, 34 Máscara, 42
Distancia entre, 107 Media, 135

185
INDICE ALFABETICO

Mejora de calidad con ordenador, 132 RAM, 48


Movimientos para-legales, 123 Rasgos, 27
MYCIN, lIS Reconocimiento de patrones, 14
Reconocimiento de patrones-Aplica-
ciones,16
Neurona, 150 Reconocimiento de voz, 39
Nim,118 Reconocimiento óptico de caracteres,
Nodo falso, 99 18
Nodo hija, 107 Redes de células, 153
Nodo madre, 107 Retina, 64
Normalización, 147

OR,55 Semántica, 68
Othello, 122 Simetría, 138
Sinapsis, 151
Sinapsis excitativa, 151
Pandemonium, 22 Sinapsis inhibid ora, 151
Patrón, 27 Sistemas expertos, 114
Pixel, 65
Poda alfa-beta, 129
Proceso de imagen, 131
Proceso en serie, 164
Proceso paralelo, 164 Tablero de juego, 117
Procesador de arrays, 164 Tipos, 29
Producción de voz, 40
PROSPECTOR,115
Pr9totipo de neurona, 151
Puntos finales, 137 Umbral de la célula, 151

186
Libros sobre INFORMATICA publicados por

~ARANINFf!!iJ

BELLIDO. Cómo usar los colores y gráfiCOS del Spectrum


Casete con los pr.ogramas. 1985 ..
Obras generales BELLIDO. KIT de qráflcos para Spectrum 1984 .. ..
BELLIDO. KIT de gráfiCOS (estuche completo con mate-
ANGULO y ZAPATER . IntroduCCión a la Informática. 1986 nal) 1984 ..
BANKS. Microordenadores Cómo funcionan. Para qué BELLIDO. Spectrum Plus Ultra. La enciclopedia del Spec-
Sirven. 1984 ... trum. T. 1 1985 .. ...
GARCIA SANTESMASES Cibernética. Aspectos y ten- BELLIDO. Spectrum. IniCiación al código máquma 1985
dencias actuales. 1980.. BELLIDO. Los trucos del Spectrum. 1986 ..
HUNT. Manual de Inlormátlca básica. 1985 .. ELLERSHAW. Las pnmeras 15 horas con el Spectrum.
SHELLEY. Microelectrónica. 1983 ... 1985 ..
URMAIEV Calculadores analógicos Elementos de simu- ERSKINE . Los mejores programas para el ZX Spectrum.
laclón. 1983 1985 ...
MARTINEZ VELAR DE. El libro del Código máqUin a del
Diccionarios Spectrum (3 Ed,c) 1986
WILLlAMS Programación paso a paso con el Spectrum .
HART. DlCClonano del Baslc. (2 Ed,c) 1985 1985
NANIA Dlcclonano de Informática. Inglés. Francés. Espa-
ñol Mas de 11000 términos 1985. Rústica
NANIA Dlcclonano de Informática. Misma edlc. antenor
Sinclair al
en Cartoné. 1985 FLEETWOOD. Slnclalr OL Guía del usuario. 1985 ..
OLlVETTI. DICCIonariO de Informática. Inglés-Español (6 GALAN PASCUAL. Programación práctica con el Sinclair
Edlc ) 1985 . Ol1985 .
IBM-pe
Hardware (Equipo físico)
MORRILl Baslc deIIBM-PC, IBM PC XT, IBM PC jr 1985
ANGULO. Electrónica digital moderna. (6 Ed,c ) 1985 . PLOUIN . IBM-Pe. Características. Programación. ManeJO.
ANGULO MemOrias de burbujas magnéticas. 1" ecnología (2 Ed,c) 1985
y sistemas de aplicaCión . 1982
ANGULO. Microprocesadores. Arquitectura, programa- Commodore-64
Ción y desarrollo de sistemas . (3 Ed,c) 1984
ANGULO. Microprocesadores. Curso sobre aplicaCiones BATESON. El 64. Más allá del manual T.l 1986 .
en sistemas Industnales. (4 Edlc) . 1985 BATESON . El 64. Más allá del manual T.2. 1986
ANGULO. Microprocesadores. Diseño práctiCO de siste- BISHOP . Commodore 64. Programas prácticos. 1985 ..
mas . (2 Edlc) 1985 MONTEIL. Como programar su Commodore 64. 1.1 . (5
ANGULO. Microprocesadores. Fundamentos, diseño y Edlc) 1986
aplicaCiones en la Industria y en los microcomputado- MONTEll Como programar su Commodore 64.12 . (2
res (4 Ed,c) 1985 ... Edlc) 1986 ..
ANGULO Microprocesadores de 16 Bits El 68000 Y el RAMON. Manefo y programación del Commodore 64.
8086/8088 (2 Ed,c) 1985 .. 1986 ..
ANGULO. Prácticas de microelectrÓnica y mlcrolnlormátl-
ca (2 Ed,c ) 1985 .... Dragón
ASPINALL. El microprocesador y sus aplicaCiones. 1984 MURRAY. Programas educatiVos pará el Dragón 32 .
GARLAND. Diseño de sistemas microprocesadores (2 1985
Ed,c) 1984 ; BELLIDO. Amaestra tu Dragón. Curso de programación
HALSALL Fundamentos de mlcroproc8sadores. 1984 en Baslc para el Dragón. 1985 ..
LEPAPE. Programación del Z80 con ensamblador 1985 WATT y MANGADA Baslc para niños con el microproce-
ROBIN. Interconexión de microprocesadores. (2 Edlc) sador Dragón. (2 Edlc) 1986
1985
RONY. El microprocesador 8080 y sus Interfases. 1984 Atari-520
Spectrum MARTlNEZ VELARDE Atan-520. Fundamentos. 1986
BELLIDO. Cómo programar su Spectrum (7 Edlc). 1985
BELLIDO Cómo usar los colores y los gráficos en el Spec-
MSX
trum. (4 Ed,c) 1985 PEARCE. MSX. Programación báSica. 1985
Lenguajes GAUTHIER. Diseño de programas para sistemas. (5
Edlc) 1985
BELLIDO y SANCHEl. Baslc para estudiantes 1985. HARTMAN. Manual de los sistemas de Información. 1.1
BELLIDO Y SANCHEZ. Baslc para Maestros (2 Edlc) (7 Edlc) 1985
1985 HARTMAN Manual de los sistemas de Información. T.2
BELLIDO, SANCHEZ y RODRIGUEl. Casete con los pro- (7 Edlc) 1985
gramas de Baslc para Mestros 1985 LEWIS. Estructuras de datos. Programación y aplicaCIO-
BURKE. Enseñanza aSlslida por ordenador 1986 nes 1985
CUÑAT Pascal para estudiantes. 1986 .. LUCAS Sistemas de InformaCión. AnáliSIS Diseño. Pues-
CHECROUN Baslc. Programación de microordenadores. ta a punto 1984
(5 Edlc) 1985 POPKIN. Introducción al proceso de datos. 1986
DELANOY. Ficheros en Baslc. (2 Edlc) 1985 RODRIGUEl. Protección de la InformaCión. Diseño de
GALAN PASCUAL. Programación con el lenguale Cobol cnptoslstemas Informáticos. 1986
(4 Ed,c) 1985 SANCHIS. Teoría y construcción de compiladores. 1986
GARCIA MERAYO. Programación en Fortran 77 1986 . SCHMIDT IntroduCCión a los ordenadores y al proceso
LARRECHE. Baslc Introducción a la programación. (5 de datos (5 Edlc) 1985
Edlc) 1985
MARSHALL. Lenguajes de programación para Mlcros
1985
MONTEIL. Pnmeros pasos en Logo (2 Edlc) 1985 Inteligencia artificial
OAKEY Lenguaje Forth para mlcros. 1985
QUANEAUX. Tratamiento de textos con Baslc. 1985 .. ANGULO. VISión artifiCial por computador. 1986
RAMON. 44 Superprogramas en Baslc. 1985
ROSSI. Baslc. Curso acelerado. (5 Edlc) 1985 Robótica
SANCHIS y MORALES Programación con el lenguaje
Pascal. (5 Edlc) 1985 ............... . ANGULO. Robótica práctica Tecnología y aplicaCiones
WATT y MANGADA Baslc para niños. (6 Edlc) 1985 1985
WATT y MANGADA Baslc avanzado para niños (3 Edlc.) ANGULO Curso de Robótica (2 Ed,c) 1985
1985
Varios
Aplicaciones e informática
profesional ESCUDERO (Centro de Investigación UAM-IBM) Reco-
nocimiento de patrones. (Fundamentos teóncos, algo-
ABRAMSON. Teoría de la Información y codificación (5 ntmos y aplicaCiones de la moderna técnica denomina-
Edlc) 1981 da «Pattern Recognltlon ¡ 1977
COHEN Estructura lógica y diseño de programas. 1986 GOSLlNG. Códigos para ordenadores y microprocesado-
DAX CPjM Guía de utilizaCión. MPjM, CPjM 86, Words- res. 1981
tar, Baslc 1986 PANNELL. El microordenador en la pequeña empresa
FLORES Estructuración y proceso de datos (5 Edlc) 1984
1985 PUJOLLE. Telemática. 1985

,,:11""
.', H1~'

'.

También podría gustarte