educationai
学習アプリ向けの Swift パッケージ: FSRS-6 による間隔反復、学習キュー、入力した解答の照合、クイズ。
ライセンス: MIT
要約
- フラッシュカードアプリ向けの学習ロジックで、FSRS-6 による間隔反復、学習キュー、入力解答の採点、クイズを備える。
- テストは py-fsrs 6.3.2 の 2,400 件のレビューを 8 通りの設定で再生し、レビューごとに結果を比較する。
- SM2Scheduler は SM-2 のデータを引き続き使えるようにし、各カードの期日を保ったまま SM-2 カードを FSRS に変換する。
- Foundation のみでデバイス上で動作し、Swift 6 の strict concurrency に対応し、ニューラルネットワークは含まない。
- タグ v2.0.0 で、macOS 27.0.1 上の Swift 6.4 により 11 スイート 124 件のテストが成功した。
EducationAI は、フラッシュカードや学習アプリの学習ロジックを提供します。FSRSScheduler は、Anki の FSRS スケジューラの基盤である記憶モデル FSRS-6 を使って各カードがいつ戻ってくるかを決め、そのテストでは 2,400 件の復習をリファレンス実装の py-fsrs 6.3.2 と比較します。SM2Scheduler は SM-2 のデータをそのまま動かし、FSRS へ変換します。スケジューラの周りには、学習キュー、タイプミスを許容する入力解答の採点、クイズ、難易度調整、作業量の予測、復習の統計、学習ストリークがあります。デバイス上で動作し、使うのは Foundation のみで、Swift 6 の strict concurrency 向けに書かれています。ニューラルネットワークは含まれていません。FSRS は統計的な記憶モデルです。
機能
- FSRS-6 をリファレンスと照合済み: テストでは py-fsrs 6.3.2 が計算した 2,400 件の復習を 8 つの設定で再生し、復習のたびに安定性、難易度、期限日、想起確率を比較します
- 学習ステップと再学習ステップ、目標保持率、最大間隔、間隔のファズ、カスタム重み (FSRS-6 の 21 個または FSRS-5 の 19 個)、解答ボタン用に 4 つの評価すべてのプレビュー
- 公開されたとおりの SM-2 と、各カードの期限日を保ったまま SM-2 のカードを FSRS へ変換する機能
- デバイスの言語に依存せず、大文字小文字、アクセント、文字幅、句読点を無視し、解答の長さに応じてタイプミスを許容し、悪意ある入力に対しても処理量に上限を設ける入力解答の採点
- カードから作成する選択式と入力式のクイズ。各結果がスケジューラ向けの評価を提案し、保存したクイズは読み込み時に再採点されます
- 1 日あたりの上限、日ごとの予測、保持率の統計、学習者のカレンダー日で数えるストリーク、正答率を目標の範囲に保つ難易度調整を備えた学習キュー
- Sendable かつ Codable の値型: すべての関数は処理に使う日付を引数に取り、乱数はシードを指定できるジェネレータから得られ、保存された値はクラッシュする代わりに使用前に検証されます
- 依存関係なし、Foundation のみ。4 つのガイドを含む DocC リファレンスと、iOS と macOS 向けのサンプルアプリ StudyDeck
クイックスタート
1struct FlashcardsView: View {2 @State private var cards = [3 Flashcard(front: "Capital of Japan", back: "Tokyo"),4 Flashcard(front: "Capital of Kenya", back: "Nairobi"),5 Flashcard(front: "Capital of Peru", back: "Lima")6 ]7 @State private var showsAnswer = false8 private let scheduler = FSRSScheduler.default9 10 var body: some View {11 if let card = StudyQueue.cards(from: cards).first,12 let index = cards.firstIndex(where: { $0.id == card.id }) {13 VStack(spacing: 24) {14 Text(card.front).font(.title)15 if showsAnswer {16 Text(card.back).font(.title2).bold()17 HStack {18 ForEach(Rating.allCases, id: \.self) { rating in19 Button(String(describing: rating).capitalized) {20 if let outcome = try? scheduler.review(card.review, rating: rating) {21 cards[index].review = outcome.state22 }23 showsAnswer = false24 }25 .buttonStyle(.bordered)26 }27 }28 } else {29 Button("Show Answer") { showsAnswer = true }30 .buttonStyle(.borderedProminent)31 }32 }33 .padding()34 } else {35 Text("All done for now")36 }37 }38}インストール
Xcode (File › Add Package Dependencies…)
1https://github.com/muhittincamdali/educationai.gitSwift Package Manager (Package.swift)
1dependencies: [2 .package(url: "https://github.com/muhittincamdali/educationai.git", from: "2.0.0")3],4targets: [5 .target(name: "YourApp", dependencies: [6 .product(name: "EducationAI", package: "educationai")7 ])8]スクリーンショット




タイムライン
リポジトリを開設し、8 月 7 日に 1.0.0 をタグ付け: Alamofire、RxSwift、SnapKit、SDWebImage に依存する、学習モデルを持つ EducationAI クラス
依存関係なしで書き直し、SM-2 スケジューラ、クイズ、進捗、レコメンド、ゲーミフィケーションの各エンジンとして再構成
ローカルフォルダ (../SwiftAI) への依存と、プレースホルダの「neural tutor」型および「enterprise」型が追加され、パッケージは他の人の環境では解決できなくなった
2.0.0: py-fsrs 6.3.2 と一致する FSRS-6 スケジューラを中心に再構築し、6 月のコードとすべての 1.x の型を削除