中国語音声認識の最前線:Transformerで精度向上!

論文要約
  1. 紹介論文
    1. この論文を一言でまとめると
  2. 音声認識の新たな波:Sequence-to-Sequenceモデルとは?
    1. 従来の音声認識システム:HMM(隠れマルコフモデル)の限界
    2. Sequence-to-Sequenceモデルの登場:End-to-End学習の衝撃
    3. なぜSequence-to-Sequenceモデルが優れているのか?
    4. 本論文の貢献:中国語音声認識における最適なモデリングユニットの探求
  3. 5つのモデリングユニット徹底比較:中国語音声認識の最適解は?
    1. 1. CI-phoneme(文脈非依存音素)
    2. 2. 音節(Syllable)
    3. 3. 単語(Word)
    4. 4. サブワード(Sub-word)
    5. 5. 文字(Character)
    6. 各モデリングユニットの比較まとめ
  4. Transformerモデルの構造を徹底解剖:Multi-Head Attentionの秘密
    1. Transformerモデルとは?
    2. Multi-Head Attention機構:Attentionは「どこ」に向けるべきか?
    3. Transformerの内部構造を図解
    4. なぜMulti-Head Attentionが重要なのか?
  5. 実験結果を徹底分析:文字ベースモデルがState-of-the-Artを達成!
    1. 実験設定:HKUSTデータセットと評価指標
    2. 実験結果:文字ベースモデルがState-of-the-Artを達成
    3. 結果の解釈:文字ベースモデルの優位性
    4. 他モデルとの比較
  6. 結論と今後の展望:手作り辞書からの解放、そして次世代音声認識へ
    1. 手作り辞書からの解放:コスト削減と柔軟性の向上
    2. 大規模データセットとサブワードモデルの可能性
    3. 次世代音声認識への展望:話し言葉への対応とEnd-to-Endモデルの進化
  7. 今日からできる!音声認識技術を活用するための第一歩
    1. 1. 関連リソースをチェック:まずはここから!
    2. 2. 学習ステップ:段階的にスキルアップ!
    3. 3. 実践的なTips:成功への近道!

紹介論文

今回紹介する論文はA Comparison of Modeling Units in Sequence-to-Sequence Speech Recognition with the Transformer on Mandarin Chineseという論文です。

https://arxiv.org/pdf/1805.06239v2.pdf

この論文を一言でまとめると

本記事では、中国語音声認識における最適なモデリングユニットを、Transformerモデルを用いて探求した論文を解説します。文字ベースモデルがState-of-the-artを達成した背景と、今後の音声認識技術の可能性について考察します。

音声認識の新たな波:Sequence-to-Sequenceモデルとは?

音声認識技術は、私たちの生活に欠かせないものとなりつつあります。スマートフォンの音声アシスタント、会議の自動議事録作成、そしてスマートスピーカーなど、様々な場面で活用されています。本セクションでは、本論文の背景にある、音声認識におけるモデリングユニット選択の重要性と、近年のsequence-to-sequenceモデルの台頭について解説します。従来のHMMモデルからニューラルネットワークへの移行が、この分野にどのような変化をもたらしているのかを理解していきましょう。

従来の音声認識システム:HMM(隠れマルコフモデル)の限界

従来の音声認識システムは、音響モデル(AM)、発音モデル(PM)、言語モデル(LM)という3つの独立したコンポーネントで構成されていました。これらのモデルは個別に訓練され、CD-stateやCD-phonemeが主要なモデリングユニットとして使用されていました。しかし、この方式にはいくつかの課題がありました。

  • 複雑なパイプライン:各モデルを個別に訓練し、組み合わせる必要があり、開発・運用が煩雑でした。
  • 性能の限界:各モデルの最適化が全体最適とは限らず、認識精度向上のボトルネックとなっていました。
  • 手作りの辞書が必要:発音モデル(PM)には、単語と音素の対応関係を記述した辞書が不可欠でしたが、その作成には膨大な労力と時間がかかりました。

Sequence-to-Sequenceモデルの登場:End-to-End学習の衝撃

近年、これらの課題を解決する新たなアプローチとして、sequence-to-sequenceモデルが注目を集めています。sequence-to-sequenceモデルは、音響、発音、言語モデルを単一のニューラルネットワークに統合し、End-to-Endで学習を行うことができます。

End-to-End学習とは、システム全体を一つの大きなニューラルネットワークとして学習させる手法です。これにより、個々のコンポーネントの最適化にとらわれず、システム全体の性能を最大化することができます。

Sequence-to-Sequenceモデルの主な特徴は以下の通りです。

  • Encoder-Decoder構造:Encoderは入力シーケンス(音声)を固定長のベクトルに変換し、Decoderはそのベクトルから出力シーケンス(テキスト)を生成します。
  • Attention機構:Encoderのどの部分にDecoderが注目すべきかを学習し、より適切な出力生成を支援します。
  • End-to-End学習:モデル全体の最適化が容易になり、性能向上が期待できます。

なぜSequence-to-Sequenceモデルが優れているのか?

Sequence-to-Sequenceモデルは、従来のHMMベースのシステムと比較して、以下のような点で優れています。

  • より複雑な音響特徴の表現:ニューラルネットワークは、より複雑な音響特徴の表現を学習し、非線形な関係性をモデル化できるため、認識精度が向上します。
  • 柔軟なモデリングユニット:音素、音節、単語、サブワード、文字など、様々なモデリングユニットを柔軟に扱うことができます。
  • 手作りの辞書が不要になる可能性:文字ベースのモデルなど、辞書を必要としないモデルも登場しており、開発コストの削減が期待できます。

本論文の貢献:中国語音声認識における最適なモデリングユニットの探求

本論文では、中国語(北京語)の音声認識において、最適なモデリングユニットは何か?という問いに答えるために、Sequence-to-Sequenceモデルの一種であるTransformerを用いて、5つの異なるユニット(CI-phoneme、音節、単語、サブワード、文字)を比較検討しています。この研究を通して、中国語音声認識のさらなる発展に貢献することが期待されます。次章では、5つのモデリングユニットについて詳しく見ていきましょう。

5つのモデリングユニット徹底比較:中国語音声認識の最適解は?

本セクションでは、論文の中核となる、中国語(北京語)音声認識における最適なモデリングユニットの探求について深掘りします。 sequence-to-sequenceモデルの性能は、どのユニットを基本単位とするかに大きく左右されます。この論文では、CI-phoneme(文脈非依存音素)、音節、単語、サブワード、文字という5つの異なるユニットを対象に、それぞれの特性と、中国語音声認識におけるメリット・デメリットを詳細に比較検討します。それぞれのモデリングユニットが、どのような場合に有効なのか、具体的な例を交えながら解説していきましょう。

1. CI-phoneme(文脈非依存音素)

CI-phonemeは、Context-Independent Phonemeの略で、音素を文脈に依存せずに独立したユニットとして扱うものです。従来の音声認識システムで広く用いられてきた手法ですが、sequence-to-sequenceモデルではどうでしょうか?

  • メリット:語彙外単語(OOV)の問題が比較的少ない
  • デメリット:音素の文脈依存性を考慮できないため、認識精度が低下する可能性

例えば、「汤 (tāng)」と「糖 (táng)」は、声調が異なるだけで音素としては非常に近いですが、CI-phonemeではこれらの違いを捉えきれません。そのため、認識精度に限界が生じる場合があります。

2. 音節(Syllable)

音節は、中国語の音のまとまりを捉えるユニットです。中国語の音節は、声母(子音)、韻母(母音)、そして声調によって構成されます。

  • メリット:中国語の音構造を捉えやすい
  • デメリット:同音異義語が多いため、文脈情報が重要

中国語は同音異義語が非常に多い言語です。例えば、「yi」という音節には、非常に多くの漢字が存在します。そのため、音節だけでは意味を特定できず、文脈を考慮した処理が必要になります。

3. 単語(Word)

単語は、意味を持つ最小の単位として、人間が理解しやすいユニットです。

  • メリット:意味的なまとまりを持つため、理解しやすい
  • デメリット:語彙外単語(OOV)の問題が発生しやすい

単語をモデリングユニットとする場合、学習データに含まれていない単語(未知語)が出現すると、認識精度が大幅に低下する可能性があります。特に、新しい単語や専門用語が頻繁に登場する分野では、OOVの問題が深刻になります。

4. サブワード(Sub-word)

サブワードは、単語をより小さな単位に分割したもので、BPE(Byte Pair Encoding)などの手法を用いて生成されます。

  • メリット:OOVの問題を軽減し、未知語への対応力を高める
  • デメリット:単語の意味的なまとまりを損なう可能性

BPEは、頻繁に出現する文字のペアを一つのユニットに統合していくことで、語彙サイズを抑えつつ、未知語への対応力を高める手法です。例えば、「transformer」という単語を「trans」、「form」、「er」といったサブワードに分割することで、未知語への対応力を向上させます。

5. 文字(Character)

文字は、漢字をモデリングユニットとするものです。中国語の場合、漢字の数は限られているため、語彙サイズを小さく抑えることができます。

  • メリット:語彙サイズが小さく、OOVの問題がない
  • デメリット:長距離の依存関係を学習する必要がある

漢字は、それ自体が意味を持つ場合もありますが、多くの場合、複数の漢字が組み合わさって単語を構成します。そのため、文字ベースのモデルでは、単語の意味を理解するために、長距離の依存関係を学習する必要があります。

各モデリングユニットの比較まとめ

モデリングユニット メリット デメリット
CI-phoneme 語彙外単語(OOV)の問題が少ない 音素の文脈依存性を考慮できない
音節 中国語の音構造を捉えやすい 同音異義語が多い
単語 意味的なまとまりを持つ 語彙外単語(OOV)の問題が発生しやすい
サブワード OOVの問題を軽減、未知語への対応力を高める 単語の意味的なまとまりを損なう可能性
文字 語彙サイズが小さい、OOVの問題がない 長距離の依存関係を学習する必要がある

このように、各モデリングユニットはそれぞれ異なる特徴を持っており、どのユニットが最適かは、タスクやデータセットによって異なります。 次のセクションでは、これらのユニットをTransformerモデルで比較実験した結果を見ていきましょう。

Transformerモデルの構造を徹底解剖:Multi-Head Attentionの秘密

前のセクションでは、中国語音声認識におけるモデリングユニットの重要性と、この論文における5つのユニット(CI-phoneme、音節、単語、サブワード、文字)の比較について解説しました。このセクションでは、これらのユニットを扱う上で重要な役割を果たすTransformerモデルのアーキテクチャ、特にMulti-Head Attention機構に焦点を当てて解説します。

Transformerモデルとは?

Transformerは、2017年にGoogleの研究者らによって発表された、Attention機構のみを用いた革新的なSequence-to-Sequenceモデルです。従来のRNN(Recurrent Neural Network)ベースのモデルとは異なり、再帰的な処理を行わないため、並列処理が可能となり、学習速度が大幅に向上します。この特性は、大規模なデータセットを扱う上で非常に有利です。

Transformerモデルは、主にEncoderDecoderという2つの部分から構成されています。Encoderは入力シーケンス(この場合は音声データ)を内部表現に変換し、Decoderはその内部表現から出力シーケンス(テキストデータ)を生成します。EncoderとDecoderはそれぞれ、複数の層が積み重ねられた構造を持っており、各層にはMulti-Head Attention機構とFeed Forward Networkが含まれています。

Multi-Head Attention機構:Attentionは「どこ」に向けるべきか?

Multi-Head Attention機構は、Transformerモデルの中核となる部分であり、入力シーケンスの異なる部分間の依存関係を捉える役割を担っています。従来のAttention機構では、単一のAttentionヘッドを用いて入力シーケンス全体の関係性を学習していましたが、Multi-Head Attentionでは、複数のAttentionヘッドを用意することで、異なる視点から入力シーケンスの依存関係を学習することが可能になります。

各Attentionヘッドは、入力されたデータをQuery (Q)、Key (K)、Value (V)と呼ばれる3つのベクトルに変換します。Queryは「問い合わせ」、Keyは「検索キー」、Valueは「値」と考えると分かりやすいでしょう。そして、各QueryとKeyの間のAttentionスコアを計算し、そのスコアに基づいてValueベクトルを重み付けします。この重み付けされたValueベクトルが、そのAttentionヘッドの出力となります。

数式で表すと、以下のようになります。

Attention(Q, K, V) = softmax(Q Kᵀ / √dₖ) V

ここで、dₖはKeyベクトルの次元数を表します。√dₖで割ることで、Attentionスコアが過度に大きくなるのを防ぎ、学習の安定化を図っています。

補足情報:Attention機構は、人間が文章を読む際に、重要な部分に自然と注意を向けるメカニズムを模倣したものです。Transformerモデルは、このAttention機構を効果的に活用することで、より自然で流暢なテキスト生成を実現しています。

Multi-Head Attentionでは、各ヘッドで計算された出力ベクトルを結合し、さらに線形変換を行うことで、最終的な出力を得ます。複数のヘッドを持つことで、モデルはより多様な情報を捉え、性能が向上することが実験的に示されています。

Transformerの内部構造を図解

Transformerモデルの構造を理解するために、図を参考にしながら各部分の役割を確認しましょう。(論文中のFigure 1を参照。ここではテキストで説明します)

  • Encoder: EncoderはN個の同一の層が積み重ねられた構造を持ちます。各層は、Multi-Head AttentionとPosition-wise Feed-Forward Networkという2つのサブ層から構成されています。各サブ層の出力は、残差接続(Residual Connection)とレイヤー正規化(Layer Normalization)を経て、次の層へと渡されます。
  • Decoder: DecoderもEncoderと同様にN個の層が積み重ねられた構造を持ちますが、Encoderの出力に対するAttentionを行うためのサブ層(Encoder-Decoder Attention)が追加されています。また、DecoderのSelf-Attentionサブ層では、未来の情報にアクセスできないようにマスク処理(Masked Multi-Head Attention)が行われます。
  • Positional Encoding: TransformerモデルはRNNを使用しないため、入力シーケンスの位置情報を明示的にモデルに伝える必要があります。そのために、Positional Encodingという手法が用いられます。Positional Encodingでは、入力シーケンスの各位置に対して、固定のベクトルを付与し、そのベクトルを入力埋め込み(Input Embedding)に加算します。

なぜMulti-Head Attentionが重要なのか?

Multi-Head Attention機構は、Transformerモデルの性能向上に大きく貢献しています。その理由は主に以下の3点です。

  1. 多様な視点の獲得: 複数のAttentionヘッドを持つことで、モデルは入力シーケンスの異なる部分間の関係性を、様々な視点から捉えることができます。
  2. 並列処理の促進: 各Attentionヘッドは独立して計算を行うことができるため、並列処理が可能となり、学習速度が向上します。
  3. 長距離依存関係の学習: Attention機構は、入力シーケンスの任意の位置にある要素間の関係性を直接学習することができるため、長距離の依存関係を捉えるのに適しています。これは、中国語のような文脈が重要な言語において特に有効です。

これらの利点により、Transformerモデルは、従来のRNNベースのモデルを凌駕する性能を発揮し、自然言語処理の様々なタスクでstate-of-the-artを達成しています。次のセクションでは、この論文における実験設定と結果について詳しく見ていきましょう。

実験結果を徹底分析:文字ベースモデルがState-of-the-Artを達成!

本セクションでは、論文における実験設定と結果を詳細に分析し、文字ベースのモデルが最高の性能を発揮し、新たなstate-of-the-artを達成した背景を解説します。具体的な数値データを示しながら、その優位性を検証していきましょう。

実験設定:HKUSTデータセットと評価指標

この研究では、HKUSTデータセット(Mandarin Chinese conversational telephone speech corpus)が使用されました。これは、香港科技大学が収集・転記した中国語(北京語)の会話音声コーパスです。150時間の音声データと、873件のトレーニングセット、24件のテストセットで構成されています。

モデリングユニットとしては、以下の5種類が比較検討されました。

  • CI-phoneme(Context-Independent Phoneme):文脈に依存しない音素
  • 音節(Syllable):中国語の音節(声調を含む)
  • 単語(Word):単語をモデリングユニットとする
  • サブワード(Sub-word):BPE(Byte Pair Encoding)などの手法で分割された単語の一部
  • 文字(Character):漢字をモデリングユニットとする

モデルは、Transformerアーキテクチャを採用しています。Transformerは、Attention機構のみを用いたSequence-to-Sequenceモデルであり、RNNを使用せずに並列処理が可能なため、学習速度が向上します。詳細は「Transformerモデルの構造を徹底解剖:Multi-Head Attentionの秘密」をご覧ください。

性能評価には、Character Error Rate(CER)が用いられました。CERは、文字単位での誤り率を表し、値が低いほど認識精度が高いことを示します。

実験結果:文字ベースモデルがState-of-the-Artを達成

実験の結果、文字ベースのモデルが最も低いCERを達成し、新たなstate-of-the-artを更新しました(CER 26.64%)。これは、手作りの辞書や追加の言語モデル統合なしに達成されたものであり、非常に優れた結果と言えます。

他のモデリングユニットとの比較では、語彙ベースのユニット(単語、サブワード)が、音素および音節ベースのユニットよりも優れたパフォーマンスを示しました。また、サブワードモデルは、単語モデルよりも優れたパフォーマンスを示しましたが、文字ベースモデルには及ばなかったという結果になっています。

表5に、異なるモデリングユニットを用いたTransformerのHKUSTデータセットにおけるCERの結果を示します。

結果の解釈:文字ベースモデルの優位性

これらの結果から、以下のことが示唆されます。

  • 文字ベースのモデルは、中国語の音声認識に適している可能性が高い:文字ベースのモデルは、漢字という単位で言語を直接モデル化するため、中国語の複雑な文法や意味構造を捉えやすいと考えられます。
  • 手作りの辞書なしで高い認識精度を達成できる可能性がある:従来の音声認識システムでは、手作りの辞書が不可欠でしたが、文字ベースのモデルは、辞書なしでも高い性能を発揮できるため、開発コストを削減し、未知語への対応力を高めることができます。
  • サブワードモデルはOOVの問題を軽減できるが、文字ベースモデルほどの性能は得られない:サブワードモデルは、未知語(OOV)の問題を軽減するために有効な手法ですが、今回の実験では、文字ベースモデルの方がより高い認識精度を達成しました。これは、中国語の特性上、文字単位でのモデリングがより適していることを示唆している可能性があります。

今回の実験結果は、中国語音声認識におけるモデリングユニットの選択において、文字ベースのモデルが非常に有望であることを示しています。この成果は、今後の音声認識技術の発展に大きく貢献することが期待されます。

他モデルとの比較

表6に示すように、今回の文字ベースモデル(CER 26.64%)は、他のモデルアーキテクチャと比較しても優れた性能を発揮しています。特に、従来のLSTM-HMMシステム(CER 30.79%)や、joint CTC-attention based encoder-decoder network(CER 28.0%)を大幅に上回る結果となっています。

これらの結果は、Transformerアーキテクチャと文字ベースのモデリングユニットの組み合わせが、中国語音声認識において非常に有効であることを強く示唆しています。

結論と今後の展望:手作り辞書からの解放、そして次世代音声認識へ

本記事では、Transformerモデルを用いた中国語音声認識における最適なモデリングユニットの探求という、最先端の研究をご紹介しました。特に、文字ベースのモデルが手作りの辞書を必要とせずに、従来のモデルを凌駕するState-of-the-Artを達成したという事実は、今後の音声認識技術のあり方を大きく変える可能性を秘めています。

手作り辞書からの解放:コスト削減と柔軟性の向上

従来の音声認識システムでは、専門家が時間と労力をかけて発音辞書を作成する必要がありました。しかし、今回の研究結果は、sequence-to-sequenceモデルとTransformerの組み合わせによって、この高コストな作業から解放される道が開かれたことを示唆しています。手作り辞書が不要になれば、以下のようなメリットが期待できます。

  • 開発コストの削減:辞書作成にかかる費用を大幅に削減できます。
  • 開発期間の短縮:辞書作成の時間を省くことで、迅速なシステム開発が可能になります。
  • 未知語への対応力向上:新しい単語や専門用語が次々と生まれる現代において、辞書に登録されていない単語(語彙外単語、OOV)にも柔軟に対応できます。
  • 多言語対応の容易化:言語ごとに辞書を作成する必要がなくなり、多言語への展開が容易になります。

大規模データセットとサブワードモデルの可能性

今回の研究では、文字ベースのモデルが優れた性能を発揮しましたが、サブワードモデルにも注目すべき点があります。サブワードモデルは、未知語への対応力が高く、大規模なデータセットで学習することで、さらに性能向上が期待できます。今後の研究では、以下のような方向性が考えられます。

  • より大規模なデータセットでのサブワードモデルの評価:文字ベースモデルと比較して、サブワードモデルがどのような場合に優位性を示すのかを明らかにします。
  • サブワード分割アルゴリズムの改良:BPEだけでなく、WordPieceやUnigram Language Modelなどの他のサブワード分割アルゴリズムを試すことで、最適な分割方法を見つけ出します。
  • 文字ベースモデルとサブワードモデルの組み合わせ:それぞれの長所を活かすために、両者を組み合わせたハイブリッドなモデルを開発します。

次世代音声認識への展望:話し言葉への対応とEnd-to-Endモデルの進化

音声認識技術は、今後ますます進化していくと予想されます。特に、以下のような分野での発展が期待されています。

  • 話し言葉への対応:日常会話のような、より自然な話し言葉に対応できるモデルの開発が重要になります。
  • End-to-Endモデルの進化:音響モデル、発音モデル、言語モデルを完全に統合した、真のEnd-to-Endモデルの実現が目標となります。
  • 自己教師あり学習の導入:ラベルのない大量のデータから学習することで、モデルの汎化性能を向上させます。
  • 低リソース言語への応用:データが少ない言語でも、高い認識精度を実現できる技術が求められます。

今回の研究は、中国語音声認識の分野に新たな可能性を示しました。手作り辞書からの解放、サブワードモデルの可能性、そして次世代音声認識への展望。これらのキーワードを胸に、読者の皆様もぜひ、音声認識技術の未来を切り拓いてください。

今日からできる!音声認識技術を活用するための第一歩

本記事を通して、中国語音声認識の最前線と、Transformerモデルの可能性について深く理解できたことでしょう。しかし、知識は活用してこそ価値があります。そこで、本セクションでは、今日からあなた自身が音声認識技術に触れ、その可能性を広げるための具体的なステップをご提案します。

1. 関連リソースをチェック:まずはここから!

音声認識技術の世界は日々進化しています。最新の情報をキャッチアップし、実践に役立つツールを使いこなすために、まずは以下のリソースをチェックしてみましょう。

  • TensorFlow:Googleが開発した、機械学習・深層学習のためのオープンソースプラットフォーム。音声認識モデルの構築にも利用できます。
  • PyTorch:Facebook(現Meta)が開発した、機械学習・深層学習のためのオープンソースフレームワーク。研究開発に強く、柔軟なモデル構築が可能です。
  • Hugging Face Transformers:Transformerモデルを簡単に利用できるライブラリ。事前学習済みのモデルも豊富に提供されており、手軽に最先端の技術を試すことができます。
  • Common Voice:Mozillaが提供する、オープンソースの音声データセット。様々な言語の音声データが集められており、音声認識モデルの学習に利用できます。

2. 学習ステップ:段階的にスキルアップ!

音声認識技術を深く理解し、実際に活用できるようになるためには、段階的な学習が不可欠です。以下のステップを参考に、着実にスキルアップを目指しましょう。

  1. 機械学習の基礎を学ぶ:線形代数、確率・統計、微分積分などの数学の基礎知識を習得しましょう。
  2. 音声認識の原理を理解する:音響モデル、言語モデル、発音モデルなどの基本的な概念を理解しましょう。
  3. TensorFlowやPyTorchなどのフレームワークを習得する:チュートリアルやドキュメントを活用し、基本的な操作をマスターしましょう。
  4. 公開されているデータセットを使って、簡単な音声認識モデルを実装する:まずは既存のモデルを参考に、コードを書き換えて動作を確認してみましょう。
  5. 最新の研究論文を読み、技術動向を把握する:arXivなどのサイトで公開されている論文をチェックし、最先端の技術を学びましょう。

3. 実践的なTips:成功への近道!

学習を進める上で、以下のTipsを参考にすると、より効率的にスキルアップできます。

  • まずは小さなデータセットから始める:大規模なデータセットを扱う前に、まずは小さなデータセットで実験を行い、基本的な動作を確認しましょう。
  • 既存のモデルを参考に、自分のデータに合わせて調整する:ゼロからモデルを構築するのではなく、既存のモデルを参考に、自分のデータに合わせて調整することで、効率的に学習を進めることができます。
  • コミュニティに参加し、他の研究者やエンジニアと交流する:Stack OverflowやGitHubなどのコミュニティに参加し、質問したり、他の人のコードを読んだりすることで、理解を深めることができます。
さあ、今日からあなたも音声認識技術の世界へ飛び込みましょう!

コメント

タイトルとURLをコピーしました