speechbrain.k2_integration.prepare_lang 模块

该模块包含用于为k2训练准备词典和语言模型的函数。它基于k2/icefall中的脚本prepare_lang.sh(Fangjun Kuang的工作)。原始脚本遵循Apache 2.0许可证。此脚本已修改以与SpeechBrain一起使用。

Modified by:
  • 皮埃尔·冠军 2023

  • 赵泽宇 2023

  • 乔治奥斯·卡拉卡西迪斯 2023

摘要

函数:

add_disambig_symbols

它在标记的末尾添加伪标记消歧符号#1、#2等,以确保所有发音都不同,并且没有一个发音是另一个发音的前缀。

add_self_loops

向FST的状态添加自环以通过它传播消歧符号。

generate_id_map

生成ID映射,即将符号映射到唯一ID。

get_tokens

从词汇表中获取标记。

get_words

从词典中获取单词。

lexicon_to_fst

将词典转换为FST(k2格式),每个单词的开头和结尾可以选择性地添加静音。

lexicon_to_fst_no_sil

将词典转换为FST(以k2格式)。

prepare_lang

此函数以词汇文件“$lang_dir/lexicon.txt”作为输入,该文件由单词和标记(即音素)组成,并执行以下操作:

write_mapping

将符号到ID的映射写入文件。

参考

speechbrain.k2_integration.prepare_lang.write_mapping(filename: str | Path, sym2id: Dict[str, int]) None[source]

将符号到ID的映射写入文件。

NOTE: No need to implement read_mapping as it can be done through

k2.SymbolTable.from_file().

Parameters:
  • filename (str) – 保存映射的文件名。

  • sym2id (Dict[str, int]) – 一个将符号映射到ID的字典。

speechbrain.k2_integration.prepare_lang.get_tokens(lexicon: List[Tuple[str, List[str]]], sil_token='SIL', manually_add_sil_to_tokens=False) List[str][source]

从词典中获取标记。

Parameters:
  • 词汇表 (Lexicon) – 它是read_lexicon()的返回值。

  • sil_token (str) – 单词之间的可选静音标记。它不应出现在词汇表中,否则会导致错误。

  • manually_add_sil_to_tokens (bool) – 如果为真,将sil_token添加到tokens中。这在词典中不包含sil_token但tokens中需要它时非常有用。

Returns:

sorted_ans – 一个唯一标记的列表。

Return type:

列表[str]

speechbrain.k2_integration.prepare_lang.get_words(lexicon: List[Tuple[str, List[str]]]) List[str][source]

从词典中获取单词。

Parameters:

词汇表 (Lexicon) – 它是read_lexicon()的返回值。

Returns:

返回一个唯一单词的列表。

Return type:

sorted_ans

speechbrain.k2_integration.prepare_lang.add_disambig_symbols(lexicon: List[Tuple[str, List[str]]]) Tuple[List[Tuple[str, List[str]]], int][source]

它在标记的末尾添加伪标记消歧符号#1、#2等,以确保所有发音都不同,并且没有一个发音是另一个发音的前缀。

另请参阅 kaldi 中的 add_lex_disambig.pl。

Parameters:

词汇表 (Lexicon) – 它由 read_lexicon() 返回。

Returns:

  • ans – 带有消歧符号的输出词典

  • max_disambig – 出现在词典中的最大消歧符号的ID

speechbrain.k2_integration.prepare_lang.generate_id_map(symbols: List[str]) Dict[str, int][source]

生成ID映射,即将符号映射到唯一ID。

Parameters:

symbols (List[str]) – 一组唯一的符号列表。

Return type:

一个包含符号和ID之间映射的字典。

speechbrain.k2_integration.prepare_lang.add_self_loops(arcs: List[List[Any]], disambig_token: int, disambig_word: int) List[List[Any]][source]

向FST的状态添加自环以传播消歧符号。它们被添加到每个状态上,这些状态至少有一条出弧具有非ε输出符号。

另请参见Kaldi中的fstaddselfloops.pl。一个区别是 Kaldi使用OpenFst风格的FST,并且它有多个最终状态。 此函数使用k2风格的FST,并且不需要向最终状态添加自环。

自循环的输入标签是disambig_token,而输出标签是disambig_word

Parameters:
  • arcs (List[List[Any]]) – 一个列表的列表。子列表包含 [src_state, dest_state, label, aux_label, score]

  • disambig_token (int) – 这是符号 #0 的令牌 ID。

  • disambig_word (int) – 这是符号 #0 的单词ID。

Return type:

返回包含自循环的新arcs

speechbrain.k2_integration.prepare_lang.lexicon_to_fst(lexicon: List[Tuple[str, List[str]]], token2id: Dict[str, int], word2id: Dict[str, int], sil_token: str = 'SIL', sil_prob: float = 0.5, need_self_loops: bool = False) k2.Fsa[source]

将词典转换为FST(以k2格式),每个单词的开头和结尾可以选择性地添加静音。

Parameters:
  • 词汇表 (Lexicon) – 输入的词汇表。另请参阅 read_lexicon()

  • token2id (Dict[str, int]) – 一个将令牌映射到ID的字典。

  • word2id (Dict[str, int]) – 一个将单词映射到ID的字典。

  • sil_token (str) – 静音标记。

  • sil_prob (float) – 在单词的开头和结尾添加静音的概率。

  • need_self_loops (bool) – 如果为True,则为具有非epsilon输出符号的状态添加自环,该状态至少有一个弧出。这个自环的输入标签是token2id["#0"],输出标签是word2id["#0"]

Returns:

fsa – 表示给定词典的FSA。

Return type:

k2.Fsa

speechbrain.k2_integration.prepare_lang.lexicon_to_fst_no_sil(lexicon: List[Tuple[str, List[str]]], token2id: Dict[str, int], word2id: Dict[str, int], need_self_loops: bool = False) k2.Fsa[source]

将词典转换为FST(以k2格式)。

Parameters:
  • 词汇表 (Lexicon) – 输入的词汇表。另请参阅 read_lexicon()

  • token2id (Dict[str, int]) – 一个将标记映射到ID的字典。

  • word2id (Dict[str, int]) – 一个将单词映射到ID的字典。

  • need_self_loops (bool) – 如果为True,则为具有非epsilon输出符号的状态添加自环 在至少一个从该状态出发的弧上。这个自环的输入标签是 token2id["#0"],输出标签是word2id["#0"]

Returns:

fsa – 表示给定词典的FSA。

Return type:

k2.Fsa

speechbrain.k2_integration.prepare_lang.prepare_lang(lang_dir, sil_token='SIL', sil_prob=0.5, cache=True)[source]

此函数将词汇文件“$lang_dir/lexicon.txt”作为输入,该文件包含单词和标记(即音素),并执行以下操作:

  1. 向词典中添加消歧符号并生成lexicon_disambig.txt

  2. 生成tokens.txt,即映射令牌到唯一整数的令牌表。

  3. 生成words.txt,将单词映射到唯一整数的单词表。

  4. 生成 L.pt,以 k2 格式。可以通过以下方式加载

    d = torch.load(“L.pt”) lexicon = k2.Fsa.from_dict(d)

  5. 生成 L_disambig.pt,格式为 k2。

Parameters:
  • lang_dir (str) – 用于存储输出文件和读取输入文件lexicon.txt的目录。

  • sil_token (str) – 静音标记。默认为“SIL”。

  • sil_prob (float) – 在单词开头和结尾添加静音的概率。 默认值为0.5。

  • cache (bool) – 是否从/到.pt格式加载/缓存。

Return type:

Example

>>> from speechbrain.k2_integration.prepare_lang import prepare_lang
>>> # Create a small lexicon containing only two words and write it to a file.
>>> lang_tmpdir = getfixture('tmpdir')
>>> lexicon_sample = '''hello h e l l o\nworld w o r l d'''
>>> lexicon_file = lang_tmpdir.join("lexicon.txt")
>>> lexicon_file.write(lexicon_sample)
>>> prepare_lang(lang_tmpdir)
>>> for expected_file in ["tokens.txt", "words.txt", "L.pt", "L_disambig.pt", "Linv.pt" ]:
...     assert os.path.exists(os.path.join(lang_tmpdir, expected_file))