File size: 8,353 Bytes
c146ab0
 
 
 
 
 
 
 
 
e003c33
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10aa569
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e003c33
 
 
 
10aa569
 
 
 
 
e003c33
 
 
 
6dc30dd
e003c33
 
4b21069
e003c33
 
 
 
 
6dc30dd
e003c33
 
 
 
 
 
 
 
 
c146ab0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2f4ed4c
c146ab0
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
---
license: mit
datasets:
- HuggingFaceFW/fineweb
- HuggingFaceFW/fineweb-2
pipeline_tag: fill-mask
---
# makiart/multilingual-ModernBert-base-preview

This model was developed by the [Algomatic](https://algomatic.jp/) team using computational resources provided by the [ABCI Generative AI Hackathon](https://abci.ai/event/2024/12/23/ja_abci_3.0_genai_hackathon.html).

- **Context Length:** 8192
- **Vocabulary Size:** 151,680
- **Total Training Tokens:** Approximately 250B tokens
- **Parameter Count:** 228M
- **Non-embedding Parameter Count:** 110M
- Utilizes fineweb and fineweb2

## How to Use

Install the required package using:

```bash
pip install -U transformers>=4.48.0
```

If your GPU supports FlashAttention, you can achieve more efficient inference by installing:

```bash
pip install flash-attn --no-build-isolation
```

## Example Usage

```python
import torch
from transformers import AutoModelForMaskedLM, AutoTokenizer, pipeline

model = AutoModelForMaskedLM.from_pretrained("makiart/multilingual-ModernBert-base", torch_dtype=torch.bfloat16)
tokenizer = AutoTokenizer.from_pretrained("makiart/multilingual-ModernBert-base")
fill_mask = pipeline("fill-mask", model=model, tokenizer=tokenizer)


results = fill_mask("우리의 대부분의 고뇌는 가능했을 또 다른 인생을 [MASK] 데서 시작된다.")

for result in results:
    print(result)

# {'score': 0.248046875, 'token': 128956, 'token_str': ' 하는', 'sequence': '우리의 대부분의 고뇌는 가능했을 또 다른 인생을 하는 데서 시작된다.'}
# {'score': 0.1328125, 'token': 61298, 'token_str': ' 한', 'sequence': '우리의 대부분의 고뇌는 가능했을 또 다른 인생을 한 데서 시작된다.'}
# {'score': 0.06689453125, 'token': 95002, 'token_str': ' 할', 'sequence': '우리의 대부분의 고뇌는 가능했을 또 다른 인생을 할 데서 시작된다.'}
# {'score': 0.055419921875, 'token': 130679, 'token_str': ' 위한', 'sequence': '우리의 대부분의 고뇌는 가능했을 또 다른 인생을 위한 데서 시작된다.'}
# {'score': 0.04052734375, 'token': 131582, 'token_str': ' 통해', 'sequence': '우리의 대부분의 고뇌는 가능했을 또 다른 인생을 통해 데서 시작된다.'}


results = fill_mask("Pinning our hopes on the unreliable notion of our potential is the root of all our [MASK].")

for result in results:
    print(result)

# {'score': 0.20703125, 'token': 5322, 'token_str': ' problems', 'sequence': 'Pinning our hopes on the unreliable notion of our potential is the root of all our problems.'}
# {'score': 0.09765625, 'token': 27850, 'token_str': ' failures', 'sequence': 'Pinning our hopes on the unreliable notion of our potential is the root of all our failures.'}
# {'score': 0.040771484375, 'token': 34565, 'token_str': ' troubles', 'sequence': 'Pinning our hopes on the unreliable notion of our potential is the root of all our troubles.'}
# {'score': 0.03173828125, 'token': 18707, 'token_str': ' dreams', 'sequence': 'Pinning our hopes on the unreliable notion of our potential is the root of all our dreams.'}
# {'score': 0.028076171875, 'token': 23209, 'token_str': ' fears', 'sequence': 'Pinning our hopes on the unreliable notion of our potential is the root of all our fears.'}


results = fill_mask("我们必须[MASK],我们只能成为此时此地的那个自己,而无法成为其他任何人。")

for result in results:
    print(result)

# {'score': 0.177734375, 'token': 99392, 'token_str': '知道', 'sequence': '我们必须知道,我们只能成为此时此地的那个自己,而无法成为其他任何人。'}
# {'score': 0.138671875, 'token': 104953, 'token_str': '承认', 'sequence': '我们必须承认,我们只能成为此时此地的那个自己,而无法成为其他任何人。'}
# {'score': 0.12255859375, 'token': 101265, 'token_str': '明白', 'sequence': '我们必须明白,我们只能成为此时此地的那个自己,而无法成为其他任何人。'}
# {'score': 0.07421875, 'token': 105712, 'token_str': '记住', 'sequence': '我们必须记住,我们只能成为此时此地的那个自己,而无法成为其他任何人。'}
# {'score': 0.0654296875, 'token': 106836, 'token_str': '认识到', 'sequence': '我们必须认识到,我们只能成为此时此地的那个自己,而无法成为其他任何人。'}
```

## Model Description

- **Training Approach:** The model was trained using a two-stage Masked Language Modeling (MLM) process:
    - **Masking Rate:** 30%
    - **Training Data:** Approximately 200B tokens with a context length of 1024 and 50B tokens with a context length of 8192.
- **Tokenizer:** Based on Qwen2.5, the tokenizer features:
    - A vocabulary size of 151,680 tokens.
    - Customizations that allow it to distinguish indentations in code, enabling better handling of programming texts.
- **Dataset:**
    - Utilizes the fineweb and fineweb2 datasets.
    - For languages with an abundance of data, the volume has been reduced.
- **Computational Resources:** Training was conducted using one node (H200 x 8) provided by ABCI, over the course of approximately 3 days.

## Evaluation

A comprehensive evaluation has not been performed yet 😭.

Based on the total training token count, it is anticipated that the model might be less competitive compared to existing models.

---

このモデルは[ABCI 生成AIハッカソン](https://abci.ai/event/2024/12/23/ja_abci_3.0_genai_hackathon.html)にて提供された計算資源によって[Algomatic](https://algomatic.jp/)チームが作成したモデルです。

- コンテキスト長:8192
- 語彙数:151,680
- 総学習トークン数:約250B Tokens
- パラメータ数:228M
- 埋め込み抜きパラメータ数:110M
- fineweb, fineweb2を利用

## How to Use

```bash
pip install -U transformers>=4.48.0
```

GPUがFlashAttentionに対応しているのであれば下記のインストールをすると効率よく推論できます。

```bash
pip install flash-attn --no-build-isolation
```

## Example Usage

```python
import torch
from transformers import AutoModelForMaskedLM, AutoTokenizer, pipeline

model = AutoModelForMaskedLM.from_pretrained("makiart/multilingual-ModernBert-base-preview", torch_dtype=torch.bfloat16)
tokenizer = AutoTokenizer.from_pretrained("makiart/multilingual-ModernBert-base-preview")
fill_mask = pipeline("fill-mask", model=model, tokenizer=tokenizer)

results = fill_mask("大きな[MASK]を一人で切り分けて食べるというのは孤独の極地ですからね")

for result in results:
    print(result)

# {'score': 0.11865234375, 'token': 142732, 'token_str': 'ケーキ', 'sequence': '大きなケーキを一人で切り分けて食べるというのは孤独の極地ですからね'}
# {'score': 0.10498046875, 'token': 52853, 'token_str': '物', 'sequence': '大きな物を一人で切り分けて食べるというのは孤独の極地ですからね'}
# {'score': 0.08154296875, 'token': 108371, 'token_str': '魚', 'sequence': '大きな魚を一人で切り分けて食べるというのは孤独の極地ですからね'}
# {'score': 0.05615234375, 'token': 111974, 'token_str': '料理', 'sequence': '大きな料理を一人で切り分けて食べるというのは孤独の極地ですからね'}
# {'score': 0.043701171875, 'token': 115913, 'token_str': '動物', 'sequence': '大きな動物を一人で切り分けて食べるというのは孤独の極地ですからね'}
```

## Model Description

- 2段階形式でMLM学習を行いました。
    - マスキングレートは30%
    - 1024のコンテキスト長で約200B Tokens
    - 8192のコンテキスト長で約50B Tokens
- トークナイザーはqwen2.5をベースとしています
    - 語彙数は151,680です
    - - コードのテキストにも対応できるようにインデント部分を区別できるようにカスタムしています
- データセット
    - fineweb, fineweb2を利用
    - データ量の多い言語は削減
- 計算資源
    - ABCIから提供いただいた計算資源のうち1ノード(H200 x 8)を利用し、約3日間の間で学習

## Evaluation

ちゃんとした評価はできていません😭

総合学習トークン数的に既存のモデルよりも劣ることが予想されます。