性能提升,星辰AI大模型TeleChat-12B評(píng)測(cè)
共 4888字,需瀏覽 10分鐘
·
2024-05-04 21:49
0x0. 前言
2月份的時(shí)候評(píng)測(cè)過(guò)TeleChat-7B大模型,見(jiàn)星辰AI大模型TeleChat-7B評(píng)測(cè)。最近中電信 AI 科技有限公司針對(duì)TeleChat-7B進(jìn)行了性能升級(jí),并開(kāi)源了一個(gè)更大的模型TeleChat-12B,受邀對(duì)這個(gè)大模型進(jìn)行新的評(píng)測(cè)。本文主要關(guān)注TeleChat-7B在做一些文學(xué)創(chuàng)作和代碼生成方面相比于TeleChat-7B的提升。TeleChat-7B不僅在模型結(jié)構(gòu)上有所微調(diào),而且相比于TeleChat-7B的1.5T Tokens,TeleChat-12B使用了3T Tokens進(jìn)行預(yù)訓(xùn)練,取得了更好的性能結(jié)果。下面紅框部分是TeleChat-12B相比于TeleChat-7B在通用能力,推理和代碼能力,語(yǔ)言理解能力等維度的數(shù)據(jù)集上的性能提升:
0x1. TeleChat-12B相比于TeleChat-7B的差異點(diǎn)
TeleChat-12B和TeleChat-7B均開(kāi)源在https://github.com/Tele-AI/Telechat這個(gè)倉(cāng)庫(kù)中,并且在Huggingface,ModelScope等大模型托管平臺(tái)進(jìn)行托管,另外還開(kāi)源了int8和int4兩種低比特類型的模型方便部署。這里著重說(shuō)明一下TeleChat-12B和TeleChat-7B的差異之處:
-
數(shù)據(jù)方面,TeleChat-12B使用了3T tokens進(jìn)行預(yù)訓(xùn)練,而TeleChat-7B則只用了1.5T tokens。 -
在模型結(jié)構(gòu)方面,相比TeleChat-7B模型,TeleChat-12B模型采用了詞嵌入層與輸出層解耦的結(jié)構(gòu),將詞嵌入層和輸出lm head層參數(shù)分開(kāi),有助于增強(qiáng)訓(xùn)練穩(wěn)定性和收斂性。 -
在訓(xùn)練方法方面,TeleChat-12B訓(xùn)練時(shí)使用更科學(xué)的數(shù)據(jù)配比學(xué)習(xí)與課程學(xué)習(xí)的方法,使用小參數(shù)模型在多種數(shù)據(jù)配比的數(shù)據(jù)上擬合,得到對(duì)各個(gè)數(shù)據(jù)集難度的先驗(yàn)估計(jì);訓(xùn)練過(guò)程中每隔一段時(shí)間自動(dòng)化評(píng)估當(dāng)前模型在所有數(shù)據(jù)集上的loss,以及在評(píng)測(cè)集上的生成效果,動(dòng)態(tài)提升較難學(xué)習(xí)的數(shù)據(jù)集權(quán)重,保證模型在各個(gè)數(shù)據(jù)集上都有較佳的擬合效果。 -
后續(xù)通過(guò)對(duì)比TeleChat-7B和TeleChat-12B在文創(chuàng)和代碼方面的一些例子可以發(fā)現(xiàn)TeleChat-12B在指令跟隨,幻覺(jué),補(bǔ)全文本的指令以及代碼創(chuàng)作上都有較大提升。
0x2. 環(huán)境配置
可以使用官方提供的Docker鏡像,也可以自己按照 https://github.com/Tele-AI/Telechat/blob/master/requirements.txt 來(lái)配置。我這里是直接使用了官方的鏡像,基本沒(méi)踩什么坑,按照 https://github.com/Tele-AI/Telechat/blob/master/docs/tutorial.md 這個(gè)教程操作就可以。
0x3. 文學(xué)創(chuàng)作能力測(cè)試
為了更加真實(shí)的觀察模型的文學(xué)創(chuàng)作能力,這里不使用TeleChat官方開(kāi)源倉(cāng)庫(kù)提供的例子,而是使用我們自己的一些prompt來(lái)進(jìn)行測(cè)試。其中部分例子取自:https://github.com/SkyworkAI/Skywork#chat%E6%A8%A1%E5%9E%8B%E6%A0%B7%E4%BE%8B%E5%B1%95%E7%A4%BA 。然后來(lái)關(guān)注TeleChat-7B和TeleChat-13B的輸出結(jié)果,測(cè)試代碼為:
import os
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
os.environ["CUDA_VISIBLE_DEVICES"] = '0'
question="通過(guò)對(duì)“紅樓夢(mèng)中的人,都散在眼前”的理解,嘗試創(chuàng)作一首描繪夢(mèng)境與現(xiàn)實(shí)的五言律詩(shī)。"
print('==============Prompt===================')
print(question)
print('==============TeleChat-7B==============')
tokenizer = AutoTokenizer.from_pretrained('/bbuf/telechat-7B/', trust_remote_code=True,)
model = AutoModelForCausalLM.from_pretrained('/bbuf/telechat-7B/', trust_remote_code=True, device_map="auto", torch_dtype=torch.float16)
generate_config = GenerationConfig.from_pretrained('/bbuf/telechat-7B/')
answer, history = model.chat(tokenizer = tokenizer, question=question, history=[], generation_config=generate_config, stream=False)
print(answer)
print('==============TeleChat-12B==============')
tokenizer = AutoTokenizer.from_pretrained('/mnt/data/cangshui/bbuf/TeleChat-12B/', trust_remote_code=True,)
model = AutoModelForCausalLM.from_pretrained('/mnt/data/cangshui/bbuf/TeleChat-12B/', trust_remote_code=True, device_map="auto", torch_dtype=torch.float16)
generate_config = GenerationConfig.from_pretrained('/mnt/data/cangshui/bbuf/TeleChat-12B/')
answer, history = model.chat(tokenizer = tokenizer, question=question, history=[], generation_config=generate_config, stream=False)
print(answer)
另外我還做了一個(gè)改動(dòng),把兩個(gè)模型文件夾下的generation_config.json里面的do_sample都改成了true,讓結(jié)果更加豐富。
針對(duì)相同的輸入prompt分別使用7b和12b的模型進(jìn)行推理,對(duì)比輸出結(jié)果。
-
詩(shī)詞創(chuàng)作
測(cè)試一下寫(xiě)詩(shī),發(fā)現(xiàn)TeleChat-7B和TeleChat-12B模型在詩(shī)詞創(chuàng)作方面的能力都比較有限,雖然可以生成一些和prompt描述相關(guān)的文字,但是對(duì)五言,七言等詩(shī)歌形式往往不能正常理解。可能和數(shù)據(jù)里面沒(méi)有特意微調(diào)這種情況有關(guān)系。
-
廣告文案
從這幾個(gè)例子可以看到TeleChat-12B的指令跟隨能力比7B要更好一些,并且輸出的內(nèi)容質(zhì)量也更高。
-
作文生成 (上面2張圖是一個(gè)prompt)
上面寫(xiě)了2篇作文,看起來(lái)12B的模型也是比7B的表現(xiàn)更好,重要的是對(duì)于字?jǐn)?shù)的判斷12B模型更加準(zhǔn)確,而7B模型似乎忽略了prompt里面字?jǐn)?shù)限制的指令。
-
演講稿生成
上面兩張圖是同一個(gè)prompt。
TeleChat-12B的創(chuàng)作質(zhì)量相比于TeleChat-7B明顯更高。
-
心得體會(huì)
上面三張圖是一個(gè)prompt的輸出。
上面兩張圖是一個(gè)prompt的輸出。
同樣,TeleChat-12B的創(chuàng)作質(zhì)量相比于TeleChat-7B明顯更高,并且更加豐富,對(duì)于發(fā)明專利寫(xiě)得更專業(yè)。
-
記錄文
上面兩張圖片是同一個(gè)prompt的輸出。
總的來(lái)說(shuō),在文學(xué)創(chuàng)作方面,TeleChat-12B相比于TeleChat-7B無(wú)論是在質(zhì)量還是指令跟隨上都更好一些,可以獲得更好的創(chuàng)作效果。
0x4. 代碼能力對(duì)比測(cè)試
-
Python中的深拷貝和淺拷貝有什么區(qū)別?請(qǐng)用代碼示例解釋這兩種拷貝方式。
對(duì)于深淺拷貝,TeleChat-7B的答案完全錯(cuò)誤,而TeleChat-12B的答案則更靠譜,指出了淺拷貝是副本共享內(nèi)部對(duì)象的引用,而深拷貝的副本不共享內(nèi)部對(duì)象的引用,但在對(duì)比的時(shí)候代碼注釋仍然有個(gè)小錯(cuò)誤。
-
如何合并兩個(gè)已排序的數(shù)組?編寫(xiě)一個(gè)函數(shù),將兩個(gè)已排序的整數(shù)數(shù)組合并為一個(gè)排序后的數(shù)組。
-
判斷一個(gè)數(shù)是否為質(zhì)數(shù)。編寫(xiě)一個(gè)函數(shù),判斷給定的整數(shù)是否是質(zhì)數(shù),并考慮優(yōu)化算法的效率。
相比于TeleChat-7B的答案。TeleChat-12B提供了兩種方法并指明了第二種方法的時(shí)間復(fù)雜度更小,回答的質(zhì)量更高。
-
c++編寫(xiě)一個(gè)函數(shù),將字符串中所有指定的單詞替換為另一個(gè)單詞。
對(duì)于這個(gè)問(wèn)題,TeleChat-12B可以正確理解并給出解決方案,而TeleChat-7B的答案是錯(cuò)誤的。
通過(guò)上述一些編程問(wèn)題,可以發(fā)現(xiàn)TeleChat-12B在編程能力上相比于TeleChat-7B有較大提升,這種提升的原因大概率是新增的1.5T數(shù)據(jù)包含了部分代碼數(shù)據(jù)。
0x5. 總結(jié)
本文通過(guò)對(duì)比TeleChat-7B和TeleChat-12B在文創(chuàng)和代碼方面的一些例子可以發(fā)現(xiàn)TeleChat-12B在指令跟隨,幻覺(jué),補(bǔ)全文本的指令以及代碼創(chuàng)作上都有較大提升。希望后續(xù)能持續(xù)在網(wǎng)絡(luò)結(jié)構(gòu),數(shù)據(jù)方面做出改進(jìn),做出更強(qiáng)的開(kāi)源模型。
