De nos jours, aucun projet ne peut se passer d'analyse et de traitement de texte, et il se trouve que Python dispose d'un large éventail de bibliothèques et de frameworks pour les tâches PNL. Les tâches peuvent être aussi simples: analyse des sentiments de texte, humeur, reconnaissance d'entités (NER) et des bots plus intéressants, comparaison des dialogues dans les discussions de support - pour contrôler si votre support technique ou vos scripts de vente doivent être surveillés, ou le post-traitement du texte après SpeechToText .
Un grand nombre d'outils sont disponibles pour résoudre les problèmes de PNL. Voici une courte liste de ceux-ci:
La parole, comme vous le comprenez, se concentrera sur ce dernier, car elle comprend presque tout ce que les bibliothèques ci-dessus peuvent faire. Il existe à la fois des modèles pré - formés gratuits et des modèles payants hautement spécialisés, par exemple pour les soins de santé .
Pour exécuter Spark NLP, vous avez besoin de Java 8 - il est nécessaire pour le framework Apache Spark avec lequel Spark NLP fonctionne. L'expérimentation sur un serveur ou une machine locale nécessite un minimum de 16 Go de RAM. Il vaut mieux l'installer sur certaines distributions Linux (des difficultés peuvent survenir sous macOS), personnellement j'ai choisi l'instance Ubuntu sur AWS.
apt-get -qy install openjdk-8
Vous devez également installer Python3 et les bibliothèques associées
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-, , : . , .
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
])
documentAssembler - Document,
tokenizer -
embeddings -
ner_model - . : October 28, 1955 = DATE
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, .
Je voudrais également noter que les deux options pour obtenir des entités nommées nécessitent un certain temps pour initialiser Apache Spark, précharger les modèles et établir une connexion entre l'interpréteur Python et Spark via pyspark. Par conséquent, vous ne voulez pas vraiment redémarrer le script avec le code au-dessus de 10 à 100 fois, vous devez prévoir un préchargement et simplement traiter le texte en appelant prédire, dans mon cas j'ai fait l'initialisation des pipelines dont j'avais besoin lors de l'initialisation des ouvriers du céleri.
#
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 cette façon, vous pouvez effectuer des tâches de PNL sans douleur cérébrale et avec un minimum d'effort.