From 4853761542ed4dbd38bee918c35c5d936368b077 Mon Sep 17 00:00:00 2001 From: Hui Zhang Date: Tue, 18 May 2021 14:21:44 +0800 Subject: [PATCH] add text normlization (#620) * add text normlization * add space --- doc/images/jieba_tags.png | Bin 0 -> 47337 bytes ...asr_postprocess.md => asr_text_backend.md} | 4 +- doc/src/benchmark.md | 3 +- doc/src/chinese_syllable.md | 4 +- doc/src/dataset.md | 6 +++ doc/src/ngram_lm.md | 2 +- doc/src/tools.md | 4 ++ ...ext_front_end.md => tts_text_front_end.md} | 45 +++++++++++++++++- 8 files changed, 59 insertions(+), 9 deletions(-) create mode 100644 doc/images/jieba_tags.png rename doc/src/{asr_postprocess.md => asr_text_backend.md} (98%) create mode 100644 doc/src/tools.md rename doc/src/{text_front_end.md => tts_text_front_end.md} (69%) diff --git a/doc/images/jieba_tags.png b/doc/images/jieba_tags.png new file mode 100644 index 0000000000000000000000000000000000000000..a74a4ac884e90a91c61ad2dbcd4b2b8c15e66089 GIT binary patch literal 47337 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 literal 0 HcmV?d00001 diff --git a/doc/src/asr_postprocess.md b/doc/src/asr_text_backend.md similarity index 98% rename from doc/src/asr_postprocess.md rename to doc/src/asr_text_backend.md index 0c84181d1..879e56f8a 100644 --- a/doc/src/asr_postprocess.md +++ b/doc/src/asr_text_backend.md @@ -1,4 +1,4 @@ -# ASR PostProcess +# ASR Text Backend 1. [Text Segmentation](text_front_end#text segmentation) 2. Text Corrector @@ -98,4 +98,4 @@ ## Text Filter -* 敏感词(黄暴、涉政、违法违禁等) +* 敏感词(黄暴、涉政、违法违禁等) \ No newline at end of file diff --git a/doc/src/benchmark.md b/doc/src/benchmark.md index 1f78223cb..f3af25552 100644 --- a/doc/src/benchmark.md +++ b/doc/src/benchmark.md @@ -4,7 +4,7 @@ We compare the training time with 1, 2, 4, 8 Tesla V100 GPUs (with a subset of LibriSpeech samples whose audio durations are between 6.0 and 7.0 seconds). And it shows that a **near-linear** acceleration with multiple GPUs has been achieved. In the following figure, the time (in seconds) cost for training is printed on the blue bars. -
+ | # of GPU | Acceleration Rate | | -------- | --------------: | @@ -14,3 +14,4 @@ We compare the training time with 1, 2, 4, 8 Tesla V100 GPUs (with a subset of L | 8 | 6.95 X | `utils/profile.sh` provides such a demo profiling tool, you can change it as need. + diff --git a/doc/src/chinese_syllable.md b/doc/src/chinese_syllable.md index 7ccfe3dae..676ecb531 100644 --- a/doc/src/chinese_syllable.md +++ b/doc/src/chinese_syllable.md @@ -13,8 +13,6 @@ There are a total of 410 common pinyin syllables. - - * [Rare syllable](https://resources.allsetlearning.com/chinese/pronunciation/Rare_syllable) * [Chinese Pronunciation: The Complete Guide for Beginner](https://www.digmandarin.com/chinese-pronunciation-guide.html) @@ -50,4 +48,4 @@ ## Zhuyin * [Bopomofo](https://en.wikipedia.org/wiki/Bopomofo) -* [Zhuyin table](https://en.wikipedia.org/wiki/Zhuyin_table) +* [Zhuyin table](https://en.wikipedia.org/wiki/Zhuyin_table) \ No newline at end of file diff --git a/doc/src/dataset.md b/doc/src/dataset.md index 231773a9b..d70d0e0d2 100644 --- a/doc/src/dataset.md +++ b/doc/src/dataset.md @@ -13,3 +13,9 @@ * [Tatoeba](https://tatoeba.org/cmn) **Tatoeba is a collection of sentences and translations.** It's collaborative, open, free and even addictive. An open data initiative aimed at translation and speech recognition. + + + +### ASR Noise + +* [asr-noises](https://github.com/speechio/asr-noises) \ No newline at end of file diff --git a/doc/src/ngram_lm.md b/doc/src/ngram_lm.md index 119a3b21c..07aa5411c 100644 --- a/doc/src/ngram_lm.md +++ b/doc/src/ngram_lm.md @@ -83,4 +83,4 @@ Please notice that the released language models only contain Chinese simplified ``` build/bin/build_binary ./result/people2014corpus_words.arps ./result/people2014corpus_words.klm - ``` + ``` \ No newline at end of file diff --git a/doc/src/tools.md b/doc/src/tools.md new file mode 100644 index 000000000..4ec09f6a2 --- /dev/null +++ b/doc/src/tools.md @@ -0,0 +1,4 @@ +# Useful Tools + +* [正则可视化和常用正则表达式](https://wangwl.net/static/projects/visualRegex/#) + diff --git a/doc/src/text_front_end.md b/doc/src/tts_text_front_end.md similarity index 69% rename from doc/src/text_front_end.md rename to doc/src/tts_text_front_end.md index 64d5cdb0f..6eb9ae5d9 100644 --- a/doc/src/text_front_end.md +++ b/doc/src/tts_text_front_end.md @@ -13,6 +13,37 @@ There are various libraries including some of the most popular ones like NLTK, S ## Text Normalization(文本正则) +The **basic preprocessing steps** that occur in English NLP, including data cleaning, stemming/lemmatization, tokenization and stop words. **not all of these steps are necessary for Chinese text data!** + +### Lexicon Normalization + +There’s a concept similar to stems in this language, and they’re called Radicals. **Radicals are basically the building blocks of Chinese characters.** All Chinese characters are made up of a finite number of components which are put together in different orders and combinations. Radicals are usually the leftmost part of the character. There are around 200 radicals in Chinese, and they are used to index and categorize characters. + +Therefore, procedures like stemming and lemmatization are not useful for Chinese text data because seperating the radicals would **change the word’s meaning entirely**. + +### Tokenization + +**Tokenizing breaks up text data into shorter pre-set strings**, which help build context and meaning for the machine learning model. + +These “tags” label the part of speech. There are 24 part of speech tags and 4 proper name category labels in the `**jieba**` package’s existing dictionary. + + + +### Stop Words + +In NLP, **stop words are “meaningless” words** that make the data too noisy or ambiguous. + +Instead of manually removing them, you could import the `**stopwordsiso**` package for a full list of Chinese stop words. More information can be found [here](https://pypi.org/project/stopwordsiso/). And with this, we can easily create code to filter out any stop words in large text data. + +```python +!pip install stopwordsiso +import stopwordsiso +from stopwordsiso import stopwords +stopwords(["zh"]) # Chinese +``` + + + 文本正则化 文本正则化主要是讲非标准词(NSW)进行转化,比如: 数字、电话号码: 10086 -> 一千零八十六/幺零零八六 @@ -25,6 +56,14 @@ There are various libraries including some of the most popular ones like NLTK, S * https://github.com/speechio/chinese_text_normalization +* [vinorm](https://github.com/NoahDrisort/vinorm) [cpp_verion](https://github.com/NoahDrisort/vinorm_cpp_version) + + Python package for text normalization, use for frontend of Text-to-speech Reseach + +* https://github.com/candlewill/CNTN + + This is a ChiNese Text Normalization (CNTN) tool for Text-to-speech system, which is based on [sparrowhawk](https://github.com/google/sparrowhawk). + ## Word Segmentation(分词) @@ -42,6 +81,7 @@ There are various libraries including some of the most popular ones like NLTK, S * https://github.com/thunlp/THULAC-Python * https://github.com/fxsjy/jieba * CRF++ +* https://github.com/isnowfy/snownlp ### MMSEG * [MMSEG: A Word Identification System for Mandarin Chinese Text Based on Two Variants of the Maximum Matching Algorithm](http://technology.chtsai.org/mmseg/) @@ -101,8 +141,7 @@ LP -> LO -> L1(#1) -> L2(#2) -> L3(#3) -> L4(#4) -> L5 -> L6 -> L7 常用方法使用的是级联CRF,首先预测如果是PW,再继续预测是否是PPH,再预测是否是IPH -
- + 论文: 2015 .Ding Et al. - Automatic Prosody Prediction For Chinese Speech Synthesis Using BLSTM-RNN and Embedding Features @@ -148,3 +187,5 @@ TN: 基于规则的方法 ## Reference * [Text Front End](https://slyne.github.io/%E5%85%AC%E5%BC%80%E8%AF%BE/2020/10/03/TTS1/) +* [Chinese Natural Language (Pre)processing: An Introduction](https://towardsdatascience.com/chinese-natural-language-pre-processing-an-introduction-995d16c2705f) +* [Beginner’s Guide to Sentiment Analysis for Simplified Chinese using SnowNLP](https://towardsdatascience.com/beginners-guide-to-sentiment-analysis-for-simplified-chinese-using-snownlp-ce88a8407efb) \ No newline at end of file