Support printing input text and words after splitting (#376)

This commit is contained in:
Fangjun Kuang
2023-10-20 12:06:30 +08:00
committed by GitHub
parent 2a932aca86
commit 3ba9a4932f
3 changed files with 37 additions and 3 deletions

View File

@@ -76,7 +76,9 @@ static std::vector<int32_t> ConvertTokensToIds(
} }
Lexicon::Lexicon(const std::string &lexicon, const std::string &tokens, Lexicon::Lexicon(const std::string &lexicon, const std::string &tokens,
const std::string &punctuations, const std::string &language) { const std::string &punctuations, const std::string &language,
bool debug /*= false*/)
: debug_(debug) {
InitLanguage(language); InitLanguage(language);
InitTokens(tokens); InitTokens(tokens);
InitLexicon(lexicon); InitLexicon(lexicon);
@@ -102,6 +104,20 @@ std::vector<int64_t> Lexicon::ConvertTextToTokenIdsChinese(
const std::string &text) const { const std::string &text) const {
std::vector<std::string> words = SplitUtf8(text); std::vector<std::string> words = SplitUtf8(text);
if (debug_) {
fprintf(stderr, "Input text in string: %s\n", text.c_str());
fprintf(stderr, "Input text in bytes:");
for (uint8_t c : text) {
fprintf(stderr, " %02x", c);
}
fprintf(stderr, "\n");
fprintf(stderr, "After splitting to words:");
for (const auto &w : words) {
fprintf(stderr, " %s", w.c_str());
}
fprintf(stderr, "\n");
}
std::vector<int64_t> ans; std::vector<int64_t> ans;
auto sil = token2id_.at("sil"); auto sil = token2id_.at("sil");
@@ -134,6 +150,21 @@ std::vector<int64_t> Lexicon::ConvertTextToTokenIdsEnglish(
ToLowerCase(&text); ToLowerCase(&text);
std::vector<std::string> words = SplitUtf8(text); std::vector<std::string> words = SplitUtf8(text);
if (debug_) {
fprintf(stderr, "Input text (lowercase) in string: %s\n", text.c_str());
fprintf(stderr, "Input text in bytes:");
for (uint8_t c : text) {
fprintf(stderr, " %02x", c);
}
fprintf(stderr, "\n");
fprintf(stderr, "After splitting to words:");
for (const auto &w : words) {
fprintf(stderr, " %s", w.c_str());
}
fprintf(stderr, "\n");
}
int32_t blank = token2id_.at(" "); int32_t blank = token2id_.at(" ");
std::vector<int64_t> ans; std::vector<int64_t> ans;

View File

@@ -17,7 +17,8 @@ namespace sherpa_onnx {
class Lexicon { class Lexicon {
public: public:
Lexicon(const std::string &lexicon, const std::string &tokens, Lexicon(const std::string &lexicon, const std::string &tokens,
const std::string &punctuations, const std::string &language); const std::string &punctuations, const std::string &language,
bool debug = false);
std::vector<int64_t> ConvertTextToTokenIds(const std::string &text) const; std::vector<int64_t> ConvertTextToTokenIds(const std::string &text) const;
@@ -45,6 +46,7 @@ class Lexicon {
std::unordered_set<std::string> punctuations_; std::unordered_set<std::string> punctuations_;
std::unordered_map<std::string, int32_t> token2id_; std::unordered_map<std::string, int32_t> token2id_;
Language language_; Language language_;
bool debug_;
// //
}; };

View File

@@ -21,7 +21,8 @@ class OfflineTtsVitsImpl : public OfflineTtsImpl {
explicit OfflineTtsVitsImpl(const OfflineTtsConfig &config) explicit OfflineTtsVitsImpl(const OfflineTtsConfig &config)
: model_(std::make_unique<OfflineTtsVitsModel>(config.model)), : model_(std::make_unique<OfflineTtsVitsModel>(config.model)),
lexicon_(config.model.vits.lexicon, config.model.vits.tokens, lexicon_(config.model.vits.lexicon, config.model.vits.tokens,
model_->Punctuations(), model_->Language()) {} model_->Punctuations(), model_->Language(),
config.model.debug) {}
GeneratedAudio Generate(const std::string &text, GeneratedAudio Generate(const std::string &text,
int64_t sid = 0) const override { int64_t sid = 0) const override {