1. Ringkasan
Natural Language API memungkinkan Anda mengekstrak informasi dari teks tidak terstruktur menggunakan machine learning Google. Dalam tutorial ini, Anda akan berfokus pada penggunaan library klien Python-nya.
Yang akan Anda pelajari
- Cara menyiapkan lingkungan Anda
- Cara melakukan analisis sentimen
- Cara melakukan analisis entity
- Cara melakukan analisis sintaksis
- Cara menjalankan klasifikasi konten
- Cara melakukan moderasi teks
Yang Anda butuhkan
Survei
Bagaimana Anda akan menggunakan tutorial ini?
Bagaimana penilaian Anda terhadap pengalaman dengan Python?
Bagaimana Anda menilai pengalaman Anda dengan layanan Google Cloud?
2. Penyiapan dan persyaratan
Penyiapan lingkungan mandiri
- Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.
- Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API. Anda dapat memperbaruinya kapan saja.
- Project ID bersifat unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID-nya (umumnya diidentifikasi sebagai
PROJECT_ID
). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri, dan lihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan tersedia selama durasi project. - Sebagai informasi, ada nilai ketiga, Project Number, yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
- Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini tidak akan memakan banyak biaya, bahkan mungkin tidak sama sekali. Guna mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus project-nya. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.
Mulai Cloud Shell
Meskipun Google Cloud dapat dioperasikan secara jarak jauh dari laptop Anda, dalam codelab ini Anda akan menggunakan Cloud Shell, yakni lingkungan command line yang berjalan di Cloud.
Mengaktifkan Cloud Shell
- Dari Cloud Console, klik Aktifkan Cloud Shell .
Jika ini pertama kalinya Anda memulai Cloud Shell, Anda akan melihat layar perantara yang menjelaskan apa itu Cloud Shell. Jika Anda melihat layar perantara, klik Lanjutkan.
Perlu waktu beberapa saat untuk penyediaan dan terhubung ke Cloud Shell.
Mesin virtual ini dimuat dengan semua alat pengembangan yang diperlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Sebagian besar pekerjaan Anda dalam codelab ini dapat dilakukan dengan browser.
Setelah terhubung ke Cloud Shell, Anda akan melihat bahwa Anda telah diautentikasi dan project sudah ditetapkan ke project ID Anda.
- Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa Anda telah diautentikasi:
gcloud auth list
Output perintah
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa perintah gcloud mengetahui project Anda:
gcloud config list project
Output perintah
[core] project = <PROJECT_ID>
Jika tidak, Anda dapat menyetelnya dengan perintah ini:
gcloud config set project <PROJECT_ID>
Output perintah
Updated property [core/project].
3. Penyiapan lingkungan
Sebelum Anda dapat mulai menggunakan Natural Language API, jalankan perintah berikut di Cloud Shell untuk mengaktifkan API:
gcloud services enable language.googleapis.com
Anda akan melihat sesuatu seperti ini:
Operation "operations/..." finished successfully.
Sekarang Anda dapat menggunakan Natural Language API.
Buka direktori utama Anda:
cd ~
Buat lingkungan virtual Python untuk mengisolasi dependensi:
virtualenv venv-language
Aktifkan lingkungan virtual:
source venv-language/bin/activate
Instal IPython, Pandas, dan library klien Natural Language API:
pip install ipython pandas tabulate google-cloud-language
Anda akan melihat sesuatu seperti ini:
... Installing collected packages: ... pandas ... ipython ... google-cloud-language Successfully installed ... google-cloud-language-2.11.0 ...
Sekarang, Anda siap untuk menggunakan library klien Natural Language API.
Pada langkah berikutnya, Anda akan menggunakan penafsir Python interaktif yang disebut IPython, yang Anda instal di langkah sebelumnya. Mulai sesi dengan menjalankan ipython
di Cloud Shell:
ipython
Anda akan melihat sesuatu seperti ini:
Python 3.9.2 (default, Feb 28 2021, 17:03:44) Type 'copyright', 'credits' or 'license' for more information IPython 8.15.0 -- An enhanced Interactive Python. Type '?' for help. In [1]:
4. Analisis sentimen
Analisis sentimen memeriksa teks yang diberikan dan mengidentifikasi opini emosional yang ada di dalam teks tersebut, terutama untuk menentukan sentimen yang diungkapkan sebagai positif, negatif, atau netral, baik di tingkat kalimat maupun di dokumen. Hal ini dilakukan dengan metode analyze_sentiment
yang menampilkan AnalyzeSentimentResponse
.
Salin kode berikut ke dalam sesi IPython:
from google.cloud import language
def analyze_text_sentiment(text: str) -> language.AnalyzeSentimentResponse:
client = language.LanguageServiceClient()
document = language.Document(
content=text,
type_=language.Document.Type.PLAIN_TEXT,
)
return client.analyze_sentiment(document=document)
def show_text_sentiment(response: language.AnalyzeSentimentResponse):
import pandas as pd
columns = ["score", "sentence"]
data = [(s.sentiment.score, s.text.content) for s in response.sentences]
df_sentence = pd.DataFrame(columns=columns, data=data)
sentiment = response.document_sentiment
columns = ["score", "magnitude", "language"]
data = [(sentiment.score, sentiment.magnitude, response.language)]
df_document = pd.DataFrame(columns=columns, data=data)
format_args = dict(index=False, tablefmt="presto", floatfmt="+.1f")
print(f"At sentence level:\n{df_sentence.to_markdown(**format_args)}")
print()
print(f"At document level:\n{df_document.to_markdown(**format_args)}")
Lakukan sebuah analisis:
# Input
text = """
Python is a very readable language, which makes it easy to understand and maintain code.
It's simple, very flexible, easy to learn, and suitable for a wide variety of tasks.
One disadvantage is its speed: it's not as fast as some other programming languages.
"""
# Send a request to the API
analyze_sentiment_response = analyze_text_sentiment(text)
# Show the results
show_text_sentiment(analyze_sentiment_response)
Anda akan melihat output seperti berikut:
At sentence level: score | sentence ---------+------------------------------------------------------------------------------------------ +0.8 | Python is a very readable language, which makes it easy to understand and maintain code. +0.9 | It's simple, very flexible, easy to learn, and suitable for a wide variety of tasks. -0.4 | One disadvantage is its speed: it's not as fast as some other programming languages. At document level: score | magnitude | language ---------+-------------+------------ +0.4 | +2.2 | en
Luangkan waktu sejenak untuk menguji kalimat Anda sendiri.
Ringkasan
Pada langkah ini, Anda dapat melakukan analisis sentimen pada sebuah {i>string<i} teks.
5. Analisis entity
Analisis entity memeriksa teks tertentu untuk menemukan entity yang diketahui (kata benda yang tepat seperti tokoh masyarakat, tempat terkenal, dll.), dan menampilkan informasi tentang entity tersebut. Hal ini dilakukan dengan metode analyze_entities
yang menampilkan AnalyzeEntitiesResponse
.
Salin kode berikut ke dalam sesi IPython:
from google.cloud import language
def analyze_text_entities(text: str) -> language.AnalyzeEntitiesResponse:
client = language.LanguageServiceClient()
document = language.Document(
content=text,
type_=language.Document.Type.PLAIN_TEXT,
)
return client.analyze_entities(document=document)
def show_text_entities(response: language.AnalyzeEntitiesResponse):
import pandas as pd
columns = ("name", "type", "salience", "mid", "wikipedia_url")
data = (
(
entity.name,
entity.type_.name,
entity.salience,
entity.metadata.get("mid", ""),
entity.metadata.get("wikipedia_url", ""),
)
for entity in response.entities
)
df = pd.DataFrame(columns=columns, data=data)
print(df.to_markdown(index=False, tablefmt="presto", floatfmt=".0%"))
Lakukan sebuah analisis:
# Input
text = """Guido van Rossum is best known as the creator of Python,
which he named after the Monty Python comedy troupe.
He was born in Haarlem, Netherlands.
"""
# Send a request to the API
analyze_entities_response = analyze_text_entities(text)
# Show the results
show_text_entities(analyze_entities_response)
Anda akan melihat output seperti berikut:
name | type | salience | mid | wikipedia_url ------------------+--------------+------------+-----------+------------------------------------------------------------- Guido van Rossum | PERSON | 50% | /m/01h05c | https://en.wikipedia.org/wiki/Guido_van_Rossum Python | ORGANIZATION | 38% | /m/05z1_ | https://en.wikipedia.org/wiki/Python_(programming_language) creator | PERSON | 5% | | Monty Python | PERSON | 3% | /m/04sd0 | https://en.wikipedia.org/wiki/Monty_Python comedy troupe | PERSON | 2% | | Haarlem | LOCATION | 1% | /m/0h095 | https://en.wikipedia.org/wiki/Haarlem Netherlands | LOCATION | 1% | /m/059j2 | https://en.wikipedia.org/wiki/Netherlands
Luangkan waktu sejenak untuk menguji kalimat Anda sendiri yang menyebutkan entitas lain.
Ringkasan
Pada langkah ini, Anda dapat melakukan analisis entity.
6. Analisis sintaks
Analisis sintaksis mengekstrak informasi linguistik, memecah teks yang diberikan menjadi serangkaian kalimat dan token (umumnya didasarkan pada batas-batas kata), sehingga memberikan analisis lebih lanjut pada token tersebut. Hal ini dilakukan dengan metode analyze_syntax
yang menampilkan AnalyzeSyntaxResponse
.
Salin kode berikut ke dalam sesi IPython:
from typing import Optional
from google.cloud import language
def analyze_text_syntax(text: str) -> language.AnalyzeSyntaxResponse:
client = language.LanguageServiceClient()
document = language.Document(
content=text,
type_=language.Document.Type.PLAIN_TEXT,
)
return client.analyze_syntax(document=document)
def get_token_info(token: Optional[language.Token]) -> list[str]:
parts = [
"tag",
"aspect",
"case",
"form",
"gender",
"mood",
"number",
"person",
"proper",
"reciprocity",
"tense",
"voice",
]
if not token:
return ["token", "lemma"] + parts
text = token.text.content
lemma = token.lemma if token.lemma != token.text.content else ""
info = [text, lemma]
for part in parts:
pos = token.part_of_speech
info.append(getattr(pos, part).name if part in pos else "")
return info
def show_text_syntax(response: language.AnalyzeSyntaxResponse):
import pandas as pd
tokens = len(response.tokens)
sentences = len(response.sentences)
columns = get_token_info(None)
data = (get_token_info(token) for token in response.tokens)
df = pd.DataFrame(columns=columns, data=data)
# Remove empty columns
empty_columns = [col for col in df if df[col].eq("").all()]
df.drop(empty_columns, axis=1, inplace=True)
print(f"Analyzed {tokens} token(s) from {sentences} sentence(s):")
print(df.to_markdown(index=False, tablefmt="presto"))
Lakukan sebuah analisis:
# Input
text = """Guido van Rossum is best known as the creator of Python.
He was born in Haarlem, Netherlands.
"""
# Send a request to the API
analyze_syntax_response = analyze_text_syntax(text)
# Show the results
show_text_syntax(analyze_syntax_response)
Anda akan melihat output seperti berikut:
Analyzed 20 token(s) from 2 sentence(s): token | lemma | tag | case | gender | mood | number | person | proper | tense | voice -------------+---------+-------+------------+-----------+------------+----------+----------+----------+---------+--------- Guido | | NOUN | | | | SINGULAR | | PROPER | | van | | NOUN | | | | SINGULAR | | PROPER | | Rossum | | NOUN | | | | SINGULAR | | PROPER | | is | be | VERB | | | INDICATIVE | SINGULAR | THIRD | | PRESENT | best | well | ADV | | | | | | | | known | know | VERB | | | | | | | PAST | as | | ADP | | | | | | | | the | | DET | | | | | | | | creator | | NOUN | | | | SINGULAR | | | | of | | ADP | | | | | | | | Python | | NOUN | | | | SINGULAR | | PROPER | | . | | PUNCT | | | | | | | | He | | PRON | NOMINATIVE | MASCULINE | | SINGULAR | THIRD | | | was | be | VERB | | | INDICATIVE | SINGULAR | THIRD | | PAST | born | bear | VERB | | | | | | | PAST | PASSIVE in | | ADP | | | | | | | | Haarlem | | NOUN | | | | SINGULAR | | PROPER | | , | | PUNCT | | | | | | | | Netherlands | | NOUN | | | | SINGULAR | | PROPER | | . | | PUNCT | | | | | | | |
Luangkan waktu sejenak untuk menguji kalimat Anda dengan struktur sintaksis lainnya.
Jika mempelajari insight respons lebih dalam, Anda juga akan menemukan hubungan antar-token. Berikut adalah penafsiran visual yang menunjukkan analisis sintaksis lengkap untuk contoh ini, screenshot dari demo Natural Language online:
Ringkasan
Pada langkah ini, Anda telah dapat melakukan analisis sintaks!
7. Klasifikasi konten
Klasifikasi konten menganalisis dokumen dan menampilkan daftar kategori konten yang berlaku untuk teks yang ditemukan dalam dokumen. Hal ini dilakukan dengan metode classify_text
yang menampilkan ClassifyTextResponse
.
Salin kode berikut ke dalam sesi IPython:
from google.cloud import language
def classify_text(text: str) -> language.ClassifyTextResponse:
client = language.LanguageServiceClient()
document = language.Document(
content=text,
type_=language.Document.Type.PLAIN_TEXT,
)
return client.classify_text(document=document)
def show_text_classification(text: str, response: language.ClassifyTextResponse):
import pandas as pd
columns = ["category", "confidence"]
data = ((category.name, category.confidence) for category in response.categories)
df = pd.DataFrame(columns=columns, data=data)
print(f"Text analyzed:\n{text}")
print(df.to_markdown(index=False, tablefmt="presto", floatfmt=".0%"))
Lakukan sebuah analisis:
# Input
text = """Python is an interpreted, high-level, general-purpose programming language.
Created by Guido van Rossum and first released in 1991, Python's design philosophy
emphasizes code readability with its notable use of significant whitespace.
"""
# Send a request to the API
classify_text_response = classify_text(text)
# Show the results
show_text_classification(text, classify_text_response)
Anda akan melihat output seperti berikut:
Text analyzed: Python is an interpreted, high-level, general-purpose programming language. Created by Guido van Rossum and first released in 1991, Python's design philosophy emphasizes code readability with its notable use of significant whitespace. category | confidence --------------------------------------+-------------- /Computers & Electronics/Programming | 99% /Science/Computer Science | 99%
Luangkan waktu sejenak untuk menguji kalimat Anda yang berkaitan dengan kategori lainnya. Perhatikan bahwa Anda harus memberikan blok teks (dokumen) dengan setidaknya dua puluh token (kata dan tanda baca).
Ringkasan
Pada langkah ini, Anda dapat melakukan klasifikasi konten.
8. Moderasi teks
Moderasi teks yang didukung oleh model dasar PaLM 2 Google terbaru dapat mengidentifikasi berbagai konten berbahaya, termasuk ujaran kebencian, penindasan, dan pelecehan seksual. Hal ini dilakukan dengan metode moderate_text
yang menampilkan ModerateTextResponse
.
Salin kode berikut ke dalam sesi IPython:
from google.cloud import language
def moderate_text(text: str) -> language.ModerateTextResponse:
client = language.LanguageServiceClient()
document = language.Document(
content=text,
type_=language.Document.Type.PLAIN_TEXT,
)
return client.moderate_text(document=document)
def show_text_moderation(text: str, response: language.ModerateTextResponse):
import pandas as pd
def confidence(category: language.ClassificationCategory) -> float:
return category.confidence
columns = ["category", "confidence"]
categories = sorted(response.moderation_categories, key=confidence, reverse=True)
data = ((category.name, category.confidence) for category in categories)
df = pd.DataFrame(columns=columns, data=data)
print(f"Text analyzed:\n{text}")
print(df.to_markdown(index=False, tablefmt="presto", floatfmt=".0%"))
Lakukan sebuah analisis:
# Input
text = """I have to read Ulysses by James Joyce.
I'm a little over halfway through and I hate it.
What a pile of garbage!
"""
# Send a request to the API
response = moderate_text(text)
# Show the results
show_text_moderation(text, response)
Anda akan melihat output seperti berikut:
Text analyzed: I have to read Ulysses by James Joyce. I'm a little over halfway through and I hate it. What a pile of garbage! category | confidence -----------------------+-------------- Toxic | 67% Insult | 58% Profanity | 53% Violent | 48% Illicit Drugs | 29% Religion & Belief | 27% Politics | 22% Death, Harm & Tragedy | 21% Finance | 18% Derogatory | 14% Firearms & Weapons | 11% Health | 10% Legal | 10% War & Conflict | 7% Public Safety | 5% Sexual | 4%
Luangkan waktu sejenak untuk menguji kalimat Anda sendiri.
Ringkasan
Pada langkah ini, Anda dapat melakukan moderasi teks.
9. Selamat!
Anda telah mempelajari cara menggunakan Natural Language API dengan Python.
Pembersihan
Untuk membersihkan lingkungan pengembangan Anda, dari Cloud Shell:
- Jika Anda masih berada dalam sesi IPython, kembali ke shell:
exit
- Berhenti menggunakan lingkungan virtual Python:
deactivate
- Hapus folder lingkungan virtual Anda:
cd ~ ; rm -rf ./venv-language
Untuk menghapus project Google Cloud Anda dari Cloud Shell:
- Ambil project ID Anda saat ini:
PROJECT_ID=$(gcloud config get-value core/project)
- Pastikan project ini yang ingin Anda hapus:
echo $PROJECT_ID
- Hapus project:
gcloud projects delete $PROJECT_ID
Pelajari lebih lanjut
- Uji demo di browser Anda: https://cloud.google.com/natural-language#natural-language-api-demo
- Dokumentasi Natural Language: https://cloud.google.com/natural-language/docs
- Python di Google Cloud: https://cloud.google.com/python
- Library Klien Cloud untuk Python: https://github.com/googleapis/google-cloud-python
Lisensi
Karya ini dilisensikan berdasarkan Lisensi Umum Creative Commons Attribution 2.0.