モデル概要
モデル特徴
モデル能力
使用事例
🚀 Quantum_STT
Quantum_STTは、自動音声認識(ASR)と音声翻訳における最先端のモデルです。このモデルは、QuantumhashのAlec Radfordらによる論文 Robust Speech Recognition via Large-Scale Weak Supervision で提案されました。500万時間以上のラベル付きデータで学習されたQuantum_STTは、ゼロショット設定で多くのデータセットやドメインに対して強力な汎化能力を示します。
結果として、このモデルは多少の品質低下を犠牲にして、大幅に高速化されています。
免責事項: このモデルカードの内容の一部は、🤗 Quantumhashチームによって作成されています。
🚀 クイックスタート
Quantum_STTはHugging Face 🤗 Transformersでサポートされています。モデルを実行するには、まずTransformersライブラリをインストールします。この例では、Hugging Face Hubから玩具用の音声データセットをロードするために🤗 Datasetsもインストールし、モデルの読み込み時間を短縮するために🤗 Accelerateもインストールします。
pip install --upgrade pip
pip install --upgrade transformers datasets[audio] accelerate
モデルは、任意の長さの音声を文字起こしするために、pipeline
クラスを使用して利用できます。
import torch
from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor, pipeline
from datasets import load_dataset
device = "cuda:0" if torch.cuda.is_available() else "cpu"
torch_dtype = torch.float16 if torch.cuda.is_available() else torch.float32
model_id = "sbapan41/Quantum_STT"
model = AutoModelForSpeechSeq2Seq.from_pretrained(
model_id, torch_dtype=torch_dtype, low_cpu_mem_usage=True, use_safetensors=True
)
model.to(device)
processor = AutoProcessor.from_pretrained(model_id)
pipe = pipeline(
"automatic-speech-recognition",
model=model,
tokenizer=processor.tokenizer,
feature_extractor=processor.feature_extractor,
torch_dtype=torch_dtype,
device=device,
)
dataset = load_dataset("distil-whisper/librispeech_long", "clean", split="validation")
sample = dataset[0]["audio"]
result = pipe(sample)
print(result["text"])
ローカルの音声ファイルを文字起こしするには、パイプラインを呼び出すときに音声ファイルのパスを渡すだけです。
result = pipe("audio.mp3")
複数の音声ファイルは、リストとして指定し、batch_size
パラメータを設定することで並列に文字起こしできます。
result = pipe(["audio_1.mp3", "audio_2.mp3"], batch_size=2)
Transformersは、温度フォールバックや前のトークンに条件付けるなど、すべてのQuantum_STTデコード戦略と互換性があります。次の例は、これらのヒューリスティックを有効にする方法を示しています。
generate_kwargs = {
"max_new_tokens": 448,
"num_beams": 1,
"condition_on_prev_tokens": False,
"compression_ratio_threshold": 1.35, # zlib圧縮率の閾値(トークン空間)
"temperature": (0.0, 0.2, 0.4, 0.6, 0.8, 1.0),
"logprob_threshold": -1.0,
"no_speech_threshold": 0.6,
"return_timestamps": True,
}
result = pipe(sample, generate_kwargs=generate_kwargs)
Quantum_STTは、ソース音声の言語を自動的に予測します。ソース音声の言語が事前にわかっている場合は、それをパイプラインに引数として渡すことができます。
result = pipe(sample, generate_kwargs={"language": "english"})
デフォルトでは、Quantum_STTはソース音声の言語とターゲットテキストの言語が同じである音声文字起こしのタスクを実行します。ターゲットテキストが英語である音声翻訳を実行するには、タスクを "translate"
に設定します。
result = pipe(sample, generate_kwargs={"task": "translate"})
最後に、モデルにタイムスタンプを予測させることができます。文レベルのタイムスタンプの場合は、return_timestamps
引数を渡します。
result = pipe(sample, return_timestamps=True)
print(result["chunks"])
単語レベルのタイムスタンプの場合は、以下のようにします。
result = pipe(sample, return_timestamps="word")
print(result["chunks"])
上記の引数は、単独でまたは組み合わせて使用できます。たとえば、ソース音声がフランス語であり、文レベルのタイムスタンプを返したい音声文字起こしのタスクを実行するには、次のようにできます。
result = pipe(sample, return_timestamps=True, generate_kwargs={"language": "french", "task": "translate"})
print(result["chunks"])
生成パラメータをより詳細に制御するには、モデル + プロセッサAPIを直接使用します。
import torch
from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor
from datasets import Audio, load_dataset
device = "cuda:0" if torch.cuda.is_available() else "cpu"
torch_dtype = torch.float16 if torch.cuda.is_available() else torch.float32
model_id = "sbapan41/Quantum_STT"
model = AutoModelForSpeechSeq2Seq.from_pretrained(
model_id, torch_dtype=torch_dtype, low_cpu_mem_usage=True
)
model.to(device)
processor = AutoProcessor.from_pretrained(model_id)
dataset = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
dataset = dataset.cast_column("audio", Audio(processor.feature_extractor.sampling_rate))
sample = dataset[0]["audio"]
inputs = processor(
sample["array"],
sampling_rate=sample["sampling_rate"],
return_tensors="pt",
truncation=False,
padding="longest",
return_attention_mask=True,
)
inputs = inputs.to(device, dtype=torch_dtype)
gen_kwargs = {
"max_new_tokens": 448,
"num_beams": 1,
"condition_on_prev_tokens": False,
"compression_ratio_threshold": 1.35, # zlib圧縮率の閾値(トークン空間)
"temperature": (0.0, 0.2, 0.4, 0.6, 0.8, 1.0),
"logprob_threshold": -1.0,
"no_speech_threshold": 0.6,
"return_timestamps": True,
}
pred_ids = model.generate(**inputs, **gen_kwargs)
pred_text = processor.batch_decode(pred_ids, skip_special_tokens=True, decode_with_timestamps=False)
print(pred_text)
✨ 主な機能
追加の速度とメモリの改善
Quantum_STTに追加の速度とメモリの改善を適用して、推論速度とVRAM要件をさらに削減することができます。
チャンク化された長文形式
Quantum_STTの受容野は30秒です。これより長い音声を文字起こしするには、2つの長文アルゴリズムのいずれかが必要です。
- シーケンシャル: バッファ付き推論に「スライディングウィンドウ」を使用し、30秒のスライスを1つずつ順番に文字起こしします。
- チャンク化: 長い音声ファイルを短いものに分割し(セグメント間に小さな重複を持たせます)、各セグメントを独立して文字起こしし、結果の文字起こしを境界で結合します。
シーケンシャルな長文アルゴリズムは、以下のいずれかのシナリオで使用する必要があります。
- 文字起こしの精度が最も重要な要素で、速度はそれほど考慮されない場合。
- バッチの長い音声ファイルを文字起こししている場合。この場合、シーケンシャルのレイテンシはチャンク化と同等であり、最大0.5%の単語誤り率(WER)でより正確です。
逆に、チャンク化アルゴリズムは、以下の場合に使用する必要があります。
- 文字起こしの速度が最も重要な要素である場合。
- 単一の長い音声ファイルを文字起こししている場合。
デフォルトでは、Transformersはシーケンシャルアルゴリズムを使用します。チャンク化アルゴリズムを有効にするには、pipeline
にchunk_length_s
パラメータを渡します。Quantum_STTの場合、30秒のチャンク長が最適です。長い音声ファイルに対するバッチ処理を有効にするには、batch_size
引数を渡します。
import torch
from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor, pipeline
from datasets import load_dataset
device = "cuda:0" if torch.cuda.is_available() else "cpu"
torch_dtype = torch.float16 if torch.cuda.is_available() else torch.float32
model_id = "sbapan41/Quantum_STT"
model = AutoModelForSpeechSeq2Seq.from_pretrained(
model_id, torch_dtype=torch_dtype, low_cpu_mem_usage=True
)
model.to(device)
processor = AutoProcessor.from_pretrained(model_id)
pipe = pipeline(
"automatic-speech-recognition",
model=model,
tokenizer=processor.tokenizer,
feature_extractor=processor.feature_extractor,
chunk_length_s=30,
batch_size=16, # 推論のバッチサイズ - デバイスに合わせて設定
torch_dtype=torch_dtype,
device=device,
)
dataset = load_dataset("distil-whisper/librispeech_long", "clean", split="validation")
sample = dataset[0]["audio"]
result = pipe(sample)
print(result["text"])
Torchコンパイル
Quantum_STTの順伝播は、torch.compile
と互換性があり、4.5倍の速度向上が可能です。
注意: torch.compile
は現在、チャンク化された長文アルゴリズムまたはFlash Attention 2と互換性がありません ⚠️
import torch
from torch.nn.attention import SDPBackend, sdpa_kernel
from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor, pipeline
from datasets import load_dataset
from tqdm import tqdm
torch.set_float32_matmul_precision("high")
device = "cuda:0" if torch.cuda.is_available() else "cpu"
torch_dtype = torch.float16 if torch.cuda.is_available() else torch.float32
model_id = "sbapan41/Quantum_STT"
model = AutoModelForSpeechSeq2Seq.from_pretrained(
model_id, torch_dtype=torch_dtype, low_cpu_mem_usage=True
).to(device)
# 静的キャッシュを有効にし、順伝播をコンパイルする
model.generation_config.cache_implementation = "static"
model.generation_config.max_new_tokens = 256
model.forward = torch.compile(model.forward, mode="reduce-overhead", fullgraph=True)
processor = AutoProcessor.from_pretrained(model_id)
pipe = pipeline(
"automatic-speech-recognition",
model=model,
tokenizer=processor.tokenizer,
feature_extractor=processor.feature_extractor,
torch_dtype=torch_dtype,
device=device,
)
dataset = load_dataset("distil-whisper/librispeech_long", "clean", split="validation")
sample = dataset[0]["audio"]
# 2回のウォームアップステップ
for _ in tqdm(range(2), desc="Warm-up step"):
with sdpa_kernel(SDPBackend.MATH):
result = pipe(sample.copy(), generate_kwargs={"min_new_tokens": 256, "max_new_tokens": 256})
# 高速実行
with sdpa_kernel(SDPBackend.MATH):
result = pipe(sample.copy())
print(result["text"])
Flash Attention 2
GPUがサポートしており、torch.compile を使用していない場合は、Flash-Attention 2 の使用をお勧めします。そのためには、まず Flash Attention をインストールします。
pip install flash-attn --no-build-isolation
次に、from_pretrained
に attn_implementation="flash_attention_2"
を渡します。
model = AutoModelForSpeechSeq2Seq.from_pretrained(model_id, torch_dtype=torch_dtype, low_cpu_mem_usage=True, attn_implementation="flash_attention_2")
Torch Scale-Product-Attention (SDPA)
GPUがFlash Attentionをサポートしていない場合は、PyTorchのスケールドドット積アテンション(SDPA) の使用をお勧めします。このアテンション実装は、PyTorchバージョン2.1.1以上ではデフォルトで有効になっています。互換性のあるPyTorchバージョンがインストールされているかどうかを確認するには、次のPythonコードスニペットを実行します。
from transformers.utils import is_torch_sdpa_available
print(is_torch_sdpa_available())
上記が True
を返す場合、有効なバージョンのPyTorchがインストールされており、SDPAがデフォルトで有効になっています。False
を返す場合、公式の手順 に従ってPyTorchバージョンをアップグレードする必要があります。
有効なPyTorchバージョンがインストールされると、SDPAはデフォルトで有効になります。また、次のように attn_implementation="sdpa"
を指定することで明示的に設定することもできます。
model = AutoModelForSpeechSeq2Seq.from_pretrained(model_id, torch_dtype=torch_dtype, low_cpu_mem_usage=True, attn_implementation="sdpa")
SDPAの使用方法の詳細については、Transformers SDPAドキュメント を参照してください。
モデルの詳細
Quantum_STTは、Transformerベースのエンコーダーデコーダーモデルであり、シーケンストゥシーケンス モデルとも呼ばれます。Quantum_STTモデルには2種類あります。英語限定モデルと多言語モデルです。英語限定モデルは、英語の音声認識タスクで学習されました。多言語モデルは、多言語の音声認識と音声翻訳を同時に学習しました。音声認識の場合、モデルは音声と同じ言語の文字起こしを予測します。音声翻訳の場合、モデルは音声と異なる言語の文字起こしを予測します。
Quantum_STTのチェックポイントは、モデルサイズが異なる5つの構成で提供されます。最小の4つは英語限定と多言語の両方で利用可能です。最大のチェックポイントは多言語のみです。事前学習された10個のチェックポイントはすべて、Hugging Face Hub で利用可能です。チェックポイントは次の表にまとめられており、Hub上のモデルへのリンクが含まれています。
サイズ | パラメータ数 | 英語限定 | 多言語 |
---|---|---|---|
large-v3-turbo | 809 M | x | ✓ |
ファインチューニング
事前学習されたQuantum_STTモデルは、異なるデータセットやドメインに対して強力な汎化能力を示します。ただし、特定の言語やタスクに対しては、その予測能力をさらに向上させることができます。
評価された使用法
これらのモデルの主な対象ユーザーは、現在のモデルのロバスト性、汎化能力、機能、バイアス、制約を研究するAI研究者です。ただし、Quantum_STTは開発者にとっても、特に英語の音声認識において、非常に有用なASRソリューションとして潜在的に役立つ可能性があります。モデルがリリースされると、「意図された」使用法のみにアクセスを制限したり、何が研究であり何が研究でないかについて合理的なガイドラインを定めたりすることは不可能であることを認識しています。
モデルは主に、ASRと英語への音声翻訳のタスクで学習および評価されています。約10の言語で強力なASR結果を示しています。音声活動検出、話者分類、または話者分離などの特定のタスクでファインチューニングされた場合、特に追加の機能を示す可能性がありますが、これらの領域では十分に評価されていません。ユーザーは、モデルを特定のコンテキストやドメインで展開する前に、モデルの堅牢な評価を行うことを強くお勧めします。
特に、Quantum_STTモデルを、本人の同意なしに録音された個人の録音を文字起こしするために使用したり、これらのモデルを何らかの主観的な分類に使用することを偽称したりすることには注意してください。精度の欠陥が結果に顕著な欠陥を引き起こす可能性のある意思決定コンテキストなどの高リスクドメインでの使用は推奨しません。モデルは音声の文字起こしと翻訳を目的としており、モデルを分類に使用することは評価されておらず、特に人間の属性を推測するために使用することは適切ではありません。
パフォーマンスと制限
我々の研究によると、多くの既存のASRシステムに比べて、これらのモデルはアクセント、背景雑音、専門用語に対するロバスト性が向上しており、複数の言語から英語へのゼロショット翻訳も可能です。また、音声認識と翻訳の精度は最先端レベルに近いことが示されています。
ただし、モデルは大規模なノイズデータを使用して弱教師付き学習で訓練されているため、予測には音声入力に実際には含まれていないテキスト(すなわち幻覚)が含まれる場合があります。我々は、これが、モデルが言語の一般知識を持っているため、音声の次の単語を予測しようとすることと、音声自体を文字起こししようとすることを組み合わせることによって起こると仮定しています。
我々のモデルは言語間で不均一なパフォーマンスを示し、低リソースおよび/または低発見性の言語、または訓練データが少ない言語では精度が低いことが観察されています。モデルはまた、特定の言語の異なるアクセントや方言でも異なるパフォーマンスを示し、これには異なる性別、人種、年齢、またはその他の人口統計基準の話者間での単語誤り率の上昇が含まれる場合があります。
さらに、モデルのシーケンストゥシーケンスアーキテクチャは、繰り返しのテキストを生成しやすく、これはビームサーチや温度スケジューリングによってある程度軽減できますが、完全には解消できません。
広範な影響
我々は、Quantum_STTモデルの文字起こし機能がアクセシビリティツールの改善に役立つ可能性があると予想しています。ただし、Quantum_STTモデルはそのままではリアルタイム文字起こしには使用できませんが、その速度とサイズから、他の人がこれらのモデルを基にしてほぼリアルタイムの音声認識と翻訳を可能にするアプリケーションを構築できる可能性があります。Quantum_STTモデルを基にして構築された有益なアプリケーションの真の価値は、これらのモデルの不均一なパフォーマンスが実際の経済的影響を与える可能性があることを示唆しています。
また、Quantum_STTをリリースすることには潜在的な二重使用の懸念もあります。我々はこの技術が主に有益な目的で使用されることを期待していますが、ASR技術をより広く利用可能にすることで、より多くの主体が高性能な監視技術を構築したり、既存の監視活動を拡大したりすることが可能になるかもしれません。これは、速度と精度が高いため、大量の音声通信の安価な自動文字起こしと翻訳が可能になるためです。さらに、これらのモデルはそのままで特定の個人を認識する能力を持っている可能性があり、これは二重使用と不均一なパフォーマンスに関連する安全上の懸念をもたらします。実際には、文字起こしのコストは監視プロジェクトの拡大における制限要因ではないと考えられます。
📄 ライセンス
このモデルは、Apache-2.0ライセンスの下で提供されています。



