iT邦幫忙

2023 iThome 鐵人賽

DAY 6
0
AI & Data

Fast ai 30天系列 第 6

才上課五天就要打美國專利片語相似度大賽

  • 分享至 

  • xImage
  •  

目標

  • 比賽連結
  • 老師的教學notebook
    雖然比賽已經過期,但是我們還是可以從比賽中學習到不少技術
    這個比賽是從不同的專利文章中,截取相似的片語(Phrase)
    這邊的片語就是2個字以上組成的片語
    2個片語,在不同的語境下(一般用語VS專利文章中),語意的相似度
    這邊的相似度有給定了一個loss function

就是皮爾森相關係數
這個係數是什麼呢? 大概上網查一下就有
那什麼公式的我就不貼了
重點是皮爾森相關係釋的範圍在-1~1 之間
是計算兩個變數的線性相關程度,
越接近1 表示線性正相關越強
越接近-1 表示線性負相關越強
所以在0 附近的就表示不線性相關
那這個題目要我們用皮爾森相關係數來把這2個片語的相關性映射到5 個分類
分別是0,0.25,0.5,0.75,1

https://ithelp.ithome.com.tw/upload/images/20230921/20110579bvjlTc95Bz.png

我們可以觀察一下這五類特別代表什麼意思

資料

然後再來看一下我們的input ,到底給我們什麼資料來做訓練呢?

Columns
id - a unique identifier for a pair of phrases
anchor - the first phrase
target - the second phrase
context - the CPC classification (version 2021.05), which indicates the subject within which the similarity is to be scored
score - the similarity. This is sourced from a combination of one or more manual expert ratings.

其中anchor 就是第一個片語,target 就是第二個片語,context 就是專利文章的「分類編號」
我想就有點類似我們在圖書館要找書,會找到一個分類編號,圖書館會把相近的書放在一起,所以這個也可以當成我們的一個特徵

https://ithelp.ithome.com.tw/upload/images/20230921/20110579lmbqGSBHlM.png

score 就是他們做的相關系數評分,由圖中可以看到已經映射到這五類

那知道題意了之後,就看看老師怎麼帶我們走完這一套流程吧!

要跑老師的notebook 要記得把運行環境改成GPU ,要不然會出錯!

開始做題

一開始提到了探索性分析

也就是資料中有什麼特性呢?我們不能只看幾個sample就覺得整份資料就是這樣了,
我們要對資料做一些分析,知道我們的資料大概有哪一些特性,這樣我們在做訓練的過程中,才能對資料做合適的處理。
以下就來看看我們能做哪些事,讓我們更好的了解DATA !

EDA

https://ithelp.ithome.com.tw/upload/images/20230921/20110579oi2DpOz2Nx.png

透過describe函數我們可以觀察資料筆數一共有36473 筆
anchor(片語1) 有733 種,意味著重複性資料很多,出現最多次的是component composite coating 有次數有152次
target(片語2) 有29340種,相較於片語1,大多都是相異的片語,出現最多次一樣的是composition ,次數有24次
context(分類代碼)有106種,也就是106類,其中出現最多次的類別是H01,有2186次

在這邊老師把這所有的資料都拿來訓練,也就是把片語1+片語2+分類代碼

想法出現

我們可能會覺得很奇怪,分類代碼這個有什麼意義?
他們看起來是同一類,但是這個對「語境」有什麼幫助呢?
有了問題很好,後面再來解決,所以我想到的是應該要去查那個分類代碼所代表的文字
可能是那個代碼的說明,或是標題,至少有助於理解在哪個「語境」中,他們是相似的

否則直接標示H01 就要知道這2個片語是近似/ 非近似,感覺有點困難。

想法太多的話,可能會學不完哦!
所以先照老師的流程跑一遍

一開始需要切分詞,轉詞向量
即便是片語,也是至少2個詞,所以我們需要引用 AutoTokenizer
https://ithelp.ithome.com.tw/upload/images/20230921/20110579b8YGknocHK.png

引用了一個model 叫做microsoft/deberta-v3-small 來幫我們做這件事
https://ithelp.ithome.com.tw/upload/images/20230921/20110579bEHbqiZULb.png

這邊可以看到,我們輸入的文字已經被轉成向量,也就是數字的格式,可以讓我們來做運算了!
如果有看講師的影片或是筆記的話
會發現他介紹了overfiting/underfiting
如何切訓練集/驗證集 ,以及做驗證要注意的細節
還有什麼是皮爾森係數
這些都是很常見的知識,可以google到
這邊先把流程跑完。

按照之前的案例,例如要判斷是狗還是貓
我們要定義loss function
所以在這邊就是做相關係數的運算
https://ithelp.ithome.com.tw/upload/images/20230921/20110579DUdQ4kvMiU.png

定好loss function 後,想到前面的步驟
就是選一個模型來跑跑看!

這邊用了很有名的Transformer
https://ithelp.ithome.com.tw/upload/images/20230921/20110579Mdns1wGJe9.png

其中bs 就是batch size 也就是一次要處理的量,要切batch size 是因為gpu 的ram有限
所以一次先跑一點點資料拿來訓練調參數
epoch 就是跑幾輪(全部資料跑過一次叫一輪)
lr = learning rate , 前面有說過就是學習率

這邊講師特別廣告他的fastai 有自動調整學習率的工具
不過也是一樣細節太多,就先不用
我們先把結果跑一次再說

下面就是Transformer 全部的參數設定
如果看不懂的請餵chatgpt, 但現在不用懂,因為了解Transformer不是我們現階段要做的事。

https://ithelp.ithome.com.tw/upload/images/20230921/20110579BI7TPr6ovw.png

好了設定好之後就開始Train了,可以看看結果
https://ithelp.ithome.com.tw/upload/images/20230921/20110579xXlBLlWW98.png

哇賽什麼事都沒做也沒微調就這樣亂做,結果似乎很不錯!?

最後把predict 的結果弄成上傳的格式,我們可以上傳看看😊,就這樣完成了一個比賽,是否很有成就感,還是很「空虛」?

我想重點不是比賽成績,而是在這個過程中
我們似乎發現了很多地方可以「優化調整」的地方。

  • 資料集的輸入,是否可以帶入類別編碼的文字?
  • 驗證集的切割,是否可以更公平?
  • learning rate 的設定,是否陷在區域最佳解?
  • 這個模型的參數,怎麼調整會最佳?

相信還有很多疑惑,我們慢慢往下學,應該可以再優化我們這些流程,這樣我們再回頭來做這個比賽
看看是否能更高分!


上一篇
才上第四堂課就要自然語言處理了
下一篇
用線性模型跟神經網路來玩鐵達尼號數據(一)
系列文
Fast ai 30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言