---
# System prepended metadata

title: 交接 - Meta Learning for E2E ASR (cross-accent)
tags: [Research]

---

交接 - Meta Learning for E2E ASR (cross-accent)
===
###### tags: `Research`

## Step 0: 
* `git clone https://github.com/sunprinceS/MetaASR-CrossAccent.git`
* comet 相關:
    * if no comet 帳號: 辦 comet 帳號
    * 更改 src/marcos.py 的 COMET_WORKSPACE, COMET_PROJECT_NAME 成自己的
    * 在家目錄底下加一個 .comet.config，裡面寫
        ```
        [comet]
        api_key=<YOUR_COMET_API_KEY> // api key 可從 Web 介面得到
        ```
        ![](https://i.imgur.com/t6rwGV1.png)
    * install custom package (雖然 README 有寫一年前的版本，但目前 pip install 下來的最新版也是可以的，只不過 tqdm logger 會跑掉)
        ```
        // pip install
        comet-ml
        editdistance
        torch_optimizer
        
        // from 茅耀文's utility package
        tqdm-logger
        torchexp
        ```
* data 相關:
    * 目前 common voice 英文的資料放在 `/groups/public/common-voice-en` 下
    * 把 data/create_link.sh 的 cmd 改成 
    `cmd="ln -s /groups/public/common-voice-en/mydata-separate/$data_type/$dir $dir/$data_type"` (這是戰艦上的路徑)
    
## Step 1: Pretrain
* 可以用 multitask, fomaml, reptile 等 pretrain interface 來做 pretrain
* fomaml, reptile 等另需指定 meta_k (在算 loss 時要先 adapt 幾步，或者說 inner loop 時要 train 幾步)
* tgt_accent 就 meta 系列的 pretrain 不重要，只是可以 probe 看現在訓練得怎麼樣，不代表 adapt 的好壞
* multitask pretrain: `multi pretrain: hrun -c 4 -m 12 -G python pretrain.py --config config/transformer/pretrain/multi-hkust.yaml --pretrain_accents au en ir nz us --num_pretrain 5 --tgt_accent wa --runs 0 --sample_strategy normal --max_step 200000 --model_name transformer --algo multi --pretrain_suffix dryrun --overwrite`
* fometa 系列 pretrain: `hrun -c 4 -m 12 -G python pretrain.py --config config/transformer/pretrain/fometa-hkust.yaml --pretrain_accents au en ir nz us --num_pretrain 5 --tgt_accent wa --runs 0 --sample_strategy normal --max_step 100000 --model_name transformer --algo fomaml --pretrain_suffix dryrun --overwrite --meta_k 2`

Dashboard (可以用 query filter 出 pretrain 相關的 Experiment)
![](https://i.imgur.com/aAmDBPg.png)


## Step 2: Adapt (train + decode + score)
:::info
有了 pretrained model 以後，一個實驗需要以下步驟
training (train.py) -> testing/decoding (train.py --test) -> score.sh
:::
score 的算法同 espnet recipe

我們可以在 train.py 的 args 
* 直接指定 pretrained model 的 path
* 餵 pretrained setting infer 出 pretrained model path

不同的 target langauge、不同 pretraining step 選出的 pretrained model、不同的 pretrain setting (model、algo...)、adapt 時是否 freeze 部分 model 都會對應到不同的實驗

:point_right: Given same pretraining setting，一鍵執行不同 pretraining step 的實驗
 (結果會存在 testing-logs 裡頭)

相關檔案為 adapt_full_exp.sh、train.py、score.sh，可再自行修改


* multitask adapt: `./run_adapt.sh transformer hkust-sgd spot non-overwrite greedy multi-transformer-hkust dryrun af hk sg`
* fometa 系列 adpat: `./run_adapt.sh transformer hkust-sgd spot non-overwrite greedy fometa-transformer-hkust dryrun af hk sg`

Dashboard (可以用 query filter 出 跟某個 adapt setting 相關的 Experiment)
![](https://i.imgur.com/CbKhC9U.png)

因為實驗數相當多，用 comet 可以幫助我們快速比較各個 adapt setting 的優劣
![](https://i.imgur.com/eI8Iccp.png)


### Known Issue:
在某些 node 上會跳 import comet_ml before torch，
解法是直接在 train.py, pretrain.py 在 import torch 之前 import comet_ml



