PythonとSparkNLPでのテキストの処理と分析

今日では、分析とワードプロセッシングなしでプロジェクトを実行することはできません。PythonにはNLPタスク用の幅広いライブラリとフレームワークがあります。タスクは簡単なものにすることができます:テキスト感情分析、気分、エンティティ認識(NER)およびより興味深いボット、サポートチャットでのダイアログの比較-技術サポートまたは販売テキストスクリプトを監視する必要があるかどうかを監視する、またはSpeechToText後のテキスト後処理。





NLPの問題を解決するために、膨大な数のツールが利用可能です。これらの短いリストは次のとおりです。





  • CoreNLP





  • NLTK





  • TextBlob





  • Spacy





  • Spark NLP





あなたが理解しているように、スピーチは後者に焦点を合わせます、なぜならそれは上記の図書館がすることができるほとんどすべてを含んでいるからです。両方の自由があり、事前-訓練を受けたモデルとするために、例えば、専門性の高いものを支払った医療が





Spark NLPを実行するには、Java8が必要です。SparkNLPが機能するApacheSparkフレームワークに必要です。サーバーまたはローカルマシンで実験するには、16GB以上のRAMが必要です。一部のLinuxディストリビューションにインストールすることをお勧めします(macOSでは問題が発生する可能性があります)。個人的にはAWSでUbuntuインスタンスを選択しました。





apt-get -qy install openjdk-8







Python3と関連ライブラリもインストールする必要があります





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





SparkNLPパイプラインの例
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, .





また、名前付きエンティティを取得するための両方のオプションは、Apache Sparkを初期化し、モデルをプリロードし、pysparkを介してPythonインタープリターとSpark間の接続を確立するのに時間がかかることにも注意してください。したがって、10〜100回を超えるコードでスクリプトを再起動する必要はありません。プリロードを提供し、predictを呼び出してテキストを処理する必要があります。私の場合、初期化中に必要なパイプラインの初期化を行いました。セロリ労働者の。





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



このようにして、脳の痛みを伴わず、最小限の労力でNLPタスクを実行できます。








All Articles