帶你用深度學(xué)習(xí)虛擬機(jī)進(jìn)行文本遷移學(xué)習(xí)(附代碼)
2018-07-10 來(lái)源:raincent

動(dòng)機(jī)
現(xiàn)代機(jī)器學(xué)習(xí)模型,尤其是深度神經(jīng)網(wǎng)絡(luò),通?梢詮倪w移學(xué)習(xí)中顯著受益。在計(jì)算機(jī)視覺中,在大型圖像分類數(shù)據(jù)集(如ImageNet)上訓(xùn)練的深卷積神經(jīng)網(wǎng)絡(luò)已被證明對(duì)初始化其他視覺任務(wù)(如物體檢測(cè))模型非常有用(Zeiler和Fergus,2014)。
但是,我們?nèi)绾挝谋旧蠎?yīng)用遷移學(xué)習(xí)技術(shù)?在這篇博客文章中,我們?cè)噲D在研究社區(qū)中對(duì)現(xiàn)有的文本傳輸學(xué)習(xí)文獻(xiàn)進(jìn)行綜合研究。我們探索八種流行的機(jī)器閱讀理解(MRC)算法(圖1)。我們?cè)u(píng)估和比較了六篇這樣的論文:
BIDAF,DOCQA,ReasoNet,R-NET,SynNet和OpenNMT
我們將模型初始化,對(duì)不同的源問(wèn)題答疑(QA)數(shù)據(jù)集進(jìn)行預(yù)先訓(xùn)練,并展示標(biāo)準(zhǔn)遷移學(xué)習(xí)如何在大型目標(biāo)語(yǔ)料庫(kù)上實(shí)現(xiàn)結(jié)果。為了創(chuàng)建一個(gè)測(cè)試語(yǔ)料庫(kù),我們選擇了由Harry Shum和Brad Smith編寫的Future Computed一書。
我們比較了使用這些預(yù)訓(xùn)練的MRC模型為本書創(chuàng)建QA系統(tǒng)的遷移學(xué)習(xí)方法的性能。對(duì)于我們的評(píng)估方案,Document-QA模型的性能優(yōu)于其他遷移學(xué)習(xí)方法(如BIDAF,ReasoNet和R-NET模型)的性能。您可以在這里使用Jupyter筆記本測(cè)試Document-QA模型場(chǎng)景。
我們使用一些預(yù)訓(xùn)練的MRC模型比較了用于為本書創(chuàng)建QA語(yǔ)料庫(kù)的微調(diào)學(xué)習(xí)方法的性能。根據(jù)我們的評(píng)估方案,OpenNMT模型的性能優(yōu)于SynNet模型的性能。您可以在這里使用Jupyter筆記本測(cè)試OpenNMT模型場(chǎng)景。
介紹
在自然語(yǔ)言處理(NLP)中,域適應(yīng)一直是語(yǔ)法解析(McClosky等,2010)和命名實(shí)體識(shí)別(Chiticariu等,2010)等重要課題。隨著詞向量的普及,像word2vec(Mikolov et al。,2013)和GloVe模型(Pennington等,2014)這樣的預(yù)先訓(xùn)練的詞嵌入模型也被廣泛用于自然語(yǔ)言任務(wù)。
在自然語(yǔ)言處理中,問(wèn)題回答中是一個(gè)長(zhǎng)期存在的挑戰(zhàn),該社區(qū)在過(guò)去幾年中為這項(xiàng)任務(wù)引入了幾個(gè)范例和數(shù)據(jù)集。這些范例在問(wèn)題和答案的類型以及培訓(xùn)數(shù)據(jù)的大小方面各不相同,有幾百到幾百萬(wàn)不等的例子。
在這篇文章中,我們特別感興趣的是上下文感知QA范例,其中每個(gè)問(wèn)題的答案可以通過(guò)參考其伴隨的上下文(即段落或句子列表)來(lái)獲得。對(duì)于人類來(lái)說(shuō),閱讀理解是一項(xiàng)基本任務(wù),每天都要進(jìn)行。早在小學(xué),我們就可以閱讀一篇文章,并回答關(guān)于其主要思想和細(xì)節(jié)的問(wèn)題。但對(duì)于AI來(lái)說(shuō),完成閱讀理解仍然是一個(gè)難以捉摸的目標(biāo)。因此,構(gòu)建能夠執(zhí)行機(jī)器閱讀理解的機(jī)器是非常有意義的。
機(jī)器閱讀理解(MRC)
MRC是關(guān)于回答有關(guān)給定情境段落的查詢。 MRC需要對(duì)上下文和查詢之間的復(fù)雜交互進(jìn)行建模。最近,注意力機(jī)制已成功擴(kuò)展到MRC。通常,這些方法使用注意力集中在上下文的一小部分上,并用固定大小的矢量對(duì)其進(jìn)行總結(jié),暫時(shí)關(guān)注時(shí)間和/或經(jīng)常形成單向注意力。這些都已表明,這些MRC模型對(duì)于新領(lǐng)域的文本轉(zhuǎn)移學(xué)習(xí)和微調(diào)來(lái)說(shuō)表現(xiàn)良好
為什么MRC對(duì)企業(yè)來(lái)說(shuō)非常重要?
企業(yè)內(nèi)部對(duì)聊天機(jī)器的使用情況持續(xù)增長(zhǎng)。研究和行業(yè)已經(jīng)轉(zhuǎn)向會(huì)話式AI方法來(lái)推進(jìn)這種聊天機(jī)器人場(chǎng)景,特別是在銀行,保險(xiǎn)和電信等復(fù)雜使用案例中。對(duì)話式人工智能的一個(gè)主要挑戰(zhàn)是需要使用人類的方式理解人類所表達(dá)的復(fù)雜句子。人的交談從來(lái)不是直截了當(dāng)?shù)?- 它充滿了由多字符串單詞,縮寫,片段,發(fā)音錯(cuò)誤和其他一系列問(wèn)題。
MRC是解決我們今天面臨的對(duì)話式AI問(wèn)題的必備因素。如今,MRC方法能夠精確地回答諸如“什么原因?qū)е孪掠?”等客觀問(wèn)題。這些方法可以被運(yùn)用于真實(shí)世界,如客戶服務(wù)。 MRC可以被用于導(dǎo)航和理解種“給予與獲取”這樣的交互。 MRC在商業(yè)領(lǐng)域的一些常見應(yīng)用包括:
翻譯。
不同領(lǐng)域間的自動(dòng)問(wèn)答。
自動(dòng)回復(fù)電子郵件。
從對(duì)話中提取嵌入式信息,用于有針對(duì)性的廣告/促銷活動(dòng)。
個(gè)性化的客戶服務(wù)。
根據(jù)對(duì)話域創(chuàng)建機(jī)器人的個(gè)性和知識(shí)。
這種智能會(huì)話界面是企業(yè)與各地的設(shè)備,服務(wù),客戶,供應(yīng)商和員工互動(dòng)的最簡(jiǎn)單方式。使用MRC方法構(gòu)建的智能助理可以每天訓(xùn)練并繼續(xù)學(xué)習(xí)。業(yè)務(wù)影響可以包括通過(guò)增加自助服務(wù),提高最終用戶體驗(yàn)/滿意度,更快地提供相關(guān)信息以及提高對(duì)內(nèi)部程序的遵從性來(lái)降低成本。
在這篇博文中,我們想要評(píng)估不同的MRC方法來(lái)解決不同領(lǐng)域的自動(dòng)問(wèn)答功能。
MRC遷移學(xué)習(xí)
最近,一些研究人員已經(jīng)探索出了各種攻克MRC遷移學(xué)習(xí)問(wèn)題的方法。他們的工作對(duì)于開發(fā)一些可擴(kuò)展解決方案以將MRC擴(kuò)展到更廣泛領(lǐng)域來(lái)講,至關(guān)重要。
目前,大多數(shù)最先進(jìn)的機(jī)器閱讀系統(tǒng)都建立在監(jiān)督培訓(xùn)數(shù)據(jù)的基礎(chǔ)上,通過(guò)數(shù)據(jù)實(shí)例進(jìn)行端對(duì)端培訓(xùn),不僅包含文章,還包含人工標(biāo)記的關(guān)于文章和相應(yīng)答案的問(wèn)題。通過(guò)這些例子,基于深度學(xué)習(xí)的MRC模型學(xué)習(xí)理解問(wèn)題并從文章中推斷出答案,其中涉及推理和推理的多個(gè)步驟。對(duì)于MRC轉(zhuǎn)移學(xué)習(xí),我們有6個(gè)模型,如圖1所示。
MRC微調(diào)
盡管使用MRC遷移學(xué)習(xí)有了很大的進(jìn)展,但直到最近,人們才開始重視一個(gè)被忽視很久的關(guān)鍵問(wèn)題- 如何為非常小的領(lǐng)域構(gòu)建MRC系統(tǒng)?
目前,大多數(shù)最先進(jìn)的機(jī)器閱讀系統(tǒng)都建立在監(jiān)督式培訓(xùn)數(shù)據(jù)的基礎(chǔ)上,經(jīng)過(guò)數(shù)據(jù)示例的端對(duì)端培訓(xùn),不僅包含文章,還包含有關(guān)文章和相應(yīng)答案的人工標(biāo)記問(wèn)題。通過(guò)這些例子,基于深度學(xué)習(xí)的MRC模型學(xué)習(xí)理解問(wèn)題并從文章中推斷出答案,其中涉及推理和推理的多個(gè)步驟。這種MRC遷移學(xué)習(xí)對(duì)于通用文章非常有效。但是,對(duì)于許多利基領(lǐng)域或垂直領(lǐng)域而言,這種監(jiān)督訓(xùn)練數(shù)據(jù)不存在。
例如,如果我們需要建立一個(gè)新的機(jī)器閱讀系統(tǒng)來(lái)幫助醫(yī)生找到有關(guān)新疾病的有價(jià)值信息,那么可能有許多文件可用,但是缺少關(guān)于這些文章及其相應(yīng)答案的手動(dòng)標(biāo)記問(wèn)題。由于需要為每種疾病建立單獨(dú)的MRC系統(tǒng)以及迅速增加的文獻(xiàn)量,這一挑戰(zhàn)被放大了。因此,找出如何將MRC系統(tǒng)轉(zhuǎn)移到小眾領(lǐng)域很重要,在這個(gè)領(lǐng)域中沒(méi)有手動(dòng)標(biāo)記的問(wèn)題和答案,但有可用的文件體。
在此之前,已經(jīng)有人研究過(guò)生成合成數(shù)據(jù)以增加不充分的訓(xùn)練數(shù)據(jù)這樣的問(wèn)題。為了翻譯的目標(biāo)任務(wù),Sennrich 等人在2016提出用給定的真句生成合成翻譯以改進(jìn)現(xiàn)有的機(jī)器翻譯系統(tǒng)。然而,與機(jī)器翻譯不同的是,對(duì)于像MRC這樣的任務(wù),我們需要綜合考慮文章的問(wèn)題和答案。而且,雖然問(wèn)題是句法流式的自然語(yǔ)言句子,但答案主要是段落中的顯著語(yǔ)義概念,如命名實(shí)體,動(dòng)作或數(shù)字。由于答案與問(wèn)題的語(yǔ)言結(jié)構(gòu)不同,因此將答案和問(wèn)題視為兩種不同類型的數(shù)據(jù)可能更合適。 Golub等人2017年提出了一種稱為SynNet的新型模型以解決這一關(guān)鍵需求。
Xinya Du等人在2017年使用了開源神經(jīng)機(jī)器翻譯工具包OpenNMT這樣的微調(diào)方法。

訓(xùn)練MRC模型
我們使用深度學(xué)習(xí)虛擬機(jī)(DLVM)作為具有NVIDIA Tesla K80 GPU,CUDA和cuDNN庫(kù)的計(jì)算環(huán)境。 DLVM是數(shù)據(jù)科學(xué)虛擬機(jī)(DSVM)的一種特別配置的變體,可以更直接地使用基于GPU的虛擬機(jī)實(shí)例來(lái)訓(xùn)練深度學(xué)習(xí)模型。它支持Windows 2016和Ubuntu Data Science虛擬機(jī)上。它與DSVM共享相同的核心虛擬機(jī)映像(以及所有豐富的工具集),但在配置上更適用于深度學(xué)習(xí)。所有實(shí)驗(yàn)均在具有2個(gè)GPU的Linux DLVM上運(yùn)行。我們使用TensorFlow和Keras以及Tensorflow后端來(lái)構(gòu)建模型。我們?cè)贒LVM環(huán)境中安裝了所有依存項(xiàng)。
先決條件
對(duì)于每個(gè)模型,請(qǐng)按照GitHub中的Instructions.md來(lái)下載代碼并安裝依存關(guān)系。
實(shí)驗(yàn)步驟
在DLVM中設(shè)置代碼后:
運(yùn)行代碼來(lái)訓(xùn)練模型。
產(chǎn)生訓(xùn)練有素的模型。
然后運(yùn)行評(píng)分代碼來(lái)測(cè)試訓(xùn)練模型的準(zhǔn)確性。
有關(guān)所有代碼和相關(guān)詳細(xì)信息,請(qǐng)參閱我們的GitHub鏈接。
使用Python Flask API在DLVM上運(yùn)行訓(xùn)練的MRC模型
操作化是將模型和代碼發(fā)布為Web服務(wù)以及消費(fèi)這些服務(wù)以產(chǎn)生業(yè)務(wù)結(jié)果的過(guò)程。 AI模型可以使用Python Flask API部署到本地DLVM。 要使用DLVM操作AI模型,我們可以在DLVM中使用JupyterHub。 您可以按照每個(gè)型號(hào)的筆記本中列出的類似步驟進(jìn)行操作。 DLVM模型部署體系結(jié)構(gòu)圖如圖2所示。

評(píng)估方法
為了比較研究,我們想要在不同的數(shù)據(jù)集上訓(xùn)練不同的MRC模型,并在單個(gè)大型語(yǔ)料庫(kù)上測(cè)試它們。為了達(dá)到本博文的目的,我們使用六種MRC模型方法 - BIDAF,DOCQA,ReasoNet,R-NET,SynNet和OpenNMT - 使用訓(xùn)練好的MRC模型為大語(yǔ)料庫(kù)創(chuàng)建QA-Bot,然后比較結(jié)果。
如前所述,為了創(chuàng)建我們的測(cè)試語(yǔ)料庫(kù),我們使用Harry Shum和Brad Smith撰寫的Future Computed一書。我們將本書的PDF轉(zhuǎn)換為Word格式,并刪除了所有圖像和圖表,因此我們的測(cè)試語(yǔ)料庫(kù)僅包含文本。
BIDAF,DOCQA,R-NET,SynNet和OpenNMT都有開放的GitHub資源可用來(lái)復(fù)制紙質(zhì)結(jié)果。我們使用這些開放的GitHub鏈接來(lái)訓(xùn)練模型,并在必要時(shí)擴(kuò)展這些代碼以進(jìn)行比較研究。對(duì)于ReasoNet論文,我們與作者取得聯(lián)系并訪問(wèn)了他們的私人代碼以進(jìn)行評(píng)估工作。請(qǐng)參考下面的詳細(xì)說(shuō)明,對(duì)我們的測(cè)試語(yǔ)料庫(kù)上的每個(gè)MRC模型進(jìn)行評(píng)估。
第1部分 - 評(píng)估雙向注意力流動(dòng)(BIDAF)模型
第2部分 - 評(píng)估文檔 - 質(zhì)量保證模型
第3部分 - 評(píng)估ReasoNet模型
第4部分 - 評(píng)估R-NET模型
第5部分 - 評(píng)估SynNet模型
第6部分 - 評(píng)估OpenNMT模型
我們的比較工作總結(jié)在下面的表1中

表1
評(píng)估工作中的收獲
在這篇博客文章中,我們調(diào)查了SQUAD和TriviaQA數(shù)據(jù)集中的四種不同MRC方法的性能。我們比較了使用這些預(yù)訓(xùn)練的MRC模型為Future Computed一書創(chuàng)建問(wèn)答系統(tǒng)的遷移學(xué)習(xí)方法的性能。請(qǐng)注意,這里的比較僅限于我們的評(píng)估方案。其他文檔或場(chǎng)景的結(jié)果可能會(huì)有所不同。
我們的評(píng)估方案顯示,OpenNMT微調(diào)方法的性能優(yōu)于針對(duì)領(lǐng)域特定數(shù)據(jù)集的簡(jiǎn)單遷移學(xué)習(xí)MRC機(jī)制。但是,對(duì)于通用的大型文章,Document-QA模型優(yōu)于BIDAF,ReasoNet和R-NET模型。我們將比較下面更詳細(xì)的性能。
使用BiDAF模型進(jìn)行轉(zhuǎn)移學(xué)習(xí)的優(yōu)點(diǎn)和缺點(diǎn)
優(yōu)點(diǎn)
BiDAF模型易于培訓(xùn)和測(cè)試(感謝AllenAI通過(guò)開放的GitHub鏈接提供所有代碼)。
缺點(diǎn)
BiDAF模型的使用非常有限。它只適用于一小段。給定一個(gè)更大的段落或許多小段落,這個(gè)模型通常需要很長(zhǎng)時(shí)間,并且以可能的跨度作為答案返回,這可能根本沒(méi)有任何意義。
GitHub中的資源貢獻(xiàn):
https://github.com/antriv/Transfer_Learning_Text/tree/master/Transfer_Learning/bi-att-flow
使用Document-QA模型進(jìn)行轉(zhuǎn)移學(xué)習(xí)的優(yōu)點(diǎn)和缺點(diǎn)
優(yōu)點(diǎn)
Document-QA模型非常易于培訓(xùn)和測(cè)試(感謝AllenAI通過(guò)開放的GitHub鏈接提供所有代碼)。與我們之前探討的BiDAF模型相比,Document-QA模型做得更好。給定多個(gè)較大的文檔,這個(gè)模型通常需要很少的時(shí)間來(lái)產(chǎn)生多個(gè)可能的跨度作為答案。
缺點(diǎn)
但是,由于Document-QA沒(méi)有給出單個(gè)答案,因此算法可能會(huì)將最可能的答案指定為較低的優(yōu)先級(jí),這可能根本沒(méi)有任何意義。我們假設(shè),如果模型只能看到包含答案的段落,那么它可能會(huì)對(duì)啟發(fā)式或模式過(guò)于自信,這種模型只有在先驗(yàn)知道存在答案時(shí)才有效。例如,在下面的表2中(根據(jù)論文進(jìn)行調(diào)整),我們觀察到,即使問(wèn)題單詞與上下文不匹配,模型也會(huì)為與答案類別強(qiáng)烈匹配的跨度分配高信度值。如果有答案,這可能會(huì)工作得很好,但在其他情況下可能不會(huì)有這么好的效果。
GitHub中的資源貢獻(xiàn):
https://github.com/antriv/Transfer_Learning_Text/tree/master/Transfer_Learning/document-qa

表2
使用ReasoNet模型進(jìn)行遷移學(xué)習(xí)的優(yōu)點(diǎn)和缺點(diǎn)
優(yōu)點(diǎn)
ReasoNets利用多次輪流有效地利用,然后推理查詢文檔和答案之間的關(guān)系。通過(guò)使用強(qiáng)化學(xué)習(xí),ReasoNets可以動(dòng)態(tài)確定究竟是在消化中間結(jié)果后繼續(xù)理解過(guò)程還是終止閱讀。
缺點(diǎn)
很難重現(xiàn)本文的結(jié)果。沒(méi)有開放代碼可用于此。 ReasoNet模型的使用非常有限。它只適用于一小段。給定一個(gè)更大的段落,這個(gè)模型通常需要很長(zhǎng)時(shí)間,并以可能的跨度作為答案回來(lái),這可能根本沒(méi)有任何意義。
GitHub中的資源貢獻(xiàn),我們?yōu)檫@項(xiàng)工作增加了一些演示代碼,但沒(méi)有公開的GitHub代碼可用于此。
使用R-NET模型進(jìn)行轉(zhuǎn)移學(xué)習(xí)的優(yōu)點(diǎn)和缺點(diǎn)
優(yōu)點(diǎn)
除了在SQUAD上進(jìn)行培訓(xùn)外,我們還可以在MS-MARCO上訓(xùn)練此模型。在MS-MARCO中,每個(gè)問(wèn)題都有幾個(gè)相應(yīng)的段落,所以我們只需按照數(shù)據(jù)集中給出的順序連接一個(gè)問(wèn)題的所有段落。其次,MS-MARCO的答案不一定是這些段落的次要代表。在這方面,我們選擇評(píng)分最高的跨度,參考答案作為訓(xùn)練中的黃金跨度,并預(yù)測(cè)最高得分跨度作為預(yù)測(cè)的答案。 MS-MARCO數(shù)據(jù)集上的R-NET模型優(yōu)于其他競(jìng)爭(zhēng)性基線,如ReasoNet。
缺點(diǎn)
對(duì)于數(shù)據(jù)驅(qū)動(dòng)的方法,標(biāo)記數(shù)據(jù)可能成為更好性能的瓶頸。雖然文本很豐富,但找到符合SQUAD風(fēng)格的問(wèn)題片段組合并不容易。為了生成更多的數(shù)據(jù),R-NET模型作者使用SQuAD數(shù)據(jù)集訓(xùn)練了一個(gè)序列到序列的問(wèn)題生成模型,并從英文維基百科生成了大量的偽問(wèn)題通道組合。但分析表明,生成問(wèn)題的質(zhì)量需要改進(jìn)。 R-NET僅適用于一小段。給定一個(gè)更大的段落或許多小段落,這個(gè)模型通常需要很長(zhǎng)時(shí)間,并且以可能的跨度作為答案返回,這可能根本沒(méi)有任何意義。
使用SynNet模型進(jìn)行Finetuning的優(yōu)點(diǎn)和缺點(diǎn)
優(yōu)點(diǎn)
在NewsQA數(shù)據(jù)集上使用SynNet模型非常簡(jiǎn)單。它還在NewsQA數(shù)據(jù)集上生成了很好的問(wèn)答組合。
缺點(diǎn)
SynNet模型的使用非常有限。很難在自定義段落/文本上運(yùn)行打開的現(xiàn)有代碼。它需要大量的手動(dòng)數(shù)據(jù)處理,并且這個(gè)打開的GitHub鏈接的步驟并不清楚。因此,我們無(wú)法在我們的測(cè)試書語(yǔ)料庫(kù)上對(duì)其進(jìn)行評(píng)估。
使用OpenNMT模型進(jìn)行微調(diào)優(yōu)的優(yōu)點(diǎn)和缺點(diǎn)
優(yōu)點(diǎn)
使用OpenNMT模型,我們能夠在沒(méi)有任何額外訓(xùn)練數(shù)據(jù)的情況下,獲得迄今為止最精確的小眾領(lǐng)域結(jié)果,以接近完全監(jiān)督的MRC系統(tǒng)性能。 OpenNMT分兩個(gè)階段工作:
答案綜合:給出一段文字,生成一個(gè)答案。
問(wèn)題綜合:給出一個(gè)文本段落和一個(gè)答案,產(chǎn)生一個(gè)問(wèn)題。
一旦我們從一個(gè)新領(lǐng)域獲得生成的問(wèn)答組合,我們還可以在這些問(wèn)答組合上訓(xùn)練一個(gè)Seq2Seq模型,用以從MRC中生成更多像人類一樣的對(duì)話式AI方法。
缺點(diǎn)
OpenNMT模型培訓(xùn)代碼不可用于開源。它只適用于一小段。給定一個(gè)更大的段落或許多小段落,這個(gè)模型通常需要很長(zhǎng)時(shí)間,并且以可能的跨度作為答案返回,這可能根本沒(méi)有任何意義。
結(jié)論
在這篇博文中,我們展示了我們?nèi)绾问褂肈LVM來(lái)訓(xùn)練和比較不同的MRC模型進(jìn)行遷移學(xué)習(xí)。我們?cè)u(píng)估了四種MRC算法,并通過(guò)使用每種模型為語(yǔ)料庫(kù)創(chuàng)建問(wèn)答模型來(lái)比較它們的性能。在這篇文章中,我們展示了使用遷移學(xué)習(xí)選擇相關(guān)數(shù)據(jù)的重要性。這表明,考慮到任務(wù)和特定領(lǐng)域的特征,學(xué)習(xí)適當(dāng)?shù)臄?shù)據(jù)選擇措施的性能優(yōu)于現(xiàn)成的指標(biāo)。 MRC方法給了AI更多的理解力,但是MRC算法仍然不能真正理解內(nèi)容。例如,它不知道“英國(guó)搖滾樂(lè)隊(duì)酷玩樂(lè)團(tuán)”究竟是什么,只知道它是超級(jí)碗相關(guān)問(wèn)題的答案。有許多自然語(yǔ)言處理應(yīng)用程序需要能夠?qū)⒅R(shí)遷移到新的任務(wù)的模型,并通過(guò)人類理解來(lái)適應(yīng)新的領(lǐng)域,我們認(rèn)為這僅僅是文本遷移學(xué)習(xí)之旅的開始。
標(biāo)簽: linux 代碼 電子郵件 網(wǎng)絡(luò)
版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。