¿Cómo convertir en inicio texto anotado ner para spacy? (CONLL-U a JSON) -- spacy campo con ner camp Relacionados El problema

How to convert in INCEpTION annotated text NER for spaCy? (CoNLL-U to json)


2
vote

problema

Español

Estoy usando inicio para anotar a las entidades nombradas que quiero usar para entrenar un modelo con Spacy. Hay varias opciones (por ejemplo, CONLL 2000, CONLL CORENLP, CONLL-U) en Inicio para exportar el texto anotado. He exportado el archivo como CONLL-U y yo queremos convertirlo a JSON ya que se requiere este formato de archivo para capacitar al módulo NER Spacy. Alguien ha hecho una pregunta similar, pero la respuesta no me ayuda ( aquí ).

Este es el texto de prueba anotado que estoy usando

spacy's convertir script es:

  python -m spacy convert [input_file] [output_dir] [--file-type] [--converter] [--n-sents] [--morphology] [--lang]   

Mi primer problema es que no puedo convertir el archivo a .Json. Cuando utilice el código a continuación, solo obtener una salida sin ninguna entidades con nombre (consulte la última salida):

  !python -m spacy convert Teest.conllu   

También intenté agregar una ruta de salida y JSON

  !python -m spacy convert Teest.conllu C:Users json   

Pero luego obtengo el siguiente error:

  usage: spacy convert [-h] [-t json] [-n 1] [-s] [-b None] [-m] [-c auto]                      [-l None]                      input_file [output_dir] spacy convert: error: unrecognized arguments: Users json   

Mi segundo problema es que la salida no contiene ninguna entidades con nombre, ni índice de inicio y extremo:

  [   {     "id":0,     "paragraphs":[       {         "sentences":[           {             "tokens":[               {                 "id":0,                 "orth":"Hallo",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":1,                 "orth":",",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":2,                 "orth":"dies",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":3,                 "orth":"ist",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":4,                 "orth":"ein",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":5,                 "orth":"Test",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":6,                 "orth":"um",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":7,                 "orth":"zu",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":8,                 "orth":"schauen",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":9,                 "orth":",",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":10,                 "orth":"wie",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":11,                 "orth":"in",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":12,                 "orth":"Inception",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":13,                 "orth":"annotiert",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":14,                 "orth":"wird",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":15,                 "orth":".",                 "tag":"_",                 "head":0,                 "dep":"_"               }             ]           }         ]       }     ]   },   {     "id":1,     "paragraphs":[       {         "sentences":[           {             "tokens":[               {                 "id":0,                 "orth":"Funktioniert",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":1,                 "orth":"es",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":2,                 "orth":"?",                 "tag":"_",                 "head":0,                 "dep":"_"               }             ]           }         ]       }     ]   },   {     "id":2,     "paragraphs":[       {         "sentences":[           {             "tokens":[               {                 "id":0,                 "orth":"Simon",                 "tag":"_",                 "head":0,                 "dep":"_"               }             ]           }         ]       }     ]   } ]   

Estoy usando Spacy versión 2.3.0 y Python versión 3.8.3.

Actualización: He usado un nuevo archivo desde que quería averiguar si hay algún problema con el idioma. Cuando estoy exportando el archivo como CANNL NEE NLP, el archivo contiene entidades nombradas:

  1   I'm         _   _   O       _   _ 2   trying      _   _   Verb    _   _ 3   to          _   _   O       _   _ 4   fix         _   _   Verb    _   _ 5   some        _   _   O       _   _ 6   problems    _   _   O       _   _ 7   .           _   _   O       _   _      1   But         _   _   O       _   _ 2   why         _   _   O       _   _ 3   it          _   _   O       _   _ 4   this        _   _   O       _   _ 5   not         _   _   O       _   _ 6   working     _   _   Verb    _   _ 7   ?           _   _   O       _   _  1   Simon       _   _   Name    _   _   

Sin embargo, Wen intento cambiar el archivo NLP de CANL CORE con

  !python -m spacy convert Teest.conll   

El error

  line 68, in read_conllx     id_, word, lemma, pos, tag, morph, head, dep, _1, iob = parts ValueError: not enough values to unpack (expected 10, got 7)   

aparece.

Actualización: Al agregar 3 líneas más de pestaña separadas "_" antes de que funcione la conversión. La salida es:

  [   {     "id":0,     "paragraphs":[       {         "sentences":[           {             "tokens":[               {                 "id":0,                 "orth":"I'm",                 "tag":"_",                 "head":0,                 "dep":"_",                 "ner":"O"               },               {                 "id":1,                 "orth":"trying",                 "tag":"_",                 "head":0,                 "dep":"_",                 "ner":"U-rb"               },               {                 "id":2,                 "orth":"to",                 "tag":"_",                 "head":0,                 "dep":"_",                 "ner":"O"               },               {                 "id":3,                 "orth":"fix",                 "tag":"_",                 "head":0,                 "dep":"_",                 "ner":"U-rb"               },               {                 "id":4,                 "orth":"some",                 "tag":"_",                 "head":0,                 "dep":"_",                 "ner":"O"               },               {                 "id":5,                 "orth":"problems",                 "tag":"_",                 "head":0,                 "dep":"_",                 "ner":"O"               },               {                 "id":6,                 "orth":".",                 "tag":"_",                 "head":0,                 "dep":"_",                 "ner":"O"               }             ]           }         ]       }     ]   },   {     "id":1,     "paragraphs":[       {         "sentences":[           {             "tokens":[               {                 "id":0,                 "orth":"But",                 "tag":"_",                 "head":0,                 "dep":"_",                 "ner":"O"               },               {                 "id":1,                 "orth":"why",                 "tag":"_",                 "head":0,                 "dep":"_",                 "ner":"O"               },               {                 "id":2,                 "orth":"it",                 "tag":"_",                 "head":0,                 "dep":"_",                 "ner":"O"               },               {                 "id":3,                 "orth":"this",                 "tag":"_",                 "head":0,                 "dep":"_",                 "ner":"O"               },               {                 "id":4,                 "orth":"not",                 "tag":"_",                 "head":0,                 "dep":"_",                 "ner":"O"               },               {                 "id":5,                 "orth":"working",                 "tag":"_",                 "head":0,                 "dep":"_",                 "ner":"U-rb"               },               {                 "id":6,                 "orth":"?",                 "tag":"_",                 "head":0,                 "dep":"_",                 "ner":"O"               }             ]           }         ]       }     ]   },   {     "id":2,     "paragraphs":[       {         "sentences":[           {             "tokens":[               {                 "id":0,                 "orth":"Simon",                 "tag":"_",                 "head":0,                 "dep":"_",                 "ner":"U-me"               }             ]           }         ]       }     ]   } ]   

Aún así, no puedo convertirlo directamente a un archivo .json y, por lo que sé, se requieren tuplas para entrenar el módulo ner de Spacy. E.G.:

  [('Berlin is a city.', {'entities': (0, 5, 'LOC'), (7, 8, 'VERB'), (12, 15, 'NOUN')]})]   
Original en ingles

I'm using INCEpTION to annotate Named Entities which I want to use to train a model with spaCy. There are several options (e.g. CoNLL 2000, CoNLL CoreNLP, CoNLL-U) in INCEpTION to export the annotated text. I have exported the file as CoNLL-U and I want to convert it to json since this file format is required to train spaCy's NER module. Someone has asked a similar question but the answer doesn't help me (here).

This is the annotated test text that I am using

spaCy's convert script is:

python -m spacy convert [input_file] [output_dir] [--file-type] [--converter] [--n-sents] [--morphology] [--lang] 

My first problem is, that I can't convert the file to .json. When I use the code below, I only get an output without any Named Entities (see last output):

!python -m spacy convert Teest.conllu 

I also tried to add a output path and json

!python -m spacy convert Teest.conllu C:\Users json 

But then I get the following error:

usage: spacy convert [-h] [-t json] [-n 1] [-s] [-b None] [-m] [-c auto]                      [-l None]                      input_file [output_dir] spacy convert: error: unrecognized arguments: Users json 

My second problem is, that the output does not contain any Named Entities, nor start and end index:

[   {     "id":0,     "paragraphs":[       {         "sentences":[           {             "tokens":[               {                 "id":0,                 "orth":"Hallo",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":1,                 "orth":",",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":2,                 "orth":"dies",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":3,                 "orth":"ist",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":4,                 "orth":"ein",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":5,                 "orth":"Test",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":6,                 "orth":"um",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":7,                 "orth":"zu",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":8,                 "orth":"schauen",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":9,                 "orth":",",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":10,                 "orth":"wie",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":11,                 "orth":"in",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":12,                 "orth":"Inception",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":13,                 "orth":"annotiert",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":14,                 "orth":"wird",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":15,                 "orth":".",                 "tag":"_",                 "head":0,                 "dep":"_"               }             ]           }         ]       }     ]   },   {     "id":1,     "paragraphs":[       {         "sentences":[           {             "tokens":[               {                 "id":0,                 "orth":"Funktioniert",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":1,                 "orth":"es",                 "tag":"_",                 "head":0,                 "dep":"_"               },               {                 "id":2,                 "orth":"?",                 "tag":"_",                 "head":0,                 "dep":"_"               }             ]           }         ]       }     ]   },   {     "id":2,     "paragraphs":[       {         "sentences":[           {             "tokens":[               {                 "id":0,                 "orth":"Simon",                 "tag":"_",                 "head":0,                 "dep":"_"               }             ]           }         ]       }     ]   } ] 

I am using spaCy version 2.3.0 and Python version 3.8.3.

UPDATE: I have used a new file since I wanted to find out if there are any issues with the language. When I'm exporting the file as CoNNL Core NLP, the file contains Named entities:

1   I'm         _   _   O       _   _ 2   trying      _   _   Verb    _   _ 3   to          _   _   O       _   _ 4   fix         _   _   Verb    _   _ 5   some        _   _   O       _   _ 6   problems    _   _   O       _   _ 7   .           _   _   O       _   _      1   But         _   _   O       _   _ 2   why         _   _   O       _   _ 3   it          _   _   O       _   _ 4   this        _   _   O       _   _ 5   not         _   _   O       _   _ 6   working     _   _   Verb    _   _ 7   ?           _   _   O       _   _  1   Simon       _   _   Name    _   _ 

However, wen I try to comvert the CoNNL Core NLP file with

!python -m spacy convert Teest.conll 

the error

line 68, in read_conllx     id_, word, lemma, pos, tag, morph, head, dep, _1, iob = parts ValueError: not enough values to unpack (expected 10, got 7) 

shows up.

UPDATE: By adding 3 more lines of tab separated "_" before the ner the conversion works. The output is:

[   {     "id":0,     "paragraphs":[       {         "sentences":[           {             "tokens":[               {                 "id":0,                 "orth":"I'm",                 "tag":"_",                 "head":0,                 "dep":"_",                 "ner":"O"               },               {                 "id":1,                 "orth":"trying",                 "tag":"_",                 "head":0,                 "dep":"_",                 "ner":"U-rb"               },               {                 "id":2,                 "orth":"to",                 "tag":"_",                 "head":0,                 "dep":"_",                 "ner":"O"               },               {                 "id":3,                 "orth":"fix",                 "tag":"_",                 "head":0,                 "dep":"_",                 "ner":"U-rb"               },               {                 "id":4,                 "orth":"some",                 "tag":"_",                 "head":0,                 "dep":"_",                 "ner":"O"               },               {                 "id":5,                 "orth":"problems",                 "tag":"_",                 "head":0,                 "dep":"_",                 "ner":"O"               },               {                 "id":6,                 "orth":".",                 "tag":"_",                 "head":0,                 "dep":"_",                 "ner":"O"               }             ]           }         ]       }     ]   },   {     "id":1,     "paragraphs":[       {         "sentences":[           {             "tokens":[               {                 "id":0,                 "orth":"But",                 "tag":"_",                 "head":0,                 "dep":"_",                 "ner":"O"               },               {                 "id":1,                 "orth":"why",                 "tag":"_",                 "head":0,                 "dep":"_",                 "ner":"O"               },               {                 "id":2,                 "orth":"it",                 "tag":"_",                 "head":0,                 "dep":"_",                 "ner":"O"               },               {                 "id":3,                 "orth":"this",                 "tag":"_",                 "head":0,                 "dep":"_",                 "ner":"O"               },               {                 "id":4,                 "orth":"not",                 "tag":"_",                 "head":0,                 "dep":"_",                 "ner":"O"               },               {                 "id":5,                 "orth":"working",                 "tag":"_",                 "head":0,                 "dep":"_",                 "ner":"U-rb"               },               {                 "id":6,                 "orth":"?",                 "tag":"_",                 "head":0,                 "dep":"_",                 "ner":"O"               }             ]           }         ]       }     ]   },   {     "id":2,     "paragraphs":[       {         "sentences":[           {             "tokens":[               {                 "id":0,                 "orth":"Simon",                 "tag":"_",                 "head":0,                 "dep":"_",                 "ner":"U-me"               }             ]           }         ]       }     ]   } ] 

Still, I can't convert this directly to a .json file and as far as I know, tuples are required to train spaCy's NER module. E.g.:

[('Berlin is a city.', {'entities': (0, 5, 'LOC'), (7, 8, 'VERB'), (12, 15, 'NOUN')]})] 
     
 
 

Lista de respuestas

0
 
vote

Entiendo tu dolor.
Debe escribir manualmente un script para convertir su última salida en una salida formateada SPACY.

Una mejor solución sería usar la spacy-anotator que le permite anotar entibites y obtenga una salida en un formato que le gusta Space. Aquí es cómo se ve:

ingrese la descripción de la imagen aquí

 

I understand your pain.
You need to manually write a script to convert your last output into a spacy formatted output.

A better solution would be to use the spacy-annotator which allows you to annotate entitites and get an output in a format that spaCy likes. Here is how it looks like:

enter image description here

 
 
 
 
0
 
vote

He encontrado una solución para usar inicios como una herramienta de anotación para entrenar spacy 's módulo ner. He intentado varios formatos de archivo, pero en mi opinión, solo es posible con CONLL 2002 y usando Spacy en la interfaz de la línea de comandos.

  1. anotando el texto en inicio
  2. exportar el texto anotado como un archivo CONLL 2002
  3. Configurar la interfaz de la línea de comandos (aquí se usa Windows)
  python -m venv .venv .venvScriptsactivate.bat   
  1. Instale Spacy si es necesario y descargue el modelo de idioma requerido (estoy usando el modelo de inglés grande)
  pip install spacy python -m spacy download en_core_web_lg   
  1. Convierte la Conll 2002 al formato de entrada requerido de SPACY
  python -m spacy convert --converter ner file_name.conll [output file direction]   

Este paso no debería funcionar ya que CONLL 2002 usa IOB2 y el convertidor de Spacy requiere IOB. Sin embargo, no tenía ningún problema y el archivo de salida .json es correcto.

  1. Herramienta de depuración-datos, capacitación y evaluación

aquí es un ejemplo bastante bueno de cómo puede procesar con el archivo convertido.

 

I have found a solution to use INCEpTION as an annotation tool to train spaCy's NER module. I have tried various file formats but in my opinion, it is only possible with CoNLL 2002 and using spaCy at the Command Line Interface.

  1. Annotate the text in INCEpTION
  2. Export the annotated text as a CoNLL 2002 file
  3. Setup the Command Line Interface (here Windows is used)
python -m venv .venv .venv\Scripts\activate.bat 
  1. Install spaCy if necessary and download the required language model (I'm using the large english model)
pip install spacy python -m spacy download en_core_web_lg 
  1. Convert the CoNLL 2002 to spaCy's required input format
python -m spacy convert --converter ner file_name.conll [output file direction] 

This step shouldn't work since CoNLL 2002 uses IOB2 and spaCy's converter requires IOB. However, I didn't have any problems and the .json output file is correct.

  1. Debug-Data tool, training and evaluation

Here is a pretty good example how you can process with the converted file.

 
 

Relacionados problema

0  Tren de espacios en lote de oraciones  ( Spacy train in batch of sentences ) 
Me preguntaba si es posible entrenar al modelo NER en lotes de oraciones en lugar de 1 oración a la vez, como se hace aquí: https://github.com/explosion/spac...

9  ¿Cómo usar una capa CRF en TensorFlow 2 (usando TFA.Text)?  ( How to use a crf layer in tensorflow 2 using tfa text ) 
model= Sequential() model.add(keras.layers.Embedding(vocab_size,output_dim=100,input_length=input_len,weights=[embedding_matrix],trainable=False)) model.add(...

0  Construye GoldDoc con un formato de desplazamiento de espacios para entrenar un modelo en blanco con CLI  ( Build golddoc with a spacy offset format to train a blank model with cli ) 
Actualmente estoy haciendo ner con 3 etiquetas: persona teléfono dirección Soy capaz de entrenar mi modelo con el código de Python, pero quiero usar...

0  ¿Cómo convertir los datos XML NER del CRAFT Corpus al formato JSON de Spacy?  ( How to convert xml ner data from the craft corpus to spacys json format ) 
Cómo construir un modelo de reconocimiento de entidades con nombre (NER) usando Spaty para biomédico ner en Craft Corpus ? Es difícil para mí pre-procesa...

0  Spacy: Un token solo puede ser parte de una entidad, así que asegúrese de que las entidades que esté configurando no se superpongan ... Cómo hacer uso de Filter_SPANS  ( Spacy a token can only be part of one entity so make sure the entities youre ) 
asumiendo a continuación son mis datos de tren id, hour, count id1, 0, 12 id1, 1, 55 .. id1, 23, 44 id2, 0, 12 id2, 1, 89 .. id2, 23, 34 etc. 111 Cómo u...

1  Texto a palabra por línea + etiqueta de entidad nombrada en Python  ( Text to word per line named entity tag in python ) 
Estoy haciendo un reconocimiento de entidades con nombre y estoy luchando con poner datos en el formato correcto, usando Python. Lo que tengo es una cierta ca...

0  STANFORDNLP Entrenamiento de la iteración para el clasificador de CRF  ( Stanfordnlp training iteration for crf classifier ) 
Sé que es una pregunta simple. Pero solo quiero asegurarme. ¿Todas las muestras del conjunto de datos de entrenamiento utilizadas en cada iteraciones en el cl...

0  Diferentes valores de precisión / recuerdo / F1 al reproducir la demostración de Stanford Corenlp Austen en CLI y código  ( Different precision recall f1 values when reproducing stanford corenlp austen de ) 
Estoy tratando de validar mi código Java basado en Stanford Corenlp con los archivos Jane Austen de Preguntas frecuentes de Stanford CRF . Estoy entrenando c...

-2  Detección del nombre de la persona con Spacy en inglés Lang. Buscando respuesta  ( Person name detection using spacy in english lang looking for answer ) 
Estoy usando Spacy e intentando detectar nombres en el texto. Por ejemplo, Text = 'Keras es un buen paquete. Adam Smith usa un coche de color negro. Espero qu...

3  En Space, ¿por qué se etiqueta constantemente ' N' constantemente como GPE por inglés ner?  ( In spacy why is n constantly tagged as gpe by english ner ) 
Estoy empezando a familiarizarse con Spacy V2.0. Cuando ejecuto Lightning_Tour.py con mis propios documentos, estoy viendo que el final de la cadena de la lín...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos