AWSからPythonへの3つの自然言語処理ツール


写真Eric Krull 角恩Unsplash .
構文解析とドキュメントを処理すると、会社のほとんどすべての部門に多くの価値を提供することができます.これは自然言語処理(またはNLP)が便利になる多くのユースケースの1つです.
NLPはチャットボットやGmailのためだけではなく、あなたのメールで書くつもりだ予測しています.NLPはまた、ブレークダウン、分類、およびドキュメントを自動的に分析するために使用することができます.たとえば、おそらくあなたの会社は、すべての契約を介して関係を見つけるために探しているか、またはブログの記事や映画のスクリプトについてのものを分類しようとしている.
これは、いくつかの形式のNLP処理を使用すると非常に便利になる可能性があります.これは、件名、繰り返しのテーマ、代名詞を分解することができますドキュメントからもっと.
今、質問は、どのようにそれを行うのですか?
あなたは、文章、単語、意味、感情などを破壊するゼロからカスタムニューラルネットワークを開発する必要がありますか?
これはおそらく最高の解決策ではないでしょう.少なくとも最初のMVPのためではありません.代わりに、ブレークダウンドキュメントを助けるために使用できるライブラリとクラウドサービスがたくさんあります.
この記事では、3つのオプションと、これらのツールをPythonでドキュメントを解析する方法を検討します.私たちはAWS Comprehend、GCPの自然言語、およびTextBlobを調べるつもりです.

AWSニュース
AWS Comprehend は、あなたのチームがあなた自身の構築の複雑さなしでニューラルネットワークと他のモデルを利用するのを許す多くのクラウドサービスのうちの1つです.
この場合、AWS Comprehendは非常に簡単にテキストを処理することができるNLP APIです.
AWS Comprehendについて素晴らしいことは、それが自動的にどのような実体、フレーズ、および構文のような概念がドキュメントに関係しているかを壊すということです.あなたがどんなイベント、組織、人、または製品が文書で参照されるかを壊そうとしているなら、実体は特に役に立ちます.
たくさんのPythonライブラリがあり、名詞や動詞、その他の部分を簡単に分解することができます.しかし、それらの名詞が分類する限り、それらの図書館は正確にラベルをつけるために建設されません.
例を見てみましょう.
この記事のすべてのコード例については、次のテキストを使用します.
If you have ever worked at a FAANG or even technology-driven start-up like Instacart, then you have probably realized that data drives everything.

To the point that analysts, PMs, and product managers are starting to understand SQL out of necessity. SQL is the language of data and if you want to interact with data, you need to know it.

Do you want to easily figure out the average amount of time a user spends on your product, but don’t want to wait for an analyst? You better figure out how to run a query.

This ability to run queries easily is also driven by the fact that SQL editors no longer need to be installed. With cloud-based data, warehouses come SaaS SQL editors. We will talk about a SaaS SQL editor more in the next section.

However, the importance here is you don’t have to wait 30 minutes to install and editor and deal with all the hassle of managing it.

Now you can just go to a URL and access your team’s data warehouse. This has allowed anyone in the company easy access to their data.

We know both from anecdotal experience as well as the fact that indeed.com’s tracking in 2019 has shown a steady requirement for SQL skill sets for the past 5 years.
このテキスト例を受け取り、以下のコードを実行します.

from io import StringIO
import requests
import boto3
import sys


S3_API_PUBLIC = os.environ.get("PUBLIC_KEY")
S3_API_SECRET = os.environ.get("SECRET_KEY")


client_comprehend = boto3.client(
   'comprehend',
   region_name = 'eu-west-1',
   aws_access_key_id = S3_API_PUBLIC,
   aws_secret_access_key = S3_API_SECRET
)
plain_text = # PUT TEST TEXT HERE

dominant_language_response = client_comprehend.detect_dominant_language(
       Text=plain_text)

dominant_language = sorted(dominant_language_response['Languages'], key=lambda k: k['LanguageCode'])[0]['LanguageCode']


if dominant_language not in ['en','es']:
           dominant_language = 'en'

response = client_comprehend.detect_entities(
           Text=plain_text,
           LanguageCode=dominant_language)
print(response)

出力を出力する
上記のコードを実行すると、以下のような出力が得られます.これは短縮版です.しかし、まだ出力を見ることができます.例えば、あなたはQUANTITY シュウは30分と5年でラベルされていた.
{
   "Entities":[
      {
         "Score":0.9316830039024353,
         "Type":"ORGANIZATION",
         "Text":"FAANG",
         "BeginOffset":30,
         "EndOffset":35
      },
      {
         "Score":0.7218282222747803,
         "Type":"TITLE",
         "Text":"Instacart",
         "BeginOffset":76,
         "EndOffset":85
      },
      {
         "Score":0.9762992262840271,
         "Type":"TITLE",
         "Text":"SQL",
         "BeginOffset":581,
         "EndOffset":584
      },
      {
         "Score":0.997804582118988,
         "Type":"QUANTITY",
         "Text":"30 minutes",
         "BeginOffset":801,
         "EndOffset":811
      },
      {
         "Score":0.5189864635467529,
         "Type":"ORGANIZATION",
         "Text":"indeed.com",
         "BeginOffset":1079,
         "EndOffset":1089
      },
      {
         "Score":0.9985176920890808,
         "Type":"DATE",
         "Text":"2019",
         "BeginOffset":1104,
         "EndOffset":1108
      },
      {
         "Score":0.6815792322158813,
         "Type":"QUANTITY",
         "Text":"5 years",
         "BeginOffset":1172,
         "EndOffset":1179
      }
]
     }
ご覧のように、AWS Comprehendは組織や他のエンティティを分解する素晴らしい仕事をします.再び、それは、実体を壊すだけに限られていません.しかし、この機能は、ドキュメント間の関係を探すしようとするときに、より便利なものの一つです.

自然言語
Googleは、Cloudと呼ばれる非常に類似したNLPクラウドサービスを作成しましたCloud Natural Language .
これは、エンティティ検出、カスタムエンティティの検出、コンテンツの分類など、同様の機能の多くを提供しています.
GCPの自然言語処理のバージョンを文字列で使用しましょう.以下のコードは、GCPを使用してエンティティを検出する例を示します.

from googleapiclient import discovery
import httplib2
from oauth2client.client import GoogleCredentials

DISCOVERY_URL = ('https://{api}.googleapis.com/'
                '$discovery/rest?version={apiVersion}')

def gcp_nlp_example():

    http = httplib2.Http()

    credentials = GoogleCredentials.get_application_default().create_scoped(
     ['https://www.googleapis.com/auth/cloud-platform'])

    http=httplib2.Http()
    credentials.authorize(http)

    service = discovery.build('language', 'v1beta1',
                           http=http, discoveryServiceUrl=DISCOVERY_URL)

    service_request = service.documents().analyzeEntities(
    body={
     'document': {
        'type': 'PLAIN_TEXT',
        'content': # PUT TEXT HERE
    }
   })

    response = service_request.execute()
    print(response)
    return 0

gcp_nlp_example()

自然言語出力
GCP出力はAWS Comprehendのそれと似ています.しかし、GCPも同様の単語を破棄し、元の単語に関連するメタデータを検索しようとします.
//sample

{
   "entities":[
      {
         "name":"SaaS SQL",
         "type":"OTHER",
         "metadata":{
            "mid":"/m/075st",
            "wikipedia_url":"https://en.wikipedia.org/wiki/SQL"
         },
         "salience":0.36921546,
         "mentions":[
            {
               "text":{
                  "content":"SQL",
                  "beginOffset":-1
               },
               "type":"COMMON"
            },
            {
               "text":{
                  "content":"SQL",
                  "beginOffset":-1
               },
               "type":"PROPER"
            },
            {
               "text":{
                  "content":"language",
                  "beginOffset":-1
               },
               "type":"COMMON"
            }
           ]
      }

TextBlobとPython
クラウドサービスプロバイダを使用する他に、ドキュメントから情報を抽出するライブラリもあります.特に、TextBlob library ちょっとPythonではとても便利です.個人的には、NLPパイプラインを開発することを学んだ最初のライブラリでした.
それは完全ではない.しかし、ドキュメントを解析するのは素晴らしい仕事です.
それはAWS ComprehendとGCPの自然言語だけでなく、感情分析のような音声解析の一部を提供しています.しかし、それ自身で、それはどんな実体が存在するかについて分類しません.
それはまだ基本的な単語の種類を打破するのに最適なツールです.
このライブラリを使用して開発者は、動詞、名詞、または音声の他の部分を破壊することができますし、パターンを探します.どのような言葉が一般的に使用される?どの特定のフレーズや単語を読者を集めている?どの単語が他の名詞と共通ですか?
あなたが最終的な目標に応じて開発することができます質問と多くの質問がまだあります.
TextBlobライブラリの実装は非常に簡単です.
この場合、APIに接続する必要はありません.あなたがする必要があるすべてのライブラリをインポートし、いくつかのクラスを呼び出します.
次のコードに示します.
from textblob import TextBlob
t=#PUT YOUR TEXT HERE
blob = TextBlob(t)
for i in blob.noun_phrases:
    print(i)

TextBlob出力
TextBlobの出力です.あなたは、AWSとGCPの両方を使用して引き出される同様の語の多くを見ます.しかしながら、APIとともに来るすべての余分のラベリングとメタデータがありません.それはあなたがAWSとGCPの両方で(いくつかの他の有用な機能の中で)支払っているものです:
faang
technology-driven start-up
instacart
pms
product managers
sql
sql
average amount
don ’ t
query.this ability
sql
saas sql
saas sql
don ’ t
url
team ’ s data warehouse
easy access
anecdotal experience
indeed.com ’ s
steady requirement
Sql
そして、それで、我々はあなたがあなたの文書または生のテキストにNLPを使うことができる3つの異なる方法をカバーしました.

NLPはハードである必要はありません
NLPは、プロセスドキュメントを支援し、それらを分類し、関係を探して素晴らしいツールです.AWSとGCPのおかげで、多くのより少ない技術的な開発者は若干のNLP機能を利用することができます.
それが言われて、NLPに多くの困難な面があります.例えば、会話を追跡するのが得意であるchatbotsを開発しなければならなくて、文脈は簡単な仕事でありません.実際には、ここでは偉大なシリーズがありますAdam Geitgey ちょうどそれをカバーします.記事を読むことができますNatural Language Processing Is Fun.
あなたの次のNLPプロジェクトが何であるかについての幸運.
あなたがデータサイエンスとデータ工学についてもっと読みたいならば.以下の記事とビデオをチェックしてください.
How To Analyze Data Without Complicated ETLs For Data Scientists
What Is A Data Warehouse And Why Use It
Kafka Vs RabbitMQ
SQL Best Practices --- Designing An ETL Video
5 Great Libraries To Manage Big Data With Python