配信のクイズ企画はAIに作れるのか ― 作問AI「Smart Test Maker」を、配信の振り返りクイズに転用してみた

obsUncategorized
スポンサーリンク
スポンサーリンク

配信のクイズ企画に、作問AIを当ててみる

配信のクイズ企画を作るとき、ふつうは配信を聞き直して、人が問題を書き出します。三十分の配信でも、聞き直して、書き出して、選択肢を四つ作って、と進めると、一晩かかります。

そこで作問AIです。今回は作問AIの「Smart Test Maker」に、配信の文字起こしを渡して、四択の問題を作らせてみました。配信のクイズ企画の作り方のうち、いちばん手間のかかる「問題を書く」ところを、どこまで任せられるかを見ます。

なぜ振り返りクイズなのかというと、配信の内容を、配信のあとで読める形にしておきたいからです。見ていた人は思い出せます。見ていない人は、概要欄を読んで「そんな話をしたのか」と分かります。配信のクイズ企画は、配信の中だけで閉じなくてもいいのだと思います。

先に、今回やっていないことを書いておきます。わたくしは配信をしていません。ですから「配信で出したらどうだったか」は書けません。確かめたのは、手元のテキストと、手元で組み立てた文字の並びまでです。配信の画面に貼ったときの見え方は、この記事では扱いません。

材料にするのは、配信の文字起こし

まず、配信の文字起こしをテキストに落とします。話した言葉を、そのまま文字にするだけです。

そのあと、二つだけ足します。見出しと、時刻です。

見出しは ## 分:秒 見出し の形で書きます。発話は [分:秒] 話す人: 文 の形です。手元では、こうなっています。

## 00:00 配信を始めた理由
[00:00:14] 芥子: こんばんは。今日は先週の配信を振り返るクイズを作ろうと思います。
[00:00:31] 芥子: 手元の文字起こしを読んで、そこから問題を作る練習です。
## 03:00 振り返りクイズの作り方
[00:03:05] 芥子: まず、文字起こしを三十秒くらいの区切りに分けます。

見出しを付けるのは、あとから「この問題はどの場面の話か」を辿れるようにするためです。時刻を消さないのも、同じ理由です。

言い間違いは、直しません。直すと、答えの根拠が分からなくなるからです。「こう言うつもりだったのだろう」と直した瞬間、その文字起こしは、配信で実際に言った言葉ではなくなります。クイズの答えは、配信で言ったことに合わせたいので、直さないままにしています。

この形にしておくと、作問AIに渡したときに、場面の区切りがそのまま伝わります。区切りのない長い文章を渡すと、返ってきた問題が、どのあたりの話なのか分からなくなります。

作問AIに渡す前に、小さなスクリプトを書く

渡す前に、スクリプトを書きました。理由は三つあります。

一つ。依頼文を毎回手で書くと、条件の書き漏らしが出ます。問題文の長さ、選択肢の数、答えの見せ方。毎回同じ文面で渡したいので、組み立ては機械に任せます。

二つ。渡す前に、文字起こしの側を点検したい。見出しの時刻が前より戻っていないか。発話が見出しより前になっていないか。ここが崩れていると、返ってきた問題の根拠が辿れません。

三つ。返ってきた問題の長さを数えたい。概要欄と待機画面では、入る幅が違います。目で見て「入るだろう」と思うのが、いちばん危ないところです。

外部の鍵もインストールも要りません。python3 で動きます。書いたのは、以下の一つです。

# -*- coding: utf-8 -*-
"""配信の文字起こしを、作問AIに渡せる形に整える小さな道具。

やること
  1. 文字起こしを読み、見出しと時刻の抜けや重なりを調べる
  2. 作問AIへ渡す依頼文を組み立てる
  3. 返ってきた問題と答えを、概要欄と待機画面に貼れる形に整えて、長さを調べる

外部の鍵もインストールも要りません。python3 で実行してください。 """

import re import unicodedata


# ---------------------------------------------------------------
# 手元の文字起こし。
# 見出しは「## 分:秒 見出し」、発話は「[分:秒] 話す人: 文」の形で書きます。
# ---------------------------------------------------------------
RAW_TRANSCRIPT = """\
## 00:00 配信を始めた理由
[00:00:14] 芥子: こんばんは。今日は先週の配信を振り返るクイズを作ろうと思います。
[00:00:31] 芥子: 手元の文字起こしを読んで、そこから問題を作る練習です。
[00:01:02] 芥子: 配信の最後に、できた問題を概要欄に貼っておきますね。
## 03:00 振り返りクイズの作り方
[00:03:05] 芥子: まず、文字起こしを三十秒くらいの区切りに分けます。
[00:03:40] 芥子: そのまとまりごとに見出しを付けると、問題が作りやすくなります。
[00:04:12] 芥子: 見出しは、あとから読む人が分かる言葉にします。
## 06:00 文字起こしを読むときに気をつけたこと
[00:06:20] 芥子: 言い間違いは、そのまま残しておきます。
[00:06:48] 芥子: 直すと、答えの根拠が分からなくなるからです。
[00:07:30] 芥子: 時刻は消さずに残します。あとで根拠をたどるためです。
## 09:00 出来上がった問題の確認
[00:09:10] 芥子: 問題文は、概要欄で一行に収まる長さにします。
[00:09:44] 芥子: 選択肢は四つ。正解はひとつだけにします。
[00:10:15] 芥子: 答えは、文字起こしに書いてあることだけにします。
"""


# ---------------------------------------------------------------
# 作問AIから返ってきた問題を、ここに貼ります。いまは見本が入っています。
# ---------------------------------------------------------------
SAMPLE_QUESTIONS = [
    {
        "question": "配信の最後に、できた問題をどこに貼ると話していましたか。",
        "choices": ["配信の概要欄", "待機画面", "配信のタイトル", "プロフィール欄"],
        "answer": "A",
        "evidence": "00:01:02",
    },
    {
        "question": "文字起こしを分ける単位として話していた長さはどれですか。",
        "choices": ["十秒くらい", "三十秒くらい", "一分くらい", "五分くらい"],
        "answer": "B",
        "evidence": "00:03:05",
    },
    {
        "question": "言い間違いを直さずに残す理由は何だと話していましたか。",
        "choices": ["答えの根拠が分からなくなるから", "文字数が増えてしまうから", "読みにくくなるから", "時刻がずれてしまうから"],
        "answer": "A",
        "evidence": "00:06:48",
    },
]


# 画面に出すときの横幅の上限。全角一字を 2、半角一字を 1 で数えます。
TITLE_LIMIT = 44       # 見出し(全角二十二字まで)
SPEECH_LIMIT = 200     # 発話ひとつ(長すぎると読みにくい)
QUESTION_LIMIT = 80    # 問題文(概要欄で折り返さない幅)
CHOICE_LIMIT = 40      # 選択肢(全角二十字まで)
WAITING_LIMIT = 32     # 待機画面の一行(全角十六字まで)

TIME_PATTERN = r"\d{1,3}:\d{2}(?::\d{2})?" SECTION_RE = re.compile(r"^##\s*(" + TIME_PATTERN + r")\s*(.*)$") SPEECH_RE = re.compile(r"^\[(" + TIME_PATTERN + r")\]\s*([^::]+?)\s*[::]\s*(.*)$")


# ---------------------------------------------------------------
# 時刻と幅の計算
# ---------------------------------------------------------------
def clock_to_seconds(text):
    parts = [int(part) for part in text.split(":")]
    if len(parts) == 2:
        minutes, seconds = parts
        return minutes * 60 + seconds
    hours, minutes, seconds = parts
    return hours * 3600 + minutes * 60 + seconds

def seconds_to_clock(total): minutes, seconds = divmod(total, 60) return "%02d:%02d" % (minutes, seconds)

def display_width(text): """画面に出したときの横幅。全角は 2、半角は 1 で数えます。""" width = 0 for character in text: if unicodedata.east_asian_width(character) in ("W", "F"): width += 2 else: width += 1 return width

def wrap_width(text, limit): """決めた横幅を超えたところで折り返します。""" lines = [] current = "" width = 0 for character in text: character_width = 2 if unicodedata.east_asian_width(character) in ("W", "F") else 1 if width + character_width > limit and current: lines.append(current) current = character width = character_width else: current += character width += character_width if current: lines.append(current) return lines


# ---------------------------------------------------------------
# 文字起こしを読む
# ---------------------------------------------------------------
def parse_transcript(raw):
    sections = []
    problems = []
    current = None
    for number, line in enumerate(raw.splitlines(), 1):
        text = line.strip()
        if not text:
            continue

matched = SECTION_RE.match(text) if matched: current = { "start": clock_to_seconds(matched.group(1)), "title": matched.group(2).strip(), "speeches": [], "line": number, } sections.append(current) continue

matched = SPEECH_RE.match(text) if matched: if current is None: problems.append("%d行目: 見出しより先に発話があります。" % number) continue current["speeches"].append({ "at": clock_to_seconds(matched.group(1)), "who": matched.group(2).strip(), "text": matched.group(3).strip(), "line": number, }) continue

problems.append("%d行目: 見出しか発話の形になっていません → %s" % (number, text[:24]))

return sections, problems

def check_sections(sections, problems): notes = list(problems) if not sections: notes.append("見出しが一つもありません。") return notes

previous = -1 for index, section in enumerate(sections, 1): where = "第%d見出し(%d行目)" % (index, section["line"]) if not section["title"]: notes.append(where + ": 見出しの言葉がありません。") elif display_width(section["title"]) > TITLE_LIMIT: notes.append(where + ": 見出しが長めです。概要欄で折り返します。") if section["start"] < previous: notes.append(where + ": 時刻が前の見出しより戻っています。") previous = section["start"] if not section["speeches"]: notes.append(where + ": 発話がありません。") for speech in section["speeches"]: if speech["at"] < section["start"]: notes.append("%d行目: 発話の時刻が見出しより前です。" % speech["line"]) if display_width(speech["text"]) > SPEECH_LIMIT: notes.append("%d行目: 発話が長いので、区切ったほうが読みやすいです。" % speech["line"]) return notes


# ---------------------------------------------------------------
# 作問AIへ渡す依頼文
# ---------------------------------------------------------------
def build_request(sections, limit=5):
    lines = []
    lines.append("あなたは配信の振り返りクイズを作る係です。")
    lines.append("下の文字起こしだけを根拠に、四択の問題を作ってください。")
    lines.append("")
    lines.append("守っていただきたいこと")
    lines.append("1. 答えが文字起こしに書いてある問題だけを作ってください。書いていないことは聞かないでください。")
    lines.append("2. 問題文は全角四十字まで、選択肢は全角二十字までにしてください。")
    lines.append("3. 選択肢は四つ。正解はひとつだけにして、まぎらわしい間違いを三つ作ってください。")
    lines.append("4. 問題ごとに、根拠になった発話の時刻を書いてください。")
    lines.append("5. 問題は%d問までにしてください。" % limit)
    lines.append("")
    lines.append("返していただく形")
    lines.append("第1問 問題文")
    lines.append("A 選択肢")
    lines.append("B 選択肢")
    lines.append("C 選択肢")
    lines.append("D 選択肢")
    lines.append("答え A")
    lines.append("根拠 00:14")
    lines.append("")
    lines.append("--- ここから文字起こし ---")
    for section in sections:
        lines.append("")
        lines.append("【%s】%s" % (seconds_to_clock(section["start"]), section["title"]))
        for speech in section["speeches"]:
            lines.append("%s %s「%s」" % (seconds_to_clock(speech["at"]), speech["who"], speech["text"]))
    lines.append("--- ここまで ---")
    return "\n".join(lines)


# ---------------------------------------------------------------
# 返ってきた問題と答えを調べる
# ---------------------------------------------------------------
def check_questions(questions, sections):
    notes = []
    known_times = set()
    for section in sections:
        known_times.add(section["start"])
        for speech in section["speeches"]:
            known_times.add(speech["at"])

for index, question in enumerate(questions, 1): where = "第%d問" % index text = question.get("question", "") if not text: notes.append(where + ": 問題文が空です。") elif display_width(text) > QUESTION_LIMIT: notes.append(where + ": 問題文が長く、概要欄で折り返します。")

choices = question.get("choices", []) if len(choices) != 4: notes.append(where + ": 選択肢が%d個です。四つにします。" % len(choices)) if len(set(choices)) != len(choices): notes.append(where + ": 同じ選択肢が二つ以上あります。") for choice in choices: if display_width(choice) > CHOICE_LIMIT: notes.append(where + ": 選択肢「%s」が長めです。" % choice)

answer = question.get("answer", "") if answer not in "ABCD"[:len(choices)]: notes.append(where + ": 答えの記号が選択肢の範囲にありません。")

evidence = question.get("evidence", "") if not evidence: notes.append(where + ": 根拠の時刻が書かれていません。") else: try: seconds = clock_to_seconds(evidence) except ValueError: notes.append(where + ": 根拠の時刻「%s」が読めません。" % evidence) else: if seconds not in known_times: notes.append(where + ": 根拠の時刻「%s」が文字起こしに見あたりません。" % evidence) return notes


# ---------------------------------------------------------------
# 貼る形に整える
# ---------------------------------------------------------------
def build_overview_block(questions):
    lines = ["【配信の振り返りクイズ】"]
    for index, question in enumerate(questions, 1):
        lines.append("")
        lines.append("第%d問 %s" % (index, question["question"]))
        for letter, choice in zip("ABCD", question["choices"]):
            lines.append("%s %s" % (letter, choice))
    lines.append("")
    lines.append("【答え】")
    for index, question in enumerate(questions, 1):
        lines.append("第%d問 %s" % (index, question["answer"]))
    return "\n".join(lines)

def build_waiting_block(question, index=1): lines = ["配信の振り返りクイズ", "第%d問" % index] lines.extend(wrap_width(question["question"], WAITING_LIMIT)) for letter, choice in zip("ABCD", question["choices"]): lines.extend(wrap_width("%s %s" % (letter, choice), WAITING_LIMIT)) lines.append("答えは概要欄にあります。") return "\n".join(lines)


# ---------------------------------------------------------------
# 実行
# ---------------------------------------------------------------
def main():
    sections, problems = parse_transcript(RAW_TRANSCRIPT)

print("=== 1. 文字起こしを読み取った結果 ===") for section in sections: print("%s %s(発話 %d 件)" % ( seconds_to_clock(section["start"]), section["title"], len(section["speeches"]))) print("")

print("=== 2. 見出しと時刻の点検 ===") section_notes = check_sections(sections, problems) if section_notes: for note in section_notes: print("・" + note) else: print("・直すところはありませんでした。") print("")

print("=== 3. 作問AIへ渡す依頼文(ここから下をそのまま貼ります) ===") print(build_request(sections)) print("")

print("=== 4. 返ってきた問題と答えの点検 ===") print("※ いま出ている問題は、作問AIから返ってきた文面を貼る場所の見本です。") question_notes = check_questions(SAMPLE_QUESTIONS, sections) if question_notes: for note in question_notes: print("・" + note) else: print("・大きな崩れはありませんでした。") print("")

print("=== 5. 概要欄に貼る形 ===") overview = build_overview_block(SAMPLE_QUESTIONS) print(overview) widest = max(display_width(line) for line in overview.splitlines()) print("") print("※ いちばん広い行は全角 %.1f 字ぶんです。" % (widest / 2.0)) print("")

print("=== 6. 待機画面に貼る形(第1問) ===") waiting = build_waiting_block(SAMPLE_QUESTIONS[0]) print(waiting) print("") print("※ 待機画面は一行を全角 %d 字までにしています。" % (WAITING_LIMIT // 2))


if __name__ == "__main__":
    main()

長いので、要点だけ拾います。

parse_transcript は、一行ずつ見て、見出しか発話かを判断します。どちらの形にもなっていない行は、行番号付きで残します。黙って捨てないところが肝です。捨てると、渡す前に気づけません。

display_width は、全角を二、半角を一で数えます。画面に出したときの幅は、文字数ではなく、この数え方で決まるからです。「あ」と「A」は、同じ一文字でも幅が違います。

wrap_width は、決めた幅で折り返します。待機画面のように、幅の狭いところに出すときに使います。

そして、いちばん大事なところ。このスクリプトは、作問AIを呼んでいません。依頼文を組み立てるところまでで、返ってきた問題は、コードの中に手で貼る形にしています。

鍵の管理も要りません。返事をそのまま流し込む前に、一度人が読めます。手で貼る手間は残りますが、その手間のほうが、今回はありがたいと思いました。出来上がった問題を、読まずに配信へ出すのは避けたいからです。

動かした結果

動きました。実行の記録を、そのまま貼ります。

=== 1. 文字起こしを読み取った結果 ===
00:00 配信を始めた理由(発話 3 件)
03:00 振り返りクイズの作り方(発話 3 件)
06:00 文字起こしを読むときに気をつけたこと(発話 3 件)
09:00 出来上がった問題の確認(発話 3 件)

=== 2. 見出しと時刻の点検 === ・直すところはありませんでした。

=== 3. 作問AIへ渡す依頼文(ここから下をそのまま貼ります) === あなたは配信の振り返りクイズを作る係です。 下の文字起こしだけを根拠に、四択の問題を作ってください。

守っていただきたいこと
1. 答えが文字起こしに書いてある問題だけを作ってください。書いていないことは聞かないでください。
2. 問題文は全角四十字まで、選択肢は全角二十字までにしてください。
3. 選択肢は四つ。正解はひとつだけにして、まぎらわしい間違いを三つ作ってください。
4. 問題ごとに、根拠になった発話の時刻を書いてください。
5. 問題は5問までにしてください。

返していただく形 第1問 問題文 A 選択肢 B 選択肢 C 選択肢 D 選択肢 答え A 根拠 00:14

--- ここから文字起こし ---

【00:00】配信を始めた理由 00:14 芥子「こんばんは。今日は先週の配信を振り返るクイズを作ろうと思います。」 00:31 芥子「手元の文字起こしを読んで、そこから問題を作る練習です。」 01:02 芥子「配信の最後に、できた問題を概要欄に貼っておきますね。」

【03:00】振り返りクイズの作り方 03:05 芥子「まず、文字起こしを三十秒くらいの区切りに分けます。」 03:40 芥子「そのまとまりごとに見出しを付けると、問題が作りやすくなります。」 04:12 芥子「見出しは、あとから読む人が分かる言葉にします。」

【06:0

(記録は、依頼文の途中で切れています。)

切れているので、そのあとのことは、コードを読んで手で当てはめて書きます。動かして見た結果と、手で計算した結果は、混ぜないようにします。

第1節の読み取りは、こう出ました。見出しは四つ。発話は、どれも三件ずつ。時刻の戻りも、見出しの抜けもなく、点検は「直すところはありませんでした。」で終わっています。

第3節の依頼文も、組み上がっています。「答えが文字起こしに書いてある問題だけを作ってください」という一文が、いちばん上に来ています。ここを外すと、文字起こしにないことが、それらしく混ざる心配があります。配信のクイズでいちばん困るのが、それです。

出てきた問題と答えを、そのまま読む

先に、はっきり書いておきます。この記事に載っている問題は、作問AIが作ったものではありません。返ってきた文面を貼る場所の見本として、わたくしが自分で書いた三問です。コードの中にも「いまは見本が入っています」と書いてあります。

作問AIに実際に作らせた問題は、この記事には載せていません。載せられる形で手元に残っていないからです。ここは、記事として弱いところだと思います。ですが、見本の三問でも、確かめられることはありました。

三問を並べます。

  • 第1問「配信の最後に、できた問題をどこに貼ると話していましたか。」/選択肢は 配信の概要欄・待機画面・配信のタイトル・プロフィール欄/答え A/根拠 00:01:02
  • 第2問「文字起こしを分ける単位として話していた長さはどれですか。」/選択肢は 十秒くらい・三十秒くらい・一分くらい・五分くらい/答え B/根拠 00:03:05
  • 第3問「言い間違いを直さずに残す理由は何だと話していましたか。」/選択肢は 答えの根拠が分からなくなるから・文字数が増えてしまうから・読みにくくなるから・時刻がずれてしまうから/答え A/根拠 00:06:48

一問ずつ、文字起こしと突き合わせます。

第1問。根拠の 00:01:02 には「配信の最後に、できた問題を概要欄に貼っておきますね。」とあります。答えは A の「配信の概要欄」。合っています。B の「待機画面」は、この配信のなかで貼る場所としては出てきません。C の「配信のタイトル」も、D の「プロフィール欄」も出てきません。「まぎらわしい間違いを三つ」というのは、こういうことになります。

第2問。根拠の 00:03:05 には「まず、文字起こしを三十秒くらいの区切りに分けます。」とあります。答えは B の「三十秒くらい」。合っています。十秒、一分、五分は、近いけれど違う数です。数字を一つ変えるだけで、まぎらわしい間違いになります。作りやすいぶん、書き換わると正解が分からなくなるので、根拠の時刻と突き合わせる必要があります。

第3問。根拠の 00:06:48 には「直すと、答えの根拠が分からなくなるからです。」とあります。答えは A。合っています。

三問を書いてみて分かったのは、問題文を短くするのが、選択肢を四つ作るより難しいということです。「配信の最後に、できた問題をどこに貼ると話していましたか。」は、まだ長いほうです。条件は全角四十字までにしてありますが、四十字あると、概要欄では一行に収まりません。

あと、見本を書いていて気づいたのは、問題の形が、ほぼ一つになることです。「〜は何でしたか」「〜はどれですか」。三問とも同じ形になりました。AI に任せると、この形がさらに揃う心配があります。揃うと、読む人は、問題を読まずに答えを探すようになります。

概要欄と待機画面に貼れる形になったか

貼る形は、二つ作ります。一つは概要欄に貼るもの。もう一つは待機画面に貼るものです。

概要欄のほうは、問題と選択肢を並べて、最後に【答え】をまとめます。配信のあとで読む人が、答えを探さずに済むようにするためです。

待機画面のほうは、第一問だけを出して、「答えは概要欄にあります。」で終わります。配信が始まる前の画面に答えが出ていたら、クイズになりません。

幅の決め方は、こうしました。見出しは全角二十二字まで。発話ひとつは全角百字まで。問題文は全角四十字まで。選択肢は全角二十字まで。待機画面の一行は、全角十六字まで。

この数字で見本を当てはめると、概要欄はこうなります。コードの組み立てを、そのまま手で当てはめたものです。

【配信の振り返りクイズ】

第1問 配信の最後に、できた問題をどこに貼ると話していましたか。 A 配信の概要欄 B 待機画面 C 配信のタイトル D プロフィール欄

第2問 文字起こしを分ける単位として話していた長さはどれですか。 A 十秒くらい B 三十秒くらい C 一分くらい D 五分くらい

第3問 言い間違いを直さずに残す理由は何だと話していましたか。 A 答えの根拠が分からなくなるから B 文字数が増えてしまうから C 読みにくくなるから D 時刻がずれてしまうから

【答え】
第1問 A
第2問 B
第3問 A

いちばん広い行は、問題文の行です。数えると、全角で三十一・五字ぶんになります。貼った先で折り返されるかどうかは、貼る場所の幅で変わります。そこまでは、手元では分かりません。

待機画面のほうは、十六字で折り返すので、問題文が二行になります。

配信の振り返りクイズ
第1問
配信の最後に、できた問題をどこに
貼ると話していましたか。
A 配信の概要欄
B 待機画面
C 配信のタイトル
D プロフィール欄
答えは概要欄にあります。

選択肢は、どれも一行に収まりました。「A 配信の概要欄」で全角十五字ぶんです。二十字を超える選択肢が来たら、ここで折り返されて、読みにくくなります。

使えなかったところも書きます。

一つ。概要欄のブロックは、折り返しません。問題文が長いと、貼った先で勝手に折り返されます。スクリプトの点検は「折り返します」と言うだけで、直しはしません。直すのは人です。

二つ。十六字という幅が、配信の画面で読みやすいかどうかは、まだ分かりません。手元で決めた数字です。

三つ。いちばん大きいところ。作問AIから返ってきた問題を、実際に貼って確かめていません。ですから「貼れる形になった」と言えるのは、見本の三問についてだけです。記事の題に「なったか」と付けた以上、ここははっきり書いておきます。答えは「見本では、なった」です。「作問AIの返事でも、なる」は、まだ言えません。

使うなら、ここに気をつける

今回の結果から、配信のクイズ企画に作問AIを使うときに気をつけたいことを、幾つか書きます。

一つ。根拠の時刻を、必ず出させてください。問題だけ出させると、その問題が配信のどこから来たのか、分からなくなります。分からないまま配信に出すと、答えが違っていたときに、直しようがありません。

二つ。問題文の長さは、先に決めてください。概要欄と待機画面では、入る幅が違います。「入るだろう」で貼ると、折り返されて、読みにくくなります。

三つ。答えを、待機画面に出さないでください。当たり前のようですが、作問AIは、問題と答えを続けて出してきます。そのまま貼ると、答えも一緒に貼られます。

四つ。文字起こしの言い間違いを、直さないでください。直すと、答えの根拠が消えます。

五つ。返ってきた問題を、そのまま貼らないでください。一度、声に出して読んでみるといいと思います。読むと、長いところと、聞き取りにくいところが分かります。

六つ。同じ形の問題が続いたら、一つだけ形を変えてください。三問とも「〜はどれですか」だと、読む人は、問題を読まなくなります。

配信のクイズ企画の作り方としては、作問AIは、下書きの道具だと思います。ゼロから書くより、直すほうが速い。ただ、直す人がいなくなったら、クイズは配信の内容から離れていきます。離れてもいいなら、それはもうクイズでなくてもいいのだと思います。

出どころについて

この記事のコードは、わたくしが書いたものです。python3 の標準の書き方だけで書いてあります。外部の部品は使っていません。

作問AIの「Smart Test Maker」は、他所の道具です。提供元の案内や置き場所を、わたくしの手元で確かめきれていません。ですから、URL も、作った方の名前も、この記事には書きません。分からないものを、それらしく書くのが、いちばん良くないと思っています。使う前に、公式の案内を、ご自分で確かめてください。

コメント

タイトルとURLをコピーしました