加藤純一クローンAIプロジェクトその2 LINE社とCA社のLLMに雑談させてみる

:::note warn
AIの出力の紹介する部分で、暴力的な表現が記載される場合があります。これは本記事に書かれた手法通りの処理をした場合、AIがどのような結果を示すのか忠実に報告するために記載しているものであり、個人・団体を中傷ないし脅迫など権利を害する意図は全くございませんので、ご理解のほどよろしくお願いします。
:::

加藤純一さんの雑談データから人格のクローンとなるようなAIを作り、最終的には雑談配信ができてしまうことを目標にしています。
データ作成やGPU計算などの協力者も欲しいですが、SNSは特にやっておらず、Youtube向けに動画編集する時間もないので、少し小刻みにQiitaにアウトプットして存在感を示したいと思います。AIの出力結果を意識的に紹介したいと思いますので、技術に興味のない方もAIの成長を楽しんでもらえればと思います。
やったこと・次やること・課題点のフォーマットでお届けします。このシリーズは[「加藤純一クローンAI」タグ](https://qiita.com/tags/%e5%8a%a0%e8%97%a4%e7%b4%94%e4%b8%80%e3%82%af%e3%83%ad%e3%83%bc%e3%83%b3ai)をつけますので、バックナンバーはそちらから確認できるようにします。

## やったこと

:::note
実際のコードはこちらの`talker`ブランチにあります。
Github: https://github.com/konbraphat51/K-A-T-O
:::

前回は「雑談配信の本文データをそのまま学習データとしてファインチューニングすれば、それなりに喋れるのでは？」という仮説を提示しました。
そこで、`line-corporation/japanese-large-lm-3.6b`, `cyberagent/open-calm-3b`を上記の学習を施し、喋らせてみました。

### 実装：ファインチューニング抽象クラスの作成
プロトタイプではなく本格的な学習ということで、抽象クラスを作成しました。これで別の仕組みを試すときも同じ処理の再開発をしなくともよくなります。
例えばファインチューニングクラスの処理はこんな感じ。
https://qiita.com/Mizuiro__sakura/items/058d2590d31e9f8aeeaa のコードと
https://note.com/npaka/n/na5b8e6f749ce のコードを引き継いでいます
```python:FineTunerBase.py

    def train_model(self, df_teacher):
        tokenizer = self.get_tokenizer()
        model = self.get_lm()

        def preprocess(examples, is_test=False):
            dataset = defaultdict(list)
            for cnt in range(examples.shape[0]):
                example = examples.iloc[cnt]
                generated_sentence = example[self.finetuner_properties.text_row]

                for i, sentence in enumerate(generated_sentence):
                    output = tokenizer(generated_sentence, max_length=self.finetuner_properties.n_token, padding="max_length", truncation=True)["input_ids"]
                    if (not is_test) or (i == 0):
                       dataset["input_ids"].append(output)

            return dataset

        class Dataset(TorchDataset):
            def __init__(self, dataset, is_test=False):
                self.dataset = dataset
                self.is_test = is_test

            def __getitem__(self, idx):
                data = {'input_ids': torch.tensor(self.dataset["input_ids"][idx])}
                #data['labels']=torch.tensor(self.dataset["labels"][idx])
                return data

            def __len__(self):
                return len(self.dataset["input_ids"])

        dataset_train = Dataset(preprocess(df_teacher))

        if self.finetuner_properties.useint8:
            model = prepare_model_for_int8_training(model)

        # LoRAモデルの準備
        model = get_peft_model(model, self.finetuner_properties.lora_config)
        
        trainer = Trainer(
            model = model,                         
            args = self.finetuner_properties.training_config,
            train_dataset = dataset_train,
            data_collator=DataCollatorForLanguageModeling(tokenizer, mlm=False)
        )
        model.config.use_cache = False
        trainer.train()
        model.config.use_cache = True

        #GPUメモリ解放
        model.to("cpu")
        torch.cuda.empty_cache()

        model.save_pretrained(self.get_output_dir() / "peft") 
        
        self.finetuner_properties.save(self.get_output_dir())
        
        #終了処理
        del tokenizer
        del model
        del trainer
        torch.cuda.empty_cache()      
```
前回で観測した、「`inputs_id`のテキストのみ学習されているのでは？」という結果を受けて、`inputs_id`のみを`Trainer`クラスに渡す、という処理を行っています。

### 書き起こしデータそのまま渡すファインチューナー
このような学習データを用意しました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602537/fa155432-14cd-46cf-74a0-2f9bc4ddae41.png)
これは加藤さんの書き起こしデータをいったん空白区切りで一配信一行に書き、1000文字超えないように、いい感じに改行したものです。
これを`inputs_id`に入れ、そのまま`Trainer`クラスに渡しました。

この結果を見てみましょう。

### LINE社 `line-corporation/japanese-large-lm-3.6b`
とりあえずうまく動作するかを見たかったため、速度重視で
* エポック：2回
* サンプル数：10行
で学習させました。
それでも10時間かかりました。苦しい。

出来たLLMのテストとして、下記の5つの「トリガー」を用意しました。
```python
    start_list = [
        "こんにちは",
        "やあ",
        "喉痛いわ",
        "今週のキングダム見た？",
        "ヒカキンは神だと思わない？"
    ]
```
加藤純一が配信の最初とかトイレから帰ってきたに言いそう、、ですかね？
LLMには、これプロンプトを受け取ったとき、このトリガーに続く言葉を喋っていくことを期待しています。

そこで、返された結果はこちら
>こんにちは ウェブ
本文:  2. 1を16等分に分け、丸める。 3. Bを混ぜ合わせ、2をくぐらせてパン粉をつける。170°Cの揚げ油できつね色になるまで揚げ、油をきる。 ※揚げる際は、揚げ網を使うと油がはねにくく、きれいに揚がります。 <ポイント> ・パンは、食パンやフランスパンなど、お好みのものを使ってください。 ホームベーカリーで簡単!手作りパン 食パン レシピ パン作り初心者でも簡単に作れる食パンのレシピをご紹介します。ホームベーカリーを使えば、こねから焼き上がりまで全自動で作れますよ。 材料(1斤分) 強力粉...250g 砂糖...15g 塩...3g 無塩バター...5~10... See more 0:45 キャベツのうまたれ 5min ご飯がすすむ、キャベツと豚肉の炒め物です。
>
>やあ ウェブ
本文:  100均のセリアで売られている「おゆまる」という商品です。 お湯で柔らかくなり、形を作りやすい粘土です。 この粘土を型に流し込み、冷やして固めれば完成です。 とても簡単にできます。 また、おはじきは1個1個のサイズがバラバラなので、 型から外しやすいです。 ちなみに、型はダイソーで買いました。 おはじが外せたら、今度は色付けです! 色を付けるには、アクリル絵の具を使います。 今回は、赤と青の2色を使って色を付けました。
>
> 喉痛いわ ウェブ
本文:  3. 2に1とAを加え、混ぜ合わせる。 4. 春巻きの皮を1枚ずつはがし、3を等分にのせる。皮のふちに水をつけ、皮どうしをくっつけて巻き、巻き終わりに水で溶いた小麦粉を塗って留める。同様に計6本作る。 ※電子レンジを使う場合は500Wのものを基準としています。602Wなら0.8倍、704Wであれば0,7倍の時間で加熱してください。また機種によって差がありますので、様子をみながら加熱しましょう。 (1本分152Kcal、塩分0g) 具材を混ぜ合わせた春巻きは、食べごたえバツグン。春雨のモチモチとした食感と、シャキシャキとした野菜の食感がたまりません。水溶き小麦粉を皮に塗ると春雨がくっつき、剥がれにくくなるので覚えておいて。 春雨とセロリの塩炒め セロリやにんじんといった野菜は大きめにカットすると、歯ごたえ
>
> 今週のキングダム見た? ウェブ
本文:  2018年10月11日 08時54分 この投稿は、2年以上前の投稿です。やむを得ない事情により、内容を変更している場合があります。 1. はじめに 本記事は、「【初心者向け】Googleアナリティクスのアクセス解析機能を使ってみよう」の続編です(本記事と併せてご一読ください)。 今回は、Google Analyticsの「ユーザー」セグメント機能を使った、セグメント別の分析方法について解説します。 なお、本記事の内容は、以下の書籍を参考にしています。 Googleアナリティクス実践入門 ウェブ分析論 作者:辻正浩 出版社/メーカー:技術評論社 発売日:2... 初心者向けにGoogle アナリティクスの使い方を解説しています! マーケティングやデータ分析の知見も発信しています ABOUT ME 辻 正樹 データソリューションカンパニー株式会社 代表取締役社長 CEO / Chief Data Scientist 東京大学経済学部経済学科を卒業後、株式会社三菱東京UFJ銀行に入行。
> 
> ヒカキンは神だと思わない? ウェブ
> 本文:  3. 個人情報の第三者提供について 当社は、お客様の個人情報を、以下の場合を除き第三者に開示または提供いたしません。 1. お客様の同意がある場合 2. お客様個人を識別することができない状態で開示する場合 4. 個人データの開示・訂正・利用停止・消去について お客様は、当社に対して、当社が有するお客様ご自身の個人データの、開示、訂正、利用の停止、消去その他の 取り扱いに関する苦情を申し出ることができます。

よくないですね。どの出力にもある「ウェブ（改行）本文：」は僕の全く関与するところではありません。それに、プロンプトと、その「本文」とやらに一貫性がない。
ファインチューニングがうまくいっていないどころか、LLMが狂ってしまったように見受けられます。

もしかしてHugging Faceに公開されているのはファインチューニング済みのモデル？と思えばそういうわけでもない。（[5日前の記事で「Instruction-Tuningされたモデルを公開します」と予告するぐらいだし](https://engineering.linecorp.com/ja/blog/3.6b-japanese-language-model-with-improved-dialog-performance-by-instruction-tuning)）

もしかしたら、前回の「`inputs_id`のみ」仮説は`Open-CALM`シリーズにのみ有効な手法であったかもしれません。
次回までに、試しに`inputs_id`と`labels`に分離した学習データ渡しを実験してみます。

### サイバーエージェント社`cyberagent/open-calm-3b`
前回RTX4070では`7b`モデルを動かせなかったと書きましたが、頑張ってVRAMメモリをケチる（int8ローディング+LoRAファインチューニング+`batch size=1`）と動作しました。が、学習時間が膨大(10行だけで2日）と出たので、速報性を重視して`3b`モデルで実験しました。

結果を見てみましょう。前回同様の処理なので、ファインチューニングはうまくいくと予想していました。

>こんにちは? 昨日ね 本当は先々週の あったかな? その件があって そういうのやめてねって 言ってたんですけど 今日早速やってしまいま した いいですか 皆さんもね マジで言われた ら 嫌じゃないんでね それはしょうがないと思います 言われた人はね ごめんなんか 別にな んとかなり
>
>やあ... [続き] だからって、してるって事?勿論許可が必要... な... ガ... マイ...リ...マイ...?? ほん... 俺...整形をしてる...ブ...ブラック...な...ry 数重ねま2...というか海賊婆婆数多すぎひ ん? なら俺はそっち
>
>喉痛いわ 俺さあ まあでもyaneuとか あのmsn とか twitter. esみたいな あれだよ マルチテナントで ああ違う 違う違うそういう そうい うの別に うんうん なんかまあそういうの 視 野に入れながら やっていくってことで はい  以上にて本日の 質問は
>
>今週のキングダム見た? 絶対に見ない方がいいよ? 動画のurl貼るから。 見てね? おーい! ツイッターのIDわかんない! あ! これだ! これは......! OKOK!OKOK!!! OK!!! ねえねえ! 最近 何してるの? こいつ捕まえるために こんなに 来たの
>
>ヒカキンは神だと思わない? まあでもあれでしょ なんかニコ生とかでさ そういうの あった と思うんだけど ずっと監視されてる感じはね ね? ビジネスでやってる分なんか あれだけど ユーザーの反応全部見てて うんこちゃん。 いいよ別に別に ニコ生にずっと居ても同じだよ むちゃ稼

論理性・一貫性はひどいですが、加藤さんっぽい喋り方をしているような気がします。口調のコピー自体は成功しているといってもいいのではないでしょうか？

ここで、前回挙げた「チェイン」を試してみたいと思います。一回の出力の後ろをプロンプトにして再帰的に出力させることで、長い雑談になるのでは、という仮説。

`talk()`関数をこんな感じにオーバーロードしました。要するに、`chains`の回数出力を行うが、`chain_depth`の分だけ一個前の出力を使う、という処理。
```python
    def talk(
        self,
        prompt: str,
        params: LMParametersAll,
    ):
        '''
        推論の実行。
        トークのチェイン（前回の発言内容を再帰的に使用）を行う。
        '''
        
        output = super().talk(prompt, params)
        for cnt in range(params.chains-1):
            prompt_new = " ".join(output.split(" ")[-params.chain_depth:])
            output_new = super().talk(prompt_new, params)
            output += output_new[len(prompt_new):]
            
        return output
```
`chain_depth = 4`, `chains = 5`で試しました。ここの数値は調整の余地があるかもしれません。

結果はこちら。
>こんにちは? 昨日ね 本当は先々週の あったかな? うろ覚えなんだけど 俺まいまいとは ツイッターしてないの で、うろちゃんとは Twitterしてないのね まいちゃんって俺のこと 知ってる? 他の奴が っていうか ろんに限らず 俺は俺の事 好きになってくれる 女の子にだけ だけ愛を向けている いわば薄メイクなのね を、 ゲロまいに対して それガチで やってるから なかなかガチな れなくない? よ? 10人以上 ドン突きでつながってると 俺が言ってますけど ぐらいだったら別に いいでしょ別に俺の事を 好きな人が全員そう 言っていいよね なんでもこっちにしとけって 言うと思う じゃないと みんな俺に冷めるから にしても これだけ人数いたら そりゃ俺だろ って感じじゃない? 100人ぐらい いたらそりゃあ 伝説のモatorになる 音ないかなと思って 録画してるんだけど 見れないのほんとに どうなの俺 仕事だから寝ないといけない 周りの人が寝てるんだぞ 俺だって自分の家だとうるさいじゃん いやほんと朝ね 昼とあんまり寝てないから 寝たのねおとといおとるんだけど おはようございます だから統合されたんだ スケジュールではね おとといから仕事ではあんまり寝てなくて 統一されたんだ俺 自分の家では寝てて しかもまだビデオがっちょるるんるんで 撮ってるんだご愛社の決算 ふざけんなよ なんで俺がお前なんつってんのあいつ 予想GUY? 推定GUYS? おいお前俺なのになんかいいじゃん 今ね仕事とかさ プライベートでさあんまりしてないからさ 今度 今度さいつかお前ん家のをみんなに 広めるねそれはあ あのー ちょっと待っててね
引用元: 
ニトちゃん何やってるのwww
やることねえのかよwww 釣りかな?釣りか 睡眠時間5時間くらいかな ずっとパソコンしてる マイクロソフトの入ってるビルが攻められてるよ 誰か入ってくださいよマジで 俺ニコ生ずっとやってるからさ ニコ生するから ツイキャスもやるよ あいつら嫌いじゃないよ ただ睡眠5時間と時間無駄にしてね ほんとだよ だから5時間やると3時間睡眠だから ギリギリっていうか マジで車持ってないの っていうのも嘘だよ 車持ってなくていんだよ だけど5時やから ママにメールしなきゃ みたいな感じで 寝ようとしてるニコ生にきてくんない ねむいんだよ今 いいよやろうよ やろうやpic.twitter.com/EuuEeOiDbL ねえよあんなん 視聴者数のためにあいつ投票入れろよ www 嘘だよね俺投票いらないよ お前らのためになんのか分からねえじゃん まあまあいいややってみよう やったら教えるよ
ねえnnk? なんか変なの来ちゃった ちょっとごめんねごめん 作業終わったから ねえw 俺天才だと思うんだけど 俺が最近出した 音フェチリップダミー 結構すごいの ツイッターでダミアニー ツイッターのフォロワー5万 ツイキャス視聴数1億 出版物販売数2000本 来月発売wets ねぇwすごすぎない だって俺最近ツイッター始めたんだ だから まあ作業中だからちょっと は後がくれません でもいいの ノリでツイスター やろうかな うーん そうだよね だよね そういう意見も あるよ あった方がいい うん だけどいろんな人が 「ツイスターマニアックスやれや」 って声をあげてて みんなもうやってるよ でもちょっとずつだけど 分かってきてんだ ウザいかな ごめんなさい よく分かんない みんながだんだんくそツイスターに飽きて んじゃあ俺もやる気なくしちゃうかな 今のも 分かるよでもなんか やらされてる感 があって ああ確かに 声を大にだけど はい はい合格 そして音ゲーマーへの 道へ 進めば いいんやと思います いやほんと朝まで どんちゃんこと やってたからね俺 手のつけようがない ボロボロだよ 碧にふにゃっとしばかれたら 俺無理ないわ でも なんで 指じゃなくてさ じゃなくてたこってしばけばいいじゃん とか 思うじゃん俺 そのノリで音ゲー やってるやつなんかいな めっちゃ心痛めてる まぁ ちょっと俺の 結果発表するわ【MAiDi Fなんだ】 優勝:MAiD F 音也:コホン 全員:OK じゃあちょっと ルール説明するよ 優勝した俺は 音が全部黒って だから白ってなった これが全て だ全部説明 時間がヤバいから いくよ【MRレイレイ】 MAiDIF F音牌 全部鳴いてる MDD AK足につけてる AKK F【困惑】 黒って書いてある 何が問題? フェイス多いだけ だってさー なんか 
>
>やあの子の事 好きだけど まあいいか 俺でよる 悪いけど 寝る お休みなさい 睡眠 俺はね 今日ね モリカワの事めっちゃ好きなんだけど ツイッター見れる? かいちょ だからね MCこの辺に いないね おかしいなあ ネット番組 配信 ないよ インスタのストーリーは できる? あいついいコンテンツ むかしばなし 違うか ミスキャスト いやいやミス ちょっとでも 線引きしたい でもいいよ別に でもやっぱ 目につくのが ネガティブなコメントが 多いんだよね メディア向け ネガティブコメント 別にいいじゃん だって 好きなもん俺 MCは 何してるって 寝たふりしてモリカわかん まとめの 番組表の ミカという 女性実況者 闇実況してる 女だよ あいちゃん ねっ なんか いいんじゃない あのスタイルいいよと いうのもいるけど MAがいいと この線が あるのね ダメ? 俺さあ 今度さ ニコ生でもさ やっていこうと思うんだけど いい? やっていい じゃああと 次お前 あとさ マンネリ うんこちゃん だけど 俺はちょっと 形を変えてやりたいんだよね まあいろいろ 事情はあるけど ちょっと やっていきたい ねえ 数字ねえ俺 俺が こういうふう にやっていって どういうふう やってっていう話 聞い タメで メッセージで やればいいんだけど あいつさ 用件を聞いタメ だから 用はダメなんだ しっかりタブレベル そうだよね MADは 歌で解決したいんだよ 音のない 文字だけの やりとりとかは やっちゃいけない だよね じゃないと いけないよね お前らだから わかりましたじゃあ もう 来年の 結果発表まで ニコニコの 募集は受け付けません ありがとうございました これで一件落着 大丈夫合ってる できると思う ね 画面見てたらわかると思う そう 本当は っていうのも 出せると思うんだよね 女って 時々ほんとにブレないらしいのね 本当に そのトドメを刺すのだけはやめてね それだけはやめといて トドメ刺さればいいんであって ほんとに そういうの全部否定してきたから それが正しい。 俺はもう何もやってねえからそういうの 見習ってほしいんだけど 俺まじで 何もやっていない ずっとね, だから あのー 熊本でえてるんで 答えじゃないかもしれないんだけど 山鹿って 山くまって読むのね 山くんなんで 山隈って呼ぶの 私の呼び方は 山熊なの うちのクズを なんか 熊本地震の時に いっぱい募金くれた ほんと気にかけてたよ 女の子からなんかさ って聞かれるのがめっちゃ恥ずかしいけど 度を越して恥ずかしいんだけど でもなんか募金してくれたら すごい嬉しいんだよね 人,トモダチがなんか頑張ってて それを見てくれるだけで 音ない? どっちがいい? 山側? 川側 わたし牛すじの方 牛すきな方 じゃあその牛筋の方の そういうこと 分けてやれよ 分かんない 俺しか分んないだろ まあそういうことだ 別にそれは寿司 ネタで やってるわけじゃないんだから 寿司ネタに 限定しないでくれよ それは言えねえ ガチで殺しにに来るんで お願いします 鼻からでるのなんて 食べたことねえけど なんかやりたくねえなあ ウスノロ ウタワラ メタリカダネ ダイタニー ミナミダヨ バスティダ タイムマシン ほんとに 作れるんじゃない? みんなにも言うよほんとにね 作ってあげたいんだけど 宝島まで作れるんじゃないかな ヨルタヨタも作れるんじゃね これまですごい自慢してる感じじゃん 作ったの俺だから 聞いてるみんなには言えない 別にあんま自慢してあんだろ ごめんな ボロボロだぞ トヨタのマークX 買ったんだぞ あいつらだったら 倒してただろうな 屁理屈ならねえだろ 理屈で考えれば まあこいつらなら 多分こいつらが 悪い奴らなんだ こいつらに 殺されてえか クソしようか煮え上がれ 氷河で みんな普通に 対網膜迷彩で やられてたよ 酸素パクるより先に ああそうなんだ へえ 冗談だよ 真面目に 言っとくけど 嘘嘘だよ お前達嘘ついてるだろ 黒隊より 先に対網膜戦 とかしてやんなきゃ ダメだろお前 ケツパクってのも 動脈と点頭両方 血管と面 どっちも持ってるやつ 制圧しなきゃいけないだろ お前はルール違反してる これが反射で そうなんだ ごめんな だから ちょっと待ってね 今説明するから 俺が起こしてるから じゃあ そういうことだから あの方がいたんでしょ あれゲームだよ ゲーム 死を恐れない おめーのために 命かけてんだよ ルール守ってんだよ 今俺の説明してるんだよ あ、ケツか おれ
>
>喉痛いわボケ 身内がほんと なんというか 大変だよ 100人登録して カラオケ行くって 9000曲 無駄に上がってるだろ とか言いだすから まじで 殺されるからそういう 下の 報告はよしてくれ この件は よろしくって とうことは 問題無いってことと 分けてくれ 俺のすよ どうも 首切断してやりたい あと 100件とか 地味にきてるからって 高みと見てるよ俺 科目きもだから 相場科A 俺は相場で100件って きもすぎる ナスダノン ヨヨギ フジケイジ 藤井英士 アナケン 藤田記子 アン・トクジマ フジテレビONE スポーツスペシャル 野球中継 出演予定 ナイスガイD ナイストゥミートゥミー カルカル 広報の鬼森 カイチ メディアカルチュラル ジュースイップス ジュンちゃん なんか ラジオとか出演してなくない? なんでそんな話できるわけ? マジで。 心広大。 それはそうだろう。 マジックだぜ。 そうだろうね。 今もしっかりそうやって 広めてんの俺ら。 これ一番上の 表示さ 今日もやってんの。 ここの 一番上。 で ほどほどやってん くらいやってて だってしょうがないじゃない。 自分の引き際を自分でしかつくってないもんな。 アピールしてないもんだからさ。 そんな俺のおバカコンテンツ みんなさまだまだ 遊び足りないんじゃないの 俺だって遊び足りてないんだよ ぐらいは言い返すよ。 でもしょうがないよこれはしょうがない。 お前らも遊びすぎだ遊び過ぎだ言うけど しょうがないじゃん。 これはしょうがないんだよ。 ただ遊び方伝えきれなかったのが 残念だよ。 というのも こういうふうに転売してくださいって こうやって 伝えばよかったんじゃないのかなって思うんだよ 自分のコンテンツを。 特にモンスターハーモニーは 俺がプレイしてるから 見てくださいっていう感じで 出してたけどさ でも仕方ないよ遊びたい人が 遊びのためにいくらくれたって 許される話だよ いくらくれってことだよね それを言うしかないじゃん だから仕方なくない 仕事が終わった後に 配信やってるってな ふざけんなよ めちゃんこいい話聞かせてこういう 今日ね仕事 俺ヌルいから 上司にちょっと 相談してきてって言われて なんかこういうの こういうのあるんだけど 知ってる? この声聞いて なんとか分かる? こいつ喋りとり この時間まで 話さねーのかよそれ いいじゃん別に いつだって どんちゃんって別に別にどうでもいいけど ちょっと待ってね 頑張って 話せるように頑張るから そんな 勝手に親呼び出していいじゃんけんで 親なんか今さぁ 見ない? 今さ めっちゃ見てんだけど マジで言ってんの めちゃ見てんのだけど 苦悶の夜の十年 こんばんは 統一くん いらっしゃいませこんばんは またまた 帰ってきたな。 みんなそうだろ 当たり前だろ どうなの 値段見てさ頑張んないとな と思って調べてみた 俺今までさ いいもれなんじゃねえか ほんとにいまさらになって 16にして 働いて 金を貯めたいから 何でこんな話してるんだ 脈ないんだけど まあでもいずれ 30の時 40の時50の時になってたまるか あいつほんと 呪いなんだよね 亡きご令嬢が 私のいいもの 悪いものすべて いただいてくぜ だから 働くとかどうでもいいんだよね 生きていくためには 必要なことだけど どうでもいいことだからね いや もはや 公開するけど いやいや 礼くんマジありがとうね サクセスして こういうところで 活かしてやばくする ねで返したろかな うんこちゃんかわいい 将来俺に継がんできてほんとよかったよ まるちゃんマジ最高だよ 卒業してからも 大切にしていくからほんとに 頑張ってね お前のために 男だろうがなんだろう 関係ないんだよ 頑張んな とりあえず待ってね 16早よ仕事終わんないから いま見てまてん たぶんね 敵も16早さ 眠さとかニキビとか ニキビよりまつ毛の方が大事 まつ毛の痛みんとき方そういうの みたいなこと言ってみる 俺にまともな仕事ねえよ なら体をちゃんと入れてもらうから いろいろ言い合ってる まあでも うーん ねえ いつ撮れるの俺 今度 10月か アトラス10月だよ キーワードは ハロウィンです だから 仕事終わりの時間 10ミハリのるよ やっぱね   まず 起きてからの話になるからさ   明日にでもフォトズ アップしたいからとりあえず   今からいろいろ準備するよ  まつ毛いかないとやばい   おめえとやりたいことはわかってる   でもやっぱ 肌が出にくいから俺 いけない ニュー速に まつエクつけに行かなきゃ 無理だろ いけるでしょ別に ねれよ 金Dとかさ    心強いだろ 金だぜ俺 金 ねぇ こないださ 100% トライズ
>
>今週のキングダム見た? 一番人気なのは山崎さんだよ だって ツイプロに載せてるじゃん ね 俺が一番だって言ってるよ 2018年一番ツイートしてるのは俺だから ホスト関連だと しかも 他にも メインは 違うからね メインエージェイしてるメインコンテンツは これだし これもディアっていうオムニなんか 稼げるんだったら トータルでってことだよね 本当に これに集中してるって 他のことはしてないもん 唯一 してるよ このフォーム 伸び伸びやって 数字気にしなきゃ 張り合いないじゃん   誰からも 見てないよ   自分用のツイート だからこれで これでやってて 累計3000万再生以上 エクシアもディアも あれやってる どっかのサイト 持ってない ちなみに ゼロは知ってるか 知ってる知ってる ずっとやってんだけど こないだ10周年 数やってんだよね 山崎ノアで 9年やってたよ 10年以上やってるよ もうメインやめてこういうの 真面目にやらないんだよ メンタル弱いから 俺メインオンリー それ不可能です 無理だよ 不可能だよ   可能 or • • 事実メインでやってる ムリだろそれ ムーンエーテルとか持ってる奴 メインユーザーだったら 俺はマジでメインシリーズ 出来るけどお前 持っていないのだったら もうムリーねっていう 言い方になる 迷惑なんだよ 本当にメインエキサイト のユーザーだったら   お前なんか嫌いだ って言われてんじゃねーよって 言われています ふざけんなよ ケツタコちゃんとやってるから   あ、俺だけか みんなにも シェアしてるよ  !嬉しい 割りといるユーザーも いるよ というやり取りを してたよ そしてそして あれですよ 決済代行サイト ってあれメインエンジン なの? 代行してる人 尻拭きサイトなの 違うよ お風呂サイトだよ お湯を沸かしてるんだよ お金を取って やってる奴なんていないよ    現実世界だから 見てるよ俺 だって俺らだって 何もしてない 俺にやらせよ めっちゃいいこと だから大丈夫 心配ないから あれだろ 多分俺がやってた 可能性あるんじゃない なんで って聞かれるとなんか 答えられません よろしい もうすでに ずっと俺見てて いいだろお前 今日サラちゃん休学 学費免除申請出してきた いいの 大学の学園祭 こないだなんか出さなくなった 学園祭も 出さない サラちゃんは 音也だったら 全部OKまで 来ました よかった 良かった 悪は踏まれる 踏まれちゃう こん2日 なんかいい報告できる 登壇たのむ 主催の男の 会に行ってきた ちょっと話聞いてくれ 聞いてほしい 来てくれた 大学生の男 めちゃめちゃ硬かった ちょいMだった ちょま 間違いない 後輩から 調べたら多分 M寄りの大学生だよ 主催者君M寄りだよ お前らと話したいんだ ほんと M寄りに感じる 話さして スピーカーじゃなくて マイクでさ 俺ら撮れるじゃん 撮れないじゃんか ねえよ一般人なんて 数%しかいねーだろ しかも 意識高いことが できるわけないじゃん でもね ちょっとでも 打コンで 聞いてるっていう ね お前らのためだったら なんだってするぞ っていうことだから 違う違う 絶対ちゃう 俺が優勝 最弱優勝だ 優勝候補出して それに対する耐久力 耐久性あるから うんこちゃんだったら やっぱそう思うかしか ねーじゃん やっぱり思うよ 視聴者が5人とか6人 いたらね 元サーファーだったら そう思うよね 耐久しかない ねぇ なんで そりゃ俺自身がああ そういうのが好きだし そうだよね ただただ みんながこれを 考えてくれたら こんなに いいの0人だよ ブレイク以下 休憩時間以下ってことか 分が悪い つまり 敬遠されてるってこと 遠くね話してると こっちの方が好きだから で 終了しちゃってるから 全然話してない 俺のOSがAndroidだったから 途中からiOS くらいな 復帰してたの 復帰したわ なんで だって 寝た後 すぐにご飯食べないじゃん 寝る前 睡眠時間5時間とか 6時間 食べれるのあった なんか 寝るのはいいけど あんまりにも俺 コンビニとか 行こうとするとすごい嫌なの チェーンのパン屋 とか でも 行ったことねえよな 無理だわ パン屋すごい無理 だから すごい むやみに 嫌いなのに 近々復活するかもしれない 静岡県民だったら 静岡モミノキヨクサレ ドリブンスプーキダンレシピ ぐらいのペース だよね 彼女いないし んなこたねえだろ 女に LINEずっと無視されるとか キくそだぞ 身の程を弁えねえか 当時の流行りでしたから 「意味が分からない」 ってのが相手で 目が覚めて しまったという 事件でした 思っちょう? 
>
>ヒカキンは神だと思わない? まあでもあれだろ いろんな道あったじゃん あんま押しちゃうと YouTubeとかで でも俺ね 井上達人で
『井上刺したろか朝倉』 って言われたの いや朝倉は 朝倉結構いい女でしょ よくナンパしてるでしょ朝倉 あのー 何押しの一点だよ 目を離した隙に っていう なんかあれだよ 不謹慎だけどさ あれだよね 露出が多い女が好きなんだよね 俺だったら露出が高い女 そういうのやっぱ 惹かれるんだよね 一途だから 何がいいかって言うと いい女が 悪い女なんだよ 両方好きになるじゃん ただの選択肢として 出てくるじゃん   でもそれを 全部朝倉のせいにしちゃうのが 常習化してて だから露出が少ない みたいなことは言われるけど でもいいとこだよね 本質」 ずっと好きだけど 難しいね これね 100%朝倉だよ あいつのことねぇ ここ 合うわ 間が取れる? あーわかる? こっちがねぇしたらこっちがなんかさぁ 空いてんだ 向こうも仕事してんだぞ ねぇ 俺も行かなきゃいけないけどさぁ マジで薬撃った? 薬って撃ってる?薬って何?レッドブルの事言ってんの? お前仕事忙しいんだったらさぁこういうのは さぁこんなの2日じゃねぇよ いやぁ優秀だわぁ こんだけぇ こんな優秀がさぁ 100のことやってさぁ1つ当たり前だったら 100のことやってるってぇ大丈夫か? 英語よぉ まぁたなんだよその言い訳が 今日さぁ 用があってねぇ帰ってきたらさぁ 英語の教科書読みながらさぁ配信し 効率的読み方をしてねぇと思ったんだけどさぁ でさぁ俺の今日の授業さぁ 1時間目の教科書読ませて満足したんだけど なんか盛り上がんねぇからさぁ 2時間の授業も終わったしさぁ 3時間授業受けろって言われたけど なんもないわぁ お前は優秀だがぁ そのぉぉーめちゃめちゃ優秀なんだがぁ 100この授業 3時間ぶっ続けでやったけどぉ 全然成績悪いけど俺こういうの全部嘘なんだぜ こういうの テレビで 100%嘘だけどって言ったら みんなそうだよぉ このゴーゴーファイブも全部嘘ですって 全部フィクションです なんか議員とかが 政治家を目指してるとか そういうのないんだったら 嘘松を満喫して生きてる俺に何かあったら すみっこにジンワリと一緒にいてやる 約束するよ チャンネル替えとかになったら リアルガチで 俺嘘だぜってなるから わかった だから嘘だよ 友達とこういうとこいてるとか 他の人にこういうふうに接してるってのが 絶対必要なことだったらいいよなぁ コミュニケーションにおいて 視覚から得るものが90% 聴覚から得られるものが10%ってことだぜ お前のコミュニケーション能力よ 100円で文句言うな 今年 100円な話じゃない 最近友達できたんだけど あんまり有名じゃない人なんだけど 有名じゃなくて 100円以上文句言ってる人がいてヤバくないか それお前の友達な俺にもスピーカー送れ スピーカー あぁ そうか いいだろ別に だから 違うのは俺の 俺がお前を 出ないようにしてた うわぁ やっぱ違うわぁ お前ほんとにお前の中ではな いや でもいいだろ もし仮に もしも俺お嬢をすたるって バレないようにやってたら どうなってたかわかんない なんでも言うこと 俺がなんでも うーん まぁ 歌にしましょう カラオケに 集中集中 当日まっちゃんカラオケでは 俺は無理 無理絶対 勘の言い過ぎ 音程外すな あぁ そうだ 忘れてた 蜂鬼って俺たちとめっちゃ合う 合いません あなたの名前はありません あなたがあなたであるという 理由でお断りしました これってめっちゃ傷つく言い方じゃない!? ボクモ同上 アナタノ同ジデ ムリネェ ほんとに ダメだ だめぇ なんで!?!? 同上!? やめよ ちょっと待ってな 1万円は なんか買ってこよう こういう時にはこういう 向かうでこういう時に 俺マジで話するぜ みんなをリアリストに リアリスにリアニストに さっさと キャッシュレスの方に 行こうぜ俺ができる 馬券のキャッシュレス まあでもあれじゃん ねー どうしようかな ねえ できるもんな じゃあ俺キャッシュレスで 支払い方とか 俺はまあまあいろいろ 調べてから 買うかな もう決めてるからさ こんなんで 悩んでる俺にアドバイス なんだっけ 現金好きすぎだろ 近藤だいじょうぶか俺 みたいなの だけじゃなくて 全部好きだよ コンビニとかカード使えるじゃん お前のためだったら どんなことしても 許されるんだ ね すごく優しいという か俺のために... ってのが 大きいんだけど  何しろキャッシュレスだけ にしてもすごい すごい優しい ここにある 限定公開された 電子書籍も 見れるね全部 ボーイズ簿 乙女簿 こっち見てください リンクで ペンギン簿も いけます よー うおっ いいじゃねえか 

うーん加藤純一っぽい上に（記事をクリーンにしたかったので過激なことは言わないでほしかった）、長めの雑談トークをしている風には見えますが、いかんせん局所的な論理性・一貫性が全くない。
これはファインチューニングの問題でしょうか？やろうとしていることとLLMとの相性の問題でしょうか？

ファインチューニングに関しては、学習データの少なさが問題の可能性もありますし、形式に問題があるかもしれません。

LLMに関しては、もちろん手法の問題はあるでしょうが、「`3b`モデルではなく、`7b`モデルでもいけるのでは？」という可能性も捨てきれません。
[`7b`モデルは「吾輩は猫である」の続きをけっこういい感じに書けた](https://weel.co.jp/media/about-cyberagentllm)という記事もあり、`Open-CALM`が雑談に向いていないとはあまり思えません。とりあえず、`7b`で学習してみて、どうなるかを見たいと思います。

もしかしたらハイパーパラメーターの問題かもしれない。
ファインチューニング時のハイパーパラメータとして、全部で下記があります。
```python
class FineTunerPropertiesBase:
    '''
    `FineTunerBase`のプロパティを管理するクラス
    '''
    
    def __init__(
        #(省略)
        n_token = None,
        useint8:bool = True,

        #LoRAのハイパーパラメータ
        lora_r:int = 8,
        lora_alpha:int = 16,
        lora_dropout:float = 0.05,
        lora_bias:str = "none",

        #Trainerクラスのハイパーパラメータ
        ta_epochs:int = 4,
        ta_logging_steps:int = 200,
        ta_save_steps:int = 100000,
        ta_save_total_limit:int = 3,
        ta_train_batch_size:int = 8,
        ta_warmup_steps:int = 200,
        ta_weight_decay:float = 0.1,
        ta_learning_rate:float = 5e-4,
    ):  
```

`Trainer`クラスのパラメーターに関しては主に精度の話なので性質はある程度把握できているつもりでいますが、自分のなかでは`LoRA`のハイパーパラメーターがブラックボックスになっています。次回までに調査をします。
しかし、学習は一回につき丸々一日かかるので、気軽に実験できないのが苦しいところです。

一方で、出力時のハイパーパラメーターは下記のようなものがあります。
```python
    def __init__(
        self,
        max_new_tokens:int = 64,
        do_sample:bool = True,
        temperature:float = 0.7,
        top_p:float = 0.75,
        top_k:int = 40,
        no_repeat_ngram_size:int = 2
    ):
```
こちらの意味は[この記事](https://zenn.dev/tyaahan/articles/a8d99900000002)がしっかり解説しています。
こちらは出力が5分で終わるのでいろいろ試したいところ。特に、`no_repeat_ngram_size`が一貫性のカギを握っているのかもしれない。

## 次やること
* 現在`cyberagent/open-calm-7b`に20行のファインチューニングを施しています。
これで`7b`の場合どうなるかを観察し、出力時のハイパーパラメーターを変更するとどうなるかを調査します。

* （次々回かもしれませんが）LINE社LLMに再チャレンジしたいと思います。
データを`inputs_id`と`labels`に分け、どうなるかを観察します。これでも今回のような結果が得られた場合は、諦めます...

## 現在の課題
### 新しい課題
* `stabilityai/japanese-stablelm-base-alpha-7b`のファインチューニングができない。
`Open-CALM`よりずっといいことを自称している（[出典](https://ja.stability.ai/blog/japanese-stablelm-alpha)）ので、使ってみたかったのですが、エラーが発生してファインチューニングまでたどり着かない。([建てたissue](https://huggingface.co/stabilityai/japanese-stablelm-base-alpha-7b/discussions/5))仕様としては、`transformers`とは別のコードでモデルを構築させ、`transformers`経由でそのコードにアクセスして実行しているため、おそらく今回やろうとしているint8+LoRAファインチューニングを想定していない可能性があると予想しています。さすがに僕のGPUでは丸ごとファインチューニングには耐えられないので、開発者の対応を待ちます。

* シンプルに`ChatGPT`をファインチューニングする。
LLMの性能で悩むぐらいなら、もう金払って`ChatGPT`をファインチューニングすればいいという考え方もできます。ただ出力のたびにお金がかかるのがしんどいですが。やるとしたら`curie`モデルが適切だと思います。とりあえずクレジットカードが必要とのことなので、現在クレジットカード申請中です。

### 引き続きの課題
* 書き起こし精度が最善とは言い難いです。例えばよく登場する配信者「もこう」さんは「モコ」とかに書き起こされ、検索しても0件ヒットです。今開発しているこのAIも知識は完全に書き起こしデータに依存するので、<strong>この書き起こし精度がプロジェクト全体のボトルネックになっています。</strong>
書き起こしAIにOpenAI社の「Whisper」の`large-v2`モデルを使用していますが、こちらをファインチューニングする必要があるものと考えています。
文字ベースのデータでも出来るという情報もありますが、できれば音声+文字データでファインチューニングした方がよさそう、しかしデータがない。誰か手動書き起こしデータ作りしてほしいものです；；（時間がない）