NLP學(xué)習(xí)(3)

學(xué)習(xí)Attention機(jī)制

1、什么是Attention?

注意力機(jī)制和人類視覺(jué)的注意力類似,比如人們看某張圖片或者關(guān)注某件事情的時(shí)候,不會(huì)每一個(gè)場(chǎng)景都看,而是會(huì)對(duì)某一個(gè)目標(biāo)區(qū)域,也就是注意力焦點(diǎn),投入更多的注意力資源,以獲取更多的目標(biāo)資源信息,從而抑制無(wú)用信息。

2、Attention的起源

最早應(yīng)用在視覺(jué)圖像領(lǐng)域,在九幾年就提出來(lái)了,真正火起來(lái)的是在2014年 google mind團(tuán)隊(duì)的這篇論文《Recurrent Models of Visual Attention》,在RNN模型上使用Attention機(jī)制來(lái)進(jìn)行圖片分類,之后第一次應(yīng)用在NLP領(lǐng)域的是Bahdanau等人在論文《Neural Machine Translation by Jointly Learning to Align and Translate》,使用類似Attention機(jī)制在機(jī)器翻譯上將翻譯和對(duì)齊同時(shí)進(jìn)行,然后CNN中使用Attention成為研究熱點(diǎn),《ABCNN: Attention-Based Convolutional Neural Network for Modeling Sentence Pairs》這篇論文是CNN中使用Attention比較早的探索,之后在2017年,由Google機(jī)器翻譯團(tuán)隊(duì)在arxiv預(yù)發(fā)的《Attention is all you need》中大量使用Self-Attention,自此以后,自注意力機(jī)制成為研究熱點(diǎn)。

3、Encoder-Decoder框架

目前大多數(shù)注意力模型附著在Encoder-Decoder框架下,其實(shí)注意力模型可以看作一種通用的思想,本身并不依賴于特定框架,這點(diǎn)需要注意。Encoder-Decoder框架可以看作是一種深度學(xué)習(xí)領(lǐng)域的研究模式,應(yīng)用場(chǎng)景異常廣泛。下圖是文本處理領(lǐng)域里常用的Encoder-Decoder框架最抽象的一種表示。

文本處理領(lǐng)域的Encoder-Decoder框架可以這么直觀地去理解:可以把它看作適合處理由一個(gè)句子(或篇章)生成另外一個(gè)句子(或篇章)的通用處理模型。對(duì)于句子對(duì)<Source,Target>,我們的目標(biāo)是給定輸入句子Source,期待通過(guò)Encoder-Decoder框架來(lái)生成目標(biāo)句子Target。Source和Target可以是同一種語(yǔ)言,也可以是兩種不同的語(yǔ)言。而Source和Target分別由各自的單詞序列構(gòu)成:

Encoder顧名思義就是對(duì)輸入句子Source進(jìn)行編碼,將輸入句子通過(guò)非線性變換轉(zhuǎn)化為中間語(yǔ)義表示C:

對(duì)于解碼器Decoder來(lái)說(shuō),其任務(wù)是根據(jù)句子Source的中間語(yǔ)義表示C和之前已經(jīng)生成的歷史信息來(lái)生成i時(shí)刻要生成的單詞:

每個(gè)yi都依次這么產(chǎn)生,那么看起來(lái)就是整個(gè)系統(tǒng)根據(jù)輸入句子Source生成了目標(biāo)句子Target。如果Source是中文句子,Target是英文句子,那么這就是解決機(jī)器翻譯問(wèn)題的Encoder-Decoder框架;如果Source是一篇文章,Target是概括性的幾句描述語(yǔ)句,那么這是文本摘要的Encoder-Decoder框架;如果Source是一句問(wèn)句,Target是一句回答,那么這是問(wèn)答系統(tǒng)或者對(duì)話機(jī)器人的Encoder-Decoder框架。由此可見(jiàn),在文本處理領(lǐng)域,Encoder-Decoder的應(yīng)用領(lǐng)域相當(dāng)廣泛。

Encoder-Decoder框架不僅僅在文本領(lǐng)域廣泛使用,在語(yǔ)音識(shí)別、圖像處理等領(lǐng)域也經(jīng)常使用。比如對(duì)于語(yǔ)音識(shí)別來(lái)說(shuō),上圖所示的框架完全適用,區(qū)別無(wú)非是Encoder部分的輸入是語(yǔ)音流,輸出是對(duì)應(yīng)的文本信息;而對(duì)于“圖像描述”任務(wù)來(lái)說(shuō),Encoder部分的輸入是一副圖片,Decoder的輸出是能夠描述圖片語(yǔ)義內(nèi)容的一句描述語(yǔ)。一般而言,文本處理和語(yǔ)音識(shí)別的Encoder部分通常采用RNN模型,圖像處理的Encoder一般采用CNN模型。

4、Soft Attention 模型

之前展示的Encoder-Decoder框架是沒(méi)有體現(xiàn)出“注意力模型”的,所以可以把它看作是注意力不集中的分心模型。為什么說(shuō)它注意力不集中呢?請(qǐng)觀察下目標(biāo)句子Target中每個(gè)單詞的生成過(guò)程如下:

其中f是Decoder的非線性變換函數(shù)。從這里可以看出,在生成目標(biāo)句子的單詞時(shí),不論生成哪個(gè)單詞,它們使用的輸入句子Source的語(yǔ)義編碼C都是一樣的,沒(méi)有任何區(qū)別。

而語(yǔ)義編碼C是由句子Source的每個(gè)單詞經(jīng)過(guò)Encoder 編碼產(chǎn)生的,這意味著不論是生成哪個(gè)單詞,還是,其實(shí)句子Source中任意單詞對(duì)生成某個(gè)目標(biāo)單詞yi來(lái)說(shuō)影響力都是相同的,這是為何說(shuō)這個(gè)模型沒(méi)有體現(xiàn)出注意力的緣由。這類似于人類看到眼前的畫面,但是眼中卻沒(méi)有注意焦點(diǎn)一樣。

如果拿機(jī)器翻譯來(lái)解釋這個(gè)分心模型的Encoder-Decoder框架更好理解,比如輸入的是英文句子:Tom chase Jerry,Encoder-Decoder框架逐步生成中文單詞:“湯姆”,“追逐”,“杰瑞”。

在翻譯“杰瑞”這個(gè)中文單詞的時(shí)候,分心模型里面的每個(gè)英文單詞對(duì)于翻譯目標(biāo)單詞“杰瑞”貢獻(xiàn)是相同的,很明顯這里不太合理,顯然“Jerry”對(duì)于翻譯成“杰瑞”更重要,但是分心模型是無(wú)法體現(xiàn)這一點(diǎn)的,這就是為何說(shuō)它沒(méi)有引入注意力的原因。

沒(méi)有引入注意力的模型在輸入句子比較短的時(shí)候問(wèn)題不大,但是如果輸入句子比較長(zhǎng),此時(shí)所有語(yǔ)義完全通過(guò)一個(gè)中間語(yǔ)義向量來(lái)表示,單詞自身的信息已經(jīng)消失,可想而知會(huì)丟失很多細(xì)節(jié)信息,這也是為何要引入注意力模型的重要原因。

上面的例子中,如果引入Attention模型的話,應(yīng)該在翻譯“杰瑞”的時(shí)候,體現(xiàn)出英文單詞對(duì)于翻譯當(dāng)前中文單詞不同的影響程度,比如給出類似下面一個(gè)概率分布值:

(Tom,0.3)(Chase,0.2) (Jerry,0.5)

每個(gè)英文單詞的概率代表了翻譯當(dāng)前單詞“杰瑞”時(shí),注意力分配模型分配給不同英文單詞的注意力大小。這對(duì)于正確翻譯目標(biāo)語(yǔ)單詞肯定是有幫助的,因?yàn)橐肓诵碌男畔ⅰ?/p>

同理,目標(biāo)句子中的每個(gè)單詞都應(yīng)該學(xué)會(huì)其對(duì)應(yīng)的源語(yǔ)句子中單詞的注意力分配概率信息。這意味著在生成每個(gè)單詞的時(shí)候,原先都是相同的中間語(yǔ)義表示C會(huì)被替換成根據(jù)當(dāng)前生成單詞而不斷變化的。理解Attention模型的關(guān)鍵就是這里,即由固定的中間語(yǔ)義表示C換成了根據(jù)當(dāng)前輸出單詞來(lái)調(diào)整成加入注意力模型的變化的。增加了注意力模型的Encoder-Decoder框架理解起來(lái)如下圖所示。

即生成目標(biāo)句子單詞的過(guò)程成了下面的形式:

而每個(gè)可能對(duì)應(yīng)著不同的源語(yǔ)句子單詞的注意力分配概率分布,比如對(duì)于上面的英漢翻譯來(lái)說(shuō),其對(duì)應(yīng)的信息可能如下:

其中,f2函數(shù)代表Encoder對(duì)輸入英文單詞的某種變換函數(shù),比如如果Encoder是用的RNN模型的話,這個(gè)f2函數(shù)的結(jié)果往往是某個(gè)時(shí)刻輸入后隱層節(jié)點(diǎn)的狀態(tài)值;g代表Encoder根據(jù)單詞的中間表示合成整個(gè)句子中間語(yǔ)義表示的變換函數(shù),一般的做法中,g函數(shù)就是對(duì)構(gòu)成元素加權(quán)求和,即下列公式:

其中,代表輸入句子Source的長(zhǎng)度,代表在Target輸出第i個(gè)單詞時(shí)Source輸入句子中第j個(gè)單詞的注意力分配系數(shù),而則是Source輸入句子中第j個(gè)單詞的語(yǔ)義編碼。假設(shè)下標(biāo)i就是上面例子所說(shuō)的“ 湯姆” ,那么就是3,h1=f(“Tom”),h2=f(“Chase”),h3=f(“Jerry”)分別是輸入句子每個(gè)單詞的語(yǔ)義編碼,對(duì)應(yīng)的注意力模型權(quán)值則分別是0.6,0.2,0.2,所以g函數(shù)本質(zhì)上就是個(gè)加權(quán)求和函數(shù)。如果形象表示的話,翻譯中文單詞“湯姆”的時(shí)候,數(shù)學(xué)公式對(duì)應(yīng)的中間語(yǔ)義表示的形成過(guò)程類似下圖。

這里還有一個(gè)問(wèn)題:生成目標(biāo)句子某個(gè)單詞,比如“湯姆”的時(shí)候,如何知道Attention模型所需要的輸入句子單詞注意力分配概率分布值呢?就是說(shuō)“湯姆”對(duì)應(yīng)的輸入句子Source中各個(gè)單詞的概率分布:(Tom,0.6)(Chase,0.2) (Jerry,0.2) 是如何得到的呢?

為了便于說(shuō)明,我們假設(shè)對(duì)圖2的非Attention模型的Encoder-Decoder框架進(jìn)行細(xì)化,Encoder采用RNN模型,Decoder也采用RNN模型,這是比較常見(jiàn)的一種模型配置

較為便捷地說(shuō)明注意力分配概率分布值的通用計(jì)算過(guò)程:

對(duì)于采用RNN的Decoder來(lái)說(shuō),在時(shí)刻i,如果要生成yi單詞,我們是可以知道Target在生成之前的時(shí)刻i-1時(shí),隱層節(jié)點(diǎn)i-1時(shí)刻的輸出值的,而我們的目的是要計(jì)算生成時(shí)輸入句子中的單詞“Tom”、“Chase”、“Jerry”對(duì)來(lái)說(shuō)的注意力分配概率分布,那么可以用Target輸出句子i-1時(shí)刻的隱層節(jié)點(diǎn)狀態(tài)去一一和輸入句子Source中每個(gè)單詞對(duì)應(yīng)的RNN隱層節(jié)點(diǎn)狀態(tài)hj進(jìn)行對(duì)比,即通過(guò)函數(shù)F(,)來(lái)獲得目標(biāo)單詞和每個(gè)輸入單詞對(duì)應(yīng)的對(duì)齊可能性,這個(gè)F函數(shù)在不同論文里可能會(huì)采取不同的方法,然后函數(shù)F的輸出經(jīng)過(guò)Softmax進(jìn)行歸一化就得到了符合概率分布取值區(qū)間的注意力分配概率分布數(shù)值。

上述內(nèi)容就是經(jīng)典的Soft Attention模型的基本思想,那么怎么理解Attention模型的物理含義呢?一般在自然語(yǔ)言處理應(yīng)用里會(huì)把Attention模型看作是輸出Target句子中某個(gè)單詞和輸入Source句子每個(gè)單詞的對(duì)齊模型,這是非常有道理的。

目標(biāo)句子生成的每個(gè)單詞對(duì)應(yīng)輸入句子單詞的概率分布可以理解為輸入句子單詞和這個(gè)目標(biāo)生成單詞的對(duì)齊概率,這在機(jī)器翻譯語(yǔ)境下是非常直觀的:傳統(tǒng)的統(tǒng)計(jì)機(jī)器翻譯一般在做的過(guò)程中會(huì)專門有一個(gè)短語(yǔ)對(duì)齊的步驟,而注意力模型其實(shí)起的是相同的作用。

5、Attention機(jī)制的本質(zhì)思想

如果把Attention機(jī)制從上文講述例子中的Encoder-Decoder框架中剝離,并進(jìn)一步做抽象,可以更容易看懂Attention機(jī)制的本質(zhì)思想。

我們可以這樣來(lái)看待Attention機(jī)制:將Source中的構(gòu)成元素想象成是由一系列的<Key,Value>數(shù)據(jù)對(duì)構(gòu)成,此時(shí)給定Target中的某個(gè)元素Query,通過(guò)計(jì)算Query和各個(gè)Key的相似性或者相關(guān)性,得到每個(gè)Key對(duì)應(yīng)Value的權(quán)重系數(shù),然后對(duì)Value進(jìn)行加權(quán)求和,即得到了最終的Attention數(shù)值。所以本質(zhì)上Attention機(jī)制是對(duì)Source中元素的Value值進(jìn)行加權(quán)求和,而Query和Key用來(lái)計(jì)算對(duì)應(yīng)Value的權(quán)重系數(shù)。即可以將其本質(zhì)思想改寫為如下公式:

其中,=||Source||代表Source的長(zhǎng)度,公式含義即如上所述。上文所舉的機(jī)器翻譯的例子里,因?yàn)樵谟?jì)算Attention的過(guò)程中,Source中的Key和Value合二為一,指向的是同一個(gè)東西,也即輸入句子中每個(gè)單詞對(duì)應(yīng)的語(yǔ)義編碼,所以可能不容易看出這種能夠體現(xiàn)本質(zhì)思想的結(jié)構(gòu)。

當(dāng)然,從概念上理解,把Attention仍然理解為從大量信息中有選擇地篩選出少量重要信息并聚焦到這些重要信息上,忽略大多不重要的信息,這種思路仍然成立。聚焦的過(guò)程體現(xiàn)在權(quán)重系數(shù)的計(jì)算上,權(quán)重越大越聚焦于其對(duì)應(yīng)的Value值上,即權(quán)重代表了信息的重要性,而Value是其對(duì)應(yīng)的信息。

從圖9可以引出另外一種理解,也可以將Attention機(jī)制看作一種軟尋址(Soft? Addressing):Source可以看作存儲(chǔ)器內(nèi)存儲(chǔ)的內(nèi)容,元素由地址Key和值Value組成,當(dāng)前有個(gè)Key=Query的查詢,目的是取出存儲(chǔ)器中對(duì)應(yīng)的Value值,即Attention數(shù)值。通過(guò)Query和存儲(chǔ)器內(nèi)元素Key的地址進(jìn)行相似性比較來(lái)尋址,之所以說(shuō)是軟尋址,指的不像一般尋址只從存儲(chǔ)內(nèi)容里面找出一條內(nèi)容,而是可能從每個(gè)Key地址都會(huì)取出內(nèi)容,取出內(nèi)容的重要性根據(jù)Query和Key的相似性來(lái)決定,之后對(duì)Value進(jìn)行加權(quán)求和,這樣就可以取出最終的Value值,也即Attention值。所以不少研究人員將Attention機(jī)制看作軟尋址的一種特例,這也是非常有道理的。

至于Attention機(jī)制的具體計(jì)算過(guò)程,如果對(duì)目前大多數(shù)方法進(jìn)行抽象的話,可以將其歸納為兩個(gè)過(guò)程:第一個(gè)過(guò)程是根據(jù)Query和Key計(jì)算權(quán)重系數(shù),第二個(gè)過(guò)程根據(jù)權(quán)重系數(shù)對(duì)Value進(jìn)行加權(quán)求和。而第一個(gè)過(guò)程又可以細(xì)分為兩個(gè)階段:第一個(gè)階段根據(jù)Query和Key計(jì)算兩者的相似性或者相關(guān)性;第二個(gè)階段對(duì)第一階段的原始分值進(jìn)行歸一化處理;這樣,可以將Attention的計(jì)算過(guò)程抽象為如下圖展示的三個(gè)階段。

在第一個(gè)階段,可以引入不同的函數(shù)和計(jì)算機(jī)制,根據(jù)Query和某個(gè),計(jì)算兩者的相似性或者相關(guān)性,最常見(jiàn)的方法包括:求兩者的向量點(diǎn)積、求兩者的向量Cosine相似性或者通過(guò)再引入額外的神經(jīng)網(wǎng)絡(luò)來(lái)求值,即如下方式:

第一階段產(chǎn)生的分值根據(jù)具體產(chǎn)生的方法不同其數(shù)值取值范圍也不一樣,第二階段引入類似SoftMax的計(jì)算方式對(duì)第一階段的得分進(jìn)行數(shù)值轉(zhuǎn)換,一方面可以進(jìn)行歸一化,將原始計(jì)算分值整理成所有元素權(quán)重之和為1的概率分布;另一方面也可以通過(guò)SoftMax的內(nèi)在機(jī)制更加突出重要元素的權(quán)重。即一般采用如下公式計(jì)算:

第二階段的計(jì)算結(jié)果即為對(duì)應(yīng)的權(quán)重系數(shù),然后進(jìn)行加權(quán)求和即可得到Attention數(shù)值:

通過(guò)如上三個(gè)階段的計(jì)算,即可求出針對(duì)Query的Attention數(shù)值,目前絕大多數(shù)具體的注意力機(jī)制計(jì)算方法都符合上述的三階段抽象計(jì)算過(guò)程。

6、Self-Attention機(jī)制

通過(guò)上述對(duì)Attention本質(zhì)思想的梳理,我們可以更容易理解本節(jié)介紹的Self? Attention模型。Self Attention也經(jīng)常被稱為intra? Attention(內(nèi)部Attention),最近一年也獲得了比較廣泛的使用,比如Google最新的機(jī)器翻譯模型內(nèi)部大量采用了Self? Attention模型。

在一般任務(wù)的Encoder-Decoder框架中,輸入Source和輸出Target內(nèi)容是不一樣的,比如對(duì)于英-中機(jī)器翻譯來(lái)說(shuō),Source是英文句子,Target是對(duì)應(yīng)的翻譯出的中文句子,Attention機(jī)制發(fā)生在Target的元素Query和Source中的所有元素之間。而Self? Attention顧名思義,指的不是Target和Source之間的Attention機(jī)制,而是Source內(nèi)部元素之間或者Target內(nèi)部元素之間發(fā)生的Attention機(jī)制,也可以理解為Target=Source這種特殊情況下的注意力計(jì)算機(jī)制。其具體計(jì)算過(guò)程是一樣的,只是計(jì)算對(duì)象發(fā)生了變化而已,所以此處不再贅述其計(jì)算過(guò)程細(xì)節(jié)。

如果是常規(guī)的Target不等于Source情形下的注意力計(jì)算,其物理含義正如上文所講,比如對(duì)于機(jī)器翻譯來(lái)說(shuō),本質(zhì)上是目標(biāo)語(yǔ)單詞和源語(yǔ)單詞之間的一種單詞對(duì)齊機(jī)制。那么如果是Self Attention機(jī)制,一個(gè)很自然的問(wèn)題是:通過(guò)Self Attention到底學(xué)到了哪些規(guī)律或者抽取出了哪些特征呢?或者說(shuō)引入Self? Attention有什么增益或者好處呢?我們?nèi)匀灰詸C(jī)器翻譯中的Self Attention來(lái)說(shuō)明,圖11和圖12是可視化地表示Self? Attention在同一個(gè)英語(yǔ)句子內(nèi)單詞間產(chǎn)生的聯(lián)系。

從兩張圖可以看出,Self Attention可以捕獲同一個(gè)句子中單詞之間的一些句法特征(比如第一張圖展示的有一定距離的短語(yǔ)結(jié)構(gòu))或者語(yǔ)義特征(比如第2張圖展示的its的指代對(duì)象Law)。

很明顯,引入Self Attention后會(huì)更容易捕獲句子中長(zhǎng)距離的相互依賴的特征,因?yàn)槿绻荝NN或者LSTM,需要依次序序列計(jì)算,對(duì)于遠(yuǎn)距離的相互依賴的特征,要經(jīng)過(guò)若干時(shí)間步步驟的信息累積才能將兩者聯(lián)系起來(lái),而距離越遠(yuǎn),有效捕獲的可能性越小。

但是Self? Attention在計(jì)算過(guò)程中會(huì)直接將句子中任意兩個(gè)單詞的聯(lián)系通過(guò)一個(gè)計(jì)算步驟直接聯(lián)系起來(lái),所以遠(yuǎn)距離依賴特征之間的距離被極大縮短,有利于有效地利用這些特征。除此外,Self Attention對(duì)于增加計(jì)算的并行性也有直接幫助作用。這是為何Self Attention逐漸被廣泛使用的主要原因。

7、畢設(shè)可能用到的Attention

(1) Deep Semantic Role Labeling with Self-Attention

這篇論文來(lái)自AAAI2018,廈門大學(xué)Tan等人的工作。(Tan Z, Wang M, Xie J, et al. Deep Semantic Role Labeling with Self-Attention. AAAI 2018. )他們將self-attention應(yīng)用到了語(yǔ)義角色標(biāo)注任務(wù)(SRL)上,并取得了先進(jìn)的結(jié)果。這篇論文中,作者將SRL作為一個(gè)序列標(biāo)注問(wèn)題,使用BIO標(biāo)簽進(jìn)行標(biāo)注。然后提出使用深度注意力網(wǎng)絡(luò)(Deep Attentional Neural Network)進(jìn)行標(biāo)注,網(wǎng)絡(luò)結(jié)構(gòu)如下。在每一個(gè)網(wǎng)絡(luò)塊中,有一個(gè)RNN/CNN/FNN子層和一個(gè)self-attention子層組成。最后直接利用softmax當(dāng)成標(biāo)簽分類進(jìn)行序列標(biāo)注。

該模型在CoNLL-2005和CoNll-2012的SRL數(shù)據(jù)集上都取得了先進(jìn)結(jié)果。我們知道序列標(biāo)注問(wèn)題中,標(biāo)簽之間是有依賴關(guān)系的,比如標(biāo)簽I,應(yīng)該是出現(xiàn)在標(biāo)簽B之后,而不應(yīng)該出現(xiàn)在O之后。目前主流的序列標(biāo)注模型是BiLSTM-CRF模型,利用CRF進(jìn)行全局標(biāo)簽優(yōu)化。在對(duì)比實(shí)驗(yàn)中,He et al和Zhou and Xu的模型分別使用了CRF和constrained decoding來(lái)處理這個(gè)問(wèn)題??梢钥吹奖菊撐膬H使用self-attention,作者認(rèn)為在模型的頂層的attention層能夠?qū)W習(xí)到標(biāo)簽潛在的依賴信息。

(2)Simultaneously Self-Attending to All Mentions for Full-Abstract Biological Relation Extraction

這篇論文是Andrew McCallum團(tuán)隊(duì)?wèi)?yīng)用self-attention在生物醫(yī)學(xué)關(guān)系抽取任務(wù)上的一個(gè)工作,應(yīng)該是已經(jīng)被NAACL2018接收。這篇論文作者提出了一個(gè)文檔級(jí)別的生物關(guān)系抽取模型,里面做了不少工作,感興趣的讀者可以更深入閱讀原文。我們這里只簡(jiǎn)單提一下他們self-attention的應(yīng)用部分。論文模型的整體結(jié)構(gòu)如下圖,他們也是使用google提出包含self-attention的transformer來(lái)對(duì)輸入文本進(jìn)行表示學(xué)習(xí),和原始的transformer略有不同在于他們使用了窗口大小為5的CNN代替了原始FNN。

我們關(guān)注一下attention這部分的實(shí)驗(yàn)結(jié)果。他們?cè)谏镝t(yī)學(xué)藥物致病數(shù)據(jù)集上(Chemical Disease Relations,CDR)取得了先進(jìn)結(jié)果。去掉self-attention這層以后可以看到結(jié)果大幅度下降,而且使用窗口大小為5的CNN比原始的FNN在這個(gè)數(shù)據(jù)集上有更突出的表現(xiàn)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容