Procesamiento y análisis de textos en Python y Spark NLP

Hoy en día, ningún proyecto puede prescindir del análisis y el procesamiento de textos, y da la casualidad de que Python tiene una amplia gama de bibliotecas y marcos para tareas de PNL. Las tareas pueden ser tan triviales: análisis de sentimiento de texto, estado de ánimo, reconocimiento de entidades (NER) y bots más interesantes, comparación de diálogos en chats de soporte, para monitorear si su soporte técnico o scripts de texto de ventas deben ser monitoreados, o posprocesamiento de texto después de SpeechToText .





Hay una gran cantidad de herramientas disponibles para resolver problemas de PNL. Aquí hay una breve lista de ellos:





  • CoreNLP





  • NLTK





  • TextBlob





  • Spacy





  • Spark NLP





Speech, como comprenderá, se centrará en este último, ya que incluye casi todo lo que pueden hacer las bibliotecas anteriores. Existen modelos gratuitos pre - entrenados y de pago, altamente especializados, por ejemplo, para la atención médica .





Para ejecutar Spark NLP, necesita Java 8; es necesario para el marco Apache Spark con el que funciona Spark NLP. Experimentar en un servidor o máquina local requiere un mínimo de 16 GB de RAM. Es mejor instalarlo en alguna distribución de Linux (pueden surgir dificultades en macOS), personalmente elegí la instancia de Ubuntu en AWS.





apt-get -qy install openjdk-8







También necesita instalar Python3 y bibliotecas relacionadas





apt-get -qy install build-essential python3 python3-pip python3-dev gnupg2







pip install nlu==1.1.3







pip install pyspark==2.4.7







pip install spark-nlp==2.7.4







colab. Spark NLP (pipeline), pipe-, , : . , .





Ejemplo de canalización de Spark NLP
Spark NLP

. ( colab)





documentAssembler = DocumentAssembler() \
    .setInputCol('text') \
    .setOutputCol('document')

tokenizer = Tokenizer() \
    .setInputCols(['document']) \
    .setOutputCol('token')

embeddings = BertEmbeddings.pretrained(name='bert_base_cased', lang='en') \
        .setInputCols(['document', 'token']) \
        .setOutputCol('embeddings')

ner_model = NerDLModel.pretrained('ner_dl_bert', 'en') \
    .setInputCols(['document', 'token', 'embeddings']) \
    .setOutputCol('ner')

ner_converter = NerConverter() \
    .setInputCols(['document', 'token', 'ner']) \
    .setOutputCol('ner_chunk')

nlp_pipeline = Pipeline(stages=[
    documentAssembler, 
    tokenizer,
    embeddings,
    ner_model,
    ner_converter
])
      
      



  1. documentAssembler -  Document, 





  2. tokenizer -





  3. embeddings - 





  4. ner_model - . : October 28, 1955 = DATE





  5. ner_converter - October 28, 1955





, - - , Spark NLP, SparkNLP (johnsnowlabs) SparkNLP - , :





import nlu

pipeline = nlu.load('ner')
result = pipeline.predict(
  text, output_level='document'
).to_dict(orient='records')
      
      



NER, .





También me gustaría señalar que ambas opciones para obtener entidades con nombre requieren algo de tiempo para inicializar Apache Spark, precargar modelos y establecer una conexión entre el intérprete de Python y Spark a través de pyspark. Por lo tanto, realmente no desea reiniciar el script con el código anterior 10-100 veces, debe proporcionar la precarga y simplemente procesar el texto llamando a predecir, en mi caso hice la inicialización de las canalizaciones que necesitaba durante la inicialización de los trabajadores del apio.





#  
pipeline_registry = PipelineRegistry()

def get_pipeline_registry():
    pipeline_registry.register('sentiment', nlu.load('en.sentiment'))
    pipeline_registry.register('ner', nlu.load('ner'))
    pipeline_registry.register('stopwords', nlu.load('stopwords'))
    pipeline_registry.register('stemmer', nlu.load('stemm'))
    pipeline_registry.register('emotion', nlu.load('emotion'))
    return pipeline_registry

@worker_process_init.connect
def init_worker(**kwargs):
    logging.info("Initializing pipeline_factory...")
    get_pipeline_registry()
      
      



De esta forma, puede realizar tareas de PNL sin dolor cerebral y con un mínimo de esfuerzo.








All Articles