13. Web アプリケーション開発¶
本章では、これまでに作った機械学習モデルを Web アプリケーション として動かす方法を学びます。感情分析アプリに加えて、ChatGPT 風のチャットアプリも作ります。なお、機械学習 API の一般的な活用方法は付録Cに、Flask による Web アプリ・REST API の実装は付録Dにまとめています。
13.1 Web アプリケーションとは¶
13.1.1 Web アプリケーションの概要¶
Web アプリケーションとは、Web ブラウザを通じて利用できるアプリケーションのことです。ユーザは特別なソフトウェアをインストールすることなく、ブラウザさえあればどこからでもアプリケーションを利用できます。
Web アプリケーションの利点
- アクセスの容易さ: ブラウザがあればどこからでもアクセス可能
- クロスプラットフォーム: Windows、Mac、スマートフォンなど、環境を選ばない
- 共有が簡単: URL を共有するだけで他の人も利用可能
- メンテナンスが楽: サーバ側を更新すれば全ユーザに反映
13.1.2 機械学習モデルの Web アプリ化¶
機械学習モデルを Web アプリとして公開することで、以下のようなことが可能になります。
- 実用的なサービス: モデルを実際のサービスとして提供
- デモンストレーション: 研究成果やポートフォリオとして公開
- API として提供: 他のシステムから利用可能
13.1.3 Python の Web フレームワーク¶
Python には、Web アプリケーションを構築するためのフレームワークがいくつか存在します。
| フレームワーク | 特徴 | 適用場面 |
|---|---|---|
| Streamlit | 簡単、素早くプロトタイプを作成 | デモ、社内ツール |
| Flask | 軽量、柔軟性が高い | 小〜中規模の Web アプリ、API |
| FastAPI | 高速、API 構築に特化 | REST API、本格的なサービス |
| Django | 多機能、大規模開発向け | 大規模 Web アプリケーション |
本章では、Streamlit を使った実装例を紹介します。Flask を使った Web アプリと REST API の実装は付録Dで扱います。
13.2 Streamlit による簡単な Web アプリ¶
13.2.1 Streamlit とは¶
Streamlit は、データサイエンス向けの Web アプリを簡単に作成できる Python ライブラリです。わずか数行のコードで、インタラクティブな Web アプリを構築できます。
Streamlit の特徴
- 簡単: Python スクリプトを書くだけで Web アプリが作れる
- 高速: プロトタイプを素早く作成できる
- インタラクティブ: スライダ、ボタンなどの UI 部品が豊富
- ホットリロード: コードを編集すると自動的に反映される
13.2.2 Streamlit のインストール¶
CHIKUWA Editor には Streamlit が標準でインストールされているため、そのまま使えます。自分で構築したローカル環境では、以下のコマンドでインストールします。
クラウドのノートブック環境について
本章は CHIKUWA Editor またはローカル環境での開発を想定しています。Google Colab などのクラウドのノートブック環境では、Web アプリの開発・実行に工夫が必要となります。
13.2.3 Streamlit の基本的な使い方¶
まず、簡単な Hello World アプリを作成してみましょう。
import streamlit as st
# タイトル
st.title("Hello, Streamlit!")
# テキスト
st.write("これは Streamlit で作った Web アプリです。")
# ボタン
if st.button("クリックしてください"):
st.write("ボタンがクリックされました!")
# スライダー
value = st.slider("値を選択してください", 0, 100, 50)
st.write(f"選択された値: {value}")
CHIKUWA Editor では、通常のプログラムと同じように実行するだけでローカルサーバが立ち上がり、Web アプリが表示されます。その他の環境では、ターミナルで以下のコマンドを実行すると、ブラウザで Web アプリが開きます(通常は http://localhost:8501)。
13.2.4 主要な Streamlit コンポーネント¶
Streamlit では、さまざまな UI コンポーネントを簡単に追加できます。
テキスト表示
st.title("タイトル")
st.header("ヘッダー")
st.subheader("サブヘッダー")
st.write("テキスト")
st.markdown("**太字** や *斜体* も使えます")
入力ウィジェット
# テキスト入力
text = st.text_input("テキストを入力してください")
# テキストエリア
long_text = st.text_area("長いテキストを入力してください")
# 数値入力
number = st.number_input("数値を入力してください", min_value=0, max_value=100)
# スライダー
value = st.slider("値を選択してください", 0, 100, 50)
# セレクトボックス
option = st.selectbox("選択してください", ["オプション1", "オプション2", "オプション3"])
# ボタン
if st.button("送信"):
st.write("送信されました!")
データ表示
import pandas as pd
# DataFrame の表示
df = pd.DataFrame({
"列1": [1, 2, 3],
"列2": [4, 5, 6]
})
st.dataframe(df)
# テーブルの表示
st.table(df)
グラフ表示
import matplotlib.pyplot as plt
# Matplotlib のグラフ
fig, ax = plt.subplots()
ax.plot([1, 2, 3, 4], [1, 4, 2, 3])
st.pyplot(fig)
# 簡易グラフ
st.line_chart(df)
st.bar_chart(df)
公式ドキュメント: Streamlit API Reference
13.3 Streamlit で感情分析アプリを作る¶
13.3.1 アプリの概要¶
第 12 回で学んだ「ローカル LLM サーバ(LM Studio)+ ロジスティック回帰」の組み合わせで、テキストの感情分析を行う Web アプリを作成します。
機能
- ユーザがテキストを入力
- 「Positive(ポジティブ)」「Negative(ネガティブ)」を分類
- 予測結果と確率を表示
全体構成
graph LR
A[ブラウザ] -->|テキスト入力| B[Streamlit アプリ]
B -->|HTTP POST<br/>/v1/embeddings| C[LM Studio サーバ<br/>bge-m3]
C -->|1024 次元ベクトル| B
B --> D[ロジスティック回帰<br/>事前学習済み]
D --> B
B -->|結果| A
style A fill:#e6ccff
style B fill:#ccffcc
style C fill:#ffffcc
style D fill:#ffcccc
13.3.2 分類器の準備と保存¶
まず、LM Studio サーバから得た Embedding を使って分類器(ロジスティック回帰)だけを学習・保存しておきます。Embedding を取るモデル自体(bge-m3)はサーバ側に常駐しているので保存不要です。
import requests
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
import pickle
LLM_URL = "https://xxxxxxxx.trycloudflare.com" # 授業でアナウンスされる URL に置き換える
EMBED_MODEL = "text-embedding-bge-m3"
def encode(texts):
if isinstance(texts, str):
texts = [texts]
r = requests.post(
f"{LLM_URL}/v1/embeddings",
json={"model": EMBED_MODEL, "input": texts},
)
return np.array([d["embedding"] for d in r.json()["data"]])
# データの読み込み
df = pd.read_csv('movie_reviews.csv')
# LM Studio でベクトル化(少し時間がかかります)
print("ベクトル化中...")
embeddings = encode(df['text'].tolist())
# ラベルを数値に変換
df['label_num'] = (df['label'] == 'positive').astype(int)
# 訓練データとテストデータに分割
X_train, X_test, y_train, y_test = train_test_split(
embeddings, df['label_num'],
test_size=0.2,
random_state=42
)
# ロジスティック回帰で学習
clf = LogisticRegression(random_state=42, max_iter=1000)
clf.fit(X_train, y_train)
# 分類器のみ保存(Embedding モデルはサーバ側にあるので保存不要)
with open('sentiment_clf.pkl', 'wb') as f:
pickle.dump(clf, f)
print("分類器を保存しました: sentiment_clf.pkl")
13.3.3 Streamlit アプリの実装¶
保存した分類器を読み込み、入力テキストを LM Studio でベクトル化 → 分類する Streamlit アプリを作ります。
import streamlit as st
import requests
import numpy as np
import pickle
LLM_URL = "https://xxxxxxxx.trycloudflare.com" # 授業でアナウンスされる URL に置き換える
EMBED_MODEL = "text-embedding-bge-m3"
# ページの設定
st.set_page_config(page_title="感情分析アプリ", page_icon="😊")
# タイトル
st.title("😊 感情分析アプリ")
st.write("テキストを入力すると、Positive(ポジティブ)か Negative(ネガティブ)かを判定します。")
# 分類器の読み込み(キャッシュを使って 1 回だけ読み込む)
@st.cache_resource
def load_classifier():
with open('sentiment_clf.pkl', 'rb') as f:
return pickle.load(f)
classifier = load_classifier()
# 1 文を LM Studio でベクトル化
def encode_one(text):
r = requests.post(
f"{LLM_URL}/v1/embeddings",
json={"model": EMBED_MODEL, "input": text},
)
return np.array([r.json()["data"][0]["embedding"]])
# テキスト入力
text_input = st.text_area(
"テキストを入力してください",
height=150,
placeholder="例:この映画は本当に面白かった!"
)
# 予測ボタン
if st.button("感情を分析"):
if text_input.strip() == "":
st.warning("テキストを入力してください。")
else:
with st.spinner("LM Studio サーバで解析中..."):
embedding = encode_one(text_input)
prediction = classifier.predict(embedding)[0]
probability = classifier.predict_proba(embedding)[0]
# 結果の表示
st.subheader("分析結果")
if prediction == 1:
st.success("😊 Positive(ポジティブ)")
st.progress(probability[1])
st.write(f"確率: {probability[1]:.2%}")
else:
st.error("😞 Negative(ネガティブ)")
st.progress(probability[0])
st.write(f"確率: {probability[0]:.2%}")
with st.expander("詳細情報を表示"):
st.write(f"Positive の確率: {probability[1]:.2%}")
st.write(f"Negative の確率: {probability[0]:.2%}")
# サイドバー
st.sidebar.header("ℹ️ このアプリについて")
st.sidebar.write("""
このアプリは、機械学習を使って日本語テキストの感情を分析します。
**使用技術**
- ローカル LLM サーバ(LM Studio + bge-m3)
- Logistic Regression
- Streamlit
""")
13.3.4 アプリの実行¶
アプリを実行します。CHIKUWA Editor 以外の環境では、ターミナルで以下のコマンドを実行します。
13.3.5 キャッシュの活用¶
@st.cache_resource デコレータを使うことで、モデルの読み込みを 1 回だけ実行し、結果をキャッシュできます。これにより、アプリの起動が高速になります。
キャッシュの種類:
| デコレータ | 用途 |
|---|---|
@st.cache_resource |
モデル、DB 接続などのグローバルなリソース |
@st.cache_data |
データの読み込みや変換処理 |
13.4 Streamlit でチャットアプリを作る¶
13.4.1 チャットモデルの呼び出し¶
第 12 回では、LM Studio サーバの Embedding API(/v1/embeddings)を使いました。同じサーバには日本語対応のチャットモデルも載っており、/v1/chat/completions エンドポイントを叩くと、ChatGPT のようなチャット形式の応答が得られます。
| 項目 | 内容 |
|---|---|
| サーバ URL | 授業でアナウンスされる URL(第 12 回と同じサーバ) |
| チャットモデル | qwen/qwen3.5-9b(日本語に強い 9B モデル) |
| API エンドポイント | POST /v1/chat/completions (OpenAI 互換) |
まずは requests で 1 回だけ呼び出してみます。
import requests
LLM_URL = "https://xxxxxxxx.trycloudflare.com" # 授業でアナウンスされる URL に置き換える
CHAT_MODEL = "qwen/qwen3.5-9b"
response = requests.post(
f"{LLM_URL}/v1/chat/completions",
json={
"model": CHAT_MODEL,
"messages": [
{"role": "system", "content": "あなたは親切なアシスタントです。"},
{"role": "user", "content": "機械学習とは何ですか?簡潔に説明してください。"},
],
"stream": False,
},
)
result = response.json()
print(result["choices"][0]["message"]["content"])
ポイントは messages です。role には次の 3 種類があり、「これまでのやり取り」をリストとしてまるごと渡すのが LLM API の共通パターンです。
| role | 意味 |
|---|---|
system |
モデルへの指示(人格・口調・ルールなど) |
user |
ユーザの発言 |
assistant |
モデルの過去の応答 |
モデル自身は会話を覚えていないため、会話を続けるには、過去のやり取り(user と assistant)を messages に追記して毎回すべて送り直します。外部 API(OpenAI など)の使い方や JSON 形式での構造化出力など、チャット API のより詳しい話は付録Cを参照してください。
13.4.2 チャット UI と会話履歴¶
Streamlit にはチャット専用の UI 部品が用意されています。
- st.chat_input: 画面下部に固定されるメッセージ入力欄
- st.chat_message: 発言者アイコン付きの吹き出し表示
もう 1 つの鍵が 会話履歴の保持 です。Streamlit のスクリプトは、ボタンを押すなどの操作のたびに先頭から再実行されるため、普通の変数は毎回初期化されてしまいます。操作をまたいで残したいデータは st.session_state に保存します。
まずは LLM を使わない「オウム返し」で、この 3 つの部品の動きを確認してみましょう。
import streamlit as st
st.title("チャット UI の練習")
# 会話履歴の初期化(初回だけ実行される)
if "messages" not in st.session_state:
st.session_state.messages = []
# 入力欄(Enter で送信)
prompt = st.chat_input("メッセージを入力してください")
if prompt:
st.session_state.messages.append({"role": "user", "content": prompt})
# 履歴をすべて吹き出しで表示
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.write(message["content"])
メッセージを送るたびにスクリプト全体が再実行されますが、履歴は st.session_state.messages に残っているので、過去の発言が積み上がっていきます。
13.4.3 チャットアプリの実装¶
チャット UI と LM Studio のチャット API を組み合わせると、ChatGPT 風のアプリが完成します。
全体構成
graph LR
A[ブラウザ] -->|メッセージ入力| B[Streamlit アプリ]
B -->|POST /v1/chat/completions<br/>会話履歴全体| C[LM Studio サーバ<br/>qwen/qwen3.5-9b]
C -->|応答テキスト| B
B -->|履歴に追加して表示| A
style A fill:#e6ccff
style B fill:#ccffcc
style C fill:#ffffcc
import streamlit as st
import requests
LLM_URL = "https://xxxxxxxx.trycloudflare.com" # 授業でアナウンスされる URL に置き換える
CHAT_MODEL = "qwen/qwen3.5-9b"
SYSTEM_PROMPT = "あなたは親切なアシスタントです。簡潔な日本語で回答してください。"
# ページの設定
st.set_page_config(page_title="チャットアプリ", page_icon="💬")
st.title("💬 チャットアプリ")
# 会話履歴の初期化(初回だけ実行される)
if "messages" not in st.session_state:
st.session_state.messages = []
# これまでの会話履歴を表示
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.write(message["content"])
# ユーザの入力を受け取る
prompt = st.chat_input("メッセージを入力してください")
if prompt:
# ユーザの発言を履歴に追加して表示
st.session_state.messages.append({"role": "user", "content": prompt})
with st.chat_message("user"):
st.write(prompt)
# システムプロンプト + 会話履歴全体を送って応答を取得
with st.chat_message("assistant"):
with st.spinner("考え中..."):
response = requests.post(
f"{LLM_URL}/v1/chat/completions",
json={
"model": CHAT_MODEL,
"messages": [{"role": "system", "content": SYSTEM_PROMPT}]
+ st.session_state.messages,
"stream": False,
},
)
answer = response.json()["choices"][0]["message"]["content"]
st.write(answer)
# モデルの応答も履歴に追加
st.session_state.messages.append({"role": "assistant", "content": answer})
13.4.4 アプリの実行¶
アプリを実行します。CHIKUWA Editor 以外の環境では、ターミナルで以下のコマンドを実行します。
「昨日の話の続きだけど」のように前の発言を踏まえた質問をしても文脈が通じるのは、毎回 st.session_state.messages の履歴全体を送っているからです。裏を返せば、会話が長くなるほど送信するデータ(トークン)も増えていきます。実用的なチャットアプリでは、古い履歴を要約したり切り捨てたりする工夫が入っています。
ストリーミング表示(発展)
ChatGPT のように応答を 1 文字ずつ表示するには、リクエストで "stream": True を指定し、少しずつ届く応答を st.write_stream で描画します。レスポンスの受け取り方が変わるため少し難しくなりますが、興味のある人は挑戦してみてください。
13.5 デプロイ(公開)の基礎¶
13.5.1 デプロイとは¶
デプロイ(Deploy)とは、作成したアプリケーションをインターネット上のサーバに配置し、誰でもアクセスできるようにすることです。
13.5.2 主要なデプロイ先¶
| サービス | 特徴 | 無料プラン |
|---|---|---|
| Streamlit Community Cloud | Streamlit 専用、簡単 | あり(制限付き) |
| Render | Flask/FastAPI など幅広く対応 | あり(制限付き) |
| Heroku | 老舗、多機能 | 有料のみ |
| Google Cloud Run | コンテナベース、スケーラブル | 無料枠あり |
| AWS (EC2, Lambda) | 柔軟性が高い、学習コストも高い | 無料枠あり(1 年間) |
| 自宅サーバ | 自由度が最も高い | サーバ費用が必要 |
13.5.3 Streamlit Community Cloud へのデプロイ¶
Streamlit アプリを最も簡単に公開する方法は、Streamlit Community Cloud を使うことです。
手順
-
GitHub にコードをアップロード
- リポジトリを作成
app.py、requirements.txt(必要なライブラリ)、モデルファイルをアップロード
-
requirements.txt の作成
-
Streamlit Community Cloud に登録
- Streamlit Community Cloud にアクセス
- GitHub アカウントでログイン
-
アプリをデプロイ
- "New app" をクリック
- GitHub リポジトリを選択
- デプロイするファイル(
app.py)を指定 - "Deploy!" をクリック
数分でアプリが公開され、URL が発行されます。
13.5.4 注意点¶
モデルファイルのサイズ
- 大きなモデルファイルは GitHub にアップロードできません(100MB 制限)
- 対処法: モデルの軽量化 / Git LFS の使用 / クラウドストレージから読み込む
環境変数
- API キーなどの秘密情報は、環境変数として設定する
- Streamlit では
st.secretsを使って安全に管理できる
バックエンドのサーバへの到達性
- 本章のアプリは LM Studio サーバに依存しているため、デプロイ先からサーバに到達できる必要があります
- trycloudflare の URL は毎回変わるため、公開運用では固定 URL のサーバや外部 API への差し替えが必要です
13.6 演習問題¶
演習 13-1: BMI 計算アプリ¶
演習 13-1(初級)
Streamlit の基本的な UI 部品だけを使って、BMI(体格指数)を計算する Web アプリを作成してください。
タスク
- st.number_input で身長(cm)と体重(kg)を入力できるようにする
- 「計算する」ボタンが押されたら BMI = 体重[kg] ÷ (身長[m])² を計算し、st.metric で表示する
- BMI が 18.5 未満なら「やせ型」、25 以上なら「肥満」、その間なら「標準」と表示する
演習 13-2: チャットアプリのキャラクタ切り替え¶
演習 13-2(中級)
13.4 節で作った chat_app.py を改造して、サイドバーでアシスタントのキャラクタ(システムプロンプト)を切り替えられるようにしてください。
タスク
- キャラクタ名 → システムプロンプトの辞書を定義する(例:標準アシスタント/関西弁/猫)
- st.sidebar の
st.sidebar.selectboxでキャラクタを選べるようにする - キャラクタが変更されたら会話履歴(
st.session_state.messages)をリセットする - 選択中のキャラクタのシステムプロンプトを使って応答させ、口調が変わることを確認する
import streamlit as st
import requests
LLM_URL = "https://xxxxxxxx.trycloudflare.com" # 授業でアナウンスされる URL に置き換える
CHAT_MODEL = "qwen/qwen3.5-9b"
# 1. キャラクタごとのシステムプロンプトを辞書で定義する
CHARACTERS = {
"標準アシスタント": "あなたは親切なアシスタントです。簡潔な日本語で回答してください。",
# ここにキャラクタを追加する
}
st.set_page_config(page_title="チャットアプリ", page_icon="💬")
st.title("💬 チャットアプリ")
# 2. サイドバーの selectbox でキャラクタを選択できるようにする
# 3. キャラクタが変わったら会話履歴をリセットする
# 4. 以降は chat_app.py と同じ(システムプロンプトだけ選択中のものを使う)
演習 13-3: 感情分析アプリ + 履歴機能¶
演習 13-3(中級)
13.3 節で作った感情分析アプリに、判定結果の履歴機能を追加してください。
タスク
st.session_stateに判定履歴のリストを初期化する- 「感情を分析」ボタンで判定するたびに、テキスト・判定結果・Positive 確率を履歴に追加する
- 履歴を st.dataframe で一覧表示する
- 「履歴をクリア」ボタンで履歴を空にできるようにする
import streamlit as st
import requests
import numpy as np
import pandas as pd
import pickle
LLM_URL = "https://xxxxxxxx.trycloudflare.com" # 授業でアナウンスされる URL に置き換える
EMBED_MODEL = "text-embedding-bge-m3"
st.title("😊 感情分析アプリ(履歴付き)")
# 分類器の読み込み(13.3 節で保存した sentiment_clf.pkl を使う)
@st.cache_resource
def load_classifier():
with open('sentiment_clf.pkl', 'rb') as f:
return pickle.load(f)
classifier = load_classifier()
# 1 文を LM Studio でベクトル化
def encode_one(text):
r = requests.post(
f"{LLM_URL}/v1/embeddings",
json={"model": EMBED_MODEL, "input": text},
)
return np.array([r.json()["data"][0]["embedding"]])
# 1. st.session_state に判定履歴のリストを初期化する
text_input = st.text_area("テキストを入力してください", height=100)
if st.button("感情を分析"):
# 2. ベクトル化 → 予測して結果を表示し、履歴に追加する(13.3 と同じ要領)
pass
# 3. 履歴があれば st.dataframe で一覧表示する
# 4. 「履歴をクリア」ボタンを付ける
13.7 まとめ¶
本章では、機械学習モデルを Web アプリケーションとして展開する方法について学びました。
第 13 回のまとめ
Web アプリケーション
- ブラウザさえあれば利用でき、URL の共有だけで他の人にも使ってもらえる
- 機械学習モデルのデモ・サービス化の手段として有効
- Python では Streamlit / Flask / FastAPI / Django などのフレームワークを使う
- Flask による Web アプリ・REST API の実装は付録Dで扱う
Streamlit
- Python スクリプトを書くだけで Web アプリが作れる
st.text_input(),st.button(),st.write()などの UI 部品@st.cache_resourceで分類器などのリソースをキャッシュst.session_stateで再実行をまたいでデータを保持(会話履歴・判定履歴)- LM Studio サーバをバックエンドにすれば、重いモデルをアプリ側に持たなくて良い
チャットアプリ
- 第 12 回と同じサーバのチャットモデル(
qwen/qwen3.5-9b)を/v1/chat/completionsで呼び出す messagesに system / user / assistant の役割でやり取りを入れるのが LLM API の共通パターン- モデルは会話を覚えていないので、履歴全体を毎回送り直す
デプロイ
- アプリをインターネット上に公開
- Streamlit Community Cloud:Streamlit アプリを簡単に公開
- Render, Google Cloud Run など様々な選択肢
- ローカル LLM サーバ前提のアプリは、サーバへの到達性を確保する設計が必要
実装のポイント
- 分類器を pickle で保存・読み込み(Embedding モデルはサーバ側に常駐)
- キャッシュを活用して高速化
- エラーハンドリングを適切に行う
- 環境変数で秘密情報・サーバ URL を管理
13.8 講義全体の総括¶
本講義「機械学習」では、全 13 回を通じて、機械学習の基礎から実践的な応用までを学んできました。
学んできたこと¶
| 回 | テーマ | 内容 |
|---|---|---|
| 1 | 機械学習概要・Python 復習 | 講義の概要、Python 基本文法の復習 |
| 2 | データ可視化 | Matplotlib によるデータの可視化 |
| 3 | 機械学習の基礎 | 教師あり学習、訓練とテスト、評価指標 |
| 4 | 回帰 | 単回帰分析、重回帰分析 |
| 5 | 分類 | ロジスティック回帰、k-NN |
| 6 | 木構造・アンサンブル・SVM | 決定木、ランダムフォレスト、SVM |
| 7 | 画像処理の基礎 | 画像データの基礎、OpenCV による読み込み・変換・しきい値処理 |
| 8 | 画像の特徴抽出 | エッジ検出、コーナー検出、HOG、ヒストグラム特徴 |
| 9 | 画像データを用いた機械学習 | MNIST・CIFAR-10 を題材にした画像分類、CNN の紹介 |
| 10 | 自然言語処理の基礎 | テキストクリーニング、MeCab による形態素解析 |
| 11 | テキストデータを用いた機械学習 | Bag-of-Words、TF-IDF、ナイーブベイズによる文書分類 |
| 12 | テキストの意味を捉える Embedding | Word2Vec / Transformer / BERT、LM Studio サーバ経由の Embedding 利用 |
| 13 | Web アプリケーション開発 | Streamlit によるアプリ化、チャットアプリ、デプロイ |
機械学習プロジェクトの流れ¶
本講義で学んだ内容を組み合わせることで、以下のような機械学習プロジェクトの一連の流れを実践できます。
graph TB
A["1. 問題の定義"] --> B["2. データの収集・整理"]
B --> C["3. データの可視化・探索(第 2 回)"]
C --> D["4. 特徴量の抽出・前処理<br/>(画像:第 7・8 回/テキスト:第 10〜12 回)"]
D --> E["5. モデルの選択・学習<br/>(第 3〜6・9・11・12 回)"]
E --> F["6. モデルの評価・改善<br/>(精度・混同行列など:第 3 回〜)"]
F -->|改善を繰り返す| D
F --> G["7. デプロイ・公開(第 13 回)"]
style A fill:#e6ccff
style B fill:#e6f3ff
style C fill:#e6f3ff
style D fill:#ffffcc
style E fill:#ccffcc
style F fill:#ffcccc
style G fill:#ccffcc,stroke:#66aa66,stroke-width:2px
今後の学習に向けて¶
本講義では機械学習の基礎を学びました。興味のある方は、以下のようなトピックについても学んでみてください。
- ディープラーニング: ニューラルネットワーク、CNN、RNN、Transformer
- 大規模言語モデル(LLM): GPT などの商用 API と、Qwen・Llama などのオープンモデルの活用
- 強化学習: ゲーム AI、ロボット制御
- MLOps: 機械学習モデルの運用・管理