|
--- |
|
tags: |
|
- espnet |
|
- audio |
|
- automatic-speech-recognition |
|
language: en |
|
datasets: |
|
- stop |
|
license: cc-by-4.0 |
|
--- |
|
|
|
## ESPnet2 ASR model |
|
|
|
### `espnet/stop_hubert_slu_raw_en_bpe500` |
|
|
|
This model was trained by Siddhant using stop recipe in [espnet](https://github.com/espnet/espnet/). |
|
|
|
### Demo: How to use in ESPnet2 |
|
|
|
```bash |
|
cd espnet |
|
git checkout 11890fdd9dd872edc50ce8eb7660d746c6ee160e |
|
pip install -e . |
|
cd egs2/stop/asr3 |
|
./run.sh --skip_data_prep false --skip_train true --download_model espnet/stop_hubert_slu_raw_en_bpe500 |
|
``` |
|
|
|
<!-- Generated by scripts/utils/show_asr_result.sh --> |
|
# RESULTS |
|
## Environments |
|
- date: `Sun Dec 25 13:33:10 EST 2022` |
|
- python version: `3.9.5 (default, Jun 4 2021, 12:28:51) [GCC 7.5.0]` |
|
- espnet version: `espnet 202205` |
|
- pytorch version: `pytorch 1.13.0+cu116` |
|
- Git hash: `11890fdd9dd872edc50ce8eb7660d746c6ee160e` |
|
- Commit date: `Sat Jun 18 17:05:39 2022 -0400` |
|
|
|
## asr_train_asr2_hubert_lr0.002_raw_en_bpe500 |
|
### WER |
|
|
|
|dataset|Snt|Wrd|Corr|Sub|Del|Ins|Err|S.Err| |
|
|---|---|---|---|---|---|---|---|---| |
|
|decode_asr_asr_model_valid.acc.ave_10best/test|75636|728701|93.9|3.2|2.9|3.1|9.1|29.8| |
|
|decode_asr_asr_model_valid.acc.ave_10best/valid|33384|322094|0.0|0.0|100.0|0.0|100.0|100.0| |
|
|inference_asr_model_valid.acc.ave_10best/test|75636|728701|93.9|3.3|2.8|3.2|9.4|30.6| |
|
|inference_asr_model_valid.acc.ave_10best/valid|33384|322094|0.0|0.0|100.0|0.0|100.0|100.0| |
|
|
|
### CER |
|
|
|
|dataset|Snt|Wrd|Corr|Sub|Del|Ins|Err|S.Err| |
|
|---|---|---|---|---|---|---|---|---| |
|
|decode_asr_asr_model_valid.acc.ave_10best/test|75636|5745269|95.9|0.9|3.2|3.2|7.3|29.8| |
|
|decode_asr_asr_model_valid.acc.ave_10best/valid|33384|2537594|0.0|0.0|100.0|0.0|100.0|100.0| |
|
|inference_asr_model_valid.acc.ave_10best/test|75636|5745269|95.9|1.0|3.1|3.3|7.4|30.6| |
|
|inference_asr_model_valid.acc.ave_10best/valid|33384|2537594|0.0|0.0|100.0|0.0|100.0|100.0| |
|
|
|
### TER |
|
|
|
|dataset|Snt|Wrd|Corr|Sub|Del|Ins|Err|S.Err| |
|
|---|---|---|---|---|---|---|---|---| |
|
|decode_asr_asr_model_valid.acc.ave_10best/test|75636|2091389|95.1|1.5|3.4|3.1|8.0|29.8| |
|
|decode_asr_asr_model_valid.acc.ave_10best/valid|33384|921077|0.0|0.0|100.0|0.0|100.0|100.0| |
|
|inference_asr_model_valid.acc.ave_10best/test|75636|2091389|95.2|1.5|3.3|3.3|8.1|30.6| |
|
|inference_asr_model_valid.acc.ave_10best/valid|33384|921077|0.0|0.0|100.0|0.0|100.0|100.0| |
|
|
|
## ASR config |
|
|
|
<details><summary>expand</summary> |
|
|
|
``` |
|
config: conf/train_asr2_hubert_lr0.002.yaml |
|
print_config: false |
|
log_level: INFO |
|
dry_run: false |
|
iterator_type: sequence |
|
output_dir: exp/asr_train_asr2_hubert_lr0.002_raw_en_bpe500 |
|
ngpu: 1 |
|
seed: 0 |
|
num_workers: 1 |
|
num_att_plot: 3 |
|
dist_backend: nccl |
|
dist_init_method: env:// |
|
dist_world_size: 4 |
|
dist_rank: 0 |
|
local_rank: 0 |
|
dist_master_addr: localhost |
|
dist_master_port: 57197 |
|
dist_launcher: null |
|
multiprocessing_distributed: true |
|
unused_parameters: false |
|
sharded_ddp: false |
|
cudnn_enabled: true |
|
cudnn_benchmark: false |
|
cudnn_deterministic: true |
|
collect_stats: false |
|
write_collected_feats: false |
|
max_epoch: 50 |
|
patience: null |
|
val_scheduler_criterion: |
|
- valid |
|
- loss |
|
early_stopping_criterion: |
|
- valid |
|
- loss |
|
- min |
|
best_model_criterion: |
|
- - valid |
|
- acc |
|
- max |
|
keep_nbest_models: 10 |
|
nbest_averaging_interval: 0 |
|
grad_clip: 5.0 |
|
grad_clip_type: 2.0 |
|
grad_noise: false |
|
accum_grad: 1 |
|
no_forward_run: false |
|
resume: true |
|
train_dtype: float32 |
|
use_amp: false |
|
log_interval: null |
|
use_matplotlib: true |
|
use_tensorboard: true |
|
use_wandb: false |
|
wandb_project: null |
|
wandb_id: null |
|
wandb_entity: null |
|
wandb_name: null |
|
wandb_model_log_interval: -1 |
|
detect_anomaly: false |
|
pretrain_path: null |
|
init_param: [] |
|
ignore_init_mismatch: false |
|
freeze_param: |
|
- frontend.upstream |
|
num_iters_per_epoch: null |
|
batch_size: 128 |
|
valid_batch_size: null |
|
batch_bins: 1000000 |
|
valid_batch_bins: null |
|
train_shape_file: |
|
- exp/asr_stats_raw_en_bpe500/train/speech_shape |
|
- exp/asr_stats_raw_en_bpe500/train/text_shape.bpe |
|
valid_shape_file: |
|
- exp/asr_stats_raw_en_bpe500/valid/speech_shape |
|
- exp/asr_stats_raw_en_bpe500/valid/text_shape.bpe |
|
batch_type: folded |
|
valid_batch_type: null |
|
fold_length: |
|
- 80000 |
|
- 150 |
|
sort_in_batch: descending |
|
sort_batch: descending |
|
multiple_iterator: false |
|
chunk_length: 500 |
|
chunk_shift_ratio: 0.5 |
|
num_cache_chunks: 1024 |
|
train_data_path_and_name_and_type: |
|
- - dump/raw/train/wav.scp |
|
- speech |
|
- sound |
|
- - dump/raw/train/text |
|
- text |
|
- text |
|
valid_data_path_and_name_and_type: |
|
- - dump/raw/valid/wav.scp |
|
- speech |
|
- sound |
|
- - dump/raw/valid/text |
|
- text |
|
- text |
|
allow_variable_data_keys: false |
|
max_cache_size: 0.0 |
|
max_cache_fd: 32 |
|
valid_max_cache_size: null |
|
optim: adam |
|
optim_conf: |
|
lr: 0.0004 |
|
weight_decay: 1.0e-06 |
|
scheduler: warmuplr |
|
scheduler_conf: |
|
warmup_steps: 25000 |
|
token_list: |
|
- <blank> |
|
- <unk> |
|
- ▁[ |
|
- ':' |
|
- ▁] |
|
- _ |
|
- SL |
|
- IN |
|
- GET |
|
- S |
|
- TIME |
|
- DATE |
|
- ▁THE |
|
- ▁TO |
|
- ▁FOR |
|
- ▁ |
|
- E |
|
- LOCATION |
|
- A |
|
- WEATHER |
|
- O |
|
- ▁ME |
|
- MUSIC |
|
- ▁MY |
|
- CREATE |
|
- ALARM |
|
- Y |
|
- D |
|
- ▁I |
|
- T |
|
- ▁AT |
|
- I |
|
- ▁A |
|
- TIMER |
|
- ▁IS |
|
- U |
|
- ▁IN |
|
- ▁ON |
|
- EVENT |
|
- M |
|
- ▁TIMER |
|
- TODO |
|
- REMINDER |
|
- R |
|
- ▁PM |
|
- P |
|
- ING |
|
- ▁WHAT |
|
- ▁THIS |
|
- ▁TODAY |
|
- ▁AM |
|
- N |
|
- ▁ALARM |
|
- ▁SET |
|
- NT |
|
- METHOD |
|
- ▁TOMORROW |
|
- ER |
|
- TYPE |
|
- B |
|
- ATTRIBUTE |
|
- DESTINATION |
|
- ▁MINUTES |
|
- REMINDED |
|
- PERSON |
|
- L |
|
- ▁HOW |
|
- NAME |
|
- K |
|
- ▁FIVE |
|
- ▁BE |
|
- ▁' |
|
- G |
|
- ▁NEXT |
|
- 'ON' |
|
- ▁IT |
|
- MESSAGE |
|
- H |
|
- ▁WILL |
|
- ▁S |
|
- ▁WEEK |
|
- ST |
|
- C |
|
- INFO |
|
- EN |
|
- CATEGORY |
|
- TRAFFIC |
|
- ▁F |
|
- LE |
|
- ▁AND |
|
- AR |
|
- SEND |
|
- RE |
|
- ▁P |
|
- ▁D |
|
- ▁FROM |
|
- RECIPIE |
|
- PLAY |
|
- ▁DO |
|
- ▁TRAFFIC |
|
- AN |
|
- ▁AN |
|
- AL |
|
- ▁SIX |
|
- ▁SONG |
|
- ▁ALL |
|
- ▁UP |
|
- CONTENT |
|
- ▁REMINDER |
|
- ▁WEEKEND |
|
- ▁REMIND |
|
- ▁OF |
|
- ▁T |
|
- RA |
|
- ▁WEATHER |
|
- ▁SEVEN |
|
- ▁PLEASE |
|
- ▁RE |
|
- ▁TONIGHT |
|
- EXACT |
|
- ▁EIGHT |
|
- ▁W |
|
- W |
|
- ▁TEN |
|
- F |
|
- SOURCE |
|
- ▁TIME |
|
- ESTIMATED |
|
- RECURRING |
|
- TH |
|
- DELETE |
|
- VE |
|
- ▁NEW |
|
- LL |
|
- ▁EVERY |
|
- ▁PLAY |
|
- ES |
|
- ▁THIRTY |
|
- ▁GET |
|
- ▁RAIN |
|
- CK |
|
- ▁TWO |
|
- ▁C |
|
- ▁CO |
|
- ▁ARE |
|
- ▁MESSAGE |
|
- RI |
|
- ▁G |
|
- ▁MORNING |
|
- CONTACT |
|
- ▁CAN |
|
- ▁NOW |
|
- ▁THREE |
|
- ▁THERE |
|
- ET |
|
- ▁MUSIC |
|
- TER |
|
- ▁TAKE |
|
- IC |
|
- CH |
|
- ▁J |
|
- V |
|
- ED |
|
- ▁FOUR |
|
- DURATION |
|
- LY |
|
- ▁E |
|
- ▁FRIDAY |
|
- UR |
|
- ▁YOU |
|
- ▁ANY |
|
- ▁NINE |
|
- ▁GO |
|
- UNSUPPORTED |
|
- OR |
|
- ▁SHOW |
|
- ▁O |
|
- ▁BA |
|
- ▁PA |
|
- ▁LONG |
|
- AT |
|
- ▁ONE |
|
- ND |
|
- ▁MA |
|
- ▁ST |
|
- ▁GOING |
|
- ▁LIKE |
|
- ▁ALARMS |
|
- ▁BY |
|
- ▁THAT |
|
- ▁TWENTY |
|
- ▁DAY |
|
- ▁CH |
|
- ▁MONTH |
|
- ▁K |
|
- ▁SH |
|
- UPDATE |
|
- ▁MONDAY |
|
- CE |
|
- IT |
|
- IL |
|
- AMOUNT |
|
- ▁SATURDAY |
|
- ▁BR |
|
- ▁NEED |
|
- ▁WORK |
|
- ID |
|
- ▁DRIVE |
|
- LA |
|
- ▁MO |
|
- ▁HAVE |
|
- ▁TUESDAY |
|
- ▁TELL |
|
- IR |
|
- HA |
|
- '''' |
|
- ▁IF |
|
- HOME |
|
- ▁HE |
|
- ▁LO |
|
- ▁LA |
|
- ▁WHEN |
|
- LO |
|
- ▁TH |
|
- ▁REMINDERS |
|
- IE |
|
- DISTANCE |
|
- ▁WE |
|
- ▁SA |
|
- ▁HOUR |
|
- OULD |
|
- NE |
|
- DEPARTURE |
|
- ▁HI |
|
- ▁LI |
|
- ARTIST |
|
- Z |
|
- TRAVEL |
|
- ▁OUT |
|
- PAUSE |
|
- EST |
|
- ARRIVAL |
|
- ▁CANCEL |
|
- ▁MI |
|
- ▁OFF |
|
- ▁FIFTEEN |
|
- POINT |
|
- ▁SNOW |
|
- NA |
|
- EL |
|
- ▁EVENTS |
|
- ▁CA |
|
- ▁SUNDAY |
|
- ▁LEAVE |
|
- TRACK |
|
- ▁SEND |
|
- ▁DELETE |
|
- ▁APPOINTMENT |
|
- ▁BO |
|
- RDINAL |
|
- ▁MAKE |
|
- ▁NEAR |
|
- ▁BEFORE |
|
- GE |
|
- ▁HOME |
|
- RELATION |
|
- ▁V |
|
- FR |
|
- ▁THURSDAY |
|
- ▁LAST |
|
- DIRECTIONS |
|
- ▁WEDNESDAY |
|
- ▁START |
|
- ▁FORECAST |
|
- ▁YORK |
|
- ▁RIGHT |
|
- UM |
|
- ▁WITH |
|
- USE |
|
- ▁MEETING |
|
- UT |
|
- LI |
|
- ▁CHANGE |
|
- ▁CAR |
|
- GENRE |
|
- ATION |
|
- X |
|
- ▁PICK |
|
- ▁WANT |
|
- ▁NIGHT |
|
- SKIP |
|
- ▁DE |
|
- ▁RO |
|
- ▁ABOUT |
|
- MAP |
|
- CO |
|
- MA |
|
- ▁HOUSE |
|
- ▁HOT |
|
- ▁PARTY |
|
- ▁WA |
|
- UNIT |
|
- ▁HERE |
|
- ▁SU |
|
- ▁AFTERNOON |
|
- ▁MUCH |
|
- ▁MOM |
|
- ▁TEMPERATURE |
|
- EQUENC |
|
- ▁ADD |
|
- ▁SAN |
|
- ▁HER |
|
- ▁CONCERTS |
|
- ▁CHRISTMAS |
|
- ▁DINNER |
|
- ▁MAR |
|
- LAND |
|
- ▁HOURS |
|
- ▁CURRENT |
|
- ▁TRACK |
|
- ▁SOME |
|
- ▁CITY |
|
- ▁FORTY |
|
- ATE |
|
- ▁ROUTE |
|
- SNOOZE |
|
- ▁TEXT |
|
- WORK |
|
- ▁COLD |
|
- RELATED |
|
- ▁OR |
|
- ▁NO |
|
- Q |
|
- ▁WAY |
|
- WAY |
|
- ▁MANY |
|
- ▁BIRTHDAY |
|
- ▁MINUTE |
|
- ▁PLAYLIST |
|
- ▁NOON |
|
- ▁ROAD |
|
- TITLE |
|
- PATH |
|
- ▁ASK |
|
- NAVIGATION |
|
- ▁LEFT |
|
- ▁ALBUM |
|
- ▁TURN |
|
- ▁LATE |
|
- ▁ELEVEN |
|
- NEW |
|
- ▁CELSIUS |
|
- ▁BUY |
|
- AVOID |
|
- LOW |
|
- NCE |
|
- SEARCH |
|
- ▁GAME |
|
- ▁STOP |
|
- ▁JO |
|
- ▁FIRST |
|
- ▁SHE |
|
- ▁DOCTOR |
|
- ▁BU |
|
- PERIOD |
|
- ▁WAKE |
|
- CONDITION |
|
- ▁EVENING |
|
- RADIUS |
|
- MODIFIE |
|
- ▁REPEAT |
|
- ▁SECOND |
|
- ▁CONCERT |
|
- ▁ANGELES |
|
- ▁DOWNTOWN |
|
- ▁UMBRELLA |
|
- TEMPERATURE |
|
- ASH |
|
- ▁YEAR |
|
- GROUP |
|
- ▁DRIVING |
|
- ▁GIVE |
|
- ▁HUNDRED |
|
- ▁HO |
|
- ▁MILES |
|
- PLAYLIST |
|
- ADD |
|
- RETRIEV |
|
- ▁TWELVE |
|
- EAD |
|
- ▁CLASS |
|
- ▁FREE |
|
- PORT |
|
- VILLE |
|
- ▁BETWEEN |
|
- ▁KNOW |
|
- ▁AROUND |
|
- ▁SCHOOL |
|
- ▁NINETY |
|
- PROVIDER |
|
- SILENCE |
|
- RESUME |
|
- ▁LET |
|
- TION |
|
- ▁AUGUST |
|
- ▁HAPPENING |
|
- ▁AFTER |
|
- ▁FAHRENHEIT |
|
- ▁EX |
|
- ▁VIDEO |
|
- ROAD |
|
- ▁PARK |
|
- ▁CHICAGO |
|
- ▁DAILY |
|
- ▁CHECK |
|
- ▁BEACH |
|
- ▁WHERE |
|
- ▁JUNE |
|
- ▁STREET |
|
- ▁FESTIVAL |
|
- ▁FLORIDA |
|
- ▁JOHN |
|
- ▁HAS |
|
- ▁SPOTIFY |
|
- ▁BILL |
|
- RESTART |
|
- ▁HIGHWAY |
|
- ▁SEATTLE |
|
- J |
|
- ▁LUNCH |
|
- ▁LOOK |
|
- ▁FRIEND |
|
- ▁COMING |
|
- ▁ALERT |
|
- IGHT |
|
- ▁PANDORA |
|
- ▁HEAVY |
|
- ▁KIDS |
|
- ▁MOVIE |
|
- ▁SOUTH |
|
- REACT |
|
- ▁CONSTRUCTION |
|
- PREVIOUS |
|
- ▁ORLANDO |
|
- ▁OVER |
|
- ▁MIAMI |
|
- REACTION |
|
- ▁ATLANTA |
|
- ▁ACCIDENT |
|
- ▁COUNTRY |
|
- ▁NORTH |
|
- ▁LIGHT |
|
- RADIO |
|
- ▁READ |
|
- ▁FAMILY |
|
- ▁AIRPORT |
|
- ▁EXPECT |
|
- ▁DEGREE |
|
- ▁PRO |
|
- ▁PARTIES |
|
- ▁FIFTY |
|
- ▁HIGH |
|
- ▁PLAN |
|
- ▁FOOD |
|
- ▁WARM |
|
- ▁SUNNY |
|
- ▁VEGAS |
|
- ▁HOLIDAY |
|
- ▁SCHEDULE |
|
- ▁STORM |
|
- ▁FIFTH |
|
- ▁BOSTON |
|
- ▁FRANCISCO |
|
- ▁LONDON |
|
- ATTENDEE |
|
- ▁JULY |
|
- ▁WALK |
|
- ▁COMMUTE |
|
- ▁CLEAN |
|
- ▁DENTIST |
|
- TOWN |
|
- ▁AGAIN |
|
- ▁DALLAS |
|
- ▁PORTLAND |
|
- ▁SEPTEMBER |
|
- ▁ARRIVE |
|
- ▁SISTER |
|
- ▁HOUSTON |
|
- Ã |
|
- É |
|
- Í |
|
- '*' |
|
- Á |
|
- Ç |
|
- Ó |
|
- ']' |
|
- '[' |
|
- Ú |
|
- Ü |
|
- <sos/eos> |
|
transcript_token_list: null |
|
two_pass: false |
|
pre_postencoder_norm: false |
|
init: null |
|
input_size: null |
|
ctc_conf: |
|
dropout_rate: 0.0 |
|
ctc_type: builtin |
|
reduce: true |
|
ignore_nan_grad: true |
|
joint_net_conf: null |
|
use_preprocessor: true |
|
token_type: bpe |
|
bpemodel: data/en_token_list/bpe_unigram500/bpe.model |
|
non_linguistic_symbols: null |
|
cleaner: null |
|
g2p: null |
|
speech_volume_normalize: null |
|
rir_scp: null |
|
rir_apply_prob: 1.0 |
|
noise_scp: null |
|
noise_apply_prob: 1.0 |
|
noise_db_range: '13_15' |
|
frontend: s3prl |
|
frontend_conf: |
|
frontend_conf: |
|
upstream: hubert_large_ll60k |
|
download_dir: ./hub |
|
multilayer_feature: true |
|
fs: 16k |
|
specaug: specaug |
|
specaug_conf: |
|
apply_time_warp: true |
|
time_warp_window: 5 |
|
time_warp_mode: bicubic |
|
apply_freq_mask: true |
|
freq_mask_width_range: |
|
- 0 |
|
- 30 |
|
num_freq_mask: 2 |
|
apply_time_mask: true |
|
time_mask_width_range: |
|
- 0 |
|
- 40 |
|
num_time_mask: 2 |
|
normalize: utterance_mvn |
|
normalize_conf: {} |
|
model: espnet |
|
model_conf: |
|
ctc_weight: 0.3 |
|
lsm_weight: 0.1 |
|
length_normalized_loss: false |
|
extract_feats_in_collect_stats: false |
|
preencoder: linear |
|
preencoder_conf: |
|
input_size: 1024 |
|
output_size: 80 |
|
encoder: conformer |
|
encoder_conf: |
|
output_size: 512 |
|
attention_heads: 8 |
|
linear_units: 2048 |
|
num_blocks: 12 |
|
dropout_rate: 0.1 |
|
positional_dropout_rate: 0.1 |
|
attention_dropout_rate: 0.1 |
|
input_layer: conv2d2 |
|
normalize_before: true |
|
macaron_style: true |
|
rel_pos_type: latest |
|
pos_enc_layer_type: rel_pos |
|
selfattention_layer_type: rel_selfattn |
|
activation_type: swish |
|
use_cnn_module: true |
|
cnn_module_kernel: 31 |
|
postencoder: null |
|
postencoder_conf: {} |
|
deliberationencoder: null |
|
deliberationencoder_conf: {} |
|
decoder: transformer |
|
decoder_conf: |
|
attention_heads: 8 |
|
linear_units: 2048 |
|
num_blocks: 6 |
|
dropout_rate: 0.1 |
|
positional_dropout_rate: 0.1 |
|
self_attention_dropout_rate: 0.1 |
|
src_attention_dropout_rate: 0.1 |
|
decoder2: null |
|
decoder2_conf: {} |
|
postdecoder: null |
|
postdecoder_conf: {} |
|
required: |
|
- output_dir |
|
- token_list |
|
version: '202205' |
|
distributed: true |
|
``` |
|
|
|
</details> |
|
|
|
|
|
|
|
### Citing ESPnet |
|
|
|
```BibTex |
|
@inproceedings{watanabe2018espnet, |
|
author={Shinji Watanabe and Takaaki Hori and Shigeki Karita and Tomoki Hayashi and Jiro Nishitoba and Yuya Unno and Nelson Yalta and Jahn Heymann and Matthew Wiesner and Nanxin Chen and Adithya Renduchintala and Tsubasa Ochiai}, |
|
title={{ESPnet}: End-to-End Speech Processing Toolkit}, |
|
year={2018}, |
|
booktitle={Proceedings of Interspeech}, |
|
pages={2207--2211}, |
|
doi={10.21437/Interspeech.2018-1456}, |
|
url={http://dx.doi.org/10.21437/Interspeech.2018-1456} |
|
} |
|
|
|
|
|
|
|
|
|
``` |
|
|
|
or arXiv: |
|
|
|
```bibtex |
|
@misc{watanabe2018espnet, |
|
title={ESPnet: End-to-End Speech Processing Toolkit}, |
|
author={Shinji Watanabe and Takaaki Hori and Shigeki Karita and Tomoki Hayashi and Jiro Nishitoba and Yuya Unno and Nelson Yalta and Jahn Heymann and Matthew Wiesner and Nanxin Chen and Adithya Renduchintala and Tsubasa Ochiai}, |
|
year={2018}, |
|
eprint={1804.00015}, |
|
archivePrefix={arXiv}, |
|
primaryClass={cs.CL} |
|
} |
|
``` |
|
|