<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          基于Seq2Seq模型自動生成春聯(lián)

          共 4619字,需瀏覽 10分鐘

           ·

          2022-01-22 10:12

          f3488684246447e2d29a9c8211674285.webp

          向AI轉(zhuǎn)型的程序員都關(guān)注了這個號??????

          機器學(xué)習(xí)AI算法工程?? 公眾號:datayx



          一、【數(shù)據(jù)集構(gòu)造】

          詩詞歌句屬于自然語言一部分,對于計算機來說自然需要對數(shù)據(jù)進行數(shù)字化處理。其中步驟主要分成分詞、編碼、數(shù)據(jù)集輸入輸出構(gòu)造。


          1、分詞方面

          傳統(tǒng)自然語言處理在分詞方面使用“詞”為劃分粒度,以此來增加字間的關(guān)系,常見的編碼包,比如jieba分詞等。在數(shù)據(jù)集構(gòu)造的時候,本文想到詩詞與現(xiàn)代語言相比,更加凝練 ,一字可以有多義,比如“備”字,可以有“準(zhǔn)備”、“具備”、”周全“這些意思,因此在詩詞文本上采用了”字“為粒度的方式進行劃分。而且這種方式,在代碼上也好實現(xiàn)一些。


          2、編碼方面

          分布式編碼起源于Harris的分布假說,它認(rèn)為某個單詞的含義可以由上下文進行聯(lián)合表示,認(rèn)為相似的詞會出現(xiàn)于相同語境(上下文)。本文出于詩詞中存在一定的語義關(guān)系,前后聯(lián)系的考慮,為了保留字間關(guān)聯(lián),本文使用了分布式編碼的方式,使用Word2Vec的方式構(gòu)建字向量,對漢字進行數(shù)字化。


          3、數(shù)據(jù)輸入輸出安排

          輸入輸出數(shù)據(jù)集分成四個部分,與后面模型結(jié)構(gòu)相關(guān):Encoder_inputs、Encoder_outputs、Decoder_inputs和Decoder_outputs,我們先來了解數(shù)據(jù),后面模型部分會進行詳細介紹劃分原因。


          第一、二部分Encoder部分

          是為了訓(xùn)練一個上聯(lián)生成模型Encoder,需要構(gòu)造數(shù)據(jù)的輸入encoder_inputs和encoder_outputs。為了增強句間的字的語序特征,本文提出使用”1:N”的方式,根據(jù)時序?qū)υ娋溥M行拆分,構(gòu)造長度相同的數(shù)據(jù)集詩句。具體表現(xiàn)為下圖1。


          9b382010eec39c25354d6387a48406ce.webp



          ?按照時序不同時刻輸入的內(nèi)容不同,字間相互錯落一個時間間隔,一行將作為一個輸入,對應(yīng)下一個字為其輸出,這樣就仿真人們作詩的過程,一字一字生成詩句。使用“X”來表示空格,最后一個完整句對應(yīng)輸出為“END”表示結(jié)束。這樣,一個N字詩句就將生成(n+1)*n的句子,大大增加了數(shù)據(jù)集大小,同時也強調(diào)了字在句子中的時序特征。比如輸入為:“XXXX白”,輸出對應(yīng)“日”;下一個輸入就是“XXX白日”,對應(yīng)輸出為“依”;如此構(gòu)造出多個輸入輸出。


          第三、四部分?jǐn)?shù)據(jù)輸出Decoder

          是為了訓(xùn)練一個能根據(jù)上聯(lián)encoder部分,而對應(yīng)產(chǎn)生下聯(lián)的模型。下聯(lián)模型需要輸入和上聯(lián)模型思想不同,這時候我們輸入是下聯(lián)對應(yīng)每一個字的前一個單字和上聯(lián)的輸出,將二者聯(lián)合起來構(gòu)建一個輸入向量;而對應(yīng)輸出應(yīng)該是真正對應(yīng)位置的單字;所以輸入部分也需要錯落一個時間間隔。這樣說比較抽象,我們舉例來說明,如下圖2所示。


          a640cb78a7a2f4f2f17dafd105a1448d.webp



          ?可以看到,上聯(lián)encoder在Decoder模型的輸入為“白日依山盡”,同時在Decoder模型中輸入包括錯落一個時間(或者說字)的單字,如“X”,對應(yīng)輸出應(yīng)該是“黃”。其中“X”在這里表示句子的開始,“END”表示結(jié)束。


          ? ? ? ?這樣做的目的是為了仿照人們吟詩作對的思考過程,需要考慮上聯(lián)的關(guān)系,同時也要考慮前一個字對后一個字生成的影響,其中可能包括平仄關(guān)系(這里沒有強調(diào),只是個猜想)。


          二、【模型搭建】

          ? ? ? ? ?在構(gòu)建模型的時候,本文主要思量到的是數(shù)據(jù)的關(guān)系。首先需求上,我們研究的是自然語言,具有時序特點;其次,我們的自然語言處理方面需要聯(lián)系到前后的關(guān)系;最后,要考慮人們吟詩作對的過程的模仿。


          ? ? ? ? 根據(jù)這些思想,本文參考了大量自然語言處理方面的應(yīng)用資料,比如:模型翻譯、英文小說自動生成等方面(本來應(yīng)該貼上鏈接的,現(xiàn)在一回頭找不到資料了,感謝各位大大……跪謝……),想到將翻譯模型移植至古詩文生成模型中,框架是Seq2Seq模型,主要模型被我分成兩個部分:連字成句模型 和 連句成對模型。模型的整體架構(gòu)如下圖3所示。


          59e2e05276a310dc9e7d87bd49b7a47f.webp



          1、連字成句模型

          ? ? ? 這個部分屬于Seq2Seq中Encoder部分,主要用于“首聯(lián)”的生成。顧名思義,功能是用戶輸入一個單字,對應(yīng)模型能夠訓(xùn)練生成一整句最優(yōu)句子。


          ? ? ?詩詞屬于自然語言處理的一部分,具有前后的聯(lián)系關(guān)系,所以選用時序關(guān)系的模型最好,常見有RNN。由于RNN在處理長序列句子中存在“梯度爆炸”和“梯度消失”的問題,所以本文選用的是LSTM模型,屬于RNN的一種升級模式。同時,又由于一個LSTM只能保證一個單向語義聯(lián)系,所以為了保留前后的關(guān)系,本文選用了雙向的LSTM,也做BiLSTM。模型如下圖4所示。


          74ebf78791fa46a0da3c6238e141490f.webp



          舉例說明,聯(lián)系上部分?jǐn)?shù)據(jù)構(gòu)造方面,輸入的X1、X2……Xn是1:N的時序拆解內(nèi)容,輸出的Yn為對應(yīng)時序下的單字輸出。比如,輸入”XXXX白“,對應(yīng)輸出Yn為”日”。


          2、連句成對模型

          ? ? ? 連句成對模型功能是生成下聯(lián),屬于Seq2Seq中Decoder部分。與上聯(lián)模型不同的是,我們這時候輸出是一整個句子(也就是把LSTM模型中每個時序的輸出都輸出)。模型結(jié)構(gòu)如下圖5所示。


          ebf2fbe68bac1e0837264beafe490391.webp



          首先介紹的是圖中Decoder的下面部分,本文把它稱為是Decoder_encoder,也就是對下聯(lián)的輸入進行編碼的意思。


          ? ? ? ? 本文參考人們吟詩作對的方式,認(rèn)為下聯(lián)的每個字的選擇生成,和當(dāng)前字前面的句子以及上聯(lián)信息相關(guān)。所以Decoder_encoder部分我們選用了LSTM,生成前序向量;之后為了聯(lián)系上聯(lián),我們想到上聯(lián)中每個字實際應(yīng)該側(cè)重點各有不同,所以引入了Attention模型,將上聯(lián)生成的句子進行Attention權(quán)值重分配,使得上聯(lián)對下聯(lián)每個字的影響權(quán)值各不相同。


          ? ? ? ? 比如“白日依山盡”為了生成”黃“字,顯然”白“字的權(quán)值更應(yīng)該大一些。前序序列的編碼向量和Attention下的上聯(lián)向量,本文將其進行縱向連接,也就是圖上顯示那樣。兩種顏色的拼接,將作為Decoder第二部分的輸入。


          ? ? ? ?其次是attention計算結(jié)構(gòu),如圖6所示。


          ab1330d60b504eb2bff6d72542ef06d4.webp


          以“白日依山盡,黃河入海流”為例。


          ? ? ?本文設(shè)Encoder的輸出維度為h1,設(shè)Decoder編碼encode層的輸出維度為h2,Attention后的輸出維度為out。


          ? ? ?因此,Encoder對“白日依山盡”進行編碼獲得大小為[5,h1]的隱藏層輸出Y1,此時Y1。Decoder對“黃河入海流”進行編碼獲得大小為[5, h2]的隱藏層輸出Y2。


          ? ? ? 之后,我們需要隨機生成權(quán)重矩陣Wq、(大小為[h2, out])、Wk、Wv(大小為[h1, out]),將Wq和Y2相乘生成大小為[5,out]的Query值;同理,Wk和Wv與Y1相乘生成大小為[5, out]的Keys和Values值,如圖7所示。


          0e8e79a7327eb318ef5c532ece65ada0.webp


          ? ?然后,對Keys矩陣進行轉(zhuǎn)置變成[out, 5],通過點積方式計算出Query與Keys中各個key的得分Scores,矩陣得到大小為[5, 5],如圖8所示。


          c6c8b9458978aeaec3b10ae293c2c574.webp


          為了防止產(chǎn)生過大的方差,因此需要對得分矩陣Scores進行縮放,除以維度的平方得到Scores’,大小為[5, 5]。將縮放后的Scores通過SoftMax函數(shù)進行概率轉(zhuǎn)換,得到最終Query與Keys中每個Key的權(quán)重Probs。


          ? ? ? ? 最后,將Probs與Values進行點乘,獲得大小為[5, out]的Attention值,如圖9所示。



          87d68506c415b85874a3929b5cb22c75.webp


          最后介紹的是圖中Decoder的第二部分,本文稱之為Decoder_infer,用于生成最后的句子。


          ? ? ? ? Decoder_infer和一個SoftMax層相連,是為了讓模型在我們的漢字字典里選出最有可能的生成字結(jié)果。前面的監(jiān)督學(xué)習(xí)和Attention結(jié)果相結(jié)合已經(jīng)生成了對應(yīng)的組合輸入向量,這時候我們就可以使用LSTM,將模型的每個神經(jīng)元的輸出打開,結(jié)合SoftMax生成最佳生成字,從而生成完整下聯(lián)。值得注意的是,這一部分的模型在訓(xùn)練完成后,下聯(lián)需要以一個鏈?zhǔn)降姆绞竭M行使用。如下圖10所示。


          9b33d1bd286a24d80758409666d95e41.webp


          三、【實驗結(jié)果】

          本文使用python keras框架下編程。實驗數(shù)據(jù)來源于一位名叫馮重樸_梨味齋散葉的博主的新浪博客,選用數(shù)據(jù)集中長度大小為7的對聯(lián)作為本實驗數(shù)據(jù)。下面將展示實驗?zāi)P秃蛯嶒灲Y(jié)果。


          相關(guān)代碼,70萬條對聯(lián)數(shù)據(jù)集

          獲取方式:

          關(guān)注微信公眾號 datayx ?然后回復(fù)?對聯(lián)?即可獲取。



          6bf67f3d68c9b9020469b6b7aed16e30.webp


          8290b0f900a6210121ce643b545c9a86.webp



          對聯(lián)體驗鏈接

          https://ai.binwang.me/couplet/


          eb3a6f77e4ba2a3ffbd44fce521f38b4.webp



          c918558dbc10069ccd6fc85061a83af5.webp



          機器學(xué)習(xí)算法AI大數(shù)據(jù)技術(shù)

          ?搜索公眾號添加:?datanlp

          長按圖片,識別二維碼




          閱讀過本文的人還看了以下文章:


          TensorFlow 2.0深度學(xué)習(xí)案例實戰(zhàn)


          基于40萬表格數(shù)據(jù)集TableBank,用MaskRCNN做表格檢測


          《基于深度學(xué)習(xí)的自然語言處理》中/英PDF


          Deep Learning 中文版初版-周志華團隊


          【全套視頻課】最全的目標(biāo)檢測算法系列講解,通俗易懂!


          《美團機器學(xué)習(xí)實踐》_美團算法團隊.pdf


          《深度學(xué)習(xí)入門:基于Python的理論與實現(xiàn)》高清中文PDF+源碼


          《深度學(xué)習(xí):基于Keras的Python實踐》PDF和代碼


          特征提取與圖像處理(第二版).pdf


          python就業(yè)班學(xué)習(xí)視頻,從入門到實戰(zhàn)項目


          2019最新《PyTorch自然語言處理》英、中文版PDF+源碼


          《21個項目玩轉(zhuǎn)深度學(xué)習(xí):基于TensorFlow的實踐詳解》完整版PDF+附書代碼


          《深度學(xué)習(xí)之pytorch》pdf+附書源碼


          PyTorch深度學(xué)習(xí)快速實戰(zhàn)入門《pytorch-handbook》


          【下載】豆瓣評分8.1,《機器學(xué)習(xí)實戰(zhàn):基于Scikit-Learn和TensorFlow》


          《Python數(shù)據(jù)分析與挖掘?qū)崙?zhàn)》PDF+完整源碼


          汽車行業(yè)完整知識圖譜項目實戰(zhàn)視頻(全23課)


          李沐大神開源《動手學(xué)深度學(xué)習(xí)》,加州伯克利深度學(xué)習(xí)(2019春)教材


          筆記、代碼清晰易懂!李航《統(tǒng)計學(xué)習(xí)方法》最新資源全套!


          《神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)》最新2018版中英PDF+源碼


          將機器學(xué)習(xí)模型部署為REST API


          FashionAI服裝屬性標(biāo)簽圖像識別Top1-5方案分享


          重要開源!CNN-RNN-CTC 實現(xiàn)手寫漢字識別


          yolo3 檢測出圖像中的不規(guī)則漢字


          同樣是機器學(xué)習(xí)算法工程師,你的面試為什么過不了?


          前海征信大數(shù)據(jù)算法:風(fēng)險概率預(yù)測


          【Keras】完整實現(xiàn)‘交通標(biāo)志’分類、‘票據(jù)’分類兩個項目,讓你掌握深度學(xué)習(xí)圖像分類


          VGG16遷移學(xué)習(xí),實現(xiàn)醫(yī)學(xué)圖像識別分類工程項目


          特征工程(一)


          特征工程(二) :文本數(shù)據(jù)的展開、過濾和分塊


          特征工程(三):特征縮放,從詞袋到 TF-IDF


          特征工程(四): 類別特征


          特征工程(五): PCA 降維


          特征工程(六): 非線性特征提取和模型堆疊


          特征工程(七):圖像特征提取和深度學(xué)習(xí)


          如何利用全新的決策樹集成級聯(lián)結(jié)構(gòu)gcForest做特征工程并打分?


          Machine Learning Yearning 中文翻譯稿


          螞蟻金服2018秋招-算法工程師(共四面)通過


          全球AI挑戰(zhàn)-場景分類的比賽源碼(多模型融合)


          斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)


          python+flask搭建CNN在線識別手寫中文網(wǎng)站


          中科院Kaggle全球文本匹配競賽華人第1名團隊-深度學(xué)習(xí)與特征工程



          不斷更新資源

          深度學(xué)習(xí)、機器學(xué)習(xí)、數(shù)據(jù)分析、python

          ?搜索公眾號添加:?datayx??

          瀏覽 165
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  黄色大尺度视频 | 亚洲AV无码一区二区三区动漫 | 欧美精品国产动漫 | 成人免费看豆花视频 | www.最全三级在线 |