Processamento e análise de textos em Python e Spark NLP

Hoje em dia, nenhum projeto pode prescindir de análise e processamento de texto, e acontece que Python possui uma ampla gama de bibliotecas e frameworks para tarefas de PNL. As tarefas podem ser tão triviais: análise de sentimento de texto, humor, reconhecimento de entidade (NER) e bots mais interessantes, comparação de diálogos em bate-papos de suporte - para monitorar se seu suporte técnico ou scripts de texto de vendas devem ser monitorados, ou pós-processamento de texto após SpeechToText .





Um grande número de ferramentas está disponível para resolver problemas de PNL. Aqui está uma pequena lista deles:





  • CoreNLP





  • NLTK





  • TextBlob





  • Spacy





  • Spark PNL





A fala, como você entende, se concentrará no último, uma vez que inclui quase tudo que as bibliotecas acima podem fazer. Existem modelos pré - treinados gratuitos e pagos, altamente especializados, por exemplo, na área da saúde .





Para executar o Spark NLP, você precisa do Java 8 - ele é necessário para a estrutura do Apache Spark com a qual o Spark NLP funciona. A experiência em um servidor ou máquina local requer um mínimo de 16 GB de RAM. É melhor instalá-lo em alguma distribuição Linux (podem surgir dificuldades no macOS), pessoalmente escolhi a instância do Ubuntu no AWS.





apt-get -qy install openjdk-8







Você também precisa instalar o Python3 e 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-, , : . , .





Exemplo de pipeline do 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, .





Também gostaria de observar que ambas as opções para obter entidades nomeadas requerem algum tempo para inicializar o Apache Spark, pré-carregar modelos e estabelecer uma conexão entre o interpretador Python e o Spark via pyspark. Portanto, você realmente não deseja reiniciar o script com o código acima de 10-100 vezes, você precisa fornecer o pré-carregamento e simplesmente processar o texto chamando Predict, no meu caso eu fiz a inicialização dos pipelines que precisava durante a inicialização de trabalhadores do aipo.





#  
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()
      
      



Dessa forma, você pode realizar tarefas de PNL sem dores cerebrais e com um mínimo de esforço.








All Articles