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."])
在 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
KerasNLP 提供了高级文本处理模块,这些模块以层或模型形式提供。如果您需要访问更底层的工具,可以使用 TensorFlow Text。TensorFlow Text 为您提供了一系列丰富的操作和库,帮助您处理文本形式的输入,例如原始文本字符串或文档。这些库可以执行基于文本的模型通常需要的预处理,并包含其他对序列建模有用的功能。
您可以从 TensorFlow 计算图内部提取强大的句法和语义文本特征,作为神经网络的输入。
将预处理与 TensorFlow 计算图集成具有以下优势:
- 提供了一个用于处理文本的大型工具包
- 支持与一套庞大的 TensorFlow 工具集成,从而为从问题定义到训练、评估和发布的全过程提供支持
- 降低了服务阶段的复杂性,并防止了训练和服务之间的偏差(training-serving skew)
此外,您无需担心训练时的标记化方式与推理时的标记化方式不一致,也不必管理预处理脚本。