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