<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>

          【NLP】NLP模型BERT和經(jīng)典數(shù)據(jù)集!

          共 5409字,需瀏覽 11分鐘

           ·

          2021-08-05 09:48

          作者:陳安東,中央民族大學(xué),Datawhale成員

          對(duì)于剛?cè)腴TNLP的伙伴來(lái)說(shuō),看到NLP任務(wù)很容易覺(jué)得眼花繚亂,找不到切入點(diǎn)。總的來(lái)說(shuō),NLP分為五大類無(wú)數(shù)小類,雖然種類繁多,卻環(huán)環(huán)相扣。無(wú)論我們一開始學(xué)習(xí)的是什么方向,當(dāng)做過(guò)的東西越來(lái)越多,學(xué)習(xí)范圍越來(lái)越大的時(shí)候,總可以形成閉環(huán)。

          這一次,我們從教機(jī)器做閱讀理解題起航,介紹用火到“出圈”的Bert和常見(jiàn)數(shù)據(jù)集入手NLP的整體流程。

          NLP五大類別

          從機(jī)器閱讀理解起步

          什么是機(jī)器閱讀理解?形式就像下圖:

          答案是機(jī)器做出的

          怎么樣,是不是感覺(jué)很酷!讓我們的模型來(lái)做閱讀理解題目,好似機(jī)器有了人類理解的能力。當(dāng)然,也不能太樂(lè)觀,現(xiàn)在機(jī)器閱讀理解任務(wù)還在逐步探索階段。在訓(xùn)練方式上,對(duì)于不同機(jī)器閱讀理解數(shù)據(jù)集,就會(huì)有對(duì)這個(gè)任務(wù)的不同解法。對(duì)于機(jī)器閱讀理解任務(wù),我們將其分為三個(gè)類型。難度逐步上升:

          • 簡(jiǎn)單問(wèn)題:對(duì)答案的簡(jiǎn)單匹配和抽取
          • 復(fù)雜問(wèn)題:加入推理
          • 基于對(duì)話的問(wèn)答系統(tǒng):自由問(wèn)答和特定任務(wù)場(chǎng)景的問(wèn)答

          可以看出,如果答案在文章內(nèi)可以清晰的找到,那么模型就不需要生成答案,只需要將答案抽取出來(lái)就好了,這樣的任務(wù)是簡(jiǎn)單的,可以使用SQuAD 1.0學(xué)習(xí)。

          更近一步,有些閱讀理解的問(wèn)題中是沒(méi)有答案的,正確的答案就是不回答,這種行為更接近智能,任務(wù)也變的更困難,需要用SQuAD 2.0學(xué)習(xí)。

          此外還有對(duì)話系統(tǒng),它的答案要和實(shí)時(shí)場(chǎng)景相匹配所以難度更高,這里主要討論前兩種。

          繞不開的SQuAD數(shù)據(jù)集

          上面關(guān)于機(jī)器閱讀理解描述中,我們反復(fù)提及用SQuAD數(shù)據(jù)集進(jìn)行訓(xùn)練。對(duì)于想要從事相關(guān)方向的同學(xué)來(lái)說(shuō),這個(gè)數(shù)據(jù)集幾乎是繞不過(guò)的。

          SQuAD(Stanford Question Answering Dataset)是斯坦福大學(xué)通過(guò)眾包的方式來(lái)構(gòu)建的一個(gè)機(jī)器閱讀理解數(shù)據(jù)集。本質(zhì)上,這就是一個(gè)大規(guī)模的英文閱讀理解數(shù)據(jù)集,現(xiàn)在做和英文的閱讀理解相關(guān)所有任務(wù),都用它。

          數(shù)據(jù)開源地址:https://gas.graviti.cn/dataset/hello-dataset/SQuAD_v2?utm_medium=0725datawhale

          數(shù)據(jù)集現(xiàn)在有SQuAD1.0 和 SQuAD2.0兩個(gè)版本,適用于不同的研究場(chǎng)景:

          SQuAD1.0

          1.0版本的數(shù)據(jù)集中包含107,785的問(wèn)題以及對(duì)應(yīng)的536篇文章。文章源自維基百科上的一系列文章。

          與之前其他數(shù)據(jù)集的區(qū)別:相較于以前的閱讀理解數(shù)據(jù)集,SQuAD更大,包含的文章內(nèi)容也更多。其具體的形式是,SQuAD的答案是短語(yǔ)或者一段話,而不再是一個(gè)單詞。答案里面包含的信息增多了,所以任務(wù)的難度也增加了。

          特點(diǎn):閱讀理解的所有答案,都可以在文章中完全可以找到(答案可以從文章中完全copy過(guò)來(lái))。并且文中的答案是不能是跨行的。也就是說(shuō)答案是文章指定的一個(gè)區(qū)間。所以,SQuAD的答案生成是抽取式的。

          數(shù)據(jù)集示例如下:

          SQuAD2.0

          在閱讀理解中,遇到有些問(wèn)題無(wú)法通過(guò)閱讀現(xiàn)有文章的內(nèi)容來(lái)回答,該怎么辦?

          有些信息我們無(wú)法通過(guò)文章找到,在使用1.0版本的數(shù)據(jù)集中,模型遇到了那些無(wú)法回答的問(wèn)題,也會(huì)強(qiáng)制給出一個(gè)回答,這樣的情況顯然不夠智能。所以在2.0版本的數(shù)據(jù)集中,增加了50,000條沒(méi)有答案的問(wèn)題,通過(guò)這個(gè)數(shù)據(jù)集中,希望模型可以學(xué)會(huì)對(duì)于沒(méi)有答案的問(wèn)題不作回答。也就是說(shuō)希望我們的模型要有“知道自己不知道”的能力

          2.0版的數(shù)據(jù)集形式就如上面圖片所示,上面的圖片中展示的兩個(gè)問(wèn)題都是沒(méi)有答案的,沒(méi)有答案的問(wèn)題不回答才是正確的。

          總結(jié)來(lái)說(shuō),SQuAD是一個(gè)主流的抽取式的英語(yǔ)閱讀理解數(shù)據(jù)集。現(xiàn)在大家都在SQuAD2.0上刷榜。

          通過(guò)上面的榜單可以看到,在SQuAD2.0這個(gè)數(shù)據(jù)集中,前五名的模型獲得的效果已經(jīng)遠(yuǎn)超人類。如果將這些模型做一個(gè)分析,可以說(shuō)每個(gè)模型里面都裝著一個(gè)Bert。

          淺說(shuō)BERT

          Bert這個(gè)預(yù)訓(xùn)練模型,在2021年的今天應(yīng)該是當(dāng)之無(wú)愧的”網(wǎng)紅“。作為一個(gè)入門的介紹,這里先講Bert在原論文中是如何被訓(xùn)練的。之后介紹SQUAD數(shù)據(jù)集是如何與Bert結(jié)合的。

          從結(jié)構(gòu)角度來(lái)說(shuō),Bert是由Transformer的Encoder(編碼器)構(gòu)成的。通過(guò)強(qiáng)大的編碼能力,可以將語(yǔ)言映射在一個(gè)向量空間中,將單詞表示為向量,也就是大家常說(shuō)的Embedding(詞向量)。Bert的所做的就是,輸入一個(gè)句子,基于任務(wù)然后吐出來(lái)一個(gè)基于訓(xùn)練任務(wù)的詞向量(embedding)。

          知道Bert是什么,那么下面就介紹一下Bert在原論文中的兩種訓(xùn)練方式。

          兩個(gè)訓(xùn)練方法

          ① Masked LM

          將一句話輸入之后,隨機(jī)mask掉一個(gè)單詞,具體mask的方式就是將那個(gè)詞替換為[MASK]這個(gè)符號(hào),然后再mask位置的輸出接到一個(gè)簡(jiǎn)單的線性分類器當(dāng)中。我們希望的是一個(gè)簡(jiǎn)單的線性分類器可以得到正確的答案。如果簡(jiǎn)單的分類器可以輸出正確的答案,就說(shuō)明這個(gè)embedding(詞向量)的效果相當(dāng)?shù)暮?/p>

          ② Next Sentence Prediction

          預(yù)測(cè)輸入的兩個(gè)句子是不是一句話

          輸入兩句話,然后Bert輸出的是單詞的embedding(詞向量)。這時(shí)從圖中可以看出,有兩個(gè)特殊的輸入單詞———SEP和CLS。SEP這個(gè)單詞的意思就是告訴Bert,左右的兩個(gè)句子是分開的。CLS這個(gè)單詞的意思就是告訴Bert,這里是要做一個(gè)分類任務(wù)。然后將這個(gè)CLS輸出的embedding放入一個(gè)簡(jiǎn)單的分類器中(simple linear)來(lái)預(yù)測(cè)兩個(gè)句子是不是一句話。如何可以分辨的很好,說(shuō)明了Bert對(duì)于語(yǔ)句相似性有很好的的表示效果。

          在Bert的完整訓(xùn)練過(guò)程中,這兩個(gè)訓(xùn)練任務(wù)是都要有。這樣可以訓(xùn)練出性能優(yōu)秀的Bert。

          在Bert里為了完成不同的任務(wù),設(shè)計(jì)了不同的特殊單詞。這里順便做一下總結(jié):

          • [CLS]:告訴模型要做分類任務(wù),其中最后一層的第一個(gè)embedding作為分類任務(wù)的presention。
          • [SEP]:告訴Bert左右兩邊的輸入是不同的。
          • [UNK]:沒(méi)出現(xiàn)在Bert字典里的字會(huì)被這個(gè)單詞替代。
          • [PAD]:zero padding,將長(zhǎng)度不同的序列補(bǔ)充為固定長(zhǎng)度,方便做batch運(yùn)算。
          • [MASK]:未知遮罩

          用Bert做機(jī)器閱讀理解

          現(xiàn)在我們已經(jīng)知道了SQuAD這個(gè)數(shù)據(jù)集以及模型Bert?,F(xiàn)在就可以通過(guò)Bert和SQuAD來(lái)做機(jī)器閱讀理解了。

          接下來(lái)詳細(xì)說(shuō)一說(shuō)在Bert中,如何在SQuAD上解決閱讀理解這個(gè)問(wèn)題的。

          在原始的Bert任務(wù)中,就已經(jīng)利用SQuAD來(lái)做閱讀理解任務(wù)了。它使用了SEP的這個(gè)特殊單詞,將Qury(問(wèn)題)和Document(文章)一起作為輸入。然后在Bert中獲取良好的embedding(詞向量),然后將這個(gè)embedding(詞向量)的結(jié)果接入一個(gè)分類器,分別得到答案在文章中位置的id和結(jié)束位置的id。因?yàn)镾QuAD數(shù)據(jù)集中的答案是可以直接在文章中抽取出來(lái),所以得到答案起始位置的id和結(jié)束位置的id可以直接抽取出正確的答案。

          我們使用文章一開始那個(gè)例子給大家舉例。當(dāng)我將文章和問(wèn)題輸入給Bert之后,將Bert輸出的Embedding(詞向量)接入到一個(gè)閱讀理解任務(wù)的模型中(這個(gè)模型可以先忽略,對(duì)于Bert來(lái)說(shuō),不同的任務(wù)會(huì)不同的模型來(lái)輔助)。我們發(fā)現(xiàn),輸出的結(jié)果是'雪'和‘藻’在文本中的位置65和67。然后我們將65-67這三個(gè)字抽取出來(lái)就得到了答案“雪衣藻”。

          對(duì)于英文的SQuAD數(shù)據(jù)集,我們的做法和上面一模一樣。

          那么對(duì)于SQuAD2.0數(shù)據(jù)集來(lái)說(shuō),這個(gè)數(shù)據(jù)集中有一些沒(méi)有答案的問(wèn)題。我們對(duì)于這樣的問(wèn)題解法其實(shí)和上面沒(méi)有任何區(qū)別,如果我們獲得起始位置id比結(jié)束位置id大的情況,那么這種不合理的輸出,我們就認(rèn)為這個(gè)問(wèn)題沒(méi)有答案。

          實(shí)踐一下用Bert的效果:

          # https://gas.graviti.cn/dataset/hello-dataset/SQuAD_v2 下載數(shù)據(jù)集

          # 載入文本
          with open('SQuAD_v2_dev-v2.json','r',encoding='utf-8'as reader:
              input_data = json.load(reader)


          # 看看這個(gè)json格式
          input_data.keys()

          squad_data = input_data['data']
          print('有',len(squad_data),'個(gè)類別',)

          # 看一篇文章的細(xì)節(jié)
          squad_data[1].keys()

          print('一個(gè)類有',len(squad_data[1]['paragraphs']),'篇文章')

          squad_data[1]['paragraphs'][1].keys()

          context = squad_data[1]['paragraphs'][1]['context']context

          # 拿到一個(gè)問(wèn)題

          squad_data[1]['paragraphs'][1]['qas'][1]

          question = squad_data[1]['paragraphs'][1]['qas'][1]['question']

          # 得到這個(gè)題目的答案
          answer = squad_data[1]['paragraphs'][1]['qas'][1]['answers']answer

          # 調(diào)用Hugging Face 的API

          # 使用Hugging Face 的API。Hugging Face已經(jīng)幫大家訓(xùn)練好了Bert模型,大家可以直接用來(lái)做推理(記得注冊(cè)Hugging Face)
          # 推理API的調(diào)用指南:https://huggingface.co/docs/hub/inference

          import json
          import requests

          headers = {"Authorization"f"Bearer {'此處用自己的API賬號(hào)'}"}  API_URL = "https://api-inference.huggingface.co/models/deepset/roberta-base-squad2"

          def query(payload):
              data = json.dumps(payload)
              response = requests.request("POST", API_URL, headers=headers, data=data)
              return json.loads(response.content.decode("utf-8"))

          data = query(
              {
                  "inputs": {
                      "question": question,
                      "context": context,
                  }
              }
          )

          data['answer']

          # 看看推理結(jié)果,和上邊的答案是不是完全一樣?

          最后

          這篇文章中,先是介紹了NLP的基本任務(wù)。然后以SQuAD數(shù)據(jù)集為中心,介紹了機(jī)器閱讀理解任務(wù)的一些分類,知道抽取式任務(wù)是簡(jiǎn)單的,而問(wèn)答任務(wù)是困難的。最后以Bert為例,介紹SQuAD數(shù)據(jù)集在Bert模型上是怎么解的。

          本文為經(jīng)典開源數(shù)據(jù)集介紹系列,數(shù)據(jù)集已上傳在開源數(shù)據(jù)平臺(tái)Graviti,閱讀原文可下載。


          閱讀原文可獲取數(shù)據(jù)集
          往期精彩回顧




          本站qq群851320808,加入微信群請(qǐng)掃碼:
          瀏覽 48
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  青娱乐社区精品自拍视频 | 欧美天天干天天女人 | 成人做爰黄 片免费看 | 美女肏逼 | 大香蕉人网 |