Subido por Sergio Alejandro Gonzalez Segura

Búsqueda de cadenas usando árboles de decisión

Anuncio
XV Congreso Internacional sobre Innovación y Desarrollo Tecnológico,
2 al 4 de octubre de 2019, Cuernavaca Morelos, México.
Búsqueda de Cadenas en Textos Usando Árboles de Decisión
S. González1,a, J. Ruiz1,b
1
Centro Nacional de Investigación y Desarrollo Tecnológico, Depto. de Ciencias Computacionales
a [email protected], b [email protected]
Resumen— Se presenta un algoritmo para detectar de forma simultánea
múltiples cadenas en textos largos, el cual utiliza árboles de decisión. Se
compara su eficiencia con la de otros algoritmos de búsqueda de cadenas, para
los casos de letras que representan información genética y para texto en
general. Los experimentos demuestran que los árboles de decisión no son
prácticos para detectar o buscar cadenas largas, pero presentan una interesante
alternativa en textos cortos (menos de 8 letras), si no se tiene en cuenta el costo
de la generación de los árboles de decisión.
Los nucleótidos en el ADN sufren algunos cambios o
mutaciones, entre ellos están los reemplazos, inserciones y
supresiones, lo cual crea variantes a una secuencia de
nucleótidos, por lo que en bioinformática es útil la búsqueda
simultánea de varias cadenas.
Por otro lado, los árboles de decisión permiten clasificar
objetos, y existen algoritmos para generarlos automáticamente
usando colecciones de objetos, como el ID3 [15].
Palabras clave. Búsqueda de cadenas, Árboles de Decisión, ID3,
Bioinformática, Comodines.
En este documento se explora utilizar árboles de decisión
para clasificar segmentos de texto en la clase que contienen a
una colección de cadenas, y la clase que no las contienen, lo
que resulta en un algoritmo para detectar o buscar múltiples
cadenas simultáneamente en el texto, con la expectativa de que
realice una menor cantidad de accesos al texto que otros
algoritmos. Una posible ventaja de usar árboles de decisión es
que se pueden paralelizar, ya que cada segmento se puede
procesar en paralelo, además de que aprenden de forma natural
las peculiaridades de las cadenas usadas en su generación o
entrenamiento. El algoritmo resultante se compara con otros
tres algoritmos populares en la literatura con respecto al
número de accesos que realizan en el texto.
1. Introducción
En este trabajo se denomina “cadena” a la secuencia de
caracteres o letras que se busca, y “texto” a la secuencia de
caracteres o letras en la que se realiza la búsqueda.
La búsqueda de cadenas en textos es una operación básica,
y cuando se realiza en textos largos la eficiencia cobra especial
importancia. Las últimas mejoras en estos algoritmos son en
usar búsquedas predictivas [1] y en aprovechar los
procesadores gráficos o GPU de las computadoras [2]. En
algunos casos, la lectura de elementos de textos puede ser
costosa, por ejemplo, cuando los textos están almacenados en
medios relativamente lentos o cuando las letras representan a
vectores de características y su identificación es costosa, razón
por la cual en este trabajo se utiliza como medida de costo la
cantidad de accesos a las letras del texto.
2. Algoritmo de detección de cadenas usando árboles de
decisión
Un árbol de decisión clasifica un objeto representado con un
conjunto de atributos. En este caso el objeto es un segmento de
texto, es decir, una porción del texto completo, y sus atributos
son las letras. El tamaño del segmento es cuando menos el
tamaño de la cadena más grande a buscar, sin un valor máximo,
pero mientras más grande sea el segmento más grande es el
árbol de decisión. Además, los segmentos se intersecan para
garantizar que una copia completa de la cadena se encuentre en
un segmento. Los segmentos y su solapamiento se representan
en la Fig. 1.
La búsqueda puede ser de una cadena, como el algoritmo
Boyer-Moore [3] y el Knuth–Morris–Pratt [4], que usan tablas
de desplazamiento para saltar porciones del texto en la
búsqueda. También puede ser de varias cadenas de forma
simultánea, como el algoritmo de Aho-Corasick [5], que usa
autómatas finitos deterministas (AFD), los que mezclan las
ideas de los AFD y las tablas de desplazamiento [6][7][8]; los
algoritmos que realizan búsquedas aproximadas [9][10]; los
algoritmos que preprocesan [11] y los que indexan [12][13] al
texto para acelerar múltiples búsquedas posteriores, entre otros.
Segmento1
La bioinformática [14] también utiliza algoritmos de
búsqueda de cadenas, ya que los nucleótidos del ácido
desoxirribonucleico (ADN), Adenina, Timina, Guanina y
Citosina, se representan con las letras A, T, G y C
respectivamente, y el ADN se puede representar con un texto
largo formado por esas letras.
Segmento2
Solapamiento = 𝑚 − 1
Fig. 1. División de un texto en segmentos, donde “m” es el tamaño de la
cadena más larga
1
XV Congreso Internacional sobre Innovación y Desarrollo Tecnológico,
2 al 4 de octubre de 2019, Cuernavaca Morelos, México.
Cuando el texto no se pueda dividir en un número entero de
segmentos, se pueden elegir varias estrategias: insertar una
letra de relleno hasta completar el segmento, solapar en más de
“𝑚 − 1” letras al último segmento con el penúltimo, entrenar
árboles de decisión para diferentes tamaños de segmento, o
utilizar otro algoritmo para el último segmento. La opción
elegida es solapar al último segmento en más de “𝑚 − 1”
letras. La cadena se busca en cada segmento de forma
consecutiva, es decir, primero en el segmento inicial, después
en el siguiente, y así sucesivamente.
reemplazos para el ejemplo anterior. La letra cursiva indica los
casos que se descartan por estar ya incluidos previamente (sin
tomar en cuenta su clase).
TABLA I. EJEMPLO DE REEMPLAZO DE OBJETOS CON
COMODINES A OBJETOS SIMPLES
AA*|1
*AA|1
***|0
A. Entrenamiento del árbol de decisión
El árbol de decisión se entrena con el algoritmo ID3, y el
conjunto de datos se obtiene poniendo las cadenas que se
buscan en todas las posiciones posibles dentro del segmento y
rellenando las letras restantes con todas las combinaciones
posibles.
AAA|1
AA_|1
AAA|1
_AA|1
AAA|0 _AA|0
AA_|0 _A_|0
A_A|0 _ _A|0
A_ _|0 _ _ _|0
Después de reemplazar los comodines y descartar los
repetidos, el conjunto de entrenamiento para el ejemplo
anterior queda:
{AAA|1 , AA_|1 , _AA|1 , A_A|0 , A_ _|0 , _A_|0 ,
_ _A|0 , _ _ _|0}.
Un aspecto importante en el algoritmo es la generación del
alfabeto reducido, el cual consta de todas las letras diferentes
usadas en las cadenas a buscar, y en caso de que no sean todas
las letras diferentes posibles en el texto (el alfabeto completo),
una letra “diferente”, representada con un “_”, se agrega al
alfabeto reducido.
El proceso se repite para cada cadena que se busca de forma
simultánea. Si se desea además diferenciar las cadenas
encontradas, a cada una de ellas se le puede poner una clase
distinta, pero hay que tener en cuenta que: si hay más de una
cadena en el segmento, la clase encontrada será sólo la clase
correspondiente a una de ellas, y se ignorarán las demás.
Por ejemplo, si la cadena a buscar es “AA”, y el alfabeto
completo es {A,G,T,C}, entonces el alfabeto reducido es
{A,_}, donde el símbolo “_” representa a cualquiera opción
que no sea “A”, es decir, “G”, “T” y “C”, y el conjunto de
entrenamiento y el árbol de decisión sólo utilizan el alfabeto
reducido.
3. Metodología
Se generaron aleatoriamente textos de 1000 letras para
buscar en ellos, y cadenas de tamaños 4, 6 y 8 letras para
buscarlas en el texto. Se puso una de las cadenas generadas al
final del texto para que siempre fuera encontrada. El proceso
anterior se realizó con dos alfabetos, uno de 4 letras y otro de
27.
Un paso intermedio para generar las cadenas de
entrenamiento es usar comodines, donde un comodín
representa a todas las letras posibles, y se representa con un
“*”.
Debido a que los árboles de decisión necesitan operar con
segmentos de texto de tamaño fijo, se dividió el texto en
segmentos de tamaños relativos de 1 hasta 3 veces el tamaño
de la cadena a buscar. Se entrenaron los árboles de decisión y
se realizaron las búsquedas. Se eligió el tamaño relativo del
segmento que produce una menor cantidad promedio de
accesos y un segmento más pequeño, ya que mientras más
grande el segmento más costoso el entrenamiento del árbol de
decisión. Este tamaño relativo es que se utiliza en las siguientes
comparaciones.
Por ejemplo, si para el alfabeto anterior la cadena a buscar
es “AA” y el tamaño del segmento es 3, entonces el conjunto
de entrenamiento queda:
AA*|1
*AA|1
* * *|0
Donde el símbolo “|” separa a la plantilla (lado izquierdo)
de su clase (lado derecho). Además, el alfabeto reducido queda
{A,_}.
Se comparó la cantidad de accesos promedio del algoritmo
desarrollado con los siguientes algoritmos de búsqueda de
cadena:
Para traducir estas plantillas a casos de entrenamiento, se
reemplazan los comodines por todos los valores que puedan
tomar, incluyendo “_”. Al realizar el reemplazo, se descartan
aquellos casos que ya estén incluidos en las plantillas previas,
ya que se trata de una lista ordenada. La Tabla I indica los
•
2
Boyer-Moore [3], que busca una sola cadena en un texto y
realiza desplazamientos para acelerar la búsqueda. El
XV Congreso Internacional sobre Innovación y Desarrollo Tecnológico,
2 al 4 de octubre de 2019, Cuernavaca Morelos, México.
∑ 𝑎 /𝑝
̅̅̅
𝑇𝑘 = 𝑖 𝑖
código del algoritmo [16] se modificó para incrementar un
contador en cada acceso a una letra del texto.
Aho-Corasick [5], que usa AFD y busca múltiples
cadenas simultáneamente. El AFD se puede realizar a
mano o con un compilador [17].
Wu-Manber [7], que busca múltiples cadenas
simultáneamente, realiza desplazamientos para acelerar la
búsqueda, y utiliza funciones hash con las letras. El código
del algoritmo [18] se modificó para incrementar un
contador cada que se usa una letra del texto en las
funciones hash, cada que se comparan los códigos hash, y
cada que se comparan las letras restantes una vez que se
encuentran códigos hash coincidentes.
•
•
Donde “𝑎𝑖 ” es la cantidad de accesos de la i-ésima
búsqueda, “𝑝𝑖 ” es la posición de la cadena en esa búsqueda,
̅̅̅𝑘 ” es el costo
“𝑛” es la cantidad de búsquedas (100), y “𝑇
promedio para la longitud relativa de segmento “𝑙”.
𝑘=
𝑙
(2)
𝑚
Donde “𝑙” es la longitud del segmento, “𝑚” es longitud de
la cadena, y “𝑘” es la longitud relativa del segmento.
De la misma manera, la Fig. 3 grafica el costo ponderado
promedio (1) con respecto a la longitud relativa del segmento
(2), para el caso de búsquedas simultáneas de tres cadenas de
la misma longitud (4, 6 y 8 letras) y un alfabeto de 4 letras.
Como el algoritmo Boyer-Moore sólo busca una cadena a la
vez, las pruebas se dividieron en dos lotes: en uno se generó
una cadena aleatoria para buscar en el texto, y en el otro se
realizaron 2 mutaciones a la cadena aleatoria generándose así
3 cadenas para buscar de forma simultánea. En el primer lote
se incluye al algoritmo Boyer-Moore en la comparación, en el
segundo se descarta.
4 letras
6 letras
8 letras
2
1.5
Se realizaron 100 pruebas para cada combinación, y se
promediaron los resultados.
1
4. Resultados
0.5
La Fig. 2 muestra cómo se comporta la cantidad de accesos
con respecto a la longitud del segmento, para un alfabeto de 4
letras y la búsqueda de una cadena. Se obtuvo generando 100
textos aleatorios con sus respectivas 100 cadenas a buscar,
contando cuantos accesos a las letras del texto se realizaron, y
dividiendo ese valor entre la posición de la cadena en el texto
(eje vertical), eso para cada longitud de segmento (eje
horizontal), desde la misma longitud de la cadena hasta casi
tres veces ese valor, dividido entre la longitud de la cadena. Las
longitudes de cadena usadas son de 4, 6 y 8 letras, y cada caso
genera un trazo en la Fig. 2. Sus ejes vertical y horizontal se
ilustran con las ecuaciones 1 y 2 respectivamente.
4 letras
6 letras
0
0
8 letras
0.5
0
2
3
2
3
4
Con el alfabeto de 27 letras, la cantidad de datos para
entrenar los árboles de decisión empezaron a crecer demasiado,
más de lo que variables de 64 bits pueden almacenar, por lo que
no se realizaron las pruebas para todos los casos. Las pruebas
realizadas se muestran en la Fig. 4, en donde se grafican al
mismo tiempo todas las longitudes de cadena y cantidad de
cadenas simultáneas (una y tres).
1
1
1
Fig. 3. Promedio de comparaciones ponderadas con respecto a la longitud
relativa del segmento, para alfabeto de 4 letras y tres cadenas simultáneas.
1.5
0
(1)
𝑛
4
Fig. 2. Promedio de comparaciones ponderadas con respecto a la longitud
relativa del segmento, para alfabeto de 4 letras y una cadena.
3
XV Congreso Internacional sobre Innovación y Desarrollo Tecnológico,
2 al 4 de octubre de 2019, Cuernavaca Morelos, México.
4 letras 1 cadena
6 letras, 1 cadena
8 letras, 1 cadena
4 letras 3 cadenas
6 letras, 3 cadenas
8 letras, 3 cadenas
TABLA II. PROMEDIOS PONDERADOS DE LA CANTIDAD DE
ACCESOS PARA LA BÚSQUEDA DE UNA CADENA CON
ALFABETOS DE CUATRO LETRAS
𝑚
4
6
8
1.5
1
0.5
AD
0.64
0.46
0.36
AC
1
1
1
WM
1.7
0.82
0.55
BM
0.59
0.41
0.36
La Tabla III compara los algoritmos para el caso de un
alfabeto de 4 letras y la búsqueda de tres cadenas simultáneas.
0
0
0.5
1
1.5
2
2.5
3
TABLA III. PROMEDIOS PONDERADOS DE LA CANTIDAD DE
ACCESOS PARA LA BÚSQUEDA DE TRES CADENAS
SIMULTÁNEAS CON ALFABETOS DE CUATRO LETRAS
Fig. 4. Promedio de comparaciones ponderadas con respecto a la longitud
relativa del segmento, para un alfabeto de 27 letras.
𝑚
4
6
8
Para comprender las limitantes, se observa que: para
direcciones de memoria de 64 bits, la cantidad de objetos de
entrenamiento no puede alcanzar 264 , y por lo tanto la longitud
máxima del segmento está dada por la ecuación 3, y para
direcciones de memoria de 64 bits y un alfabeto de 4 letras el
máximo posible es de 32 letras.
𝑙𝑚𝑎𝑥 ≤
𝑠
𝑙𝑜𝑔2 (‖Σ‖)
AC
1
1
1
WM
2.2
0.89
0.59
De la misma manera, las tablas IV y V muestran la búsqueda
de una y de tres cadenas simultáneas para un alfabeto de 27
letras.
(3)
TABLA IV. PROMEDIOS PONDERADOS DE LA CANTIDAD DE
ACCESOS PARA LA BÚSQUEDA DE UNA CADENA CON
ALFABETOS DE 27 LETRAS
Donde “𝑙𝑚𝑎𝑥 ” es la longitud máxima del segmento, “𝑠” es
la cantidad de bits en las direcciones de memoria, y “‖Σ‖”
es la cantidad de letras en el alfabeto reducido.
𝑚
4
6
8
Otro aspecto a tener en cuenta es el tamaño del árbol de
decisión, que tiene una altura de la longitud del segmento “l” y
un máximo de “‖Σ‖” hijos por cada nodo, i.e., crece
proporcionalmente como indica la ecuación 4.
‖𝑛𝑜𝑑𝑜𝑠‖ ≈ 𝑙 ‖Σ‖
AD
0.92
0.53
0.41
AD
0.37
0.25
0.2
AC
1
1
1
WM
1.51
0.76
0.51
BM
0.29
0.20
0.16
TABLA V. PROMEDIOS PONDERADOS DE LA CANTIDAD DE
ACCESOS PARA LA BÚSQUEDA DE TRES CADENAS
SIMULTÁNEAS CON ALFABETOS DE 27 LETRAS
(4)
𝑚
4
6
8
Donde “‖𝑛𝑜𝑑𝑜𝑠‖” es la cantidad de nodos del árbol de
decisión, “𝑙” es la longitud del segmento, y “‖Σ‖” es la
cantidad de letras en el alfabeto reducido.
En las figuras anteriores se observa que para tamaños
ligeramente inferiores a dos veces el tamaño de la cadena a
buscar (2𝑚) se obtiene una buena eficiencia, y la mejora para
segmentos mayores a “2𝑚” es muy poca, por lo que para
comparar el algoritmo propuesto con otros de la literatura se
toma el tamaño de segmento de “2𝑚 − 2”.
AD
0.45
0.31
0.21
AC
1
1
1
WM
1.5
0.76
0.51
En las tablas II a V se observa que el algoritmo AhoCorasick siempre realiza un acceso a cada letra hasta encontrar
la cadena que se busca, esto por la forma de operar de los AFD,
que leen todos los caracteres de forma secuencial y van
cambiando de estado interno hasta llegar a un estado de
aceptación o rechazo.
La Tabla II compara los algoritmos para el caso de un
alfabeto de 4 letras y la búsqueda de una sola cadena a la vez.
Los algoritmos comparados son el que usa el árbol de decisión
(AD), Aho-Corasick (AC), Wu-Manber (WM) y Boyer-Moore
(BM).
Es importante anotar que: aunque la cantidad de accesos del
algoritmo Wu-Manber es relativamente alta, el algoritmo usa
las letras internamente para sus funciones hash, lo cual, si el
acceso a las letras del texto es eficiente, por ejemplo, si se usa
una memoria caché, mantiene al algoritmo veloz, y es más
eficiente conforme las cadenas se van haciendo más largas.
4
XV Congreso Internacional sobre Innovación y Desarrollo Tecnológico,
2 al 4 de octubre de 2019, Cuernavaca Morelos, México.
[9] Navarro, G. (1998). Approximate text searching (Doctoral dissertation,
PhD thesis, Dept. of Computer Science, Univ. of Chile).
[10] Fulwider, S., & Mukherjee, A. (2010). Multiple pattern matching. In The
Second International Conferences on Pervasive Patterns and
Applications, PATTERNS (pp. 78-83).
[11] Kim, S., & Kim, Y. (1999, August). A fast multiple string-pattern
matching algorithm. In Proceedings of 17th AoM/IAoM Conference on
Computer Science (pp. 44-49).
[12] Navarro, G., Baeza-Yates, R. A., Sutinen, E., & Tarhio, J. (2001).
Indexing methods for approximate string matching. IEEE Data Eng.
Bull., 24(4), 19-27.
[13] Boytsov, L. (2011). Indexing methods for approximate dictionary
searching: Comparative analysis. Journal of Experimental Algorithmics
(JEA), 16, 1-1.
[14] Bajic, V. B., et al. (2003). «From informatics to bioinformatics».
Proceedings of the first Asia–Pacific bioinformatics conference on
bioinformatics, Adelaide.
[15] Quinlan, J. (1986). Induction of decision trees. Machine Learning 1. 81–
106.
[16]
https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_stringsearch_algorithm. Consultado en 2019.
[17] https://github.com/westes/flex/. Consultado en 2019.
[18]
http://blog.raymond.burkholder.net/index.php?/archives/362-C++Implementation-of-Wu-Manbers-Multi-Pattern-Search-Algorithm.html.
Consultado en 2019.
[19] Kent, W. J. (2002). BLAT—the BLAST-like alignment tool. Genome
research, 12(4), 656-664.
[20] Sievers, F., & Higgins, D. G. (2014). Clustal Omega, accurate alignment
of very large numbers of sequences. In Multiple sequence alignment
methods (pp. 105-116). Humana Press, Totowa, NJ.
5. Conclusiones
En este trabajo se desarrolló un algoritmo basado en árboles
de decisión para detectar cadenas en textos largos, el cual tiene
la propiedad de que utiliza el aprendizaje automático para
optimizar la búsqueda de cadenas, en vez de utilizar un
algoritmo de propósito específico. Tiene la particularidad de
que analiza cada segmento de forma independiente, lo cual
podría favorecer una paralelización en un trabajo futuro.
Se comparó el algoritmo propuesto con otros tres de la
literatura, mostrando resultados competitivos para cadenas
cortas (menos de 8 letras) y alfabetos pequeños, esto porque en
las pruebas el algoritmo con árboles de decisión obtuvo
resultados más competitivos con un alfabeto de 4 letras que con
un alfabeto de 27, y alcanzó tamaños prohibitivos en la
cantidad de casos de entrenamiento con cadenas largas. La
cantidad de casos de entrenamiento crece exponencialmente
con respecto a la cantidad de letras del segmento.
El uso de los árboles de decisión presenta las desventajas
del tamaño del árbol y del costo de su generación o
entrenamiento, sin los cuales sería una opción competitiva en
la búsqueda de cadenas cortas, pues como se observa en los
experimentos, la cantidad de accesos resulta competitiva a
partir de segmentos una letra más grandes que la cadena a
buscar.
7. Biografías
Sergio Alejandro González Segura. Ingeniero en Sistemas
Computacionales (1997), Instituto Tecnológico de Mérida. Maestro en
Ciencias en Ciencias de la Computación (2011), Centro Nacional de
Investigación y Desarrollo Tecnológico en 2011. Estudiante de Doctorado en
Ciencias Computacionales desde 2016.
José Ruiz Ascencio. Físico (1971), Facultad de Ciencias, Universidad
Nacional Autónoma de México. Master of Science in Electrical Engineering
(1973) de Stanford Leland Jr. University, California, E.U.A. Doctor en
Ciencias(1989) de University of Sussex, Sussex, Inglaterra, G.B.
Como trabajo futuro se pretende aumentar la longitud
máxima de cadenas admisibles con el algoritmo propuesto, y
compararlo con algoritmos usados para búsqueda de cadenas
en bioinformática, como Blast [19] para cadenas individuales,
y Clustal [20] para cadenas múltiples.
6. Referencias
[1]
Gurung, D., Chakraborty, U. K., & Sharma, P. (2016). Intelligent
Predictive String Search Algorithm. Procedia Computer Science, 79,
161-169.
[2] Ramos-Frías, R., & Vargas-Lombardo, M. (2017). A Review of String
Matching Algorithms and Recent Implementations using GPU.
[3] Boyer, R. S., & Moore, J. S. (1977). A fast string searching algorithm.
Communications of the ACM, 20(10), 762-772.
[4] Knuth, Donald; Morris, James H.; Pratt, Vaughan (1977). "Fast pattern
matching in strings". SIAM Journal on Computing. 6 (2): 323–350.
CiteSeerX 10.1.1.93.8147. doi:10.1137/0206024.
[5] Aho, A. and Corasick, M. (1975) “Efficient string matching: an aid to
bibliographic search,” Commun. ACM, vol. 18, no. 6, pp. 333–340.
[6] Commentz-Walter, Beate (1979). A String Matching Algorithm Fast on the
Average. International Colloquium on Automata, Languages and
Programming. LNCS. 71. Graz, Austria: Springer. pp. 118–132.
doi:10.1007/3-540-09510-1_10. ISBN 3-540-09510-1.
[7] Wu, S., & Manber, U. (1994). A fast algorithm for multi-pattern searching.
Tech. R. TR-94-17, Dept. of Comp. Science, Univ of Arizona.
[8] Crochemore, M., Czumaj, A., Gasieniec, L., Lecroq, T., Plandowski, W.,
& Rytter, W. (1999). Fast practical multi-pattern matching. Information
Processing Letters, 71(3-4), 107-113.
5
Descargar