模型压缩方法、系统、电子设备及存储介质与流程

文档序号:31937311发布日期:2022-10-26 02:09阅读:48来源:国知局
模型压缩方法、系统、电子设备及存储介质与流程

1.本发明实施例涉及机器学习技术领域,特别涉及模型压缩方法、系统、电子设备及存储介质。


背景技术:

2.文本相似度匹配应用广泛,比如在信息检索中,信息检索系统为了能召回更多与检索词语相似的结果,可以用相似度来识别相似的词语,以此提高召回率。另外,在自动问答中,可以使用自然语言交互,相似度在这里可以用来计算用户以自然语言的提问问句与语料库中问题的匹配程度,那么匹配度最高的那个问题对应的答案将作为响应。
3.近年来bert模型的出现,刷新了文本分类、文本相似度、机器翻译等多个自然语言处理任务的指标,很多人工智能公司也在逐渐将bert模型应用到实际的工程项目中,虽然bert的效果较好,但是由于模型太大,不仅对硬件设备的性能要求较高,而且对数据的处理时间会较长。进而,又出现了基于知识蒸馏方式得到一个轻量级模型,以克服模型太大导致的对硬件设备的性能要求较高且对数据的处理时间会较长的问题。现有的知识蒸馏方式中,是将一个训练好的复杂模型作为教师模型,并用该教师模型来指导轻量级的学生模型的学习,从而将教师模型中的暗知识迁移到学生模型中。


技术实现要素:

4.本发明实施例的目的在于提供一种模型压缩方法、电子设备及存储介质,可以提高训练得到的学生模型的预测精度。
5.为解决上述技术问题,本发明的实施例提供了一种模型压缩方法,包括:提供训练好的n种类型的复杂模型;n为大于或等于2的整数;对n种类型的复杂模型进行融合,得到训练好的教师模型;基于训练样本、所述教师模型以及学生模型的损失函数,对所述学生模型进行训练;所述学生模型的损失函数由第一损失函数和第二损失函数融合得到,所述第一损失函数用于计算所述学生模型的预测值与真实值的损失,所述第二损失函数用于计算所述学生模型的logit值与所述教师模型的logit值的损失;其中,所述训练样本包含样本输入和样本输出,所述学生模型在接收所述样本输入后输出所述预测值且所述学生模型中的logit层输出所述logit值,所述真实值为所述样本输出;所述教师模型在接收所述样本输入后,所述教师模型中的logit层输出所述logit值。
6.本发明的实施例还提供了一种模型压缩系统,包括:复杂模型训练单元,用于提供训练好的n种类型的复杂模型;n为大于或等于2的整数;教师模型获取单元,用于对所述n种类型的复杂模型进行融合,得到训练好的教师模型;学生模型训练单元,用于基于训练样本、所述教师模型以及学生模型的损失函数,对所述学生模型进行训练;所述学生模型的损失函数由第一损失函数和第二损失函数融合得到,所述第一损失函数用于计算所述学生模型的预测值与真实值的损失,所述第二损失函数用于计算所述学生模型的logit值与所述教师模型的logit值的损失;
7.其中,所述训练样本包含样本输入和样本输出,所述学生模型在接收所述样本输入后输出所述预测值且所述学生模型中的logit层输出所述logit值,所述真实值为所述样本输出;所述教师模型在接收所述样本输入后,所述教师模型中的logit层输出所述logit值。
8.本发明的实施例还提供了一种电子设备,包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够上述模型压缩方法。
9.本发明的实施例还提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现上述模型压缩方法。
10.本发明实施例相对于现有技术而言,在基于知识蒸馏的方式的模型压缩过程中:教师模型由n种类型的复杂模型融合得到,可以汲取多种类型的复杂模型的优点,使得教师模型更加全面;在学生模型的损失函数也是由第一损失函数和第二损失函数融合得到,第一损失函数用于计算所述学生模型的预测值与真实值的损失,实现基于硬目标的训练;第二损失函数用于计算所述学生模型的logit值与所述教师模型的logit值的损失,实现基于软目标的训练;使得学生模型的损失函数是融合了基于硬目标和基于软目标的训练,训练精度会更好。因此,本技术实施例的模型压缩方法,可以提高训练得到的学生模型的预测精度。
附图说明
11.一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
12.图1是根据本技术一个实施例的模型压缩方法的流程图;
13.图2是根据本技术另一个实施例的模型压缩方法的流程图;
14.图3是根据本技术一个实施例的模型压缩系统的方框图;
15.图4是根据本技术一个实施例的电子设备的方框图。
具体实施例
16.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的各实施例进行详细的阐述。然而,本领域的普通技术人员可以理解,在本发明各实施例中,为了使读者更好地理解本技术而提出了许多技术细节。但是,即使没有这些技术细节和基于以下各实施例的种种变化和修改,也可以实现本技术所要求保护的技术方案。以下各个实施例的划分是为了描述方便,不应对本发明的具体实现方式构成任何限定,各个实施例在不矛盾的前提下可以相互结合相互引用。
17.本发明的一个实施例涉及一种模型压缩方法,具体流程如图1所示。
18.步骤101,提供训练好的n种类型的复杂模型;n为大于或等于2的整数。
19.步骤102,对n种类型的复杂模型进行融合,得到训练好的教师模型。
20.步骤103,基于训练样本、教师模型以及学生模型的损失函数,对学生模型进行训
练。学生模型的损失函数由第一损失函数和第二损失函数融合得到,第一损失函数用于计算学生模型的预测值与真实值的损失,第二损失函数用于计算学生模型的logit值与教师模型的logit值的损失。其中,训练样本包含样本输入和样本输出,学生模型在接收样本输入后输出预测值且学生模型中的logit层输出logit值,真实值为样本输出;教师模型在接收样本输入后,教师模型中的logit层输出logit值。其中,学生模型中的logit层是学生模型中的全连接层,教师模型中的logit层是教师模型中的全连接层。
21.本发明实施例中,在基于知识蒸馏的方式的模型压缩过程中:教师模型由n种类型的复杂模型融合得到,可以汲取多种类型的复杂模型的优点,使得教师模型更加全面;在学生模型的损失函数也是由第一损失函数和第二损失函数融合得到,第一损失函数用于计算所述学生模型的预测值与真实值的损失,实现基于硬目标的训练;第二损失函数用于计算所述学生模型的logit值与所述教师模型的logit值的损失,实现基于软目标的训练;使得学生模型的损失函数是融合了基于硬目标和基于软目标的训练,训练精度会更好。因此,本技术实施例的模型压缩方法,可以提高训练得到的学生模型的预测精度。
22.本技术实施例的模型压缩方法,采用知识蒸馏的方式对复杂模型进行压缩,得到更适合于工业应用的轻量级模型。该轻量级模型例如为文本相似度匹配模型等自然语言处理领域所需要的模型。该模型压缩方法可以由电子设备执行,该电子设备例如为服务器、个人电脑等任何具有执行该方法所需处理能力的设备。
23.在一个实施例中,n可以为3,该3种类型的复杂模型例如为bert-wwm-ext模型、ernie-1.0模型、roberta-large-pair模型。然该实施例对n的取值不作限制,n可以根据需要确定。学生模型例如为siagru模型。每种类型的复杂模型可以基于训练得到,训练好的每种类型的复杂模型包含属于该种类型的一个复杂模型。该实施例中的步骤102具体可以为,将n个复杂模型的n个logit层进行融合,作为教师模型的logit层;其中,该融合方式可以为,将n个复杂模型的n个logit层输出的n个logit值相加后求平均,作为该教师模型的logit层输出的logit值;然并不限于此,该融合方式例如还可以是将n个复杂模型的n个logit层输出的n个logit值加权融合,并将加权融合后的值作为该教师模型的logit层输出的logit值。
24.在一个实施例中,每种类型的复杂模型基于k折交叉验证训练得到,训练好的每种类型的复杂模型包括训练好的属于该种类型的k个复杂模型;k为大于或等于2的整数。训练好的属于同一种类型的k个复杂模型的内部参数的参数值是不同的。在其他例子中,复杂模型还可以基于留出法、自助法等其他训练方式训练得到,基于留出法或自助法训练得到,训练好的每种类型的复杂模型的数量为1个。
25.如图2所示,模型压缩方法包含:步骤201,提供训练好的n种类型的复杂模型;步骤202,对n种类型的复杂模型进行融合,得到训练好的教师模型;步骤203,基于训练样本、教师模型以及学生模型的损失函数,对学生模型进行训练。学生模型的损失函数由第一损失函数和第二损失函数融合得到,第一损失函数用于计算学生模型的预测值与真实值的损失,第二损失函数用于计算学生模型的logit值与教师模型的logit值的损失。其中,步骤201、步骤203与图1中的步骤101、步骤103分别类似,此处不再赘述。该实施例中的步骤202,对n种类型的复杂模型进行融合,得到训练好的教师模型,具体包括:步骤2021,对于每种类型的复杂模型,将k个复杂模型的k个logit层进行融合,得到每种类型的复杂模型的logit
层;步骤2022,将n种类型的复杂模型的n个logit层进行融合,作为教师模型的logit层。
26.在一个实施例中,各logit层的融合方式可以是:将各logit层输出的logit值相加后取平均。即,在步骤2021中,对于每种类型的复杂模型,将k个复杂模型的k个logit层输出的k个logit值相加后取平均,作为每种类型的复杂模型的logit层输出的logit值;在步骤2022中,将n种类型的复杂模型的n个logit层输出的n个logit值相加后取平均,作为教师模型的logit层输出的logit值。
27.示例的,有3种类型的复杂模型,分别为bert-wwm-ext模型、ernie-1.0模型、roberta-large-pair模型;如果k取10,训练好之后,包括:10个bert-wwm-ext模型、10个ernie-1.0模型、10个roberta-large-pair模型。
28.首先,将10个bert-wwm-ext模型的10个logit层输出的10个logit值相加后取平均,作为bert-wwm-ext这类模型的logit层输出的logit值,记作第一logit值;将10个bernie-1.0模型的10个logit层输出的10个logit值相加后取平均,作为ernie-1.0这类模型的logit层输出的logit值,记作第二logit值;将10个roberta-large-pair模型的10个logit层输出的10个logit值相加后取平均,作为roberta-large-pair这类模型的logit层输出的logit值,记作第三logit值。
29.其次,将该第一logit值、该第二logit值、该第三logit值相加后去平均,作为教师模型的logit层输出的logit值。
30.在其他实施例中,各logit层的融合方式还可以是:预先为各logit层输出的logit值分别权重值,将各logit层输出的logit值分别乘以各自的权重值后相加。各logit层的融合方式可以根据需要设定。
31.在一个实施例中,训练样本可以是海量的训练样本。海量的训练样本可以从现有数据库中获取;例如,在一些智能问答场景中,该现有数据库中包含海量的问题,且按照语义分好类别,相同类别的问题对可作为训练样本中的样本输入,该相同类别的问题对对应的答句作为训练样本的样本输出。海量的训练样本还可以从每日产生的线上日志获取;例如,在一些智能问答场景中,在实际问答过程中会产生大量的线上日志,线上日志经过标注团队标注后可以作为训练样本,海量的训练样本还可以从网上公开的数据集lcqmc,bq corpus等获取。在对学生模型进行训练过程中,每次迭代训练都可以选择不同的训练样本。每个训练样本包括样本输入和样本输入,在每次迭代训练中,可以将该训练样本中的样本输入分别输入到学生模型和教师模型中,此时,学生模型会输出一个预测值,且该学生模型的logit层输出logit值,该教师模型的logit层输出一个logit值。该学生模型输出的预测值和真实值被作为第一损失函数的输入,该第一损失函数可以计算出第一损失值;该学生模型输出logit值和该教师模型输出logit值被作为该第二损失函数的输入,该第一损失函数可以计算出第二损失值,该第一损失值和该第二损失值被融合后,作为在该训练样本下,该学生模型的损失值。然后,电子设备会判断该学生模型的损失值是否满足预设的训练完成条件,如果该学生模型的损失值不满足训练完成条件,那么,需要重新选择一个训练样本来再次对该学生训练进行训练,直至某一次训练后,该学生模型的损失值满足训练完成条件,那么结束对学生模型的训练。采用海量的训练样本对学生模型进行迭代训练,可以使得训练后的学生模型的预测准确度较高。在其他实施例中,训练样本也可以是少量的,甚至只有一个训练样本。
32.在对学生模型进行迭代训练中,无论训练样本是海量的,还是少量的,一个训练样本是可以被重复使用。由于教师模型是已经训练完成的,所以,在同一个训练样本下,该教师模型的logit值是相同的;即,当该教师模型接收同一个训练样本中的样本输入后,该教师模型的logit层输出的logit值是相同的。因此,如果该训练样本在迭代训练中被重复用到,没有必要每次都重新计算该训练样本下该教师模型的logit值。具体的,如果该训练样本首次被选择用于训练,那么,向该教师模型输入该训练样本的样本输入,以得到该教师模型的logit值,并将该教师模型的logit值保存在预设的存储单元;若该训练样本非首次被选择,从该存储单元获取该教师模型的logit值。其中,存储单元中可以保存训练样本的识别标识与教师模型的logit值的对应关系;这样,当该训练样本被选择时,可以根据该训练样本的标识从存储单元中获取对应的教师模型的logit值。训练样本的标识例如可以是训练样本的样本编号。由于从存储单元直接获取教师模型的logit值显然比通过教师模型得到教师模型的logit值的数据处理量更小、速度更快,因此,在训练样本需要重复使用的情况下,将首次计算出的该训练样本下的教师模型的logit值存储起来以便后续使用时直接获取,能够减轻模型训练负担、且提高模型训练速度。
33.在一个实施例中,电子设备在执行对学生模型进行训练的步骤中,可以先将各个训练样本中的样本输入分别输入教师模型,得到各个训练样本下教师模型的logit值;并将各个训练样本下教师模型的logit值存储到存储单元中,即存储单元中可以保存训练样本的识别标识与教师模型的logit值的对应关系。后续学生模型在基于某个训练样本进行训练时,当需要使用该训练样本下的教师模型的logit值来进行第二损失函数的计算时,可以根据该训练样本的标识直接从该存储单元中获取对应的教师模型的logit值。
34.在一个实施例中,第一损失函数和第二损失函数的融合方式为加权融合;即,预先为第一损失函数和第二损失函数分配权重,学生模型的损失函数为:第一损失函数和第二损失函数分别与各自的权重相乘后的和。第一损失函数和第二损失函数的权重可以根据实际情况设定,比如,可以选取使得训练后的学生模型的预测准确度较高的第一损失函数和第二损失函数的权重。优选的,第二损失函数的权重大于第一损失函数的权重;即,对学生模型的训练,可以更偏重于基于软目标的训练。这样,教师模型对学生模型能够产生较大的影响,从而使得训练好的学生模型的泛化能力更好。
35.在一个实施例中,第一损失函数为交叉熵损失函数,第二损失函数为平方差损失函数。在其他实施例中,第一损失函数可以是负对数似然损失函数,第二损失函数可以是kl散度损失函数。
36.以下为本技术的模型压缩方法的一个完整示例。
37.教师模型由3种类型的复杂模型融合得到,3种类型的复杂模型分别是:bert-wwm-ext模型、ernie-1.0模型、roberta-large-pair模型;k为10,即基于10折交叉验证训练每种类型的复杂模型。训练数据包括多个训练样本,可以将训练数据分成10份,每份训练数据包括若干个训练样本。轮流组合这10份训练数据,将10份训练数据中的9份训练数据用于模型训练,另外1份训练数据用于模型测试;因此可以组合出10组数据,每组数据包括9份训练数据和一份测试测试。
38.利用该10组数据分别对bert-wwm-ext模型进行训练,可以得到训练完成的内部参数值不同的10个bert-wwm-ext模型。利用该10组数据分别对ernie-1.0模型进行训练,可以
得到训练完成的内部参数值不同的10个ernie-1.0模型;利用该10组数据分别对roberta-large-pair模型进行训练,可以得到训练完成的内部参数值不同的10个roberta-large-pair模型。
39.对该3种类型的复杂模型进行融合。具体的,首先,将bert-wwm-ext这种模型的10个bert-wwm-ext模型的10个logit层输出的10个logit值相加后求平均,作为bert-wwm-ext这类模型的logit层输出的logit值,记作第一logit值;将10个bernie-1.0模型的10个logit层输出的10个logit值相加后取平均,作为ernie-1.0这类模型的logit层输出的logit值,记作第二logit值;将10个roberta-large-pair模型的10个logit层输出的10个logit值相加后取平均,作为roberta-large-pair这类模型的logit层输出的logit值,记作第三logit值。其次,将该第一logit值、该第二logit值、该第三logit值相加后去平均,作为教师模型的logit层输出的logit值。由此,该3种类型的复杂模型融合得到教师模型。
40.接下来是对学生模型进行训练,该学生模型例如是siagru模型,第一损失函数是交叉熵损失函数,第二损失函数是平方差损失函数。用于训练学生模型的训练数据,可以与上述训练复杂模型的训练数据相同,即采用该训练数据包括的多个训练样本来对进行训练。具体如下。
41.先用第1个训练样本来对该学生模型进行训练;其中,每个训练样本包括样本输入和样本输出。
42.首先,将第1份训练样本的样本输入输入到该学生模型后,该学生模型输出一个预测值、该学生模型的logit层输出一个logit值,记作:在第1份训练样本下,该学生模型的预测值、该学生模型的logit值;将第1份训练样本输入训练完成的教师模型中,该教师模型的logit层输出一个logit值,记作,在第1份训练样本下,该教室模型的logit值。
43.其次,根据该学生模型的预测值和真实值(即训练样本的样本输出)来计算交叉熵损失函数的函数值,并利用该学生模型的logit值和该教师模型的logit值计算平方差损失函数的函数值;并将该交叉熵损失函数的函数值和该平方差损失函数的函数值进行加权融合,得到该学生模型的损失函数的函数值;如果在该第1个训练样本下,该学生模型的损失函数的函数值不满足预设要求,那么,再用第2个训练样本对该学生模型进行训练;如果在第2个训练样本下,该学生模型的损失函数的函数值不满足预设要求,再用第3个训练样本对该学生模型进行训练,依次类推,直至在某一个训练样本下,该学生模型的损失函数的函数值满足预设要求为止。其中,用各个训练样本对该学生模型进行训练的过程均相同,即与上述第1个训练样本对该学生模型进行训练的过程类似,此处不再赘述。这里提到的损失函数的函数值满足预设要求,例如为,损失函数的函数值大于或等于预设值。
44.上面各种方法的步骤划分,只是为了描述清楚,实现时可以合并为一个步骤或者对某些步骤进行拆分,分解为多个步骤,只要包括相同的逻辑关系,都在本专利的保护范围内;对算法中或者流程中添加无关紧要的修改或者引入无关紧要的设计,但不改变其算法和流程的核心设计都在该专利的保护范围内。
45.本发明实施例还涉及一种模型压缩系统,如图3所示。该模型压缩系统包括:复杂模型训练单元301、教师模型获取单元302、学生模型训练单元303。
46.复杂模型训练单元301用于提供训练好的n种类型的复杂模型;n为大于或等于2的整数。
47.教师模型获取单元302用于对n种类型的复杂模型进行融合,得到训练好的教师模型;
48.学生模型训练单元303用于基于训练样本、教师模型以及学生模型的损失函数,对学生模型进行训练;学生模型的损失函数由第一损失函数和第二损失函数融合得到,第一损失函数用于计算学生模型的预测值与真实值的损失,第二损失函数用于计算学生模型的logit值与教师模型的logit值的损失。
49.其中,训练样本包含样本输入和样本输出,学生模型在接收样本输入后输出预测值且学生模型中的logit层输出logit值,真实值为样本输出;教师模型在接收样本输入后,教师模型中的logit层输出所述logit值。
50.在一个实施例中,每种类型的复杂模型基于k折交叉验证训练得到,训练好的所述每种类型的复杂模型包括训练好的属于该种类型的k个复杂模型;k为大于或等于2的整数。
51.对n种类型的复杂模型进行融合,得到训练好的教师模型,包括:对于每种类型的复杂模型,将k个复杂模型的k个logit层进行融合,得到每种类型的复杂模型的logit层;将n种类型的复杂模型的n个logit层进行融合,作为教师模型的logit层。
52.在一个实施例中,对于每种类型的复杂模型,将k个复杂模型的k个logit层进行融合,得到每种类型的复杂模型的logit层,包括:对于每种类型的复杂模型,将k个复杂模型的k个logit层输出的k个logit值相加后取平均,作为每种类型的复杂模型的logit层输出的logit值。将n种类型的复杂模型的n个logit层进行融合,作为教师模型的logit层,包括:将n种类型的复杂模型的n个logit层输出的n个logit值相加后取平均,作为教师模型的logit层输出的logit值。
53.在一个实施例中,在对学生模型的训练中,若训练样本首次被选择,向教师模型输入样本输入后,得到教师模型的logit值,并将教师模型的logit值保存在预设的存储单元;若训练样本非首次被选择,从存储单元获取教师模型的logit值。
54.在一个实施例中,第一损失函数和第二损失函数的融合方式为加权融合,且第二损失函数的权重大于第一损失函数的权重。
55.在一个实施例中,第一损失函数为交叉熵损失函数,第二损失函数为平方差损失函数。
56.在一个实施例中,学生模型为siagru模型;和/或,n的数量为三,且三种类型的复杂模型分别是:bert-wwm-ext模型、ernie-1.0模型、roberta-large-pair模型;所述学生模型是siagru模型。
57.不难发现,模型压缩系统的实施例与上述模型压缩方法的实施例是相对应的实施例,上述模型压缩方法的实施例中提到的相关技术细节在模型压缩系统的实施例中依然有效,为了减少重复,这里不再赘述。相应地,模型压缩系统的实施例中提到的相关技术细节也可应用在上述模型压缩方法的实施例中。
58.值得一提的是,模型压缩系统的实施例中所涉及到的各模块均为逻辑模块,在实际应用中,一个逻辑单元可以是一个物理单元,也可以是一个物理单元的一部分,还可以以多个物理单元的组合实现。此外,为了突出本发明的创新部分,本实施例中并没有将与解决本发明所提出的技术问题关系不太密切的单元引入,但这并不表明本实施例中不存在其它的单元。
59.本发明实施例还涉及一种电子设备,如图4所示,包括:
60.至少一个处理器401;以及,
61.与所述至少一个处理器401通信连接的存储器402;其中,
62.所述存储器402存储有可被所述至少一个处理器401执行的指401令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器401能够执行上述模型压缩方法。
63.其中,存储器和处理器采用总线方式连接,总线可以包括任意数量的互联的总线和桥,总线将一个或多个处理器和存储器的各种电路连接在一起。总线还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路连接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口在总线和收发机之间提供接口。收发机可以是一个元件,也可以是多个元件,比如多个接收器和发送器,提供用于在传输介质上与各种其他装置通信的单元。经处理器处理的数据通过天线在无线介质上进行传输,进一步,天线还接收数据并将数据传送给处理器。
64.处理器负责管理总线和通常的处理,还可以提供各种功能,包括定时,外围接口,电压调节、电源管理以及其他控制功能。而存储器可以被用于存储处理器在执行操作时所使用的数据。
65.本发明实施例还涉及一种计算机可读存储介质,存储有计算机程序。计算机程序被处理器执行时实现上述方法实施例。
66.即,本领域技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
67.本领域的普通技术人员可以理解,上述各实施例是实现本发明的具体实施例,而在实际应用中,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1