Si el caso de uso de la corrección ortográfica es buscar contenido en un corpus grande específico de un dominio, entonces un algoritmo de corrección de errores no supervisado ( no necesariamente el mejor ) es
- simplemente tomar todo el corpus específico de ese dominio y alimentarlo como entrada para fastText y generar incrustaciones. Cuando entrenamos corpus, debemos asegurarnos de elegir los ngrams de caracteres mínimos y máximos para que sean 1; esto asegura que solo aprende incrustaciones a nivel de caracteres individuales como ngrams opuestos con múltiples caracteres (los ngrams de caracteres múltiples nos impedirán corregir las transposiciones de caracteres como alzhiemer en su lugar de alzheimer ).
- Luego, para una palabra de entrada dada, hay dos casos,
- Caso 1. La palabra de entrada se encuentra en el corpus entrenado incluso si está mal escrita (el corpus también puede tener errores de ortografía). Realice el producto de puntos con las incrustaciones capacitadas para conseguir vecinos. Esto nos da un candidato listo para trabajar. Elija la que sea la distancia de edición más cercana a la palabra de entrada, que también forma parte de una lista de palabras de etiqueta dorada seleccionada.
- Caso 2. La palabra está fuera de vocabulario. Fasttext todavía puede traernos candidatos vecinos. Luego hacemos la misma operación que en el caso 1.
- Entonces, ¿por qué es mejor el texto rápido que la simple corrección de edición basada en la distancia?
- El candidato establece que saca de un corpus no solo está léxicamente ( edite la distancia como medida ) cerca de la entrada, sino también semánticamente cerca. Entonces, para alzhiemer, los vecinos son todas palabras sobre la enfermedad de alzheimer. Por lo tanto, las sugerencias de corrección no están lejos, incluso si no es la correcta en algunos casos. Un método basado únicamente en la distancia de edición generaría un conjunto de candidatos que no tiene en cuenta la cercanía semántica y podría estar muy alejado cuando se trata de una sugerencia incorrecta.
Referencias
¿Cómo genera fastText un vector para una palabra que no está en el modelo pre-entrenado?
- ¿Qué es la estructura de datos inmutable?
- Cómo resolver este problema de matriz (detalles en la descripción)
- ¿Bajo qué escenarios son apropiados los siguientes algoritmos de ruta más corta?
- Con una base sólida en Python, ¿sería más importante aprender C o estructuras de datos y algoritmos primero?
- ¿Cómo funciona el ciclo for de este algoritmo?