TensorFlow 的文本处理工具

TensorFlow 提供了两个用于文本和自然语言处理的库:KerasNLP 和 TensorFlow Text。KerasNLP 是一个高级自然语言处理 (NLP) 库,其中包含现代基于 Transformer 的模型以及较低级的标记化(tokenization)工具。它是大多数 NLP 用例的推荐解决方案。KerasNLP 构建在 TensorFlow Text 之上,将底层文本处理操作抽象为易于使用的 API。但是,如果您不想使用 Keras API,或者需要访问底层的文本处理操作,则可以直接使用 TensorFlow Text。

KerasNLP

import keras_nlp
import tensorflow_datasets as tfds

imdb_train, imdb_test = tfds.load(
  "imdb_reviews",
  split=["train", "test"],
  as_supervised=True,
  batch_size=16,
)
# Load a BERT model.
classifier = keras_nlp.models.BertClassifier.from_preset("bert_base_en_uncased")
# Fine-tune on IMDb movie reviews.
classifier.fit(imdb_train, validation_data=imdb_test)
# Predict two new examples.
classifier.predict(["What an amazing movie!", "A total waste of my time."])
查看 GitHub 上的快速入门指南。

在 TensorFlow 中开始文本处理最简单的方法是使用 KerasNLP。KerasNLP 是一个自然语言处理库,支持通过模块化组件构建的工作流,这些组件具有最先进的预设权重和架构。您可以直接使用 KerasNLP 组件的开箱即用配置。如果您需要更多控制权,也可以轻松地自定义组件。KerasNLP 强调所有工作流的图内计算(in-graph computation),因此您可以期待使用 TensorFlow 生态系统轻松实现生产化。

KerasNLP 是核心 Keras API 的扩展,所有高级 KerasNLP 模块都是层(Layers)或模型(Models)。如果您熟悉 Keras,那么您就已经理解了 KerasNLP 的大部分内容。

要了解更多信息,请参阅 KerasNLP

TensorFlow Text

import tensorflow as tf
import tensorflow_text as tf_text

def preprocess(vocab_lookup_table, example_text):

  # Normalize text
  tf_text.normalize_utf8(example_text)

  # Tokenize into words
  word_tokenizer = tf_text.WhitespaceTokenizer()
  tokens = word_tokenizer.tokenize(example_text)

  # Tokenize into subwords
  subword_tokenizer = tf_text.WordpieceTokenizer(
       vocab_lookup_table, token_out_type=tf.int64)
  subtokens = subword_tokenizer.tokenize(tokens).merge_dims(1, -1)

  # Apply padding
  padded_inputs = tf_text.pad_model_inputs(subtokens, max_seq_length=16)
  return padded_inputs
Notebook 中运行

KerasNLP 提供了高级文本处理模块,这些模块以层或模型形式提供。如果您需要访问更底层的工具,可以使用 TensorFlow Text。TensorFlow Text 为您提供了一系列丰富的操作和库,帮助您处理文本形式的输入,例如原始文本字符串或文档。这些库可以执行基于文本的模型通常需要的预处理,并包含其他对序列建模有用的功能。

您可以从 TensorFlow 计算图内部提取强大的句法和语义文本特征,作为神经网络的输入。

将预处理与 TensorFlow 计算图集成具有以下优势:

  • 提供了一个用于处理文本的大型工具包
  • 支持与一套庞大的 TensorFlow 工具集成,从而为从问题定义到训练、评估和发布的全过程提供支持
  • 降低了服务阶段的复杂性,并防止了训练和服务之间的偏差(training-serving skew)

此外,您无需担心训练时的标记化方式与推理时的标记化方式不一致,也不必管理预处理脚本。

Model Architectures
了解如何对文本执行端到端的 BERT 预处理。
了解如何从文本生成子词词汇表。
了解如何使用 BERT 模型对文本进行分类。
使用循环神经网络对文本进行分类。
使用 Transformer 模型翻译文本。
了解如何使用序列到序列模型翻译文本。