ChoTensai_V3 / docs /question_quality_guide.md
TOMOCHIN4
release: v2.0.0 STABLE リリース完了
c71b90b
# QuestionDatabase 高品質化ガイドライン
> 国語・数学の高品質化経験に基づく標準手順
---
## 1. 概要
### 1.1 目的
- 問題データの品質向上(重複削除、フォーマット統一、難易度調整)
- 各ジャンルの高品質な問題セットを作成
- LLMを活用した効率的な編集作業
- Gemini APIによる学術的整合性チェック
### 1.2 対象ファイル
```
knowledge/v1.8.1/
├── jp/JP01-JP06.json (国語: 6ファイル)
├── math/MA01-MA10.json (数学: 10ファイル)
├── sci/SC01-SC10.json (理科: 10ファイル)
└── soc/SO01-SO10.json (社会: 10ファイル)
```
---
## 2. 品質基準
### 2.1 問題数
- **目標**: 各ファイル100問
- 不足分は対応する教材(`knowledge/*.md`)から新規作成
### 2.2 難易度分布(3:5:2)
| 難易度 | 割合 | 問題数 | 基準 |
|--------|------|--------|------|
| 基本 | 30% | 30問 | 小学校レベル、日常的な内容 |
| 標準 | 50% | 50問 | 中学校レベル、応用的な理解が必要 |
| 応用 | 20% | 20問 | 高校レベル以上、発展的な内容 |
### 2.3 フォーマット統一
```json
{
"answer_id": "xx_001",
"answer": "解答(ふりがな)",
"question_hint": "「〇〇___」の漢字",
"difficulty": "基本|標準|応用",
"source_context": "完全な文(マークダウンなし)"
}
```
#### フィールド規則
| フィールド | 規則 |
|-----------|------|
| answer_id | `{category}_{3桁連番}` (例: jp_001, ma_001) |
| answer | 解答文字列(ふりがなは括弧内に) |
| question_hint | 穴埋め形式「〇〇___」、末尾に「の漢字」等の指示 |
| difficulty | 基本/標準/応用 の3択 |
| source_context | 完全な文、マークダウン記号なし |
---
## 3. 高品質化手順
### Phase 1: 現状分析
```python
# 1. 問題数確認
len(questions)
# 2. 重複確認(解答の正規化)
def normalize(answer):
# ふりがな除去して比較
return re.sub(r'[((][^))]+[))]', '', answer)
# 3. フォーマット不整合確認
# - question_hint形式
# - マークダウン残存
# - source_context切れ
```
### Phase 2: 重複統合
1. 同一解答の問題をグループ化
2. 最良のquestion_hintを選定
3. 1問に統合、残りを削除
**選定基準**:
- 文脈が明確
- 穴埋め位置が適切
- source_contextが完全
### Phase 3: 新規問題作成
1. 対応する教材(`knowledge/*.md`)を参照
2. 教材から問題素材を抽出
3. フォーマットに従って問題化
**優先素材**:
- 同訓異字・同音異義語(国語)
- 公式・定理の応用(数学)
- 実験・観察の考察(理科)
- 年号・人物・地理(社会)
### Phase 4: 難易度調整
```python
# 現状カウント
counts = {"基本": 0, "標準": 0, "応用": 0}
# 目標: 30:50:20
target = {"基本": 30, "標準": 50, "応用": 20}
# 差分を計算し調整
```
### Phase 5: ID再割り当て・保存
```python
# 連番割り当て
for i, q in enumerate(questions, 1):
q["answer_id"] = f"{prefix}_{i:03d}"
# JSON保存
with open(path, 'w', encoding='utf-8') as f:
json.dump(questions, f, ensure_ascii=False, indent=2)
```
---
## 4. 品質チェックリスト
### 必須チェック
- [ ] 問題数 = 100問
- [ ] 重複なし(100ユニーク解答)
- [ ] answer_id連番(xx_001〜xx_100)
- [ ] 難易度分布: 30:50:20
- [ ] JSON構文正常
### フォーマットチェック
- [ ] question_hint: 「〇〇___」形式
- [ ] answer: 適切な形式
- [ ] source_context: マークダウンなし
- [ ] 全フィールド存在
### 内容チェック
- [ ] 問題として成立している
- [ ] 解答が一意に定まる
- [ ] 難易度が適切
---
## 5. カテゴリ別注意点
### 国語(JP01-JP06)
| カテゴリ | 内容 | 教材 |
|---------|------|------|
| JP01 | 漢字の読み書き | japanese.md |
| JP02 | 語彙・慣用句 | japanese.md |
| JP03 | 文法 | japanese.md |
| JP04 | 敬語 | japanese.md |
| JP05 | 文学史 | japanese.md |
| JP06 | 作文・表現 | japanese.md |
**注意**: 同訓異字・同音異義語は文脈で区別できるようにする
### 数学(MA01-MA10)
| カテゴリ | 内容 | 問題数 |
|---------|------|--------|
| MA01 | 四則演算・計算の基礎 | 40問 |
| MA02 | 単位換算・速さ | 40問 |
| MA03 | 円周率・面積 | 40問 |
| MA04 | 比例・割合 | 40問 |
| MA05 | 濃度・食塩水 | 40問 |
| MA06 | 方程式 | 40問 |
| MA07 | 図形・体積 | 40問 |
| MA08 | 時間計算 | 40問 |
| MA09 | 旅人算・追いかけ算 | 40問 |
| MA10 | 応用問題・複合問題 | 40問 |
**重要(中学受験向け)**:
- ★ 方程式(xを使った式)は絶対に使わない ★
- 特殊算による解法(つるかめ算、旅人算、仕事算、ニュートン算など)
- 計算の工夫(分配法則、逆算、比の利用)
- 線分図、面積図、ダイヤグラムによる解法
- 和差算、消去算、比と割合の考え方
### 理科(SC01-SC10)
**注意**: 単位は正確に記述
### 社会(SO01-SO10)
**注意**: 年号・人名の表記を統一
---
## 6. JP01高品質化の実績
### Before
- 問題数: 103問
- ユニーク解答: 39種類(重複率62%)
- フォーマット: 3パターン混在
- マークダウン残存あり
### After
- 問題数: 100問
- ユニーク解答: 100種類(重複0%)
- フォーマット: 統一済み
- 難易度: 30:50:20
### 作業内容
1. 103問 → 29問に統合(重複削除)
2. japanese.mdから71問新規作成
3. 難易度を3:5:2に調整
4. フォーマット統一・マークダウン除去
---
## 7. Gemini API添削
### 7.1 目的
- SUBAGENT高品質化後の学術的整合性チェック
- source_context、answer、question_hintの整合性確保
- 教科固有のルール適用(数学の方程式排除など)
### 7.2 使用方法
```bash
# スクリプト実行
GEMINI_API_KEY=xxxxx python scripts/review_math_with_gemini.py knowledge/v1.8.1/math/MA01.json
```
### 7.3 添削スクリプト
| ファイル | 説明 |
|---------|------|
| `scripts/review_math_with_gemini.py` | 数学用Gemini添削スクリプト |
### 7.4 添削基準
**共通基準**:
- answerが学術的に正確か
- question_hintが問題として適切か
- source_contextが解法・背景として正しいか
**数学固有基準**:
- 方程式(x=〜)を使わない
- 特殊算・計算の工夫で解法を説明
- 中学受験向けの難易度設定
### 7.5 使用モデル
| モデル | 用途 |
|--------|------|
| gemini-3-pro-preview | 高精度な添削(推奨) |
### 7.6 注意事項
- APIレート制限に注意(30秒間隔推奨)
- 1ファイル(40問)= 1回のAPI呼び出し
- レスポンスがemptyの場合は再試行
---
## 8. 参照ファイル
| ファイル | 用途 |
|---------|------|
| `knowledge/japanese.md` | 国語問題の素材 |
| `knowledge/science.md` | 理科問題の素材 |
| `knowledge/social.md` | 社会問題の素材 |
| `knowledge/v1.8.1/**/*.json` | 編集対象ファイル |
---
**最終更新**: 2025-12-23