第0章 基礎的な数学
0.1 数と式の基礎
-
実数(Real numbers)
入力データ・信号値・モデルパラメータは基本的に実数。 -
代数式(Algebraic expression)
$$
y = w_1x_1 + w_2x_2 + b
$$→ 線形回帰やパーセプトロンの基本式。
-
指数・対数
-
デシベル表現
$$
L = 20 \log_{10}\left(\frac{A}{A_{\text{ref}}}\right)
$$ -
クロスエントロピー損失
$$
L = -\sum y_i \log(\hat{y}_i)
$$
-
0.2 三角関数と複素数
-
サイン波
$$
x(t) = A \sin(2\pi f t + \phi)
$$→ 音声波形や周期信号の基本。
-
オイラーの公式
$$
e^{i\theta} = \cos\theta + i\sin\theta
$$→ フーリエ解析の出発点。
-
複素数平面
スペクトル解析で「振幅(大きさ)」と「位相(角度)」を表現。
0.3 微分と積分
-
微分
$$
f'(x) = \lim_{h\to 0}\frac{f(x+h)-f(x)}{h}
$$→ 機械学習の勾配降下法で利用。
-
積分
$$
A = \int_{t_1}^{t_2} x(t), dt
$$→ 信号の累積量や平均エネルギーを表す。
-
畳み込み積分
$$
(f*g)(t) = \int_{-\infty}^{\infty} f(\tau)g(t-\tau),d\tau
$$→ 信号処理フィルタ、CNNの基盤。
0.4 線形代数学
-
ベクトル
$$
\mathbf{x} = (x_1, x_2, \dots, x_n)^T
$$→ 入力データや単語埋め込み。
-
行列
$$
\mathbf{y} = W\mathbf{x} + \mathbf{b}
$$→ ニューラルネットの重み行列。
-
固有値問題
$$
A\mathbf{v} = \lambda \mathbf{v}
$$→ PCAや次元削減に利用。
0.5 確率と統計
-
期待値・分散
$$
\mathbb{E}[X] = \int x f(x),dx,\quad Var(X)=\mathbb{E}[(X-\mu)^2]
$$ -
正規分布
$$
f(x) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left(-\frac{(x-\mu)^2}{2\sigma^2}\right)
$$ -
ベイズの定理
$$
P(A|B) = \frac{P(B|A)P(A)}{P(B)}
$$
0.6 フーリエ解析の基礎
-
フーリエ級数
$$
x(t) = a_0 + \sum_{n=1}^\infty \left[ a_n\cos\frac{2\pi nt}{T} + b_n\sin\frac{2\pi nt}{T} \right]
$$ -
フーリエ変換
$$
X(f) = \int_{-\infty}^{\infty} x(t) e^{-j2\pi f t}, dt
$$ -
離散フーリエ変換(DFT)
$$
X[k] = \sum_{n=0}^{N-1} x[n] e^{-j\frac{2\pi}{N}kn}
$$
0.7 勾配法(最適化アルゴリズム)
-
勾配降下法(GD)
$$
\theta_{t+1} = \theta_t - \eta \nabla_\theta L(\theta_t)
$$ -
確率的勾配降下法(SGD)
ミニバッチ単位で更新 → 大規模データに対応。 -
改良版
- Momentum
- Adam(Adaptive Moment Estimation)
0.8 ニューラルネットワークの数理
-
パーセプトロン
$$
y = \sigma(Wx + b)
$$→ $\sigma$ は活性化関数(ReLU, sigmoidなど)。
-
損失関数
-
二乗誤差:
$$
L = \tfrac{1}{2}\sum (y-\hat{y})^2
$$ -
クロスエントロピー:
$$
L = -\sum y_i \log \hat{y}_i
$$
-
-
ソフトマックス関数(Softmax Function)
$$
\hat{y}_i = \frac{\exp(z_i)}{\sum_j \exp(z_j)}
$$- 入力ベクトル $z = (z_1, z_2, ..., z_n)$ を確率分布に変換。
- 多クラス分類(画像認識、音声認識)の出力層に利用。
-
逆伝播(Backpropagation)
- チェインルールで勾配を計算し、効率的に学習。
第1章 ことばと音
1.1 自然言語処理とは(NLP: Natural Language Processing)
基本機能
-
翻訳(Machine Translation, MT)
入力文を構文・意味に分解し、出力言語に再構成する。
例:「私は学生です」 → I am a student.
現在は Transformer モデル(Attentionベース)が主流。 -
検索(Information Retrieval, IR)
- 従来:単語一致(TF-IDF)
- 現在:埋め込みベクトルによる意味検索(BERT, GPT)。
-
質問応答(Question Answering, QA)
- 検索型:文書から答えを抜き出す。
- 生成型:文脈に基づき自然な答えを作る。
言語学的補足
- 文法(syntax):単語の並び方
- 意味(semantics):語や文の意味
- 語用論(pragmatics):文脈による意味の変化
実際の音声対話システムは ASR → NLP → TTS の流れで動作。
1.2 音とは何か
音の物理
- 音は空気分子の疎密波(縦波)。
- 周波数 $f$(Hz)=1秒あたりの振動数。
- 音の強さ=音圧レベル(dB)。
人間の耳
- 外耳:音を集めて鼓膜へ
- 中耳:耳小骨で増幅
- 内耳(蝸牛):周波数ごとに有毛細胞が反応し、神経信号に変換
可聴周波数
- 人間:20 Hz〜20 kHz
- 犬:40 Hz〜45 kHz
- コウモリ:最大100 kHz
音は「物理現象」であると同時に「感覚的知覚」の対象。
1.3 音の成分
-
周波数(frequency):音の高さを決める。例:A4 = 440 Hz。
-
振幅(amplitude):空気振動の大きさ。振幅が大きいほど音が大きい。
-
スペクトル(spectrum):音を周波数ごとに分解したもの。
- サイン波:1本のピーク
- 声・楽器:基本周波数 F0 と倍音(harmonics)の集合
- 倍音の分布が音色(timbre)を決める
同じ高さでも、倍音構造の違いで「声」「楽器音」が異なる。
1.4 Transformerにおける位置エンコーディングとサイン波
なぜ位置情報が必要か
- Transformer は単語を並列に処理するため、系列の順序をそのままでは扱えない。
- そこで「単語の位置」を数値化してベクトルに加える仕組み=位置エンコーディング が導入された。
サイン波を用いた絶対位置エンコーディング
Vaswaniら(2017)の定義:
$$
PE_{(pos,2i)} = \sin\left(\frac{pos}{10000^{2i/d}}\right)
$$
$$
PE_{(pos,2i+1)} = \cos\left(\frac{pos}{10000^{2i/d}}\right)
$$
- $pos$:系列内の位置
- $d$:埋め込み次元
- サイン波・コサイン波の異なる周波数成分を組み合わせることで、系列内の位置を唯一に識別可能。
音のサイン波と同じで、「周波数の重ね合わせ」によって位置が符号化される。
相対位置エンコーディング
- 絶対位置ではなく「単語間の距離」に基づく表現。
- Attentionの計算に「相対距離ベクトル」を加えることで、文の長さが変わっても柔軟に対応できる。
- 音のアナロジーで言えば、基準の音からの相対的な周波数差(音程) に近い考え方。
1.5 Python演習:サイン波を作って音を聞く
NumPy でサイン波生成
matplotlib で波形表示
Audio モジュールで音を再生
第2章 音声の特徴量とフーリエ解析を知る
2.1 音声生成の仕組み(声帯・口・鼻の役割)
声帯(source:音源)
-
肺からの呼気で声帯が振動し、周期的な波が生まれる。
-
振動周期に対応する周波数が 基本周波数 F0。
- 男性の声:およそ 100 Hz 前後
- 女性の声:およそ 200 Hz 前後
-
F0 は「声の高さ(ピッチ)」を決める。
声道(filter:共鳴器)
- 口腔・咽頭・鼻腔が共鳴器として働く。
- 舌の位置・唇の形・鼻腔の開閉によってスペクトルのピーク(フォルマント F1, F2, F3…)が変化。
- フォルマントの配置によって母音が区別される。
母音(vowel)
-
声帯の振動 + 声道の共鳴で生成。
-
フォルマントの位置が母音識別の手がかり。
- 「あ」:F1が高く、F2が低い
- 「い」:F2が高い
- 「う」:F1・F2とも低め
👉 言語学的に「音節の核」であり、すべての音節に母音が含まれる。
子音(consonant)
-
声道に「狭め(constriction)」を作ることで発生。
-
種類:
- 閉鎖音(破裂音):p, t, k
- 摩擦音:s, f, ʃ
- 破擦音:ch, j
- 鼻音:m, n
- 接近音:l, r, w, j
-
有声/無声の違い:
- 有声:声帯を振動させる(b, d, g, z)
- 無声:声帯を振動させない(p, t, k, s)
👉 日本語の「か/が」「さ/ざ」は有声・無声の対立例。
まとめ(ソース・フィルタモデル)
- 音声 = 声帯の振動(source)+声道の共鳴(filter)
2.2 音声信号のスペクトル分析(美しい音と雑音の違い)
- サイン波:単一の周波数だけ → 「純音」
- 音声:基本周波数 F0 とその整数倍の高調波(harmonics) → 声の特徴が決まる
- 雑音:広帯域にわたる周波数成分が含まれる → 不明瞭な音
フーリエ変換
-
時間波形 $x(t)$ を周波数領域 $X(f)$ に変換。
-
得られたスペクトルから:
- 基本周波数(ピッチ)
- フォルマント(声色の手がかり)
- 雑音の有無
を読み取れる。
例:母音スペクトル
- 「あ」:F1が低い周波数に強調、F2は中程度
- 「い」:F2が高い周波数に鋭いピーク
2.3 ケプストラムとMFCC(音色を数値化する方法)
ケプストラム(Cepstrum)
- 音声スペクトルをさらにフーリエ変換したもの。
- 低次成分:声道の影響(フォルマント)
- 高次成分:声帯振動の周期性(ピッチ)
- 音源とフィルタ成分を分離できる。
MFCC(Mel Frequency Cepstral Coefficients)
- 人間の耳の特性に合わせた「メル尺度」を利用。
- 周波数軸を対数スケールに変換。
- 最終的に 数十次元の係数ベクトルで音声を表現。
👉 音声認識・話者認識で標準的に使われる特徴量。
2.4 音声処理に使うソフトウェアとPythonライブラリ
ソフトウェア
- Praat:音声学で定番、ピッチ・フォルマント解析が可能。
- Audacity:フリーの音声編集ソフト、FFT解析や録音編集ができる。
- MATLAB/Octave:工学分野で広く利用、信号処理ツールボックスが豊富。
Pythonライブラリ
-
NumPy:数値計算ライブラリ、
np.fft.fftでフーリエ変換。 -
SciPy:
scipy.signalでフィルタ設計・スペクトログラム。 - librosa:音楽・音声解析に特化、スペクトルやMFCCを簡単に計算。
- pyworld:高精度の音声分析合成、F0推定やスペクトル包絡解析に強い。
- SpeechRecognition:マイク入力や音声認識APIと連携可能。
2.5 フーリエ解析の種類
-
DFT(離散フーリエ変換)
- 基本的なフーリエ変換の数値版。
- Python:
np.fft.fft - 計算量 $O(N^2)$
-
FFT(高速フーリエ変換)
- DFTを効率化、$O(N \log N)$
- 実用的な解析はすべてFFTで行われる。
-
STFT(短時間フーリエ変換)
- 信号を短時間ごとに区切ってFFT。
- 時間ごとの周波数変化を観察。
- スペクトログラムの基盤。
-
CQT(定Q変換)
- 音楽向け、対数周波数スケール。
- 音階の解析に適する。
-
Wavelet変換
- フーリエ変換と異なり、窓幅を周波数に応じて変える。
- 高周波は短い窓、低周波は長い窓。
- 音声や画像解析に応用。
第3章 単語ベクトル表現
3.1 言葉を数字に変える(one-hotからベクトルへ)
One-hot表現
-
語彙サイズ = $V$ の場合、それぞれの単語は $V$ 次元ベクトルに変換。
-
例:語彙 = {cat, dog, fish}
- cat = [1, 0, 0]
- dog = [0, 1, 0]
- fish = [0, 0, 1]
問題点
-
意味的な近さを表現できない。
- cat と dog は意味的に近いが、ベクトル空間では直交している。
-
次元が大きすぎる。
- 語彙が10万語なら10万次元。計算が非効率。
分散表現(Distributed Representation)
-
単語を 低次元(数十〜数百次元) の連続ベクトルに埋め込む。
-
例:
- cat ≈ [0.21, 0.89, -0.33]
- dog ≈ [0.19, 0.92, -0.30]
-
この場合、cat と dog は「距離が近い」位置に配置される。
One-hot が「単語ID」、分散表現は「意味空間上の座標」。
3.2 分布仮説:言葉は「隣の言葉」で意味を持つ
定義
- 言語学者 Firth (1957) の有名な言葉:
"You shall know a word by the company it keeps."
(ある言葉を知るとは、その言葉の隣にどんな言葉が現れるかを知ることである)
例
- "I drink coffee every morning."
- "I drink tea every morning."
→ coffee と tea は類似文脈で出現 → 意味が近いと学習できる。
単語ベクトルは「共起(co-occurrence)」情報を学習して得られる。
3.3 Word2Vec(CBoWとSkip-Gramの仕組み)
Word2Vec (Mikolov et al., 2013) はニューラルネットを用いて分散表現を獲得する手法。
CBoW(Continuous Bag of Words)
-
周囲の単語(コンテキスト)から中央の単語を予測する。
-
例:I ___ coffee → 中央の "drink" を予測。
-
特徴:
- 学習が速い
- 頻出語に強い
Skip-Gram
-
中央の単語から周囲の単語を予測する。
-
例:中心単語 "drink" → コンテキスト {I, coffee} を予測。
-
特徴:
- 希少語に強い
- 大規模コーパスでも性能が良い
数式イメージ
-
Skip-Gram モデルの確率:
$$
P(context | word) = \prod_{c \in Context} P(c | word)
$$ -
Softmax を用いて単語の分布を学習:
$$
P(c|w) = \frac{\exp(v_c \cdot v_w)}{\sum_{c' \in V} \exp(v_{c'} \cdot v_w)}
$$- $v_w$:中心単語のベクトル
- $v_c$:文脈単語のベクトル
学習の結果、意味的に近い単語同士が近くに配置される。
3.4 単語ベクトルの性質と応用
意味的な距離
-
単語間のコサイン類似度で意味の近さを測定。
$$
\text{sim}(w_1, w_2) = \frac{v_{w_1} \cdot v_{w_2}}{|v_{w_1}||v_{w_2}|}
$$
ベクトル演算の面白さ
- king - man + woman ≈ queen
- 東京 - 日本 + フランス ≈ パリ
単語間の関係性が「幾何学的」に表現される。
応用
- 検索エンジン:意味ベース検索
- 機械翻訳:単語対応学習
- 質問応答・対話システム:意味の近い単語を活用
第4章 構文と意味のつながり
4.1 構文解析とは(文の構造を木で表す)
- 構文解析(Syntax Parsing) は文を「どの語がどの語に係るか」解析し、木構造(Parse Tree)で表す作業。
- 例:"The cat chased the dog."
[S
[NP The cat]
[VP chased
[NP the dog]
]
]
- S: 文 (Sentence)
- NP: 名詞句 (Noun Phrase)
- VP: 動詞句 (Verb Phrase)
構文解析により、曖昧な文でも「どの解釈が可能か」を分析できる。
4.2 文脈自由文法と確率文法
文脈自由文法(CFG: Context-Free Grammar)
- 文を生成するルールを定義する形式文法。
例:
S → NP VP
NP → Det N
VP → V NP
Det → "the"
N → "cat" | "dog"
V → "chased"
この文法から "The cat chased the dog." を生成可能。
確率文法(PCFG: Probabilistic CFG)
- 各ルールに確率を割り当て、曖昧な解釈の中から尤もらしいものを選択。
例:"I saw the man with a telescope."
- 「望遠鏡で男を見た」
- 「望遠鏡を持つ男を見た」
PCFGではコーパスに基づき「自然な方」を選べる。
4.3 意味解析:同じ言葉でも文脈で変わる意味
語義曖昧性解消(WSD: Word Sense Disambiguation)
- "bank" = 銀行 or 川岸
- 文脈を解析して解釈を決定。
構文依存の意味
-
"Flying planes can be dangerous."
- 「飛行機を操縦することは危険」
- 「飛んでいる飛行機は危険」
-
構文解析の結果次第で意味が変わる。
意味役割付与(Semantic Role Labeling, SRL)
例:"Mary gave John a book."
- Agent(行為者):Mary
- Recipient(受け手):John
- Theme(対象物):book
「誰が何をしたか」を機械的にラベル付けできる。
4.4 自然言語処理の重みと生成
構文・意味解析の役割
- 構文解析:文の骨組みを抽出(主語・述語・目的語の関係)。
- 意味解析:文の意味を数値化(曖昧性を解消)。
翻訳・検索・対話に不可欠。
例:
- 翻訳:「Flying planes can be dangerous.」 → 構文解析がなければ正しく翻訳できない。
- 検索:「Johnが誰に何を与えたか」を知るには意味役割が必要。
- 対話:文脈の正しい解釈が自然な応答に直結。
4.5 生成モデル(LLM)との関わり
従来のNLP
- 構文解析器・意味解析器を別々に作成。
- ルールベース or 統計的解析。
生成AI(LLM: Large Language Model)
- 構文と意味を「分散表現」で同時に学習。
- 木構造ではなく、確率的なベクトル空間で意味を捉える。
学習の特徴
- 構文知識:主語・述語・目的語の順序などを統計的に獲得。
- 意味知識:膨大な文脈から単語の使われ方を学習。
- 生成能力:数値ベクトルから新しいテキストを構築。
LLMは「解析」と「生成」を同じ基盤で処理している。
第5章 ことばとマルチモーダルAIを融合する
5.1 音声認識の仕組み(FFT → 特徴量 → 言葉に変換)
基本プロセス
-
音声入力(マイク録音)
- 得られる信号は時間領域の波形データ $x(t)$。
- この段階では「音圧の強弱の連続」であり、言語的意味は含まれない。
-
フーリエ変換(FFT)
- $X(f) = \int x(t) e^{-i 2\pi f t} dt$
- 周波数ごとのエネルギー成分を抽出し、声の高さや音色を数値化。
-
特徴量抽出
- MFCC(Mel Frequency Cepstral Coefficients):人間の耳に近い周波数スケール。
- スペクトログラム:時間 × 周波数の2次元表。母音や子音は模様として可視化。
- ピッチ・ゼロ交差率:声の高さや周期性を表す指標。
-
音素認識
- 音声を「音素(phoneme)」に分解。
- 日本語:/a, i, u, e, o/ や /k, s, t…/
-
単語列に変換
- 言語モデルを用いて音素列から自然な単語列を復元。
- 例:/k/ + /a/ → 「か」
👉 音の連続が「テキスト」へ変換される流れ。
5.2 音声合成の仕組み(数値から声をつくる)
プロセス
-
テキスト入力
- 例:「こんにちは、今日はいい天気です。」
-
音素列に変換(Text-to-Phoneme)
- 日本語 → 仮名列(ko-n-ni-chi-wa)
- 英語 → IPA記号(kənˈnɪʧiˌwɑː)
-
音響モデル
- 音素列 → ピッチ・フォルマント・スペクトルなどの音響パラメータ。
-
声質付与
- 声帯波形を模倣し、声道フィルタで人間らしい響きを生成。
-
波形生成
- 旧来方式:Vocoder(WORLD, STRAIGHT)。
- 現代方式:ニューラル音声合成(WaveNet, Tacotron, VITS)。
👉 数値ベクトルから「自然な人間の声」を生成可能。
5.3 音声と言葉をつなぐAI(SiriやChatGPTの裏側)
モジュール構成
- ASR(Automatic Speech Recognition):音声 → テキスト
- NLP(Natural Language Processing):意味・意図を理解
- TTS(Text-to-Speech):テキスト → 音声
👉 この3つがパイプラインで連携して音声対話AIが動作する。
5.3補足 LLMをもっと詳しく
LLMとは
- Large Language Model(大規模言語モデル)
- 大量のテキストを学習し、「次の単語」を確率的に予測。
- 代表例:GPT(OpenAI)、PaLM(Google)、LLaMA(Meta)。
- 規模:数百億〜数兆パラメータ。
基盤技術:Transformer
- 論文「Attention Is All You Need」(2017)で提案。
- 自己注意機構(Self-Attention):文中の全単語の依存関係を同時に捉える。
- 埋め込み(Embedding):単語やサブワードをベクトルに変換。
- 多層構造:数十〜数百層のTransformerブロックで文脈理解を深める。
5.3補足② 生成AIとしての動作原理
-
入力処理
- テキストをトークン化 → ベクトルに埋め込み。
- Transformerで文脈表現を構築。
-
次トークン予測
- ソフトマックスで次の単語の確率分布を計算。
- 例:「私はリンゴを」 → {食べる: 0.72, 買った: 0.18, 好き: 0.05…}
-
サンプリング(生成戦略)
- Greedy decoding:常に最大確率を選ぶ。
- Beam search:複数候補を探索。
- Temperature / Top-k / Top-p:ランダム性・多様性を調整。
-
出力
- 選ばれたトークンを並べて文章を生成。
5.4 LLMの能力と限界
強み
- 大規模データから 知識 と 文法 を獲得。
- 高度な 文脈理解 と 自然言語生成 が可能。
- 翻訳、要約、質問応答、推論など幅広い応用。
限界
- 幻覚(hallucination):もっともらしい誤答を生成する。
- 最新情報に弱い:学習時点以降の知識を持たない。
- 計算コスト大:数百億〜数兆パラメータの演算に大規模GPUが必要。
5.5 マルチモーダルAI(LLMM)への拡張
LLM → LLMM
- LLM:テキストのみを処理。
- LLMM(Large Language Multimodal Model):テキスト+音声+画像を統合。
応用例
- 音声入力(ASR) → LLMで意味理解 → 音声出力(TTS)
- 画像入力 → ビジョンモデルで解析 → 言語応答を生成
👉 ChatGPTの音声モードや画像入力は、このLLMMの実装例。