日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

BERT可以上几年级了?Seq2Seq“硬刚”小学数学应用题

發(fā)布時(shí)間:2024/10/8 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BERT可以上几年级了?Seq2Seq“硬刚”小学数学应用题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?PaperWeekly 原創(chuàng) ·?作者| 蘇劍林

單位|追一科技

研究方向|NLP、神經(jīng)網(wǎng)絡(luò)

▲“雞兔同籠”的那些年

“盈虧問題”、“年齡問題”、“植樹問題”、“牛吃草問題”、“利潤(rùn)問題”...,小學(xué)階段你是否曾被各種花樣的數(shù)學(xué)應(yīng)用題折磨過呢?沒關(guān)系,現(xiàn)在機(jī)器學(xué)習(xí)模型也可以幫助我們?nèi)ソ獯饝?yīng)用題了,來看看它可以上幾年級(jí)了?

本文將給出一個(gè)求解小學(xué)數(shù)學(xué)應(yīng)用題(Math Word Problem)的 baseline,基于ape210k 數(shù)據(jù)集 [1]?訓(xùn)練,直接用 Seq2Seq 模型生成可執(zhí)行的數(shù)學(xué)表達(dá)式,最終 Large 版本的模型能達(dá)到?73%+?的準(zhǔn)確率,高于 ape210k 論文所報(bào)告的結(jié)果。

所謂“硬剛”,指的是沒有對(duì)表達(dá)式做特別的轉(zhuǎn)換,也沒有通過模板處理,就直接生成跟人類做法相近的可讀表達(dá)式。

數(shù)據(jù)處理

這里我們先觀察一下 ape210k 數(shù)據(jù)集的情況:

{"id":?"254761","segmented_text":?"小?王?要?將 150?千?克?含?藥?量 20%?的?農(nóng)?藥?稀?釋?成?含?藥?量 5%?的?藥?水?.?需?要?加?水?多?少?千?克??","original_text":?"小王要將150千克含藥量20%的農(nóng)藥稀釋成含藥量5%的藥水.需要加水多少千克?","ans":?"450","equation":?"x=150*20%/5%-150" }{"id":?"325488","segmented_text":?"一?個(gè)?圓?形?花?壇?的?半?徑?是?4?米?,?現(xiàn)?在?要?擴(kuò)?建?花?壇?,?將?半?徑?增?加?1?米?,?這?時(shí)?花?壇?的?占?地?面?積?增?加?了?多?少?米?*?*?2?.","original_text":?"一個(gè)圓形花壇的半徑是4米,現(xiàn)在要擴(kuò)建花壇,將半徑增加1米,這時(shí)花壇的占地面積增加了多少米**2.","ans":?"28.26","equation":?"x=(3.14*(4+1)**2)-(3.14*4**2)" }

可以看到,我們主要關(guān)心的是?original_textequationans?字段,其中?original_text?就是題目,equation?則是運(yùn)算過程(一般以 x= 開頭),而?ans?是最終答案。我們希望訓(xùn)練一個(gè)模型,由?original_text?來生成?equation,然后經(jīng)由 python 的 eval 函數(shù)直接得到?ans

不過,我們需要做一些前處理,因?yàn)?ape210k 給出的?equation?并不是都可以直接 eval 的,像上面的例子 150*20%/5%-150 對(duì) python 來說就是一個(gè)非法表達(dá)式。筆者所做的處理如下:

  • 對(duì)于a%這樣的百分?jǐn)?shù),統(tǒng)一替換為(a/100);

  • 對(duì)于a(b/c)這樣的帶分?jǐn)?shù),統(tǒng)一替換為(a+b/c);

  • 對(duì)于(a/b)這樣的真分?jǐn)?shù),在題目中去掉括號(hào)變?yōu)閍/b;

  • 對(duì)于比例的冒號(hào):,統(tǒng)一替換為/。

  • 經(jīng)過這樣處理后,大部分?equation?都可以直接 eval 了,并且可以與ans進(jìn)行答案對(duì)比,只保留結(jié)果一致的題目。

    不過,還有一點(diǎn)改進(jìn)的地方,就是這樣得到的表達(dá)式可能會(huì)帶有一些冗余的括號(hào)(也就是去掉括號(hào)后與原來的等價(jià)),因此還要加上一步去括號(hào),即遍歷每一組括號(hào),如果去掉該組括號(hào)結(jié)果與原來的等價(jià),那么就去掉該組括號(hào),這樣可以得到平均長(zhǎng)度更短的表達(dá)式,而長(zhǎng)度越短越容易生成。

    最終,我們得到了如下可用的數(shù)據(jù)集:

    剩下的基本上是一些錯(cuò)題、亂題了,暫時(shí)忽略。

    模型簡(jiǎn)介

    模型其實(shí)是最沒什么好講的,就是以?original_text?為輸入、equation?為輸出,以“BERT+UniLM”為基礎(chǔ)架構(gòu),訓(xùn)練一個(gè) Seq2Seq 模型。如果對(duì)模型還有什么疑惑的地方,請(qǐng)閱讀從語(yǔ)言模型到Seq2Seq:Transformer如戲,全靠Mask。

    項(xiàng)目鏈接:?

    http://github.com/bojone/ape210k_baseline

    筆者的訓(xùn)練是用 22G 的單卡 TITAN RTX 跑的,優(yōu)化器是 Adam,學(xué)習(xí)率是 2e-5。Base 版本的用了 batch_size=32,大概需要訓(xùn)練 25 個(gè) epoch,每個(gè) epoch 約 50 分鐘(算上驗(yàn)證集的評(píng)測(cè)時(shí)間);而 large 版本則是 batch_size=16,大概需要訓(xùn)練 15 個(gè) epoch,每個(gè) epoch 約 2 小時(shí)(算上驗(yàn)證集的評(píng)測(cè)時(shí)間)。

    對(duì)了,說到 Large,由于 UniLM 借用了 MLM 部分權(quán)重,所以我們不能用哈工大開源的 RoBERTa-wwm-ext-large [2]?,因?yàn)檫@個(gè)版本的 MLM 權(quán)重是隨機(jī)初始化的(但它的 Base 版本是正常的,可以用)。Large 版本推薦用騰訊 UER [3]?開源的權(quán)重,原本是 PyTorch 版的,筆者將它轉(zhuǎn)換為 TF 版了,可以通過下方鏈接下載。

    網(wǎng)盤鏈接:

    https://pan.baidu.com/s/1Xp_ttsxwLMFDiTPqmRABhg

    提取碼:l0k6

    效果如下表:

    Large 模型的結(jié)果已經(jīng)比 ape210k 的論文 Ape210K: A Large-Scale and Template-Rich Dataset of Math Word Problems?[4] 所報(bào)告的 70.20% 要明顯高了,因此說明我們這里的模型是一個(gè)不算太差的 baseline。

    感覺如果用一些 Seq2Seq 的技巧來緩解一下 Exposure Bias 問題(參考Seq2Seq中Exposure Bias現(xiàn)象的淺析與對(duì)策),模型還能有進(jìn)一步提升;還有或許可以引入 copy 機(jī)制,增強(qiáng)輸出與輸入數(shù)字的一致性;還有可以想辦法進(jìn)一步縮短序列長(zhǎng)度(比如四個(gè)字符的 3.14 替換為兩個(gè)字母 pi)。這些就留給大家嘗試了。

    標(biāo)準(zhǔn)輸出

    如果純粹從建模的角度來看,其實(shí)我們的任務(wù)已經(jīng)完成了,即模型只需要輸出式子就行了,評(píng)測(cè)的時(shí)候則只需要判斷式子 eval 后的結(jié)果跟參考答案是否一致就好。

    但是從實(shí)際實(shí)用的角度,我們還需要對(duì)輸出做進(jìn)一步的標(biāo)準(zhǔn)化,即根據(jù)不同的題目決定輸出的是小數(shù)、整數(shù)、分?jǐn)?shù)還是百分?jǐn)?shù)等,這就需要我們:1)決定什么時(shí)候該輸出什么格式;2)根據(jù)指定格式對(duì)結(jié)果進(jìn)行轉(zhuǎn)換。

    第一步比較簡(jiǎn)單,一般來說根據(jù)題目或方程的一些關(guān)鍵字就可以判斷了。比如表達(dá)式里邊如果有小數(shù)的,那么輸出結(jié)果一般也是小數(shù);如果題目是問“多少輛”、“多少個(gè)”、“多少人”之類的,那么輸出的都是整數(shù);如果直接問“幾分之幾”或“百分之幾”的,那么相應(yīng)地就是分?jǐn)?shù)或百分?jǐn)?shù)了。

    比較困難是應(yīng)該是取整類題目,比如“每盒蛋糕 7.90 元,50 元最多可以買多少盒蛋糕?”要求我們對(duì) 50/7.90 進(jìn)行下取整,但有時(shí)候則是上取整。不過讓筆者很意外的是,ape210k 里邊并沒有取整類題目,所以也就不存在這個(gè)問題。如果遇到有取整的數(shù)據(jù)集,如果規(guī)則判斷起來比較困難,那么最直接的方法就是把取整符號(hào)也加入到 equation 中讓模型去預(yù)測(cè)。

    第二步看起來有點(diǎn)復(fù)雜,主要是分?jǐn)?shù)的場(chǎng)景,一般讀者可能不知道如何讓式子保留分?jǐn)?shù)運(yùn)算結(jié)果,如果直接 eval('(1+2)/4'),那么得到的是 0.75(Python3),但有時(shí)我們希望得到的是分?jǐn)?shù)結(jié)果 3/4。

    事實(shí)上,保持分?jǐn)?shù)的運(yùn)算屬于 CAS 的范疇(Computer Algebra System,計(jì)算機(jī)代數(shù)系統(tǒng)),說白了就是符號(hào)運(yùn)算而不是數(shù)值運(yùn)算,而 Python 中剛好也有這樣的工具,那就是?SymPy [5]?,利用 SymPy 就能達(dá)到我們的目的了。具體請(qǐng)看下面的例子:

    from?sympy?import?Integer import?rer?=?(Integer(1)?+?Integer(2))?/?Integer(4) print(r)??#?輸出是?3/4?而不是?0.75equation?=?'(1+2)/4' print(eval(equation))??#?輸出是?0.75new_equation?=?re.sub('(\d+)',?'Integer(\\1)',?equation) print(new_equation)??#?輸出是?(Integer(1)+Integer(2))/Integer(4) print(eval(new_equation))??#?輸出是?3/4

    文章小結(jié)

    本文介紹了用 Seq2Seq 模型做數(shù)學(xué)應(yīng)用題的一個(gè) baseline,主要思路就是通過“BERT+UniLM”直接將問題轉(zhuǎn)換為可 eval 的表達(dá)式,然后分享了一些結(jié)果標(biāo)準(zhǔn)化的經(jīng)驗(yàn)。通過 BERT Large 模型的 UniLM,我們達(dá)到了73%+的準(zhǔn)確率,超過了原論文開源的結(jié)果。

    所以,你覺得它能上幾年級(jí)了呢?

    參考文獻(xiàn)

    [1] https://github.com/Chenny0808/ape210k

    [2] https://github.com/ymcui/Chinese-BERT-wwm

    [3] hhttps://github.com/dbiir/UER-py

    [4] https://arxiv.org/pdf/2009.11506v1.pdf

    [5] https://www.sympy.org/en/index.html

    更多閱讀

    #投 稿?通 道#

    ?讓你的論文被更多人看到?

    如何才能讓更多的優(yōu)質(zhì)內(nèi)容以更短路徑到達(dá)讀者群體,縮短讀者尋找優(yōu)質(zhì)內(nèi)容的成本呢?答案就是:你不認(rèn)識(shí)的人。

    總有一些你不認(rèn)識(shí)的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學(xué)者和學(xué)術(shù)靈感相互碰撞,迸發(fā)出更多的可能性。?

    PaperWeekly 鼓勵(lì)高校實(shí)驗(yàn)室或個(gè)人,在我們的平臺(tái)上分享各類優(yōu)質(zhì)內(nèi)容,可以是最新論文解讀,也可以是學(xué)習(xí)心得技術(shù)干貨。我們的目的只有一個(gè),讓知識(shí)真正流動(dòng)起來。

    ?????來稿標(biāo)準(zhǔn):

    ? 稿件確系個(gè)人原創(chuàng)作品,來稿需注明作者個(gè)人信息(姓名+學(xué)校/工作單位+學(xué)歷/職位+研究方向)?

    ? 如果文章并非首發(fā),請(qǐng)?jiān)谕陡鍟r(shí)提醒并附上所有已發(fā)布鏈接?

    ? PaperWeekly 默認(rèn)每篇文章都是首發(fā),均會(huì)添加“原創(chuàng)”標(biāo)志

    ?????投稿郵箱:

    ? 投稿郵箱:hr@paperweekly.site?

    ? 所有文章配圖,請(qǐng)單獨(dú)在附件中發(fā)送?

    ? 請(qǐng)留下即時(shí)聯(lián)系方式(微信或手機(jī)),以便我們?cè)诰庉嫲l(fā)布時(shí)和作者溝通

    ????

    現(xiàn)在,在「知乎」也能找到我們了

    進(jìn)入知乎首頁(yè)搜索「PaperWeekly」

    點(diǎn)擊「關(guān)注」訂閱我們的專欄吧

    關(guān)于PaperWeekly

    PaperWeekly 是一個(gè)推薦、解讀、討論、報(bào)道人工智能前沿論文成果的學(xué)術(shù)平臺(tái)。如果你研究或從事 AI 領(lǐng)域,歡迎在公眾號(hào)后臺(tái)點(diǎn)擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。

    總結(jié)

    以上是生活随笔為你收集整理的BERT可以上几年级了?Seq2Seq“硬刚”小学数学应用题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。