🚀 XGLM-2.9B
XGLM-2.9Bは、多言語自己回帰型言語モデル(パラメータ数29億)です。5000億のサブトークンからなる多様な言語のバランスの取れたコーパスで学習されています。このモデルは、Xi Victoria Lin*、Todor Mihaylov、Mikel Artetxe、Tianlu Wang、Shuohui Chen、Daniel Simig、Myle Ott、Naman Goyal、Shruti Bhosale、Jingfei Du、Ramakanth Pasunuru、Sam Shleifer、Punit Singh Koura、Vishrav Chaudhary、Brian O'Horo、Jeff Wang、Luke Zettlemoyer、Zornitsa Kozareva、Mona Diab、Veselin Stoyanov、Xian Li*(*同等の貢献)による論文 Few-shot Learning with Multilingual Language Models で紹介されました。元の実装は このリポジトリ で公開されています。
📚 詳細ドキュメント
学習データ統計
XGLM-2.9Bの学習データ統計は以下の表に示されています。
ISO-639-1 |
語族 |
言語名 |
#トークン |
比率 |
低リソースアップサンプリング後の比率 |
en |
インド・ヨーロッパ語族 |
英語 |
803526736124 |
0.489906 |
0.3259 |
ru |
インド・ヨーロッパ語族 |
ロシア語 |
147791898098 |
0.0901079 |
0.0602 |
zh |
漢藏語族 |
中国語 |
132770494630 |
0.0809494 |
0.0483 |
de |
インド・ヨーロッパ語族 |
ドイツ語 |
89223707856 |
0.0543992 |
0.0363 |
es |
インド・ヨーロッパ語族 |
スペイン語 |
87303083105 |
0.0532282 |
0.0353 |
fr |
インド・ヨーロッパ語族 |
フランス語 |
77419639775 |
0.0472023 |
0.0313 |
ja |
日本語族 |
日本語 |
66054364513 |
0.040273 |
0.0269 |
it |
インド・ヨーロッパ語族 |
イタリア語 |
41930465338 |
0.0255648 |
0.0171 |
pt |
インド・ヨーロッパ語族 |
ポルトガル語 |
36586032444 |
0.0223063 |
0.0297 |
el |
インド・ヨーロッパ語族 |
現代ギリシャ語 |
28762166159 |
0.0175361 |
0.0233 |
ko |
朝鮮語族 |
韓国語 |
20002244535 |
0.0121953 |
0.0811 |
fi |
ウラル語族 |
フィンランド語 |
16804309722 |
0.0102455 |
0.0681 |
id |
オーストロネシア語族 |
インドネシア語 |
15423541953 |
0.00940365 |
0.0125 |
tr |
ツルコ語族 |
トルコ語 |
12413166065 |
0.00756824 |
0.0101 |
ar |
アフリカ・アジア語族 |
アラビア語 |
12248607345 |
0.00746791 |
0.0099 |
vi |
オーストロアジア語族 |
ベトナム語 |
11199121869 |
0.00682804 |
0.0091 |
th |
タイ・カダイ語族 |
タイ語 |
10842172807 |
0.00661041 |
0.044 |
bg |
インド・ヨーロッパ語族 |
ブルガリア語 |
9703797869 |
0.00591635 |
0.0393 |
ca |
インド・ヨーロッパ語族 |
カタルーニャ語 |
7075834775 |
0.0043141 |
0.0287 |
hi |
インド・ヨーロッパ語族 |
ヒンディー語 |
3448390110 |
0.00210246 |
0.014 |
et |
ウラル語族 |
エストニア語 |
3286873851 |
0.00200399 |
0.0133 |
bn |
インド・ヨーロッパ語族 |
ベンガル語 |
1627447450 |
0.000992245 |
0.0066 |
ta |
ドラヴィダ語族 |
タミル語 |
1476973397 |
0.000900502 |
0.006 |
ur |
インド・ヨーロッパ語族 |
ウルドゥー語 |
1351891969 |
0.000824241 |
0.0055 |
sw |
ニジェール・コンゴ語族 |
スワヒリ語 |
907516139 |
0.000553307 |
0.0037 |
te |
ドラヴィダ語族 |
テルグ語 |
689316485 |
0.000420272 |
0.0028 |
eu |
孤立語 |
バスク語 |
105304423 |
6.42035e-05 |
0.0043 |
my |
漢藏語族 |
ビルマ語 |
101358331 |
6.17976e-05 |
0.003 |
ht |
クレオール語 |
ハイチ語 |
86584697 |
5.27902e-05 |
0.0035 |
qu |
ケチュア語族 |
ケチュア語 |
3236108 |
1.97304e-06 |
0.0001 |
モデルカード
このモデルの意図された使用方法については、XGLM-2.9B開発チームによって公開された モデルカード を参照してください。
💻 使用例
基本的な使用法
import torch
import torch.nn.functional as F
from transformers import XGLMTokenizer, XGLMForCausalLM
tokenizer = XGLMTokenizer.from_pretrained("facebook/xglm-2.9B")
model = XGLMForCausalLM.from_pretrained("facebook/xglm-2.9B")
data_samples = {
'en': [
{
"premise": "I wanted to conserve energy.",
"choice1": "I swept the floor in the unoccupied room.",
"choice2": "I shut off the light in the unoccupied room.",
"question": "effect",
"label": "1"
},
{
"premise": "The flame on the candle went out.",
"choice1": "I blew on the wick.",
"choice2": "I put a match to the wick.",
"question": "cause",
"label": "0"
}
],
'zh': [
{
"premise": "我想节约能源。",
"choice1": "我在空着的房间里扫了地板。",
"choice2": "我把空房间里的灯关了。",
"question": "effect",
"label": "1"
},
{
"premise": "蜡烛上的火焰熄灭了。",
"choice1": "我吹灭了灯芯。",
"choice2": "我把一根火柴放在灯芯上。",
"question": "cause",
"label": "0"
}
],
'hi': [
{
"premise": "M te vle konsève enèji.",
"choice1": "Mwen te fin baleye chanm lib la.",
"choice2": "Mwen te femen limyè nan chanm lib la.",
"question": "effect",
"label": "1"
},
{
"premise": "Flam bouji a te etenn.",
"choice1": "Mwen te soufle bouji a.",
"choice2": "Mwen te limen mèch bouji a.",
"question": "cause",
"label": "0"
}
]
}
def get_logprobs(prompt):
inputs = tokenizer(prompt, return_tensors="pt")
input_ids, output_ids = inputs["input_ids"], inputs["input_ids"][:, 1:]
outputs = model(**inputs, labels=input_ids)
logits = outputs.logits
logprobs = torch.gather(F.log_softmax(logits, dim=2), 2, output_ids.unsqueeze(2))
return logprobs
def COPA_eval(prompt, alternative1, alternative2):
lprob1 = get_logprobs(prompt + "\n" + alternative1).sum()
lprob2 = get_logprobs(prompt + "\n" + alternative2).sum()
return 0 if lprob1 > lprob2 else 1
for lang in data_samples_long:
for idx, example in enumerate(data_samples_long[lang]):
predict = COPA_eval(example["premise"], example["choice1"], example["choice2"])
print(f'{lang}-{idx}', predict, example['label'])
📄 ライセンス
このプロジェクトはMITライセンスの下で公開されています。