中文聊天机器人-TensorFlow2.0-Seq2Seq(一)

目录

NLP

RNN

Seq2Seq模型

项目中用到的API

中文聊天机器人是这本书第二个实战项目,是基于Seq2Seq模型来实现。NLP,一直都是我想深耕的一个方向,特别是中文的NLP,我觉得非常有挑战性。因此,这个实战项目,我会多花一些时间去研究,并也和大家分享一下。当然,如果大家经济允许,还是比较建议大家去购买此书。

NLP

NLP-自然语言处理,是人工智能(AI)的一个子领域。我个人觉得,NLP应该是人工智能中最为困难的领域之一,特别是中文这个领域。从NLP目前发展情况来看,其实英文方面,还算比较成熟,已逐步落地到我们日常生活中。但中文方面,我个人觉得还是继续努力,可能是因为我们的中文博大精深吧,同一个词语,在不同的场景所表达的意思完全不同。即使是人,我们有时也很难理解清楚。

NLP的应用场景很多,主要包含以下几大类:

  • 文本分类

  • 文本生成

  • 信息检索

  • 信息抽取

  • 问答系统

  • 机器翻译

  • 自动摘要

这次我们主要研究的聊天机器人,属于问答系统这一大类。

语言模型:

语言模型经历过了三个阶段:统计语言模型、n-gram语言模型、神经网络模型。

RNN

循环神经网络(Recurrent Neural Network,RNN),是一种神经网络结构模型,是在神经元之间既有内部的反馈连接又有前馈连接。

RNN缺陷:梯度消失和梯度爆炸。

相比于梯度消失,梯度爆炸带来的后果更严重,但是梯度爆炸的问题却比较容易处理,可以采用限制梯度最大值或者梯度分割的方式来解决。而梯度小时的问题是非常难以解决的,目前只能从网络结构上进行优化,但也不能完全避免。RNN的变种LSTM(长短期记忆神经网络)就是为了解决梯度消失的问题而进行的网络结构优化。

Seq2Seq模型

Seq2Seq(Sequence to Sequence),基于Encoder-Decoder框架的RNN的变种。提高了神经网络对长文本信息的提取能力,比单纯使用LSTM的效果要好,在语言翻译和语言生成领域用得比较广泛。

Seq2Seq两个非常重要的概念:

  • Encoder-Decoder框架。

  • Attention机制。

项目中用到的API

  • tf.keras.preprocessing.text.Tokenizer:将文本进行数字符号化。一般情况下,在进行神经网络训练时,输入数据一般都是数值,因此,做文本处理时,需要把文本字符转换为数值。

  • tf.keras.preprocessing.sequence.pad_sequences:将训练数据填充成有限数量的维度类别,大幅度降低整个网络规模以提高训练速度和效果。

  • tf.data.Dataset.from_tensor_slices:将Tensor转换成元素slices的数据集。

  • tf.keras.layers.Embedding:将正整数转换成固定长度的连续向量。

  • tf.keras.layers.GRU:是一种RNN神经元结构,是LSTM的优化升级变种。

  • tf.keras.layers.Dense:全连接的标准神经网络。

  • tf.expand_dims:作用是在输入的Tensor中增加一个维度。

  • tf.keras.optimizers.Adam:替代传统随机梯度下降算法的梯度优化算法。

  • tf.keras.losses.SparseCategoricalCrossentropy:可以接受稀疏编码的多对数交叉熵。

  • tf.concat:将多个Tensor在同一个维度上进行连接。

  • tf.bitcast:将Tensor类型转换为我们需要的数据类型。

    原文作者:不务正业的猿
    原文地址: https://blog.csdn.net/ISWZY/article/details/108282839
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞