Tutorial sulla classificazione dei contenuti

Pubblico

Questo tutorial è stato pensato per consentirti di iniziare rapidamente a esplorare e lo sviluppo di applicazioni con l'API Cloud Natural Language. È pensato per chi ha dimestichezza con la programmazione di base, anche se dovresti riuscire a seguire la guida anche senza molte conoscenze in materia. Dopo aver seguito questo tutorial, dovresti essere in grado di utilizzare la documentazione di riferimento per creare le tue applicazioni di base.

Questo tutorial illustra i passaggi di un'applicazione Natural Language mediante Python le API nel tuo codice. Lo scopo non è spiegare le librerie client Python, ma spiegare come effettuare chiamate all'API Natural Language. Applicazioni in Java e Node.js sono essenzialmente simili. Consulta la sezione Samples dell'API Natural Language per esempi in altre lingue (incluso l'esempio in questo tutorial).

Prerequisiti

Questo tutorial prevede diversi prerequisiti:

Panoramica

Questo tutorial illustra un'applicazione Natural Language di base, utilizzando Richieste classifyText, che classificano i contenuti in categorie insieme a un punteggio di confidenza come:

category: "/Internet & Telecom/Mobile & Wireless/Mobile Apps & Add-Ons"
confidence: 0.6499999761581421

Per visualizzare l'elenco di tutte le etichette di categoria disponibili, consulta Categorie.

In questo tutorial, creerai un'applicazione per eseguire le seguenti attività:

  • Classificare più file di testo e scrivere i risultati in un file di indice.
  • Elabora il testo della query di input per trovare file di testo simili.
  • Elabora le etichette delle categorie di query di input per trovare file di testo simili.

Il tutorial utilizza contenuti di Wikipedia. Potresti creare un'applicazione simile per elaborare articoli, commenti online e così via.

File di origine

Puoi trovare il codice sorgente del tutorial nella Esempi di librerie client Python su GitHub.

Questo tutorial utilizza un testo di origine di esempio di Wikipedia. Puoi trovare file di testo di esempio risorse/testi del progetto GitHub.

Importazione di librerie

Per utilizzare l'API Cloud Natural Language, devi importare Modulo language dalla raccolta google-cloud-language. Il modulo language.types contiene le classi necessarie per la creazione delle richieste. Il modulo language.enums viene utilizzato per specificare il tipo di testo di input. Questo tutorial classifica contenuti di testo normale (language.enums.Document.Type.PLAIN_TEXT).

Per calcolare la somiglianza tra i testi in base alla classificazione dei contenuti risultante, questo tutorial utilizza numpy per i calcoli vettoriali.

Python

Per scoprire come installare e utilizzare la libreria client per Natural Language, consulta Librerie client di Natural Language. Per ulteriori informazioni, consulta API Natural Language Python documentazione di riferimento.

Per eseguire l'autenticazione in Natural Language, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

import argparse
import json
import os

from google.cloud import language_v1
import numpy

Passaggio 1: Classificazione dei contenuti

Puoi utilizzare la libreria client Python per effettuare una richiesta alla API Natural Language per classificare i contenuti. La libreria client Pythoncapsula i dettagli delle richieste e delle risposte dell'API Natural Language.

La funzione classify nel tutorial chiama il metodo classifyText dell'API Natural Language, creando prima un'istanza della classe LanguageServiceClient e poi chiamando il metodo classify_text dell'istanza LanguageServiceClient.

La funzione classify del tutorial classifica solo i contenuti di testo per questo esempio. Puoi anche classificare i contenuti di una pagina web passando il codice HTML di origine della pagina come text e impostando il parametro type su language.enums.Document.Type.HTML.

Per ulteriori informazioni, consulta la sezione Classificare i contenuti. Per maggiori dettagli sulla struttura delle richieste all'API Natural Language, consulta Riferimento al linguaggio naturale.

Python

Per scoprire come installare e utilizzare la libreria client per Natural Language, vedi Librerie client di Natural Language. Per ulteriori informazioni, consulta API Natural Language Python documentazione di riferimento.

Per autenticarti a Natural Language, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

def classify(text, verbose=True):
    """Classify the input text into categories."""

    language_client = language_v1.LanguageServiceClient()

    document = language_v1.Document(
        content=text, type_=language_v1.Document.Type.PLAIN_TEXT
    )
    response = language_client.classify_text(request={"document": document})
    categories = response.categories

    result = {}

    for category in categories:
        # Turn the categories into a dictionary of the form:
        # {category.name: category.confidence}, so that they can
        # be treated as a sparse vector.
        result[category.name] = category.confidence

    if verbose:
        print(text)
        for category in categories:
            print("=" * 20)
            print("{:<16}: {}".format("category", category.name))
            print("{:<16}: {}".format("confidence", category.confidence))

    return result

Il risultato restituito è un dizionario con le etichette di categoria come chiavi e punteggi di confidenza come valori, ad esempio:

{
    "/Computers & Electronics": 0.800000011920929,
    "/Internet & Telecom/Mobile & Wireless/Mobile Apps & Add-Ons": 0.6499999761581421
}

Lo script Python del tutorial è organizzato in modo da poter essere eseguito dalla riga di comando per esperimenti rapidi. Ad esempio, puoi eseguire:

python classify_text_tutorial.py classify "Google Home enables users to speak voice commands to interact with services through the Home's intelligent personal assistant called Google Assistant. A large number of services, both in-house and third-party, are integrated, allowing users to listen to music, look at videos or photos, or receive news updates entirely by voice. "

Passaggio 2: Indicizza più file di testo

La funzione index nello script del tutorial riceve come input una directory contenente più file di testo e il percorso di un file in cui viene archiviato l'output indicizzato (il nome file predefinito è index.json). La funzione index legge i contenuti di ogni file di testo nella directory di input e poi li passa all'API Cloud Natural Language per la classificazione in categorie di contenuti.

Python

Per scoprire come installare e utilizzare la libreria client per Natural Language, vedi Librerie client di Natural Language. Per ulteriori informazioni, consulta API Natural Language Python documentazione di riferimento.

Per eseguire l'autenticazione in Natural Language, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

def index(path, index_file):
    """Classify each text file in a directory and write
    the results to the index_file.
    """

    result = {}
    for filename in os.listdir(path):
        file_path = os.path.join(path, filename)

        if not os.path.isfile(file_path):
            continue

        try:
            with open(file_path) as f:
                text = f.read()
                categories = classify(text, verbose=False)

                result[filename] = categories
        except Exception:
            print(f"Failed to process {file_path}")

    with open(index_file, "w", encoding="utf-8") as f:
        f.write(json.dumps(result, ensure_ascii=False))

    print(f"Texts indexed in file: {index_file}")
    return result

I risultati dell'API Cloud Natural Language per ogni file sono organizzati in un unico dizionario, serializzati come stringa JSON e poi scritti in un file. Ad esempio:

{
    "android.txt": {
        "/Computers & Electronics": 0.800000011920929,
        "/Internet & Telecom/Mobile & Wireless/Mobile Apps & Add-Ons": 0.6499999761581421
    },
    "google.txt": {
        "/Internet & Telecom": 0.5799999833106995,
        "/Business & Industrial": 0.5400000214576721
    }
}

a indicizzare i file di testo dalla riga di comando con il nome file di output predefinito index.json, esegui questo comando:

python classify_text_tutorial.py index resources/texts

Passaggio 3: Esegui una query sull'indice

Eseguire query con etichette delle categorie

Una volta creato il file indice (nome file predefinito = index.json), possiamo eseguire query sull'indice per recuperare alcuni dei nomi file e i relativi punteggi di attendibilità.

Un modo per farlo è utilizzare un'etichetta di categoria come query, come avviene nel tutorial con la funzione query_category. L'implementazione le funzioni helper, come similarity, sono disponibili nella classify_text_tutorial.py file. Nelle tue applicazioni, il ranking e il punteggio di somiglianza devono essere progettati con attenzione in base a casi d'uso specifici.

Python

Per scoprire come installare e utilizzare la libreria client per Natural Language, vedi Librerie client di Natural Language. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Natural Language Python.

Per eseguire l'autenticazione in Natural Language, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

def query_category(index_file, category_string, n_top=3):
    """Find the indexed files that are the most similar to
    the query label.

    The list of all available labels:
    https://cloud.google.com/natural-language/docs/categories
    """

    with open(index_file) as f:
        index = json.load(f)

    # Make the category_string into a dictionary so that it is
    # of the same format as what we get by calling classify.
    query_categories = {category_string: 1.0}

    similarities = []
    for filename, categories in index.items():
        similarities.append((filename, similarity(query_categories, categories)))

    similarities = sorted(similarities, key=lambda p: p[1], reverse=True)

    print("=" * 20)
    print(f"Query: {category_string}\n")
    print(f"\nMost similar {n_top} indexed texts:")
    for filename, sim in similarities[:n_top]:
        print(f"\tFilename: {filename}")
        print(f"\tSimilarity: {sim}")
        print("\n")

    return similarities

Per un elenco di tutte delle categorie disponibili, consulta la sezione Categorie.

Come prima, puoi chiamare la funzione query_category dalla riga di comando:

python classify_text_tutorial.py query-category index.json "/Internet & Telecom/Mobile & Wireless"

Dovresti vedere un output simile al seguente:

Query: /Internet & Telecom/Mobile & Wireless


Most similar 3 indexed texts:
  Filename: android.txt
  Similarity: 0.665573579045


  Filename: google.txt
  Similarity: 0.517527175966


  Filename: gcp.txt
  Similarity: 0.5

Query con testo

In alternativa, puoi eseguire query con testo che potrebbe non far parte del testo. La funzione query del tutorial è simile alla funzione query_category, con l'aggiunta di una richiesta classifyText per l'input di testo, utilizzando i risultati per eseguire query sul file di indice.

Python

Per scoprire come installare e utilizzare la libreria client per Natural Language, vedi Librerie client di Natural Language. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Natural Language Python.

Per eseguire l'autenticazione in Natural Language, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

def query(index_file, text, n_top=3):
    """Find the indexed files that are the most similar to
    the query text.
    """

    with open(index_file) as f:
        index = json.load(f)

    # Get the categories of the query text.
    query_categories = classify(text, verbose=False)

    similarities = []
    for filename, categories in index.items():
        similarities.append((filename, similarity(query_categories, categories)))

    similarities = sorted(similarities, key=lambda p: p[1], reverse=True)

    print("=" * 20)
    print(f"Query: {text}\n")
    for category, confidence in query_categories.items():
        print(f"\tCategory: {category}, confidence: {confidence}")
    print(f"\nMost similar {n_top} indexed texts:")
    for filename, sim in similarities[:n_top]:
        print(f"\tFilename: {filename}")
        print(f"\tSimilarity: {sim}")
        print("\n")

    return similarities

Per farlo dalla riga di comando, esegui:

python classify_text_tutorial.py query index.json "Google Home enables users to speak voice commands to interact with services through the Home's intelligent personal assistant called Google Assistant. A large number of services, both in-house and third-party, are integrated, allowing users to listen to music, look at videos or photos, or receive news updates entirely by voice. "

Viene visualizzato un messaggio simile al seguente:

Query: Google Home enables users to speak voice commands to interact with services through the Home's intelligent personal assistant called Google Assistant. A large number of services, both in-house and third-party, are integrated, allowing users to listen to music, look at videos or photos, or receive news updates entirely by voice.

  Category: /Internet & Telecom, confidence: 0.509999990463
  Category: /Computers & Electronics/Software, confidence: 0.550000011921

Most similar 3 indexed texts:
  Filename: android.txt
  Similarity: 0.600579500049


  Filename: google.txt
  Similarity: 0.401314790229


  Filename: gcp.txt
  Similarity: 0.38772339779

Passaggi successivi

Con l'API di classificazione dei contenuti puoi creare altre applicazioni. Ad esempio:

  • Classifica ogni paragrafo di un articolo per vedere la transizione tra gli argomenti.

  • Classifica i contenuti con timestamp e analizza la tendenza degli argomenti nel tempo.

  • Confronta le categorie di contenuti con il relativo sentiment utilizzando il metodo analyzeSentiment.

  • Confrontare le categorie di contenuti con le entità menzionate nel testo.

Inoltre, puoi utilizzare altri prodotti della piattaforma Google Cloud per semplificare il flusso di lavoro:

  • Nell'applicazione di esempio per questo tutorial abbiamo elaborato file di testo locali, ma puoi modificare il codice per elaborare i file di testo archiviati in un bucket Google Cloud Storage passando un URI Google Cloud Storage al metodo classify_text.

  • Nell'applicazione di esempio per questo tutorial, abbiamo archiviato il file di indice localmente e ogni query viene elaborata leggendo l'intero file di indice. Ciò significa una latenza elevata se hai una grande quantità di dati indicizzati o se devi elaborare numerose query. Datastore è una scelta naturale e comoda per archiviare i dati dell'indice.