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
Last synced: 6 months ago · JSON representation ·

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
Created 9 months ago · Last pushed 9 months ago
Metadata Files
Readme Changelog Contributing License Citation

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_dsvalidation_dsmanifest_filepath

2.2 下載預訓練模型

  1. 下載模型:parakeet-tdt-0.6b-v2.nemo
  2. 放置在 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 結果


📝 注意事項

  1. 環境管理: 請確實分離 Nemo 和 Whisper 環境
  2. 路徑設定: 所有檔案路徑請根據實際環境調整
  3. 模型下載: 確保預訓練模型已正確下載並放置在指定位置
  4. 資料格式: 注意音訊檔案格式和採樣率要求

Owner

  • Login: TingYi028
  • Kind: user

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

pyproject.toml pypi
requirements/requirements.txt pypi
  • 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 *
requirements/requirements_asr.txt pypi
  • 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 *
requirements/requirements_audio.txt pypi
  • einops *
  • lhotse >=1.22.0
  • librosa >=0.10.0
  • matplotlib *
  • pesq *
  • pystoi *
  • scipy >=0.14
  • soundfile *
requirements/requirements_automodel.txt pypi
  • bitsandbytes ==0.45.3
requirements/requirements_common.txt pypi
  • datasets *
  • einops *
  • inflect *
  • mediapy ==1.1.6
  • pandas *
  • sacremoses >=0.0.43
  • sentencepiece <1.0.0
requirements/requirements_deploy.txt pypi
  • accelerate *
  • fastapi *
  • nvidia-pytriton *
  • pydantic-settings *
  • tensorstore <0.1.72
  • uvicorn *
  • zarr >=2.18.2,<3.0.0
requirements/requirements_docs.txt pypi
  • Jinja2 *
  • Sphinx *
  • boto3 *
  • latexcodec *
  • numpy *
  • pydata-sphinx-theme *
  • sphinx-book-theme *
  • sphinx-copybutton *
  • sphinxcontrib-bibtex *
  • sphinxext-opengraph *
  • urllib3 *
  • wrapt *
requirements/requirements_eval.txt pypi
  • nvidia-lm-eval *
requirements/requirements_lightning.txt pypi
  • 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
requirements/requirements_multimodal.txt pypi
  • 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 *
requirements/requirements_nlp.txt pypi
  • 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
requirements/requirements_run.txt pypi
  • nemo_run *
requirements/requirements_slu.txt pypi
  • jiwer >=2.0.0
  • progress >=1.5
  • tabulate >=0.8.7
  • textdistance >=4.1.5
  • tqdm *
requirements/requirements_test.txt pypi
  • 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
requirements/requirements_tts.txt pypi
  • attrdict *
  • cdifflib ==1.2.6
  • einops *
  • janome *
  • jieba *
  • kornia *
  • librosa *
  • matplotlib *
  • nemo_text_processing *
  • nltk *
  • pandas *
  • pypinyin *
  • pypinyin-dict *
  • seaborn *
requirements/requirements_vllm.txt pypi
  • 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
requirements_Nemo.txt pypi
  • pipinstall-Unemo_toolkit *
  • pipinstallseqevaldatasetspytorch-crf *
requirements_Whisper.txt pypi
  • 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
scripts/freesound_download_resample/freesound_requirements.txt pypi
  • joblib *
  • librosa *
  • requests *
  • requests_oauthlib *
  • sox *
setup.py pypi
tools/ctc_segmentation/requirements.txt pypi
  • num2words *
  • numpy <2.0.0
tools/nemo_forced_aligner/requirements.txt pypi
  • nemo_toolkit *
  • prettyprinter *
  • pytest *
tools/nmt_webapp/requirements.txt pypi
  • flask *
  • flask_cors *
  • nemo_toolkit >=1.0.0rc1
tools/speech_data_explorer/requirements.txt pypi
  • SoundFile *
  • dash >=2.1.0
  • dash_bootstrap_components >=1.0.3
  • diff_match_patch *
  • editdistance *
  • jiwer *
  • librosa >=0.9.1
  • numpy *
  • plotly *
  • sox *
  • tqdm *