日本語テキスト予測のための機械学習アプリケーション
HC2025 Word Forecasterは、日本語テキストを学習し、入力されたコンテキストに基づいて次の単語を予測するWebアプリケーションです。N-gram統計モデルを使用した実用的な言語モデルで、複数のデコーディング戦略をサポートしています。
- 日本語テキストファイルのアップロード(.txtファイル)
- アップロードしたテキストの一覧表示・管理
- テキストの削除機能
- 学習モデルの作成とカスタマイズ
- モデル次元(d_model)
- 注意機構のヘッド数
- エンコーダー・デコーダー層数
- フィードフォワード次元
- 最大シーケンス長
- ドロップアウト率
- バックグラウンドジョブによる非同期学習
- 学習状態のリアルタイム確認
- 学習エラー時の再学習機能
- 入力テキストからの次単語予測
- 複数のデコーディング戦略のサポート:
- Greedy(貪欲法): 最も確率が高い単語を選択
- Temperature: 温度パラメータによるランダム性の制御
- Top-K: 上位K個の候補からサンプリング
- Top-P/Nucleus: 累積確率による動的候補選択
- Beam Search: 複数経路の並行探索
- 予測結果の詳細表示(確率分布、候補トークンなど)
- 予測履歴の管理
| トップページ | 予測結果一覧 |
|---|---|
![]() |
![]() |
現在実装されている言語モデル:
- 統計ベースの言語モデル
- コンテキスト(前のN-1トークン)から次のトークンを予測
- バックオフ戦略により、短いコンテキストにフォールバック
- 高速で軽量
- エンコーダー・デコーダーアーキテクチャ
- マルチヘッドアテンション機構
- ポジショナルエンコーディング
- レイヤー正規化とフィードフォワード層
- MeCabによる日本語形態素解析
- 語彙辞書(Vocabulary)の管理
- トークン↔ID の双方向マッピング
- 特殊トークンのサポート(PAD, UNK, BOS, EOS)
| 戦略 | 特徴 | 適用例 |
|---|---|---|
| Greedy | 決定的、高速 | 事実ベースの質問応答 |
| Temperature | 多様性を調整可能 | 創作文、対話 |
| Top-K | 品質と多様性のバランス | 自然な会話生成 |
| Top-P | 動的候補選択 | 汎用的(推奨) |
| Beam Search | 最適解の探索 | 翻訳、要約 |
- Ruby: 3.4.2
- Rails: 8.0.3
- データベース: SQLite3
- ジョブキュー: Solid Queue(Rails 8デフォルト)
- Tailwind CSS: スタイリング
- Turbo: SPAライクなページ遷移
- MeCab: 日本語形態素解析
- Natto: MeCabのRubyバインディング
- Numo::NArray: 数値計算(Transformerで使用)
- Solid Cable: WebSocket通信
- Solid Cache: キャッシング
- Ruby 3.4.2以上
- MeCab(日本語形態素解析器)
macOS:
brew install mecab
brew install mecab-ipadicUbuntu/Debian:
sudo apt-get install mecab libmecab-dev mecab-ipadic-utf8- リポジトリのクローン
git clone <repository-url>
cd hc2025_word_forecaster- 依存関係のインストール
bundle install- データベースのセットアップ
rails db:create
rails db:migrate- MeCabライブラリパスの設定(必要に応じて)
# macOS (Homebrew)の場合
export MECAB_PATH=/opt/homebrew/lib/libmecab.dylib
# Linuxの場合
export MECAB_PATH=/usr/lib/x86_64-linux-gnu/libmecab.so.2- サーバーの起動
rails server- ブラウザで http://localhost:3000 にアクセス
- トップページの「新規テキスト追加」をクリック
- テキストファイル(.txt)を選択してアップロード
- 複数ファイルをアップロードして学習データを蓄積
- 「学習モデル」メニューから「新規作成」
- モデル名とパラメータを設定
- 「作成」ボタンをクリック
- 作成したモデルの詳細ページへ移動
- 学習パラメータ(エポック数、バッチサイズ、学習率)を設定
- 「学習を開始」をクリック
- バックグラウンドで学習が実行される
- ページをリロードして進捗を確認
- 学習済みモデルの詳細ページから「予測実行」をクリック
- 入力テキストを入力
- デコーダータイプとパラメータを選択
- 「予測実行」をクリック
- 生成されたテキストと候補トークンを確認
app/
├── controllers/ # コントローラー
├── models/ # モデル
├── services/ # サービスクラス
├── jobs/ # バックグラウンドジョブ
└── views/ # ビュー
lib/
├── ml/ # 機械学習モジュール
│ ├── ngram_model.rb # N-gramモデル
│ ├── encoder.rb # Transformerエンコーダー
│ ├── decoder.rb # Transformerデコーダー
│ ├── attention.rb # アテンション機構
│ └── ...
└── tokenizer.rb # トークナイザー
storage/
├── training_models/ # 学習済みモデルファイル
└── texts/ # アップロードされたテキストファイル
N-gramモデルの予測プロセスをデバッグするには、lib/ml/ngram_model.rbのログ出力を確認してください。開発環境ではデフォルトでdebugログが有効です。
# 全テストの実行(未実装)
rails test
# RSpecを使用する場合
bundle exec rspec- RuboCopを使用したコーディング規約
- インデント: 2スペース
- 文字列: ダブルクォート推奨
# コードスタイルチェック
rubocop
# 自動修正
rubocop -aエラー: cannot load such file -- natto
解決方法:
bundle installエラー: MeCab library not found
解決方法:
# MeCabのインストールを確認
which mecab
# ライブラリパスを設定
export MECAB_PATH=/path/to/libmecab.so- 学習データサイズが大きい場合、時間がかかることがあります
- サーバーログを確認してエラーがないか確認してください
- モデルの詳細ページをリロードして状態を確認
- 学習データに入力テキストと類似のコンテキストが含まれているか確認
- より一般的な入力テキスト(例: "吾輩は")で試してみる
- デバッグログで
No predictions foundのメッセージを確認
このプロジェクトは教育目的で作成されています。
プルリクエストを歓迎します。大きな変更の場合は、まずissueを開いて変更内容を議論してください。
- Transformerモデルの実装と切り替え
- モデルの評価指標(Perplexity等)の表示
- テストの追加
- Docker化
- API機能の追加
- ユーザー認証機能

