nlp - Necesita un buen extractor de relaciones
nltk stanford-nlp (3)
Estoy haciendo un proyecto de PNL.
El propósito del proyecto es extraer una posible relación entre dos cosas. Por ejemplo, para un par de "ubicación" y "persona", los resultados extraídos serían "cerca", "vive", "funciona", etc.
¿Hay alguna herramienta NLP existente capaz de hacer esto?
Hay algunas herramientas diferentes que quizás desee ver:
MITIE
La nueva herramienta MITIE de MIT admite la extracción de relaciones básicas. En la distribución se incluyen 21 modelos de extracción de relación binaria en inglés formados en una combinación de datos de Wikipedia y Freebase. También puede entrenar sus propios detectores de relaciones personalizadas. Aquí hay una lista del directorio MITIE / MITIE-models / english / binary_relations /, que se descarga cuando ejecuta el make MITIE-models
durante el proceso de compilación (los nombres deberían ser relativamente autoexplicativos):
- rel_classifier_book.written_work.author.svm
- rel_classifier_film.film.directed_by.svm
- rel_classifier_influence.influence_node.influenced_by.svm
- rel_classifier_law.inventor.inventions.svm
- rel_classifier_location.location.contains.svm
- rel_classifier_location.location.nearby_airports.svm
- rel_classifier_location.location.partially_contains.svm
- rel_classifier_organization.organization.place_founded.svm
- rel_classifier_organization.organization_founder.organizations_founded.svm
- rel_classifier_organization.organization_scope.organizations_with_this_scope.svm
- rel_classifier_people.deceased_person.place_of_death.svm
- rel_classifier_people.ethnicity.geographic_distribution.svm
- rel_classifier_people.person.ethnicity.svm
- rel_classifier_people.person.nationality.svm
- rel_classifier_people.person.parents.svm
- rel_classifier_people.person.place_of_birth.svm
- rel_classifier_people.person.religion.svm
- rel_classifier_people.place_of_interment.interred_here.svm
- rel_classifier_time.event.includes_event.svm
- rel_classifier_time.event.locations.svm
- rel_classifier_time.event.people_involved.svm
OpenIE
OpenIE de la Universidad de Washington extraerá las relaciones del texto, representando la salida como triples en la forma de (Arg1, Arg2, Relation)
. Por ejemplo, dada la oración de entrada:
El presidente de los Estados Unidos, Barack Obama, pronunció su discurso el martes ante miles de personas.
OpenIE extraerá estas relaciones binarias:
- (Barack Obama, es el presidente de, EE. UU.)
- (Barack Obama, dio, su discurso)
- (Barack Obama, dio su discurso, el martes)
- (Barack Obama, dio su discurso, a miles de personas)
Nota: OpenIE utiliza una licencia de código abierto no estándar que prohíbe expresamente el uso comercial.
Extractor de relaciones Stanford
Stanford Relation Extractor extrae las relaciones Live_In, Located_In, OrgBased_In y Work_For. Si desea utilizar un conjunto diferente de relaciones, puede entrenar su propio extractor de relaciones utilizando el código (los detalles se proporcionan en la página web).
Si desea dependencias básicas, también puede usar el analizador de dependencias de Stanford:
El Stanford Dependency Parser (parte del analizador de Stanford) extraerá las relaciones gramaticales entre palabras en una oración. Por ejemplo, dada esta entrada:
Las facturas sobre los puertos y la inmigración fueron presentadas por el senador Brownback, republicano de Kansas
El analizador de Stanford extraerá estas dependencias gramaticales:
- nsubjpass (enviado, proyectos de ley)
- auxpass (enviado, fueron)
- agente (enviado, Brownback)
- nn (Brownback, senador)
- appos (Brownback, republicano)
- prep_of (Republicano, Kansas)
- prep_on (Bills, ports)
- conj_and (puertos, inmigración)
- prep_on (Bills, inmigración)
PORTÓN
GATE de la Univ of Sheffield también incluye una capacidad de extracción de relaciones, aunque nunca lo he usado. Esta presentación proporciona una descripción general de cómo funciona: https://gate.ac.uk/sale/talks/gate-course-may10/track-3/module-11-ml-adv/module-11-relations.pdf
El extractor de relaciones MIML-RE ( http://nlp.stanford.edu/software/mimlre.shtml ) también podría ser útil si está buscando una de las relaciones en el conjunto de relaciones KBP (consulte http: // surdeanu .info / kbp2014 / TAC_KBP_2014_Slot_Descriptions_V1.1.pdf ). Es cierto que este es un sistema mucho más grande que es más difícil de configurar que el anotador de "relación" en CoreNLP.
Probablemente la forma más fácil de comenzar con esta opción es descargar http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22stanford-kbp%22 (asegúrese de descargar también los modelos, ya que así como todas las dependencias). A partir de ahí, hay un grupo de métodos de entrada de barrera relativamente baja en SlotfillingTasks
(por ejemplo, getSlotsInSentence()
obtiene todas las relaciones para una entidad determinada, o classifyRelation()
clasifica la relación entre dos entidades en una oración).
También es posible que desee echar un vistazo a ReVerb . Realiza extracción de información abierta, es decir, no necesita especificar el tipo de relaciones para extraer. Identifica y extrae automáticamente todo tipo de relaciones mediadas por verbos entre dos nombres / sustantivos-frases.
Se basa en reglas simples sobre etiquetas de voz parcial, por lo tanto es extremadamente rápido, es decir, en comparación con otros sistemas que se basan en el análisis sintáctico.
El código está disponible aquí
ACTUALIZACIÓN: He escrito en una publicación de blog cómo utilizar ReVerb PoS-patterns para extraer triples relacionales de artículos de noticias: