0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

自然言語処理と音声認識

Last updated at Posted at 2025-09-11

第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 でフーリエ変換。
  • SciPyscipy.signal でフィルタ設計・スペクトログラム。
  • librosa:音楽・音声解析に特化、スペクトルやMFCCを簡単に計算。
  • pyworld:高精度の音声分析合成、F0推定やスペクトル包絡解析に強い。
  • SpeechRecognition:マイク入力や音声認識APIと連携可能。

2.5 フーリエ解析の種類

  1. DFT(離散フーリエ変換)

    • 基本的なフーリエ変換の数値版。
    • Python: np.fft.fft
    • 計算量 $O(N^2)$
  2. FFT(高速フーリエ変換)

    • DFTを効率化、$O(N \log N)$
    • 実用的な解析はすべてFFTで行われる。
  3. STFT(短時間フーリエ変換)

    • 信号を短時間ごとに区切ってFFT。
    • 時間ごとの周波数変化を観察。
    • スペクトログラムの基盤。
  4. CQT(定Q変換)

    • 音楽向け、対数周波数スケール。
    • 音階の解析に適する。
  5. 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]

問題点

  1. 意味的な近さを表現できない。

    • cat と dog は意味的に近いが、ベクトル空間では直交している。
  2. 次元が大きすぎる。

    • 語彙が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 → 特徴量 → 言葉に変換)

基本プロセス

  1. 音声入力(マイク録音)

    • 得られる信号は時間領域の波形データ $x(t)$。
    • この段階では「音圧の強弱の連続」であり、言語的意味は含まれない。
  2. フーリエ変換(FFT)

    • $X(f) = \int x(t) e^{-i 2\pi f t} dt$
    • 周波数ごとのエネルギー成分を抽出し、声の高さや音色を数値化。
  3. 特徴量抽出

    • MFCC(Mel Frequency Cepstral Coefficients):人間の耳に近い周波数スケール。
    • スペクトログラム:時間 × 周波数の2次元表。母音や子音は模様として可視化。
    • ピッチ・ゼロ交差率:声の高さや周期性を表す指標。
  4. 音素認識

    • 音声を「音素(phoneme)」に分解。
    • 日本語:/a, i, u, e, o/ や /k, s, t…/
  5. 単語列に変換

    • 言語モデルを用いて音素列から自然な単語列を復元。
    • 例:/k/ + /a/ → 「か」

👉 音の連続が「テキスト」へ変換される流れ。


5.2 音声合成の仕組み(数値から声をつくる)

プロセス

  1. テキスト入力

    • 例:「こんにちは、今日はいい天気です。」
  2. 音素列に変換(Text-to-Phoneme)

    • 日本語 → 仮名列(ko-n-ni-chi-wa)
    • 英語 → IPA記号(kənˈnɪʧiˌwɑː)
  3. 音響モデル

    • 音素列 → ピッチ・フォルマント・スペクトルなどの音響パラメータ。
  4. 声質付与

    • 声帯波形を模倣し、声道フィルタで人間らしい響きを生成。
  5. 波形生成

    • 旧来方式: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としての動作原理

  1. 入力処理

    • テキストをトークン化 → ベクトルに埋め込み。
    • Transformerで文脈表現を構築。
  2. 次トークン予測

    • ソフトマックスで次の単語の確率分布を計算。
    • 例:「私はリンゴを」 → {食べる: 0.72, 買った: 0.18, 好き: 0.05…}
  3. サンプリング(生成戦略)

    • Greedy decoding:常に最大確率を選ぶ。
    • Beam search:複数候補を探索。
    • Temperature / Top-k / Top-p:ランダム性・多様性を調整。
  4. 出力

    • 選ばれたトークンを並べて文章を生成。

5.4 LLMの能力と限界

強み

  • 大規模データから 知識文法 を獲得。
  • 高度な 文脈理解自然言語生成 が可能。
  • 翻訳、要約、質問応答、推論など幅広い応用。

限界

  • 幻覚(hallucination):もっともらしい誤答を生成する。
  • 最新情報に弱い:学習時点以降の知識を持たない。
  • 計算コスト大:数百億〜数兆パラメータの演算に大規模GPUが必要。

5.5 マルチモーダルAI(LLMM)への拡張

LLM → LLMM

  • LLM:テキストのみを処理。
  • LLMM(Large Language Multimodal Model):テキスト+音声+画像を統合。

応用例

  • 音声入力(ASR) → LLMで意味理解 → 音声出力(TTS)
  • 画像入力 → ビジョンモデルで解析 → 言語応答を生成

👉 ChatGPTの音声モードや画像入力は、このLLMMの実装例。


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?