require instance of phonetization to be passed

This commit is contained in:
Brandon Thomas
2022-07-05 01:59:21 -04:00
parent cb435de2f3
commit 1ced59bfc0
2 changed files with 19 additions and 10 deletions
+5 -4
View File
@@ -2,13 +2,11 @@ from typing import List
from tts.text.pipeline.base_pipeline import BasePipeline
from tts.text.pipeline_components.input_parsing.parser import ArpabetSequence, GraphemeSequence, ParsedSequence, parse_grapheme_and_arpabet_sequence
from tts.text.pipeline_components.normalization.english_normalization import normalize_english
from tts.text.pipeline_components.phonetization.base_phonetization import BasePhonetization
from tts.text.pipeline_components.phonetization.cmudict import DEFAULT_CMUDICT_PATH, CMUDict
from tts.text.pipeline_components.phonetization.english_phonetization import EnglishPhonetization
from tts.text.pipeline_components.sequencing.english_symbols_v1 import SPACE_INTEGER_ENCODING, arpabet_to_sequence, symbols_to_sequence
_ENGLISH_DICTIONARY = CMUDict(DEFAULT_CMUDICT_PATH)
_ENGLISH_PHONETIZER = EnglishPhonetization(_ENGLISH_DICTIONARY)
class EnglishPipelineV1(BasePipeline):
"""
This is a new text pipeline for FakeYou that will be introduced in July 2022.
@@ -17,6 +15,9 @@ class EnglishPipelineV1(BasePipeline):
the model input expectations on both sides match one another.
"""
def __init__(self, phonetization: BasePhonetization):
self.phonetization = phonetization
def user_input_to_sequence(self, input_text: str) -> List[int]:
"""Convert raw user input into a numerical sequence for ML inference."""
@@ -45,7 +46,7 @@ class EnglishPipelineV1(BasePipeline):
updated_sequence.append(subsequence)
elif isinstance(subsequence, GraphemeSequence):
converted_sequence = _ENGLISH_PHONETIZER.try_convert_to_phonemes(subsequence.sequence)
converted_sequence = self.phonetization.try_convert_to_phonemes(subsequence.sequence)
updated_sequence.extend(converted_sequence)
return updated_sequence
+14 -6
View File
@@ -1,25 +1,33 @@
from tts.text.pipeline.english_pipeline_v1 import EnglishPipelineV1
from tts.text.pipeline_components.phonetization.cmudict import DEFAULT_CMUDICT_PATH, CMUDict
from tts.text.pipeline_components.phonetization.english_phonetization import EnglishPhonetization
class TestEnglishPipelineV1:
def build_pipeline_instance(self):
# NB: CMUDict used in production may differ
cmudict = CMUDict(DEFAULT_CMUDICT_PATH)
phonetization = EnglishPhonetization(cmudict)
return EnglishPipelineV1(phonetization)
def test_no_input(self):
pipeline = EnglishPipelineV1()
pipeline = self.build_pipeline_instance()
output = pipeline.user_input_to_sequence("")
assert output == []
def test_whitespace(self):
pipeline = EnglishPipelineV1()
pipeline = self.build_pipeline_instance()
output = pipeline.user_input_to_sequence(" \n \t ")
assert output == []
def test_single_word(self):
pipeline = EnglishPipelineV1()
pipeline = self.build_pipeline_instance()
output = pipeline.user_input_to_sequence("hello")
assert output == [106, 73, 117, 123] # NB: Arpabet encoded
def test_two_words(self):
pipeline = EnglishPipelineV1()
pipeline = self.build_pipeline_instance()
output = pipeline.user_input_to_sequence("hello hello")
assert output == [
106, 73, 117, 123, # NB: Arpabet encoded
@@ -28,7 +36,7 @@ class TestEnglishPipelineV1:
]
def test_two_words_with_arpabet_segment(self):
pipeline = EnglishPipelineV1()
pipeline = self.build_pipeline_instance()
output = pipeline.user_input_to_sequence("hello {HH AH0 L OW1}")
assert output == [
106, 73, 117, 123, # NB: Arpabet encoded
@@ -37,7 +45,7 @@ class TestEnglishPipelineV1:
]
def test_words_and_punctuation(self):
pipeline = EnglishPipelineV1()
pipeline = self.build_pipeline_instance()
output = pipeline.user_input_to_sequence("hello friends, welcome!")
assert output == [
106, 73, 117, 123, # NB: Arpabet encoded