Transformers 文件
Wav2Vec2Phoneme
並獲得增強的文件體驗
開始使用
Wav2Vec2Phoneme
概述
Wav2Vec2Phoneme 模型是由 Qiantong Xu, Alexei Baevski, Michael Auli 在 《簡單有效的零樣本跨語言音素識別》(Xu et al., 2021) 中提出的。
論文摘要如下:
自訓練、自監督預訓練和無監督學習的最新進展使得在沒有任何標註資料的情況下,也能實現效能良好的語音識別系統。然而,在許多情況下,相關語言存在可用的標註資料,但這些方法並未加以利用。本文透過微調多語言預訓練的 wav2vec 2.0 模型來轉錄未見過的語言,從而擴充套件了之前關於零樣本跨語言遷移學習的工作。這是透過使用發音特徵將訓練語言的音素對映到目標語言來實現的。實驗表明,這種簡單的方法顯著優於以往引入特定任務架構且僅使用單語預訓練模型部分內容的工作。
相關檢查點可在 https://huggingface.co/models?other=phoneme-recognition 下找到。
該模型由 patrickvonplaten 貢獻
原始程式碼可以在此處找到。
使用技巧
- Wav2Vec2Phoneme 使用與 Wav2Vec2 完全相同的架構
- Wav2Vec2Phoneme 是一種語音模型,它接受一個浮點陣列,該陣列對應於語音訊號的原始波形。
- Wav2Vec2Phoneme 模型使用連線主義時間分類(CTC)進行訓練,因此模型輸出必須使用 Wav2Vec2PhonemeCTCTokenizer 進行解碼。
- Wav2Vec2Phoneme 可以同時在多種語言上進行微調,並在一次前向傳播中解碼未見過的語言為音素序列
- 預設情況下,模型輸出一個音素序列。為了將音素轉換為單詞序列,應該使用字典和語言模型。
Wav2Vec2Phoneme 的架構基於 Wav2Vec2 模型,有關 API 參考,請查閱 Wav2Vec2 的文件頁面,除了分詞器。
Wav2Vec2PhonemeCTCTokenizer
class transformers.Wav2Vec2PhonemeCTCTokenizer
< 源 >( vocab_file bos_token = '<s>' eos_token = '</s>' unk_token = '<unk>' pad_token = '<pad>' phone_delimiter_token = ' ' word_delimiter_token = None do_phonemize = True phonemizer_lang = 'en-us' phonemizer_backend = 'espeak' **kwargs )
引數
- vocab_file (
str) — 包含詞彙表的檔案。 - bos_token (
str, 可選, 預設為"<s>") — 句子起始符。 - eos_token (
str, 可選, 預設為"</s>") — 句子結束符。 - unk_token (
str, 可選, 預設為"<unk>") — 未知標記。詞彙表中不存在的標記無法轉換為 ID,將設定為此標記。 - pad_token (
str, 可選, 預設為"<pad>") — 用於填充的標記,例如在對不同長度的序列進行批處理時。 - do_phonemize (
bool, 可選, 預設為True) — 分詞器是否應對輸入進行音素化。僅當將音素序列傳遞給分詞器時,do_phonemize才應設定為False。 - phonemizer_lang (
str, 可選, 預設為"en-us") — 分詞器應將輸入文字音素化為的音素集語言。 - phonemizer_backend (
str, 可選. 預設為"espeak") — 音素化庫將使用的後端音素化庫。預設為espeak-ng。有關更多資訊,請參閱 音素化包。 - **kwargs — 額外傳遞給 PreTrainedTokenizer 的關鍵字引數。
構造一個 Wav2Vec2PhonemeCTC 分詞器。
此分詞器繼承自 PreTrainedTokenizer,其中包含一些主要方法。使用者應參閱超類以獲取有關此類方法的更多資訊。
__call__
< 源 >( text: typing.Union[str, list[str], list[list[str]], NoneType] = None text_pair: typing.Union[str, list[str], list[list[str]], NoneType] = None text_target: typing.Union[str, list[str], list[list[str]], NoneType] = None text_pair_target: typing.Union[str, list[str], list[list[str]], NoneType] = None add_special_tokens: bool = True padding: typing.Union[bool, str, transformers.utils.generic.PaddingStrategy] = False truncation: typing.Union[bool, str, transformers.tokenization_utils_base.TruncationStrategy, NoneType] = None max_length: typing.Optional[int] = None stride: int = 0 is_split_into_words: bool = False pad_to_multiple_of: typing.Optional[int] = None padding_side: typing.Optional[str] = None return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None return_token_type_ids: typing.Optional[bool] = None return_attention_mask: typing.Optional[bool] = None return_overflowing_tokens: bool = False return_special_tokens_mask: bool = False return_offsets_mapping: bool = False return_length: bool = False verbose: bool = True **kwargs ) → BatchEncoding
引數
- text (
str,list[str],list[list[str]], 可選) — 要編碼的序列或序列批次。每個序列可以是一個字串或一個字串列表(預分詞字串)。如果序列以字串列表(預分詞)形式提供,則必須設定is_split_into_words=True(以消除與序列批次的歧義)。 - text_pair (
str,list[str],list[list[str]], 可選) — 要編碼的序列或序列批次。每個序列可以是一個字串或一個字串列表(預分詞字串)。如果序列以字串列表(預分詞)形式提供,則必須設定is_split_into_words=True(以消除與序列批次的歧義)。 - text_target (
str,list[str],list[list[str]], 可選) — 要編碼為目標文字的序列或序列批次。每個序列可以是一個字串或一個字串列表(預分詞字串)。如果序列以字串列表(預分詞)形式提供,則必須設定is_split_into_words=True(以消除與序列批次的歧義)。 - text_pair_target (
str,list[str],list[list[str]], 可選) — 要編碼為目標文字的序列或序列批次。每個序列可以是一個字串或一個字串列表(預分詞字串)。如果序列以字串列表(預分詞)形式提供,則必須設定is_split_into_words=True(以消除與序列批次的歧義)。 - add_special_tokens (
bool, 可選, 預設為True) — 編碼序列時是否新增特殊標記。這將使用底層PretrainedTokenizerBase.build_inputs_with_special_tokens函式,該函式定義了哪些標記會自動新增到輸入 ID。如果你想自動新增bos或eos標記,這會很有用。 - padding (
bool,str或 PaddingStrategy, 可選, 預設為False) — 啟用和控制填充。接受以下值:True或'longest': 填充到批次中最長的序列(如果只提供一個序列,則不填充)。'max_length': 填充到由引數max_length指定的最大長度,如果未提供該引數,則填充到模型可接受的最大輸入長度。False或'do_not_pad'(預設): 不填充(即可以輸出具有不同長度序列的批次)。
- truncation (
bool,str或 TruncationStrategy, 可選, 預設為False) — 啟用和控制截斷。接受以下值:True或'longest_first': 截斷到由引數max_length指定的最大長度,如果未提供該引數,則截斷到模型可接受的最大輸入長度。如果提供一對序列(或一批序列),這將逐個標記進行截斷,從對中最長的序列中移除一個標記。'only_first': 截斷到由引數max_length指定的最大長度,如果未提供該引數,則截斷到模型可接受的最大輸入長度。如果提供一對序列(或一批序列),這將僅截斷一對中的第一個序列。'only_second': 截斷到由引數max_length指定的最大長度,如果未提供該引數,則截斷到模型可接受的最大輸入長度。如果提供一對序列(或一批序列),這將僅截斷一對中的第二個序列。False或'do_not_truncate'(預設): 不截斷(即可以輸出序列長度大於模型最大允許輸入大小的批次)。
- max_length (
int, 可選) — 控制截斷/填充引數之一將使用的最大長度。如果未設定或設定為
None,這將使用預定義的模型最大長度(如果截斷/填充引數之一需要最大長度)。如果模型沒有特定的最大輸入長度(如 XLNet),則截斷/填充到最大長度將被停用。 - stride (
int, 可選, 預設為 0) — 如果與max_length一起設定為一個數字,則當return_overflowing_tokens=True時返回的溢位標記將包含來自截斷序列末尾的一些標記,以提供截斷序列和溢位序列之間的一些重疊。此引數的值定義重疊標記的數量。 - is_split_into_words (
bool, 可選, 預設為False) — 輸入是否已預分詞(例如,按空格分割成單詞)。如果設定為True,分詞器假定輸入已分詞(例如,透過按空格分割),然後進行分詞。這對於 NER 或標記分類很有用。 - pad_to_multiple_of (
int, 可選) — 如果設定,將序列填充到所提供值的倍數。需要啟用padding。這對於在 NVIDIA 硬體上啟用計算能力>= 7.5(Volta) 的 Tensor Core 尤其有用。 - padding_side (
str, 可選) — 模型應應用填充的一側。應在 [‘right’, ‘left’] 之間選擇。預設值取自同名的類屬性。 - return_tensors (
str或 TensorType, 可選) — 如果設定,將返回張量而不是 Python 整數列表。可接受的值為:'tf': 返回 TensorFlowtf.constant物件。'pt': 返回 PyTorchtorch.Tensor物件。'np': 返回 Numpynp.ndarray物件。
- return_token_type_ids (
bool, 可選) — 是否返回標記型別 ID。如果保留預設值,將根據特定分詞器的預設設定(由return_outputs屬性定義)返回標記型別 ID。 - return_attention_mask (
bool, 可選) — 是否返回注意力掩碼。如果保留預設值,將根據特定分詞器的預設設定(由return_outputs屬性定義)返回注意力掩碼。 - return_overflowing_tokens (
bool, 可選, 預設為False) — 是否返回溢位標記序列。如果提供一對輸入 ID 序列(或一批對),並且truncation_strategy = longest_first或True,則會引發錯誤,而不是返回溢位標記。 - return_special_tokens_mask (
bool, 可選, 預設為False) — 是否返回特殊標記掩碼資訊。 - return_offsets_mapping (
bool, 可選, 預設為False) — 是否返回每個標記的(char_start, char_end)。這僅在繼承自 PreTrainedTokenizerFast 的快速分詞器上可用,如果使用 Python 的分詞器,此方法將引發
NotImplementedError。 - return_length (
bool, 可選, 預設為False) — 是否返回編碼輸入品的長度。 - verbose (
bool, 可選, 預設為True) — 是否列印更多資訊和警告。 - **kwargs — 傳遞給
self.tokenize()方法。
一個 BatchEncoding,包含以下欄位:
-
input_ids — 要輸入到模型中的標記 ID 列表。
-
token_type_ids — 要輸入到模型中的標記型別 ID 列表(當
return_token_type_ids=True或如果 *“token_type_ids”* 在self.model_input_names中時)。 -
attention_mask — 指定模型應關注哪些標記的索引列表(當
return_attention_mask=True或如果 *“attention_mask”* 在self.model_input_names中時)。 -
overflowing_tokens — 溢位標記序列列表(當指定
max_length且return_overflowing_tokens=True時)。 -
num_truncated_tokens — 截斷標記的數量(當指定
max_length且return_overflowing_tokens=True時)。 -
special_tokens_mask — 0 和 1 的列表,其中 1 表示新增的特殊標記,0 表示常規序列標記(當
add_special_tokens=True且return_special_tokens_mask=True時)。 -
length — 輸入的長度(當
return_length=True時)
將一個或多個序列或一對或多對序列標記化並準備用於模型的主要方法。
batch_decode
< 源 >( sequences: typing.Union[list[int], list[list[int]], ForwardRef('np.ndarray'), ForwardRef('torch.Tensor'), ForwardRef('tf.Tensor')] skip_special_tokens: bool = False clean_up_tokenization_spaces: typing.Optional[bool] = None output_char_offsets: bool = False **kwargs ) → list[str] 或 ~models.wav2vec2.tokenization_wav2vec2_phoneme.Wav2Vec2PhonemeCTCTokenizerOutput
引數
- sequences (
Union[list[int], list[list[int]], np.ndarray, torch.Tensor, tf.Tensor]) — 標記化輸入 ID 列表。可透過__call__方法獲取。 - skip_special_tokens (
bool, 可選, 預設為False) — 解碼時是否移除特殊標記。 - clean_up_tokenization_spaces (
bool, 可選) — 是否清理分詞空間。 - output_char_offsets (
bool, 可選, 預設為False) — 是否輸出字元偏移量。字元偏移量可以與取樣率和模型下采樣率結合使用,以計算轉錄字元的時間戳。請檢視
~models.wav2vec2.tokenization_wav2vec2.decode的示例,以便更好地理解如何使用output_word_offsets。~model.wav2vec2_phoneme.tokenization_wav2vec2_phoneme.batch_decode以類似的方式與音素和批處理輸出一起使用。 - kwargs (附加關鍵字引數, 可選) — 將傳遞給底層模型特定的解碼方法。
返回
list[str] 或 ~models.wav2vec2.tokenization_wav2vec2_phoneme.Wav2Vec2PhonemeCTCTokenizerOutput
解碼後的句子。當 output_char_offsets == True 時,將是 ~models.wav2vec2.tokenization_wav2vec2_phoneme.Wav2Vec2PhonemeCTCTokenizerOutput。
透過呼叫 decode 將標記 ID 列表的列表轉換為字串列表。
解碼
< 源 >( token_ids: typing.Union[int, list[int], ForwardRef('np.ndarray'), ForwardRef('torch.Tensor'), ForwardRef('tf.Tensor')] skip_special_tokens: bool = False clean_up_tokenization_spaces: typing.Optional[bool] = None output_char_offsets: bool = False **kwargs ) → str 或 ~models.wav2vec2.tokenization_wav2vec2_phoneme.Wav2Vec2PhonemeCTCTokenizerOutput
引數
- token_ids (
Union[int, list[int], np.ndarray, torch.Tensor, tf.Tensor]) — 分詞後的輸入 ID 列表。可以透過__call__方法獲取。 - skip_special_tokens (
bool, 可選, 預設為False) — 解碼時是否移除特殊標記。 - clean_up_tokenization_spaces (
bool, 可選) — 是否清理分詞空格。 - output_char_offsets (
bool, 可選, 預設為False) — 是否輸出字元偏移量。字元偏移量可以與取樣率和模型下采樣率結合使用,以計算轉錄字元的時間戳。請檢視
~models.wav2vec2.tokenization_wav2vec2.decode的示例,以便更好地理解如何使用output_word_offsets。~model.wav2vec2_phoneme.tokenization_wav2vec2_phoneme.batch_decode與音素的使用方式相同。 - kwargs (附加關鍵字引數, 可選) — 將傳遞給底層模型特定的解碼方法。
返回
str 或 ~models.wav2vec2.tokenization_wav2vec2_phoneme.Wav2Vec2PhonemeCTCTokenizerOutput
解碼後的句子。當 output_char_offsets == True 時,將是 ~models.wav2vec2.tokenization_wav2vec2_phoneme.Wav2Vec2PhonemeCTCTokenizerOutput。
使用分詞器和詞彙表將 ID 序列轉換為字串,可以選擇移除特殊標記並清理分詞空間。
類似於執行 self.convert_tokens_to_string(self.convert_ids_to_tokens(token_ids))。