Attention is all we need

一、背景

? ?注意力模型(Attention Model)被廣泛使用在自然語言處理、圖像識別及語音識別等各種不同類型的深度學(xué)習(xí)任務(wù)中,是深度學(xué)習(xí)技術(shù)中最值得關(guān)注與深入了解的核心技術(shù)之一。


圖1 人類的視覺注意力

? ? ? ? 視覺注意力機(jī)制是人類視覺所特有的大腦信號處理機(jī)制。人類視覺通過快速掃描全局圖像,獲得需要重點(diǎn)關(guān)注的目標(biāo)區(qū)域,也就是一般所說的注意力焦點(diǎn),而后對這一區(qū)域投入更多注意力資源,以獲取更多所需要關(guān)注目標(biāo)的細(xì)節(jié)信息,而抑制其他無用信息。這是人類利用有限的注意力資源從大量信息中快速篩選出高價值信息的手段,是人類在長期進(jìn)化中形成的一種生存機(jī)制,人類視覺注意力機(jī)制極大地提高了視覺信息處理的效率與準(zhǔn)確性。

? ? ? ?深度學(xué)習(xí)中的注意力機(jī)制從本質(zhì)上講和人類的選擇性視覺注意力機(jī)制類似,核心目標(biāo)也是從眾多信息中選擇出對當(dāng)前任務(wù)目標(biāo)更關(guān)鍵的信息。?注意力模型應(yīng)該與具體的目的(或者任務(wù))相結(jié)合。

? ? ? ? 從Attention的作用角度出發(fā),我們就可以從兩個角度來分類Attention種類:Spatial Attention空間注意力和Temporal Attention時間注意力。更具實(shí)際的應(yīng)用,也可以將Attention分為Soft Attention和Hard Attention。Soft?Attention是所有的數(shù)據(jù)都會注意,都會計(jì)算出相應(yīng)的注意力權(quán)值,不會設(shè)置篩選條件Hard?Attention會在生成注意力權(quán)重后篩選掉一部分不符合條件的注意力,讓它的注意力權(quán)值為0,即可以理解為不再注意這些不符合條件的部分。

? ? ? ?為什么需要加入Attention?

1、序列輸入時,隨著序列的不斷增長,原始根據(jù)時間步的方式的表現(xiàn)越來越差,這是由于原始的時間步模型設(shè)計(jì)結(jié)構(gòu)有缺陷,所有的上下文輸入信息都被限制到固定長度,整個模型的能力同樣受到限制。

2、編碼器的結(jié)構(gòu)無法解釋,也導(dǎo)致了無法設(shè)計(jì)

Attention的出現(xiàn)就是為了兩個目的:1. 減小處理高維輸入數(shù)據(jù)的計(jì)算負(fù)擔(dān),通過結(jié)構(gòu)化的選取輸入的子集,降低數(shù)據(jù)維度。2. “去偽存真”,讓任務(wù)處理系統(tǒng)更專注于找到輸入數(shù)據(jù)中顯著的與當(dāng)前輸出相關(guān)的有用信息,從而提高輸出的質(zhì)量。Attention模型的最終目的是幫助類似編解碼器這樣的框架,更好的學(xué)到多種內(nèi)容模態(tài)之間的相互關(guān)系,從而更好的表示這些信息,克服其無法解釋從而很難設(shè)計(jì)的缺陷。


二、Encoder-Decoder框架

? ? ? ?Encoder-Decoder框架可以看作是一種深度學(xué)習(xí)領(lǐng)域的研究模式,應(yīng)用場景異常廣泛。圖2是文本處理領(lǐng)域里常用的Encoder-Decoder框架最抽象的一種表示。?


圖2:抽象的文本處理領(lǐng)域的Encoder-Decoder框架


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

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Source = <x_{1},x_{2},x_{3}...,x_{m}  >

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??Target = <y_{1},y_{2},y_{3}...,y_{n}  >

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

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C = \Gamma (x_{1},x_{2},x_{3}...,x_{m})

? ? ? 對于解碼器Decoder來說,其任務(wù)是根據(jù)句子Source的中間語義表示C和之前已經(jīng)生成的歷史信息y_{1},y_{2},y_{3}...,y_{i-1}來生成i時刻要生成的單詞y_{i} :

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?y_{i} = G(C,y_{1},y_{2},y_{3}...,y_{i-1})

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

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

三、Attention

3.1 ? Soft Attention

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

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?y_{1} =f1(C_{1} )

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?y_{2} =f1(C_{1}, y_{1}  )

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?y_{3} =f1(C_{1}, y_{1},y_{2}   )

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

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

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

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

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

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

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

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

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

圖3:引入注意力機(jī)制的Attention模型

生成目標(biāo)句子單詞的過程變?yōu)椋?/p>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??y_{1} =f1(C_{1} )

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?y_{2} =f1(C_{2}, y_{1}  )

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? y_{3} =f1(C_{3},y_{1} ,y_{2}  )

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


信息

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

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C_{i}  = \sum\nolimits_{j=1}^lx_{a}

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


圖4:Attention生成過程

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

? ? ? ? 為了便于說明,我們假設(shè)對圖2的非Attention模型的Encoder-Decoder框架進(jìn)行細(xì)化,Encoder采用RNN模型,Decoder也采用RNN模型,這是比較常見的一種模型配置,則圖2的框架轉(zhuǎn)換為圖5。


?圖5 RNN作為具體模型的Encoder-Decoder框架

那么用圖6可以較為便捷地說明注意力分配概率分布值的通用計(jì)算過程


圖6 注意力分配概率計(jì)算

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

? ? ? ? ??怎么理解Attention模型的物理含義呢?一般在自然語言處理應(yīng)用里會把Attention模型看作是輸出Target句子中某個單詞和輸入Source句子每個單詞的對齊模型,這是非常有道理的。

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

3.2 ?Attention機(jī)制的本質(zhì)思想


圖9 Attention機(jī)制的本質(zhì)思想

? ? ? ? 將Source中的構(gòu)成元素想象成是由一系列的<Key,Value>數(shù)據(jù)對構(gòu)成,此時給定Target中的某個元素Query,通過計(jì)算Query和各個Key的相似性或者相關(guān)性,得到每個Key對應(yīng)Value的權(quán)重系數(shù),然后對Value進(jìn)行加權(quán)求和,即得到了最終的Attention數(shù)值。所以本質(zhì)上Attention機(jī)制是對Source中元素的Value值進(jìn)行加權(quán)求和,而Query和Key用來計(jì)算對應(yīng)Value的權(quán)重系數(shù)。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Attention(Source, Query) = \sum\nolimits_{i=1}^lSimality(Query, key_{i} ) * Value_{i}

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

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

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

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


圖10 三階段計(jì)算Attention過程

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

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??點(diǎn)積:Similarity(Query, key_{i} )=Query. key_{i}

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??Cosine相似性:Similarity(Query,  key_{i})=\frac{ Query.key_{i}}{\vert  key_{i} \vert *\vert Query \vert }

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??MLP網(wǎng)絡(luò):   Similarity(Query,  key_{i}) = MLP( key_{i}, Queue)

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

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

3.3 ?Self Attention模型

? ? ? ? 通過上述對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)容是不一樣的,比如對于英-中機(jī)器翻譯來說,Source是英文句子,Target是對應(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ì)算過程是一樣的,只是計(jì)算對象發(fā)生了變化而已,所以此處不再贅述其計(jì)算過程細(xì)節(jié)。

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


Self Attention實(shí)例


? ? ? ?Self Attention可以捕獲同一個句子中單詞之間的一些句法特征(比如圖11展示的有一定距離的短語結(jié)構(gòu))或者語義特征(比如圖12展示的its的指代對象Law)。

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

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




參考內(nèi)容:

張俊林博客

Keras的attention實(shí)現(xiàn)

Attention注意力機(jī)制--原理與應(yīng)用

keras

(LSTM)和注意力機(jī)制(Attention Model)

薦情局此鏈接詳細(xì)介紹代碼內(nèi)容

Attention is All we need 下載

代碼地址

數(shù)據(jù)下載地址

密碼:lfwu

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

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

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