Γρήγορη ανάλυση συναισθήματος και API ανίχνευσης οντοτήτων στην Python

1
Γρήγορη ανάλυση συναισθήματος και API ανίχνευσης οντοτήτων στην Python

Ζούμε ένα καταπληκτικό περίοδος καινοτομίας στην Επεξεργασία Φυσικής Γλώσσας (NLP) έρευνα. Ποτέ δεν ήταν πιο απλό να αποκτήσετε πρόσβαση σε αλγόριθμους και τεχνολογία αιχμής για δική σας χρήση, με εκπληκτική δουλειά από εταιρείες όπως π.χ. Πρόσωπο αγκαλιάς και Έκρηξη (Spacy). Σε αυτήν την ανάρτηση δύο μερών, θα εξετάσουμε τη χρήση της Python με το FastAPI για τη δημιουργία ενός API επεξεργασίας φυσικής γλώσσας (NLP).

Θα μάθουμε τι είναι ένα API και θα δημιουργήσουμε ένα API βασισμένο σε Python που μπορεί να εντοπίσει θετικά και αρνητικά συναισθήματα και να βρει «οντότητες» όπως άτομα, μέρη και εταιρείες από οποιοδήποτε κείμενο.

Όλος ο κώδικας, τα παραδείγματα και οι απαιτήσεις για αυτό το σεμινάριο είναι διαθέσιμο στο GitHub αν θέλετε να ακολουθήσετε.

Λογότυπο και σύμβολο GitHub, νόημα, ιστορία, PNG

Αυτή η ανάρτηση είναι εμπνευσμένη από τη δουλειά μου στο EdgeTierόπου κατασκευάζουμε μεγάλης κλίμακας συστήματα ανάλυσης συναισθήματος και ανίχνευσης ανωμαλιών για εφαρμογές εξυπηρέτησης πελατών, επεξεργάζεται χιλιάδες μηνύματα πελατών και πρακτόρων κάθε δευτερόλεπτο. Ενώ συχνά δουλεύουμε με Το Flask ως πλαίσιο API στην Python, έχουμε επίσης εξετάσει FastAPI, μια άλλη ελαφριά και σύγχρονη βιβλιοθήκη πλαισίου API.

Τι είναι ένα API;

Εάν ξεκινάτε στην επιστήμη δεδομένων ή στον προγραμματισμό γενικά, η έννοια του API μπορεί να είναι δύσκολο να κατανοηθεί. Μπορείτε να σκεφτείτε ένα API (τεχνικά μια «Διεπαφή Προγραμματισμού Εφαρμογών») ως ένα πρόγραμμα υπολογιστή που έχει δημιουργηθεί για να επικοινωνεί με άλλα προγράμματα υπολογιστών μέσω του Διαδικτύου.

Τι είναι τα API και πώς λειτουργούν τα API;  |  Ιστολόγιο MuleSoft
Τα API ή „διεπαφές προγραμματισμού εφαρμογών“ είναι προγράμματα λογισμικού που εκτελούνται σε υπολογιστές συνδεδεμένους στο δίκτυο και μπορούν να επεξεργαστούν „αιτήματα“ από άλλους υπολογιστές.

Σκεφτείτε το Διαδίκτυο ως ένα σωρό υπολογιστές, που συχνά αποκαλούνται «διακομιστές», (απλώς μεγάλοι υπολογιστές) που είναι όλοι συνδεδεμένοι μέσω ενός δικτύου (καλώδια / wifi / οπτικές ίνες αποτελούν όλα αυτό το δίκτυο). Συχνά υπάρχει λογισμικό σε διακομιστές που έχει σχεδιαστεί για να λαμβάνει «αιτήματα» από άλλους διακομιστές – αυτά τα προγράμματα λογισμικού ονομάζονται API. Ένα «αίτημα» μπορεί να είναι η ανάκτηση δεδομένων, η αποθήκευση δεδομένων ή η ενημέρωση δεδομένων. Πολύ συχνά, τα αιτήματα γίνονται χρησιμοποιώντας το πρωτόκολλο «HTTP» (η ίδια μέθοδος με την οποία το πρόγραμμα περιήγησής σας λαμβάνει δεδομένα και πώς εμφανίσατε αυτήν τη σελίδα στην οθόνη σας).

Για τα προσανατολισμένα στον προγραμματισμό, τα σύγχρονα API συχνά στέλνουν και λαμβάνουν δεδομένα σε μορφή JSON, η οποία είναι εύκολη στην ανάγνωση και χρήση σχεδόν σε κάθε γλώσσα προγραμματισμού.

Παραδείγματα API που ίσως γνωρίζετε

Για να ζωντανέψει αυτό, ακολουθούν μερικά παραδείγματα:

  • Γεωκωδικοποίηση: Η Google παρέχει ένα εξαιρετικό API για γεωκωδικοποίηση (η μετατροπή των συμβολοσειρών διευθύνσεων σε συντεταγμένες GPS). Αυτά τα API χρησιμοποιούνται από άτομα που δημιουργούν ιστότοπους ή εφαρμογές που πρέπει να αλλάξουν τις συμβολοσειρές τοποθεσίας σε συντεταγμένες GPS. Σε έναν από αυτούς τους ιστότοπους, μπορείτε να φανταστείτε τη συμπλήρωση της διεύθυνσής σας και στο παρασκήνιο, ο ιστότοπος κάνει ένα „Αίτημα API“ στην Google και στέλνει τη συμβολοσειρά της διεύθυνσής σας. Η Google στέλνει τις συντεταγμένες GPS πίσω στην „Απάντηση API“ και η εφαρμογή σάς δείχνει έναν όμορφο χάρτη γύρω από το σπίτι σας. Η Google χρεώνει ένα μικρό ποσό ανά αίτημα που υποβάλλεται στο API.
  • Δελτία καιρού: Η γνώση του καιρού αυτή τη στιγμή και η γνώση της πρόγνωσης για μια τοποθεσία είναι χρήσιμη σε τόνους εφαρμογών, από ιστιοπλοΐα μέχρι γκολφ. Οποιαδήποτε εφαρμογή με αυτήν τη δυνατότητα χρησιμοποιεί, κατά πάσα πιθανότητα, ένα αίτημα και απόκριση API όταν το ανοίγετε για να «πάρει» δεδομένα καιρού από ένα API καιρού πριν σας το παρουσιάσει με μια οπτική προτροπή. Μπορείτε να δείτε ένα εξαιρετικό παράδειγμα στο WeatherAPIκαι έχω κάνει δουλειά στο παρελθόν με δεδομένα καιρού και μετακινήσεις χρησιμοποιώντας το Wunderground API.
  • Μεταφορά: Η αγαπημένη σας εφαρμογή προγραμματισμού μεταφορών; Δεν γνωρίζει σχεδόν εσωτερικά την τοποθεσία σε πραγματικό χρόνο κάθε λεωφορείου που αναζητάτε. Σε αυτήν την περίπτωση, μπορείτε να φανταστείτε το άνοιγμα της εφαρμογής, μια εργασία στο παρασκήνιο που «ζητά» την τοποθεσία σε πραγματικό χρόνο του λεωφορείου που σας ενδιαφέρει και στη συνέχεια, με την απάντηση, να σας δείχνει το σημείο στον χάρτη. Για παράδειγμα, εδώ είναι τα API για Ώρες τρένων στην Ινδία, μεταφορά στην Ιρλανδίακαι το API κρατήσεων πτήσεων SkyScanner.

Τι χτίζουμε – Ένα NLP API

Για αυτό το σεμινάριο, πρόκειται να δημιουργήσουμε ένα API που μπορεί να εκτελεί τέσσερα βήματα:

  1. Λήψη κειμένου μέσω αιτήματος API (μπορούμε να χρησιμοποιήσουμε ένα αίτημα „GET“ ή „POST“, που είναι απλώς διαφορετικοί τύποι αιτημάτων HTTP. Χρησιμοποιείτε συνεχώς αιτήματα GET – το πρόγραμμα περιήγησής σας κάνει ένα αίτημα GET για μια ιστοσελίδα κάθε φορά πληκτρολογείτε μια νέα διεύθυνση URL στη γραμμή διευθύνσεων ή κάνετε κλικ σε έναν σύνδεσμο.)
  2. Εκτελέστε ανάλυση συναισθημάτων στο κείμενο. Η ανάλυση συναισθήματος είναι ο προσδιορισμός της θετικότητας ή της αρνητικότητας σε συμβολοσειρές κειμένου. Για παράδειγμα, „Αυτό το API είναι τρομερό“ θα λάμβανε χαμηλή βαθμολογία συναισθήματος και „Αυτό το σεμινάριο είναι το καλύτερο που έχω δει ποτέ“ θα βαθμολογούσε πολύ θετικά.
  3. Εκτελέστε την αναγνώριση οντοτήτων με όνομα (NER) στο κείμενο. Οι επώνυμες οντότητες είναι στοιχεία κειμένου που αναφέρονται σε „κατονομασμένα στοιχεία“, όπως άτομα, οργανισμούς, τοποθεσίες, ώρες, ποσότητες κ.λπ. Για παράδειγμα, το „Διάβασα αυτήν την ανάρτηση στον ιστότοπο του Shane Lynn“ θα πρέπει να εξαγάγει με επιτυχία το „Person: Shane Lynn“.
  4. Επιστρέψτε τα αποτελέσματα όλης αυτής της ανάλυσης σε μια απόκριση μορφής JSON που μπορεί να χρησιμοποιηθεί σε άλλα προγράμματα.

Το οικοσύστημα της βιβλιοθήκης Python παρέχει εργαλειοθήκες για κάθε ένα από αυτά τα βήματα, μειώνοντας μαζικά την πολυπλοκότητα της λειτουργίας. Πριν από μια δεκαετία, μια εφαρμογή παιχνιδιού με αυτή τη δυνατότητα θα απαιτούσε μια ερευνητική ομάδα και αρκετά χρόνια για να κατασκευαστεί – και θα το κάνετε τώρα σε λιγότερες από 100 γραμμές κώδικα.

Επιλογές βιβλιοθήκης – FastAPI, Spacy, Flair

Διάγραμμα FastAPI NLP API. Αυτό το σεμινάριο δημιουργεί ένα API που χρησιμοποιεί το FastAPI για την επεξεργασία αιτημάτων HTTP που περιέχουν αποσπάσματα κειμένου. Το API ανταποκρίνεται στους χρήστες (ή σε άλλα μηχανήματα) με το συναίσθημα και τις οντότητες που εντοπίζονται στα υποβληθέντα αποσπάσματα. Το Flair και το Spacy χρησιμοποιούνται για την επεξεργασία του NLP.

Πλαίσιο εφαρμογής Ιστού: FastAPI

Για αυτόν τον οδηγό, χρησιμοποιούμε το πλαίσιο FastAPI για να χειριστούμε το τμήμα „εφαρμογή Ιστού“ του API. Αυτό το μέρος του προγράμματος διαχειρίζεται την επικοινωνία μέσω HTTP και εκεί ρυθμίζουμε τις «διαδρομές» ή τις «διαδρομές» που μπορούν να χρησιμοποιήσουν άλλα προγράμματα για την αποστολή κειμένου στο API.

Το FastAPI είναι ένα σχετικά νέο (2018) πλαίσιο εφαρμογών ιστού για την Python. Υπόσχεται μια γρήγορη εκκίνηση αλλά αποτελεσματική μέθοδος για τη δημιουργία web API που αυτοματοποιεί πολλή δημιουργία τεκμηρίωσης. Μου αρέσει ιδιαίτερα η χρήση της πληκτρολόγησης από το FastAPI για επικύρωση παραμέτρων και η εύκολη χρήση με ασύγχρονους τελεστές (ώστε να μπορείτε να επεξεργάζεστε πολλαπλά αιτήματα ταυτόχρονα).

Υπάρχουν άλλα πλαίσια εφαρμογών ιστού που μπορεί να χρησιμοποιηθεί εδώ, όλα με πλεονεκτήματα και μειονεκτήματα, κυρίως στην Python υπάρχουν τα Flask, Django, Cherrypi, Tornado και πολλά άλλα – τα οποία θα μπορούσαν να χρησιμοποιηθούν σε αυτήν την εφαρμογή επίδειξης.

Ανάλυση συναισθήματος: Flair

Κλίση είναι ένα πλαίσιο python για το NLP. Κατασκευάστηκε από την Πανεπιστήμιο Humboldt του Βερολίνου, το Flair ουσιαστικά ολοκληρώνει τακτοποιημένα ισχυρές τεχνικές NLP και μοντέλα ενσωμάτωσης λέξεων για να επιτρέψει στους χρήστες να έχουν πρόσβαση στην τεχνολογία αιχμής με μερικές απλές εντολές. Για όσους δεν ενδιαφέρονται για μοντέλα εκπαίδευσης, το Flair κατεβάζει και εγκαθιστά όλα όσα είναι απαραίτητα και λειτουργεί σε πολλές γλώσσες.

Μετά βίας πρόκειται να χαράξουμε την επιφάνεια με το Flair και να χρησιμοποιήσουμε ένα μοντέλο για την ανάλυση συναισθημάτων. Ο κώδικας στην Python για να το πετύχετε αυτό είναι πολύ απλός με το Flair:

"""
A simple demonstration of sentiment analysis using the Python Flair
library.

Shane Lynn 2021
"""

from flair.models import TextClassifier
from flair.data import Sentence

# For Flair, you load models in advance.
# Note that this is memory intensive and can take some time
sentiment_model = TextClassifier.load("en-sentiment")

# We're going to analyse these two texts for sentiment
sample_text = [
    "I love using Python to make really fast APIs.",
    "I hate silly bugs that happen and annoy me."
]

# Simply iterate through the samples, and run the prediction
for text in sample_text:
    # For Flair, you convert your raw data into "sentences" prior to analysis
    sentence = Sentence(text)
    # This is the analysis step, note that it edits the sentence to include the
    # prediction
    sentiment_model.predict(sentence)
    print(f"The sentence '{text}' is detected as {sentence.labels[0]}.")


Αυτός ο κώδικας πρέπει να βγάζει:

The sentence 'I love using Python to make really fast APIs.' is detected as POSITIVE (0.9981).
The sentence 'I hate silly bugs that happen and annoy me.' is detected as NEGATIVE (0.9856).

Το Flair εξάγει την ετικέτα συναισθήματος (θετικό/αρνητικό) καθώς και την πολικότητα της πρόβλεψης (πόσο έντονα πολωμένη είναι η δήλωση, μεταξύ 0 και 1).

Θυμηθείτε, η ανάλυση συναισθήματος δεν είναι τέλεια, καθώς βασίζεται σε ένα σετ εκπαίδευσης που μπορεί να μην ταιριάζει καλά με το κείμενό σας. θα βρείτε προτάσεις που παρέχουν εσφαλμένα αποτελέσματα σε αυτό που περιμένετε. Ωστόσο, βρήκα ότι ο Flair είναι «γενικά» αρκετά καλός.

Αναγνώριση οντότητας με όνομα: Spacy

Το τελευταίο κομμάτι του παζλ μας θα ονομάζεται αναγνώριση οντοτήτων. Για αυτό, χρησιμοποιούμε τη βιβλιοθήκη Spacy, ένα άλλο πλαίσιο python για εφαρμογές NLP, αναδιπλώνοντας ξανά προεκπαιδευμένα μοντέλα και καθιστώντας τα απίστευτα προσβάσιμα στους προγραμματιστές. Το Spacy είναι μια αποτελεσματική και εύχρηστη βιβλιοθήκη που υποστηρίζει περισσότερες από 60 γλώσσες σε εργασίες NLP, όπως αναγνώριση επώνυμης οντότητας, επισήμανση μέρους του λόγου, ανάλυση εξαρτήσεων, τμηματοποίηση προτάσεων, ταξινόμηση κειμένου, λημματοποίηση και άλλα. Είναι ένα πολύ εντυπωσιακό κομμάτι κιτ, κατασκευασμένο από μια μεγάλη εταιρεία που ονομάζεται Εκρηξη.

Το Spacy λειτουργεί με παρόμοιο τρόπο με το Flair. φορτώνετε ένα προεκπαιδευμένο μοντέλο πριν του περάσετε κείμενο και εξάγετε τα αποτελέσματα αργότερα.

"""
A simple example showing Named-Entity Recognition (NER) with the Spacy
library in Python.

Shane Lynn 2021
"""

import spacy
nlp = spacy.load("en_core_web_sm")

# Here is a sample sentence with some entities:
sample_text = "I was walking down 5th Avenue yesterday in New York City and I saw Bill Gates!"

# For Spacy, first turn your raw text data into a "document":
doc = nlp(sample_text)
# The document then "magically" has everything calculated:
for entity in doc.ents:
    print(f"Entity Detected: {entity.text}, of type: {entity.label_}")

Αυτό το τμήμα κώδικα θα πρέπει να βγάζει:

Entity Detected: 5th Avenue, of type: FAC
Entity Detected: yesterday, of type: DATE
Entity Detected: New York City, of type: GPE
Entity Detected: Bill Gates, of type: PERSON

Το Spacy, out of the box, υποστηρίζει τύπους οντοτήτων:

  • ΠΡΟΣΩΠΟ
  • NORP (εθνικότητα / θρησκευτική / πολιτική ομάδα)
  • FAC (κτίρια / δρόμοι / αυτοκινητόδρομοι)
  • ORG (εταιρείες / ιδρύματα)
  • GPE (τοποθεσίες / χώρες / πόλεις)

Σημειώστε ότι θα μπορούσαμε να χρησιμοποιήσουμε το NER δυνατότητες του Flair στο API μας αντί για Spacy για απλότητα και απόδοση μνήμης (αυτή η απλή εφαρμογή θα είναι πολύ εντατική μνήμη, καθώς φορτώνουμε δύο μοντέλα γλώσσας – περίπου 800mb – 1 GB). Ωστόσο, για λόγους επίδειξης, ήθελα να δείξω και το Spacy και το Flair στην πράξη.

Αναδίπλωση της συνάρτησης ανίχνευσης συναισθήματος και οντοτήτων

Για να κρατήσουμε τα πράγματα απλά, και έτσι. μπορούμε να δούμε μια ξεκάθαρη οριοθέτηση μεταξύ του κώδικα API και του κώδικα NLP μας, μπορούμε να δημιουργήσουμε μια ενιαία λειτουργία που εκτελεί το NLP-heavy lifting για τις νέες μας εφαρμογές.

Λαμβάνοντας τα δείγματα εξαγωγής οντοτήτων και ανίχνευσης συναισθήματος από πάνω, μπορούμε να δημιουργήσουμε ένα συνδυασμό που κάνει τα πάντα με μία κίνηση. Το ακόλουθο τμήμα κώδικα θα λάβει κείμενο στη συνάρτηση και θα το εκτελέσει και στα δύο μοντέλα Spacy και Flair:

from typing import Tuple, List

from typing import Tuple, List
from flair.models import TextClassifier
from flair.data import Sentence
import spacy

nlp = spacy.load("en_core_web_sm")
sentiment_model = TextClassifier.load('en-sentiment')

def get_entities_and_sentiment(text: str) -> Tuple[dict, List[dict]]:
    """Parse a string, and determine sentiment polarity and entities contained within"""
    doc = nlp(text)
    entity_list = [
        {"name": x.text, "type": x.label_} for x in doc.ents
    ]
    sentence = Sentence(text)
    sentiment_model.predict(sentence)
    label = sentence.labels[0]
    sentiment = {'sentiment': label.value, 'polarity':label.score}
    return sentiment, entity_list


# Run a small test
if __name__ == '__main__':
    # We're testing if our sentiment and entity function is working correctly:
    result = get_entities_and_sentiment("I travelled to New York and I hated it.")
    print(result)
    

Μπορούμε να τοποθετήσουμε αυτή τη νέα συνάρτηση σε ένα νέο αρχείο που ονομάζεται get_entities_and_sentiment.py που μπορούμε να εισαγάγουμε στον κώδικα API που θα δούμε στο Μέρος 2 αυτού του σεμιναρίου.

Η εκτέλεση αυτού του αρχείου από μόνο του ως δοκιμή, θα βγει:

>> python get_entities_and_sentiment.py

({'sentiment': 'NEGATIVE', 'polarity': 0.9999203681945801}, [{'name': 'New York', 'type': 'GPE'}])

Προσθήκη του κώδικα NLP σε μια εφαρμογή FastAPI

Το επόμενο βήμα είναι να ενσωματώσουμε τη λειτουργία επεξεργασίας κειμένου παραπάνω σε ένα API, δηλαδή να εκθέσουμε τη λειτουργικότητα στο διαδίκτυο μέσω ενός πλαισίου ιστού.

Μπορείτε να δείτε πώς να το ρυθμίσετε στο Μέρος 2 αυτού του σεμιναρίου (προσεχώς).

Schreibe einen Kommentar