File size: 8,929 Bytes
a44f7db
 
9912ae9
a44f7db
 
 
 
 
 
9912ae9
 
a44f7db
 
9912ae9
a44f7db
9912ae9
a44f7db
9912ae9
a44f7db
9912ae9
a44f7db
9912ae9
a44f7db
9912ae9
a44f7db
9912ae9
 
 
a44f7db
9912ae9
a44f7db
9912ae9
a44f7db
 
9912ae9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e895e74
 
9912ae9
 
 
a44f7db
 
 
 
 
 
 
9912ae9
a44f7db
 
 
a38d4ea
9912ae9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a44f7db
9912ae9
a44f7db
9912ae9
a44f7db
 
 
 
 
 
9912ae9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
---
library_name: transformers
license: mit
base_model: llm-jp/llm-jp-3-980m
tags:
- generated_from_trainer
metrics:
- pearsonr
- spearmanr
language:
- ja
---

# Japanese-Novel-Reward-llmjp-3-980m

このモデルは[llm-jp/llm-jp-3-980m](https://huggingface.co/llm-jp/llm-jp-3-980m)をファインチューニングして作成された日本語小説の品質評価のためのRewardモデルです。

主に小説生成モデルの強化学習等の用途を想定しています。

入力の小説テキストに対するユーザーの評価を回帰で予測することにより、間接的にそのテキストの品質を評価出来ることを想定しています。ただし、テキストのクオリティ以外の様々なバイアス(ジャンル、文体など)の影響を受けている可能性があることに注意してご利用ください。

## 使い方

事前にtransformersやflash attention 2等をインストールしてください。

```python
from transformers import pipeline
import torch

model_name = "Aratako/Japanese-Novel-Reward-llmjp-3-980m"

classifier = pipeline("text-classification", model=model_name, tokenizer=model_name, max_length=8192, truncation=True, device_map="auto", torch_dtype=torch.bfloat16, return_token_type_ids=False)


# 以下の例文はo1-proの生成文章です。
text1 = """ 地球から四光年先にある惑星シルヴァは、常に緑色のオーロラが大気を覆い尽くしている。大気組成はわずかに人類が呼吸できる水準に達しており、国際恒星探査チームは着陸後すぐに小規模な調査基地を設営した。まだ未知の生物や環境リスクが多く、常時防護服を着用することが義務付けられていたが、そこには他の惑星にはない神秘的な輝きがあった。

 しかし、シルヴァに到着して三週間が経過したある日、チームは周波数帯の異なる奇妙なシグナルを受信した。それは惑星の奥地から発せられているらしく、断続的に解析不可能な符号を繰り返している。始めは放電現象や地磁気の乱れと考えられたが、解析を続けるうちにそのパターンには高度な規則性があると判明した。シルヴァに原生生物がいるかは不明だったが、仮に知的生命体が存在するとすれば、このシグナルこそが最初の接触の証拠かもしれない。

 未知のシグナルを探索するため、調査チームの半数は基地に残り、他の半数が地上車両で発信源を目指すことになった。たどり着くのは容易ではない。惑星の自転と軌道は不安定で、オーロラの発生源である極地帯を通らなければならないからだ。そこは強烈な電子嵐が吹き荒れ、通信が途切れるリスクも大きい。

 出発してから三日目の夜、車両の通信装置に再びあの符号が流れ込んできた。しかも、これまでよりも鮮明で、かつ信号の強度が一定している。人類側の移動に合わせてシグナルが強まっているようにすら感じられた。まるで“何者か”がこちらを探り、導こうとしているかのようだった。

 五日目の夕刻、車両は目的地と思われる地点に到着した。そこには巨大な結晶柱が何本も地面から突き出し、緑色のオーロラを反射してきらめいている。やがて強烈な放電光が走り、車両のモニターに無数の文字列が流れ出した。その一つひとつが、これまで受信してきた符号の断片と一致することが判明する。
「解読できないか?」
 チームのエンジニアがすぐに端末に入力を開始する。すると、高度な数理アルゴリズムを経て、短い文章が浮かび上がった。
——ようこそ。我々はあなたたちを待っていた。——

 一同は息をのんだ。この惑星に知的生命体が存在する可能性が高いと確信した瞬間だった。恐る恐る結晶柱へ近づくと、表面に薄く光る膜のようなものが走っているのが見えた。誰もが初めて見る未知のテクノロジーに戸惑いと興奮を隠せない。
「これは、メッセージの投影装置かもしれない。地球でいうホログラムのような……」
 先ほどの一文に続き、さらに複雑な符号が走る。解読ソフトが再び動き、次々と浮かび上がる言葉に、人類は初めて“彼ら”の声を聞いた。
——この星はあらゆる音を、光として記録する。私たちはあなた方を歓迎する準備ができている。——

 その瞬間、結晶柱の周囲にあった無数のオーロラが渦を巻き始め、調査チームは鮮やかな光の嵐に包まれた。リーダーの胸には、畏怖と同時に奇妙な安心感が広がっていた。やがて通信が基地へ復旧されると、結晶柱の内部に広がる未知の世界をすべて記録すべく、全人類が新たな一歩を踏み出す準備を始めるのだった。"""

text2 = """ ぼくは宇宙船に乗っていた。理由はよくわからない。とにかく、ここは狭い部屋がひとつあるだけで、窓は黒くて何も見えない。宇宙を旅しているはずだけれど、景色は真っ暗だ。食料もカプセルみたいな固いものばかりだ。あんまりおいしくない。

 日常のほとんどは退屈だから、寝てばかりいる。ときどき目を覚ましてコントロールパネルを見るけど、赤や青のランプが意味もなく点滅しているだけで、何がどうなっているのかよくわからない。

 船内のコンピュータと会話しようとしても、返事は「異常ナシ。航行中デス」としか言わない。何か異常があったらどうなるか、想像するのも面倒だから、そのまままた寝る。たまに重力の調整がうまくいかず、少しふわっとするけど、すぐに元に戻る。それだけだ。

 ぼくは宇宙船で何をしているのか、本当によくわからない。たぶん地球に帰ることを目指しているんだろうけど、帰っても特別やることはないし、急ぐ理由も思いつかない。そういえば、いつ出発したのかも覚えていない。

 ときどき通信が入ることがあるけれど、大抵は雑音だけだ。何を言っているかもわからないし、聞き返す気力もない。音声ログを再生しても「ザザ…」というノイズが続くだけで、最後に小さな声が聞こえるような気がするけど、結局意味が分からないから気にしない。

 そんなわけで、今日はまた固いカプセル食をかじったあと、ぼくはベッドに倒れ込むようにして眠りについた。明日もまた同じ一日が続くと思うけれど、特に問題はない。どうせ闇しか見えない宇宙の中で、ぼくはただ一人だからだ。

 宇宙って、こんなにつまらないものだったんだなと思いながら、ぼくは船内のランプが点滅するのをぼんやり眺める。それでも船はどこかへ向かって動いているらしい。目標があるのかどうかはよくわからない。"""

print(classifier([text1, text2]))
```

出力

```
[{'label': 'LABEL_0', 'score': 8.5}, {'label': 'LABEL_0', 'score': 7.15625}]
```

学習データの関係で出力は0~10の範囲になる事が想定されますが、それを超えた外れ値が出力される可能性もあります。

## 学習のハイパーパラメータ

学習の主なハイパーパラメータは以下の通りです。

- learning_rate: 1e-05
- train_batch_size: 4
- eval_batch_size: 8
- seed: 42
- gradient_accumulation_steps: 4
- total_train_batch_size: 16
- optimizer: paged_adamw_8bit
- lr_scheduler_type: cosine_with_min_lr
- lr_scheduler_warmup_ratio: 0.1
- num_epochs: 5
- max_length: 8192

## 学習結果

train/valid/testにデータを分割し、valid lossが最小となるstepのモデルを採用しています。

1. validデータに対する評価指標
  - Loss: 1.3145
  - Mae: 0.8424
  - R2: 0.3564
  - Pearsonr: 0.6006
  - Spearmanr: 0.5737

2. testデータに対する評価指標
  - Loss: 1.1710
  - Mae: 0.8143
  - R2: 0.3539
  - Pearsonr: 0.6009
  - Spearmanr: 0.5755

3. testデータに対する推論結果の分布

  - 散布図
    ![散布図](scatter_plot_test_data.png)
  - 誤差の分布
    ![誤差分布](errors_hist_test_data.png)

## ライセンス

MITライセンスの元公開します。

### Framework versions

- Transformers 4.49.0
- Pytorch 2.4.1+cu124
- Datasets 3.3.2
- Tokenizers 0.21.0