自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

NLLB 與 ChatGPT 雙向優(yōu)化:探索翻譯模型與語言模型在小語種應(yīng)用的融合策略

人工智能
NLLB(No Language Left Behind) [1] 是Meta發(fā)起的一個(gè)項(xiàng)目,目標(biāo)是打破語言障礙。不論每個(gè)人說的是什么語言,都能使他們平等地獲取信息和交流。官方對(duì)外宣稱,這是全球第一個(gè)以單一模型對(duì)應(yīng)多數(shù)語言翻譯的設(shè)計(jì),希望借此能夠幫助更多人在社群平臺(tái)上進(jìn)行跨語言互動(dòng)。

本文探討了 NLLB 翻譯模型與 ChatGPT 在小語種應(yīng)用中的雙向優(yōu)化策略。首先介紹了 NLLB-200 的背景、數(shù)據(jù)、分詞器和模型,以及其與 LLM(Large Language Model)的異同和協(xié)同關(guān)系。接著列舉了實(shí)戰(zhàn)與應(yīng)用的案例,包括使用 ChatGPT 生成的樣本微調(diào) NLLB-200 和使用 NLLB-200 的翻譯結(jié)果作為 LLM 的 prompt 等。通過本文的研究和實(shí)踐,可以為小語種翻譯模型和語言模型的融合提供一定的參考和借鑒。

一、NLLB 背景介紹

NLLB(No Language Left Behind) [1]  是Meta發(fā)起的一個(gè)項(xiàng)目,目標(biāo)是打破語言障礙。不論每個(gè)人說的是什么語言,都能使他們平等地獲取信息和交流。官方對(duì)外宣稱,這是全球第一個(gè)以單一模型對(duì)應(yīng)多數(shù)語言翻譯的設(shè)計(jì),希望借此能夠幫助更多人在社群平臺(tái)上進(jìn)行跨語言互動(dòng)。

NLLB 計(jì)劃的核心是開發(fā)一個(gè)既準(zhǔn)確又能適應(yīng)大量語言的翻譯模型。這不僅包括像英語、中文和西班牙語這樣的廣泛使用的語言,還擴(kuò)展到那些使用人數(shù)較少的語言,比如土著和地區(qū)性語言,它們通常缺乏用于高質(zhì)量機(jī)器翻譯的數(shù)據(jù)資源。NLLB 計(jì)劃的更廣泛愿景是促進(jìn)不同語言障礙背后的溝通與知識(shí)獲取,進(jìn)而支持全球社區(qū)的教育、經(jīng)濟(jì)機(jī)會(huì)和社會(huì)包容性。隨著這些語言的AI模型和數(shù)據(jù)集的改進(jìn),它們可以被集成到各種工具和平臺(tái)中,以提供實(shí)時(shí)翻譯服務(wù)、內(nèi)容理解和其他與語言相關(guān)的功能,為全球用戶帶來好處。

NLLB 項(xiàng)目包含多種語言的翻譯數(shù)據(jù)集,也包含基于機(jī)器學(xué)習(xí)技術(shù)的翻譯模型,這些技術(shù)和模型能夠更有效地從有限的數(shù)據(jù)中學(xué)習(xí),使得那些可能幾乎沒有翻譯數(shù)據(jù)的語言也能被翻譯成其他語言。為了實(shí)現(xiàn)這些目標(biāo),NLLB 聚集了研究人員、語言學(xué)家和工程師,共同致力于先進(jìn)的機(jī)器學(xué)習(xí)模型、數(shù)據(jù)收集和增強(qiáng)策略,以及改進(jìn)的評(píng)估方法,以確保翻譯不僅僅是字面上的,而且在文化和語境上也是準(zhǔn)確的。

在本文中,我們主要要介紹的是 NLLB 項(xiàng)目中的主角,也就是 NLLB-200 這個(gè)預(yù)訓(xùn)練模型。這是 Meta AI 開源的一個(gè)機(jī)器翻譯的大模型,支持200+語言之前的互相翻譯。

1.1 NLLB-200 數(shù)據(jù)

目前,谷歌翻譯能夠覆蓋大約130種語言的翻譯,而微軟則大約能夠翻譯110種語言。Meta AI 的目標(biāo)是通過 NLLB 計(jì)劃實(shí)現(xiàn)覆蓋200多種語言的翻譯。因此,除了考慮模型本身,Meta AI 還需要關(guān)注翻譯模型層面之外的方面,包括數(shù)據(jù)標(biāo)注與數(shù)據(jù)清洗等。

NLLB-200 項(xiàng)目使用的數(shù)據(jù)集名為 Flores-200,它是 Flores-101 數(shù)據(jù)集的擴(kuò)展,其中包含來自世界各地的101種語言。而 Flores-200 數(shù)據(jù)集不僅覆蓋了之前的語言集合,還增加了更多語言,使總數(shù)擴(kuò)大到了200種。

除了收集公開可用數(shù)據(jù)和使用網(wǎng)絡(luò)爬蟲爬取的數(shù)據(jù)外,研究團(tuán)隊(duì)還采用回譯策略來進(jìn)一步擴(kuò)充訓(xùn)練數(shù)據(jù)集。回譯是一種獨(dú)特的數(shù)據(jù)增強(qiáng)技術(shù),涉及使用已有的機(jī)器翻譯模型將目標(biāo)語言的文本翻譯回源語言,以創(chuàng)造新的、豐富的訓(xùn)練樣本,有助于提高模型在各種語言上的表現(xiàn)和準(zhǔn)確性。

由于這些數(shù)據(jù)用于機(jī)器翻譯任務(wù),因此其格式都是句子對(duì)格式,即包含第一種語言及其相應(yīng)的表達(dá),同時(shí)包含對(duì)應(yīng)翻譯的第二種語言的表達(dá)。數(shù)據(jù)示例如下:

{
    "translation":
    {
        "ace_Latn": "Gobnyan hana geupeukeucewa gata atawa geutinggai meunan mantong gata.",
        "ban_Latn": "Ida nenten jaga manggayang wiadin ngutang semeton."
    },
    "laser_score": 1.2499876022338867,
    "source_sentence_lid": 1.0000100135803223,
    "target_sentence_lid": 0.9991400241851807,
    "source_sentence_source": "paracrawl9_hieu",
    "source_sentence_url": "_",
    "target_sentence_source": "crawl-data/CC-MAIN-2020-10/segments/1581875144165.4/wet/CC-MAIN-20200219153707-20200219183707-00232.warc.wet.gz",
    "target_sentence_url": "https://alkitab.mobi/tb/Ula/31/6/\n"
}

左右滑動(dòng)查看完整代碼

1.2 NLLB-200 分詞器

在收集并清理了大量數(shù)據(jù)之后,NLLB-200 模型使用了 一些方法來促進(jìn)模型學(xué)習(xí)到語言不可知(language-agnostic)的表示,從而能夠用于多種語言之間的轉(zhuǎn)換,而不僅僅是針對(duì)特定的單一語言。其中,最關(guān)鍵的要素之一是設(shè)計(jì)了一個(gè)能夠處理所有語言的分詞器。在這個(gè)分詞器中,使用了一個(gè)共享的詞匯表,采用共享的 SentencePiece 詞匯表來編碼所有涉及的語言的輸入和輸出序列。

這意味著相同的子詞單元可以在不同的語言之間共用,有助于模型學(xué)習(xí)到跨語言共通的詞匯表示。該 SentencePiece 模型是在采樣的1億個(gè)句子上進(jìn)行訓(xùn)練的。為了確保低資源語言能夠得到充分的表示,NLLB 團(tuán)隊(duì)對(duì)高資源語言進(jìn)行了下采樣,同時(shí)對(duì)低資源語言進(jìn)行了上采樣,最終訓(xùn)練出一個(gè)詞表大小高達(dá)256206的模型(相比之下,Llama/Llama2/Llama3的詞表大小為32000)。

要使用 NLLB 的分詞器,我們可以直接調(diào)用 Transformers,里面有一個(gè) NllbTokenizer,接收的參數(shù)為:

- vocab_file (str)
- bos_token (str, optional, defaults to "<s>")
- eos_token (str, optional, defaults to "</s>")
- sep_token (str, optional, defaults to "</s>")
- unk_token (str, optional, defaults to "<unk>")
- pad_token (str, optional, defaults to "<pad>")
- mask_token (str, optional, defaults to "<mask>")
- tokenizer_file (str, optional)
- src_lang (str, optional)
- tgt_lang (str, optional)
- sp_model_kwargs (Dict[str, str])

左右滑動(dòng)查看完整代碼

from transformers import NllbTokenizer


tokenizer = NllbTokenizer.from_pretrained(
    "nllb/nllb-200-distilled-1.3B", src_lang="eng_Latn", tgt_lang="fra_Latn"
)
example_english_phrase = " UN Chief Says There Is No Military Solution in Syria"
expected_translation_french = (
    "Le chef de l'ONU affirme qu'il n'y a pas de solution militaire en Syrie."
)
inputs = tokenizer(
    example_english_phrase, text_target=expected_translation_french, return_tensors="pt"
)

左右滑動(dòng)查看完整代碼

1.3 NLLB-200 模型

在大型分詞器準(zhǔn)備好之后,每一個(gè)句子都能夠合理地被拆分成若干個(gè) token,并且找到對(duì)應(yīng)的 token id。那接下來就是進(jìn)入模型訓(xùn)練的部分。NLLB-200 模型使用了 Transformer 架構(gòu)來學(xué)習(xí)不同語言之間的表示。

  • 共享的模型參數(shù):在一個(gè)統(tǒng)一的神經(jīng)網(wǎng)絡(luò)架構(gòu)中對(duì)所有語言使用共享的參數(shù)。這強(qiáng)制模型學(xué)習(xí)到不特定于任何單個(gè)語言的特征表示。
  • 交叉語言遷移學(xué)習(xí):通過在相似的語言對(duì)訓(xùn)練時(shí)共享知識(shí),可以使模型在不同語言間轉(zhuǎn)移學(xué)到的模式,以利于語言不可知特征的發(fā)展。
  • 多任務(wù)學(xué)習(xí):在訓(xùn)練中包含任務(wù)不局限于翻譯,比如語言建模、降噪自編碼器或其他任務(wù),這也有助于模型捕捉語言共通性。

多語種機(jī)器翻譯模型能夠?qū)W習(xí)不同語言之間的轉(zhuǎn)換,而不必為每一個(gè)語言對(duì)分別建立獨(dú)立的模型。這樣的方法減少了模型的數(shù)量和維護(hù)成本,并允許模型在不同語言之間分享知識(shí),通常有助于改進(jìn)低資源語言的翻譯性能。

1.4 NLLB-200 蒸餾

圖片

【表1】:  NLLB-200及蒸餾版本的參數(shù)量

開源的 NLLB-200 的 MoE (Mixture of Experts) 版本具備高達(dá)545億個(gè)參數(shù),要在我們的設(shè)備上運(yùn)行如此規(guī)模的模型確實(shí)存在一定難度,對(duì)計(jì)算資源的要求較高。然而,開發(fā)者同時(shí)也提供了一個(gè)經(jīng)過蒸餾的精簡版本。這個(gè)經(jīng)蒸餾處理的模型僅含13億參數(shù),相較于原版更為輕量,降低了對(duì)硬件資源的依賴,使得在資源受限的環(huán)境中運(yùn)行變得可行。

二、NLLB 與 LLM

NLLB 作為一個(gè)翻譯任務(wù),和 LLM 一樣,都可以表述為序列到序列任務(wù),都屬于生成式任務(wù)。那么,NLLB 和 LLM 有哪些異同點(diǎn)呢?二者是不是相互沖突?二者能不能有協(xié)同合作的機(jī)會(huì)?

2.1 NLLB 與 LLM 模型異同

NLLB 和 LLM 都使用 Transformer 結(jié)構(gòu)作為基礎(chǔ)。不同之處在于,NLLB 采用標(biāo)準(zhǔn)的編碼器-解碼器架構(gòu),而基于 GPT 的模型則僅使用了解碼器(而 BERT 使用的是編碼器)。

在 Transformer 模型中,編碼器負(fù)責(zé)理解和提取輸入文本中的相關(guān)信息。這個(gè)過程通常包括處理文本序列化形式(如單詞或字符),并利用自注意力機(jī)制來理解文本中的上下文關(guān)系。編碼器的輸出是輸入文本的連續(xù)表示,通常稱為嵌入。這種嵌入包含了編碼器從文本中提取的所有有用信息,并以模型可處理的高維向量格式表示。然后,這個(gè)嵌入會(huì)傳遞給解碼器。解碼器的任務(wù)是根據(jù)從編碼器接收到的嵌入生成翻譯后的文本(目標(biāo)語言)。解碼器同樣使用自注意力機(jī)制和編碼器-解碼器注意力機(jī)制來生成翻譯文本。

LLMs 中有的是只有編碼器(encoder-only),有的是只有解碼器(decoder-only),而有的是兩者混合(encoder-decoder hybrid)。這三種類型都屬于 Seq2Seq(序列對(duì)序列)模型。盡管名義上是只有編碼器,但實(shí)際上 LLMs 仍能夠解碼一些文本和標(biāo)記,因此也可以看作是解碼器。然而,與 decoder-only 和編碼器-解碼器類型不同,encoder-only 類型的 LLMs 更注重理解輸入內(nèi)容,并生成針對(duì)特定任務(wù)的輸出,而不像前兩種類型那樣具有自回歸特性。自回歸表示輸出內(nèi)容是基于先前生成的標(biāo)記,逐個(gè)標(biāo)記生成上下文理解。總的來說,encoder-only 類型更擅長分類任務(wù);編碼器-解碼器類型擅長生成強(qiáng)烈依賴于輸入的輸出,如翻譯和文本總結(jié);而 decoder-only 類型則適用于各種Q&A等任務(wù)。

2.2 NLLB 與 LLM 目標(biāo)不同

現(xiàn)在的大規(guī)模語言模型也擁有很強(qiáng)的翻譯能力,但是 LLM,比如 ChatGPT,擅長翻譯更高資源的語言,而 NLLB-200 則是對(duì)低資源語言的翻譯做了很多的改善。NLLB-200 和 LLM 在翻譯能力上的差異主要體現(xiàn)在它們的專注點(diǎn)和訓(xùn)練目標(biāo)上:

1.專業(yè)度:

  • NLLB-200 被設(shè)計(jì)和優(yōu)化用來進(jìn)行機(jī)器翻譯,支持200多種語言,特別包括很多低資源語言。這意味著它在機(jī)器翻譯方面應(yīng)當(dāng)展現(xiàn)出較高的專業(yè)度和準(zhǔn)確率,特別是在那些通常沒有足夠數(shù)據(jù)支持的語言對(duì)之間的翻譯。
  • LLM 雖然也能進(jìn)行一定的翻譯任務(wù),但它的主要目標(biāo)是進(jìn)行自然語言理解和生成,為了創(chuàng)建流暢和自然的對(duì)話。因此,它的翻譯能力可能不如明確為翻譯目的而訓(xùn)練的模型,如 NLLB-200。

2.覆蓋范圍:

  • NLLB-200 專門致力于包括廣泛的語言,確保即使是低資源語言也有良好的翻譯支持。
  • LLM 支持多語言處理,但它的訓(xùn)練數(shù)據(jù)集可能不如 NLLB-200 那樣全面覆蓋多種語言,尤其是對(duì)于低資源語言。

3.適用性:

  • NLLB-200 專為翻譯而設(shè)計(jì),適用于需要精確翻譯的場(chǎng)景。
  • LLM 雖然可以完成簡單的翻譯任務(wù),但它更適用于需要理解上下文、生成人性化回答的對(duì)話場(chǎng)景。

總之,NLLB-200 基于其訓(xùn)練和設(shè)計(jì)被期望在機(jī)器翻譯方面表現(xiàn)優(yōu)異,而 LLM 則更側(cè)重于創(chuàng)建高質(zhì)量的對(duì)話體驗(yàn)。如果需要進(jìn)行復(fù)雜或?qū)I(yè)的翻譯工作,特別是跨越稀有語言的翻譯, NLLB-200 可能是更好的選擇;而在需要與人類用戶進(jìn)行自然交流的場(chǎng)合,則可能會(huì)偏向使用 LLM。

2.3 NLLB 與 LLM 如何協(xié)同

NLLB-200 和 LLM 在翻譯上的擅長點(diǎn)不同,然而,LLM 的強(qiáng)大自然語言理解和生成能力可以與 NLLB-200 獨(dú)特的翻譯技術(shù)互惠互利:

  • 通過利用 LLM 所特有的生成能力,可以創(chuàng)造更精確的領(lǐng)域特定術(shù)語數(shù)據(jù)集 [2] 。這種針對(duì)性強(qiáng)的數(shù)據(jù)集能夠進(jìn)一步用于對(duì) NLLB-200 進(jìn)行細(xì)致的調(diào)整,從而在特定的技術(shù)或?qū)I(yè)領(lǐng)域提升其翻譯效果。
  • 當(dāng)下的大型語言模型(LLM)主要以主流語言為核心,這一現(xiàn)象得益于英語、中文等語言的語料在獲取便利性、數(shù)據(jù)質(zhì)量和量級(jí)方面的明顯優(yōu)勢(shì)。針對(duì)語料資源較為稀缺的小語種,比如55種非洲語言,這種中心化趨勢(shì)意味著LLM在這些語種上不如在主流語種上表現(xiàn)得那么出色,因此可以依賴 NLLB-200 的翻譯能力,將小語種 prompt 翻譯成主流語言,再去使用 LLM [3]。

這兩種結(jié)合方案我們?cè)诤竺鎸⒂脤?shí)戰(zhàn)的形式來展開講述。

三、實(shí)戰(zhàn)與應(yīng)用

3.1 使用 LLM 生成針對(duì)性數(shù)據(jù)微調(diào) NLLB-200

目前,外銷應(yīng)用商店主要運(yùn)營國家包括印度、印尼、泰國、馬來西亞、菲律賓和越南。此外,還有幾十個(gè)用戶量較少的國家和地區(qū)也在使用。由于用戶輸入的查詢語種繁多,2023年初的評(píng)測(cè)結(jié)果顯示,各個(gè)國家都存在著本地語言查詢導(dǎo)致的 badcase。由于少數(shù)國家的用戶行為數(shù)據(jù)較少,基于用戶行為的模型無法很好地發(fā)揮作用。另外,許多應(yīng)用在國外都采用英文名稱,因此本地語言的查詢與英文應(yīng)用在僅靠文本匹配時(shí)會(huì)出現(xiàn)不匹配的情況,導(dǎo)致無法返回用戶想要的結(jié)果。為了解決這一問題,我們需要引入翻譯功能,將各運(yùn)營國家缺少召回的本地語言 query 統(tǒng)一翻譯成英語,然后進(jìn)行結(jié)果召回。

因?yàn)?NLLB-200 模型原始的訓(xùn)練數(shù)據(jù)來源于各種文章,其中可能包含大量修飾性詞語,可能導(dǎo)致文本召回抓取不到關(guān)鍵信息。因此,為了在外銷商店搜索中使用 NLLB-200 模型,我們需要對(duì)模型進(jìn)行簡單的微調(diào)。

3.2 LoRA 微調(diào):方案介紹

大型語言模型參數(shù)龐大(例如,GPT-3 的參數(shù)量為 1750 億),在應(yīng)用到下游任務(wù)時(shí),需要相當(dāng)高的算力來微調(diào)全部參數(shù)。為了節(jié)省成本,一些參數(shù)高效(Parameter Efficient)的微調(diào)方法被提出,旨在僅訓(xùn)練少量參數(shù)使模型適應(yīng)到下游任務(wù)。

LoRA(Label-Oriented Attentive Fine-tuning)微調(diào)是一種被廣泛使用的方法,其通過引入標(biāo)簽相關(guān)的關(guān)注機(jī)制,幫助模型更好地專注于與所預(yù)測(cè)標(biāo)簽相關(guān)的信息,從而提高了模型對(duì)關(guān)鍵信息的學(xué)習(xí)和提取能力。這種方法在提升模型性能和推理能力方面取得了顯著效果。因此,將 LoRA 微調(diào)引入到模型訓(xùn)練中可以幫助模型更好地理解和學(xué)習(xí)標(biāo)簽相關(guān)的文本信息,從而提高模型的預(yù)測(cè)準(zhǔn)確性和泛化能力。目前,對(duì)于計(jì)算機(jī)視覺領(lǐng)域的穩(wěn)定擴(kuò)散(stable diffusion)和自然語言處理領(lǐng)域的  Llama,LoRA 已成為主流的微調(diào)方法。

LoRA(Label-Oriented Attentive Fine-tuning)提出了一種獨(dú)特的微調(diào)方法:固定預(yù)訓(xùn)練模型參數(shù)并在原本的權(quán)重矩陣旁路添加低秩矩陣的乘積作為可訓(xùn)練參數(shù),用以模擬參數(shù)的變化量。這一方法旨在通過細(xì)微的調(diào)整來適應(yīng)下游任務(wù)的需求。

圖片

【圖1】:LoRA微調(diào)方法

具體而言,左側(cè)的W代表了 LLM 的預(yù)訓(xùn)練參數(shù),在常見的完成 fine-tuning 當(dāng)中,這個(gè)W參數(shù)會(huì)隨著訓(xùn)練而更新為W+ΔWW+ΔW,其中ΔWΔW可以被拆解成ΔW=BAΔW=BA。

因此h=W+ΔW=W+BAh=W+ΔW=W+BA。

在前向計(jì)算當(dāng)中,hx=(W+ΔW)x=(W+BA)xhx=(W+ΔW)x=(W+BA)x。

也就是說,左側(cè)的 WW 代表了 LLM 的預(yù)訓(xùn)練參數(shù),被固定不變。而右側(cè)則包括兩個(gè)矩陣:AA 和 BB,它們根據(jù)下游任務(wù)進(jìn)行微調(diào)。在獲得結(jié)果之后,將 WW 和 BABA 合并,輸出新的模型權(quán)重。另一種方法是左右側(cè)的參數(shù)不進(jìn)行合并,而是在推理時(shí)同時(shí)載入兩個(gè)模型同步進(jìn)行計(jì)算,然后將計(jì)算結(jié)果相加。這一方法的創(chuàng)新之處在于其獨(dú)特的參數(shù)調(diào)整方式,目標(biāo)是實(shí)現(xiàn)對(duì)模型權(quán)重的微調(diào)而不需要調(diào)整大量的參數(shù),從而提高了模型在特定任務(wù)上的適應(yīng)性和性能表現(xiàn)。對(duì)于深度學(xué)習(xí)領(lǐng)域而言,LoRA 的應(yīng)用已顯示出廣闊的應(yīng)用前景和潛力。

此外,現(xiàn)在我們不再需要自行開發(fā)微調(diào)算法了,因?yàn)?Hugging Face 已經(jīng)開源了一個(gè) PEFT 庫 [4] ,其中包括了許多高效微調(diào)的方法可供直接調(diào)用。從代碼上看,PEFT 支持多種高效微調(diào)方式,而且 Hugging Face 已經(jīng)為常用的參數(shù)微調(diào)方法提供了封裝,直接調(diào)用即可使用。PEFT 庫中封裝好的方法有如下:

class PeftType(str, enum.Enum):
    """
    Enum class for the different types of adapters in PEFT.


    Supported PEFT types:
    - PROMPT_TUNING
    - MULTITASK_PROMPT_TUNING
    - P_TUNING
    - PREFIX_TUNING
    - LORA
    - ADALORA
    - BOFT
    - ADAPTION_PROMPT
    - IA3
    - LOHA
    - LOKR
    - OFT
    - POLY
    - LN_TUNING
    """


    PROMPT_TUNING = "PROMPT_TUNING"
    MULTITASK_PROMPT_TUNING = "MULTITASK_PROMPT_TUNING"
    P_TUNING = "P_TUNING"
    PREFIX_TUNING = "PREFIX_TUNING"
    LORA = "LORA"
    ADALORA = "ADALORA"
    BOFT = "BOFT"
    ADAPTION_PROMPT = "ADAPTION_PROMPT"
    IA3 = "IA3"
    LOHA = "LOHA"
    LOKR = "LOKR"
    OFT = "OFT"
    POLY = "POLY"
    LN_TUNING = "LN_TUNING"
    VERA = "VERA"

左右滑動(dòng)查看完整代碼

根據(jù) PEFT 官方提供的指南,可以看出 LoRA 已經(jīng)覆蓋了所有模態(tài)和模型,因此屬于一種通用的技巧,掌握了這個(gè)方法就可以應(yīng)用于多個(gè)場(chǎng)景。正是因?yàn)槿绱?,我們選擇使用這種方法來進(jìn)行外銷商店搜索的翻譯微調(diào)。

從源碼來看,我們不需要自己編寫代碼,只需調(diào)用 LoRA 就可以直接用于以下幾大類任務(wù):

class TaskType(str, enum.Enum):
    """
    Enum class for the different types of tasks supported by PEFT.


    Overview of the supported task types:
    - SEQ_CLS: Text classification.
    - SEQ_2_SEQ_LM: Sequence-to-sequence language modeling.
    - CAUSAL_LM: Causal language modeling.
    - TOKEN_CLS: Token classification.
    - QUESTION_ANS: Question answering.
    - FEATURE_EXTRACTION: Feature extraction. Provides the hidden states which can be used as embeddings or features
      for downstream tasks.
    """


    SEQ_CLS = "SEQ_CLS"
    SEQ_2_SEQ_LM = "SEQ_2_SEQ_LM"
    CAUSAL_LM = "CAUSAL_LM"
    TOKEN_CLS = "TOKEN_CLS"
    QUESTION_ANS = "QUESTION_ANS"
    FEATURE_EXTRACTION = "FEATURE_EXTRACTION"

左右滑動(dòng)查看完整代碼

3.3 NLLB 模型微調(diào):數(shù)據(jù)

因?yàn)槲覀兿M麑?query 翻譯成英語后,能夠通過文本匹配與英語 APP 進(jìn)行匹配,因此,我們希望翻譯的結(jié)果也可以盡量接近英語APP的命名方式。比如:

盡量少連詞、修飾詞等非實(shí)體,比如,“The digital wallet.“就有“the”這種無用的連詞,可能引入噪音,而翻譯成“digital wallet”,則更便于文本召回。

在一詞多義中,盡量選擇 APP 常用的詞匯,比如同樣表示“無網(wǎng)狀態(tài)“,就應(yīng)該翻譯成“offline”而不是”netless”。

為了實(shí)現(xiàn)這個(gè)效果,我們需要首先針對(duì)性的準(zhǔn)備一批數(shù)據(jù)用于微調(diào)。數(shù)據(jù)生成的工作我們采用了 ChatGPT(基于GPT 3.5的版本):

1.選擇海外運(yùn)營國家中曝光 top100 的 APP;
2.輸入 APP 主標(biāo)簽名字進(jìn)行翻譯,讓 ChatGPT 將 APP 名稱翻譯成印地語、泰語、越南語(與英語差別較大的語言),如【表2】的示例。構(gòu)建成“小語種-英語”的翻譯對(duì),進(jìn)行模型微調(diào)。

圖片

【表2】:訓(xùn)練數(shù)據(jù)示例

3.4 NLLB模型微調(diào):訓(xùn)練

3.4.1 初始化一個(gè)預(yù)訓(xùn)練的模型

from transformers import AutoModelForSeq2SeqLM
model = AutoModelForSeq2SeqLM.from_pretrained("nllb/nllb-200-distilled-1.3B")

左右滑動(dòng)查看完整代碼

3.4.2 設(shè)置 lora 參數(shù),通過 get_peft_model() 獲取需要訓(xùn)練的 PeftModel

from peft import get_peft_model, LoraConfig, TaskType


peft_config = LoraConfig(
    task_type=TaskType.SEQ_2_SEQ_LM,
    inference_mode=False,
    r=8,
    lora_alpha=16,
    lora_dropout=0.1,
    target_modules=["q_proj", "k_proj", "v_proj", "out_proj", "fc_in", "fc_out", "wte"],
)
lora_model = get_peft_model(model, peft_config)
lora_model.print_trainable_parameters()
# trainable params: 4718592 || all params: 1375356928 || trainable%: 0.3430812688646303

左右滑動(dòng)查看完整代碼

3.4.3 按照平常的訓(xùn)練方式進(jìn)行訓(xùn)練

訓(xùn)練參數(shù)量降至原先的0.34%,原本需要幾塊 GPU 并行訓(xùn)練的參數(shù),現(xiàn)在可以降低至單卡完成,甚至可以在 CPU 機(jī)器上完成。訓(xùn)練完畢,將 PeftModel 保存下來。

lora_model.save_pretrained('nllb_lora_model')

左右滑動(dòng)查看完整代碼

3.5 NLLB 模型微調(diào):推理

因?yàn)榍懊嫖覀儍H僅保存了 PeftModel 模型,因此,在推理過程中,我們需要將 base 模型和 lora 參數(shù)同時(shí)載入進(jìn)行推理。

3.5.1 初始化前面的 base 模型

from transformers import AutoModelForSeq2SeqLM
model = AutoModelForSeq2SeqLM.from_pretrained("nllb/nllb-200-distilled-1.3B")

左右滑動(dòng)查看完整代碼

3.5.2 通過獲取保存的 lora 參數(shù),獲取 PeftModel 結(jié)果

from peft import PeftConfig, PeftModel
config = PeftConfig.from_pretrained("nllb_lora_model")
lora_model = PeftModel.from_pretrained(model, "nllb_lora_model")

左右滑動(dòng)查看完整代碼

3.5.3 按照平常的推理方式輸出結(jié)果

從自身實(shí)驗(yàn)結(jié)果來看,LoRA 微調(diào)速度很快,需要的計(jì)算資源小,同時(shí)產(chǎn)生的結(jié)果也很不錯(cuò),大多數(shù) case 基本上可以達(dá)到和全量參數(shù)微調(diào)類似的效果。

lora_model.generate(
    **encoded_text, forced_bos_token_id=tokenizer.lang_code_to_id["eng_Latn"]
)

左右滑動(dòng)查看完整代碼

從開源的測(cè)試來看,LoRA 基本上都是可以訓(xùn)練不足1%的參數(shù),完成接近全量參數(shù)微調(diào)的效果。

3.6 NLLB 模型微調(diào)前后效果對(duì)比

翻譯同時(shí)能夠做源語言的簡單糾錯(cuò)與補(bǔ)全

比如說,用戶的輸入為免的游戲,實(shí)際表述應(yīng)該是免費(fèi)的游戲,經(jīng)過 NLLB-200 模型翻譯后,可以得到正確的英語free games。從而可以方便進(jìn)行后續(xù)的文本、標(biāo)簽、語義等召回。

無用的連詞減少,能夠得到更適合應(yīng)用搜索的簡潔 query

原始版本的翻譯是基于文章的,所以會(huì)有很多連詞等等,讓整個(gè)句子讀起來更通順更優(yōu)美(更長)。這種方式并不利于應(yīng)用搜索,因?yàn)閼?yīng)用名稱本身就很短,普通的 query 也是一兩個(gè)短詞,所以翻譯出一整個(gè)長句子,反而不利于召回到正確的結(jié)果。比如下面的 case:

圖片

拿第一個(gè)結(jié)果舉例,如果翻譯出來 Playing games of chat,那就會(huì)有很多 Party Games 的召回,和用戶的需求比較不符。原因是 query 里面包含比較多詞語,因此就會(huì)帶來一定的噪音,使得文本匹配的時(shí)候,匹配到一些并不關(guān)鍵的詞語。

圖片

因此需要模型盡量翻譯出靠近 APP 的名字,如果是翻譯出 chat game ,那整個(gè) query 就簡潔了不少,因此噪音減少之后,召回的結(jié)果相關(guān)度也明顯增加,甚至可以通過類似標(biāo)簽找到 Prank Master 一類的結(jié)果。

圖片

讓 query 更符合 APP 命名
某類應(yīng)用應(yīng)該是有一類應(yīng)用常用的命名方式的,比如仿真模擬類游戲,一般就叫做什么 simulation 或者是 simulator,詞典的話,一般就是 dictionary 而不是 word,教發(fā)音的 APP 名字一般是 spell 而不是 syllable,因此,在下游數(shù)據(jù) finetune 之后,可以讓翻譯的 query 更加靠近 APP 本身命名。

圖片

比如,翻譯成 A mocking game,事實(shí)上很少有應(yīng)用或者游戲的名字帶有 mocking 的,因此文本召回使用的主要關(guān)鍵詞的是 game,那當(dāng)然就很難滿足用戶的需求。

圖片

但是如果能夠翻譯出來 simulation game,那就能找到學(xué)校模擬、史萊姆模擬等一系列模擬游戲。

圖片

四、使用 NLLB-200 翻譯結(jié)果作為 LLM 的 prompt

毫無疑問,無論是 GPT3.5 還是 GPT4,都是以英文為中心的大規(guī)模語言模型。而文心一言、通義千問以及豆包和 kimi,則是以中文為中心。

大規(guī)模語言模型的訓(xùn)練是極其耗費(fèi)資源的,所以像是非洲貧窮國家,很難出現(xiàn)一款以自己的語言為中心的大規(guī)模語言模型。那是不是這些國家的人,如果不會(huì)中文和英文,就不能享受到大規(guī)模語言模型的便利了呢?答案當(dāng)然不是的,現(xiàn)在的一部分研究表明,將小語種的 prompt 翻譯到英文之后,ChatGPT 或者 Llama 就可以迅速給出對(duì)應(yīng)的準(zhǔn)確結(jié)果。

4.1 直接 prompt 和翻譯 prompt 的實(shí)踐

我們嘗試一個(gè)很小眾的語種--毛利語(mri)的問題。一般而言,我們會(huì)根據(jù)語種統(tǒng)計(jì),比如 Common Crawl,把高于1%占比的語言看作高資源語種,其他看作低資源語種。根據(jù)統(tǒng)計(jì),毛利語的語言占比為0.0009%,是當(dāng)之無愧的小語種。接下來,我們就用這個(gè)低資源語種來做prompt的實(shí)驗(yàn)。

輸入:

Ko te hanga i te koroka me 2 raka o te kakahu muka kahurangi me te haurua o te nui o te kakahu muka ma. E hia katoa nga momo kakahu ka whakamahia kia rite ki te whakatakotoranga: "Whakautu:".

ChatGPT 輸出:

Kia taea te hanga i te koroka me 2 raka o te kakahu muka kahurangi me te haurua o te nui o te kakahu muka ma, ka taea te whakamahia i nga momo kakahu katoa ka rite ki te whakatakotoranga "Whakautu: ". Ka taea te whakamahi i nga momo kakahu penei i te kakahu muka, te kakahu pukapuka, te kakahu rarau, me etahi atu. Ko te take he kia rite te whakamahi me te whakarite i te whakatakotoranga ki te hiahia o te tangata.

但是,這個(gè)回答從格式上看應(yīng)該就不對(duì)。我們把輸出翻譯回中文來做理解,可以看到,這個(gè)回答的意思是:

為了能夠用2鎖藍(lán)色纖維布和一半數(shù)量的白色纖維布制作一件斗篷,所有類型的布料都可以按照“答案:”的格式使用??捎糜诶w維布、書布、鞋布等不同類型的衣服。原因就是要根據(jù)用戶的需求來使用。

這個(gè)回答是完全驢唇不對(duì)馬嘴的回答。

同時(shí),我們把這個(gè)問題輸入到兩個(gè)以中文語料為中心的模型–通義千問和 ChatGLM2 里面看一下。可以看到,以中文語料為中心的兩個(gè)模型更加沒辦法理解和處理這個(gè)問題。

通義千問 qwen-max-1201輸出

Ko te whakautu i to kōrero, heoi anō tēnei: "Tau Arapi" kua whakamahia hei tauira mō te whakatakotoranga o ngā momo kakahu. Ko te koroka me 2 raka o te kakahu muka kahurangi me te haurua o te nui o te kakahu muka ma, ka whakamahia kia rite ki te whakatakotoranga o "Whakautu: ". Nā reira, ko te whakatakotoranga o ngā momo kakahu nei e rua ake atu ana ki te tauira o "Whakautu: ".

ChatGLM2-6B 輸出:

I'm sorry, but it appears that the text you provided doesn't have a clear question or request for me to respond to. Could you please provide more context or clarify what you would like to know or talk about?

但是如果我們將它翻譯成中文或者英語呢?通過翻譯軟件,我們可以得到這個(gè) prompt 直接翻譯成中文是:

制作一件袍子需要2 匹藍(lán)色纖維布料和這個(gè)數(shù)量一半的白色纖維布料。它一共需要用掉多少匹布料,您的最終答案的格式應(yīng)為:"答案: <阿拉伯?dāng)?shù)字>".

對(duì)應(yīng)的輸出 ChatGPT 輸出:

製作一件袍子需要 2 匹藍(lán)色纖維布料和這個(gè)數(shù)量一半的白色纖維布料。它一共需要用掉多少匹布料?答案:3。

雖然輸出是繁體字,但是不影響我們理解,這個(gè)回答結(jié)果是正確的。同理,我們也把這個(gè)prompt輸入到通義千問和 ChatGLM2 里面看一下??梢钥吹剑藭r(shí)通義千問已經(jīng)可以回答正確了。

通義千問 qwen-max-1201 輸出:

答案: 3 匹

ChatGLM2-6B 輸出:

答案:4.5

翻譯成英語,則是:

To make a robe, two pieces of blue fiber and half of that amount of white fiber are needed. How many pieces of fabric does it take to make? You should format your final answer as "Answer:".

ChatGPT 輸出是:

To make the robe, it takes a total of 3 pieces of fabric.
Answer: 3

同理,我們也把這個(gè) prompt 輸入到通義千問和 ChatGLM2 里面看一下??梢钥吹剑藭r(shí)通義千問依舊是可以正確回答的。ChatGLM 的回答錯(cuò)誤可能是因?yàn)?B模型在推理上的不足。

通義千問 qwen-max-1201 輸出:

To make a robe, we need 2 pieces of blue fiber and half of that amount of white fiber. Half of 2 is 1, so we need 1 piece of white fiber.
In total, we need 2 pieces of blue fiber + 1 piece of white fiber = 3 pieces of fabric.
Therefore, the answer is: Answer: 3.

ChatGLM2-6B 輸出:

Answer: 7

我們可以看到,一旦毛利語的 prompt 先通過翻譯,變成了高資源語種,比如中文或者英語,模型就能給出正確的答案,同時(shí)格式也能夠滿足我們的要求。

4.2 直接 prompt 和翻譯 prompt 的效果

圖片

【圖2】:各語種直接 prompt &統(tǒng)一翻譯成英語 prompt 在 ChatGPT 和 Llama-2-70B-Chat 的表現(xiàn)

在論文中,研究人員提到,高資源語種翻譯成英語之后再輸入大模型,可能并不會(huì)有很大的提升,甚至還可能帶來噪音,影響效果。但是,低資源語種,如果能夠先翻譯成高資源語種,然后再輸入現(xiàn)在以高資源語種為中心的大模型,往往就能夠取得不錯(cuò)的效果。

我們從【圖2】也可以看出來,對(duì)于中文這種高資源語言,使用翻譯之后,在 ChatGPT 中效果還不如直接用中文 prompt;而在 Llama 中,將中文翻譯成英語,然后再輸入 Llama,表現(xiàn)則要優(yōu)于中文 prompt,這可能是因?yàn)?Llama 訓(xùn)練語料中的中文語料數(shù)量要遠(yuǎn)遠(yuǎn) ChatGPT 中的中文語料數(shù)量。

五、總結(jié)與展望

使用 LLM 生成的語料來微調(diào)特定任務(wù)的 NLLB 模型是一個(gè)常見的做法,許多場(chǎng)景都在嘗試?yán)?LLM 的知識(shí)來更好地適應(yīng)自己的任務(wù)。然而,LLM 生成的知識(shí)可能存在誤導(dǎo)性,有時(shí)甚至可能與事實(shí)不符,因此在使用這些語料時(shí),需要進(jìn)行機(jī)器篩選或人工判斷。

雖然機(jī)器翻譯能提升以英語或中文等高資源語言為中心的 LLM 在多語言 NLP 任務(wù)中的性能,但并非適用于所有情境。對(duì)于需要深度語言理解及考慮文化差異的任務(wù),使用母語提示常常更具有潛力,因?yàn)槟刚Z能更準(zhǔn)確地捕捉文化和語言的微妙差別。因此,開發(fā)更多種類的多語言 LLM 是非常必要的。

【參考資料】

[1] Costa-jussà M R, Cross J, ?elebi O, et al. No language left behind: Scaling human-centered machine translation[J]. arXiv preprint arXiv:2207.04672, 2022.

[2] Moslem Y, Romani G, Molaei M, et al. Domain terminology integration into machine translation: Leveraging large language models[C]//Proceedings of the Eighth Conference on Machine Translation. 2023: 902-911.

[3] Liu C, Zhang W, Zhao Y, et al. Is translation all you need? a study on solving multilingual tasks with large language models[J]. arXiv preprint arXiv:2403.10258, 2024.

[4] PEFT(https://huggingface.co/docs/peft/main/en/index)

責(zé)任編輯:龐桂玉 來源: vivo互聯(lián)網(wǎng)技術(shù)
相關(guān)推薦

2024-07-22 09:10:04

大語言模型推薦系統(tǒng)人工智能

2025-02-17 10:13:27

2023-08-01 08:13:47

因果分析倉儲(chǔ)管理

2024-02-26 08:15:43

語言模型低代碼

2023-05-26 13:22:49

2023-10-10 09:45:35

自動(dòng)駕駛技術(shù)

2024-03-20 10:31:27

2024-12-23 08:03:13

2025-04-03 08:00:00

開源大語言模型DAPO

2024-09-10 08:42:37

2024-01-17 08:00:00

人工智能大型語言模型Web

2024-06-17 08:49:00

模型語言

2024-06-26 19:18:53

2024-05-06 07:58:25

大模型AI智慧芽

2024-12-12 09:11:58

2022-04-28 09:36:47

Redis內(nèi)存結(jié)構(gòu)內(nèi)存管理

2024-07-23 08:06:19

緩存技術(shù)策略

2025-04-28 02:22:00

2023-09-04 12:59:03

AI數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)