您好,欢迎来到衡荣清铝单板网站!

全国服务热线:

新闻中心

天津铝单板生产厂家尺有所短寸有所长(客服,是什么意思)

发布时间:2023-04-02 21:04:55 人气:6 来源:铝单板厂家

天津铝单板生产厂家尺有所短寸有所长(客服,是什么意思)

原标题:Chat客服入门案例|张量流商务智能客服

本篇介绍了序列-序列机制和张量流的基本概念,基于中文语料库说明基于循环神经网络的语言翻译的实战应用01序列-序列机制序列-序列机制概述序列-序列(Sequence To Sequence,Seq2Seq)是一个编码器-解码器 (Encoder-Decoder Mechanism)结构的神经网络,输入是序列(Sequence),输出也是序列(Sequence)。

编码器(Encoder)将可变长度的序列转变为固定长度的向量表达,而解码器(Decoder)则将这个固定长度的向量转换为可变长度的目标信号序列,如图10-1所示,图中EOS是序列的结束标识符

■ 图10-1序列-序列机制 序列-序列的基本模型包含三个部分,即编码器、解码器以及连接两者的中间状态向量语义编码(C)编码器通过学习输入,将其编码成固定大小的状态向量,继而将语义编码传给解码器,解码器再通过对状态向量语义编码的学习输出对应的序列。

图10-2表示了序列-序列模型的基本工作流程■ 图10-2序列-序列模型 注意力机制注意力机制(Attention Mechanism)与编码器-解码器模型的区别在于不再要求编码器将所有输入信息都编码成固定长度的向量,而是编码成向量的序列,如图10-3所示,解码时选择性地从序列 。

Ci (i=1,2,…,n)中选取子集进行处理。

■ 图10-3注意力机制 02集束搜索概述集束搜索(Beam Search)是一种基于序列-序列的搜索算法,通常用在解空间比较大的情况下,为了减少搜索所占用的空间和时间,在每一步深度扩展的时候,裁剪掉部分质量比较差的结点,保留下质量较高的结点,这样就减少了空间消耗,并提高了时间效率,其缺点是潜在的最佳方案有可能被丢弃。

03● 会话管理:包含会话分类、问题查询以及问题更新等功能 ● 任务管理:包括任务配置、任务更新、模型配置等 ● 模型管理:包括模型更新、数据更新以及访问接口等 ● 权限管理:包括权限控制、角色匹配以及业务对接等。

04张量流商务智能实战张量流概念简介1. 张量张量流(TensorFlow)的中文含义是张量和流(Tensor Flow),张量(Tensor)是张量流中基础但又重要的概念张量是具有统一数据类型的数组,可以是一维、二维或者多维。

张量可以来源自输入数据或计算结果,具有三种属性:名称、维度和数据类型在张量流中,张量是维度特征向量(即数组,Array)的集合例如,如果有一个2行4列的矩阵,表示为:在张量流中以行特征向量为基准,表达式更新为:

2. 张量基本操作张量的常用基本操作包括四种:Variable、constant、placeholder和sparseTensor,下面给出其在TensorFlow Core V2.6.0 API中的各自定义。

使用张量流前一般需要先使用命令pip install tensorflow安装库文件,然后使用import tensorflow导入张量流的库文件1) constantconstant函数可以从给定对象中创建张量,其语法定义为:

constant( value, dtype, shape, name) 主要参数说明如下value:张量值dtype:张量值的数据类型,可以指定string、float32、float64、int16和int32等类型。

shape:张量维度;二维情况下代表矩阵,即行和列信息name:张量名字【实例10-1】如果张量值是数值,则称为标量,比如基于给定值200生成张量,输入命令如下,其中,>>> 代表命令输入提示符 输入命令:

>>> importtensorflow astf >>> Scalar=tf.constant( 200, tf.int32, 0) >>> print(Scalar)输出结果:>>> tf.Tensor([], shape=(

0,), dtype=int32) 【实例10-2】基于给定列表生成向量 输入命令为:>>> importtensorflow astf >>> Scalar=tf.constant([ 10, 20,

30, 40, 50], dtype=tf.int64) >>> print(Scalar)输出结果为:>>> tf.Tensor([ 1020304050], shape=( 5,), dtype=int64)

如果没有指定向量维度信息,则张量流默认按照行向量优先处理【实例10-3】基于列表生成指定维度张量 输入命令为:>>> Scalar=tf.constant([ 10, 20, 30, 40, 50], dtype=tf.int64,shape=(

1, 5)) >>> print(Scalar) 输出结果为:>>> tf.Tensor([[ 1020304050]], shape=( 1, 5), dtype=int64) 在指定向量具体维度的前提下,张量流按照预先指定的维度信息生成向量。

【实例10-4】生成三行四列矩阵张量 输入命令为:>>> array=tf.constant( 0, shape=( 3, 4)) >>> print(array) 输出结果为:tf.Tensor([

[0 0 0 0] [ 0 0 0 0] [ 0 0 0 0]], shape=( 3, 4), dtype=int32) 【实例10-5】生成二行三列矩阵张量 输入命令为:>>> array=tf.constant([ [ 。

0, 1, 2],[ 3, 4, 5] ],tf.float32) >>> print(array) 输出结果为:tf.Tensor([ [0. 1. 2.] [ 3. 4. 5.]], shape=(

2, 3), dtype=float32) 2) Variable当张量元素值发生变化时,可以使用Variable更新,语法定义为:Variable( initial_value, trainable, validate_shape, caching_device,name, variable_def,dtype, import_scope, constraint,synchronization,aggregation, shape)

主要参数说明如下initial_value:代表初始值name:变量名字dtype:变量数据类型shape:变量的维度,如果设置为None,则使用 initial_value 的维度值【实例10-6】创建张量,然后更新张量。

输入命令:>>> import tensorflow as tf >>> variable = tf.Variable( 180) >>> variable.assign( 300) 输出结果:< tf.Variable

shape= dtype= int32,numpy= 300> 3) placeholder对变量还可以执行占位符操作,即先占位后赋值,其命令格式为:tf.compat.v1.placeholder(

dtype, shape, name) 主要参数说明如下dtype:张量元素的类型shape:张量的维度name:操作别名【实例10-7】占位操作与eager execution 不兼容,因此需要先关闭eager execution功能。

输入命令:>>> fromtensorflow.python.framework.ops importdisable_eager_execution >>> disable_eager_execution

>>> importtensorflow astf >>> m = tf.compat.v1.placeholder(tf.int32, shape=( 2, 2)) >>> n = tf.matmul(m, m)

>>> withtf.compat.v1.Session assess: ... matrix = np.random.rand( 2, 2) ... print(sess.run(n, feed_dict={m: matrix }))

...输出结果:[[ 00] [ 00]] 4) 张量维度在程序中,有时需要使用张量的维度信息,对于二维矩阵而言,即是行信息和列信息下面举例说明【实例10-8】检查二维矩阵张量的行信息和列信息 >>>

array=tf.constant([ [ 0, 11, 22, 99],[ 20, 30, 44, 55] ],tf.int16) >>> print( array) tf.Tensor([[ 011

2299] [ 20304455]], shape=( 2, 4), dtype=int16) >>> print( array.shape) ( 2, 4) >>> print( array.shape[

0]) 2>>> print( array.shape[ 1]) 4>>> print( array.shape[ 2]) IndexError: listindex out of range 上述例子中,二维矩阵张量的维度信息存储于元组中,元组第一个元素代表行信息,元组第二个元素代表列信息,对于二维矩阵而言,没有第三个维度,因此访问元组的第三个元素时,会提示下标超界错误。

【实例10-9】生成以值零填充的张量 >>> zeros=tf.zeros( 5) >>> print(zeros) tf.Tensor([ 0. 0. 0. 0. 0.], shape=( 5,), dtype=float32) 。

或者执行下面的命令可以得到相同的结果>>> zeros=tf.zeros( 5, 1) >>> print(zeros) tf.Tensor([ 0. 0. 0. 0. 0.], shape=( 5,), dtype=float32)

【实例10-10】生成以值1填充的二维矩阵张量,并获取维度信息 >>> ones=tf.ones([ 4, 4]) >>> print(ones) tf.Tensor([[ 1. 1. 1. 1.] [

1. 1. 1. 1.] [ 1. 1. 1. 1.] [ 1. 1. 1. 1.]], shape=( 4, 4), dtype=float32) >>> print(ones.shape[ 0])

4>>> print(ones.shape[ 1]) 4>>> print(ones.shape[ 2]) IndexError:list index out of range 5) 张量流组件简介张量流包含三个主要的组件:图形(Graph)、张量(Tensor)和任务(Session)。

张量表示在操作之间传递的数据,常量张量值不变,而变量的初始值可能随着时间的推移而改变;图形是张量流的基础,运算和操作都在图形内部执行;会话操作从图形中执行,要在图形中使用张量值,需要事先创建并打开会话【实例10-11】

#定义常量张量>>> tf.compat.v1.disable_eager_execution >>> a = tf.constant( 5) >>> b = tf.constant( 10) #定义操作

>>> c = a/b #创建并打开任务>>> sess = tf.compat.v1.Session >>> sess.run(c) 0. 5#操作执行完成,关闭任务,释放资源>>> sess.close

TensorFlow的操作在图中进行,图是一个集合连续发生的计算每个操作称为一个操作结点并且相互连接目前,TensorFlow已经从1.x升级到2.x,对于部分使用旧版本编写的代码,仍然可以在 TensorFlow 2.x 中运行 1.x 代码,未经修改(contrib 除外),通常使用的兼容性方法是用compat.v1 关键字指定,如下。

importtensorflow.compat.v1astftf.disable_v2_behavior优化算法TensorFlow的keras.optimizers库中定义了模型的优化算法,下面介绍几种主要代表性算法。

本节实例使用了其中的一种算法(1) Adam算法:基于一阶或二阶动量(Moments)的随机梯度下降算法,动量是非负超参数,主要作用是调整方向梯度下降并抑制波动此算法适用于数据量和参数规模较大的场合 (2) SGD算法:

动量梯度下降算法 (3) Adagrad算法:学习率与参数更新频率相关 (4) Adamax算法:Adam算法的扩展型,词嵌入运算有时优于Adam算法 (5) Ftrl算法:谷歌发明的算法,适用于大稀疏特征空间的场合。

(6) Nadam算法:基于Adam算法,使用Nesterov动量 (7) RMSprop算法:基于梯度平方均值 (8) Adadelta算法:使用随机梯度下降算法和自适应学习率,避免训练过程中学习率持续劣化以及手动设定问题。

损失计算TensorFlow的keras.losses库中定义了各种损失值的运算类,下面重点介绍常用的几种(1) CategoricalCrossentropy类:计算标签和预测值之间的交叉熵损失(Crossentropy Loss)。

(2) SparseCategoricalCrossentropy类:原理与CategoricalCrossentropy类似比较适用于有两个及以上标签类别的场景,如果运算基于独热表示标签,更适合使用CategoricalCrossentropy损失。

(3) BinaryCrossentropy类:类似CategoricalCrossentropy,适用于0或者1二分类的场合 (4) MeanSquaredError类:计算标签和预测值之间的误差平方均值。

(5) MeanAbsoluteError类:计算标签和预测值之间的绝对误差均值 (6) Hinge类:计算真实值和预测值之间的铰链损失 模型评估TensorFlow的keras.metrics库中定义了模型评估指标,下面介绍几种代表性指标。

(1) AUC类:代表Area Under The Curve,计算ROC 的曲线下面积 (2) MeanSquaredError类:计算预测值和真实值的误差平方均值 (3) MeanAbsoluteError类:。

计算标签值和预测值的误差绝对均值 (4) Accuracy类:计算标签值和预测值相同的频率 (5) CategoricalCrossentropy类:计算标签和预测值之间的交叉熵 (6) SparseCategoricalCrossentropy类:。

原理与CategoricalCrossentropy类似,比较适用于有两个及以上标签类别的场景 向量嵌入机器学习模型将向量作为输入,因此在将字符串输入模型之前需要将字符串转换为数值向量,也称为词嵌入词嵌入提供了一种高效表示的方法,其中相似的词具有相似的编码。

在处理大型数据集时,通常会看到多维的词嵌入处理,高维度嵌入可以体现词间的细粒度关系,但需要更多的数据来学习在张量流中,这可以通过TensorFlow库中Keras.Layers的Embedding类实现,其具体定义如下。

Embedding(input_dim, output_dim, embeddings_initializer,embeddings_regularizer, activity_regularizer,

embeddings_constraint, mask_zero, input_length, **kwargs)主要参数说明如下input_dim:词语大小output_dim:嵌入维度embeddings_initializer:嵌入矩阵初始值。

embeddings_regularizer:嵌入矩阵调整函数embeddings_constraint:嵌入矩阵限定函数mask_zero:布尔值,判断是否零作为填充input_length:输入序列长度。

神经网络门控机制基于循环神经网络,由 Kyunghyun Cho 等人于 2014 年提出门控循环单元网络(Gated Recurrent Units,GRU)类似于附带遗忘门的长短期记忆网络 (LSTM),但参数比后者少。

门控循环单元网络在自然语言处理的部分性能与长短期记忆网络相似,在较小数据集上的分析效果比较突出,具体语法定义如下GRU(units, activation, recurrent_activation,use_bias, kernel_initializer,recurrent_initializer,

bias_initializer, kernel_regularizer,recurrent_regularizer, bias_regularizer, activity_regularizer,kernel_constraint, recurrent_constraint, bias_constraint,dropout, recurrent_dropout, return_sequences, return_state,go_backwards, stateful, unroll, time_major,

reset_after, **kwargs)主要参数说明如下units:输出空间维度Activation:激活函数recurrent_activation:重复激活函数use_bias:偏置量标识kernel_initializer:权重矩阵初始化。

dropout:输入的丢弃率,介于0~1go_backwards:逆向处理输入序列中文语料处理本实例使用中文语料,涉及中文语料的分词,使用结巴分词,下面是实例代码,可以查看分词后的结果,如图10-4所示。

>>> importjieba >>> tokenization = jieba.cut( "自然语言处理在人工智能领域得到了广泛应用") >>> forword intokenization : ... print(word)

■ 图10-4中文结巴分词 如果要对中文语料分词后的结果进行词频统计,可以使用如下方法>>> importjieba 通过词典存放分词结果,Key保存词语内容,Value保存词语频率统计结果>>> word_dict= {}

>>> tokenization = jieba.cut( "人工智能基于智能处理技术,对智能社会发展贡献巨大") >>> forword intokenization : ... ifword inword_dict :

... word_dict [word] = word_dict[word] + 1... print(word_dict) ... else: ... word_dict[word]= 1... print(word_dict)

...输出结果参见图10-5■ 图10-5基于结巴分词的词频统计 实现步骤本实例基于TensorFlow库和循环神经网络(编码器-解码器),下面说明主要的操作步骤1. 导入库文件首先需要导入程序执行所需的库文件,因为语料同时包含简体中文和繁体中文,因此参数设定同时支持简体和繁体,导入的主要库信息如下。

importjieba importtensorflow importtensorflow astf frompathlib importPath frommatplotlib importrcParams

fromsklearn.model_selection importtrain_test_split fromtensorflow.keras importModel fromtensorflow.keras.preprocessing.text

importTokenizer fromtensorflow.keras.layers importLayer,Dense frommatplotlib.font_manager importFontProperties

fromtensorflow.keras.layers importEmbedding, GRU,LSTM fromtensorflow.keras.optimizers importSGD,Adam

fromtensorflow.keras.losses importSparseCategoricalCrossentropy fromtensorflow.keras.utils importget_file

fromio importopen rcParams[ font.family] = [ Microsoft YaHei] !wget -O taipei_sans_tc_beta.ttf https://link-to-fonts

!mv taipei_sans_tc_beta.ttf /usr/path-link/ttffont = FontProperties(fname= r/usr/path-link/ttf/taipei_sans_tc_beta.ttf

) 确认中文字体下载正常,如图10-6所示■ 图10-6文件下载进度 2. 下载语料TensorFlow提供了基于英语-西班牙语的翻译项,本实例是在其基础上针对中文-英语翻译的功能拓展,使用的中英文语料可以从网址http://www.manythings.org/anki/下载到本地,也可以在代码中加入链接地址由代码自动下载,主要实现代码如下。

file_path = get_file(cmn-eng.txt, origin= https://link-to-cmn-eng, cache_subdir= datasets,extract= False

) file_full_path = Path(file_path). parent/ cmn-eng.txt执行命令确认语料的保存路径信息print( "语料的保存路径:",Path(file_path). 。

parent) !ls /root/.keras/datasets/输出结果为:语料的保存路径: /root/.keras/datasets cmn-eng.txt输出结果如下语料的保存路径: / root

/ .keras/ datasetscmn-eng.txt3. 语料预处理中英文本语料,首先按照行将文本信息切分,如果是英文,则将文本变为小写,然后去掉开始和结尾的空白符并各自加上起始标识符和结束标识符,如果是中文文本,则去掉开始和结尾的空白符后直接添加起始和结束标识符,主要实现代码如下。

defpreprocess(text): reg = re.compile( r[a-zA-Z,.?]) ifreg.match(text): text = unicode_to_ascii(text.lower.strip)

text = re.sub( r"([.!:;,])", r"  ", text) text = re.sub( r[" "]+, " ", text) text = re.sub( r"[^a-zA-Z?.!,:;]+"

, " ", text) text = text.striptext = + text + returntext 列举中英文句子查看处理效果,输入语句为:en_sentence =

"Information Technology has achieved great advancement"cn_sentence = "信息技术获得巨大进步"print(preprocess(en_sentence))

print(preprocess(cn_sentence))输出结果参见图10-7■ 图10-7文本预处理效果 按照行读取语料文本,一行内部中文和英文之间用Tab键区分,区分后第一个元素是英文,第二个元素是中文,中文语料执行中文结巴分词后通过空格连接,形成与英文文本相同的显示效果,主要实现代码如下。

def corpus( file): lines= open(file, encoding= UTF-8).read.strip.split( ) english=[]chinese=[]outcome=[]

forstringinlines: outcome= string.strip.split( ) english.append( + outcome[ 0]+ ) cnt=jieba.cut(outcome[

1], cut_all=False) chinese.append( + " ". join(cnt) + ) returnenglish,chinese 输出部分样本,比较结巴分词后的中文文本和对应英文文本的处理效果,参见图10-8。

■ 图10-8中英文处理结果 通过将文本映射为索引张量信息,输出部分样本,对比中英文词嵌入处理结果,参见图10-9■ 图10-9中英文词嵌入处理 4. 编码器定义接着定义编码器,词嵌入初始化矩阵基于均匀分布,使用双曲正切激活函数,循环激活函数使用Sigmoid,使用偏置量并设定初始值为0,模型丢弃率和重复丢弃率都设置为0.1。

classEncoder(Model): def__init__(self, corpus_scale, embedding_dim, encoder, batch_size): super(Encoder, self).__init__

self.batch_size = batch_sizeself.encoder = encoderself.embedding = Embedding(input_dim=corpus_scale, output_dim=embedding_dim, embeddings_initializer=

uniform, embeddings_regularizer= None, activity_regularizer= None, embeddings_constraint= None, mask_zero=

False, input_length= None,) self.gru = GRU(self.encoder,return_state= True,activation= tanh, recurrent_activation=

sigmoid,use_bias= True, kernel_initializer= glorot_uniform,recurrent_initializer= orthogonal,bias_initializer=

zeros, kernel_regularizer= None,recurrent_regularizer= None, bias_regularizer= None, activity_regularizer=

None,kernel_constraint= None, recurrent_constraint= None, bias_constraint= None,dropout= 0.1, recurrent_dropout=

0.1, return_sequences= True,go_backwards= False, stateful= False, unroll= False, time_major= False,reset_after=

True,) 5. 解码器定义接着定义解码器,词嵌入初始化矩阵基于均匀分布,使用双曲正切激活函数,重复激活函数使用Sigmoid,使用偏置量并设定初始值为零,模型丢弃率和重复丢弃率都设置为0.1class。

Decoder(Model): def__init__(self, corpus_scale, embedding_dim, decoder, batch_size): super(Decoder, self).__init__

self.batch_size = batch_sizeself.decoder = decoderself.embedding = Embedding(corpus_scale, embedding_dim)

self.gru = GRU(self.decoder,return_state= True,activation= tanh, recurrent_activation= sigmoid,use_bias=

True, kernel_initializer= glorot_uniform,recurrent_initializer= orthogonal,bias_initializer= zeros, kernel_regularizer=

None,recurrent_regularizer= None, bias_regularizer= None, activity_regularizer= None,kernel_constraint=

None, recurrent_constraint= None, bias_constraint= None,dropout= 0.1, recurrent_dropout= 0.1, return_sequences=

True,go_backwards= False, stateful= False, unroll= False, time_major= False,reset_after= True,) 6. 训练模型

基于参数配置,训练模型,设置训练轮数为10轮,参见图10-10和图10-11模型训练初期,损失值为1.99,第1轮整体训练损失值为1.146,之后随着训练轮数增加,损失值逐渐降低,第4轮结束时损失值减少为0.572。

■ 图10-10模型训练初期 ■ 图10-11模型训练后期 模型训练后期,损失值进一步下降,第6轮结束时训练损失值为0.330,到第10轮整体训练结束时损失值则变为0.096,模型的训练效果较好7. 测试结果。

模型训练结束后,输入中文获得英文翻译结果,部分结果参见图10-12~图10-15翻译结果可能会随着训练轮数和训练样本数量发生一定变化【实例10-12】translate(u感谢 你 的 帮助),混淆矩阵输出结果参见图10-12。

输入文本 : 感谢 你 的 帮助 翻译结果 : thanks for your help ■ 图10-12测试结果 【实例10-13】translate(u我 想 打 电话),参见图10-13。

输入文本 : 我 想 打 电话 翻译结果 : i want to call ■ 图10-13测试结果 【实例10-14】translate(u他 不幸 找 不到 工作),参见图10-14。

输入文本 : 他 不幸 找 不到 工作 翻译结果 : he had no luck in finding work ■ 图10-14测试结果 【实例10-15】translate(u我 相信 你 的 判断),参见图10-15。

输入文本 : 我 相信 你 的 判断 翻译结果 : i believe your judgment ■ 图10-15测试结果 点击下方文字查看精彩案例05参考书籍《Python自然语言处理——算法、技术及项目案例实战(微课视频版)》

作者:(日)中本一郎、马冀、张积林、郭彦、庄伟卿、冯丽娟、江明、黄益定价:59.90元扫码优惠购书本书全面介绍了数据挖掘和商务智能的基础知识、主要技术、基于Python语言的商务应用生成技术全书共12章,主要内容包括数据挖掘、深度学习、Seq2Seq、商务智能应用创建及部署、Tensorflow、卷积神经网络、循环神经网络和Rasa技术。

本书注重理论结合实战,实例部分配套操作步骤,重要代码讲解,中间图形和文本输出,将实战内容融合在课程教学过程中,使理论紧密联系实际,帮助学生在潜移默化中获得知识 返回搜狐,查看更多责任编辑:

首页 产品 手机 顶部
在线客服
联系方式

热线电话

上班时间

周一到周五

公司电话

二维码
线