¿Hay algún algoritmo de corrector ortográfico de aprendizaje no supervisado?

Con el algoritmo de corrector ortográfico de aprendizaje no supervisado, quizás se refiera a una forma de usar un algoritmo de corrección ortográfica junto con un diccionario que no está curado / verificado por humanos.

  • Ni siquiera estoy seguro de que sea posible: sería difícil crear un diccionario que no se verifique / muestree manualmente. Hay casos de ortografía que incluso no podemos decir que es correcta.
    • Ejemplo: “color” y “color”: ambos son correctos según el país.
  • Por lo tanto, parece muy difícil para una máquina elegir una ortografía ( o ortografía ) como estándar de oro ( por ejemplo, color ) y asumir que otras son variantes ( por ejemplo, color ).
    • Elegir falsamente una palabra para que sea la “palabra estándar de oro” dará como resultado una sugerencia / corrección de ortografía errónea. Eso plantea el riesgo de disminuir la fe del usuario en la sugerencia / corrección.

Pero tal vez podamos acercarnos a ese objetivo, confiando en un cuerpo de entrenamiento de alta calidad como el “estándar de oro”, de la siguiente manera …

  • Primero necesitamos generar un diccionario “equivalente” para cada palabra / frase. Esto se usaría para la corrección ortográfica.
  • Después de eso, podemos centrarnos en sugerir alternativas de ortografía en dos casos de uso
    • Corrección ortográfica de una palabra / frase aisladamente sin ningún contexto de una oración. Es como hacer una búsqueda en Google de la palabra, por ejemplo, “catacumba”.
    • Luego nos enfocaremos en la corrección ortográfica, una consulta de oración “es una catacumba como un laberinto”

Generación de un “diccionario candidato” sin supervisión (proceso fuera de línea necesario para ambos casos de uso)

  • Podemos usar el texto rápido con hiperparámetros apropiados para generar vectores de palabras usando un corpus de alta calidad que sea relevante para el dominio del caso de uso: cuanto más grande mejor
    • La elección de hiperparámetros: tamaño de ventana, tamaño de ngramo mínimo / máximo, nos permitirá generar vectores de palabras de modo que el vecindario sea más variantes léxicas que vecinos semánticos.
    • Un tamaño de ventana más pequeño ( puede ser tan bajo como 1 ) producirá más variantes léxicas que variantes semánticas. Podemos ajustar según la necesidad del caso de uso
    • El resultado de este paso es
      • un vocabulario de todas las palabras únicas ( con su recuento de ocurrencias de corpus ) en corpus
      • con los vectores para cada palabra

Caso de uso 1: uso del diccionario candidato en caso de uso de entrada de palabra / frase aislada

  • Cuando / Como el usuario escribe, se puede iniciar una revisión ortográfica de palabras ( una vez que se ingresa cierto número de caracteres, esto puede iniciarse en segundo plano de manera no intrusiva )
    • Comprueba si una palabra existe en el vocabulario elige su vector. Si la palabra no está en el vocabulario, use fasttext para generar un vector de palabras para esta palabra fuera del vocabulario ( podemos hacerlo porque los vectores de palabras se construyen a partir de caracteres n-gramas en texto rápido. Entonces podemos construir un vector de palabras para una palabra nueva sobre la marcha usando los vectores de palabras que generamos antes para las palabras en corpus )
    • Haga un producto de puntos del vector del paso anterior con todas las demás palabras
    • El vecindario, será en gran medida un vecindario variante léxico ( por ejemplo, Feynman, Feynmann, Feyman )
    • Si la entrada del usuario coincide con una palabra, y si el recuento de palabras es la mayor entre sus variantes léxicas, no solicite ninguna sugerencia ( nuestro estándar de oro se basa en el supuesto de que el recuento de palabras de la ortografía correcta de una palabra es mayor que todas sus variantes léxicas en un corpus de alta calidad ).
      • Si la entrada coincide con una palabra que era de menor frecuencia que otra variante léxica, sugiera alternativas al usuario de la vecindad de esa palabra.
    • Este enfoque sería una experiencia de usuario mucho mejor que simplemente hacer una verificación de distancia de edición estándar y una sugerencia de pedido basada en la ocurrencia, por la siguiente razón
      • Los métodos de distancia de edición no tienen conocimiento de la relación semántica de las variantes de palabras. El entrenamiento de texto rápido permite que las variantes de palabras ( incluso las léxicas ) se agrupen en el mismo vecindario produciendo una mejor lista de sugerencias y ordenando alternativas de ortografía.
      • Por lo tanto, es más probable que las sugerencias coincidan con la intención del usuario
      • La lista de sugerencias se puede eliminar de las variantes semánticas si es necesario aplicando un filtro de distancia de edición ajustado en los resultados
    • Fasttext es una mejor opción para esto que word2vec porque
      • Fasttext construye una palabra a partir del carácter n gramos. Entonces, no solo podemos manejar una palabra fuera del vocabulario, sino que permite que las variantes léxicas se agrupen en virtud de los caracteres que lo constituyen, no solo el vecindario semántico.
      • Además, dado que fasttext construye una palabra a partir de caracteres n gramos, puede generar mejores vecindarios para palabras que ocurren raramente que word2vec. Esto se debe simplemente a que las palabras que ocurren raramente no son “empujadas y empujadas” tanto en el entrenamiento debido a sus bajos recuentos. Entonces la calidad de su vecindario sufre. Entonces, incluso si solo hay una variación mal escrita de Feynman en el corpus y viene en una línea con solo tres vecinos ( “Feynmann es genial” ), esa sola ocurrencia puede beneficiarse de la versión correcta de Feynman que ocurre muchas más veces en el corpus.
    • La desventaja de este enfoque es el problema con el que declaramos que comenzamos. No tenemos idea de si la sugerencia que estamos haciendo es para una palabra mal escrita o una palabra correcta; solo vamos por recuentos de ocurrencias para sugerir. Si el corpus que estamos usando para entrenar es un corpus de alta calidad, entonces es poco probable que contenga más versiones mal escritas de Feynman que la ortografía correcta.
      • En el caso de “color versus color”, si realizamos la capacitación en un corpus de capacitación específico de la localidad ( por ejemplo, UK Wiki vs US Wiki ), este problema podría mitigarse.

Caso de uso 2: uso del diccionario candidato en un caso de uso de entrada de consulta de oración / palabra múltiple

Ahora, a medida que el usuario escribe una oración, use la oración completa junto con la última palabra que se escribe como entrada al método de desambiguación de Adagram.

  • Elimine los resultados del texto rápido que muestra solo aquellos términos que pertenecen al mismo grupo de sentido de la palabra de entrada (en lugar de seleccionar uno podría enumerar primero las alternativas de ese sentido ).
  • Idealmente, un modelo de lenguaje generado por un RNN es el mejor enfoque para asegurarse de que la palabra sugerida realmente pertenece a ese contexto (el modelo de lenguaje puede ayudarnos a saber si la palabra que ingresa un usuario tiene una entropía más alta en relación con el modelo de lenguaje, y sugerir alternativas que reduzcan entropía relativa al modelo de lenguaje ). Un modelo como context2vec puede ser una opción a considerar: es un LSTM bidireccional que crea diferentes incorporaciones de palabras para una palabra en función del contexto de la oración.
  • El modelo de lenguaje / Adagram es para evitar casos en los que la sugerencia en una oración parezca inapropiada / simplemente incorrecta, como a menudo vemos en la entrada de texto del iPhone, por ejemplo, hará una sugerencia / corrección que no encaja en la oración que hemos ingresado hasta ahora . La desambiguación de Adagram es razonablemente rápida, por lo que es factible la verificación concurrente y la sugerencia / corrección en tiempo real ( se implementa en Julia, por lo que una versión nativa del dispositivo requeriría un puerto de idioma ).

Referencias (enlaces fuente de Github para todos los modelos mencionados para la implementación)

  1. FastText
  2. AdaGram
  3. RNN para generación de modelos de lenguaje
  4. http://www.aclweb.org/anthology/K16-1006 – context2vec

More Interesting

¿Cuál es el significado de la complejidad del tiempo pseudo polinomial? Vi que Knapsack se ejecuta en tiempo pseudo polinomial. Leí sobre esto aquí: tiempo pseudo-polinomial pero no puedo seguirlo. Quiero comprender el concepto de tiempo de ejecución pseudo polinomial y cómo se ejecuta la mochila en tiempo de pseudo polinomio.

¿Qué tipo de operaciones podrían aplicarse sobre un árbol de segmentos?

Cómo identificar un bucle en una lista vinculada individualmente

Dado un número N y un flujo continuo de enteros de entrada, ¿podría encontrar dos números en el flujo cuya suma fuera el primer número N?

¿Cuál es el número esperado de movimientos necesarios para terminar un juego de serpientes y escaleras?

¿Cuál es el mejor y más fácil algoritmo de búsqueda?

Cómo resolver la pregunta en la descripción a continuación

¿Cómo combina ACM ICPC invertir en diversidad y mantener alta la barra de entrada?

¿Cuáles son algunas de las mejores plataformas en línea para practicar la codificación relacionada con algoritmos?

Si descubrieras un algoritmo simple que encuentra solo y todos los primos, ¿para qué podría usarse? ¿Es esto posible?

¿Cómo funciona el algoritmo de armonía?

¿Es CodeChef la opción correcta para practicar problemas algorítmicos hoy en día?

¿Qué algoritmo usa Matlab para calcular las raíces de un polinomio de alto rango?

¿Obtendría algún beneficio resolviendo los problemas del Proyecto Euler por la fuerza bruta?

Cómo implementar un algoritmo de programación de CPU del sistema operativo que evita que se produzcan puntos muertos