Verarbeitung und Analyse von Texten in Python und Spark NLP

Heutzutage kann kein Projekt ohne Analyse und Textverarbeitung auskommen, und es kommt einfach so vor, dass Python über eine breite Palette von Bibliotheken und Frameworks für NLP-Aufgaben verfügt. Aufgaben können ebenso trivial sein: Analyse der Textstimmung, Stimmung, Entitätserkennung (NER) und interessantere Bots, Vergleich von Dialogen in Support-Chats - um zu überwachen, ob Ihr technischer Support oder Verkaufstextskripte überwacht werden sollen, oder Textnachbearbeitung nach SpeechToText .





Zur Lösung von NLP-Problemen steht eine Vielzahl von Tools zur Verfügung. Hier ist eine kurze Liste von denen:





  • CoreNLP





  • NLTK





  • TextBlob





  • Spacy





  • Spark NLP





Wie Sie verstehen, wird sich die Sprache auf Letzteres konzentrieren, da sie fast alles enthält, was die oben genannten Bibliotheken tun können. Es gibt sowohl kostenlosen Pre - trainierte Modelle und bezahlt, hoch diejenigen spezialisiert, zum Beispiel für Gesundheitswesen .





Zum Ausführen von Spark NLP benötigen Sie Java 8 - es wird für das Apache Spark-Framework benötigt, mit dem Spark NLP arbeitet. Das Experimentieren auf einem Server oder einem lokalen Computer erfordert mindestens 16 GB RAM. Es ist besser, es auf einer Linux-Distribution zu installieren (unter macOS können Schwierigkeiten auftreten). Ich persönlich habe die Ubuntu-Instanz unter AWS ausgewählt.





apt-get -qy install openjdk-8







Sie müssen auch Python3 und verwandte Bibliotheken installieren





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-, , : . , .





Beispiel für eine Spark-NLP-Pipeline
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, .





Ich möchte auch darauf hinweisen, dass beide Optionen zum Abrufen benannter Entitäten einige Zeit benötigen, um Apache Spark zu initialisieren, Modelle vorzuladen und eine Verbindung zwischen dem Python-Interpreter und Spark über pyspark herzustellen. Daher möchten Sie das Skript nicht wirklich mit dem Code über 10-100 Mal neu starten. Sie müssen für das Vorladen sorgen und den Text einfach verarbeiten, indem Sie "Predict" aufrufen. In meinem Fall habe ich die Initialisierung der Pipelines vorgenommen, die ich während der Initialisierung benötigt habe von Sellerie-Arbeitern.





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



Auf diese Weise können Sie NLP-Aufgaben ohne Hirnschmerzen und mit minimalem Aufwand ausführen.








All Articles