目录
[第五章 自然语言处理原理与应用](#第五章 自然语言处理原理与应用)
[3 自然语言处理应用系统](#3 自然语言处理应用系统)
[■ 对话系统](#■ 对话系统)
[■ 任务型对话系统架构](#■ 任务型对话系统架构)
[■ 对话系统关键技术-自然语言理解](#■ 对话系统关键技术-自然语言理解)
[■ 对话系统关键技术-对话管理](#■ 对话系统关键技术-对话管理)
[■ 对话系统关键技术-自然语言生成](#■ 对话系统关键技术-自然语言生成)
[4 基于 MindSpore 的自然语言处理实践](#4 基于 MindSpore 的自然语言处理实践)
[■ 模型实现](#■ 模型实现)
[▲ MindSpore中的NLP模型实现](#▲ MindSpore中的NLP模型实现)
[▲ 常用组件-嵌入层](#▲ 常用组件-嵌入层)
[▲ 常用组件-LSTM层](#▲ 常用组件-LSTM层)
[▲ 常用组件-机器翻译指标BLEU](#▲ 常用组件-机器翻译指标BLEU)
[■ 应用案例](#■ 应用案例)
[▲ 基于MindSpore的大规模预训练模型"盘古"](#▲ 基于MindSpore的大规模预训练模型“盘古”)
[▲ 盘古模型结构](#▲ 盘古模型结构)
[▲ 训练数据集](#▲ 训练数据集)
[▲ 大规模自动并行](#▲ 大规模自动并行)
[▲ 模型预测](#▲ 模型预测)
[古诗 & 对联生成](#古诗 & 对联生成)
[第五章 测一测](#第五章 测一测)
第五章 自然语言处理原理与应用
3 自然语言处理应用系统
■ 对话系统
■ 任务型对话系统架构
■ 对话系统关键技术-自然语言理解
■ 对话系统关键技术-对话管理
■ 对话系统关键技术-自然语言生成
4 基于 MindSpore 的自然语言处理实践
■ 模型实现
▲ MindSpore中的NLP模型实现
MindSpore 框架中支持常用的 NLP 模型组件(算子、评估方法等)。
MindSpore 的模型集市 Model Zoo 中提供了经过深度优化的模型,方便使用者基于这些模型进行个性化的开发,包括:LSTM/GRU、 TextCNN、 Seq2Seq、Transformer、BERT、 GPT。
▲ 常用组件-嵌入层
mindspore.nn.Embedding
mindspore.nn.Embedding(vocab_size, embedding_size, use_one_hot=False, embedding_table="normal", dtype=mstype.float32,padding_idx=None)
vocab_size (int) : 词典的维度。
embedding_size (int) : 嵌入向量的维度。
use_one_hot (bool) :是否使用 one-hot 形式。默认值: False 。
embedding_table (Union[Tensor, str, Initializer, numbers.Number]) : 嵌入表的初始化方法。默认值: 'normal' 。
dtype (mindspore.dtype) :数据类型。默认值: mindspore.float32 。
++++输入++++:
input (Tensor)-维度 (batch_size,input_length) 。 其中的元素应为整数并且不应大于词典维度。p
++++输出++++:
output (Tensor)-维度 (batch_size,input_length,embedding_size) 。
使用示例:
net = nn.Embedding(20000, 768, True)
input_data = Tensor(np.ones([8, 128]), mindspore.int32)
Maps the input word IDs to word embedding.
output = net(input_data)
result = output.shape
print(result)
输出结果 : (8, 128, 768)
▲ 常用组件-LSTM层
mindspore.nn.LSTM
mindspore.nn.LSTM(input_size, hidden_size, num_layers=1, has_bias=True, batch_first=False, dropout=0, bidirectional=False)
input_size (int) : 输入层维度。
hidden_size (int) ****:****隐藏层维度。
num_layers (int):LSTM 层数,默认值: 1 。
has_bias (bool) :是否使用偏置值。默认值: True 。
batch_first (bool):第一个维度是否为 batch_size. 默认值: False 。
dropout (float, int) :为每一层(除了最后一层)增加 Dropout ,默认值: 0 。
bidirectional (bool) ****:****是否为双向 LSTM. 默认值: False 。
mindspore.nn.LSTM 输入值:
input (Tensor): 维度 (seq_len, batch_size, input_size) 或者 (batch_size, seq_len, input_size) 。
hx (tuple): 由两个 Tensors 组成 (h_0, c_0) ,数据类型 mindspore.float32 或 mindspore.float16 ,维度 (num_directions*num_layers,batch_size,hidden_size) 。
mindspore.nn.LSTM 输出值:
output (Tensor):维度 (seq_len, batch_size, num_directions * hidden_size) 。
hx_n (tuple) :由两个 Tensors 组成 (h_n, c_n) ,维度 (num_directions * num_layers, batch_size, hidden_size) 。
使用示例:
net=nn.LSTM(10,16,2,has_bias=True,batch_first=True,bidirectional=False)
input = Tensor(np.ones([3, 5, 10]).astype(np.float32))
h0 = Tensor(np.ones([1 * 2, 3, 16]).astype(np.float32))
c0 = Tensor(np.ones([1 * 2, 3, 16]).astype(np.float32))
output, (hn, cn) = net(input, (h0, c0))
print(output.shape)
输出结果: (3, 5, 16) 。
除此之外,还有 GRU 层 :mindspore.ops.DynamicGRUV2。
▲ 常用组件-机器翻译指标BLEU
BLEU ( Bilingual Evaluation Understudy ) 是评价机器翻译模型的常用指标。
mindspore.nn.BleuScorel
mindspore.nn.BleuScore(n_gram=4, smooth=False)
n_gram (int):n_gram 值,范围 [1, 4] 。默认值: 4 。
smooth (bool):是否使用平滑,默认值: False 。
使用示例:
candidate_corpus = [['i', 'have', 'a', 'pen', 'on', 'my', 'desk']]
reference_corpus = [[['i', 'have', 'a', 'pen', 'in', 'my', 'desk'],
['there', 'is', 'a', 'pen', 'on', 'the', 'desk']]]
metric = BleuScore()
metric.clear()
metric.update(candidate_corpus, reference_corpus)
bleu_score = metric.eval()
print(bleu_score)
输出结果 : 0.5946035575013605 。
■ 应用案例
▲ 基于MindSpore的大规模预训练模型"盘古"
大规模预训练语言模型( Pretrained Language model , PLM )已成为自然语言处理的**++++新范式++++**。具有数千亿个参数的 PLM ,如 GPT-3 ,使用少量的上下文学习,就在自然语言理解和生成方面表现出了强大的性能。
PanGu-α (盘古) 基于 MindSpore 进行开发,该模型具有多达 2000 亿个参数,在 2048 个 Ascend 910 AI 处理器的集群上进行训练。训练并行度策略是基于 MindSpore Auto-parallel 实现的,该策略由五个并行维度组成,将训练任务高效地扩展到 2048 个处理器,包括数据并行、算子级模型并行、 Pipeline 模型并行、优化器模型并行 和重计算。
为了增强 PanGu-α 的泛化能力,从广泛的领域收集了 1.1TB 高质量的中文数据,对模型进行预训练。
PanGu-α 模型在中文 NLP 任务的评估中表现出了卓越的语言学习能力,在小样本学习和生成任务方面尤为突出。
▲ 盘古模型结构
基础结构为单向 Transformer 模型的 Decoder 层。
在堆叠的 Transformer 层之上加上了 Query 层,显式地进行预测,如下图所示:
▲ 训练数据集
通过多种来源的文本收集,经过数据清洗、筛选 及去重等手段建立了 1.1TB 的高质量中文文本语料库。经统计 Token 数量约为 250B 规模。
▲ 大规模自动并行
▲ 模型预测
阅读理解
阅读文章:株洲北站全称广州铁路(集团)公司株洲北火车站。除站场主体,另外管辖湘潭站、湘潭东站和三个卫星站,田心站、白马垅站、十里冲站,以及原株洲车站货房。车站办理编组、客运、货运业务。车站机关地址:湖南省株洲市石峰区北站路 236 号,邮编 412001 。株洲北站位于湖南省株洲市区东北部,地处中南路网,是京广铁路、沪昆铁路两大铁路干线的交汇处,属双向纵列式三级七场路网性编组站。车站等级为特等站,按技术作业性质为编组站,按业务性质为客货运站,是株洲铁路枢纽的主要组成部分,主要办理京广、沪昆两大干线四个方向货物列车的到发、解编作业以及各方向旅客列车的通过作业。每天办理大量的中转车流作业,并有大量的本地车流产生和集散,在路网车流的组织中占有十分重要的地位,是沟通华东、华南、西南和北方的交通要道,任务艰巨,作业繁忙。此外,株洲北站还有连接石峰区喻家坪工业站的专用线。株洲北站的前身是田心车站。
请问:株洲北站的前身是哪个车站?
回答:田心车站。
古诗 & 对联生成
问:以枯藤、老树、夕阳作一首诗。
答:藤影参差绕蓝桥,野花压枝低袅风,山风习习观残雪,村舍依依麦已深。
问:上联:欢天喜地度佳节。
答:下联:喜气洋洋迎新年。
文本生成
问:有哪些办法可以教育猫?
答:我觉得猫并不是不懂事的孩子,而是不懂事的孩子才会乱咬东西,所以,最好的办法就是给猫咪找个好的主人。楼主给它找家宠物店的话,在宠物店里买猫砂,不过,家里应该再放一个猫盆或者专用的宠物用盆。还有要提醒楼主一点的是,猫咪的牙齿问题也很容易使它们咬东西,所以,一定要给猫咪好好刷牙,定期的给猫咪洗澡,因为猫咪喜欢闻自己的身体的味道,所以,洗澡也是一种很好的办法。在给猫咪买吃的东西的时候,一定要注意,那些味道重的,可能就是猫咪误食的了,那就赶紧停止吃东西,或者把饭菜都吐出来,不然的话,就很可能误食一些它没有办法去辨识的东西,所以,为了防止这些东西误食,最好还是给猫咪买猫咪专用的,防止猫咪误食的。在给猫咪换洗干净的衣服或者是被子的时候,一定要用干净的猫砂盆,不要用热水,也不要用很烫的水,因为猫咪的身体素质很好,耐热能力也很强,所以,很容易伤到它们的身体。
第五章 测一测
缩略语表
ASR : Automatic Speech Recognition ,自动语音识别技术。
BERT : Bidirectional Encoder Representations from Transformers ,基于 Transformer的双向编码表示模型。
CNN : Convolutional Neural Network ,卷积神经网络。
CRF : Conditional Random Field ,随机场模型。
DM : Dialog Management ,对话管理。
GPT : Generative Pre-Training ,生成式预训练模型。
GRU : Gated Recurrent Unit ,门控循环单元。
HMM : Hidden Markov Model ,隐马尔可夫模型。
LSTM : Long Short Term Memory ,长短期记忆模型。
MEMM : Maximum-Entropy Markov Model ,最大熵马尔科夫模型。
NLG : Natural Language Generation ,自然语言生成。
NLP : Natural Language Processing ,自然语言处理。
NLU : Natural Language Understanding ,自然语言理解。
RNN : Recurrent Neural Network ,循环神经网络。
TF-IDF : Term Frequency-Inverse Document Frequency ,词频 - 逆文本频率方法。
TTS : Text to Speech ,文字到语音。
SVM : Support Vector Machine ,支持向量机。
说明:本文内容来源于网络,仅作为学习用途,如有侵权,请联系作者删除。