モデル概要
モデル特徴
モデル能力
使用事例
🚀 NanoT5 Small Malaysian Translation V2
このモデルは、2048のコンテキスト長を使用して70億トークンの翻訳データセットで、https://huggingface.co/mesolitica/nanot5-small-malaysian-cased をファインチューニングしたものです。
- このモデルは、ローカライズされたテキストを標準テキストに翻訳することができます。
- このモデルは、標準テキストをローカライズされたテキストに逆翻訳することができ、テキスト拡張に適しています。
- このモデルは、コードを翻訳することができます。
- このモデルは、ネイティブにコードスイッチングを行います。
- このモデルは、
\n
、\t
、\r
をそのまま維持する必要があります。
Wandbのリンク: https://wandb.ai/huseinzol05/nanot5-small-malaysian-cased-translation-v4-multipack-post-v3
🚀 クイックスタート
モデルの概要
Property | Details |
---|---|
サポート言語 | マレー語、タミル語、中国語、インドネシア語 |
ライブラリ名 | transformers |
ベースモデル | mesolitica/nanot5-small-malaysian-cased |
パイプラインタグ | 翻訳 |
新バージョン | mesolitica/nanot5-small-malaysian-translation-v2.1 |
モデルの使用方法
from transformers import AutoTokenizer, T5ForConditionalGeneration
tokenizer = AutoTokenizer.from_pretrained('mesolitica/nanot5-small-malaysian-translation-v2')
model = T5ForConditionalGeneration.from_pretrained('mesolitica/nanot5-small-malaysian-translation-v2')
strings = [
'ak tak paham la',
'Hi guys! I noticed semalam & harini dah ramai yang dapat cookies ni kan. So harini i nak share some post mortem of our first batch:',
"Memanglah. Ini tak payah expert, aku pun tau. It's a gesture, bodoh.",
'jam 8 di pasar KK memang org ramai 😂, pandai dia pilih tmpt.',
'Jadi haram jadah😀😃🤭',
'nak gi mana tuu',
'Macam nak ambil half day',
"Bayangkan PH dan menang pru-14. Pastu macam-macam pintu belakang ada. Last-last Ismail Sabri naik. That's why I don't give a fk about politics anymore. Sumpah dah fk up dah.",
]
all_special_ids = [0, 1, 2]
prefix = 'terjemah ke Melayu: '
input_ids = [{'input_ids': tokenizer.encode(f'{prefix}{s}{tokenizer.eos_token}', return_tensors='pt')[
0]} for s in strings]
padded = tokenizer.pad(input_ids, padding='longest')
outputs = model.generate(**padded, max_length = 100)
tokenizer.batch_decode([[i for i in o if i not in all_special_ids] for o in outputs])
出力例
[' Saya tidak faham',
' Hi guys! Saya perasan semalam dan hari ini ramai yang menerima cookies. Jadi hari ini saya ingin berkongsi beberapa post mortem batch pertama kami:',
' Memanglah. Tak perlu pakar, saya juga tahu. Ini adalah satu isyarat, bodoh.',
' Orang ramai di pasar KK pada jam 8 pagi, mereka sangat pandai memilih tempat.',
' Jadi haram jadah 😀😃🤭',
' Di mana kamu pergi?',
' Saya ingin mengambil separuh hari',
' Bayangkan PH dan menang PRU-14. Terdapat pelbagai pintu belakang. Akhirnya, Ismail Sabri naik. Itulah sebabnya saya tidak lagi bercakap tentang politik. Saya bersumpah sudah berputus asa.']
✨ 主な機能
コードの翻訳
英語からマレー語への翻訳
code_english = """
Here's a detailed Python code solution for implementing a Convolutional Neural Network (CNN) for image classification on the CIFAR-10 dataset:
```python
import tensorflow as tf
from tensorflow.keras.datasets import cifar10
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from sklearn.model_selection import GridSearchCV
from tensorflow.keras.wrappers.scikit_learn import KerasClassifier
import numpy as np
import matplotlib.pyplot as plt
# Load and preprocess the CIFAR-10 dataset
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0
y_train = tf.keras.utils.to_categorical(y_train, num_classes=10)
y_test = tf.keras.utils.to_categorical(y_test, num_classes=10)
# Define the CNN architecture
def create_model(learning_rate=0.001, dropout_rate=0.5, num_filters=32):
model = Sequential()
model.add(Conv2D(num_filters, (3, 3), activation='relu', padding='same', input_shape=(32, 32, 3)))
model.add(Conv2D(num_filters, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(dropout_rate))
model.add(Conv2D(num_filters * 2, (3, 3), activation='relu', padding='same'))
model.add(Conv2D(num_filters * 2, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(dropout_rate))
model.add(Conv2D(num_filters * 4, (3, 3), activation='relu', padding='same'))
model.add(Conv2D(num_filters * 4, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(dropout_rate))
model.add(Flatten())
model.add(Dense(512, activation='relu'))
model.add(Dropout(dropout_rate))
model.add(Dense(10, activation='softmax'))
optimizer = Adam(learning_rate=learning_rate)
model.compile(optimizer=optimizer, loss='categorical_crossentropy', metrics=['accuracy'])
return model
Explanation:
a) Data preprocessing:
- The CIFAR-10 dataset is loaded using
cifar10.load_data()
. - The pixel values of the images are normalized to the range [0, 1] by dividing them by 255.
- The labels are converted to categorical format using
to_categorical()
.
b) CNN Architecture:
- The CNN architecture consists of three convolutional blocks, each containing two convolutional layers followed by a max-pooling layer and dropout regularization.
- The number of filters in each convolutional block is increased progressively (32, 64, 128).
- ReLU activation function is used in the convolutional layers.
- The final layers are fully connected, with a softmax activation for multi-class classification. """
input_ids = tokenizer.encode(f'terjemah ke Melayu: {code_english}{tokenizer.eos_token}', return_tensors = 'pt') outputs = model.generate(input_ids, max_length = 1024) outputs = [i for i in outputs[0] if i not in all_special_ids] print(tokenizer.decode(outputs, spaces_between_special_tokens = False))
#### インドネシア語からマレー語への翻訳
```python
code_indon = """
`Untuk menggunakan numpy, pertama-tama, Anda perlu menginstalnya melalui pip. Anda dapat melakukannya dengan menjalankan perintah `pip install numpy` di terminal Anda.
Setelah numpy terinstal, Anda dapat mengimpor modul numpy dengan menambahkan baris `import numpy as np` di awal program Anda.
Berikut adalah contoh beberapa operasi dasar numpy:
``` python
import numpy as np
# membuat array numpy dari list
my_list = [1, 2, 3, 4, 5]
my_array = np.array(my_list)
# membuat array numpy dengan rentang nilai tertentu
my_range = np.arange(0, 10, 2) # nilai awal, nilai akhir, dan loncatan
# membuat array numpy dengan nilai acak
my_random_array = np.random.rand(3, 3) # 3 baris dan 3 kolom
# mengakses elemen array numpy
print(my_array[0]) # mengakses elemen pertama
# melakukan operasi matematika pada array numpy
my_array = my_array + 1 # menambah setiap elemen dengan 1
my_array = my_array * 2 # mengalikan setiap elemen dengan 2
# mengubah bentuk array numpy
my_array = np.reshape(my_array, (2, 5)) # menjadi array 2D dengan 2 baris dan 5 kolom
Itulah beberapa operasi dasar numpy. Anda dapat menemukan dokumentasi resmi numpy di https://numpy.org/doc/stable/. """ input_ids = tokenizer.encode(f'terjemah ke Melayu: {code_indon}{tokenizer.eos_token}', return_tensors = 'pt') outputs = model.generate(input_ids, max_length = 1024) outputs = [i for i in outputs[0] if i not in all_special_ids] print(tokenizer.decode(outputs, spaces_between_special_tokens = False))
#### インドネシア語からジャワ語への翻訳
```python
code_indon = """
`Untuk menggunakan numpy, pertama-tama, Anda perlu menginstalnya melalui pip. Anda dapat melakukannya dengan menjalankan perintah `pip install numpy` di terminal Anda.
Setelah numpy terinstal, Anda dapat mengimpor modul numpy dengan menambahkan baris `import numpy as np` di awal program Anda.
Berikut adalah contoh beberapa operasi dasar numpy:
``` python
import numpy as np
# membuat array numpy dari list
my_list = [1, 2, 3, 4, 5]
my_array = np.array(my_list)
# membuat array numpy dengan rentang nilai tertentu
my_range = np.arange(0, 10, 2) # nilai awal, nilai akhir, dan loncatan
# membuat array numpy dengan nilai acak
my_random_array = np.random.rand(3, 3) # 3 baris dan 3 kolom
# mengakses elemen array numpy
print(my_array[0]) # mengakses elemen pertama
# melakukan operasi matematika pada array numpy
my_array = my_array + 1 # menambah setiap elemen dengan 1
my_array = my_array * 2 # mengalikan setiap elemen dengan 2
# mengubah bentuk array numpy
my_array = np.reshape(my_array, (2, 5)) # menjadi array 2D dengan 2 baris dan 5 kolom
Itulah beberapa operasi dasar numpy. Anda dapat menemukan dokumentasi resmi numpy di https://numpy.org/doc/stable/. """ input_ids = tokenizer.encode(f'terjemah ke Jawi: {code_indon}\n{tokenizer.eos_token}', return_tensors = 'pt') outputs = model.generate(input_ids, max_length = 1024) outputs = [i for i in outputs[0] if i not in all_special_ids] print(tokenizer.decode(outputs, spaces_between_special_tokens = False))
## 📚 ドキュメント
### 評価

- IIUM Confession-EN はゴールドラベルで、私たちは人間にIIUM Confessionのローカルマレー語を標準英語に翻訳してもらいました。
- それ以外は、FLORES200 からのものです。
すべての評価は、https://github.com/mesolitica/malaya/tree/master/session/translation/end-to-end/evaluate にあります。
### トレーニング方法
私たちは3つのフェーズでトレーニングを行いました。
1. 最初のフェーズでは、60億トークンのノイジーな翻訳データセットの5%を使用して、パディングベースのトレーニングですべての接頭辞を含め、注意バイアスを改善しました。
2. 2番目のフェーズでは、60億トークンのノイジーな翻訳データセットをパッキングベースでトレーニングし、これには注意バイアスを凍結してトレーニングを高速化する必要がありました。
3. 3番目のフェーズでは、10億トークンの高品質な翻訳データセットをパッキングベースでトレーニングし、これには注意バイアスを凍結してトレーニングを高速化する必要がありました。
### サポートされる接頭辞
1. `'terjemah ke Mandarin: '`
3. `'terjemah ke Tamil: '`
4. `'terjemah ke Jawa: '` <b><sup>+</sup></b>
5. `'terjemah ke Melayu: '`
6. `'terjemah ke Inggeris: '`
7. `'terjemah ke johor: '` <b><sup>++</sup></b>
8. `'terjemah ke kedah: '` <b><sup>++</sup></b>
9. `'terjemah ke kelantan: '` <b><sup>++</sup></b>
10. `'terjemah ke pasar Melayu: '` <b><sup>+</sup></b>
11. `'terjemah ke melaka: '` <b><sup>++</sup></b>
12. `'terjemah ke negeri sembilan: '` <b><sup>++</sup></b>
13. `'terjemah ke pahang: '` <b><sup>++</sup></b>
14. `'terjemah ke perak: '` <b><sup>++</sup></b>
15. `'terjemah ke sabah: '` <b><sup>++</sup></b>
16. `'terjemah ke sarawak: '` <b><sup>++</sup></b>
17. `'terjemah ke terengganu: '` <b><sup>++</sup></b>
18. `'terjemah ke Jawi: '` <b><sup>++</sup></b>
19. `'terjemah ke Manglish: '` <b><sup>+</sup></b>
20. `'terjemah ke Banjar: '` <b><sup>+</sup></b>
21. `'terjemah ke pasar Mandarin: '` <b><sup>+</sup></b>
22. `'terjemah ke Cantonese: '` <b><sup>++</sup></b>
- <b><sup>+</sup></b> 最小限のサポート
- <b><sup>++</sup></b> 初期サポート
> ⚠️ **Important Note**
>
> `max_length` を増やすと、結果が完全になるはずです。



