tecnicas software procesamiento natural modelos lenguaje conceptos basicos articulos programming-languages

programming-languages - modelos - procesamiento de lenguaje natural software



Procesamiento de lenguaje natural (4)

La pregunta es quizás (alrededor del 100%) subjetiva pero necesito consejos. ¿Cuál es el mejor lenguaje para el procesamiento del lenguaje natural? Conozco Java y C ++ pero hay una forma más fácil de hacerlo. Para ser más específico, necesito procesar textos de muchos sitios y obtener información.


Como dije en los comentarios, la pregunta no es sobre un idioma , sino sobre una biblioteca adecuada . Y hay muchas bibliotecas NLP tanto en Java como en C ++. Creo que debe inspeccionar algunos de ellos (en ambos idiomas) y luego, cuando sepa toda la cantidad de bibliotecas disponibles, cree una especie de "gran plan", cómo implementar su tarea. Entonces, aquí solo les daré algunos enlaces con una breve explicación de qué es qué.

Java

GATE : es exactamente lo que significa su nombre: Arquitectura general para el procesamiento de textos. Aplicación en GATE es una tubería. Usted pone recursos de procesamiento de lenguaje como tokenizadores, etiquetadores POS, analizadores morfológicos, etc. y ejecuta el proceso. El resultado se representa como un conjunto de anotaciones : metainformación, que se adjunta a la tranquilidad del texto (por ejemplo, token). Además de una gran cantidad de plugins (incluidos complementos para la integración con otros recursos de la PNL como WordNet o Stanford Parser), tiene muchos diccionarios predefinidos (ciudades, nombres, etc.) y su propio lenguaje de expresiones regulares JAPE. GATE viene con su propio IDE (Desarrollador GATE), donde puede probar la configuración de su canalización y luego guardarlo y cargarlo desde el código Java.

UIMA - o aplicaciones de gestión de información no estructurada. Es muy similar a GATE en términos de arquitectura. También representa la tubería y produce un conjunto de anotaciones. Al igual que GATE, tiene IDE visual, donde puede probar su futura aplicación. La diferencia es que UIMA se refiere principalmente a la extracción de información, mientras que GATE realiza el procesamiento de texto sin una consideración explícita de su propósito. También UIMA viene con servidor REST simple.

OpenNLP : se llaman a sí mismos centro de organización para proyectos de código abierto en PNL, y esta es la definición más apropiada. La dirección principal de desarrollo es utilizar algoritmos de aprendizaje automático para las tareas de PNL más generales, como el etiquetado de parte de la voz, el reconocimiento de entidades denominadas, la resolución de referencias principales, etc. También tiene una buena integración con UIMA, por lo que sus herramientas también están disponibles.

Stanford NLP : probablemente la mejor opción para ingenieros e investigadores con conocimientos de NLP y ML. A diferencia de bibliotecas como GATE y UIMA, no pretende proporcionar tantas herramientas como sea posible, sino que se concentra en modelos idiomáticos. Por ejemplo, no tiene diccionarios completos, pero puede entrenar un algoritmo probabilístico para crearlo. Además de su componente CoreNLP , que proporciona las herramientas más utilizadas como tokenización, etiquetado POS, NER, etc., tiene varios subproyectos muy interesantes. Por ejemplo, su marco de dependencia le permite extraer la estructura completa de la oración. Es decir, puede, por ejemplo, extraer fácilmente información sobre el sujeto y el objeto de un verbo en cuestión, lo cual es mucho más difícil con otras herramientas de PNL.

C ++

UIMA : sí, hay implementaciones completas tanto para Java como para C ++.

Stanford Parser : algunos proyectos de Stanford solo están en Java, otros, solo en C ++, y algunos de ellos están disponibles en ambos idiomas. Puedes encontrar muchos de ellos here .

APIs

Una serie de API de servicios web realizan un procesamiento de lenguaje específico, que incluye:

Alchemy API : identificación de idioma, reconocimiento de entidades nombradas, análisis de sentimientos y mucho más. Echa un vistazo a su página principal - es bastante autodescriptiva.

OpenCalais : este servicio trata de construir un gráfico gigante de todo. Le pasa una URL de página web y enriquece el texto de esta página con las entidades encontradas, junto con las relaciones entre ellas. Por ejemplo, le pasas una página con "Steve Jobs" y devuelve "Apple Inc." (en términos generales) junto con la probabilidad de que este sea el mismo Steve Jobs.

Otras recomendaciones

Y sí, definitivamente deberías echar un vistazo a CoreNLP de Python. No solo es una biblioteca de PNL potente y fácil de usar, sino que también es parte de una excelente pila científica creada por una comunidad extremadamente amigable.

Actualización (2017-11-15) : 7 años después, hay herramientas aún más impresionantes, algoritmos geniales y tareas interesantes. Una descripción completa se puede encontrar aquí:

https://tomassetti.me/guide-natural-language-processing/



Recomendaría Python y NLTK.

Algunos consejos y notas que puedo precisar según mi experiencia al usarlos:

  • Python tiene lista eficiente, manejo de cadenas. Puede indexar listas de manera muy eficiente, lo que en lenguaje natural debería ser un hecho. También tiene buenas delicadezas sintácticas, por ejemplo, para acceder a las primeras 100 palabras de una lista, puede indexar como lista [: 100] (compárelo con stl en c ++).
  • La serialización de Python es fácil y nativa. Los módulos de serialización hacen que el procesamiento del lenguaje y el manejo del texto sean una tarea fácil, una línea de código (compárelo con las varias líneas que utilizan Boost u otras bibliotecas de C ++)
  • NLTK proporciona clases para cargar corpus, procesarlo, etiquetar, tokenización, análisis de gramáticas, fragmentación y todo un conjunto de algoritmos de aprendizaje automático, entre otras cosas. También proporciona buenos recursos para modelos probabilísticos basados ​​en la distribución de palabras en el texto. http://www.nltk.org/book

Si aprender un nuevo lenguaje de programación es un obstáculo, puede consultar openNLP for Java OpenNLP


ScalaNLP , que es una biblioteca de procesamiento de lenguaje natural escrita en Scala, parece adecuada para su trabajo.