日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

一次竞赛案例的分享——基于正则表达式的深度学习应用

發布時間:2025/1/21 135 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一次竞赛案例的分享——基于正则表达式的深度学习应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文由北郵@愛可可-愛生活?老師推薦,阿里云云棲社區組織翻譯。

以下為譯文:


最近我決定參加CrowdAnalytix主辦的 Extraction of product attribute values競賽,在這個網站上公司可以將數據處理的問題以外包的方式交給有能力處理的人。一直以來,我擅長的是圖像和視頻數據處理,而這次,我嘗試著處理文本。 問題是從不同長度的產品標題和產品描述中提取出制造商零件編號(MPN),這是一個標準的正則表達式問題。在簡單瀏覽數據之后,我發現大約有54000個訓練樣本。因此,我決定使用深度學習的方法。在這我公布我在排行榜上排名第四的方法。

免責申明

由于這是一個盈利的方案,根據CrowdAnalytix的條款,我只能將方法的大致思想分享出來。

問題

在競賽的網站上,賽題是這樣的“請使用正則表達式從產品標題或產品描述中提取出制造商零件編號”。雖然我不知道需要什么樣的正則規則,但是我知道是從長文本中提取數據。以下就是一個標題的樣例:

EVGA NVIDIA GeForce GTX 1080 Founders Edition 8gb Gddr5x 08GP46180KR

接下來我只是想從產品標題和描述中提取出MPN “08GP46180KR”

下圖是一個匹配郵箱的案例,使用正則表達式的要旨其實就是對想要找的文本按照一定規則硬編碼,然后再去匹配。

在這里,正則表達式圍繞的預定義字符是“@”和“.”。而深度學習的魅力則是經過大量的訓練,我們可以學習出正則表達式,而不是硬編碼,這也是我采取的方法。

數據設置

用來訓練的54000條數據有一下的參數[id,產品標題,產品描述,mpn]。用來測試的數據除了沒有mpn屬性,其他和訓練集一樣。通過對數據的檢查,我發現在大多數情況下,MPN要么存在于產品標題中,要么存在于產品描述中。數據中的干擾是數據處理過程中的一大難題,這些干擾往往和MPN很像,比如在顯卡單元中,Gddr5x看起來就很像MPN。因為問題是提取MPN,我設置的輸入包括產品名稱、描述,設定的輸出為MPN。

現在我已經知道輸入輸出是什么了,我需要決定一些映射來使用神經網絡。由于MPN 、HTML片段以及其他一些奇怪字符的出現,這不是一個常規的自然語言處理問題。因此,像word2vec 類似的解決方案是不合適的(如果我錯了,請糾正我)。我很幸運有一個攀巖的朋友,Joseph Prusa,一直與性格和情感分析工作(Prusa和khoshgoftaar,2014)。他非常親切地分享了他的代碼,并針對我的問題做了一些訂制。于是,我整合出了我的解決方案。

映射的過程將每一個字符變換成一個8位的向量。舉個例子,“EVGA NVIDIA GeForce GTX 1080 Founders Edition 8gb Gddr5x 08GP46180KR”可以用下圖表示:

另外一個問題是,輸入(標題和描述)的長度是各不相同的。因此我需要采取一些方法,使得它們長度統一,這樣才能輸入到網絡中。我的第一步是可視化的所有輸入的長度分布。


基于這個分布,我設置最大長度為2000,因為它包括大多數的情況。并避免了很長的異常值。首先,我將輸入按照上面說的方法進行處理,如果長度不夠兩千的,后面會被補上0。在輸入的長度大于2000的情況,如果MPN在前2000中,則不會造成影響,而如果不是這樣,則MPN會丟失(在數據集中非常不常見)。這樣一來,每一個輸入都被歸一化成了8*2000的圖。

問題構想

如果我們要用神經網絡的向后傳播算法,接下來的問題就是什么是合適的輸出和損失函數。最自然的選擇似乎是輸出向量格式的MPN。一般來說以Mean-Squared Error 作為損失函數是無監督學習生成模型的常規做法。而且這么做在技術上沒有難度。

但是,我決定采用一個不同的方式。我把輸出定義為兩個獨熱二進制向量,每一個的長度是最大長度(2000)。其中第一個向量表示MPN的開始索引,第二個向量表示MPN的結束索引。然后損失是兩個向量分類交叉熵的總和。

給出輸出之后,后臺會運行一個輔助方法。該方法使用之前的索引作為輸入,提取出MPN的向量表現形式,然后將向量轉化為字符串表示形式,這也就是最終的輸出。如果MPN不存在,結果就是兩個向量最后的那個。

模型結構

既然數據設置完了,目標也明確了,接下來要做的事情就是構建一個模型來完成之前設計的任務。我嘗試了包括深度卷積神經網絡在內的許多種神經網絡。這些方法效果都不錯,但是并不能達到我的預期。

幸運的是 Google DeepMind剛發表了一篇文章,介紹了他們的新模型WaveNet ,這個模型正是我想要的。這樣的模型因其使用多層的卷積操作且沒有進行池化而有趣。由于每一個隨后的層都使用了擴張操作,該模型在保證參數數量在合理的范圍內的同時能得到有巨大容納域的濾波器(請參考下圖的紅色部分,圖片來自 Neural Machine Translation in Linear Time)。


我最終模型思想是從輸入提取一組基本特征,通過一系列擴大的卷積,然后用softmax激活函數分支兩個卷積過濾器,最終預測預測開始和結束索引。更詳細地,該模型如下:

  • 使用1D卷積來從不同長度的數據中提取基本特征。這些展現不同長度的單字符到多字符的轉換。這些都被串起來輸送給下一層網絡。
  • 接下來,這些表示形式被送到一個個塊中處理。這些塊用Batch Normalization, Rectified Linear Units來處理。這允許網絡基于由于擴大的卷積而覆蓋幾乎整個輸入的范圍來選擇最佳匹配的開始和結束索引。
  • 最后,兩個使用softmax激活函數的1D卷積濾波器在剩余輸出上執行。最大參數表示開始和結束位置的最高概率的索引。

模型架構如下圖所示,顯示了模型的主要特征:

性能

訓練完之后,模型在訓練集上展現出了近乎完美的表現,對于驗證集達到了90%的準確率!在排行榜上也達到了84%的準確率。

當我準備提交的時候,我發現由于樣本數量太少模型以非常快的速度過擬合數據。我知道,對于54000個樣本來說,從中學習是非常困難的。但是我對我的模型有信心,如果有幾十萬條數據,我的解決方案會有更高的排名。由于競賽我遲到了,所以在最后的提交中,我選擇了較低的學習率,也只進行幾輪學習。如果還有時間的話,我會嘗試去探索數據增強和模型規則化技術來讓模型更完善,同時也可以防止過擬合。此外,訓練其他文本可能是一個成功的策略。暴力法會使最大長度參數略有增加,這可能會給我們帶來一些邊際的改進,但代價是非常高的計算成本。

結論

考慮到以前我從來沒有遇到這樣類型的問題,本次的競賽是令人滿意且充滿挑戰的。首先要說一聲抱歉,因為我要為深度學習打廣告了。看起來好像這個領域和深度學習沒太多關系,但是應用深度學習確實非常有趣而且效果不錯。這也體現了深度學習應用的普適性。希望這次分享能幫助到遇到類似問題的童鞋。

引用

Prusa, J. D., & Khoshgoftaar, T. M. (2014). Designing a Better Data Representation for Deep Neural Networks and Text Classification.


數十款阿里云產品限時折扣中,趕緊點擊領劵開始云上實踐吧!

文章原標題《Deep Learning for RegEx》,作者:Daniel C. LaCombe, Jr

文章為簡譯,更為詳細的內容,請查看原文

總結

以上是生活随笔為你收集整理的一次竞赛案例的分享——基于正则表达式的深度学习应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。