2011-08-05 12 views
9

Ok, tengo el siguiente código para entrenar el Identificador de NER OpenNLP¿Cómo entreno un identificador de identificador de entidad con nombre en OpenNLP?

FileReader fileReader = new FileReader("train.txt"); 
ObjectStream fileStream = new PlainTextByLineStream(fileReader); 
ObjectStream sampleStream = new NameSampleDataStream(fileStream); 
TokenNameFinderModel model = NameFinderME.train("pt-br", "train", sampleStream, Collections.<String, Object>emptyMap()); 
nfm = new NameFinderME(model); 

No sé si estoy haciendo algo mal si falta algo, pero la clasificación no está funcionando. Supongo que el tren.txt está mal.

El error que ocurre es que todos los tokens se clasifican en un solo tipo.

Mi información train.txt es algo así como el siguiente ejemplo, pero con mucha más variación y cantidad de entradas. Otra cosa es que estoy clasificando palabra por palabra de un texto por vez, y no todos los tokens.

<START:distance> 8000m <END> 
<START:temperature> 100ºC <END> 
<START:weight> 50kg <END> 
<START:name> Renato <END> 

¿Alguien puede mostrar lo que estoy haciendo mal?

+0

¿Podría decirme qué versión de OpenNLP está utilizando? Porque estoy usando OpenNLP 1.5.1 y no hay ningún archivo de modelo para la temperatura, distancia y peso. –

+0

@ raj.singh No estoy usando OpenNLP. Estoy codificando mi propio clasificador para mis propósitos ahora. –

+0

Hola @Renato Dinhani, tengo el mismo problema, ¿me pueden ayudar, cómo lo han resuelto en su aplicación? Obtuve este error cuando voy a nosotros mi excepción train.txt: java.security.NoSuchAlgorithmException –

Respuesta

22

Sus datos de entrenamiento no son correctos.

usted debe poner todas las entidades en un contexto dentro de una frase:

At an altitude of <START:distance> 8000m <END> the temperature of boiling water is less than <START:temperature> 100ºC <END> . 
The climber <START:name> Renato <END> is carrying <START:weight> 50kg <END> of equipment. 

tendrá mejores resultados si sus datos de entrenamiento se deriva de las oraciones del mundo real y tienen el mismo estilo de las frases que usted está clasificando. Por ejemplo, debe entrenar usando un corpus de periódico si va a procesar noticias.

¡También necesitarás miles de oraciones para construir tu modelo! Tal vez puedas comenzar con cien para arrancar y usar el modelo pobre para mejorar tu corpus y entrenar a tu modelo de nuevo.

Y, por supuesto, debe clasificar todos los tokens de una oración, de lo contrario no habrá ningún contexto para decidir el tipo de entidad.

+0

Hola wcolen, tengo el mismo problema, ¿puedes darme algún enlace o ejemplo para el tren de frases? –

+1

@ Riddhish.Chaudhari, vea el ejemplo aquí: http://svn.apache.org/viewvc/opennlp/trunk/opennlp-tools/src/test/resources/opennlp/tools/sentdetect/Sentences.txt?view=markup . Debe tener una oración por línea y una línea en blanco para el nuevo párrafo. – wcolen

Cuestiones relacionadas