Tutorial Klasifikasi Konten

Audience

Tutorial ini dirancang untuk memungkinkan Anda secara cepat mulai menjelajahi dan mengembangkan aplikasi dengan Cloud Natural Language API. Kursus ini dirancang untuk orang-orang yang memahami pemrograman dasar, meskipun tanpa banyak pengetahuan pemrograman, Anda harus dapat mengikutinya. Setelah mengikuti tutorial ini, Anda akan dapat menggunakan Dokumentasi referensi untuk membuat aplikasi dasar Anda sendiri.

Tutorial ini memandu aplikasi Natural Language menggunakan kode Python. Tujuannya di sini bukan untuk menjelaskan library klien Python, tetapi menjelaskan cara melakukan panggilan ke Natural Language API. Aplikasi di Java dan Node.js pada dasarnya mirip. Lihat Sample Natural Language API untuk mengetahui sampel dalam bahasa lain (termasuk contoh dalam tutorial ini).

Prasyarat

Tutorial ini memiliki beberapa prasyarat:

Ringkasan

Tutorial ini memandu Anda memahami aplikasi Natural Language dasar, menggunakan permintaan classifyText, yang mengklasifikasikan konten ke dalam kategori bersama dengan skor keyakinan, seperti:

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

Untuk melihat daftar semua label kategori yang tersedia, lihat Kategori.

Dalam tutorial ini, Anda akan membuat aplikasi untuk melakukan tugas berikut:

  • Mengklasifikasikan beberapa file teks dan menulis hasilnya ke file indeks.
  • Memproses teks kueri input untuk menemukan file teks yang serupa.
  • Memproses label kategori kueri input untuk menemukan file teks yang serupa.

Tutorial ini menggunakan konten dari Wikipedia. Anda dapat membuat aplikasi serupa untuk memproses artikel berita, komentar online, dan sebagainya.

File Sumber

Anda dapat menemukan kode sumber tutorial dalam Contoh Library Klien Python di GitHub.

Tutorial ini menggunakan contoh teks sumber dari Wikipedia. Anda dapat menemukan contoh file teks di folder resources/texts pada project GitHub.

Mengimpor library

Untuk menggunakan Cloud Natural Language API, Anda harus mengimpor modul language dari library google-cloud-language. Modul language.types berisi class yang diperlukan untuk membuat permintaan. Modul language.enums digunakan untuk menentukan jenis teks input. Tutorial ini mengklasifikasikan konten teks biasa (language.enums.Document.Type.PLAIN_TEXT).

Untuk menghitung kesamaan antarteks berdasarkan klasifikasi konten yang dihasilkannya, tutorial ini menggunakan numpy untuk penghitungan vektor.

Python

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Natural Language, lihat library klien Natural Language. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python Natural Language.

Untuk mengautentikasi ke Natural Language, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

import argparse
import json
import os

from google.cloud import language_v1
import numpy

Langkah 1. Mengklasifikasikan konten

Anda dapat menggunakan library klien Python untuk membuat permintaan ke Natural Language API untuk mengklasifikasikan konten. Library klien Python mengenkapsulasi detail permintaan dan respons dari Natural Language API.

Fungsi classify dalam tutorial memanggil metode classifyText Natural Language API, dengan terlebih dahulu membuat instance class LanguageServiceClient, lalu memanggil metode classify_text dari instance LanguageServiceClient.

Fungsi classify tutorial hanya mengklasifikasikan konten teks untuk contoh ini. Anda juga dapat mengklasifikasi konten halaman web dengan meneruskan HTML sumber halaman web sebagai text dan dengan menetapkan parameter type ke language.enums.Document.Type.HTML.

Untuk informasi selengkapnya, lihat Mengklasifikasi Konten. Untuk mengetahui detail tentang struktur permintaan ke Natural Language API, lihat Referensi Natural Language.

Python

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Natural Language, lihat library klien Natural Language. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python Natural Language.

Untuk mengautentikasi ke Natural Language, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

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

Hasil yang ditampilkan adalah kamus dengan label kategori sebagai kunci, dan skor keyakinan sebagai nilai, seperti:

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

Skrip Python tutorial diatur sehingga dapat dijalankan dari command line untuk eksperimen cepat. Misalnya, Anda dapat menjalankan:

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. "

Langkah 2. Mengindeks beberapa file teks

Fungsi index dalam skrip tutorial ini mengambil, sebagai input, direktori yang berisi beberapa file teks, dan jalur ke file tempat hasil yang diindeks akan disimpan (nama file default adalah index.json). Fungsi index membaca konten setiap file teks di direktori input, kemudian meneruskan file teks ke Cloud Natural Language API untuk diklasifikasikan ke dalam berbagai kategori konten.

Python

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Natural Language, lihat library klien Natural Language. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python Natural Language.

Untuk mengautentikasi ke Natural Language, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

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

Hasil dari Cloud Natural Language API untuk setiap file disusun ke dalam satu kamus, diserialisasi sebagai string JSON, lalu ditulis ke file. Contoh:

{
    "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
    }
}

Untuk mengindeks file teks dari command line dengan nama file output default index.json, jalankan perintah berikut:

python classify_text_tutorial.py index resources/texts

Langkah 3. Buat kueri indeks

Kueri dengan label kategori

Setelah file indeks (nama file default = index.json) dibuat, kita dapat membuat kueri ke indeks untuk mengambil beberapa nama file dan skor keyakinannya.

Salah satu cara untuk melakukannya adalah dengan menggunakan label kategori sebagai kueri, yang dilakukan tutorial dengan fungsi query_category. Implementasi fungsi bantuan, seperti similarity, dapat ditemukan dalam file classify_text_tutorial.py. Dalam aplikasi Anda, skor dan peringkat kemiripan harus didesain dengan cermat untuk kasus penggunaan tertentu.

Python

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Natural Language, lihat library klien Natural Language. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python Natural Language.

Untuk mengautentikasi ke Natural Language, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

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

Untuk daftar semua kategori yang tersedia, lihat Kategori.

Seperti sebelumnya, Anda dapat memanggil fungsi query_category dari command line:

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

Anda akan melihat output yang mirip dengan berikut ini:

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

Kueri dengan teks

Atau, Anda dapat membuat kueri dengan teks yang mungkin bukan bagian dari teks yang diindeks. Fungsi query tutorial mirip dengan fungsi query_category, dengan langkah tambahan yaitu membuat permintaan classifyText untuk input teks, dan menggunakan hasilnya untuk membuat kueri file indeks.

Python

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Natural Language, lihat library klien Natural Language. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python Natural Language.

Untuk mengautentikasi ke Natural Language, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

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

Untuk melakukannya dari command line, jalankan:

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. "

Tindakan ini akan mencetak sesuatu yang mirip dengan berikut ini:

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

Langkah selanjutnya

Dengan API klasifikasi konten, Anda dapat membuat aplikasi lain. Contoh:

  • Klasifikasikan setiap paragraf dalam artikel untuk melihat transisi antartopik.

  • Mengklasifikasikan konten dengan stempel waktu dan menganalisis tren topik dari waktu ke waktu.

  • Bandingkan kategori konten dengan sentimen konten menggunakan metode analyzeSentiment.

  • Bandingkan kategori konten dengan entitas yang disebutkan dalam teks.

Selain itu, produk Google Cloud Platform lainnya dapat digunakan untuk menyederhanakan alur kerja Anda:

  • Dalam aplikasi contoh untuk tutorial ini, kami memproses file teks lokal, tetapi Anda dapat mengubah kode untuk memproses file teks yang disimpan di bucket Google Cloud Storage dengan meneruskan URI Google Cloud Storage ke metode classify_text.

  • Dalam aplikasi contoh untuk tutorial ini, kami menyimpan file indeks secara lokal, dan setiap kueri diproses dengan membaca seluruh file indeks. Artinya, latensi tinggi jika Anda memiliki data terindeks dalam jumlah besar atau jika Anda perlu memproses banyak kueri. Datastore adalah pilihan alami dan praktis untuk menyimpan data indeks.