Firefly: 中国語会話の大規模言語モデル

投稿者: YeungNLP

この記事では、中国語の会話型大規模言語モデルであるFireflyモデルに関する著者の取り組みを紹介します。1.4B や 2.6B など、より小さなモデル パラメータ量で良好な生成結果が得られます。

プロジェクトアドレス:

https://github.com/yangjianxin1/ホタル

NLP グループに入ります —> NLP 交換グループに参加します(remark nips/emnlp/nlpcc が対応する貢献グループに入ります)

36f650147c538cc576a8acc5f1f33da4.png

01

プロジェクトの説明

Firefly (流火) は、命令チューニングを使用して中国語のデータセットで調整されたオープンソースの中国語会話大規模言語モデルです。同時に、ボキャブラリ クリッピング、ZeRO、テンソル並列処理などのテクノロジを使用して、メモリ消費を効果的に削減し、トレーニング効率を向上させます。トレーニングでは、少量のモデル パラメーターとより少ないコンピューティング リソースを使用します。

この分野のモデルのパフォーマンスを向上させるために、対句、詩、漢訳、散文、ジン ヨンの小説など、中国文化に関連する多くのデータを構築します。

柳翁(蛍の別名)は中国の伝統文化の象徴であり、腐った草を蛍と呼びますが、慈悲の心を持つと同時に、蛍は小さいながらもほのかな蛍光で夜空を照らすことができます。このプロジェクトの名前は、Du Mu の「秋の夕べ」から取られています。秋の光の中で銀色のろうそくが照らされた冷たい絵画の屏風と、ホタルが羽ばたく扇風機ですまた、このプロジェクトがホタルのように輝き、中国の NLP オープン ソース コミュニティに貢献できることを願っています。

《咏萤火》 
 唐.李白
雨打灯难灭,
风吹色更明。
若飞天上去,
定作月边星。

このプロジェクトの主な作業は次のとおりです。

    1. データセット: firefly-train-1.1M は、23 の一般的な中国語 NLP タスクの命令データを含む、1.1M の中国語マルチタスク命令を含む高品質の微調整データ セットです。タスクごとに、高品質で豊富なデータを確保するために、いくつかの指示テンプレートが手動で作成されます。

    2. モデルの剪定: LLMPruner プロジェクト - 大規模言語モデルの剪定ツールを開発しました。ボキャブラリクリッピング技術を使用して、多言語大言語モデルの重みをクリップ. トレーニング前の知識を保持することを前提として、モデルパラメーターの数を効果的に削減し、トレーニング効率を向上させ、クリップされたブルームモデルの重みを共有できます.さまざまなパラメーター スケール。

    3. 重みの共有: Bloom-1b4-zh と Bloom-2b6-zh に基づいて、firefly-1b4 と firefly-2b6 の 2 つのパラメーター スケールを持つ中国のモデルを取得するための命令を微調整します。

    4. トレーニング コード: オープン ソースのトレーニング コードで、テンソル並列処理、ZeRO、Gemini 異種メモリ空間管理などの大規模モデル トレーニング戦略をサポートします。1B-2B パラメーターでモデルをトレーニングするために使用できるグラフィックス カードは 1 つだけです。

記事の最後に、さまざまなリソースへのリンクが詳しく説明されています。

モデルは次のように使用されます。

from transformers import BloomTokenizerFast, BloomForCausalLM
device = 'cuda'
path = 'YenugNLP/firefly-1b4'


tokenizer = BloomTokenizerFast.from_pretrained(path)
model = BloomForCausalLM.from_pretrained(path)
model.eval()
model = model.to(device)
text = input('User:')
while True:
    text = '<s>{}</s></s>'.format(text)
    input_ids = tokenizer(text, return_tensors="pt").input_ids
    input_ids = input_ids.to(device)
    outputs = model.generate(input_ids, max_new_tokens=200, do_sample=True, top_p=0.8, temperature=0.35,
                             repetition_penalty=1.2, eos_token_id=tokenizer.eos_token_id)
    rets = tokenizer.batch_decode(outputs)
    output = rets[0].strip().replace(text, "").replace('</s>', "")
    print("Firefly:{}".format(output))
    text = input('User:')

02

メソッド紹介

モデルクリッピング

LLMPruner については、次の記事を参照してください。

LLMPruner: 大規模な言語モデルのトリミング ツール

LLMPruner プロジェクト リンク:

https://github.com/yangjianxin1/LLMPruner

このプロジェクトでは、最初に LLMPruner プロジェクトを使用して、元の Bloom モデルの語彙をカットし、一般的に使用される中国語と英語の語彙のみを取り出します。これにより、モデル パラメーターの量が大幅に削減され、微調整されます。

ブルームは多言語モデルです.多言語に対応する必要があるため、25万もの語彙があります.中国語の分野では、ほとんどの語彙が使用されません. 冗長な語彙を削除することにより、多言語モデルから一般的に使用される中国語と英語の語彙を抽出します. 最終的な語彙は 25w から 46145 に削減され、元の 18.39% に削減されます. トレーニング前の知識を保持しながら、パラメーターは効果的にボリュームを削減します.トレーニング効率の向上に。

Bloom-1b4-zh と Bloom-2b6-zh に基づいて、命令を微調整し、firefly-1b4 と firefly-2b6 の 2 つのパラメーター スケールを持つ中国語モデルを取得しました。これは良い結果をもたらしました。

トリミングされたモデルを次の表に示します。

b0c51189c7e835d597a7c733807d0c24.png

データセット

23 の一般的な中国語のデータ セットを収集しました.各タスクについて,データの高品質と豊富さを確保するためにいくつかの指示テンプレートが手動で作成されました.データ量は 115 万であり、トレーニング セット firefly-train-1.1M を形成します. データ分布は、次の図に示されています。

77b2a262c580137627c5b2eb217672d0.png

これをベースに Belle-train_0.5M_CN を追加し、最終的に 165 万個の学習データを取得しました。各データの形式は、タスクの種類、入力、およびターゲットの出力を含めて、次のとおりです。

{
  "kind": "ClassicalChinese", 
  "input": "将下面句子翻译成现代文:\n石中央又生一树,高百余尺,条干偃阴为五色,翠叶如盘,花径尺余,色深碧,蕊深红,异香成烟,著物霏霏。",
  "target": "大石的中央长着一棵树,一百多尺高,枝干是彩色的,树叶有盘子那样大,花的直径有一尺宽,花瓣深蓝色,花中飘出奇异的香气笼罩着周围,如烟似雾。"
}

トレーニング データ セットのトークン長の分布を下の図に示します。ほとんどのデータの長さは 600 未満です。

06d54a9a2ce79df7af26ee7ad879c861.png

トレーニング戦略

トレーニング中、サンプルごとに、入力とターゲットを次の形式に結合し、トレーニング用のモデルに出力します。

<s>input</s></s>target</s>

モデルの最大入力を 512 に設定し、入力部分は損失の計算に関与せず、対象部分の損失関数のみを計算します。トレーニング用のハイパーパラメータ設定を次の表に示します。

パラメータ ホタル-1b4
ホタル-2b6
バッチサイズ 16
8
学習率 3e-5
3e-5
ウォームアップステップ 3000
3000
Lr スケジュール 余弦
余弦
Max_seq_length 512
512
トレーニングステップ 90k
260k

03

効果を生み出す

以下に、firefly-1b4 の部分生成効果を示します。

f1bb1beba3d91a09a5b3a30bb9affc7.png

54ba72914288c0f844150701b7d6d23c.png

2253cdbf0e6da91eb783c7632b5a00cf.png

以下は、Firefly モデルのより特徴的な例です. Firefly は、古典中国語、詩、カプレット、武術小説、散文、歌詞、コピーライティングの生成、および感情分析などの中国語のタスクに対して優れたパフォーマンスを発揮します.

a82d1d621fc79a0c78338b8fa091d931.png

ae89aba3cd947ec049fd9e69e010d68b.png

d7ab63a08be2dd77b1b774f4f21ec497.png

5d8162e0625c383fd3a143cae0058f69.png

3e7897fab8947aff840bf2a08661b52b.png

04

エピローグ

語彙をトリミングした後、私たちのモデルのパラメーターはわずか 1.4B と 2.6B であり、ChatGPT や LLaMA などの数百億または数千億のパラメーターを持つ他のモデルよりもはるかに小さく、現在の主流などよりもはるかに小さいです。 Belle、ChatGLM、その他7B程度のモデル。そのため、次のような問題が依然として有効です。

    1. 事実に基づいた知識については、間違った回答を簡単に生成できます。

    2. 無害な微調整を行わないと、差別的、有害、非倫理的な発言が発生する可能性があります。

    3. コーディングと推論の能力はまだ不足しています。

上記のモデルの制限に基づいて、このプロジェクトのコード、データ、モデルなどは、商業目的ではなく、社会に害を及ぼす目的ではなく、学術研究にのみ使用する必要があります。

今後、作成者は次の方向からプロジェクトを反復します: トレーニング データを充実させてデータ品質を確保し、トレーニング プロセスを最適化し、より多くのパラメーターを使用してモデルを試します。

このプロジェクトのデータ、コード、またはモデルを使用する場合は、このプロジェクトを引用してください。

@misc{Firefly,
  author = {Jianxin Yang},
  title = {Firefly(流萤): 中文对话式大语言模型},
  year = {2023},
  publisher = {GitHub},
  journal = {GitHub repository},
  howpublished = {\url{https://github.com/yangjianxin1/Firefly}},
}

ホタルプロジェクトアドレス:

https://github.com/yangjianxin1/ホタル

LLMPruner プロジェクトのアドレス:

https://github.com/yangjianxin1/LLMPruner

ホタル重量アドレス:

https://huggingface.co/YeungNLP/firefly-1b4

https://huggingface.co/YeungNLP/firefly-2b6

firefly-train-1.1M データセット:

https://huggingface.co/datasets/YeungNLP/firefly-train-1.1M

Belle-train_0.5M_CN データセット:

https://huggingface.co/datasets/BelleGroup/train_0.5M_CN

あなたのいいね、視聴、フォローは、私が持続するための最大の動機です!


NLP グループに入ります —> NLP 交換グループに参加します(remark nips/emnlp/nlpcc が対応する貢献グループに入ります)

惑星に参加すると、次のものが得られます。

1.  3 ~ 5 個の最新の高品質の用紙速度測定値を毎日更新します

2. 最新の入門および上級学習教材

4.  NLP、サーチ、昇進・昇格、CVなどのAI職の1日1~3件の募集情報

fcdb3b34dc67f5e40edf9d8c18576dfb.png

おすすめ

転載: blog.csdn.net/qq_27590277/article/details/130023524