大多数浏览器和
Developer App 均支持流媒体播放。
-
探索自然语言多语言模型
了解如何使用多语言、基于 Transformer 的嵌入创建用于文本分类和词语标记的自定义自然语言模型。我们将向你展示如何使用较少的数据进行训练,并在 3 个脚本中实现对多达 27 种语言的支持。了解如何使用此类嵌入微调利用 PyTorch 和 TensorFlow 训练的复杂模型。想要了解更多有关自然语言的内容,欢迎观看 WWDC20 中“利用自然语言让 App 更加智能”。
资源
相关视频
WWDC23
WWDC20
WWDC19
-
下载
♪ ♪
Doug:欢迎观看本次讲座 我是 Doug Davidson 今天我想谈谈 Natural Language 处理 在过去几年中 有关 Natural Language 处理的 讲座已经举办了很多次 今天 我们会在这些讲座的基础上 聊聊 Natural Language 处理中 令人兴奋的新增技术 首先 我会介绍 NLP 和 NLP 模型的背景知识 接着 我会总结一下现有技术 然后 聊聊今年的新增技术 以及先进的应用 最后 我会对本次讲座进行总结 首先 我们从背景知识开始 从示意图来看 NLP 模型的工作流程基本类似 首先都会从文本数据开始 然后进入输入层 该层将文本数据 转化为数值特征表示 在此基础上 经过机器学习的处理 从而产生输出 几年前出现的 Create ML 模型 便可以很好地说明这一流程 并且文本分类和词语标记 也都支持该模型 从输入层 日趋复杂的发展中 我们可以清楚观察到 NLP 领域的发展进程
就在一、二十年前 我们使用的还是简单的正交特征 大约从十年前起 我们便开始使用 类似 Word2Vec 和 GloVe 的 静态词嵌入 接着是类似 CNN 和 LSTM 的 基于神经网络模型的上下文词嵌入 到了最近 我们开始使用 基于 Transformer 的语言模型 我有必要解释一下什么是嵌入 简单来说 嵌入就是 将语言中的词映射到 某个抽象向量空间的向量 并作为机器学习模型进行训练 并且词的语义越相似 其在向量空间中的位置便越接近 这样语言知识便可以融入到嵌入中 静态嵌入是词到向量 一种简单的映射 即传入一个词 模型便会在表中 进行查找然后提供一个向量 经过这种训练 语义相似的词 在向量空间中的位置就会十分接近 这个过程对于理解单个词非常有用 而动态嵌入和上下文嵌入 则更为复杂 其中 句子中的每个词 会根据在句中的作用 映射到不同的向量 例如 “fast food joint” 中的 “food” 与 “food for thought” 中的 “food” 语义不同 所以它们的嵌入向量也各不相同 输入层之所以需要更为强大的嵌入 是为了能够实现迁移学习 嵌入基于大量数据进行训练 概括了语言的一般性知识 可以迁移至特定任务 无需大量特定任务的训练数据
当前 Create ML 可以利用 ELMo 模型支持该类型的嵌入 ELMo 模型基于 LSTM 其输出经过组合后 可以产生嵌入向量 该向量通过 Create ML 便可用于训练分类和标记模型 现在 我们来谈谈 目前受支持的模型 由于 2019 年 和 2020 年的 讲座都已经仔细谈过这些内容了 今天我就简单地来说一下 Natural Language 支持使用 Create ML 训练模型 该模型和我们在 NLP 模型中 看到的模型基本相同 并主要用于两类任务: 文本分类和词语标记 在文本分类中 输出会使用 一种类别对输入文本进行描述 例如主题或观点 在词语标记中 输出会对 输入文本中的每个词赋予标签 例如词性或角色标签
受支持的 Create ML 模型大致遵循 NLP 领域的演变过程 从最大熵 模型和基于 CRF 的模型开始 到支持静态词嵌入 然后是使用 ELMo 嵌入的 Create ML 模型的动态词嵌入 想要了解更多细节内容 你可以观看此前的讲座 包括 2019 年 “Natural Language 框架的进展” 以及 2020 年“利用 Natural Language 让 App 更加智能” 现在 让我们回到 Natural Language 在今年 取得的新进展 我很高兴告诉大家 现在我们可以 提供基于 Transformer 的上下文嵌入 具体而言是 BERT 嵌入 BERT 嵌入表示基于 Transformer 的 双向编码器表示技术 这是一种类嵌入模型 其训练基于 使用掩码语言模型的大量文本 顾名思义 就是模型的一个句子中 有一个词被掩盖 然后要求模型进行预测 例如 “food for thought” 中的 “food” 经过训练 模型的预测能力 便会得到提升
Transformer 的核心 在于注意力机制 具体来说 就是多头自注意力机制 该机制允许模型 一次以多种方式 赋予文本各个部分不同的权重 多头自注意力机制 会与多个其他层封装在一起 该过程经过多次重复 便可以形成一个强大且灵活的模型 该模型能够利用大量的文本数据 因此 该模型一次可针对多种 语言进行训练 是一种多语言模型 该模型具有以下几个优点 其可以在短时间内支持多种语言 甚至一次就可以支持多种语言 更重要的是 由于语言间相似性 所带来的协同 语言间的数据可以互相帮助 从而 我们可以在短时间内支持 来自多个语系的 27 种语言 我们共使用了 3 个独立模型 来实现该功能 并且每个模型都单独针对一组 共享相关书写系统的语言 因此 我们有一个模型针对 使用拉丁字母的语言 一个针对使用西里尔字母的语言 还有一个针对中文、日文和韩文
由于这些嵌入模型与此前我们谈论的 Create ML 训练十分契合 因此可以成为其输入编码层 该编码十分强大 并且适用于多种模型 此外 用于训练的数据 也不必来自一种语言 我来举个例子演示一下这个过程 假如你正在编写一个通讯 App 并希望帮助用户 自动分类收到的消息 假设你希望将信息分为 3 类: 个人消息 比如朋友发送的消息 工作消息 比如同事发送的消息 还有商务消息 比如与你共事的公司发送的消息 但是用户可能会收到 多种语言的消息 因此你需要解决这个问题 在这个例子中 我收集了 几种语言的训练数据 英语的、意大利语的、 德语的以及西班牙语的 在这里 我使用了 JSON 格式 但你也可以使用字典或 CSV 为了训练模型 我们需要进入 Create ML APP 并创建一个项目 接着选择训练数据
我同时准备了相应的 验证数据和测试数据
然后选择算法 在这里 我们有一个新选项: BERT 嵌入
在选择好这些后 我们选择脚本 由于这些语言均使用拉丁字母 所以我会选择拉丁 如果只使用一种语言 我们可以在这里选择进行指定 但由于我们使用多种语言 所以选择自动
接着我们要做的就是点击训练 模型便会开始进行训练
将强大的模型应用到文本 是训练过程中最耗时的部分 很快 模型就通过训练 达到很高的正确率
到那时 我们就可以使用 示例消息试验一下该模型
可以是英语⋯⋯
或者是西班牙语
该模型十分确信这些都是商务消息 为了证明协同是存在的 该模型并没有使用法语进行训练 但其仍然能够对法语文本进行分类
但尽管如此 我还是建议 你的训练数据需要包含 你想使用的每种语言 到目前为止 我们 只使用了 Create ML 此外我们还可以使用 Natural Language 框架 以及名为 NLContextualEmbedding 的类 来处理此类嵌入 这么做你可以识别想要的嵌入类型 并确认其所具备的属性 查找嵌入模型的方法很多 比如按语言查找 或按脚本查找 在查找到该模型后 你便可以获取相关属性 例如向量的维数 此外 每个模型都有一个标识符 即用于唯一识别模型的字符串 例如 当你正在使用一个模型 你可能会按语言对其进行查找 但之后如果你还想保证使用 同一个模型 该标识符就能帮助你实现这点 但需要注意的是 和其他 Natural Language 功能一样 这些嵌入模型依赖于 按需下载的资源 但 NLContextualEmbedding 提供的 API 可以为你提供更多的掌控权 比如 在使用前请求下载 你可以询问特定的嵌入模型 在设备上当前是否具有可用资源 如果没有的话 提交一个请求 资源便会下载到该设备上 这会儿 可能有些人会说 我的模型不是用 Create ML 训练的 而是使用 PyTorch 或 TensorFlow 训练的 这样的话 我还可以使用 这些新的 BERT 嵌入吗? 当然可以 我们为你提供的 多语言预训练嵌入模型 可以作为输入层应用于 任何你想训练的模型 以下是该模型的工作原理 在 macOS 设备上 你可以使用 NLContextualEmbedding 获取训练数据的嵌入向量 接着将嵌入向量输入到 使用 PyTorch 或 TensorFlow 的训练中 并使用 Core ML 工具将结果 转换为 Core ML 模型
推理在设备上进行时 使用 NLContextualEmbedding 获取输入数据的嵌入向量 并将其传递到 Core ML 模型中 以获取输出 为了支持这一过程 可使用额外的 NLContextualEmbedding API 来让你加载模型 并将其应用到文本中 以获取最终的嵌入向量
如果你还记得之前的模型标识符 利用该识别符你便可以 检索此前用于训练的模型 将该模型用于文本片段 你便可以获取 NLContextualEmbeddingResult 对象 一旦有了该对象 你便可使用它 迭代嵌入向量 为了向你演示这个过程 我们准备了一个简单的示例模型 我们首先从已有的 英语稳定扩散模型开始 使用多语言数据对其进行微调 将新的 BERT 嵌入作为输入层 并保持固定 同时训练一个简单的线性投影层 来对维度进行转换 最后便可以输出一个使用 多语言输入的稳定扩散模型 以下是该模型输出的样例 例如 如果我输入英文文本 “一条从开满粉红花朵的花园内 穿梭而过的小径” 接着模型就会带我们沿着一条小径 走进开满粉红花朵的花园 并且如果我将同一个句子翻译为 法语、西班牙语、意大利语及德语 该模型也会为每种语言输出 有小径和开满粉红花朵花园的图片 我再举一个稍微一点复杂的例子 “阴云密布的天空下 一条森林和山前的路” 以下是该模型的输出内容 有路、树、山还有云 同样的 我可以将同一个句子翻译为 法语、西班牙语、意大利语和德语 或他任何一种语言 每种语言都可以得到一张 有路、树、山和云的图片 现在 我来总结一下本次讲座的要点 你可以使用 Create ML 轻松训练用于 文本分类和词语标记任务的模型 并且新的多语言 BERT 嵌入模型 可以为此提供强大的输入编码层 同时该模型可以是单语言模型 也可以是多语言模型 此外 你还可以 将 BERT 嵌入作为输入层 应用于使用 PyTorch 或 TensorFlow 训练的任何模型 谢谢大家 现在大家就开始训练模型吧 ♪ ♪
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。