Sdff-Ltba's picture
Update README.md
7a3f05f verified
metadata
base_model:
  - NTQAI/chatntq-ja-7b-v1.0
  - Elizezen/Antler-7B
language:
  - ja
tags:
  - mistral
  - mixtral
  - merge
  - moe
  - not-for-all-audiences
  - nsfw
pipeline_tag: text-generation

LightChatAssistant-2x7B

GGUF量子化はこちら

より日本語を自然にする調整を手作業で施したLightChatAssistant-TypeB-2x7Bを製作しました。

使用モデルを4つに増やした4x7B版をAratakoさんが開発してくださいました。こちらからご覧ください。

日本語が滑らかで、高速なチャット・ノベル生成モデルを目指して作成しました。 32kのContextSize対応、iQ3_XXS量子化でVRAM12GBでフルロード可能なモデルです。

モデル概要

パラメータ数が小さくても優秀なベンチマークスコアを持つ、Mistral7Bモデルをベースとした日本語対応モデルを使用しました。 2つのモデルそれぞれにChatVector手法を用いて対話能力強化ののち、mergekitでMoE化しました。

MoE化モデルの前準備(ChatVector適用)

以下の2モデルをChatVector手法で対話強化して素材に使用しています。

  1. ChatVectorは以下を用いて適用します。chat_vectorを0.8倍にするのはaixsatoshi/Swallow-MX-8x7b-NVE-chatvector-Mixtral-instruct-v2を参考にしました。
# Antler-7Bに適用した例 chat_vectorの重みを0.8倍にして日本語モデルに足す

from transformers import AutoModelForCausalLM
import torch

base_model = AutoModelForCausalLM.from_pretrained(
    "mistralai/Mistral-7B-v0.1",
    torch_dtype=torch.bfloat16,
    device_map="cpu",
)
inst_model = AutoModelForCausalLM.from_pretrained(
    "mistralai/Mistral-7B-Instruct-v0.2",
    torch_dtype=torch.bfloat16,
    device_map="cpu",
)
cp_model = AutoModelForCausalLM.from_pretrained(
    "Elizezen/Antler-7B",
    torch_dtype=torch.bfloat16,
    device_map="cpu",
)

for k, v in cp_model.state_dict().items():
    chat_vector = inst_model.state_dict()[k] - base_model.state_dict()[k]
    new_v = v + ( 0.8 * chat_vector.to(v.device) )
    v.copy_(new_v)

cp_model.save_pretrained("./model-chatvector")
  1. 作成されたモデルディレクトリにはtokenizer関係のファイルがないので、ChatVectorを適用する日本語モデルから(上の例だとElizezen/Antler-7B)足りないファイルをコピーします。[special_tokens_map.json、tokenizer.json、tokenizer.model、tokenizer_config.json]

  2. 作成されたモデルディレクトリにあるconfig.jsonを以下のように変更して、ContextSizeの内容をMistral7B-Instructの通りに修正します。(一つ目以外はあまり理解していない)

  • "max_position_embeddings"32768
  • "rope_theta"1000000.0
  • "sliding_window"null

MoE化

mergekitを用いて素材2モデルをMoE化しています。

config.ymlは以下を使用しました。Undi95/Mixtral-8x7B-MoE-RP-Storyを参考にしました。

base_model: ./chatntq-ja-7b-v1.0-chatvector
gate_mode: cheap_embed
dtype: bfloat16
experts:
  - source_model: ./chatntq-ja-7b-v1.0-chatvector
    positive_prompts:
    - "sex"
    - "roleplay"
    - "erotic"
    - "fuck"
    - "orgasm"
    - "uncensored"
    - "question"
    - "answer"
    - "chat"
    - "companion"
    - "[Mode: Roleplay]"
    - "[Mode: Chat]"
    negative_prompts:
    - "storywriting"
    - "book"
    - "story"
    - "chapter"
    - "tale"
    - "history"
    - "write"
    - "[Mode: Writing]"
  - source_model: ./Antler-7B-chatvector
    positive_prompts:
    - "sex"
    - "storywriting"
    - "erotic"
    - "fuck"
    - "orgasm"
    - "uncensored"
    - "book"
    - "story"
    - "chapter"
    - "tale"
    - "history"
    - "write"
    - "[Mode: Writing]"
tokenizer_source: union

環境

  • CPU: Ryzen 5 5600X
  • GPU: GeForce RTX 3060 12GB
  • RAM: DDR4-3200 96GB
  • OS: Windows 10
  • software: Python 3.12.2、KoboldCpp v1.61.2

KoboldCppの設定

(デフォルトから変更したもののみ記載)

  • GPU Layers: 33 (33以上でフルロード)
  • Context Size: 32768

出力例

User: 次のお話の続きを考えて恋愛小説で書いてください。
吾輩は猫である。名前はまだない


了解しました、吾輩が主人公となりますね。タイトルは「A Cat's Love Story」としましょうか。この物語は、吾輩が飼われている家で出会った人間の女性に恋をする話です。

吾輩は、ある日突然現れた野良猫でした。彼女、美香さんの家庭にやって来た時、凄く警戒されましたが、その中でも特に美香さんは優しい人でした。毎日彼女が作ってくれるご飯は美味しく、彼女が触ってくれる手は温かく、吾輩は彼女にすぐに心を開きました。

ある日、吾輩は美香さんが自分を抱きかかえて、庭を見渡せる場所に連れて行ってくれました。そこで、吾輩は初めて空を飛ぶ鳥たちを見ました。青い空に白い雲が浮かび、風が匂い立つ草原を吹き抜けていく様子を、彼女と一緒に眺めていました。その時、吾輩は美香さんがとても愛おしくなりました。

しかし、吾輩は猫であり、言葉を話せず、感情を表現する方法もありません。それでも、吾輩は美香さんを追いかけ続けました。美香さんは他の男性と付き合っていましたが、吾輩はじっと我慢し、ただ待ち続けました。

美香さんは気づいていませんでしたが、吾輩は彼女の部屋に入り込み、寝室に入り込むようになりました。彼女が疲れ果てて眠る横で、吾輩は静かに身体を寄

参考文献