一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种字词多粒度混合的中文语言模型预训练方法与流程

2023-01-14 15:10:05 来源:中国专利 TAG:


1.本发明属于计算机自然语言处理技术领域,具体涉及一种字词多粒度混合的中文语言模型预训练方法。


背景技术:

2.中文领域的预训练模型大多是基于字粒度构建词表,故而常用的预训练任务是基于字粒度构建,常见的模型包括:自回归语言模型(lm)、掩码语言模型(maskedlanguagemodel,mlm)、seq2seqmlm(序列到序列模型)、排列语言模型(plm)、nextsentenceprediction(下一句预测模型,nsp)、sentenceorderprediction(句子顺序预测模型,sop)等。以上各种预训练任务更多的是从英文模型构建中直接继承过来,因此,通常是基于字级别进行的。基于字的预训练任务的缺点主要有:
3.一,使用字的预训练任务,无法有效引入词信息,而汉语中词信息往往比单字表意更加丰富;
4.二,使用单字会增加序列长度,而bert等预训练模型的计算复杂度为o(n^2),其中的n就是序列长度,受计算时间的限制无法有效处理过长的序列,导致长序列性能出现瓶颈。另外,由于使用单字时的序列较长,导致模型计算时间增加,降低预训练任务的效率。


技术实现要素:

5.针对现有技术存在的缺陷,本发明提供一种字词多粒度混合的中文语言模型预训练方法,可有效解决上述问题。
6.本发明采用的技术方案如下:
7.本发明提供一种字词多粒度混合的中文语言模型预训练方法,包括以下步骤:
8.步骤1,对输入的文本text进行字粒度切分,得到字序列seq_char_1;其中,字序列seq_char_1包括n个按序排列的字,分别表示为:字char1,字char2,

,字charn;
9.对输入的文本text进行词粒度切分,得到词序列seq_word_1;其中,词序列seq_word_1包括m个按序排列的词,分别表示为:词word1,词word2,

,词wordm;
10.步骤2,在词序列seq_word_1中,随机选择词wordi进行屏蔽,其中,i=1,2,

,m,得到屏蔽后的词序列,表示为:词序列seq_word_2;
11.假设词wordi一共包括k个字;
12.在字序列seq_char_1中,将词wordi分字后对应的k个字进行屏蔽,得到屏蔽后的字序列,表示为:字序列seq_char_2;
13.步骤3,将字序列seq_char_2中每个字进行向量化,得到字向量embbeding_char;字序列seq_char_2中各个字的字向量embbeding_char,组成字序列seq_char_2的字向量组合;
14.将词序列seq_word_2中每个词进行向量化,得到词向量embbeding_word;词序列seq_word_2中各个词的词向量embbeding_word,组成词序列seq_word_2的词向量组合;
15.步骤4,采用编码器,对字向量组合的每个字向量embbeding_char进行编码,得到字编码向量v
char
;字向量组合的所有字编码向量v
char
,组成字编码向量矩阵 v
char

16.采用编码器,对词向量组合的每个词向量embbeding_word进行编码,得到词编码向量v
word
;词向量组合的所有词编码向量v
word
,组成词编码向量矩阵v
word

17.步骤5,将字编码向量矩阵v
char
和词编码向量矩阵v
word
输入到预训练任务层,采用以下方法,计算得到总损失函数loss


18.步骤5.1,预训练任务层包括字级别任务、词级别任务、字序列向量预测被屏蔽的词任务和词序列向量预测被屏蔽的字任务;
19.步骤5.2,通过字级别任务,采用以下公式,得到第一损失函数loss1(x,θ):
[0020][0021]
其中:
[0022]
p(xa|v
char
)含义为:在字编码向量矩阵v
char
中,读出某个被预测的屏蔽字xa的向量,使读出的屏蔽字xa的向量与字典矩阵作乘法,得到概率矩阵;在该概率矩阵中,得到概率值最大值,即为p(xa|v
char
);其中,字典矩阵为字典中每个字的字向量emb_char形成的矩阵;
[0023]-log p(xa|v
char
):代表交叉熵计算,即:使用标准的交叉熵对p(xa|v
char
)进行计算,得到屏蔽字xa的损失值;
[0024]
e():代表求平均计算;
[0025]
具体含义为:对于k个屏蔽字,每个屏蔽字预测得到一个损失值;然后,对 k个屏蔽字的损失值求和,再除以k,得到平均损失值;
[0026]
步骤5.3,通过词级别任务,采用以下公式,得到第二损失函数loss2(x,θ):
[0027][0028]
其中:
[0029]
p(xb|v
word
)含义为:在词编码向量矩阵v
word
中,读出某个被预测的屏蔽词xb的向量,使读出的屏蔽词xb的向量与词典矩阵作乘法,得到概率矩阵;在该概率矩阵中,得到概率值最大值,即为p(xb|v
word
);其中,词典矩阵为词典中每个词的向量emb_word形成的矩阵;g为词序列中被屏蔽的词的数量;
[0030]-log p(xb|v
word
):代表交叉熵计算,即:使用标准的交叉熵对p(xb|v
word
) 进行计算,得到屏蔽词xb的损失值;
[0031]
步骤5.4,通过字序列向量预测被屏蔽的词任务,采用以下公式,得到第三损失函数loss3(x,θ):
[0032][0033]
其含义为:
[0034]
在词序列中具有g个屏蔽词;对于每个被预测的屏蔽词xb,采用以下方法,得到其
上下文向量:
[0035]
假设屏蔽词xb包括r个屏蔽字;
[0036]
在字编码向量矩阵v char
中,定位到连续的屏蔽词xb包括的r个屏蔽字,表示为:字char
m1
,字char
m2
,

字char
mr
;字char
m1
前面最近的字记为c
b0
,字char
mr
后面最近的字记为c
b1
;字c
b0
的字向量和字c
b1
的字向量进行concat拼接操作,得到屏蔽词xb的上下文向量,即:
[0037]
含义为:使屏蔽词xb的上下文向量与词典矩阵作乘法,得到概率矩阵;在该概率矩阵中,得到概率值最大值,即为
[0038]
使用标准的交叉熵对进行计算,得到屏蔽词xb的损失值;
[0039]
步骤5.5,通过词序列向量预测被屏蔽的字任务,采用以下公式,得到第四损失函数loss4(x,θ):
[0040][0041]
其含义为:
[0042]
在词序列中具有g个屏蔽词;每个屏蔽词对应字序列中的g组连续的屏蔽字;
[0043]
对于字序列中第c组连续的屏蔽字xc,采用以下方法,得到其上下文向量:
[0044]
在词编码向量矩阵v
word
中,定位到第c组连续的屏蔽字xc对应的1个屏蔽词,该屏蔽词前面最近的词的词向量为该屏蔽词后面最近的词的词向量为将词向量和词向量进行concat拼接操作,得到第c组连续的屏蔽字xc的上下文向量,即:
[0045]
含义为:对进行线性变换,得到线性变换后的向量;
[0046]
含义为:使用序列到序列seq2seq模型,包括编码端和解码端;在编码端输入线性变换后的向量;在解码端输出预测到的第c组连续的屏蔽字xc以及第c组连续的屏蔽字xc的预测概率值;
[0047]
使用标准的交叉熵对进行计算,得到第c组连续的屏蔽字xc的损失值;
[0048]
对第一损失函数loss1、第二损失函数loss2、第三损失函数loss3和第四损失函数loss4进行加权平均,得到总损失函数loss


[0049]
步骤6,判断训练是否达到最大迭代次数,如果否,则根据总损失函数loss

得到梯
度,对模型参数θ进行反传和参数更新,返回步骤4;如果是,则停止训练,得到预训练完成的语言模型。
[0050]
优选的,步骤2中,词wordi进行屏蔽,具体方法为:
[0051]
在词序列seq_word_1中,使用屏蔽符号[mask]替换词wordi,得到屏蔽后的词序列seq_word_2。
[0052]
优选的,步骤2中,对k个字进行屏蔽,具体方法为:
[0053]
在字序列seq_char_1中,对于k个字中的每一个字,均使用屏蔽符号[mask] 替换,得到屏蔽后的字序列seq_char_2。
[0054]
优选的,步骤3中,将字序列seq_char_2中每个字进行向量化,得到字向量 embbeding_char,具体为:
[0055]
对于字序列seq_char_2中每个字,其字向量embbeding_char包括三个部分,分别为:字向量emb_char、字位置向量emb_pos_char和字所在的文本text的类型向量emb_type;
[0056]
其中:
[0057]
字向量emb_char:字典记录每个字以及该字的字向量,通过查询字典,得到字向量emb_char;
[0058]
字位置向量emb_pos_char:指字在字序列seq_char_2中的位置所对应的向量,通过查询位置信息向量表emb_pos获得;
[0059]
字所在的文本text的类型向量emb_type:指文本text的类型所对应的向量。
[0060]
优选的,步骤3中,将词序列seq_word_2中每个词进行向量化,得到词向量 embbeding_word,具体为:
[0061]
对于词序列seq_word_2中每个词,其词向量embbeding_word包括三个部分,分别为:词向量emb_word、词位置向量emb_pos_word和词所在的文本text的类型向量emb_type;
[0062]
其中:
[0063]
词向量emb_word:词典记录每个词以及该词的词向量,通过查询词典,得到词向量emb_word;
[0064]
词位置向量emb_pos_word:指词在词序列seq_word_2中的位置所对应的向量,通过查询位置信息向量表emb_pos获得;
[0065]
词所在的文本text的类型向量emb_type:指文本text的类型所对应的向量。
[0066]
优选的,步骤3中,在对字序列seq_char_2中每个字进行向量化时,对于字序列seq_char_2中的每个屏蔽字,同样进行向量化;
[0067]
在对词序列seq_word_2中每个词进行向量化时,对于词序列seq_word_2中的每个屏蔽词,同样进行向量化。
[0068]
本发明提供的一种字词多粒度混合的中文语言模型预训练方法具有以下优点:
[0069]
本发明结合字和词两种粒度,提出包含字和词的新的中文语言模型预训练任务,通过将二者融合提升预训练模型效果。
附图说明
[0070]
图1为本发明提供的一种字词多粒度混合的中文语言模型预训练方法的流程示意图。
具体实施方式
[0071]
为了使本发明所解决的技术问题、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
[0072]
由于中文与英文有一个先天不同,就是中文在字的基础上还有一层词的表意单元,而且往往词比单字可以表达出更多的语义内容。本发明结合字和词两种粒度,提出包含字和词的新的中文语言模型预训练任务,通过将二者融合提升预训练模型效果。
[0073]
参考图1,本发明提供的字词多粒度混合的中文语言模型预训练方法,包括以下步骤:
[0074]
步骤1,对输入的文本text进行字粒度切分,得到字序列seq_char_1;其中,字序列seq_char_1包括n个按序排列的字,分别表示为:字char1,字char2,

,字charn;
[0075]
对输入的文本text进行词粒度切分,得到词序列seq_word_1;其中,词序列 seq_word_1包括m个按序排列的词,分别表示为:词word1,词word2,

,词wordm;
[0076]
例如,输入的文本text为:“我爱历史博物馆”,分别进行字粒度的切分和词粒度的切分,得到的字序列seq_char_1为:“我爱历史博物馆”,共包括7 个字;得到的词序列seq_word_1为:“我爱历史博物馆”,共包括四个词,分别为:我,爱,历史,博物馆。
[0077]
步骤2,在词序列seq_word_1中,随机选择词wordi进行屏蔽,其中,i=1,2,

,m, 得到屏蔽后的词序列,表示为:词序列seq_word_2;
[0078]
对词wordi进行屏蔽,具体方法为:在词序列seq_word_1中,使用屏蔽符号 [mask]替换词wordi,得到屏蔽后的词序列seq_word_2。
[0079]
假设词wordi一共包括k个字;
[0080]
在字序列seq_char_1中,将词wordi分字后对应的k个字进行屏蔽,得到屏蔽后的字序列,表示为:字序列seq_char_2;
[0081]
其中,对k个字进行屏蔽,具体方法为:在字序列seq_char_1中,对于k个字中的每一个字,均使用屏蔽符号[mask]替换,得到屏蔽后的字序列seq_char_2。
[0082]
例如,仍然以“我爱历史博物馆”为例,在词序列seq_word_1:“我爱历史博物馆”中,选择“历史”这个词进行屏蔽,得到屏蔽后的词序列seq_word_2 为:“我爱[mask]博物馆”,包括4个词,其中具有一个屏蔽词[mask]。在字序列seq_char_1:“我爱历史博物馆”中,进行屏蔽处理后,得到屏蔽后的字序列seq_char_2为:“我爱[mask][mask]博物馆”,包括7个字,其中具有2个屏蔽字[mask]。
[0083]
步骤3,将字序列seq_char_2中每个字进行向量化,得到字向量embbeding_char;字序列seq_char_2中各个字的字向量embbeding_char,组成字序列seq_char_2的字向量组合;
[0084]
具体方法为:对于字序列seq_char_2中每个字,其字向量embbeding_char包括三个部分,分别为:字向量emb_char、字位置向量emb_pos_char和字所在的文本text的类型向量emb_type;
[0085]
其中:
[0086]
字向量emb_char:字典记录每个字以及该字的字向量,通过查询字典,得到字向量emb_char;
[0087]
字位置向量emb_pos_char:指字在字序列seq_char_2中的位置所对应的向量,通过查询位置信息向量表emb_pos获得;
[0088]
字所在的文本text的类型向量emb_type:指文本text的类型所对应的向量。
[0089]
将词序列seq_word_2中每个词进行向量化,得到词向量embbeding_word;词序列seq_word_2中各个词的词向量embbeding_word,组成词序列seq_word_2 的词向量组合;
[0090]
具体为:
[0091]
对于词序列seq_word_2中每个词,其词向量embbeding_word包括三个部分,分别为:词向量emb_word、词位置向量emb_pos_word和词所在的文本text的类型向量emb_type;
[0092]
其中:
[0093]
词向量emb_word:词典记录每个词以及该词的词向量,通过查询词典,得到词向量emb_word;
[0094]
词位置向量emb_pos_word:指词在词序列seq_word_2中的位置所对应的向量,通过查询位置信息向量表emb_pos获得;
[0095]
词所在的文本text的类型向量emb_type:指文本text的类型所对应的向量。
[0096]
本步骤中,在对字序列seq_char_2中每个字进行向量化时,对于字序列 seq_char_2中的每个屏蔽字,同样进行向量化;
[0097]
对字序列seq_char_2中每个字进行向量化时,对于字序列seq_char_2中的每个屏蔽字,同样进行向量化;
[0098]
例如,对于字序列seq_char_2:“我爱[mask][mask]博物馆”,包括7 个字,每个字进行向量化,得到字向量embbeding_char;
[0099]
对于词序列seq_word_2:“我爱[mask]博物馆”,包括4个词,每个词进行向量化,得到词向量embbeding_word。对于词“我”,其词向量emb_word通过查词典获得;词位置向量emb_pos_word为1;对于词“[mask]”,其词向量 emb_word通过查词典获得;词位置向量emb_pos_word为3。对于“我爱[mask] 博物馆”中的4个词,其词所在的文本text的类型向量emb_type均相同,例如,如果语料是问答预料,且第一句是问题,第二句是答案,那么词所在的文本text的类型向量emb_type有两类,一是代表问题,一是代表答案。
[0100]
本发明中,所有向量纬度相同,且随机初始化。
[0101]
对于字序列seq_char_2:“我爱[mask][mask]博物馆”,其字序列 seq_char_2的字向量组合为:
[0102]
embbeding_char(我)=emb_char(我) emb_pos(1) emb_type(0)
[0103]
embbeding_char(爱)=emb_char(爱) emb_pos(2) emb_type(0)
[0104]
embbeding_char([mask])=emb_char([mask]) emb_pos(3) emb_type(0)
[0105]
embbeding_char([mask])=emb_char([mask]) emb_pos(4) emb_type(0)
[0106]
embbeding_char(天)=emb_char(天) emb_pos(5) emb_type(0)
[0107]
embbeding_char(安)=emb_char(安) emb_pos(6) emb_type(0)
[0108]
embbeding_char(门)=emb_char(门) emb_pos(7) emb_type(0)
[0109]
对于词序列seq_word_2:“我爱[mask]博物馆”,其词序列seq_word_2 的词向量组合为:
[0110]
embbeding_word(我)=emb_word(我) emb_pos(1) emb_type(0)
[0111]
embbeding_word(爱)=emb_word(爱) emb_pos(2) emb_type(0)
[0112]
embbeding_word([mask])
[0113]
=emb_word([mask]) emb_pos(3) emb_type(0)
[0114]
embbeding_word(博物馆)
[0115]
=emb_word(博物馆) emb_pos(4) emb_type(0)
[0116]
步骤4,采用编码器,对字向量组合的每个字向量embbeding_char进行编码,得到字编码向量v
char
;字向量组合的所有字编码向量v
char
,组成字编码向量矩阵 v
char

[0117]
采用编码器,对词向量组合的每个词向量embbeding_word进行编码,得到词编码向量v
word
;词向量组合的所有词编码向量v
word
,组成词编码向量矩阵v
word

[0118]
作为一种具体实现方式,编码器可采用transformer的encoder部分,用于进行编码。
[0119]
步骤5,将字编码向量矩阵v
char
和词编码向量矩阵v
word
输入到预训练任务层,采用以下方法,计算得到总损失函数loss


[0120]
步骤5.1,预训练任务层包括字级别任务、词级别任务、字序列向量预测被屏蔽的词任务和词序列向量预测被屏蔽的字任务;
[0121]
步骤5.2,通过字级别任务,采用以下公式,得到第一损失函数loss1(x,θ):
[0122][0123]
其中:
[0124]
p(xa|v
char
)含义为:在字编码向量矩阵v
char
中,读出某个被预测的屏蔽字xa的向量,使读出的屏蔽字xa的向量与字典矩阵作乘法,得到概率矩阵;在该概率矩阵中,得到概率值最大值,即为p(xa|v
char
);其中,字典矩阵为字典中每个字的字向量emb_char形成的矩阵;
[0125]-log p(xa|v
char
):代表交叉熵计算,即:使用标准的交叉熵对p(xa|v
char
)进行计算,得到屏蔽字xa的损失值;
[0126]
e():代表求平均计算;
[0127]
具体含义为:对于k个屏蔽字,每个屏蔽字预测得到一个损失值;然后,对 k个屏蔽字的损失值求和,再除以k,得到平均损失值;
[0128]
步骤5.3,通过词级别任务,采用以下公式,得到第二损失函数loss2(x,θ):
[0129][0130]
其中:
[0131]
p(xb|v
word
)含义为:在词编码向量矩阵v
word
中,读出某个被预测的屏蔽词xb的向量,使读出的屏蔽词xb的向量与词典矩阵作乘法,得到概率矩阵;在该概率矩阵中,得到概率值最大值,即为p(xb|v
word
);其中,词典矩阵为词典中每个词的向量emb_word形成的矩阵;g为词序列中被屏蔽的词的数量;
[0132]-log p(xb|v
word
):代表交叉熵计算,即:使用标准的交叉熵对p(xb|v
word
) 进行计算,得到屏蔽词xb的损失值;
[0133]
步骤5.4,通过字序列向量预测被屏蔽的词任务,采用以下公式,得到第三损失函数loss3(x,θ):
[0134][0135]
其含义为:
[0136]
在词序列中具有g个屏蔽词;对于每个被预测的屏蔽词xb,采用以下方法,得到其上下文向量:
[0137]
假设屏蔽词xb包括r个屏蔽字;
[0138]
在字编码向量矩阵v
char
中,定位到连续的屏蔽词xb包括的r个屏蔽字,表示为:字char
m1
,字char
m2
,

字char
mr
;字char
m1
前面最近的字记为c
b0
,字char
mr
后面最近的字记为c
b1
;字c
b0
的字向量和字c
b1
的字向量进行concat拼接操作,得到屏蔽词xb的上下文向量,即:
[0139]
含义为:使屏蔽词xb的上下文向量与词典矩阵作乘法,得到概率矩阵;在该概率矩阵中,得到概率值最大值,即为
[0140]
使用标准的交叉熵对进行计算,得到屏蔽词xb的损失值;
[0141]
步骤5.5,通过词序列向量预测被屏蔽的字任务,采用以下公式,得到第四损失函数loss4(x,θ):
[0142][0143]
其含义为:
[0144]
在词序列中具有g个屏蔽词;每个屏蔽词对应字序列中的g组连续的屏蔽字;
[0145]
对于字序列中第c组连续的屏蔽字xc,采用以下方法,得到其上下文向量:
[0146]
在词编码向量矩阵v
word
中,定位到第c组连续的屏蔽字xc对应的1个屏蔽词,该屏蔽词前面最近的词的词向量为该屏蔽词后面最近的词的词向量为将词向量和词向量进行concat拼接操作,得到第c组连续的屏蔽字xc的上下文向量,即:
[0147]
含义为:对进行线性变换,得到线性变换后的向量;
[0148]
含义为:使用序列到序列seq2seq模型,包括编码端和解码端;在编码端输入线性变换后的向量;在解码端输出预测到的第c组连续的
屏蔽字xc以及第c组连续的屏蔽字xc的预测概率值;
[0149]
使用标准的交叉熵对进行计算,得到第c组连续的屏蔽字xc的损失值;
[0150]
对第一损失函数loss1、第二损失函数loss2、第三损失函数loss3和第四损失函数loss4进行加权平均,得到总损失函数loss


[0151]
步骤6,判断训练是否达到最大迭代次数,如果否,则根据总损失函数loss

得到梯度,对模型参数θ进行反传和参数更新,返回步骤4;如果是,则停止训练,得到预训练完成的语言模型。
[0152]
下面介绍一个具体实施例:
[0153]
本发明在预训练阶段有三部分组成,第一部分是embbeding层,包括字向量,词向量,位置向量,句子类型向量。第二部分是encoder模型,具体可以为 transformer的encoder部分。第三部分是预训练任务层,包括1)字级别mlm任务 (本发明中,屏蔽的字采用whole word mask方式,即被屏蔽的字必须属于一个词),2)词级别mlm任务,3)字序列向量预测被屏蔽的词,4)词序列向量预测被屏蔽的字。
[0154]
(一)embedding层
[0155]
embbeding层包括字向量,词向量,位置向量,句子类型向量,也就是说一个输入序列(一句输入的文本)按照字和词两种粒度分别做两次切分,得到两个序列,后面使用这两个序列训练同一个encoder模型。
[0156]
(二)encoding层
[0157]
本层使用transformer的encoding模型进行编码
[0158]
(三)预训练任务层
[0159]
本层中包含四个预训练任务,分别为:
[0160]
(1)字级别mlm任务
[0161]
屏蔽字序列中的某个字,然后在预训练中基于上下文,预测被屏蔽的字,这里面屏蔽的字采用whole word mask方式,即被屏蔽的如果是多个字,则字必须是连续的,且必须属于一个词,如果是单个字则无限制。
[0162]
(2)词级别mlm任务
[0163]
与字级别的mlm任务类似,区别仅在于被屏蔽的单元变成某些词,而且被屏蔽的词,其在第一步提到的字序列中对应的位置也被屏蔽。
[0164]
(3)字序列向量预测被屏蔽的词
[0165]
在词序列中,对于某个被屏蔽的词m,在字序列中其对应的字m1,m2,
…ꢀ
mk也被屏蔽(k为词m中的字数),则在字序列中,使用m1前面最近的字,和mk 后面最近的字组成上下文,对词序列中被屏蔽的词进行预测。
[0166]
(4)词序列向量预测被屏蔽的字
[0167]
在字序列中,有连续的字m1,m2,

mk被屏蔽,同时在词序列中m1,m2,
…ꢀ
mk属于词m,词m在词序列中也被屏蔽。
[0168]
则:在词序列中,使用m前面的最近的词mh和后面最近的词mt对应的向量组成上下文,对字序列中被屏蔽的字m1,m2

mk进行预测。
[0169]
由于m1,m2

mk具体包含字的个数是未知的,所以使用seq2seq的方式(生成式)预测m1,m2

mk,在seq2seq的encoder端输入mh和mt的词向量,在decoder 端预测m1,m2

mk。
[0170]
最后的损失函数是四个任务的loss相加。
[0171]
本发明通过使用字和词混合的预训练方式,将字序列和词序列的信息融合到一个编码器中,提升预训练效果。
[0172]
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献