nickjw0205/Improving-ASR-with-LLM-Description

20

stars

7

commits

Python

primary language

Sep 2, 2024

updated

README

Improving-ASR-with-LLM-Description


[Paper] Accepted to INTERSPEECH 2024

Abstract

End-to-end automatic speech recognition (E2E ASR) systems have significantly improved speech recognition through training on extensive datasets. Despite these advancements, they still struggle to accurately recognize domain specific words, such as proper nouns and technical terminologies. To address this problem, we propose a method to utilize the state-of-the-art Whisper without modifying its architecture, preserving its generalization performance while enabling it to leverage descriptions effectively. Moreover, we propose two additional training techniques to improve the domain specific ASR: decoder fine-tuning, and context perturbation. We also propose a method to use a Large Language Model (LLM) to generate descriptions with simple metadata, when descriptions are unavailable. Our experiments demonstrate that proposed methods notably enhance domain-specific ASR accuracy on real-life datasets, with LLM-generated descriptions outperforming human-crafted ones in effectiveness.


Overview of our method.

Model Structure


Dataset

Earnings Call Dataset : [link] (original dataset: [link])

OCW Dataset : [link]


Setup

Conda Environment
conda create -n llm-description python=3.9 -y
conda activate llm-description
Requirements
sudo apt update && sudo apt install ffmpeg
pip install -r requirements.txt

Run

Set dataset path(data_root) and save path(root_path) in whisper_fine.py

...
>>> data_root = "/data/jwsuh/whisper-datasets/main"
...
>>> root_path = "results/"
...

Script

# OCW
## Use LLM Generated Description
CUDA_VISIBLE_DEVICES=0 python whisper_fine.py  --dataset ocw --batch 32 --freeze

## Use Collected Description
CUDA_VISIBLE_DEVICES=0 python whisper_fine.py  --dataset ocw --batch 32 --freeze --basic

# Earnings Call
## Use LLM Generated Description
CUDA_VISIBLE_DEVICES=0 python whisper_fine.py  --dataset earning --batch 32 --freeze

## Use Collected Description
CUDA_VISIBLE_DEVICES=0 python whisper_fine.py  --dataset earning --batch 32 --freeze --basic

Results

Base.en
ModelsEarnings Call (20 h)Earnings Call (40 h)OCW (20 h)OCW (40 h)
Whisper (Frozen)16.39%16.39%11.98%11.98%
+ Full Fine-tuning17.38%16.64%10.41%9.94%
+ Description20.63%17.70%9.81%9.72%
+ Decoder Fine-tuning16.61%15.70%9.79%9.67%
+ Context Perturbation16.24%15.15%9.79%9.68%
Medium.en
ModelsEarnings Call (20 h)Earnings Call (40 h)OCW (20 h)OCW (40 h)
Whisper (Frozen)13.39%13.39%8.71%8.71%
+ Full Fine-tuning10.53%10.15%7.94%7.69%
+ Description10.47%10.05%8.46%7.66%
+ Decoder Fine-tuning10.29%9.87%7.89%7.36%
+ Context Perturbation10.18%9.71%7.68%7.33%

Contributors

nickjw0205

7 commits

nickjw0205/Improving-ASR-with-LLM-Description

20

stars

7

commits

Python

primary language

Sep 2, 2024

updated

README

Improving-ASR-with-LLM-Description


[Paper] Accepted to INTERSPEECH 2024

Abstract

End-to-end automatic speech recognition (E2E ASR) systems have significantly improved speech recognition through training on extensive datasets. Despite these advancements, they still struggle to accurately recognize domain specific words, such as proper nouns and technical terminologies. To address this problem, we propose a method to utilize the state-of-the-art Whisper without modifying its architecture, preserving its generalization performance while enabling it to leverage descriptions effectively. Moreover, we propose two additional training techniques to improve the domain specific ASR: decoder fine-tuning, and context perturbation. We also propose a method to use a Large Language Model (LLM) to generate descriptions with simple metadata, when descriptions are unavailable. Our experiments demonstrate that proposed methods notably enhance domain-specific ASR accuracy on real-life datasets, with LLM-generated descriptions outperforming human-crafted ones in effectiveness.


Overview of our method.

Model Structure


Dataset

Earnings Call Dataset : [link] (original dataset: [link])

OCW Dataset : [link]


Setup

Conda Environment
conda create -n llm-description python=3.9 -y
conda activate llm-description
Requirements
sudo apt update && sudo apt install ffmpeg
pip install -r requirements.txt

Run

Set dataset path(data_root) and save path(root_path) in whisper_fine.py

...
>>> data_root = "/data/jwsuh/whisper-datasets/main"
...
>>> root_path = "results/"
...

Script

# OCW
## Use LLM Generated Description
CUDA_VISIBLE_DEVICES=0 python whisper_fine.py  --dataset ocw --batch 32 --freeze

## Use Collected Description
CUDA_VISIBLE_DEVICES=0 python whisper_fine.py  --dataset ocw --batch 32 --freeze --basic

# Earnings Call
## Use LLM Generated Description
CUDA_VISIBLE_DEVICES=0 python whisper_fine.py  --dataset earning --batch 32 --freeze

## Use Collected Description
CUDA_VISIBLE_DEVICES=0 python whisper_fine.py  --dataset earning --batch 32 --freeze --basic

Results

Base.en
ModelsEarnings Call (20 h)Earnings Call (40 h)OCW (20 h)OCW (40 h)
Whisper (Frozen)16.39%16.39%11.98%11.98%
+ Full Fine-tuning17.38%16.64%10.41%9.94%
+ Description20.63%17.70%9.81%9.72%
+ Decoder Fine-tuning16.61%15.70%9.79%9.67%
+ Context Perturbation16.24%15.15%9.79%9.68%
Medium.en
ModelsEarnings Call (20 h)Earnings Call (40 h)OCW (20 h)OCW (40 h)
Whisper (Frozen)13.39%13.39%8.71%8.71%
+ Full Fine-tuning10.53%10.15%7.94%7.69%
+ Description10.47%10.05%8.46%7.66%
+ Decoder Fine-tuning10.29%9.87%7.89%7.36%
+ Context Perturbation10.18%9.71%7.68%7.33%

Contributors

nickjw0205

7 commits

Languages

Python

99.4%