Science Score: 44.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (1.5%) to scientific vocabulary
Repository
Basic Info
- Host: GitHub
- Owner: TingYi028
- License: apache-2.0
- Language: Python
- Default Branch: master
- Size: 61.2 MB
Statistics
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
- Releases: 0
Metadata Files
README.md
ASR & NER 開發指南
📖 概述
本專案包含自動語音識別 (ASR) 和命名實體識別 (NER) 兩個主要功能模組。
🔧 環境設定
本專案需分別建立兩個 Python3.10 環境,因 Nemo 與 Whisper 相關套件互斥,請分開安裝:
環境 1: Nemo 環境
bash
pip install -U nemo_toolkit["asr"]
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128
pip install seqeval datasets pytorch-crf
環境 2: Whisper 環境
bash
pip install -r requirements_Whisper.txt
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128
⚠️ 重要提醒
除非執行 Whisper 相關功能,否則所有操作皆於 Nemo 環境進行,僅在需要使用 Whisper 時才需切換至 Whisper 環境。
安裝ffmpeg(要弄環境變數)
創建資料夾及擺放必須文件
下載連結: 請見隨附txt檔
└── AICUP/
├── ASR/ # 自動語音辨識 (Automatic Speech Recognition)
│ ├── fintuned_model/
│ │ └── Speech_To_Text_Finetuning.nemo # parakeet-tdt-0.6b-v2.nemo 微調後模型(需要手動放置)
│ ├── nemo_experiments/ # nemo 微調預設存放位置
│ ├── test_result/ # 預測結果
│ │ ├── task1_answer_en.txt # task1 的答案 (英文)(需要手動放置,因為ASR存在一定隨機性,不放置會跑不出我們的結果)
│ │ └── task1_answer_en.json # task1 的答案 (英文時間戳)(需要手動放置,因為ASR存在一定隨機性,不放置會跑不出我們的結果)
│ ├── train_config/
│ │ └── speech_to_text_finetune.yaml # 微調參數設定檔
│ ├── lang_detect.py # 中英文分割程式
│ ├── parakeet_asr_predictor.py # 英文 ASR 預測
│ ├── speech_to_text_finetune.py # 英文 ASR 訓練
│ └── parakeet-tdt-0.6b-v2.nemo # 預訓練權重(需要手動放置)
│
├── ChineseASR/
│ ├── test_result/ # 預測結果
│ │ ├── task1_answer_zh.txt # task1 的答案 (中文)(需要手動放置,因為ASR存在一定隨機性,不放置會跑不出我們的結果)
│ │ └── task1_answer_zh.json # task1 的答案 (中文時間戳)(需要手動放置,因為ASR存在一定隨機性,不放置會跑不出我們的結果)
│ └── predict.py # 中文 ASR 預測
│
├── datasets/
│ ├── train80/
│ │ ├── audio/ # train1+train2 (英文,不含編號 80000 開始的) 的所有音檔(需要手動放置)
│ │ ├── audio_16k/ # 執行 createManifest.py 後的 16k 音檔(可手動放置或自己產生)
│ │ ├── audio_NoBGM/ # audio 內的音檔經過去人聲處理(可手動放置或自己產生)
│ │ ├── task1_answer.txt # train1+train2 (英文,不含編號 80000 開始的) 的轉錄檔合成(需要手動放置)
│ │ ├── task2_answer.txt # train1+train2 (英文,不含編號 80000 開始的) 的 task2 label(需要手動放置)
│ │ └── train_manifest.json # 執行 createManifest.py 後的 json檔
│ ├── val20/
│ │ ├── audio/ # val 的所有音檔(需要手動放置)
│ │ ├── audio_16k/ # 執行 createManifest.py 後的 16k 音檔(可手動放置或自己產生)
│ │ ├── audio_NoBGM/ # audio 內的音檔經過去人聲處理(可手動放置或自己產生)
│ │ ├── task1_answer.txt # 官方val文件(需要手動放置)
│ │ ├── task2_answer.txt # 官方val文件(需要手動放置)
│ │ └── val_manifest.json # 執行 createManifest.py 後的 json檔
│ ├── test/
│ │ ├── audio/ # test 的所有音檔(需要手動放置)
│ │ ├── audio_NoBGM/ # audio 內的音檔經過去人聲處理(需要手動放置)(可手動放置或自己產生)
│ │ ├── en/ # 使用 lang_detect.py 創建 (沒有去背景音)(可手動放置或自己產生)
│ │ └── zh/ # 使用 lang_detect.py 創建 (有去背景音)(可手動放置或自己產生)
│ ├── convert_audio.py # 轉換音訊至16k
│ ├── createManifest.py # 創建英文微調資料
│ └── rename_script.py # nobgm 改名
│
└── NER/ # 命名實體識別 (Named Entity Recognition)
├── Chinese/
│ ├── datasets/ # 所需所有資料 (中文 NER)
│ │ ├── createBIO.py # 創建NER需要的訓練資料
│ │ ├── chinese_bio.json # 訓練資料(可手動放置或自己產生)
│ │ ├── 中文增強task1.txt # 手動生成的資料 task1
│ │ └── 中文增強task2.txt # 手動生成的資料 task2
│ ├── test_result/ # 預測結果
│ │ └── task2_answer_zh.txt # task2 的答案 (中文)
│ ├── results_ner_microsoft/ # mdeberta-v3-base-crf 微調後模型(需要手動放置)
│ ├── train.py # 訓練 mdeberta-v3-base-crf
│ └── predict.py # 中文 NER 預測
└── Task2/ # 英文 NER (通常 Task2 指的是英文相關任務)
├── datasets/ # 所需所有資料 (英文 NER)
│ ├── createBIO.py # 創建NER需要的訓練資料
│ ├── train_bio.json # 訓練資料(可手動放置或自己產生)
│ ├── val_bio.json # 驗證資料(可手動放置或自己產生)
│ ├── prompt.txt # 生成資料使用的Prompt
│ └── augmented_300.txt # 生成的資料
├── test_result/ # 預測結果
│ └── task2_answer_en.txt # task2 的答案 (英文)
├── results_ner_microsoft/ # mdeberta-v3-base-crf 微調後模型 (需要手動放置)
├── train.py # 訓練 deberta-v3-large-crf
├── predict.py # 英文 NER 預測
├── stacking_predict.py # stacking(未使用)
└── stacking_trainer.py # stacking(未使用)
🎵 ASR 自動語音識別
步驟 1: 資料前處理
1.1 去除背景音樂
使用 Ultimate Vocal Remover 軟體去除音訊中的背景音樂。
主要設定: - 處理方法: MDX-Net - 分段大小: 256 - 重疊: Default - 輸出格式: WAV
模型選擇: - MDX-NET 模型: UVR-MDX-NET Inst HQ 3
選項設定: - ✅ GPU Conversion (GPU 轉換) - ⬜ Instrumental Only (僅伴奏) - ✅ Vocals Only (僅人聲) - ⬜ Sample Mode (30s) (樣本模式)
重新命名檔案:
將軟體產生的檔案名稱從 {id}_{origName}_(Vocals) 轉換回 {origName}
執行指令:
bash
cd AICUP/datasets
python rename_script.py
1.2 分離中文與英文音檔
使用語言檢測模型將音檔分離成中文和英文兩個部分。
修改 lang_detect.py 變數:
1. AUDIO_DIR: 去除背景音樂的音訊資料夾路徑
2. CHINESE_DIR: 中文音檔輸出路徑
3. ENGLISH_DIR: 英文音檔輸出路徑
執行指令:
bash
cd AICUP/ASR
python lang_detect.py
1.3 轉換音訊格式 & 產生 Manifest 檔案
注意: 僅處理英文音檔,中文不做訓練
將音訊轉換為 16kHz 單聲道格式並產生訓練所需的 manifest 檔案。
設定 createManifest.py 變數:
1. AUDIO_DIR: 去除背景音樂的音訊資料夾路徑
2. TRANSCRIPT_ORIGINAL: task1answer.txt 路徑
3. `MANIFESTOUTPUT: 輸出 MANIFEST 路徑
4.CONVERTEDAUDIODIR`: 輸出 16k 音訊路徑
執行指令:
bash
cd AICUP/datasets
python createManifest.py
步驟 2: 英文 ASR 訓練
2.1 設定訓練配置
修改 AICUP/ASR/train_config/speech_to_text_finetune.yaml 檔案中的 train_ds 和 validation_ds 的 manifest_filepath
2.2 下載預訓練模型
- 下載模型:parakeet-tdt-0.6b-v2.nemo
- 放置在
AICUP/ASR目錄下
2.3 執行訓練
bash
cd AICUP/ASR
python speech_to_text_finetune.py
步驟 3: 英文 ASR 預測
3.1 設定預測參數
python
parser.add_argument('--audio_dir', default="../datasets/Test/audio_16k", type=str, help='音頻文件目錄路徑')
parser.add_argument('--output', type=str, help='詳細輸出文件路徑')
parser.add_argument('--labels', default="../datasets/val/task1_answer.txt", type=str, help='標籤文件路徑(用於計算MER)若沒有可以不填')
parser.add_argument('--output_label', type=str, default='test_result/task1_answer_en.txt', help='輸出標籤文件路徑(預設為output_label.txt)')
parser.add_argument('--json_output', default="test_result/task1_answer_en.json", type=str, help='JSON時間戳輸出文件路徑')
parser.add_argument('--model', type=str, default=r'./fintuned_model/Speech_To_Text_Finetuning.nemo', help='模型名稱,若要使用不微調版本使用 AICUP/ASR/parakeet-tdt-0.6b-v2.nemo')
3.2 執行預測
bash
cd AICUP/ASR
python parakeet_asr_predictor.py
步驟 4: 中文 ASR 預測
4.1 設定 predict.py 參數
python
VAL_AUDIO_DATA_DIR = "要預測的音檔資料夾"
VAL_LABEL_FILE_PATH = "要預測的音檔Label"
OUTPUT_FILE_PATH = "輸出task1_answer.txt路徑"
OUTPUT_JSON_FILE_PATH = "輸出timestamp的路徑"
4.2 執行預測
bash
cd AICUP/ChineseASR
python predict.py
步驟 5: 整合英文與中文輸出結果
🏷️ NER 命名實體識別
英文 NER 訓練
1. 創建 BIO.json
進入 NER 資料集目錄:
bash
cd AICUP/NER/Task2/datasets
修改 createBIO.py,設定以下參數:
python
bio_json = convert_to_bio_json(
r'../../datasets/val/task1_answer.txt',
r'../../datasets/val/task2_answer.txt',
'./val_bio_raw.json'
)
training_data = convert_to_training_format(
bio_json,
'./val_bio.json'
)
參數說明:
- 第一個參數: task1 的 label 檔案路徑
- 第二個參數: task2 的 label 檔案路徑
- 第三個參數: raw bio 的輸出路徑
- 第四個參數: 用來訓練的 bio 輸出路徑
2. 修改訓練設定
修改 train.py 中的以下參數:
- train_file_path: 前面轉換出的 bio 檔案路徑
- eval_file_path: 前面轉換出的 bio 檔案路徑
- output_dir: 模型權重輸出資料夾路徑
3. 執行訓練
bash
python train.py
英文 NER 預測
1. 設定預測參數
修改 predict.py 中的以下參數:
- MODEL_PATH: CHECKPOINT 的資料夾路徑
- INPUT_JSON_PATH: ASR 輸出的帶有 _timestamp 後綴的 .json 檔案路徑
- OUTPUT_TXT_PATH: 輸出檔案路徑
2. 執行預測
執行 NER 預測腳本
中文 NER 訓練
1. 創建 BIO.json
進入中文 NER 資料集目錄:
bash
cd AICUP/NER/Chinese/datasets
修改 createBIO.py,設定參數:
python
bio_json = convert_to_bio_json(
r'../../datasets/val/task1_answer.txt',
r'../../datasets/val/task2_answer.txt',
'./val_bio_raw.json'
)
training_data = convert_to_training_format(
bio_json,
'./val_bio.json'
)
參數說明:
- 第一個參數: task1 的 label 檔案路徑
- 第二個參數: task2 的 label 檔案路徑
- 第三個參數: raw bio 的輸出路徑
- 第四個參數: 用來訓練的 bio 輸出路徑
2. 修改訓練設定
修改 train.py 中的以下參數:
- train_file_path: 前面轉換出的 bio 檔案路徑
- eval_file_path: 前面轉換出的 bio 檔案路徑
- output_dir: 模型權重輸出資料夾路徑
3. 執行訓練
bash
python train.py
整合中文與英文 NER 結果
📝 注意事項
- 環境管理: 請確實分離 Nemo 和 Whisper 環境
- 路徑設定: 所有檔案路徑請根據實際環境調整
- 模型下載: 確保預訓練模型已正確下載並放置在指定位置
- 資料格式: 注意音訊檔案格式和採樣率要求
Owner
- Login: TingYi028
- Kind: user
- Repositories: 1
- Profile: https://github.com/TingYi028
Citation (CITATION.cff)
cff-version: 1.2.0
message: "If you use this software, please cite it as below."
title: "NeMo: a toolkit for Conversational AI and Large Language Models"
url: https://nvidia.github.io/NeMo/
repository-code: https://github.com/NVIDIA/NeMo
authors:
- family-names: Harper
given-names: Eric
- family-names: Majumdar
given-names: Somshubra
- family-names: Kuchaiev
given-names: Oleksii
- family-names: Jason
given-names: Li
- family-names: Zhang
given-names: Yang
- family-names: Bakhturina
given-names: Evelina
- family-names: Noroozi
given-names: Vahid
- family-names: Subramanian
given-names: Sandeep
- family-names: Nithin
given-names: Koluguri
- family-names: Jocelyn
given-names: Huang
- family-names: Jia
given-names: Fei
- family-names: Balam
given-names: Jagadeesh
- family-names: Yang
given-names: Xuesong
- family-names: Livne
given-names: Micha
- family-names: Dong
given-names: Yi
- family-names: Naren
given-names: Sean
- family-names: Ginsburg
given-names: Boris
GitHub Events
Total
- Push event: 1
- Public event: 1
Last Year
- Push event: 1
- Public event: 1
Dependencies
- fsspec ==2024.12.0
- huggingface_hub >=0.24
- numba *
- numpy >=1.22
- onnx >=1.7.0
- protobuf ==4.24.4
- python-dateutil *
- ruamel.yaml *
- scikit-learn *
- setuptools >=70.0.0
- tensorboard *
- text-unidecode *
- torch *
- tqdm >=4.41.0
- wget *
- wrapt *
- braceexpand *
- editdistance *
- einops *
- g2p_en *
- jiwer *
- kaldi-python-io *
- kaldiio *
- lhotse *
- librosa >=0.10.1
- marshmallow *
- optuna *
- packaging *
- pyannote.core *
- pyannote.metrics *
- pydub *
- pyloudnorm *
- resampy *
- ruamel.yaml *
- scipy >=0.14
- soundfile *
- sox <=1.5.0
- texterrors <1.0.0
- whisper_normalizer *
- einops *
- lhotse >=1.22.0
- librosa >=0.10.0
- matplotlib *
- pesq *
- pystoi *
- scipy >=0.14
- soundfile *
- bitsandbytes ==0.45.3
- datasets *
- einops *
- inflect *
- mediapy ==1.1.6
- pandas *
- sacremoses >=0.0.43
- sentencepiece <1.0.0
- accelerate *
- fastapi *
- nvidia-pytriton *
- pydantic-settings *
- tensorstore <0.1.72
- uvicorn *
- zarr >=2.18.2,<3.0.0
- Jinja2 *
- Sphinx *
- boto3 *
- latexcodec *
- numpy *
- pydata-sphinx-theme *
- sphinx-book-theme *
- sphinx-copybutton *
- sphinxcontrib-bibtex *
- sphinxext-opengraph *
- urllib3 *
- wrapt *
- nvidia-lm-eval *
- cloudpickle *
- fiddle *
- hydra-core >1.3,<=1.3.2
- lightning >2.2.1,<=2.4.0
- omegaconf <=2.3
- peft *
- torchmetrics >=0.11.0
- transformers >=4.51.0,<=4.52.0
- wandb *
- webdataset >=0.2.86
- addict *
- clip *
- decord *
- diffusers >=0.19.3
- einops_exts *
- imageio *
- kornia *
- megatron-energon ==5.2.0
- nerfacc >=0.5.3
- open_clip_torch ==2.24.0
- qwen_vl_utils *
- taming-transformers *
- torchdiffeq *
- torchsde *
- trimesh *
- accelerated-scan *
- boto3 *
- faiss-cpu *
- flask_restful *
- ftfy *
- gdown *
- h5py *
- ijson *
- jieba *
- markdown2 *
- matplotlib >=3.3.2
- megatron_core *
- nltk >=3.6.5
- numpy <2
- nvidia-modelopt >=0.25.0,<=0.29.0
- nvidia-resiliency-ext >=0.3.0,<1.0.0
- opencc *
- pangu *
- prettytable *
- rapidfuzz *
- rouge_score *
- sacrebleu *
- sentence_transformers *
- tensorstore <0.1.72
- tiktoken ==0.7.0
- unstructured ==0.14.9
- zarr >=2.18.2,<3.0.0
- nemo_run *
- jiwer >=2.0.0
- progress >=1.5
- tabulate >=0.8.7
- textdistance >=4.1.5
- tqdm *
- black * test
- click >=8.1 test
- coverage * test
- isort >5.1.0,<6.0.0 test
- parameterized * test
- pytest * test
- pytest-httpserver * test
- pytest-mock * test
- pytest-runner * test
- ruamel.yaml * test
- sphinx * test
- sphinxcontrib-bibtex * test
- wandb * test
- wget * test
- wrapt * test
- attrdict *
- cdifflib ==1.2.6
- einops *
- janome *
- jieba *
- kornia *
- librosa *
- matplotlib *
- nemo_text_processing *
- nltk *
- pandas *
- pypinyin *
- pypinyin-dict *
- seaborn *
- OpenCC *
- braceexpand *
- datasets *
- faiss-cpu *
- fiddle *
- h5py *
- hydra-core >1.3,<=1.3.2
- ijson *
- jieba *
- lightning >2.2.1
- matplotlib >=3.3.2
- omegaconf <=2.3
- onnx >=1.7.0
- pandas *
- pangu *
- rouge_score *
- sacrebleu *
- scikit-learn *
- transformers ==4.51.3
- vllm ==0.8.5.post1
- webdataset >=0.2.86
- wget *
- zarr >=2.18.2,<3.0.0
- pipinstall-Unemo_toolkit *
- pipinstallseqevaldatasetspytorch-crf *
- Jinja2 ==3.1.4
- MarkupSafe ==2.1.5
- PyYAML ==6.0.2
- RapidFuzz ==3.13.0
- audioread ==3.0.1
- certifi ==2025.4.26
- cffi ==1.17.1
- charset-normalizer ==3.4.2
- click ==8.2.1
- colorama ==0.4.6
- decorator ==5.2.1
- filelock ==3.13.1
- fsspec ==2024.6.1
- huggingface-hub ==0.17.3
- idna ==3.10
- jiwer ==3.1.0
- joblib ==1.5.1
- langdetect ==1.0.9
- lazy_loader ==0.4
- librosa ==0.11.0
- llvmlite ==0.44.0
- mpmath ==1.3.0
- msgpack ==1.1.0
- networkx ==3.3
- numba ==0.61.2
- numpy ==2.1.2
- opencc-python-reimplemented ==0.1.7
- packaging ==25.0
- pillow ==11.0.0
- pip ==23.2.1
- platformdirs ==4.3.8
- pooch ==1.8.2
- pycparser ==2.22
- regex ==2024.11.6
- requests ==2.32.3
- safetensors ==0.5.3
- scikit-learn ==1.7.0
- scipy ==1.15.3
- setuptools ==68.2.0
- six ==1.17.0
- soundfile ==0.13.1
- soxr ==0.5.0.post1
- sympy ==1.13.3
- threadpoolctl ==3.6.0
- tokenizers ==0.14.1
- tqdm ==4.67.1
- transformers ==4.35.0
- typing_extensions ==4.12.2
- urllib3 ==2.4.0
- wheel ==0.41.2
- joblib *
- librosa *
- requests *
- requests_oauthlib *
- sox *
- num2words *
- numpy <2.0.0
- nemo_toolkit *
- prettyprinter *
- pytest *
- flask *
- flask_cors *
- nemo_toolkit >=1.0.0rc1
- SoundFile *
- dash >=2.1.0
- dash_bootstrap_components >=1.0.3
- diff_match_patch *
- editdistance *
- jiwer *
- librosa >=0.9.1
- numpy *
- plotly *
- sox *
- tqdm *