Edit model card

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」としましょうか。この物語は、吾輩が飼われている家で出会った人間の女性に恋をする話です。

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

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

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

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

参考文献

Downloads last month
23
Safetensors
Model size
12.9B params
Tensor type
BF16
·
This model does not have enough activity to be deployed to Inference API (serverless) yet. Increase its social visibility and check back later, or deploy to Inference Endpoints (dedicated) instead.

Merge of