实验设置说明和要求
保护您的账号和进度。请务必在无痕浏览器窗口中,使用实验凭证运行此实验。

使用 Natural Language API 对文本进行分类

实验 10 分钟 universal_currency_alt 5 个点数 show_chart 中级
info 此实验可能会提供 AI 工具来支持您学习。
此内容尚未针对移动设备进行优化。
为获得最佳体验,请在桌面设备上访问通过电子邮件发送的链接。

GSP063

Google Cloud 自学实验的徽标

概览

通过 Cloud Natural Language API,您可以从文本中提取实体,执行情感和语法分析并对文本进行分类。本实验的重点是文本分类。此 API 功能借助含 700 多个类别的数据库,让您能轻松地对大型文本数据集进行分类。

目标

在本实验中,您将学习如何完成以下操作:

  • 创建 Natural Language API 请求并使用 curl 调用此 API
  • 使用 Natural Language API 的文本分类功能
  • 利用文本分类来理解新闻报道数据集

设置和要求

点击“开始实验”按钮前的注意事项

请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。

此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。

为完成此实验,您需要:

  • 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式(推荐)或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
  • 完成实验的时间 - 请注意,实验开始后无法暂停。
注意:请仅使用学生账号完成本实验。如果您使用其他 Google Cloud 账号,则可能会向该账号收取费用。

如何开始实验并登录 Google Cloud 控制台

  1. 点击开始实验按钮。如果该实验需要付费,系统会打开一个对话框供您选择支付方式。左侧是“实验详细信息”窗格,其中包含以下各项:

    • “打开 Google Cloud 控制台”按钮
    • 剩余时间
    • 进行该实验时必须使用的临时凭据
    • 帮助您逐步完成本实验所需的其他信息(如果需要)
  2. 点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。

    该实验会启动资源并打开另一个标签页,显示“登录”页面。

    提示:将这些标签页安排在不同的窗口中,并排显示。

    注意:如果您看见选择账号对话框,请点击使用其他账号
  3. 如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。

    {{{user_0.username | "<用户名>"}}}

    您也可以在“实验详细信息”窗格中找到“用户名”。

  4. 点击下一步

  5. 复制下面的密码,然后将其粘贴到欢迎对话框中。

    {{{user_0.password | "<密码>"}}}

    您也可以在“实验详细信息”窗格中找到“密码”。

  6. 点击下一步

    重要提示:您必须使用实验提供的凭据。请勿使用您的 Google Cloud 账号凭据。 注意:在本实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
  7. 继续在后续页面中点击以完成相应操作:

    • 接受条款及条件。
    • 由于这是临时账号,请勿添加账号恢复选项或双重验证。
    • 请勿注册免费试用。

片刻之后,系统会在此标签页中打开 Google Cloud 控制台。

注意:如需访问 Google Cloud 产品和服务,请点击导航菜单,或在搜索字段中输入服务或产品的名称。 “导航菜单”图标和“搜索”字段

激活 Cloud Shell

Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。Cloud Shell 提供可用于访问您的 Google Cloud 资源的命令行工具。

  1. 点击 Google Cloud 控制台顶部的激活 Cloud Shell “激活 Cloud Shell”图标

  2. 在弹出的窗口中执行以下操作:

    • 继续完成 Cloud Shell 信息窗口中的设置。
    • 授权 Cloud Shell 使用您的凭据进行 Google Cloud API 调用。

如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 Project_ID 。输出内容中有一行说明了此会话的 Project_ID

Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}

gcloud 是 Google Cloud 的命令行工具。它已预先安装在 Cloud Shell 上,且支持 Tab 自动补全功能。

  1. (可选)您可以通过此命令列出活跃账号名称:
gcloud auth list
  1. 点击授权

输出:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (可选)您可以通过此命令列出项目 ID:
gcloud config list project

输出:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} 注意:如需查看在 Google Cloud 中使用 gcloud 的完整文档,请参阅 gcloud CLI 概览指南

任务 1. 启用 Cloud Natural Language API

  1. 展开屏幕左上角的导航菜单 (“导航菜单”图标)。

  2. 依次选择 API 和服务 > 已启用的 API 和服务

  1. 点击启用 API 和服务
  1. 然后,在搜索框中搜索 language

  2. 点击 Cloud Natural Language API

如果此 API 尚未启用,您会看到启用按钮。

  1. 点击启用以启用 Cloud Natural Language API。

启用此 API 后,Google Cloud 会显示 API 信息,如下所示:

API 详细信息,包含“管理”和“试用此 API”两个按钮,以及“API 已启用”复选框。

任务 2. 创建 API 密钥

由于您要使用 curl 向 Natural Language API 发送请求,因此需要生成 API 密钥,以传递到请求网址中。

  1. 要创建 API 密钥,请在控制台中依次点击导航菜单 > API 和服务 > 凭证

  2. 然后点击创建凭证

  3. 在下拉菜单中选择 API 密钥

  4. 接下来,复制您刚刚生成的密钥,然后点击关闭

点击检查我的进度以验证是否完成了以下目标:

创建 API 密钥

现在您已经有了 API 密钥,请将其保存为一个环境变量,这样就不必在每个请求中都插入 API 密钥的值。

为执行后续步骤,请通过 SSH 连接到为您预配的实例。

  1. 打开导航菜单,选择 Compute Engine > 虚拟机实例。您应该会看到已预配的 linux-instance
  1. 点击 SSH 按钮。此时会跳转至一个交互式 shell。

  2. 在命令行中,输入以下内容,并将 <YOUR_API_KEY> 替换为您刚刚复制的密钥:

export API_KEY=<YOUR_API_KEY>

任务 3. 对一篇新闻报道进行分类

使用 Natural Language API 的 classifyText 方法,只需调用一次 API 即可完成文本数据的分类。此方法返回一个适用于文本文档的内容类别列表。

这些类别的精细程度各有不同,既有 /Computers & Electronics 这样的宽泛大类,也有 /Computers & Electronics/Programming/Java (Programming Language) 这种非常精细的小类。如需查看 700 多个类别的完整列表,请访问内容类别页面。

首先,对单篇文章进行分类,然后了解如何使用此方法来理解大型新闻语料库。

  1. 先从《纽约时报》美食版块中一篇文章的标题和描述开始练手:

A Smoky Lobster Salad With a Tapa Twist. This spin on the Spanish pulpo a la gallega skips the octopus, but keeps the sea salt, olive oil, pimentón and boiled potatoes.

  1. 创建一个名为 request.json 的文件,并添加以下代码。您可以使用自己喜欢的一种命令行编辑器(例如 nano、vim、emacs)创建该文件。
{ "document":{ "type":"PLAIN_TEXT", "content":"A Smoky Lobster Salad With a Tapa Twist. This spin on the Spanish pulpo a la gallega skips the octopus, but keeps the sea salt, olive oil, pimentón and boiled potatoes." } } 创建一个新闻报道分类请求
  1. 现在,您可以使用以下 curl 命令将此文本发送到 Natural Language API 的 classifyText 方法:
curl "https://language.googleapis.com/v1/documents:classifyText?key=${API_KEY}" \ -s -X POST -H "Content-Type: application/json" --data-binary @request.json

请看响应结果:

{ categories: [ { name: '/Food & Drink/Cooking & Recipes', confidence: 0.85 }, { name: '/Food & Drink/Food/Meat & Seafood', confidence: 0.63 } ] }

您刚才创建了 Speech API 请求并调用了 Speech API。

  1. 运行以下命令,将响应结果保存到 result.json 文件:
curl "https://language.googleapis.com/v1/documents:classifyText?key=${API_KEY}" \ -s -X POST -H "Content-Type: application/json" --data-binary @request.json > result.json 查看实体分析响应结果

对于这段文本,API 返回了 2 个类别:

  • /Food & Drink/Cooking & Recipes
  • /Food & Drink/Food/Meat & Seafood

这段文本没有明确提到这是一份食谱,甚至没有提到其中包含海鲜,但 API 能够这样对它分类。单篇文章的分类确实不错,但要想真正见识此功能的强大之处,还要对大量的文本数据进行分类。

任务 4. 对大型文本数据集进行分类

要想了解 classifyText 方法如何帮助您理解包含大量文本的数据集,请使用 BBC 新闻报道的这一公共数据集。该数据集包含 2004 年至 2005 年间的 2,225 篇文章,涉及五个主题领域(商业、娱乐、政治、体育、科技)。其中一部分文章位于公共 Cloud Storage 存储桶中。每篇文章都存储在一个 .txt 文件中。

要想检查数据并将其发送到 Natural Language API,您需要编写一个 Python 脚本,从 Cloud Storage 读取每个文本文件,将文本发送到 classifyText 端点,然后将结果存储在 BigQuery 表中。BigQuery 是 Google Cloud 的大数据仓库工具,可让您轻松存储和分析大型数据集。

  • 要想查看您将处理的文本类型,请运行以下命令来查看一篇文章(gsutil 提供访问 Cloud Storage 的命令行界面):
gsutil cat gs://spls/gsp063/bbc_dataset/entertainment/001.txt

接下来,您将为您的数据创建一个 BigQuery 表。

任务 5. 为已分类的文本数据创建 BigQuery 表

在将文本发送到 Natural Language API 之前,您需要一个地方来存储每篇文章的文本和类别。

  1. 在控制台中,前往导航菜单 > BigQuery

  2. 点击完成

  3. 要想创建数据集,请点击项目 ID 旁边的查看操作图标,然后选择创建数据集

“查看操作”菜单中突出显示的“创建数据集”选项。

  1. 将数据集命名为 news_classification_dataset,然后点击创建数据集

  2. 要想创建表,请点击 news_classification_dataset 旁边的查看操作图标,然后选择创建表

  1. 如下设置新表:

    • 从以下位置创建表:空表
    • 命名表:article_data
  2. 在“架构”下,点击添加字段并添加以下 3 个字段:

字段名称 类型 模式
article_text STRING NULLABLE
category STRING NULLABLE
confidence FLOAT NULLABLE

“创建表”页面“架构”部分中的字段列表,包括 article-text、category 和 confidence。

  1. 点击创建表

该表目前为空。下一步,您将从 Cloud Storage 读取文章,将其发送到 Natural Language API 进行分类,并将结果存储在 BigQuery 中。

点击检查我的进度以验证是否完成了以下目标:

创建新的数据集和表以存储已分类的文本数据

任务 6. 对新闻数据进行分类并将结果存储在 BigQuery 中

为执行后续步骤,请连接到 Cloud Shell。如果出现提示,点击继续

在编写脚本将新闻数据发送到 Natural Language API 之前,您需要创建一个服务账号。从 Python 脚本向 Natural Language API 和 BigQuery 进行身份验证时将用到此账号。

  1. 将项目 ID 导出为环境变量:
export PROJECT={{{project_0.project_id | Project ID}}}
  1. 运行以下命令以创建服务账号:
gcloud iam service-accounts create my-account --display-name my-account gcloud projects add-iam-policy-binding $PROJECT --member=serviceAccount:my-account@$PROJECT.iam.gserviceaccount.com --role=roles/bigquery.admin gcloud projects add-iam-policy-binding $PROJECT --member=serviceAccount:my-account@$PROJECT.iam.gserviceaccount.com --role=roles/serviceusage.serviceUsageConsumer gcloud iam service-accounts keys create key.json --iam-account=my-account@$PROJECT.iam.gserviceaccount.com export GOOGLE_APPLICATION_CREDENTIALS=key.json

现在,您可以将文本数据发送到 Natural Language API 了!

  1. 使用适用于 Google Cloud 的 Python 模块编写 Python 脚本。

您可以使用任何语言完成这一项工作,因为云客户端库有很多种。

  1. 创建一个名为 classify-text.py 的文件,并将以下代码复制到文件中。您可以使用自己喜欢的一种命令行编辑器(例如 nano、vim、emacs)创建该文件。
from google.cloud import storage, language, bigquery # Set up your GCS, NL, and BigQuery clients storage_client = storage.Client() nl_client = language.LanguageServiceClient() bq_client = bigquery.Client(project='{{{project_0.project_id | Project ID}}}') dataset_ref = bq_client.dataset('news_classification_dataset') dataset = bigquery.Dataset(dataset_ref) table_ref = dataset.table('article_data') table = bq_client.get_table(table_ref) # Send article text to the NL API's classifyText method def classify_text(article): response = nl_client.classify_text( document=language.Document( content=article, type=language.Document.Type.PLAIN_TEXT ) ) return response rows_for_bq = [] files = storage_client.bucket('qwiklabs-test-bucket-gsp063').list_blobs() print("Got article files from GCS, sending them to the NL API (this will take ~2 minutes)...") # Send files to the NL API and save the result to send to BigQuery for file in files: if file.name.endswith('txt'): article_text = file.download_as_bytes().decode('utf-8') # Decode bytes to string nl_response = classify_text(article_text) if len(nl_response.categories) > 0: rows_for_bq.append((article_text, nl_response.categories[0].name, nl_response.categories[0].confidence)) print("Writing NL API article data to BigQuery...") # Write article text + category data to BQ if rows_for_bq: errors = bq_client.insert_rows(table, rows_for_bq) if errors: print("Encountered errors while writing to BigQuery:", errors) else: print("No articles found in the specified bucket.")

现在,您可以开始对文章进行分类并将其数据导入 BigQuery。

  1. 运行以下脚本:
python3 classify-text.py

该脚本大约需要两分钟才能运行完毕,因此在运行期间,您可以了解一下工作流程。

您在使用 Google Cloud Python 客户端库访问 Cloud Storage、Natural Language API 和 BigQuery。首先,为每项服务创建一个客户端,然后创建对 BigQuery 表的引用。files 是对公共存储桶中每个 BBC 数据集文件的引用。查看这些文件,将文章下载为字符串,然后在 classify_text 函数中将每个字符串发送到 Natural Language API。对于 Natural Language API 已返回类别的所有文章,文章及其类别数据都保存到 rows_for_bq 列表中。完成每篇文章的分类后,使用 insert_rows() 将数据插入到 BigQuery 中。

注意:对于一篇文章,Natural Language API 可以返回多个类别,但为了简单起见,本实验中仅存储返回的第一个类别。

脚本运行完毕后,需要验证文章数据是否已保存到 BigQuery。

  1. 在 BigQuery 中,前往“探索器”标签页中的 article_data 表,然后点击查询以查询该表:

“查询”下拉菜单中突出显示的“在新标签页中”选项。

  1. 修改未保存的查询框中的结果,在 SELECT 和 FROM 之间添加星号:
SELECT * FROM `{{{project_0.project_id | Project ID}}}.news_classification_dataset.article_data`
  1. 现在,点击运行

查询完成后,您将看到自己的数据。

  1. 向右滚动,查看 category 列。

category 列包含 Natural Language API 为文章返回的第一个类别的名称,confidence 是 0 到 1 之间的一个值,表示 API 对文章分类正确性的置信度。

在下一步中,您将学习如何对数据执行更复杂的查询。

任务 7. 在 BigQuery 中分析已分类的新闻数据

首先,查看数据集中最常见的类别有哪些。

  1. 在 BigQuery 控制台中,点击 + SQL 查询

  2. 输入以下查询:

SELECT category, COUNT(*) c FROM `{{{project_0.project_id | Project ID}}}.news_classification_dataset.article_data` GROUP BY category ORDER BY c DESC
  1. 现在,点击运行

您应该会在查询结果中看到如下内容:

查询结果,其中列出了多个类别,包括 /News/Politics 和 /Business & Industrial。

如果您想查找归于 /Arts & Entertainment/Music & Audio/Classical Music 这种小众类别的文章,可以编写以下查询:

SELECT * FROM `{{{project_0.project_id | Project ID}}}.news_classification_dataset.article_data` WHERE category = "/Arts & Entertainment/Music & Audio/Classical Music"

您也可以仅查找 Natural Language API 返回的置信度分数大于 90% 的文章:

SELECT article_text, category FROM `{{{project_0.project_id | Project ID}}}.news_classification_dataset.article_data` WHERE cast(confidence as float64) > 0.9

如需对数据执行更多查询,请查阅 BigQuery 文档。BigQuery 还集成了许多可视化工具。如需为已分类的新闻数据创建可视化图表,请了解一下适用于 BigQuery 的 Looker Studio

恭喜!

您学习了如何使用 Natural Language API 文本分类方法对新闻报道进行分类。您首先对一篇文章进行了分类,然后学习了如何使用 Natural Language API 和 BigQuery 对大型新闻数据集进行分类和分析。您还学习了如何创建 BigQuery 表并对数据运行查询。

后续步骤/了解详情

Google Cloud 培训和认证

…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。

上次更新手册的时间:2025 年 3 月 21 日

上次测试实验的时间:2025 年 3 月 21 日

版权所有 2026 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。

准备工作

  1. 实验会创建一个 Google Cloud 项目和一些资源,供您使用限定的一段时间
  2. 实验有时间限制,并且没有暂停功能。如果您中途结束实验,则必须重新开始。
  3. 在屏幕左上角,点击开始实验即可开始

使用无痕浏览模式

  1. 复制系统为实验提供的用户名密码
  2. 在无痕浏览模式下,点击打开控制台

登录控制台

  1. 使用您的实验凭证登录。使用其他凭证可能会导致错误或产生费用。
  2. 接受条款,并跳过恢复资源页面
  3. 除非您已完成此实验或想要重新开始,否则请勿点击结束实验,因为点击后系统会清除您的工作并移除该项目

此内容目前不可用

一旦可用,我们会通过电子邮件告知您

太好了!

一旦可用,我们会通过电子邮件告知您

一次一个实验

确认结束所有现有实验并开始此实验

使用无痕浏览模式运行实验

使用无痕模式或无痕浏览器窗口是运行此实验的最佳方式。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。