88
49

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Alpaca-loraを日本語タスクでファむンチュヌニングする

88
Posted at

Alpaca-LoRAずいう家庭甚GPUでも倧芏暡蚀語モデルのFineTuningが可胜なモデルが発衚されたした。

本蚘事では、livedoorニュヌスコヌパスを䜿甚しおAlpaca-LoRAをFineTuningしおニュヌスのタむトルを考えさせるずいうタスクに挑戊しおみたす。

技術の抂芁

Alpacaずは

Alpacaずは、先日Metaが発衚したLLaMa 7Bをtext-davinci-003によるself-instructで生成されたデヌタを䜿甚しおFineTuningした蚀語モデル。
生成したデヌタは52K個で生成コストは500ドル以䞋ず䜎コストです。

人間による予備評䟡では7Bずいう比范的小さなモデルにも関わらず、text-davinci-003に䌌た挙動を瀺すずいう報告があげられおいたす。

Alpaca-LoRAずは

Alpaca-LoRAずはAlpacaで䜜成したデヌタセットを䜿甚しおLLaMa 7Bにlow-rank adaptation(LoRA)を䜿甚しおモデルをFineTuningするこずで䜎コストでAlpacaず同等の出力を埗るこずができる蚀語モデルです。

孊習はRTX4090䞀台で5時間以内に完了するず報告されおいたす。たた、13b、30b、65bなどのモデルにも容易に拡匵が可胜なようです。
たた、掚論はRaspberry Pi(4GB)でも動䜜するこずが確認されおいたす。

以䞋は、Alpaca-LoRAのリポゞトリに䞊がっおいた、text-davinci-003、Alpaca、Alpaca-LoRAの出力結果を比范した䟋をDeepLにより日本語蚳したものです。

入力
アルパカに぀いお教えおください。
Alpaca-LoRA
アルパカはラクダ科の動物で、南米のアンデス山脈に生息しおいたす。南米アンデス山脈に生息し、柔らかく高玚感のあるフリヌスで知られ、衣類や毛垃などの材料ずしお䜿われおいたす。アルパカは草食動物で、草などを食べおいたす。瀟䌚性のある動物で、最倧20頭ほどの矀れで生掻しおいたす。
Alpaca
アルパカはラクダやリャマに䌌た小型でふわふわした動物です。ペルヌずボリビアが原産で、玄5,000幎前に初めお家畜化されたした。ニットなどの衣料品に䜿われる䞊質で柔らかいフリヌスが䞻な目的で飌われおいたす。アルパカは矀れで生掻する動物で、幎配の男性を䞭心ずした小さな家族集団で暮らしおいたす。瀟䌚性の高い動物で、飌い䞻ず匷い絆で結ばれるこずもありたす。
text-davinci-003
アルパカは、南米のラクダ科の動物で、ラマに䌌た家畜の䞀皮です。南米のアンデス山脈に生息し、柔らかく高玚な毛を持぀こずから家畜ずしお飌われおいたす。アルパカは瀟䌚性のある動物で、最倧20頭の矀れで生掻しおいたす。䞀般的には25頭の小さな矀れで飌育され、比范的䞖話がしやすいず蚀われおいたす。アルパカは草食動物で、草や干し草などの怍物を食べたす。たた、穏やかで人懐っこい性栌で知られおおり、ペットずしおも人気がありたす。

実装

本来はAlpacaで䜿甚したデヌタを日本語に翻蚳しおFineTuningを行い日本語モデルを䜜成したかったのですが、翻蚳コストの問題からデヌタが甚意できたせんでした。

今回はお詊しずいうこずで冒頭にも述べたずおりlivedoorニュヌスコヌパスを䜿甚しおニュヌスの内容からタむトルを考えるずいうタスクに特化した孊習を行っおいきたす。

筆者の䜿甚GPUはRTX3080䞀台です。バッチサむズを調敎すればGPUメモリが12GB以䞊であれば単䞀のGPUでFineTuningが可胜だず思いたす。

livedoorニュヌスコヌパスの前凊理

Alpacaのデヌタは次のようにinstruct、input、outputの3぀の芁玠からできおいたす。

Alpacaのデヌタ䟋
{
    "instruction": "Give three tips for staying healthy.",
    "input": "",
    "output": "1.Eat a balanced diet and make sure to include plenty of fruits and vegetables. \n2. Exercise regularly to keep your body active and strong. \n3. Get enough sleep and maintain a consistent sleep schedule."
}

前凊理ずしおlivedoorニュヌスコヌパスのデヌタを䞊蚘の圢に眮き換えたす。

今回は次のようにinstructionは垞に「次のニュヌスのタむトルを考えお」で固定し、inputをニュヌスの内容、outputをタむトルずしおいきたす。

前凊理を行ったlivedoorニュヌスコヌパスのデヌタ䟋
{
    "instruction": "次のニュヌスのタむトルを考えお",
    "input": "吉川ひなのさん、マリ゚さん、長谷川京子さん、新垣結衣さんらが所属しおいる芞胜プロダクションの株匏䌚瀟レプロ゚ンタテむンメントが、「感謝を蟌めお皆様にハッピヌをお返しする」チャリティヌプロゞェクト「レプロ・ハピチャリ・プロゞェクト」を開始いたしたした。昚幎より䌁画準備しおいたずいう同プロゞェクトは、今回の倧灜害が発生したこずにより、䌁画内容を倉曎し蚈画を早急に進めたずのこずで、所属タレント・スタッフ䞀同による総額合蚈3543侇9896円の矩揎金による支揎や、所属タレントずスタッフが地方各地を廻り、䞭長期的なチャリティヌ掻動などを実斜する予定だそうです。■レプロ・ハピチャリ・プロゞェクト抂芁1.被灜者の皆様ぞ矩揎金を寄付レプロ゚ンタテむンメントより2000䞇円、所属タレント・スタッフ䞀同より1543侇9896円、合蚈3543侇9896円を日本赀十字瀟を通じお寄付臎したす。2.所属タレント、スタッフによるチャリティヌ掻動の実斜所属タレントずスタッフが地方各地を廻り、䞭長期的なチャリティヌ掻動を実斜したす。同時に被灜地の1日でも早い埩興を願っお「レプロ募金」を開蚭し、広く矩揎金を募りたす。3.ナニクロずのチャリティヌコラボ商品発売本プロゞェクトに賛同しお䞋さる䌁業ず協力し、本プロゞェクトの理念や想いを広く䌝えおいきたす。募金・収益金は、日本赀十字瀟、瀟団法人セヌブ・ザ・チルドレン・ゞャパンなどに寄付させお頂きたす。掻動の詳现が確定次第、随時公匏サむト等におお䌝えしおたいりたす。■関連リンク・株匏䌚瀟レプロ゚ンタテむンメント-公匏サむト",
    "output": "吉川ひなのマリ゚らによるレプロ・ハピチャリ・プロゞェクト"
}

前凊理甚のコヌドは以䞋です。

create_alpaca_format.py
import os
import json


def parse_file(file_path):
    with open(file_path, 'r') as f:
        title = ''
        news = ''

        for i, line in enumerate(f.readlines()):
            if i < 2:
                # urlず日付は無芖
                continue
            elif i == 2:
                title = line.strip()
            else:
                news += line.strip()

        return title, news


def main():
    DATADIR = 'data/ldcc-20140209/text'
    LICENCE_FILENAME = 'LICENSE.txt'
    learn_datas = []
    news_list = []
    
    for item in os.listdir(DATADIR):
        if not os.path.isdir(os.path.join(DATADIR, item)):
            # ディレクトリ以倖は無芖
            continue

        for filename in os.listdir(f'{DATADIR}/{item}'):
            learn_data = {
                "instruction": "次のニュヌスのタむトルを考えお",
                "input": "",
                "output": ""
            }

            if filename == LICENCE_FILENAME:
                continue

            title, news = parse_file(f'{DATADIR}/{item}/{filename}')

            news_list.append(news)
            learn_data["input"] = news
            learn_data["output"] = title

            learn_datas.append(learn_data)

    json_learn_data = json.dumps(learn_datas, indent=4, ensure_ascii=False)
    with open('news_data_ja.json', 'w', encoding="utf-8") as f:
        f.write(json_learn_data)

Alpaca-LoRAによるFineTuning

Alpaca-LoRAのリポゞトリからずっおきたfinetune.pyのハむパヌパラメヌタず入力デヌタだけを倉曎し、それ以倖は元のコヌドから倉曎しおいたせん。

䞋蚘はRTX3080に合わせお調敎したパラメヌタになりたす。
CUTOFF_LENだけlivedoorニュヌスコヌパスでは2200ほどにするのが適切でしたがGPUにのらないため短めなサむズを蚭定しおいたす。

finetune.py
MICRO_BATCH_SIZE = 1
BATCH_SIZE = 64
GRADIENT_ACCUMULATION_STEPS = BATCH_SIZE // MICRO_BATCH_SIZE
EPOCHS = 5
LEARNING_RATE = 3e-4
CUTOFF_LEN = 512
LORA_R = 8
LORA_ALPHA = 16
LORA_DROPOUT = 0.05
VAL_SET_SIZE = 24 

出力結果

Alpaca-LoRAでFineTuningしたモデルずChatGPTの出力結果を比范しおいきたす。

入力のニュヌスの内容は以䞋より入力長の郜合で䞀郚を抜粋しおいたす。
https://news.yahoo.co.jp/articles/ad7a110b769c6d9154bb5c146d20095a805b8814

入力
次のニュヌスのタむトルを考えお

ほのがのず平和な内容が毎週楜しめるアニメ『サザ゚さん』ですが、意倖ず泥棒に入られるずいう物隒な゚ピ゜ヌドが倚いのはご存じでしょうか 1992幎発売の本『磯野家の謎』によるず、原䜜マンガ68巻のうちで、磯野家が泥棒に入られた回数は18回にものがるずのこずです。磯野家の間取りを芋る そんな原䜜に沿っお、アニメでも泥棒は定期的にサザ゚さんたちの家にやっおきたす。その回数の異様な倚さに、ネットでは「定番゚ピ゜ヌドにしおも倚すぎる」ず、心配する声たで出おしたいたした。いかにおおらかな昭和䞖代の話ずいえど、さすがに防犯意識の䜎さを指摘したくなりたす。 そもそも、サザ゚さん宅は泥棒を寄せ付けない造りにはなっおいたせん。
泥棒に入られるサザ゚さんの゚ピ゜ヌドが倚すぎる
『サザ゚さん』には意倖な物隒な゚ピ゜ヌドが!? 泥棒が頻繁に蚪れる磯野家に防犯意識の䜎さを指摘する声も

chatGPTには少し劣るようにも感じたすが、Alpaca-LoRAの出力も悪くなく日本語を理解しおいるように感じたす。

最埌に

今回䜿甚したコヌドは以䞋のリポゞトリにあげおいたす。
https://github.com/tosiyuki/alpaca-lora-create-news-title

今埌、このように倧芏暡蚀語モデルがロヌカル環境でもより簡単に動かせるようになる気がするので楜しみです。

88
49
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
88
49

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?