本發(fā)明涉及計算機(jī),尤其涉及一種序列池化方法、裝置、電子設(shè)備及存儲介質(zhì)。
背景技術(shù):
1、程序語言數(shù)據(jù)作為一種類似于自然語言的數(shù)據(jù),一般可以通過序列的形式存在。目前用神經(jīng)網(wǎng)絡(luò)對程序語言進(jìn)行處理時,由于程序語言長序列的存在通常會導(dǎo)致很大的顯存壓力,如果序列長度過長,則可能導(dǎo)致在編碼器階段出現(xiàn)顯存溢出。而相關(guān)技術(shù)對程序語言長序列進(jìn)行縮短處理的手段存在信息的損失,影響輸出結(jié)果的準(zhǔn)確性。
技術(shù)實現(xiàn)思路
1、為了解決上述問題,本發(fā)明實施例提供了一種序列池化方法、裝置、電子設(shè)備及存儲介質(zhì),以至少解決相關(guān)技術(shù)對程序語言長序列進(jìn)行縮短處理的手段存在信息的損失的問題。
2、本發(fā)明的技術(shù)方案是這樣實現(xiàn)的:
3、一方面,本發(fā)明實施例提供了一種序列池化方法,該方法包括:
4、確定第一程序語言序列中的每個向量與相鄰向量的相似度;所述第一程序語言序列中的每個向量表征一個詞法單元token;
5、根據(jù)所述相似度從小到大的順序?qū)λ龅谝怀绦蛘Z言序列中的所有向量進(jìn)行排序;
6、從排序后的所述第一程序語言序列中的相似度最小的向量開始,獲取設(shè)定數(shù)量的向量的索引值;所述設(shè)定數(shù)量為所述第一程序語言序列對應(yīng)的池化序列的長度;
7、將所述設(shè)定數(shù)量的向量的索引值按照從小到大的順序進(jìn)行排序,得到第一索引序列;
8、基于所述第一索引序列,確定所述第一程序語言序列的池化序列。
9、在上述方案中,所述基于所述第一索引序列,確定所述第一程序語言序列對應(yīng)的池化序列,包括:
10、基于所述第一程序語言序列的向量位置和序列長度,對所述第一索引序列進(jìn)行索引值的預(yù)填充,得到第二索引序列;所述第二索引序列與所述第一程序語言序列的序列長度相同;
11、從所述第一索引序列中提取索引值替換所述第二索引序列中預(yù)填充的索引值,得到第三索引序列;
12、將所述池化序列的索引值映射到所述第三索引序列中,得到第四索引序列;
13、基于所述第四索引序列中的索引值和所述第一程序語言序列的向量,確定所述池化序列的向量。
14、在上述方案中,所述從所述第一索引序列中提取索引值替換所述第二索引序列中預(yù)填充的索引值,得到第三索引序列,包括:
15、確定當(dāng)前線程對應(yīng)的第一索引值在所述第二索引序列中的序號,所述序號表征所述第一索引值在所述第二索引序列中的位置;所述第二索引序列中的每個索引值對應(yīng)一個線程;
16、遍歷所述第一索引序列中的索引值,若所述第一索引值的序號大于當(dāng)前遍歷的第二索引值,且所述第二索引值為所述第一索引序列的遍歷終點,則使用所述第二索引值替換所述第二索引序列中的第一索引值;
17、若所述第一索引值的序號等于當(dāng)前遍歷的第二索引值,則使用所述第二索引值替換所述第二索引序列中的第一索引值。
18、在上述方案中,所述方法還包括:
19、若當(dāng)前遍歷的第二索引值不等于所述第一索引值的序號,且所述第二索引值不是所述第一索引序列的遍歷終點,則獲取第一差值和第二差值;所述第一差值表征當(dāng)前遍歷的第二索引值與所述第一索引值的序號的差值的絕對值,所述第二差值表征所述當(dāng)前線程在上一次遍歷時得到的第一差值;
20、若所述第一差值大于所述第二差值,且所述第一索引值的序號大于第三索引值,則使用所述第二索引值替換所述第二索引序列中的第一索引值;所述第三索引值表征所述第一索引序列中的所述第二索引值的前一個索引值;
21、若所述第一差值等于所述第二差值,則使用所述第二索引值替換所述第二索引序列中的第一索引值;
22、若所述第一差值大于所述第二差值,且所述第一索引值的序號小于或等于所述第三索引值,則使用所述第三索引值替換所述第二索引序列中的第一索引值。
23、在上述方案中,所述方法還包括:
24、若當(dāng)前遍歷的第二索引值為所述第一索引序列的遍歷起點,或所述第一差值小于所述第二差值,則將當(dāng)前遍歷得到的所述第一差值設(shè)置為下一次遍歷時的第二差值。
25、在上述方案中,所述基于所述第四索引序列中的索引值和所述第一程序語言序列的向量,確定所述池化序列的向量,包括:
26、確定當(dāng)前線程遍歷的第一元素在所述第一程序語言序列中對應(yīng)的第一向量,所述第一程序語言序列中的每個向量包括多個元素,每個向量中的多個元素由一個線程進(jìn)行遍歷;
27、確定所述第一向量在所述第四索引序列中對應(yīng)的第四索引值;
28、基于所述第一元素在所述第一向量中的相對位置,確定所述第一程序語言序列中都對應(yīng)第四索引值的向量中的位于所述相對位置的元素;
29、基于所述第一程序語言序列中都對應(yīng)第四索引值的向量中的位于所述相對位置的元素,確定所述池化序列的第二向量中位于所述相對位置的元素;所述第二向量與所述第四索引序列中的第四索引值存在映射關(guān)系。
30、在上述方案中,所述獲取設(shè)定數(shù)量的向量的索引值,包括:
31、基于預(yù)設(shè)字典確定所述設(shè)定數(shù)量的向量中的每個向量的索引值;所述預(yù)設(shè)字典存儲有多個token的索引值。
32、另一方面,本發(fā)明實施例還提供了一種序列池化方法,該方法包括:
33、基于第一模型的多層編碼器中的神經(jīng)網(wǎng)絡(luò)對第二程序語言序列進(jìn)行特征提?。凰龅诙绦蛘Z言序列包括多個詞法單元token;所述多層編碼器的每一層編碼器包括神經(jīng)網(wǎng)絡(luò)和池化層;
34、基于所述多層編碼器中的池化層對經(jīng)過當(dāng)前層神經(jīng)網(wǎng)絡(luò)特征提取后的所述第二程序語言序列進(jìn)行池化處理,并將池化處理結(jié)果輸入至下一層神經(jīng)網(wǎng)絡(luò)進(jìn)行特征提??;其中,每一層神經(jīng)網(wǎng)絡(luò)的輸出為當(dāng)前池化層的輸入,每一層池化層的輸出為下一層神經(jīng)網(wǎng)絡(luò)的輸入;所述池化層執(zhí)行如第一方面所述的序列池化方法進(jìn)行池化處理;
35、獲取最后一層編碼器的池化層輸出的池化序列。
36、在上述方案中,所述第一模型還包括嵌入層,所述方法還包括:
37、基于預(yù)設(shè)字典確定源碼數(shù)據(jù)中的函數(shù)對應(yīng)的第五索引序列;所述函數(shù)包括多個token,所述預(yù)設(shè)字典存儲有多個token的索引值;
38、基于所述嵌入層對所述第五索引序列進(jìn)行嵌入編碼,得到所述第二程序語言序列。
39、另一方面,本發(fā)明實施例提供了一種分類方法,該方法包括:
40、基于第二模型的多層編碼器中的神經(jīng)網(wǎng)絡(luò)對第三程序語言序列進(jìn)行特征提?。凰龅谌绦蛘Z言序列包括多個詞法單元token;所述多層編碼器的每一層編碼器包括神經(jīng)網(wǎng)絡(luò)和池化層;
41、基于所述多層編碼器中的池化層對經(jīng)過當(dāng)前層神經(jīng)網(wǎng)絡(luò)特征提取后的所述第三程序語言序列進(jìn)行池化處理,并將池化處理結(jié)果輸入至下一層神經(jīng)網(wǎng)絡(luò)進(jìn)行特征提??;其中,每一層神經(jīng)網(wǎng)絡(luò)的輸出為當(dāng)前池化層的輸入,每一層池化層的輸出為下一層神經(jīng)網(wǎng)絡(luò)的輸入;所述池化層執(zhí)行如第一方面所述的方法進(jìn)行池化處理;
42、基于所述第二模型的分類器對最后一層編碼器的神經(jīng)網(wǎng)絡(luò)輸出的特征信息進(jìn)行分類,得到所述第三程序語言序列的分類結(jié)果。
43、在上述方案中,所述第一模型還包括嵌入層,所述方法還包括:
44、基于預(yù)設(shè)字典確定源碼數(shù)據(jù)中的函數(shù)對應(yīng)的第六索引序列;所述函數(shù)包括多個token,所述預(yù)設(shè)字典存儲有多個token的索引值;
45、基于所述嵌入層對所述第六索引序列進(jìn)行嵌入編碼,得到所述第三程序語言序列。
46、另一方面,本發(fā)明實施例提供了一種代碼生成方法,該方法包括:
47、基于第三模型的多層編碼器中的神經(jīng)網(wǎng)絡(luò)對第四程序語言序列進(jìn)行特征提??;所述第四程序語言序列包括多個詞法單元token;所述多層編碼器的每一層編碼器包括神經(jīng)網(wǎng)絡(luò)和池化層;
48、基于所述多層編碼器中的池化層對經(jīng)過當(dāng)前層神經(jīng)網(wǎng)絡(luò)特征提取后的所述第四程序語言序列進(jìn)行池化處理,并將池化處理結(jié)果輸入至下一層神經(jīng)網(wǎng)絡(luò)進(jìn)行特征提?。黄渲?,每一層神經(jīng)網(wǎng)絡(luò)的輸出為當(dāng)前池化層的輸入,每一層池化層的輸出為下一層神經(jīng)網(wǎng)絡(luò)的輸入;所述池化層執(zhí)行如第一方面所述的方法進(jìn)行池化處理;
49、基于所述第三模型的解碼器對所述多層編碼器的輸出結(jié)果進(jìn)行反池化,得到目標(biāo)程序語言序列;
50、基于預(yù)設(shè)字典將所述目標(biāo)程序語言序列轉(zhuǎn)換為程序代碼。
51、在上述方案中,所述基于所述第三模型的解碼器對所述多層編碼器的輸出結(jié)果進(jìn)行反池化,包括:
52、從所述多層編碼器的最底層編碼器開始,依次確定每一層編碼器對應(yīng)的注意力值;所述注意力值表征所述預(yù)設(shè)字典中的每個token對應(yīng)的生成概率組成的向量;其中,當(dāng)前層編碼器對應(yīng)的注意力值等于第一注意力值和第二注意力值的均值;所述第一注意力值基于當(dāng)前層編碼器輸出的池化序列確定;所述第二注意力值為將長度擴(kuò)展至上一層編碼器對應(yīng)的注意力值的長度的第一注意力;
53、根據(jù)第一層編碼器對應(yīng)的注意力值,確定所述目標(biāo)程序語言序列。
54、在上述方案中,所述方法還包括:
55、基于上一層編碼器對應(yīng)的第四索引序列,對所述第一注意力值進(jìn)行元素填充,得到所述第二注意力值。
56、另一方面,本發(fā)明實施例提供了一種序列池化裝置,該裝置包括:
57、第一確定模塊,用于確定第一程序語言序列中的每個向量與相鄰向量的相似度;所述第一程序語言序列中的每個向量表征一個詞法單元token;
58、第一排序模塊,用于根據(jù)所述相似度從小到大的順序?qū)λ龅谝怀绦蛘Z言序列中的所有向量進(jìn)行排序;
59、第一獲取模塊,用于從排序后的所述第一程序語言序列中的相似度最小的向量開始,獲取設(shè)定數(shù)量的向量的索引值;所述設(shè)定數(shù)量為所述第一程序語言序列對應(yīng)的池化序列的長度;
60、第二排序模塊,用于將所述設(shè)定數(shù)量的向量的索引值按照從小到大的順序進(jìn)行排序,得到第一索引序列;
61、第二確定模塊,用于基于所述第一索引序列,確定所述第一程序語言序列的池化序列。
62、另一方面,本發(fā)明實施例還提供了一種序列池化裝置,該裝置包括:
63、第一特征提取模塊,用于基于第一模型的多層編碼器中的神經(jīng)網(wǎng)絡(luò)對第二程序語言序列進(jìn)行特征提取;所述第二程序語言序列包括多個詞法單元token;所述多層編碼器的每一層編碼器包括神經(jīng)網(wǎng)絡(luò)和池化層;
64、第一池化模塊,用于基于所述多層編碼器中的池化層對當(dāng)前層神經(jīng)網(wǎng)絡(luò)提取的所述第二程序語言序列的特征信息進(jìn)行池化處理,并將池化處理結(jié)果輸入至下一層神經(jīng)網(wǎng)絡(luò)進(jìn)行特征提??;其中,每一層神經(jīng)網(wǎng)絡(luò)的輸出為當(dāng)前池化層的輸入,每一層池化層的輸出為下一層神經(jīng)網(wǎng)絡(luò)的輸入;所述池化層執(zhí)行如第一方面所述的方法進(jìn)行池化處理;
65、第二獲取模塊,用于獲取最后一層編碼器的池化層輸出的池化序列。
66、另一方面,本發(fā)明實施例提供了一種分類裝置,該裝置包括:
67、第二特征提取模塊,用于基于第二模型的多層編碼器中的神經(jīng)網(wǎng)絡(luò)對第三程序語言序列進(jìn)行特征提取;所述第三程序語言序列包括多個詞法單元token;所述多層編碼器的每一層編碼器包括神經(jīng)網(wǎng)絡(luò)和池化層;
68、第二池化模塊,用于基于所述多層編碼器中的池化層對當(dāng)前層神經(jīng)網(wǎng)絡(luò)提取的所述第三程序語言序列的特征信息進(jìn)行池化處理,并將池化處理結(jié)果輸入至下一層神經(jīng)網(wǎng)絡(luò)進(jìn)行特征提??;其中,每一層神經(jīng)網(wǎng)絡(luò)的輸出為當(dāng)前池化層的輸入,每一層池化層的輸出為下一層神經(jīng)網(wǎng)絡(luò)的輸入;所述池化層執(zhí)行如第一方面所述的方法進(jìn)行池化處理;
69、分類模塊,用于基于所述第二模型的分類器對最后一層編碼器的神經(jīng)網(wǎng)絡(luò)輸出的特征信息進(jìn)行分類,得到所述第三程序語言序列的分類結(jié)果。
70、另一方面,本發(fā)明實施例提供了一種代碼生成裝置,該裝置包括:
71、第三特征提取模塊,用于基于第三模型的多層編碼器中的神經(jīng)網(wǎng)絡(luò)對第四程序語言序列進(jìn)行特征提??;所述第四程序語言序列包括多個詞法單元token;所述多層編碼器的每一層編碼器包括神經(jīng)網(wǎng)絡(luò)和池化層;
72、第三池化模塊,用于基于所述多層編碼器中的池化層對當(dāng)前層神經(jīng)網(wǎng)絡(luò)提取的所述第四程序語言序列的特征信息進(jìn)行池化處理,并將池化處理結(jié)果輸入至下一層神經(jīng)網(wǎng)絡(luò)進(jìn)行特征提?。黄渲?,每一層神經(jīng)網(wǎng)絡(luò)的輸出為當(dāng)前池化層的輸入,每一層池化層的輸出為下一層神經(jīng)網(wǎng)絡(luò)的輸入;所述池化層執(zhí)行如第一方面所述的方法進(jìn)行池化處理;
73、反池化模塊,用于基于所述第三模型的解碼器對所述多層編碼器的輸出結(jié)果進(jìn)行反池化,得到目標(biāo)程序語言序列;
74、轉(zhuǎn)換模塊,用于基于預(yù)設(shè)字典將所述目標(biāo)程序語言序列轉(zhuǎn)換為程序代碼。
75、另一方面,本發(fā)明實施例提供了一種電子設(shè)備,包括處理器和存儲器,所述處理器和存儲器相互連接,其中,所述存儲器用于存儲計算機(jī)程序,所述計算機(jī)程序包括程序指令,所述處理器被配置用于調(diào)用所述程序指令,執(zhí)行本發(fā)明實施例提供的序列池化方法的步驟。
76、另一方面,本發(fā)明實施例提供了一種計算機(jī)可讀存儲介質(zhì),包括:所述計算機(jī)可讀存儲介質(zhì)存儲有計算機(jī)程序。所述計算機(jī)程序被處理器執(zhí)行時實現(xiàn)如本發(fā)明實施例提供的序列池化方法的步驟。
77、本發(fā)明實施例通過確定第一程序語言序列中的每個向量與相鄰向量的相似度,根據(jù)相似度從小到大的順序?qū)Φ谝怀绦蛘Z言序列中的所有向量進(jìn)行排序,從排序后的第一程序語言序列中的相似度最小的向量開始,獲取設(shè)定數(shù)量的向量的索引值,將設(shè)定數(shù)量的向量的索引值按照從小到大的順序進(jìn)行排序,得到第一索引序列。基于第一索引序列,確定第一程序語言序列的池化序列。其中,第一程序語言序列中的每個向量表征一個token,設(shè)定數(shù)量為第一程序語言序列對應(yīng)的池化序列的長度。本實施例通過計算第一程序語言序列中相鄰向量之間的相似度,將向量根據(jù)相似度進(jìn)行排序,從相似度最小的向量開始,獲取設(shè)定數(shù)量的向量的索引值構(gòu)成第一索引序列,根據(jù)第一索引序列確定第一程序語言序列的池化序列。由于第一索引序列中的索引值對應(yīng)的向量是相似度最小的,因此本實施例在對第一程序語言序列進(jìn)行池化處理時,能夠有效減少顯存壓力的同時,還能夠較大程度的減少信息的損失,使得池化序列保留下更多的信息,保證輸出結(jié)果的準(zhǔn)確性。