创建和使用术语表

您可以使用术语表来定义特定于您领域的术语。借助术语表,您可以添加术语对,包括源语言和目标语言术语。术语对可确保 Vertex AI Translation 服务始终如一地翻译您的术语。

以下是您可以定义术语表条目的情况示例:

  • 商品名称:识别商品名称,以便在翻译中保留这些名称。例如,Google Home 必须翻译为 Google Home。
  • 有歧义的字词:指定含义模糊的字词和同音词的含义。例如,bat 可能表示一种体育用品或动物。
  • 外来词:阐明从其他语言中采用的词汇的含义。例如,法语的 bouillabaisse 翻译为英语的 bouillabaisse,即一种浓味鱼肉汤。

术语表中的术语可以是单个单词(也称为词元)或短语(通常少于五个单词)。如果字词是非索引字,Vertex AI Translation 会忽略匹配的术语表条目。

Vertex AI Translation 在 Google Distributed Cloud (GDC) 网闸隔离配置中提供以下术语表方法:

方法 说明
CreateGlossary 创建术语表。
GetGlossary 返回存储的术语表。
ListGlossaries 返回项目中的术语表列表。
DeleteGlossary 删除不再需要的术语表。

准备工作

在创建术语表来定义翻译术语之前,您必须有一个名为 translation-glossary-project 的项目。项目的自定义资源必须如以下示例所示:

  apiVersion: resourcemanager.gdc.goog/v1
  kind: Project
  metadata:
    labels:
      atat.config.google.com/clin-number: CLIN_NUMBER
      atat.config.google.com/task-order-number: TASK_ORDER_NUMBER
    name: translation-glossary-project
    namespace: platform

如需获得使用术语表所需的权限,请让您的 IAM 项目管理员为您授予项目命名空间中的以下角色:

  • AI Translation Developer:获取 AI Translation Developer (ai-translation-developer) 角色,以访问 Vertex AI Translation 服务。
  • Project Bucket Admin:获取 Project Bucket Admin (project-bucket-admin) 角色,以管理存储桶和存储桶中的对象,从而创建和上传文件。

如需详细了解前提条件,请参阅设置翻译项目。

创建术语表文件

您必须创建一个术语库文件来存储源语言和目标语言术语。本部分包含两种不同的术语表布局,您可以使用它们来定义术语。

下表介绍了 Distributed Cloud 对术语表文件支持的限制:

说明 限制
文件大小上限 10485760 个 UTF-8 字节
术语库字词的长度上限 1,024 个 UTF-8 字节
项目的术语库资源数上限 10,000

为您的术语表文件选择以下布局之一:

  • 单向术语表:指定特定语言的一对源术语和目标术语的预期翻译。单向术语表支持 TSV、CSV 和 TMX 文件格式。
  • 等效术语集术语表:在每一行中指定多种语言的预期翻译。等效术语集术语表支持 CSV 文件格式。

单向术语表

Vertex AI Translation API 接受使用制表符分隔值 (TSV) 和逗号分隔值 (CSV)。对于这些文件格式,每一行都包含一对由制表符 (\t) 或逗号 (,) 分隔的字词。

Vertex AI Translation API 还接受翻译记忆库交换 (TMX) 格式,这是一种用于提供翻译的源术语和目标术语对的标准 XML 格式。支持的输入文件采用基于 TMX 1.4 版的格式。

以下示例展示了单向术语表的 TSV、CSV 和 TMX 文件格式所需的结构:

TSV 和 CSV

下图显示了 TSV 或 CSV 文件中的两列。第一列包含源语言字词,第二列包含目标语言字词。

等效术语表示例

请勿在单向 TSV 或 CSV 文件中添加标题行;第一行必须包含术语数据。术语表请求使该文件可供 Vertex AI Translation API 使用。

TMX

以下示例展示了 TMX 文件中的必需结构:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE tmx SYSTEM "tmx14.dtd">
<tmx version="1.4">
  <header segtype="sentence" o-tmf="UTF-8" adminlang="en" srclang="en" datatype="PlainText"/>
  <body>
    <tu>
      <tuv xml:lang="en">
        <seg>account</seg>
      </tuv>
      <tuv xml:lang="es">
        <seg>cuenta</seg>
      </tuv>
    </tu>
    <tu>
      <tuv xml:lang="en">
        <seg>directions</seg>
      </tuv>
      <tuv xml:lang="es">
        <seg>indicaciones</seg>
      </tuv>
    </tu>
  </body>
</tmx>

如果您的文件包含此示例中未显示的 XML 标记,Vertex AI Translation API 会忽略这些标记。

在 TMX 文件中添加以下元素,以确保 Vertex AI Translation API 能够成功处理:

  • <header>:使用 srclang 属性标识源语言。
  • <tu>:包含一对具有相同源语言和目标语言的 <tuv> 元素。这些 <tuv> 元素符合以下要求:

    • 每个 <tuv> 元素都使用 xml:lang 特性标识所含文本的语言。使用 ISO-639-1 代码标识源语言和目标语言。请参阅支持的语言及其各自语言代码的列表。
    • 如果一个 <tu> 元素包含两个以上的 <tuv> 元素,则 Vertex AI Translation API 只会处理与<tuv>源语言 和目标 语言匹配的第一对 <tuv> 元素。该服务会忽略其余 <tuv> 元素。
    • 如果一个 <tu> 元素没有匹配的 <tuv> 元素对,则 Vertex AI Translation API 会忽略无效的 <tu> 元素。
  • <seg>:表示通用文本字符串。Vertex AI Translation API 在处理文件之前,会从 <seg> 元素中排除标记。如果一个 <tuv> 元素包含多个 <seg> 元素,则 Vertex AI Translation API 会将其中的文本连接成一个元素,并在文本字符串之间留一个空格。

在单向术语表中确定术语表术语后,将文件上传到存储桶,并通过创建和导入术语表,使 Vertex AI Translation API 可以使用该文件。

等效术语集术语表

Vertex AI Translation API 接受 CSV 格式的等效术语集术语表文件。如需定义等效术语集,您可以创建一个多列 CSV 文件,其中每一行列出一个术语表术语的多种语言版本翻译。请参阅支持的语言及其各自语言代码的列表。

下图展示了一个多列 CSV 文件示例。每行代表一个术语表术语,每列代表该术语的不同语言翻译。

等效术语表示例

标题是文件中的第一行,用于标识每一列对应的语言。标题行使用 ISO-639-1 或 BCP-47 标准语言代码。Vertex AI Translation API 不使用词性 (pos) 信息,并且不会验证特定的位置值。

后续各行包含标题中所标识语言版本的等效术语表术语。如果该术语仅提供了部分语言版本,则可以将某些列留空。

在等效术语集中确定术语表术语后,将文件上传到存储桶,并通过创建和导入术语表,使 Vertex AI Translation API 可以使用该文件。

将术语表文件上传到存储桶

请按照以下步骤将术语表文件上传到存储桶:

  1. 为对象存储区配置 gdcloud CLI。
  2. 在项目命名空间中创建存储桶。使用 Standard 存储类别。

    您可以通过在项目命名空间中部署 Bucket 资源来创建存储桶:

      apiVersion: object.gdc.goog/v1
      kind: Bucket
      metadata:
        name: glossary-bucket
        namespace: translation-glossary-project
      spec:
        description: bucket for translation glossary
        storageClass: Standard
        bucketPolicy:
          lockingPolicy:
            defaultObjectRetentionDays: 90
    
  3. 向 Vertex AI Translation 服务使用的服务账号(ai-translation-system-sa 和 g-vai-translation-sie-sa)授予对存储桶的 read 权限,以及对项目命名空间中 secrets 的 get、list 和 watch 权限。

    请按照以下步骤在 Management API 服务器上使用自定义资源创建角色和角色绑定。已拥有 secrets 权限的用户必须应用这些资源,否则请求会失败并显示 attempting to grant RBAC permissions not currently held:

    1. 通过在项目命名空间中部署 Role 资源来创建角色:

        apiVersion: rbac.authorization.k8s.io/v1
        kind: Role
        metadata:
          name: ai-translation-glossary-reader
          namespace: translation-glossary-project
        rules:
          -
            apiGroups:
              - object.gdc.goog
            resources:
              - buckets
            verbs:
              - read-object
          -
            apiGroups:
              - ""
            resources:
              - secrets
            verbs:
              - get
              - list
              - watch
      
    2. 通过在项目命名空间中部署 RoleBinding 资源来创建角色绑定:

        apiVersion: rbac.authorization.k8s.io/v1
        kind: RoleBinding
        metadata:
          name: ai-translation-glossary-reader-rolebinding
          namespace: translation-glossary-project
        roleRef:
          apiGroup: rbac.authorization.k8s.io
          kind: Role
          name: ai-translation-glossary-reader
        subjects:
          -
            kind: ServiceAccount
            name: ai-translation-system-sa
            namespace: g-vai-translation-sie
          -
            kind: ServiceAccount
            name: g-vai-translation-sie-sa
            namespace: g-vai-translation-sie
      
  4. 将术语表文件上传到您创建的存储桶。如需了解详情,请参阅在项目中上传和下载存储对象。

创建术语表

CreateGlossary 方法会创建术语表,并返回生成术语表的长时间运行的操作的标识符。

如需创建术语表,请在使用任何请求数据之前替换以下内容:

  • ENDPOINT:您为组织使用的 Vertex AI Translation 端点。如需了解详情,请查看服务状态和端点。
  • PROJECT_ID:您的项目 ID。
  • BUCKET_NAME:术语表文件所在的存储桶的名称。
  • GLOSSARY_FILENAME:存储桶中术语表文件的名称。

以下是用于创建术语表的 HTTP 请求的语法:

POST https://ENDPOINT/v3/projects/PROJECT_ID/glossaries

根据您创建的术语表文件,选择以下选项之一来创建术语表:

单向

如需创建单向术语表,请指定包含源语言 (source_language_code) 和目标语言 (target_language_code) 的语言对 (language_pair)。

请按照以下步骤创建单向术语表:

  1. 将以下请求正文保存在名为 request.json 的 JSON 文件中:

    {
      "language_pair": {
        "source_language_code": "SOURCE_LANGUAGE",
        "target_language_code": "TARGET_LANGUAGE"
        },
      "input_config": {
        "s3_source": {
          "input_uri": "s3://BUCKET_NAME/GLOSSARY_FILENAME"
        }
      }
    }
    

    替换以下内容:

    • SOURCE_LANGUAGE:术语库源语言的语言代码。请参阅支持的语言及其各自语言代码的列表。
    • TARGET_LANGUAGE:术语库的目标语言的语言代码。请参阅支持的语言及其各自语言代码的列表。
  2. 获取身份验证令牌。

  3. 发出请求。以下示例使用的是 REST API 方法和命令行,但您也可以使用客户端库创建单向术语表。

curl

curl -X POST \
-H "Authorization: Bearer TOKEN" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://ENDPOINT/v3/projects/PROJECT_ID/glossaries"

将 TOKEN 替换为您获取的身份验证令牌。

PowerShell

$cred = TOKEN
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest
  -Method POST
  -Headers $headers
  -ContentType: "application/json; charset=utf-8"
  -InFile request.json
  -Uri "https://ENDPOINT/v3/projects/PROJECT_ID/glossaries"
  | Select-Object -Expand Content

将 TOKEN 替换为您获取的身份验证令牌。

Python

  1. 安装最新版本的 Vertex AI Translation 客户端库。

  2. 在 Python 脚本中设置所需的环境变量。

  3. 将以下代码添加到您创建的 Python 脚本中:

    import time
    import google.auth
    import google.auth.transport.requests
    import requests
    
    def create_glossary(project_id="PROJECT_ID", input_uri="s3://BUCKET_NAME/GLOSSARY_FILENAME",
                        source_lang_code="SOURCE_LANGUAGE", target_lang_code="TARGET_LANGUAGE"):
        # Client 3.8.0 has no s3_source field, so call REST (token audience without :443).
        creds, _ = google.auth.default()
        creds = creds.with_gdch_audience("https://ENDPOINT")
        creds.refresh(google.auth.transport.requests.Request())
        session = requests.Session()
        session.verify = "CERT_NAME"
        session.headers["Authorization"] = f"Bearer {creds.token}"
        body = {"language_pair": {"source_language_code": source_lang_code,
                                  "target_language_code": target_lang_code},
                "input_config": {"s3_source": {"input_uri": input_uri}}}
        r = session.post(f"https://ENDPOINT/v3/projects/{project_id}/glossaries", json=body)
        r.raise_for_status()
        op = r.json()
        while not op.get("done"):
            time.sleep(2)
            op = session.get(f"https://ENDPOINT/v3/{op['name']}").json()
        return op  # The service assigns the glossary ID: op["metadata"]["name"]
    

    替换以下内容:

    • SOURCE_LANGUAGE:术语库源语言的语言代码。请参阅支持的语言及其各自语言代码的列表。
    • TARGET_LANGUAGE:术语库的目标语言的语言代码。请参阅支持的语言及其各自语言代码的列表。
    • CERT_NAME:证书授权机构 (CA) 证书文件的名称,例如 org-1-trust-bundle-ca.cert。如需了解详情,请参阅在开发环境中生成信任包 CA 证书文件。
  4. 保存 Python 脚本。

  5. 运行 Python 脚本:

    python SCRIPT_NAME
    

    将 SCRIPT_NAME 替换为您为 Python 脚本指定的名称,例如 glossary.py。

如需详细了解 projects.glossaries.create 方法,请参阅 Vertex AI Translation REST API 参考文档。

您应该会收到类似以下内容的 JSON 响应:

{
"name": "projects/PROJECT_ID/operations/OPERATION_ID",
"metadata": {
    "@type": "type.googleapis.com/google.cloud.translation.v3.CreateGlossaryMetadata",
    "name": "projects/PROJECT_ID/glossaries/GLOSSARY_ID",
    "state": "RUNNING",
    "submitTime": "TIME"
  }
}

在响应结果中:

  • OPERATION_ID:创建术语库的长时间运行的操作的服务器分配 ID。该服务会在响应的 name 字段中返回此 ID,您也可以通过调用 projects.operations.list 找到此 ID。您可以将 projects/PROJECT_ID/operations/OPERATION_ID 传递给 projects.operations.get,以检查术语表创建操作的状态。
  • GLOSSARY_ID:服务器分配的术语库 ID(G 后跟数字),您可以在 get、translate 和 delete 请求中使用该 ID。

等效术语集

如需创建等效术语集术语表,请指定一个语言集 (language_codes_set),其中包含术语表的语言代码 (language_codes)。

请按照以下步骤创建等效术语集术语表:

  1. 将以下请求正文保存在名为 request.json 的 JSON 文件中:

    {
      "language_codes_set": {
        "language_codes": ["LANGUAGE_CODE_1",
                            "LANGUAGE_CODE_2",
                            "LANGUAGE_CODE_3"
                          ]
      },
      "input_config": {
        "s3_source": {
          "input_uri": "s3://BUCKET_NAME/GLOSSARY_FILENAME"
        }
      }
    }
    

    将 LANGUAGE_CODE_1、LANGUAGE_CODE_2 和 LANGUAGE_CODE_3 替换为术语库语言的代码。请参阅支持的语言及其各自语言代码的列表。

  2. 获取身份验证令牌。

  3. 发出请求:

curl

curl -X POST \
    -H "Authorization: Bearer TOKEN" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://ENDPOINT/v3/projects/PROJECT_ID/glossaries"

将 TOKEN 替换为您获取的身份验证令牌。

您应该会收到类似以下内容的 JSON 响应:

{
  "name": "projects/PROJECT_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.translation.v3.CreateGlossaryMetadata",
    "name": "projects/PROJECT_ID/glossaries/GLOSSARY_ID",
    "state": "RUNNING",
    "submitTime": "TIME"
  }
}

在响应结果中:

  • OPERATION_ID:创建术语库的长时间运行的操作的服务器分配 ID。该服务会在响应的 name 字段中返回此 ID,您也可以通过调用 projects.operations.list 来找到此 ID。您可以将 projects/PROJECT_ID/operations/OPERATION_ID 传递给 projects.operations.get,以检查术语表创建操作的状态。
  • GLOSSARY_ID:服务器分配的术语库 ID(G 后跟数字),您可以在 get、translate 和 delete 请求中使用该 ID。

PowerShell

$cred = TOKEN
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
  -Method POST `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -InFile request.json `
  -Uri "https://ENDPOINT/v3/projects/PROJECT_ID/glossaries"
  | Select-Object -Expand Content

将 TOKEN 替换为您获取的身份验证令牌。

您应该会收到类似以下内容的 JSON 响应:

{
  "name": "projects/PROJECT_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.translation.v3.CreateGlossaryMetadata",
    "name": "projects/PROJECT_ID/glossaries/GLOSSARY_ID",
    "state": "RUNNING",
    "submitTime": "TIME"
  }
}

在响应结果中:

  • OPERATION_ID:创建术语库的长时间运行的操作的服务器分配 ID。该服务会在响应的 name 字段中返回此 ID,您也可以通过调用 projects.operations.list 来找到此 ID。您可以将 projects/PROJECT_ID/operations/OPERATION_ID 传递给 projects.operations.get,以检查术语表创建操作的状态。
  • GLOSSARY_ID:服务器分配的术语库 ID(G 后跟数字),您可以在 get、translate 和 delete 请求中使用该 ID。

Python

  1. 安装最新版本的 Vertex AI Translation 客户端库。

  2. 在 Python 脚本中设置所需的环境变量。

  3. 将以下代码添加到您创建的 Python 脚本中:

    import time
    import google.auth
    import google.auth.transport.requests
    import requests
    
    def create_glossary(project_id="PROJECT_ID", input_uri="s3://BUCKET_NAME/GLOSSARY_FILENAME",
                        lang_1="LANGUAGE_CODE_1", lang_2="LANGUAGE_CODE_2"):
        # Client 3.8.0 has no s3_source field, so call REST (token audience without :443).
        creds, _ = google.auth.default()
        creds = creds.with_gdch_audience("https://ENDPOINT")
        creds.refresh(google.auth.transport.requests.Request())
        session = requests.Session()
        session.verify = "CERT_NAME"
        session.headers["Authorization"] = f"Bearer {creds.token}"
        body = {"language_codes_set": {"language_codes": [lang_1, lang_2]},
                "input_config": {"s3_source": {"input_uri": input_uri}}}
        r = session.post(f"https://ENDPOINT/v3/projects/{project_id}/glossaries", json=body)
        r.raise_for_status()
        op = r.json()
        while not op.get("done"):
            time.sleep(2)
            op = session.get(f"https://ENDPOINT/v3/{op['name']}").json()
        return op  # The service assigns the glossary ID: op["metadata"]["name"]
    

    替换以下内容:

  4. 保存 Python 脚本。

  5. 运行 Python 脚本:

    python SCRIPT_NAME
    

    将 SCRIPT_NAME 替换为您为 Python 脚本指定的名称,例如 glossary.py。

如需详细了解 projects.glossaries.create 方法,请参阅 Vertex AI Translation REST API 参考文档。

创建术语表通常需要不到 10 分钟的时间,具体取决于术语表文件的大小。 您可以检索此操作的状态,以了解其何时完成。

获取术语表

GetGlossary 方法会返回存储的术语表。如果术语表不存在,则输出会返回 NOT_FOUND 值。如需调用 GetGlossary 方法,请指定项目 ID 和术语表 ID。CreateGlossary 和 ListGlossaries 方法都会返回术语表 ID。Vertex AI Translation API 仅接受 HTTPS 请求。

例如,以下请求会返回项目中特定术语表的相关信息:

curl

curl -X GET \
   -H "Authorization: Bearer TOKEN" \
   "https://ENDPOINT/v3/projects/PROJECT_ID/glossaries/GLOSSARY_ID"

将 TOKEN 替换为您获取的身份验证令牌。

Python

from google.cloud import translate_v3 as translate
from google.api_core.client_options import ClientOptions

def get_glossary(creds, name="projects/PROJECT_ID/glossaries/GLOSSARY_ID"):
    """Get a glossary by its full name. The service assigns the glossary ID."""
    client = translate.TranslationServiceClient(
        credentials=creds, client_options=ClientOptions(api_endpoint="ENDPOINT:443"))
    response = client.get_glossary(name=name)
    print(f"Glossary name: {response.name}")

传递使用受众群体 https://ENDPOINT:443 配置的 Distributed Cloud 凭据 (creds),如翻译文本中所示。

如需详细了解 get_glossary 方法,请参阅 Python 客户端库。

列出术语表

ListGlossaries 方法会返回项目中 Glossary 资源的列表,每个资源都包含完整的 name (projects/PROJECT_ID/glossaries/GLOSSARY_ID)。如果项目没有术语表,则输出会返回 {}。如果项目不存在,则输出会返回 NOT_FOUND 值。如需调用 ListGlossaries 方法,请指定您的项目 ID 和 Vertex AI Translation 端点。Vertex AI Translation API 仅接受 HTTPS 请求。

例如,以下请求会返回项目中的术语表:

curl -X GET \
    -H "Authorization: Bearer TOKEN" \
    "https://ENDPOINT/v3/projects/PROJECT_ID/glossaries?page_size=10"

将 TOKEN 替换为您获取的身份验证令牌。

删除术语表

DeleteGlossary 方法可删除术语表。如果术语表不存在,则输出会返回 NOT_FOUND 值。如需调用 DeleteGlossary 方法,请指定项目 ID、术语表 ID 和 Vertex AI Translation 端点。CreateGlossary 和 ListGlossaries 方法都会返回术语表 ID。Vertex AI Translation API 仅接受 HTTPS 请求。

例如,以下请求会从项目中删除术语表:

curl -X DELETE \
    -H "Authorization: Bearer TOKEN" \
    "https://ENDPOINT/v3/projects/PROJECT_ID/glossaries/GLOSSARY_ID"

将 TOKEN 替换为您获取的身份验证令牌。