Sunteți pe pagina 1din 15

Utilização de Técnicas de “Data Mining” para o Reconhecimento de

Caracteres Manuscritos

Juliano Varella de Carvalho† Marcus Costa Sampaio Giuseppe Mongiovi


Departamento de Sistemas e Computação
Centro de Ciências e Tecnologia
Universidade Federal da Paraíba
{varella, sampaio, giuseppe}@dsc.ufpb.br

Abstract

In spite of the growing spread of information technologies based on electronic media, hand-printed
information, such as forms, memoranda, letters, requirements, etc. is still abound. The conversion process of
these stored forms to electronic media has been onerous and unproductive, mainly due to the involvement of
unprepared personnel. This paper presents the results of a pioneer application of data mining technology known
as associative rules, for the automatic recognition of hand-printed characters.

1 Introdução

Apesar da crescente difusão das tecnologias de informação baseadas em mídias eletrônicas,


ainda pode-se constatar a existência de uma quantidade incomensurável de informações "em
papel", como formulários, memorandos, cartas, requerimentos, etc. O processo de conversão
destas formas de armazenamento para a mídia eletrônica tem sido pouco produtivo e custoso,
pois envolve a participação de pessoas, muitas vezes pouco preparadas para o uso de software
especializado, como os editores/processadores de texto. Uma solução para este problema seria
dotar os computadores da capacidade de "ler" documentos, desta forma tornando mais
produtivo e menos oneroso o processo de alimentação dos bancos de dados eletrônicos.
O interesse pela área de reconhecimento de manuscritos não é recente, vindo desde a
origem dos computadores [21]. Atualmente, devido à evolução tecnológica, novas tecnologias
com este fim estão surgindo. Congressos científicos, conferências, simpósios, “workshops”,
livros e outros meios de divulgação estão dando muita atenção ao processamento de
manuscritos. Centros de pesquisa, como o CENPARMI [6] e o CEDAR [5] vêm se
aprofundando no estudo de novas tecnologias de reconhecimento de manuscritos [21].
O processamento de textos manuscritos não é uma tarefa trivial, e isto devido
principalmente à diversidade de maneiras e formas com que os caracteres podem ser escritos:
pessoas diferentes escrevem diferente! Para uma mesma pessoa, a diversidade da escrita
também é um fato. Entre os fatores dessa diversidade, destacamos: o tipo de caneta e papel
utilizado, habilidade, estilo, nível social, educação, origem e o estado psicológico da pessoa.

1.1 Contribuição do Artigo

Existem sistemas que fazem o reconhecimento de caracteres manuscritos utilizando


tecnologias como redes neurais e análise sintática [21], entre outras. Destacamos: leitoras

- Aluno do Mestrado em Informática da UFPB, e bolsista da CAPES.
automáticas de cheques bancários, máquinas automáticas de processamento de códigos
postais para auxiliar as agências de correio, máquinas automáticas para processar todo e
qualquer tipo de formulário preenchido manualmente, etc.
A contribuição do artigo reside na exploração de uma classe de algoritmos de garimpagem
de dados ("data mining"), conhecida por regras de associação [7] [19] [18] [3] [2], para o
reconhecimento de caracteres numéricos manuscritos. Até onde vai nosso conhecimento,
trata-se de uma aplicação pioneira de algoritmos de regras de associação.

1.2 Estrutura do Artigo

O artigo está estruturado como segue. A seção 1 é esta introdução. A seção 2 apresenta
sumariamente duas abordagens para o reconhecimento de caracteres manuscritos. Na seção 3,
introduzimos o processo de descoberta de conhecimento e o conceito de garimpagem de
dados, que lhe é subjacente. O nosso sistema de reconhecimento de caracteres manuscritos é
descrito na seção 4. A seção 5 mostra alguns testes realizados com o sistema, confrontando
seus resultados com os de outros trabalhos. As conclusões e trabalhos futuros são o tema da
sexta seção. O artigo termina com as referências bibliográficas.

2 Trabalhos Relacionados

Existem muitos trabalhos que exploram diversas tecnologias com o propósito de fazer o
reconhecimento de caracteres manuscritos. Restringir-nos-emos à análise sintática e às redes
neurais, as quais serão objeto de comparação com a técnica de garimpagem de dados que nós
utilizamos, com o mesmo fim.

2.1 Análise Sintática

Esta técnica exige um prévio e fastidioso trabalho manual de examinar coleções de


imagens digitalizadas de caracteres como letras e dígitos, a fim de determinar os padrões ou
atributos sintáticos que possam identificar cada um dos caracteres. Os atributos dizem respeito
à topologia e ao desenho das imagens dos caracteres [21]. Dentre eles, temos: o número de
cavidades centrais, à direita e à esquerda; a posição da cavidade no numeral; a sequência de
cruzamento do numeral; a distribuição de pixels na imagem, entre outros.
Dada a imagem digitalizada de um número, por exemplo, o primeiro teste a ser feito
poderia ser o de saber quantas cavidades centrais a imagem possui. Se a mesma apresentasse
duas cavidades centrais, seria reconhecida como o numeral 2, ou o numeral 8. Para decidir
entre os dois numerais, o algoritmo se utiliza de outros atributos sintáticos, como a
distribuição de pixels na imagem.
O algoritmo apresentado em [21] pode ser considerado como uma evolução dos algoritmos
sintáticos para o reconhecimento de caracteres manuscritos, pois obteve melhores resultados
em relação ao seu similar [13]. Permanece, no entanto, a grande barreira a ultrapassar para
melhorar a eficácia dos algoritmos sintáticos, qual seja, a extrema dificuldade de se obter
padrões sintáticos confiáveis.

2.2 Redes Neurais

A área de redes neurais artificiais, desde muito tempo, vem recebendo grande atenção dos
pesquisadores. Especificamente, as redes neurais multicamadas com propagação direta têm
demonstrado uma grande eficácia no reconhecimento de padrões visuais [21].
Em [22], é utilizada uma rede multicamadas com propagação direta para fazer o
reconhecimento de caracteres alfabéticos manuscritos. A camada de entrada da rede é
constituída de um número de nós igual ao número de pixels da imagem digitalizada do
símbolo a ser reconhecido. O número de nós na camada de saída é igual ao número de
caracteres alfabéticos existentes, neste caso 26 (alfabeto inglês, de A a Z).
Nos testes de reconhecimento de numerais manuscritos, em [21], foram criados dois
subconjuntos do conjunto de imagens digitalizadas de dígitos, denominados conjunto de
treinamento e conjunto de testes, respectivamente. O conjunto de treinamento foi utilizado
para realizar o treinamento da rede neural artificial. Ou seja, cada dígito (imagem) foi inserido
na camada de entrada da rede, depois os pesos das ligações da rede foram ajustados de forma
a gerarem na camada de saída o resultado correto [21] [16] [22]. O algoritmo de [17] treinou a
rede (isto é, ajustou os seus pesos). Uma vez a rede treinada, o conjunto de testes lhe foi
submetido para testar a sua capacidade de reconhecer caracteres manuscritos.
Embora as redes neurais apresentem bons resultados quando aplicadas no reconhecimento
de caracteres manuscritos, alguns problemas existem. O tempo de treinamento de uma rede
neural é extremamente longo para a maioria das aplicações de uso prático, como o é o
reconhecimento de caracteres. Há também certos tipos de padrões, como os envolvidos em
séries temporais, que demandam uma grande necessidade de pré-processamento, dada a
complexidade da análise e classificação dos padrões em questão [16].
De acordo com [16] é necessário uma boa escolha dos valores iniciais dos pesos da rede
para diminuir o tempo necessário de treinamento. A rigor, tal tempo pode tender ao infinito.

3 O Processo de Descoberta de Conhecimento

Nesta seção, discutimos o que é chamado de processo de descoberta de conhecimento,


destacando uma das etapas do processo que é conhecida como garimpagem de dados, e um
dos tipos de garimpagem de dados, regras de associação. Descrevemos também um algoritmo
de regras de associação para o reconhecimento automático de caracteres numéricos
manuscritos.

3.1 O que é Descobrir Conhecimento?

Segundo [4], descobrir conhecimento significa extrair, de grandes bases de dados, sem
nenhuma formulação prévia de hipóteses, informações genéricas, relevantes e previamente
desconhecidas, que podem ser utilizadas para a tomada de decisões. Associado à descoberta
de conhecimento, deve existir um processo de descoberta de conhecimento (“knowledge
discovery” – KD)1.
Um grande problema com o processo de KD é a qualidade do conhecimento gerado. Para
ilustrar, se uma cadeia de lojas resolve buscar associações entre os itens que ela vende,
certamente haverá associações entre itens que farão sentido, e outras que não farão [12]. Faz-
se necessário, então, um especialista dos negócios da empresa para avaliar quais são as
associações realmente relevantes para a empresa.
Por último, as associações descobertas precisam ser acionáveis. Em outras palavras, é
necessário que possam ser realizadas ações simples para que o conhecimento gerado seja
traduzido em vantagem aos negócios da empresa [12].

1
- Doravante, processo de KD.
3.2 As Etapas do Processo de KD

O processo de KD é iterativo, cada ciclo da iteração envolvendo várias etapas sequenciais


[8]. A FIG 3.1 mostra a sequência de etapas de um ciclo do processo de KD.

Figura 3.1 – Etapas de um Processo de KD

As três primeiras etapas, seleção, pré-processamento e transformação compõem o que se


chama preparação de dados. A garimpagem de dados é o coração do processo de KD,
situado entre a preparação de dados e a análise e assimilação dos resultados da garimpagem.
A seguir, descrevemos sucintamente as etapas de um ciclo do processo de KD.

• Preparação de Dados [12] [4] [8]


Inseridas nesta etapa estão três atividades: a seleção, o pré-processamento e a
transformação de dados.
À Seleção de Dados: neste instante do processo de KD, e consoante com os objetivos
do processo (que dados garimpar?), são identificadas as bases de dados, e que dados dessas
bases deverão ser extraídos para a garimpagem.
À Pré-processamento de Dados: em geral, as bases de dados existentes não estão
adaptadas para a garimpagem de dados. Exemplificando, vamos supor que se deseje trabalhar
com as idades de clientes de uma empresa, mas estes dados estão em forma de data de
nascimento; isto obriga a realização de um pré-processamento sobre estes dados. Além disso,
como os dados podem vir de várias bases, não necessariamente consistentes, impõe-se
remover as inconsistências e integrá-los, tendo para isso que resolver vários tipos de conflitos
típicos de integração de dados [12]. O resultado desta etapa é, em geral, um arquivo de dados
completamente distinto das bases de dados originais.
À Transformação de Dados: existem diversos algoritmos de garimpagem de dados,
cada um necessitando de uma entrada específica. A finalidade desta etapa é então transformar
os dados pré-processados, de modo a torná-los compatíveis com as entradas dos diversos
algoritmos de garimpagem de dados.
• Garimpagem de Dados
Este passo do processo caracteriza-se pela escolha e aplicação do algoritmo ou
algoritmos de garimpagem dos dados. Entre as principais famílias de algoritmos de
garimpagem de dados, destacamos regras de associação [12] [19] [18] [3] [2], regras de
classificação [12] [4] [11] [10], e agrupamento (“clustering”) [9] [12].
• Análise e Assimilação dos Resultados
Nesta etapa, as seguintes questões devem ser respondidas: o conhecimento gerado é
relevante e acionável? Se a resposta não for satisfatória, então será necessário repetir todo ou
parte do processo de KD.

3.3 Garimpagem de Dados: Regras de Associação

Nesta seção, explicamos o conceito de regras de associação, e um algoritmo que o


implementa.
Uma regra de associação é definida como: “Se X então Y” ou “X ⇒ Y”, onde X e Y são
conjuntos de itens e X ∩ Y = ∅. Diz-se que X é o antecedente da regra, enquanto que Y é o
consequente da mesma.
Um algoritmo baseado em regras de associação consiste em descobrir esse tipo de regra
entre os dados preparados para a garimpagem. Medidas estatísticas revelam a frequência de
uma regra no universo dos dados garimpados. Por exemplo, ao encontrar a seguinte
associação {mercúrio, gaze, esparadrapo} ⇒ {algodão} (0,78), significando que 78% dos
clientes que compram mercúrio, gaze, esparadrapo também compram algodão, o gerente de
uma farmácia pode veicular campanhas publicitárias utilizando estes produtos, dispô-los em
lugares próximos na prateleira, entender o porquê de uma possível queda nas vendas de
alguns dos produtos, entre outras conclusões.
Muitos algoritmos foram desenvolvidos com o objetivo de descobrir regras de associação
entre itens de dados. Citamos: LargeKItemSets [2], Apriori [3], AprioriTid [3], Partition [18]
e Multiple Level (ML-T2L1) [19]. Desses, o mais utilizado é o Apriori, sendo que os demais,
ou são extensões deste ou o utilizam. A seguir, será explanado o algoritmo Apriori.

Transação Gaze Esparadrapo Mercúrio


1 1 1 0
2 1 1 0
3 1 1 1
4 1 1 1
5 1 1 1
6 1 1 1
7 1 0 1
8 1 1 1
9 0 1 1
10 1 1 1
Figura 3.2 – Tabela de transações de venda a clientes.

Vamos considerar um fragmento dos dados de uma farmácia, preparados para a


garimpagem (FIG 3.2). O arquivo é em forma de tabela, com três colunas representando itens
de venda ou produtos. Cada linha da tabela representa uma transação de venda a um cliente, a
primeira coluna da tabela contendo os identificadores das transações. Dada uma transação de
um cliente, o cliente terá comprado gaze, por exemplo, se o valor da coluna Gaze para a
transação for 1, caso contrário ela estará marcada com 0.
O algoritmo Apriori realiza a garimpagem em dois passos: geração e poda. No primeiro, é
feita uma varredura sobre o arquivo, a fim de gerar todos os conjuntos de combinações de
valores de colunas que aparecem no arquivo. No segundo, são considerados apenas aqueles
conjuntos que aparecem no arquivo com uma frequência não menor que um valor mínimo
pré-fixado, são os chamados grandes conjuntos. A medida da frequência de um conjunto X
de valores é chamada de suporte, assim definido:
Nº de registros do arquivo que contêm os elementos do conjunto X
Suporte( X ) = (3.1)
Nº total de registros do arquivo

Quando procura-se descobrir regras de associação, é necessário definir um suporte mínimo


(SupMin) para as regras. Considerando SupMin igual a 0,6, {Gaze} é um grande conjunto
porque seu suporte é 0,9 (em dez linhas, nove têm valor 1), maior que o mínimo, portanto.
Para SupMin igual a 0,6, os demais grandes conjuntos são mostrados nas FIG’s 3.3 (a), 3.3 (b)
e 3.3 (c).

Coluna Suporte Colunas Suporte Colunas Suporte


Gaze 0,9 Gaze, esparadrapo 0,8 Gaze, esparadrapo, mercúrio 0,6
Esparadrapo 0,9 Gaze, mercúrio 0,7
Mercúrio 0,8 Esparadrapo, mercúrio 0,7
(a) (b) (c)
Figura 3.3 – Grandes conjuntos de um, dois e três elementos.

Para cada grande conjunto de itens X, todas as regras com fator de confiança acima de um
mínimo especificado (Cmin) são geradas como: ∀ Y⊂ X,se suporte(X) / suporte (X – Y) ≥ Cmin
então gera a regra X – Y ⇒ Y, onde o fator de confiança de uma regra R: X ⇒ Y, é definido
pela fórmula 3.2.

Nº de registros com X e Y
Confiança ( R) = (3.2)
Nº de registros com X

Corolário1: Se |Y| = 1 e todas as transações tiverem o mesmo valor para o item Y, então
Confiança(R) é igual a 1.
Supondo um fator de confiança mínimo de 0,8 para o nosso exemplo, teríamos como
válidas apenas as regras sombreadas da FIG 3.4.

Regra Fator de confiança


{Gaze} ⇒ Esparadrapo 0,88
{Esparadrapo} ⇒ Gaze 0,88
{Gaze} ⇒ Mercúrio 0,77
{Mercúrio} ⇒ Gaze 0,87
{Esparadrapo} ⇒ Mercúrio 0,77
{Mercúrio} ⇒ Esparadrapo 0,87
{Gaze,Esparadrapo} ⇒ Mercúrio 0,75
{Gaze,Mercúrio} ⇒ Esparadrapo 0,85
{Esparadrapo,Mercúrio} ⇒ Gaze 0,85
Figura 3.4 - Regras com confiança além do mínimo.

O nosso interesse por algoritmos de regras de associação é utilizá-los para resolver o


problema do reconhecimento de caracteres manuscritos. Para tanto, algumas adaptações
precisaram ser feitas, tais como preparação dos dados de entrada e criação de uma nova
medida. Na próxima seção, descrevemos estas adaptações.

1
- Este corolário é utilizado na próxima seção.
Por falta de espaço, e por não serem relevantes aos propósitos deste artigo, as outras
famílias citadas de algoritmos de garimpagem de dados, regras de classificação e
agrupamento, não serão tratadas.

4 O Processo de KD para o Reconhecimento de Caracteres Numéricos Manuscritos

O nosso trabalho consistiu, basicamente, do seguinte: nossa cópia do banco de imagens


digitalizadas de caracteres numéricos manuscritos do CENPARMI, com 17.771 imagens, foi
convenientemente transformada e fragmentada em dois conjuntos (arquivos), conjunto de
treinamento e conjunto de testes. O conjunto de treinamento foi lido pelo algoritmo Apriori
para a geração de regras de associação que são padrões para cada um dos dez dígitos (de 0 a
9)1. O passo seguinte foi testar, com o conjunto de testes, a capacidade do algoritmo Apriori
de reconhecer caracteres numéricos, pela comparação com os padrões de caracteres
numéricos manuscritos estabelecidos no passo anterior.

4.1 Preparação dos Dados

A fase de preparação dos dados consumiu bastante esforço e tempo. A razão principal para
tal esforço é que os arquivos do CENPARMI são geometrica e topologicamente muito
irregulares, enquanto o algoritmo Apriori é extremamente sensível a mudanças de geometria e
de topologia. Assim, foi necessário todo um trabalho de regularização dos arquivos do
CENPARMI, a fim de se obter resultados significativos de reconhecimento de caracteres
numéricos. Os caracteres numéricos manuscritos são representados por matrizes booleanas e o
trabalho de regularização destes caracteres consistiu de: normalização, rotação,
esqueletização, dilatação, suavização e centralização.

• Normalização: é o processo de fazer com que as matrizes de 0’s e 1’s do


CENPARMI, de tamanhos variados, fiquem com um tamanho comum (16 linhas x 16
colunas). O algoritmo utilizado para a normalização é o de [22].
• Rotação: nas bases de dados do CENPARMI, existem dígitos com inclinações mais
ou menos para a direita, e outros inclinados mais ou menos para a esquerda. Fez-se necessário
um algoritmo que girasse todos os dígitos inclinados, colocando-os em pé. Utilizamos dois de
tais algoritmos de rotação. Um deles é o R-Block [22], que se mostrou bastante eficiente na
rotação do dígito 1. Para os demais dígitos, foi utilizado um algoritmo melhorado do R-Block
[1].
• Esqueletização: é o processo de afinamento dos dígitos. De acordo com [21], o
processo de esqueletização procura obter uma réplica estruturada da imagem, preservando as
características estruturais da imagem original. Com a aplicação da esqueletização, são gerados
caracteres com a mesma espessura. O algoritmo utilizado foi o de [15].
• Dilatação: esta transformação dos dígitos tem como propósito deixá-los com uma
espessura maior que a resultante da esqueletização, com o propósito de tornar as imagens de
um mesmo dígito ainda mais semelhantes. O algoritmo que utilizamos [14] deixa todos os
caracteres numéricos com uma espessura de três pixels.
• Suavização: numa imagem digitalizada, as posições marcadas com 1’s denotam o
contorno do dígito. Todavia, muitas imagens, além dos 1’s formando o contorno do dígito,
apresentam também alguns 1’s em posições bem distintas à do contorno (posições que
deveriam estar marcadas com 0 – ver última linha da FIG 4.1 (d)). Este problema surge
1
- Padrões relativamente ao conjunto de treinamento dado.
durante a fase de digitalização dos caracteres, e durante a aplicação dos diversos algoritmos
de preparação dos dados. A suavização procura então eliminar os 1’s fora do contorno. O
algoritmo utilizado para a suavização foi o de [20].
• Centralização: muitos dígitos das bases do CENPARMI estão deslocados para a
esquerda, outros mais à direita, alguns para cima ou para baixo, tudo isso dentro das matrizes
dos caracteres. A centralização procurou ajustá-los na posição mais central possível dentro
das matrizes 16x16. O algoritmo foi projetado pelos autores do artigo, sendo implementado
em Delphi 3.0.

Nas FIG’s 4.1 (a), 4.1 (b), 4.1 (c) , 4.1 (d) e 4.1 (e), são mostradas as transformações
operadas pelos diferentes algoritmos sobre um dígito 0 da base de dados do CENPARMI.
000000000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000
000000000000000000000 0000011111100000 0000001111000000 0000111111000000 0001111110000000
000000000000000001110 0000011111111100 0000011001111000 0001111111111000 0011111111110000
000000000000000011110 0000011001111110 0000010000000100 0001110000011100 0011100000111000
000000000000011111110 0000111000000111 0000010000000110 0001110000011110 0011100000111100
000000000001111111111 0001111000000111 0000010000000010 0001110000001110 0011100000011100
000000000111111101111 0001111000000011 0000010000000010 0001110000001110 0011100000011100
000000001111110000111 0001111000000011 0000100000000010 0011100000001110 0111000000011100
000000011111100000111 0001111000000111 0000100000000010 0011100000001110 0111000000011100
000000111111000000111 0001110000000111 0000010000000010 0001110000001110 0011100000011100
000001111100000000111 0001111110001111 0000011110000100 0001111110011100 0011111000111000
000011110000000001111 0000111000001110 0000001000001100 0000111000111100 0001110001111000
000111110000000011110 0000011110011100 0000001000001000 0000111000111000 0001110001110000
001111100000000111110 0000111111111100 0000001111110000 0000111111110000 0001111111100000
001111000000001111000 0000001111110000 0000000000000000 0000000000000000 0000000000000000
001110000000111110000 0000000000000110 0000000000000110 0000000000000110 0000000000000000
011110000111111000000
011111111111110000000
001111111111000000000
000111111100000000110
000000100000000000000
(a) (b) (c) (d) (e)
Figura 4.1 – Dígito “0” original; Dígito normalizado e rotacionado; Dígito “esqueletizado”;
Dígito dilatado; Dígito suavizado e centralizado, pela ordem.

0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000


0111110000000000 0000000000000000 0000001100000000 0000000000000000 0000000000011110
0111111000001110 0111111111111000 0000001110000000 0000000001110000 0000011111111000
0111111100001110 0000000000011100 0000001110000000 0000000011100000 0001111000000000
0111011110011110 0000000000011100 0000001110000000 0000001111000000 0001110000000000
0111001111111000 0000000000011100 0000000111000000 0000111100000000 0001110000000000
0000000011100000 0000001111111100 0000000111100000 0001111000000000 0000111000000000
0000000111000000 0000011110001110 0000000011111100 0001110000000000 0000111110000000
0000000111000000 0000011100001110 0000000001110000 0001110000000000 0000001111111000
0000000111000000 0001111000001110 0000001111110000 0001110000000000 0000001110111000
0000000111000000 0001110000001110 0000111110111000 0011100000000000 0000111100111000
0000001110000000 0001110000111100 0111111000111000 0011100000000000 0011110011111000
0000111110000000 0000111111111000 0000000000111000 0011100011100000 0011100000111000
0000111110000000 0000000000000000 0000000000011000 0011111111000000 0111100001111000
0000111110000000 0000000000000000 0000000000000000 0000000000000000 0001111111100000
0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000
(a) (b) (c) (d) (e)
Figura 4.2 – Caracteres numéricos irreconhecíveis.

É importante observar que, mesmo depois de todas as transformações feitas, muitos dígitos
ainda ficaram irreconhecíveis ao olho humano. As FIG’s 4.2 (a), 4.2 (b), 4.2 (c), 4.2 (d) e 4.2
(e) ilustram alguns exemplos de dígitos irreconhecíveis (2, 3, 4, 6 e 8, respectivamente). Em
consequência, não se poderia esperar que o nosso algoritmo de reconhecimento, ou qualquer
outro, pudesse reconhecê-los (pelo menos neste contexto, o que é irreconhecível pelo ser
humano, também o é pelas máquinas!).
A conclusão prática é que não poderá haver algoritmo de reconhecimento de caracteres
com eficácia de 100%.

4.2 Reconhecimento de Caracteres Numéricos Manuscritos

O sistema de descoberta de regras de associação consiste em duas etapas. A primeira


baseia-se na obtenção dos grandes conjuntos e foi implementada utilizando-se o algoritmo
Apriori [3]. A segunda etapa consiste na extração das regras de associação a partir dos
grandes conjuntos gerados na etapa anterior. A geração de regras de associação foi
desenvolvida e implementada utilizando-se o ambiente visual de programação Delphi 3.0.
Inicialmente, o algoritmo Apriori foi executado tendo como entrada dez arquivos
preparados como explicado na seção 4.1, denominados conjuntos de treinamento, cada um
deles contendo 250 matrizes do mesmo numeral, gerando regras de associação para cada um
dos dígitos 0, 1, 2, ..., 9.
Na verdade, o algoritmo trabalha com as matrizes de 16 x 16 linearizadas (vetores de 256
posições). Além destas 256 posições, foram criadas mais dez posições (posição “257”, “258”,
..., “266”). Para todos os dígitos 0, a posição “257” é marcada com 1, enquanto que as
posições de “258” a “266” são marcadas com 0. Por sua vez, os dígitos 1 têm a posição “258”
marcada com 1, enquanto que as posições “257”, e “259” a “266” são marcadas com 0. O
leitor pode facilmente imaginar como marcar as posições “257” a “266” para os demais
dígitos.

Posições
1 2 3 4 ... 255 256 257 258 ... 265 266
1 1 1 0 ... 1 1 0 0 ... 1 0
1 1 1 0 ... 1 1 0 0 ... 1 0
... ... ... ... ... ... ... ... ... ... ... ...
0 1 1 0 ... 1 1 0 0 ... 1 0
Figura 4.3 – Parte representativa da tabela com dígitos “8” linearizados

Observando a FIG 4.3, vemos que as posições “2”, “3”, “255”, “256” e “265", marcadas
com 1, apresentam uma grande frequência (suporte), isto provavelmente levará o algoritmo a
gerar a regra {2, 3, 255, 256} ⇒ 265 para o dígito 8.
Vamos dar um outro exemplo, agora considerando um suporte e fator de confiança
mínimos. Seja um conjunto de treinamento de 10 caracteres “0”, com a posição “257” em
todos os dez caracteres marcada com “1”. Para SupMin igual a 0,65, suponhamos que o
algoritmo Apriori descobriu o seguinte conjunto de grandes conjuntos G = { {2,8,9,257}|0,71,
{34,102,257}|0,8, {2,98,257}|0,83 }. Temos então as regras {34,102} ⇒ 257, {2,98} ⇒ 257
e {2,8,9} ⇒ 257 para o dígito 0. Note que, como o consequente é o mesmo em todas as
regras, o fator de confiança (ver seção 3.3) é 1 (ou 100%). Isto conduz à generalização
seguinte: em relação a fatores de confiança, no nosso contexto de reconhecimento de
caracteres numéricos manuscritos, ele é sempre 1 (ou 100%). Na prática, isto significa que
não é preciso se preocupar com fatores de confiança.

1
- O valor 0,7 indica o suporte deste conjunto.
No que diz respeito ao suporte mínimo escolhido para as regras, o valor 0,60 foi o mais
adequado (ver a tabela da FIG 4.4). Qualquer valor maior que este número acarretou uma
diminuição muito sensível do número de regras, em prejuízo do reconhecimento dos
caracteres do conjunto de testes.

Numeral 0 1 2 3 4 5 6 7 8 9
Nº de Regras 254 353 213 219 210 223 212 205 245 219
Figura 4.4 – Número de regras para cada numeral, utilizando-se suporte igual a 0,6

Note que em nosso trabalho, o consequente da regra possui apenas um elemento, porque
desejamos obter para cada dígito as regras que os representem univocamente. Não é de nosso
interesse extrairmos regras com mais de um elemento no consequente, pois isto iria gerar
conflitos no momento de decidir a qual dígito a regra pertence.
Até aqui, a formulação das regras para os dígitos não considerou a seguinte importante
questão: dado um conjunto de regras para um dígito, qual é a importância de cada uma das
regras em relação às demais? Para resolvermos esta questão definimos uma grandeza
denominada peso de uma regra.

4.3 Regras com Pesos

Seja G = { G1, G2, G3, ..., Gn } o conjunto dos grandes conjuntos gerados para um dado
dígito. O peso de cada uma das regras Ri’s extraídas de um conjunto Gi, exprime o quão forte
são as regras Ri’s em relação as demais regras Rj’s (∀j, 1 ≤ j ≤ n e j ≠ i) desse dígito.
Formalmente,
Peso( Ri) =
(Suporte(Gi) − SupMin) (4.1)
(Max(SuporteGi | ∀Gi ∈ G ) − SupMin )
Considerando o conjunto G da seção anterior, o peso da regra R: {34,102} ⇒ 257 é:
(0,8 − 0,65)
Peso(R) = = 0,83
(0,83 − 0,65)

Após a geração do arquivo de regras, notamos que, em muitos casos, um mesmo


antecedente encontrava-se em regras de vários dígitos. Digamos que o antecedente {108,109}
apareça nas regras tanto do numeral 7 como do 9, isto é, {108,109} ⇒ 264 e {108,109} ⇒
266. Poderíamos então concluir que tal regra devesse ser excluída do conjunto, pois estaria
causando um conflito, dificultando a avaliação por parte do sistema. Contudo, a frequência
com que esta regra aparece nestes dígitos pode ser diferente, ou seja, esta regra pode ser muito
mais significativa para o 7, ou para o 9, ou ainda ser de igual força. O peso fornece-nos, então,
a força das regras.
Descobertas, a partir do conjunto de treinamento, todas as regras com seus respectivos
pesos, para todos os dígitos, elas formam um arquivo de regras, que vai ser utilizado na fase
de testes de reconhecimento de caracteres manuscritos.
4.4 Testes de Reconhecimento

Da base de dados do CENPARMI, gerou-se um arquivo de testes contendo 266 vetores de


0’s e 1’s, cada um com 266 posições, para cada dígito (total: 2660 vetores)1. O arquivo foi
organizado da seguinte forma: os primeiros 266 vetores representam 0, os próximos 266
representam 1, e assim até o dígito 9.
Para cada registro (vetor) do arquivo de testes, o sistema varre todo o arquivo de regras.
Encontrando uma regra que casa com o registro lido, o contador do dígito correspondente é
atualizado.
Suponhamos que o dígito que está sendo reconhecido é um 1, e que as regras para todos os
dígitos são as mostradas parcialmente na FIG 4.5, com seus respectivos pesos (entre “#”).

{2} ⇒ 257 #0,60# {8}⇒ 258 #0,80# ... {90,100}⇒ 266 #0,42#
{2,15,102} ⇒ 257 #0,82# {8,32} ⇒ 258 #0,80# {90,105} ⇒ 266 #0,65#
... ... ...
{14,104,200} ⇒ 257 #0,76# {8,32,68} ⇒ 258 #0,45# {91,110,112} ⇒ 266 #0,60#
Figura 4.5 – Conjunto de regras após a fase de treinamento

Caso a regra {2} ⇒ 257 case com o registro lido (isto é, as posições “2” e “257” do vetor
são marcadas por 1), é adicionado no contador do dígito 0 o resultado da multiplicação do
peso da regra (0,60) pelo valor anterior do contador. Da mesma forma, se a regra {8,32} ⇒
258 casa com o registro, então o contador do dígito 1 é acrescentado do resultado da
multiplicação do peso da regra (0,80) pelo valor anterior do contador. No final da varredura
do arquivo de regras, os contadores de todos os dígitos terão um valor, e o dígito testado é
reconhecido como sendo igual ao dígito cujo contador tem o maior valor.
De um modo geral, o algoritmo será tão mais confiável quanto mais frequentemente o
dígito testado seja reconhecido como sendo igual ao dígito cujo contador tem o maior valor.
Visando uma melhoria dos resultados, estamos investigando um novo processo de
atualização dos contadores.

5 Avaliação Experimental

Em nossos experimentos, o conjunto de treinamento foi constituído de 2500 caracteres


(vetores), sendo 250 caracteres para cada dígito, enquanto o conjunto de testes foi composto
de 2660 caracteres, sendo 266 caracteres de cada dígito. Todos os dados foram preparados a
partir da base de dígitos numéricos manuscritos do CENPARMI. Na TAB 5.1 são mostrados
os resultados do nosso experimento, e sua comparação com os resultados dos algoritmos de
[13] e [21], de análise sintática, e com o trabalho de [21], utilizando algoritmo de redes
neurais [17].
A TAB 5.1 mostra os resultados em percentuais destes testes. Eles ilustram a percentagem
de caracteres que foram reconhecidos corretamente durante a fase de teste. Por exemplo, o
valor 95,48%, da quinta coluna, significa que 95,48% dos 266 caracteres 0 testados foram
reconhecidos pelo sistema como 0, ou seja, corretamente. Os 4,52% caracteres restantes não
foram reconhecidos corretamente, isto é, foram confundidos com os outros numerais
existentes (ver TAB 5.2).

1
- Recordemos que os arquivos de treinamento e testes são disjuntos.
Numeral Algoritmo Algoritmo Redes Regras de Melhor Desempenho
sintático sintático neurais associação4
[13]1 [21]2 [21]3
0 71,80 71,80 81,87 95,48 Regras de associação
1 92,48 88,34 87,17 100 Regras de associação
2 18,04 68,04 54,33 65,08 Algoritmo sintático[21]
3 18,42 58,64 75,85 60,24 Redes neurais
4 23,30 68,42 88,68 79,21 Redes neurais
5 0 65,03 75,09 63,15 Redes neurais
6 0,37 63,15 83,02 79,32 Redes neurais
7 4,13 67,29 39,62 78,03 Regras de associação
8 45,48 58,64 69,81 60,13 Redes neurais
9 30,45 54,13 69,05 75,96 Regras de associação
Tabela 5.1 – Comparação dos resultados do nosso trabalho com outros métodos (em
percentagem).

Fazendo-se uma análise comparativa entre os resultados do nosso trabalho e do algoritmo


de [13] percebe-se claramente que o reconhecimento de caracteres numéricos manuscritos
utilizando regras de associação mostrou-se muito mais eficiente que o algoritmo sintático,
pois para todos os dígitos, nosso trabalho obteve um reconhecimento com um percentual bem
maior.
No trabalho de [21] foi implementado um algoritmo sintático baseado no algoritmo de
[13]. Todavia foram acrescentadas melhorias ao algoritmo e o resultado do reconhecimento
está demonstrado na terceira coluna da TAB 5.1. Confrontando estes resultados com o sistema
baseado em regras de associação vemos que este último obteve um melhor desempenho para
os dígitos “0,1,3,4,6,7,8,9”. Porém não conseguiu reconhecer melhor os numerais “2,5”.
O reconhecimento de caracteres manuscritos, realizado a partir de análise sintática,
depende essencialmente de um especialista humano, pois é ele que vai extrair as
características dos dígitos. Enquanto isso os sistemas baseados em redes neurais e em regras
de associação independem do ser humano, as características dos dígitos são “encontradas”
automaticamente, durante a fase de treinamento, através do ajuste de pesos no primeiro
sistema e da geração de regras no segundo. Estes sistemas que possuem uma fase de
treinamento mostram-se mais eficientes, de maneira geral, que o sistema de análise sintática.
No trabalho de reconhecimento de caracteres manuscritos utilizando redes neurais
implementado e testado em [21] foi utilizada uma base de treinamento de 3000 caracteres e
guardados para a fase de testes 2660 caracteres. Fazendo-se uma análise comparativa entre o
nosso sistema e o sistema de reconhecimento baseado em redes neurais, chegamos a
conclusão que o reconhecimento dos dígitos “0,1,2,7,9” através do uso de regras de
associação é mais eficiente que através do uso de redes neurais. Para os demais dígitos, a rede
neural obteve um melhor desempenho. Estes melhores resultados da rede neural refletem que
o treinamento da mesma mostrou-se mais eficiente, ou seja, gerou padrões, através do ajuste
dos pesos, mais significativos que os padrões (regras) gerados pelo sistema de regras de
associação.
O problema dos caracteres que não são reconhecidos corretamente, utilizando-se regras de
associação, é determinado pela grande dependência do sistema, com relação as posições do

1
- resultado dos testes utilizando o algoritmo sintático desenvolvido por [13].
2
- testes utilizando o algoritmo sintático desenvolvido por [21].
3
- testes com uma rede neural em [21].
4
- testes utilizando o sistema baseado em regras de associação.
contorno do dígito na matriz do numeral, ou seja, o padrão de um dígito é determinado pelas
regras geradas durante o treinamento e baseiam-se nas posições dos 1’s. Portanto, se um
dígito de teste estiver um pouco deslocado ou um pouco diferente do normal, o sistema
encontrará dificuldades em fazer o reconhecimento.
Observando-se a TAB 5.1 constatamos excelentes resultados do sistema de regras de
associação no reconhecimento dos dígitos 0 e 1. Isto acontece porque tais dígitos não
apresentam grandes variações nos conjuntos de treinamento e teste. Por este motivo, durante a
fase de treinamento do 1, por exemplo, são geradas um bom número de regras que aparecem
com grande frequência no dígito.
Na TAB 5.2 estão ilustrados os resultados obtidos, durante a fase de teste, com o sistema
de regras de associação, além de informações sobre quanto porcento dos caracteres de um
determinado numeral foram reconhecidos corretamente e os conflitos no reconhecimento dos
dígitos.
Analisando-se a coluna do numeral 5, notamos que, embora a maioria dos caracteres 5 de
entrada (63,15% dos 266 caracteres de teste) foram reconhecidos corretamente, há uma
grande proporção (18,04%) destes caracteres que foram reconhecidos como se fossem o
numeral 3. Tais números levam-nos a observar que existe uma semelhança nos padrões
gerados, na fase de treinamento do sistema, entre os dígitos 5 e 3, provocando erro no instante
de avaliação do sistema. Assim, um estudo de todas as regras e seus respectivos pesos,
geradas na fase de treinamento do sistema, deve ser realizado, a fim de eliminar o máximo
possível de conflitos (como no caso do 5 e 3). Notemos que o sistema de regras de associação
permite uma fácil interação com as regras geradas (com o padrão extraído para cada dígito), o
que não ocorre nas redes neurais, já que o ajuste dos pesos realizado é obscuro.

NUMERAIS DE TESTE
REC1 0 1 2 3 4 5 6 7 8 9
0 95,48 0 2,52 0,60 7,19 0,37 4,13 0,37 1,12 11,27
1 0 100 12,90 0 0,95 0 2,66 0,31 4,81 1,12
2 0 0 65,08 9,63 6,76 1,12 1,12 7,22 8,27 2,66
3 0 0 1,57 60,24 0 18,04 1,12 0,37 1,50 0
4 0,37 0 1,89 0 79,21 1,50 0,37 1,31 6,39 3,75
5 1,50 0 0,63 16,86 0,23 63,15 11,27 1,12 2,52 1,12
6 1,50 0 3,17 0 0,54 8,27 79,32 0 5,49 0
7 0 0 7,52 7,22 0,25 0 0 78,03 1,50 3,75
8 0 0 1,89 4,81 0,25 7,51 0 0 60,13 0,37
9 1,12 0 2,83 0,60 4,62 0 0 11,27 8,27 75,96
Tabela 5.2 – Tabela contendo a percentagem de caracteres do arquivo de teste que são
reconhecidos para o “0”, “1”, “2”... “9”

Observando-se o desempenho de todos os métodos comparados até então, podemos


perceber claramente que nenhum método obteve melhor resultado em todos os dígitos (TAB
5.1). A última coluna da TAB 5.1 revela qual é o melhor método de reconhecimento para um
determinado numeral.
Diante destes resultados e de melhorias a serem feitas no sistema de reconhecimento de
caracteres numéricos manuscritos, cremos que as regras de associação virão a ser tema de
grande interesse no reconhecimento de padrões não só de dígitos, mas também de letras,
figuras geométricas, símbolos, palavras, etc, visto que o processo de reconhecimento é o
mesmo.

1
- Dígito reconhecido.
6 Conclusões e Trabalhos Futuros

Apesar da crescente difusão das tecnologias de informação, informações “em papel” como
formulários, memorandos e outros documentos continuam abundantes. Seu processo de
conversão para a mídia eletrônica tem se revelado caro e improdutivo, devido principalmente
à intervenção, no processo, de pessoal despreparado. Este artigo teve como objetivo
demonstrar a viabilidade do uso pioneiro da técnica de “data mining”, conhecida como regras
de associação, para o reconhecimento automático de caracteres numéricos manuscritos. A
demonstração consistiu em contrapor os resultados obtidos com essa técnica e os resultados
de duas outras abordagens de reconhecimento de caracteres numéricos, algoritmos sintáticos e
redes neurais.
No geral, regras de associação e redes neurais se houveram claramente melhor que
algoritmos sintáticos, embora algoritmos sintáticos ainda levem vantagem em um caso de
reconhecimento. Regras de associação mostraram-se mais eficientes que redes neurais em
50% dos dígitos. Em consequência, podemos vislumbrar um sistema híbrido de
reconhecimento de caracteres, baseado nos três enfoques, explorando o ‘melhor’ de cada um
deles.
Seguem-se outras vantagens da abordagem de regras de associação.
Regras de associação não levam em conta o tipo de caracteres (numérico, alfabético,
caracteres especiais) a ser treinado e testado. Desta forma, fazer um algoritmo de regras de
associação evoluir para reconhecer qualquer tipo de caracteres, além de caracteres numéricos,
não introduz nenhuma dificuldade adicional no algoritmo em si, apenas o passo referente à
preparação dos dados seria diferente. Esta é uma vantagem enorme em relação aos algoritmos
sintáticos, baseados na geometria e na topologia dos caracteres.
Melhorar ainda mais a acurácia dos algoritmos de regras de associação para o
reconhecimento de caracteres depende, no entanto, da preparação dos dados para os
algoritmos. A razão para isto é a sensibilidade dos algoritmos quanto às posições dos 1’s e
dos 0’s nas matrizes digitalizadas dos caracteres. Sucintamente, se um símbolo (conjunto de
posições com 1´s) estiver um pouco deslocado ou um pouco diferente do ‘normal’ na matriz,
o sistema poderá encontrar dificuldades em fazer o reconhecimento do símbolo, ou associá-lo
a um outro símbolo. Portanto, há necessidade de novos e melhores algoritmos de
processamento de imagens (normalização, rotação, dilatação, etc), a fim de depurar as
imagens para o sistema de reconhecimento.
Reconhecimento de cadeias de caracteres (palavras, números com mais de um dígito), por
meio de regras de associação, depende exclusivamente do processo de preparação de dados,
que deve ser refinado para incluir uma nova etapa, segmentação de cadeias de caracteres.

Agradecimentos Ao Prof. Dr. João Marques de Carvalho e à doutoranda Luciana Veloso,


do Departamento de Engenharia Elétrica da Universidade Federal da Paraíba, pela inestimável
ajuda, sem a qual este trabalho estaria ainda em uma fase embrionária. À CAPES, por
financiar parcialmente este trabalho.

7 Referências Bibliográficas

[1] Adaptações no Algoritmo R-Block de Rotação de Imagens, Departamento de


Engenharia Elétrica, Relatório técnico, Universidade Federal da Paraíba, 1999.
[2] Agrawal, Rakesh; et al, Mining Association Rules between Sets of Items in Large
Databases, SIGMOD 5/93, 207-216, Washington, USA, 1993.
[3] Agrawal, Rakesh; Srikant, Ramakrishnan, Fast Algorithms for Mining Association
Rules, In: 20th VLDB Conference, 487-498, Santiago, Chile, 1994.
[4] Cabena, Peter; et al, Discovering Data Mining from Concept to Implementation,
Prentice Hall PTR, New Jersey, USA, 1997.
[5] CEDAR – Center of Excellence for Document Analysis and Recognition – Buffalo,
USA.
[6] CENPARMI – Center for Pattern Recognition and Machine Intelligence – Concordia
University, Montreal, Canadá.
[7] Fayyad, Usama M.; et al, Advances in Knowledge Discovery and Data Mining, MIT
Press, Massachussetts, USA, 1996.
[8] Feldens, Miguel A.; Castilho, José Mauro Volkmer de, Engenharia da Descoberta de
Conhecimento em Bases de Dados: Estudo e Aplicação na Área de Saúde:
Dissertação de mestrado, Universidade Federal do Rio Grande do Sul, Porto
Alegre, Brasil, 1997.
[9] Freitas, Alex A., Data Mining, In: XIII Simpósio Brasileiro de Banco de Dados,
Maringá, Brasil, 1998.
[10] Mongiovi, Giuseppe, Aquisição Automática de Conhecimento a partir de Exemplos:
Uma Abordagem Pragmática: Tese de Concurso Público para Prof. Titular,
Universidade Federal da Paraíba, Campina Grande, 1992.
[11] Mongiovi, Giuseppe, Uso de Relevância Semântica na Melhoria da Qualidade dos
Resultados Gerados pelos Métodos Indutivos de Aquisição de Conhecimento a
partir de Exemplos: Tese de Doutorado, Universidade Federal da Paraíba, Campina
Grande, 1995.
[12] Mongiovi, Giuseppe, Data mining: Notas de aula, Universidade Federal da Paraíba,
Campina Grande, 1998.
[13] Gomes, H. M., Investigação de Técnicas Automáticas para o Reconhecimento Off-line
de Assinaturas. Master’s thesis, Universidade Federal de Pernambuco, 1994.
[14] Gomes, N. R., Algoritmo Sequencial para Reconhecimento de Numerais Manuscritos
Desconectados Utilizando Redes Neurais, Master’s thesis, Universidade Estadual
de Campinas, Faculdade de Engenharia Elétrica, Departamento de Computação,
1996.
[15] Gonzales, R. C.; Woods, R. E., Digital Image Processing, Addison-Wesley, 1992.
[16] Kovács, Z. L., Redes Neurais Artificiais – Fundamentos e Aplicações, Edição
acadêmica, São Paulo, 1996.
[17] Rummelhart, D.; Hintom; Williams, Learning Internal Representations by Error
Propagation, Parallel Distributed Processing, MIT Press, Cambridge, 1986.
[18] Savasere, Ashok; et al, Na Efficient Algorithm for Mining Association Rules in Large
Databases, In: 21st VLDB Conference, 432-444, Zurich, Swizerland, 1995.
[19] Srikant, Ramakrishnan; Agrawal Rakesh, Mining Quantitative Association Rules in
Large Relational Tables, SIGMOD 6/96, 1-12, Montreal, Canadá, 1993.
[20] Suen, C. Y.; Berthod, M; Mori S., Automatic Recognition of Handprinted Characters
– The State of the Art, Proceeding of IEEE, april, 1980.
[21] Veloso, Luciana R., Reconhecimento de Caracteres Numéricos Manuscritos:
Dissertação de Mestrado, Universidade Federal da Paraíba, Campina Grande, 1998.
[22] Yuceer, C.; Oflaser, K., A Rotation, Scaling and Translaction Invariant Pattern
Classification System, Pattern Recognition, 26(5): 687-710, 1993.

S-ar putea să vă placă și