Wiki40B 语言模型

在 TensorFlow.org 上查看 在 Google Colab 中运行 在 GitHub 上查看 下载笔记本 查看 TF Hub 模型

使用来自 TensorFlow Hub 的 **Wiki40B 语言模型** 生成类似维基百科的文本!

此笔记本演示了如何

  • 从 TF-Hub 上的 Wiki40b-LM 集合 加载 41 个单语语言模型和 2 个多语言语言模型
  • 使用模型获取给定文本的困惑度、每层激活和词嵌入
  • 从一段种子文本逐个生成文本标记

语言模型是在 TensorFlow 数据集上提供的最新发布的、清理过的 Wiki40B 数据集 上训练的。训练设置基于论文 “Wiki-40B: 多语言语言模型数据集”

设置

安装依赖项

导入

2023-12-08 13:06:23.563120: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory
2023-12-08 13:06:24.329384: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer.so.7'; dlerror: libnvinfer.so.7: cannot open shared object file: No such file or directory
2023-12-08 13:06:24.329482: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer_plugin.so.7'; dlerror: libnvinfer_plugin.so.7: cannot open shared object file: No such file or directory
2023-12-08 13:06:24.329492: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Cannot dlopen some TensorRT libraries. If you would like to use Nvidia GPU with TensorRT, please make sure the missing libraries mentioned above are installed properly.

选择语言

让我们选择要从 TF-Hub 加载的 **哪个语言模型** 以及要生成的 **文本长度**。

Using the https://tfhub.dev/google/wiki40b-lm-en/1 model to generate sequences of max length 20.

构建模型

好的,现在我们已经配置了要使用哪个预训练模型,让我们将其配置为生成最多 max_gen_len 的文本。我们需要从 TF-Hub 加载语言模型,输入一段起始文本,然后在生成标记时迭代地输入这些标记。

加载语言模型片段

2023-12-08 13:06:32.463390: W tensorflow/core/common_runtime/graph_constructor.cc:1526] Importing a graph with a lower producer version 359 into an existing graph with producer version 1286. Shape inference will have run different parts of the graph with different producer versions.
2023-12-08 13:06:34.423955: E tensorflow/compiler/xla/stream_executor/cuda/cuda_driver.cc:267] failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected

构建每个标记的生成图

构建 max_gen_len 个标记的静态展开图

生成一些文本

让我们生成一些文本!我们将设置一个文本 seed 来提示语言模型。

您可以使用其中一个 **预定义** 种子,或者 *可选地* **输入您自己的种子**。此文本将用作语言模型的种子,以帮助提示语言模型生成下一个内容。

您可以使用以下特殊标记来指示生成的文本的特殊部分。使用 **_START_ARTICLE_** 来指示文章的开头,使用 **_START_SECTION_** 来指示部分的开头,使用 **_START_PARAGRAPH_** 来生成文章中的文本

预定义种子

输入您自己的种子(可选)。

Generating text from seed:

_START_ARTICLE_
1882 Prince Edward Island general election
_START_PARAGRAPH_
The 1882 Prince Edward Island election was held on May 8, 1882 to elect members of the House of Assembly of the province of Prince Edward Island, Canada.

初始化会话。

生成文本

This election were also the first time that two members first met. A majority of twelve elected members (

我们还可以查看模型的其他输出 - 困惑度、标记 ID、中间激活和嵌入

ppl_result
array([23.507736], dtype=float32)
token_ids_result
array([[   8,    3, 6794, 1579, 1582,  721,  489,  448,    8,    5,   26,
        6794, 1579, 1582,  721,  448,   17,  245,   22,  166, 2928, 6794,
          16, 7690,  384,   11,    7,  402,   11, 1172,   11,    7, 2115,
          11, 1579, 1582,  721,    9,  646,   10]], dtype=int32)
activations_result.shape
(12, 1, 39, 768)
embeddings_result
array([[[ 0.12262525,  5.548009  ,  1.4743135 , ...,  2.4388404 ,
         -2.2788858 ,  2.172028  ],
        [-2.3905468 , -0.97108954, -1.5513545 , ...,  8.458472  ,
         -2.8723319 ,  0.6534524 ],
        [-0.83790785,  0.41630274, -0.8740793 , ...,  1.6446769 ,
         -0.9074106 ,  0.3339265 ],
        ...,
        [-0.8054745 , -1.2495526 ,  2.6232922 , ...,  2.893288  ,
         -0.91287214, -1.1259722 ],
        [ 0.64944506,  3.3696785 ,  0.09543293, ..., -0.7839227 ,
         -1.3573489 ,  1.862214  ],
        [-1.2970612 ,  0.5961366 ,  3.3531897 , ...,  3.2853985 ,
         -1.6212384 ,  0.30257902]]], dtype=float32)