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)
- Cómo encontrar el día en una fecha en particular
- ¿Alguien está usando algoritmos epigenéticos?
- ¿Cómo puede una persona que no está en el mundo académico presentar pruebas correctas de que NP = O (n), la jerarquía polinómica se colapsa y existe un algoritmo eficiente de O (n) para resolver cualquier problema sin causar caos y pánico masivo porque se rompería todo el cifrado?
- ¿Cuál es el proceso de un algoritmo de red neuronal convolucional para un OCR?
- ¿Quién sabe qué hay detrás de la API de Google Nearby Search? ¿Qué algoritmo usan? ¿Cómo encuentra Google una estación de servicio cercana?
- 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)
- FastText
- AdaGram
- RNN para generación de modelos de lenguaje
- http://www.aclweb.org/anthology/K16-1006 – context2vec