無痛使用超強NLP model — BERT

近三年來在NLP(自然語言處理)的研究領域中,大多數的Model都跟一個名字有關,那就是BERT。

BERT的威力大多數人一直都知道,但是其實並不多人使用過它,最主要有2個困難

  1. BERT跟以往的NLP model(像是RNN、或是Tfidf+ML model)使用起來相對麻煩,大部分ML engineer如果不是對tensorflow或是pytorch特別熟悉,都要花不少的時間學習。
  2. BERT需要的運算資源非常龐大,不論是Training還是inference。 而這兩個問題,都已經很多方案可以處理,像是運算資源過大的問題,現在已經有非常多Model Distillation的研究在壓縮BERT的大小,而使用麻煩的問題則已經有了Sentence Transformers,幫助我們快速使用。

這也導致了在近兩年的Kaggle比賽或是新創的project中,使用BERT的比例越來越高,而我認為接下來BERT會變得像是Word2Vec一樣,是每個NLP engineer必須了解的常識。

BERT是2021年必備的NLP model

具體BERT的原理細節跟為甚麼那麼強大我在這邊先不說明,之後有時間再寫一篇快速整理相關知識。

這篇文章我會講解

  1. 甚麼是Language Modeling
  2. Sentence-Transformers安裝
  3. Sentence-Transformers使用方法介紹
  4. Sentence-Transformers處理中文

甚麼是Language Modeling Language Modeling很有可能是近幾年來NLP界最重大的想法,近幾年大部分很強大的NLP model包含BERT、GPT3都是使用Language Modeling的技術。

具體Language Modeling是甚麼???

先來談談在我各篇Medium裡面,不斷重複強調的一件事,在業界我們使用ML最大的困境就是 — 沒有Data。

而NLP的labeled data又比CV更難取得,想像如果你今天要收集一個句子翻譯的Data,光是收集Data,我們可能就要請專業的翻譯員,日以繼夜的進行翻譯,可能一個小時能夠翻譯一篇3000字的文章就算不錯了(我隨便估的),而我們可能花費數個月,終於收集好一個dataset,裡面有10000個文章,而每個文章都是1000字上下。

現在我們要train一個NLP的model來學習這個dataset,結果發現學不起來

為甚麼?因為語言翻譯這件事本身太難了,只有10000筆資料是不夠的,我們的模型要學會翻譯要同時學會三件事

理解A語言的文義 書寫B語言的文章 把A語言的知識對應到B語言中 而這三件事裡面的任何一件都是人類花數年學習才掌握的知識,ML model很難以10000筆Data就學習起來。

NLP Labeled data超級難取得,但卻通常需要很大量

而Language Modeling就做了一件非常非常有趣的假設

NLP的Labeled Data不好取得,但是Unlabeled Data卻一大堆 所以真正的問題在於我們怎麼利用Unlabeled Data。

這邊講的Unlabeled Data一大堆包含著像是各大論壇網友的各種流言、Wikipedia的文章內容、各式書籍的內容…

而Language Modeling運用Unlabeled Data的方法相當簡單。

讓我們的模型去學會「預測下一個字」

簡單來講就是給文章的前N個字,請模型預測第N+1個字是甚麼 而因為第N+1個字我們本身文章中就有,所以不用Label!!

對照我們日常生活經驗,我們藉由不斷的看文章、寫文章就可以對一個語言的知識累積越來越深,而這正是Language Modeling做的事情。

而實際上Langauge Modeling這個想法在NLP界已經行之有年,包含過去RNN甚至更古早的N-gram model時代都會做這件事,只是隨著現在DL Model能力越來越強,Language Modeling能夠學到的事情越來越多!!

而BERT這些Model就是基於Language Modeling,預訓練在非常非常龐大的資料集上(像是GPT2就爬網路上各大論壇的文字下來學習),預訓練完後,模型已經具備了很多語言的知識、常識,再讓BERT去學習各種具體的問題,效果就遠超以前的方法。

具體BERT細節有興趣請回復告訴我,如果數量夠多,我會再寫文章說明 Sentence-Transformers安裝 在過去要使用BERT最少要懂得使用pytorch或是Tensorflow其中一個框架,而現在有網路上的善心人士幫我們把使用BERT的常見操作都整理成了一個Package,而這就是Sentence-Transformer。

安裝Sentence Transformer非常容易

pip install -U sentence-transformers

不過這邊有個小細節,因為Sentence-Transformers本身會使用到pytorch,所以如果原本環境裡沒有pytorch他會幫你裝。

如果你想要pytorch使用cuda的話,最好還是手動裝pytorch並且指定好特定的cuda版本。

可以參考這個網站

Sentence-Transformers使用方法介紹 Sentence-Transformers使用分兩個部分

使用Pretrained Model進行Inference Train你自己的BERT的model 這裡主要講第一個部分:使用Pretrained Model進行Inference

第一步 Load Model,這邊如果是沒有Load過的Model的話,會自動跑一次下載。

Most companies try to stay ahead of the curve when it comes to visual design, but for Planetaria we needed to create a brand that would still inspire us 100 years from now when humanity has spread across our entire solar system.

I knew that to get it right I was going to have to replicate the viewing conditions of someone from the future, so I grabbed my space helmet from the closet, created a new Figma document, and got to work.

Sermone fata

Lorem markdownum, bracchia in redibam! Terque unda puppi nec, linguae posterior in utraque respicere candidus Mimasque formae; quae conantem cervice. Parcite variatus, redolentia adeunt. Tyrioque dies, naufraga sua adit partibus celanda torquere temptata, erit maneat et ramos, iam ait dominari potitus! Tibi litora matremque fumantia condi radicibus opusque.

Deus feram verumque, fecit, ira tamen, terras per alienae victum. Mutantur levitate quas ubi arcum ripas oculos abest. Adest commissaque victae in gemitus nectareis ire diva dotibus ora, et findi huic invenit; fatis? Fractaque dare superinposita nimiumque simulatoremque sanguine, at voce aestibus diu! Quid veterum hausit tu nil utinam paternos ima, commentaque.

exbibyte_wins = gigahertz(3);
grayscaleUtilityClient = control_uat;
pcmciaHibernate = oop_virus_console(text_mountain);
if (stateWaisFirewire >= -2) {
    jfs = 647065 / ldapVrml(tutorialRestore, 85);
    metal_runtime_parse = roomComputingResolution - toolbarUpload +
            ipx_nvram_open;
} else {
    maximizeSidebar *= suffix_url(flatbed + 2, requirements_encoding_node +
            only_qbe_media, minicomputer);
}

Aere repetiti cognataque natus. Habebat vela solutis saepe munus nondum adhuc oscula nomina pignora corpus deserat.

Lethaei Pindumve me quae dinumerat Pavor

Idem se saxa fata pollentibus geminos; quos pedibus. Est urnis Herses omnes nec divite: et ille illa furit sim verbis Cyllenius.

  1. Captus inpleverunt collo
  2. Nec nam placebant
  3. Siquos vulgus
  4. Dictis carissime fugae
  5. A tacitos nulla viginti

Ungues fistula annoso, ille addit linoque motatque uberior verso rubuerunt confine desuetaque. Sanguine anteit emerguntque expugnacior est pennas iniqui ecce haeret genus: peiora imagine fossas Cephisos formosa! Refugitque amata refelli supplex. Summa brevis vetuere tenebas, hostes vetantis, suppressit, arreptum regna. Postquam conpescit iuvenis habet corpus, et erratica, perdere, tot mota ars talis.

digital.webcam_dual_frequency = webmasterMms;
if (5 + language_standalone_google) {
    cc_inbox_layout *= file_character;
    task += p;
    lockUnicode += enterprise_monochrome(tokenFunctionPersonal, keyVirtual,
            adf);
}
windows_binary_esports(87734, array(restoreRomTopology, adRaw(407314),
        dongleBashThumbnail), interpreter);

Sit volat naturam; motu Cancri. Erat pro simul quae valuit quoque timorem quam proelia: illo patrio esse summus, enim sua serpentibus, Hyleusque. Est coniuge recuso; refert Coroniden ignotos manat, adfectu.