🚀 IndicBART
IndicBARTは、インド諸言語と英語に焦点を当てた多言語のシーケンスツーシーケンスの事前学習モデルです。現在は11のインドの言語をサポートしており、mBARTアーキテクチャに基づいています。IndicBARTモデルを使用して、機械翻訳、要約、質問生成などのタスクの教師付き学習データでモデルを微調整することで、インドの言語の自然言語生成アプリケーションを構築することができます。
🚀 クイックスタート
IndicBARTは、インド諸言語と英語に特化した多言語事前学習モデルです。以下に、基本的な使用方法を示します。
from transformers import MBartForConditionalGeneration, AutoModelForSeq2SeqLM
from transformers import AlbertTokenizer, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("ai4bharat/IndicBART", do_lower_case=False, use_fast=False, keep_accents=True)
model = AutoModelForSeq2SeqLM.from_pretrained("ai4bharat/IndicBART")
bos_id = tokenizer._convert_token_to_id_with_added_voc("<s>")
eos_id = tokenizer._convert_token_to_id_with_added_voc("</s>")
pad_id = tokenizer._convert_token_to_id_with_added_voc("<pad>")
inp = tokenizer("I am a boy </s> <2en>", add_special_tokens=False, return_tensors="pt", padding=True).input_ids
out = tokenizer("<2hi> मैं एक लड़का हूँ </s>", add_special_tokens=False, return_tensors="pt", padding=True).input_ids
model_outputs=model(input_ids=inp, decoder_input_ids=out[:,0:-1], labels=out[:,1:])
model_outputs.loss
model_outputs.logits
model.eval()
model_output=model.generate(inp, use_cache=True, num_beams=4, max_length=20, min_length=1, early_stopping=True, pad_token_id=pad_id, bos_token_id=bos_id, eos_token_id=eos_id, decoder_start_token_id=tokenizer._convert_token_to_id_with_added_voc("<2en>"))
decoded_output=tokenizer.decode(model_output[0], skip_special_tokens=True, clean_up_tokenization_spaces=False)
print(decoded_output)
inp = tokenizer("I am [MASK] </s> <2en>", add_special_tokens=False, return_tensors="pt", padding=True).input_ids
model_output=model.generate(inp, use_cache=True, num_beams=4, max_length=20, min_length=1, early_stopping=True, pad_token_id=pad_id, bos_token_id=bos_id, eos_token_id=eos_id, decoder_start_token_id=tokenizer._convert_token_to_id_with_added_voc("<2en>"))
decoded_output=tokenizer.decode(model_output[0], skip_special_tokens=True, clean_up_tokenization_spaces=False)
print(decoded_output)
inp = tokenizer("मैं [MASK] हूँ </s> <2hi>", add_special_tokens=False, return_tensors="pt", padding=True).input_ids
model_output=model.generate(inp, use_cache=True, num_beams=4, max_length=20, min_length=1, early_stopping=True, pad_token_id=pad_id, bos_token_id=bos_id, eos_token_id=eos_id, decoder_start_token_id=tokenizer._convert_token_to_id_with_added_voc("<2en>"))
decoded_output=tokenizer.decode(model_output[0], skip_special_tokens=True, clean_up_tokenization_spaces=False)
print(decoded_output)
inp = tokenizer("मला [MASK] पाहिजे </s> <2mr>", add_special_tokens=False, return_tensors="pt", padding=True).input_ids
model_output=model.generate(inp, use_cache=True, num_beams=4, max_length=20, min_length=1, early_stopping=True, pad_token_id=pad_id, bos_token_id=bos_id, eos_token_id=eos_id, decoder_start_token_id=tokenizer._convert_token_to_id_with_added_voc("<2en>"))
decoded_output=tokenizer.decode(model_output[0], skip_special_tokens=True, clean_up_tokenization_spaces=False)
print(decoded_output)
✨ 主な機能
- サポート言語:アッサム語、ベンガル語、グジャラート語、ヒンディー語、マラーティー語、オリヤー語、パンジャブ語、カンナダ語、マラヤーラム語、タミル語、テルグ語、英語。mBART50やmT5はこれらのすべての言語をサポートしていません。
- 軽量モデル:mBARTやmT5(-base)モデルよりもはるかに小さいため、微調整やデコードの際の計算コストが低くなります。
- 大規模コーパスで学習:4億5200万文と90億トークンの大規模なインド言語コーパス(インド英語の内容も含む)で学習されています。
- 天城体表記:英語を除くすべての言語が天城体で表現されており、関連する言語間の転移学習を促進しています。
📦 事前学習コーパス
このモデルは、IndicCorpデータ(12の言語にまたがり、4億5200万文(90億トークン))を使用して、mBARTで用いられるテキスト埋め込み目的で学習されました。
📚 ドキュメント
詳細なドキュメントはこちらを参照してください:
- https://github.com/AI4Bharat/indic-bart/
- https://indicnlp.ai4bharat.org/indic-bart/
🔧 注意事項
⚠️ 重要提示
- このモデルは最新バージョンのtransformersと互換性がありますが、バージョン4.3.2で開発されているため、可能であれば4.3.2を使用することを検討してください。
- ここではロジットと損失の取得方法、出力の生成方法のみを示しましたが、https://huggingface.co/docs/transformers/model_doc/mbart#transformers.MBartForConditionalGeneration で説明されているMBartForConditionalGenerationクラスができることはほぼすべて行うことができます。
- 使用しているトークナイザーはsentencepieceに基づいており、BPEではありません。そのため、MBartTokenizerクラスではなくAlbertTokenizerクラスを使用しています。
- 天城体以外の文字で書かれた言語(英語を除く)を使用する場合は、まずIndic NLP Libraryを使用して天城体に変換する必要があります。出力を得た後は、元の文字に戻す必要があります。
🔧 下流タスクでの微調整
- このモデルを微調整したい場合は、YANMTTツールキットを使用して、ここの指示に従って行うことができます。
- (未検証)あるいは、翻訳と要約の公式huggingfaceスクリプトを使用することもできます。
🔧 貢献者
- Raj Dabre
- Himani Shrotriya
- Anoop Kunchukuttan
- Ratish Puduppully
- Mitesh M. Khapra
- Pratyush Kumar
🔧 論文
IndicBARTを使用する場合は、以下の論文を引用してください。
@misc{dabre2021indicbart,
title={IndicBART: A Pre-trained Model for Natural Language Generation of Indic Languages},
author={Raj Dabre and Himani Shrotriya and Anoop Kunchukuttan and Ratish Puduppully and Mitesh M. Khapra and Pratyush Kumar},
year={2021},
eprint={2109.02903},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
📄 ライセンス
このモデルはMITライセンスの下で利用可能です。