Upload new exp dir of exp_fast_conformer
Browse files- .gitattributes +3 -0
- exp_fast_conformer_08-14_04-24/_dev_mf.json +10 -0
- exp_fast_conformer_08-14_04-24/_nemo_model_part_0.nemo +3 -0
- exp_fast_conformer_08-14_04-24/_nemo_model_part_1.nemo +3 -0
- exp_fast_conformer_08-14_04-24/_train_mf.json +0 -0
- exp_fast_conformer_08-14_04-24/args_trainer.txt +1 -0
- exp_fast_conformer_08-14_04-24/ckpts/epochepoch=0-valwerval_wer=1.0000-v1.ckpt +3 -0
- exp_fast_conformer_08-14_04-24/ckpts/epochepoch=0-valwerval_wer=1.0000.ckpt +3 -0
- exp_fast_conformer_08-14_04-24/ckpts/epochepoch=1-valwerval_wer=1.0000-v1.ckpt +3 -0
- exp_fast_conformer_08-14_04-24/ckpts/epochepoch=1-valwerval_wer=1.0000.ckpt +3 -0
- exp_fast_conformer_08-14_04-24/ckpts/epochepoch=2-valwerval_wer=1.0000-v1.ckpt +3 -0
- exp_fast_conformer_08-14_04-24/ckpts/epochepoch=2-valwerval_wer=1.0000.ckpt +3 -0
- exp_fast_conformer_08-14_04-24/ckpts/epochepoch=3-valwerval_wer=1.0000-v1.ckpt +3 -0
- exp_fast_conformer_08-14_04-24/ckpts/epochepoch=3-valwerval_wer=1.0000.ckpt +3 -0
- exp_fast_conformer_08-14_04-24/ckpts/epochepoch=4-valwerval_wer=1.0000-v1.ckpt +3 -0
- exp_fast_conformer_08-14_04-24/ckpts/epochepoch=4-valwerval_wer=1.0000.ckpt +3 -0
- exp_fast_conformer_08-14_04-24/code-folder/configs/demo.yaml +233 -0
- exp_fast_conformer_08-14_04-24/code-folder/configs/demo_root.yaml +236 -0
- exp_fast_conformer_08-14_04-24/code-folder/configs/fast_conformer.yaml +269 -0
- exp_fast_conformer_08-14_04-24/code-folder/train.py +259 -0
- exp_fast_conformer_08-14_04-24/code-folder/utils/__pycache__/utils.cpython-311.pyc +0 -0
- exp_fast_conformer_08-14_04-24/code-folder/utils/install_cmd.txt +18 -0
- exp_fast_conformer_08-14_04-24/code-folder/utils/utils.py +273 -0
- exp_fast_conformer_08-14_04-24/conf_model.txt +1 -0
- exp_fast_conformer_08-14_04-24/hv3a3zmf.csv +11 -0
- exp_fast_conformer_08-14_04-24/model_avg.ckpt +3 -0
- exp_fast_conformer_08-14_04-24/nemo_model_avg.nemo +3 -0
- exp_fast_conformer_08-14_04-24/pbhsahxt.csv +11 -0
- exp_fast_conformer_08-14_04-24/pip_env.txt +888 -0
- exp_fast_conformer_08-14_04-24/training_process.png +0 -0
- exp_fast_conformer_08-14_04-24/xaji0y6d.csv +11 -0
.gitattributes
CHANGED
@@ -39,3 +39,6 @@ exp_fast_conformer_08-12_13-45/nemo_model_avg.nemo filter=lfs diff=lfs merge=lfs
|
|
39 |
exp_fast_conformer_08-14_04-09/_nemo_model_part_0.nemo filter=lfs diff=lfs merge=lfs -text
|
40 |
exp_fast_conformer_08-14_04-09/_nemo_model_part_1.nemo filter=lfs diff=lfs merge=lfs -text
|
41 |
exp_fast_conformer_08-14_04-09/nemo_model_avg.nemo filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
39 |
exp_fast_conformer_08-14_04-09/_nemo_model_part_0.nemo filter=lfs diff=lfs merge=lfs -text
|
40 |
exp_fast_conformer_08-14_04-09/_nemo_model_part_1.nemo filter=lfs diff=lfs merge=lfs -text
|
41 |
exp_fast_conformer_08-14_04-09/nemo_model_avg.nemo filter=lfs diff=lfs merge=lfs -text
|
42 |
+
exp_fast_conformer_08-14_04-24/_nemo_model_part_0.nemo filter=lfs diff=lfs merge=lfs -text
|
43 |
+
exp_fast_conformer_08-14_04-24/_nemo_model_part_1.nemo filter=lfs diff=lfs merge=lfs -text
|
44 |
+
exp_fast_conformer_08-14_04-24/nemo_model_avg.nemo filter=lfs diff=lfs merge=lfs -text
|
exp_fast_conformer_08-14_04-24/_dev_mf.json
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{"audio_filepath": "/kaggle/input/annot-ds/annot-ds/wavs/22_0226.wav", "duration": 23.0160625, "text": "con dê này là tôi nuôi được năm nay là năm thứ ba đối với con dê này thì phát triển nó tốt với nguồn vốn vay của đoàn thanh niên hỗ trợ đoàn viên thanh niên phát triển kinh tế tạo công ăn việc làm vốn vay được năm mươi triệu để phát triển đàn dê của gia đình tạo công ăn việc làm ổn định cho hai vợ chồng đối với con dê thì ở địa phương này nó phù hợp"}
|
2 |
+
{"audio_filepath": "/kaggle/input/annot-ds/annot-ds/wavs/81_0265.wav", "duration": 21.32625, "text": "cái gì em cũng không có hết vì người ta cho con dê là em mừng lắm con bò này thì em cũng vay tiền nhà nước mua em cũng cố gắng nuôi con dê để mai mốt phát triển"}
|
3 |
+
{"audio_filepath": "/kaggle/input/annot-ds/annot-ds/wavs/36_0258.wav", "duration": 20.5, "text": "là cha là mẹ của các cháu nhưng mà tôi cũng muốn con cái mình nó ngoan nhưng mà những cái trường hợp mà các cháu mà đi ra đường thì đúng thật tình là con của mình thì mình quản lý ở nhà thôi còn đi ra đường thì không thể quản lý được bây giờ những trường hợp chức năng mà đã ghi được hình như thế này thì tôi rất đồng tình"}
|
4 |
+
{"audio_filepath": "/kaggle/input/annot-ds/annot-ds/wavs/93_0280.wav", "duration": 21.26925, "text": "nói chung là bây giờ nếu mà trường hợp như là cái dự án bây giờ làm hay không làm thì cũng trả lời cho người dân chúng tôi biết nếu mà làm thì có cái triển khai gì để cho người dân chúng tôi biết còn nếu không làm thì cũng có báo cáo cho người dân chúng tôi trồng mới và chăm sóc hiện tại chúng tôi đã bây giờ là cây trồng đã hầu như là chết rồi"}
|
5 |
+
{"audio_filepath": "/kaggle/input/annot-ds/annot-ds/wavs/27_0255.wav", "duration": 16.723, "text": "trong quá trình tôi học tập ở trong trường thì được các thầy cô hướng dẫn với cả đào tạo chuyên sâu về chuyên ngành thì tôi tiếp thu được từ ở trong trường cũng rất là nhiều kiến thức hữu ích cho công việc của tôi bây giờ cho nên là ra trường thì cũng là bỡ ngỡ bỡ ngỡ thật nhưng mà"}
|
6 |
+
{"audio_filepath": "/kaggle/input/annot-ds/annot-ds/wavs/95_0282.wav", "duration": 19.30175, "text": "quan trọng nhất là công tác mà thăm khám tận tình chu đáo đổi mới phong cách thay đổi phục vụ đối với bệnh nhân thì thường xuyên là phải cập nhật kiến thức để mà nâng cao trình độ khám của cán bộ y tế"}
|
7 |
+
{"audio_filepath": "/kaggle/input/annot-ds/annot-ds/wavs/27_0252.wav", "duration": 4.884, "text": "cả làng bây giờ toàn sử dụng các khe suối"}
|
8 |
+
{"audio_filepath": "/kaggle/input/annot-ds/annot-ds/wavs/35_0238.wav", "duration": 31.3370625, "text": "thi đua dạy tốt học tốt theo lời bác dạy về phía nhà trường chúng tôi cũng tập trung cho công tác dạy và học động viên các thầy cô tham gia đầy đủ các buổi tập huấn tổ chức tốt các buổi chuyên đề để tiếp cận cái nội dung chương trình cũng như cái tinh thần của việc đổi mới tích cực để đầu tư thêm các trang thiết bị cơ sở vật chất cho khang trang đầy đủ hiện đại thuận tiện cho cái việc khai thác các thông tin cũng như các cái phương tiện trong quá trình dạy và học"}
|
9 |
+
{"audio_filepath": "/kaggle/input/annot-ds/annot-ds/wavs/63_0259.wav", "duration": 30.1640625, "text": "nó xuất hiện nhiều nhu cầu mới của khách du lịch chẳng hạn như là xuất hiện loại hình du lịch trải nghiệm du lịch chăm sóc sức khỏe sau dịch là du khách có nhu cầu trải nghiệm không gian sống hòa mình với thiên nhiên khách du lịch người ta sử dụng cái công nghệ bốn chấm không trong check in các địa điểm đến nhân dân vì vậy cho nên là cái việc mà các doanh nghiệp tiên phong trong phát triển du lịch sinh thái sẽ đáp ứng được cái nhu cầu tôi cho rằng nó sẽ phát triển trong thời gian tới hậu covid mười chín"}
|
10 |
+
{"audio_filepath": "/kaggle/input/annot-ds/annot-ds/wavs/88_0235.wav", "duration": 29.652, "text": "qua cái quá trình kinh doanh cho đến hiện nay thì công ty về hội doanh ngchiệp công ty nhỏ như chúng tôi thì cũng có những cái khó khăn nhất định ví dụ như chẳng hạn về cái quỹ đất hoặc về cái khách hàng về cái quỹ đất thì cũng là mong muốn làm sao mà bên hội doanh nghiệp trẻ mình có ý kiến lên trên là xin làm sao tạo điều kiện cho các hội viên doanh nghiệp trẻ là có được những cái ưu tiên về cái quỹ đất để cho chúng tôi được hoạt động và phát triển"}
|
exp_fast_conformer_08-14_04-24/_nemo_model_part_0.nemo
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:a8af8ea432d6c3ac3ad40ba16511e49b39116e400a68a26664566040c9336b93
|
3 |
+
size 109916160
|
exp_fast_conformer_08-14_04-24/_nemo_model_part_1.nemo
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:b138aaa3602735bd5bba568e38531b54de62e3976e317fc0aa4d1a58a575e934
|
3 |
+
size 109916160
|
exp_fast_conformer_08-14_04-24/_train_mf.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
exp_fast_conformer_08-14_04-24/args_trainer.txt
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
{'precision': 'bf16', 'devices': 1, 'num_nodes': 1, 'accelerator': 'gpu', 'strategy': 'auto', 'max_epochs': 1000, 'accumulate_grad_batches': 1, 'gradient_clip_val': 0.0, 'log_every_n_steps': 100, 'val_check_interval': 1.0, 'enable_progress_bar': False, 'num_sanity_val_steps': 0, 'check_val_every_n_epoch': 1, 'sync_batchnorm': True, 'benchmark': False, 'enable_checkpointing': True, 'max_time': '00:00:02:00', 'callbacks': [<Fast_conformer_nemo.utils.utils.LossLogger object at 0x7909df8aa590>, <lightning.pytorch.callbacks.early_stopping.EarlyStopping object at 0x7909df87d990>, <lightning.pytorch.callbacks.model_checkpoint.ModelCheckpoint object at 0x790b14693590>]}
|
exp_fast_conformer_08-14_04-24/ckpts/epochepoch=0-valwerval_wer=1.0000-v1.ckpt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:fe0e4698e030a695dde9ddf2edc135c2ae53ca79b2f99e82347a8ac37e8b662b
|
3 |
+
size 330046621
|
exp_fast_conformer_08-14_04-24/ckpts/epochepoch=0-valwerval_wer=1.0000.ckpt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:d8a354867c63fa4949d521dd54b62f3a990b3334b30585b504923fb7d624e918
|
3 |
+
size 330046621
|
exp_fast_conformer_08-14_04-24/ckpts/epochepoch=1-valwerval_wer=1.0000-v1.ckpt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:5b260bf86fb8b48c5a80090514d19638a1d21123cb2122893e3a0b647803f1b5
|
3 |
+
size 330047004
|
exp_fast_conformer_08-14_04-24/ckpts/epochepoch=1-valwerval_wer=1.0000.ckpt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:8f49b6af6edb1823c4a68cb5b7f1f7b22470028f150d94d85f6afd564f6b7545
|
3 |
+
size 330047004
|
exp_fast_conformer_08-14_04-24/ckpts/epochepoch=2-valwerval_wer=1.0000-v1.ckpt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:7e822ec645b7908f5a38eb47913a7befe03a3992527a0c1c67b3bb1ee80b1234
|
3 |
+
size 330047451
|
exp_fast_conformer_08-14_04-24/ckpts/epochepoch=2-valwerval_wer=1.0000.ckpt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:f0f97ba846bd06bf45ed6899b2c7b4ff0cea4cfd08f86a46d4c9aa141f29ac29
|
3 |
+
size 330047387
|
exp_fast_conformer_08-14_04-24/ckpts/epochepoch=3-valwerval_wer=1.0000-v1.ckpt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:86d614ecd6a0ef6b2f55f778ad6bab61390e43bc7dc851b59b80ca22eb762adf
|
3 |
+
size 330047706
|
exp_fast_conformer_08-14_04-24/ckpts/epochepoch=3-valwerval_wer=1.0000.ckpt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:a9c5be79b282819db684d00b0834973f9fbdf5da244f1a1d19c8618985cb27f8
|
3 |
+
size 330047706
|
exp_fast_conformer_08-14_04-24/ckpts/epochepoch=4-valwerval_wer=1.0000-v1.ckpt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:a532070a56e04802c476639edb6362f540358a81150e5e752e3ef58fe4d19864
|
3 |
+
size 330047834
|
exp_fast_conformer_08-14_04-24/ckpts/epochepoch=4-valwerval_wer=1.0000.ckpt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:fea901453d8f9f59ba4929ae3f5d392db48fa1108faa508372ee63690d046f2d
|
3 |
+
size 330047834
|
exp_fast_conformer_08-14_04-24/code-folder/configs/demo.yaml
ADDED
@@ -0,0 +1,233 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# It contains the default values for training a Conformer-CTC ASR model, large size (~120M) with CTC loss and sub-word encoding.
|
2 |
+
|
3 |
+
# Architecture and training config:
|
4 |
+
# Here are the recommended configs for different variants of Conformer-CTC, other parameters are the same as in this config file.
|
5 |
+
# One extra layer (compared to original paper) is added to the medium and large variants to compensate for replacing the LSTM decoder with a linear one.
|
6 |
+
#
|
7 |
+
# +--------------+---------+---------+----------+------------------+------------+-----+
|
8 |
+
# | Model | d_model | n_heads | n_layers | conv_kernel_size | time_masks | lr |
|
9 |
+
# +==============+=========+========+===========+==================+============+=====+
|
10 |
+
# | Small (13M)| 176 | 4 | 16 | 31 | 5 | 5.0 |
|
11 |
+
# +--------------+---------+--------+-----------+------------------+------------+-----+
|
12 |
+
# | Medium (30M)| 256 | 4 | 18 | 31 | 5 | 5.0 |
|
13 |
+
# +--------------+---------+--------+-----------+------------------+------------+-----+
|
14 |
+
# | Large (121M)| 512 | 8 | 18 | 31 | 10 | 2.0 |
|
15 |
+
# +------------------------+--------+-----------+------------------+------------+-----+
|
16 |
+
# | XLarge (635M)| 1024 | 8 | 24 | 5 | 10 | 6.4 |
|
17 |
+
# +--------------+---------+--------+-----------+------------------+------------+-----+
|
18 |
+
#
|
19 |
+
# Default learning parameters in this config are set for global batch size of 2K while you may use lower values.
|
20 |
+
# To increase the global batch size with limited number of GPUs, you may use higher accumulate_grad_batches.
|
21 |
+
# However accumulate_grad_batches is better to be avoided as long as the global batch size is large enough and training is stable.
|
22 |
+
|
23 |
+
# You may find more info about Conformer-CTC here: https://docs.nvidia.com/deeplearning/nemo/user-guide/docs/en/stable/asr/models.html#conformer-ctc
|
24 |
+
# Pre-trained models of Conformer-CTC can be found here: https://docs.nvidia.com/deeplearning/nemo/user-guide/docs/en/stable/asr/results.html
|
25 |
+
# The checkpoint of the large model trained on LibriSpeech with this recipe can be found here: https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_en_conformer_ctc_large_ls
|
26 |
+
|
27 |
+
# We suggest to use trainer.precision=bf16 for GPUs which support it otherwise trainer.precision=16 is recommended.
|
28 |
+
# Using bf16 or 16 would make it possible to double the batch size and speedup training/inference. If fp16 is not stable and model diverges after some epochs, you may use fp32.
|
29 |
+
# Here are the suggested batch size per GPU for each precision and memory sizes:
|
30 |
+
# +-----------+------------+------------+
|
31 |
+
# | Precision | GPU Memory | Batch Size |
|
32 |
+
# +===========+============+============+
|
33 |
+
# | 32 | 16GB | 8 |
|
34 |
+
# | | 32GB | 16 |
|
35 |
+
# | | 80GB | 32 |
|
36 |
+
# +-----------+------------+------------+
|
37 |
+
# | 16 or | 16GB | 16 |
|
38 |
+
# | bf16 | 32GB | 32 |
|
39 |
+
# | | 80GB | 64 |
|
40 |
+
# +-----------+------------+------------+
|
41 |
+
# Note: They are based on the assumption of max_duration of 20. If you have longer or shorter max_duration, then batch sizes may need to get updated accordingly.
|
42 |
+
|
43 |
+
name: "Conformer-CTC-BPE"
|
44 |
+
|
45 |
+
model:
|
46 |
+
sample_rate: 16000
|
47 |
+
log_prediction: "val" # !! enables logging sample predictions in the output during training
|
48 |
+
ctc_reduction: "mean_batch"
|
49 |
+
skip_nan_grad: false
|
50 |
+
|
51 |
+
train_ds:
|
52 |
+
manifest_filepath: [] # ??
|
53 |
+
sample_rate: ${model.sample_rate}
|
54 |
+
batch_size: 16 # ?? you may increase batch_size if your memory allows
|
55 |
+
shuffle: true
|
56 |
+
num_workers: 8
|
57 |
+
pin_memory: true
|
58 |
+
max_duration: [] # ?? it is set for LibriSpeech, you may need to update it for your dataset
|
59 |
+
min_duration: 0.1
|
60 |
+
# tarred datasets
|
61 |
+
is_tarred: false
|
62 |
+
tarred_audio_filepaths: null
|
63 |
+
shuffle_n: 2048
|
64 |
+
# bucketing params
|
65 |
+
bucketing_strategy: "synced_randomized"
|
66 |
+
bucketing_batch_size: null
|
67 |
+
|
68 |
+
validation_ds:
|
69 |
+
manifest_filepath: [] # ??
|
70 |
+
sample_rate: ${model.sample_rate}
|
71 |
+
batch_size: 16 # you may increase batch_size if your memory allows
|
72 |
+
shuffle: false
|
73 |
+
use_start_end_token: false
|
74 |
+
num_workers: 8
|
75 |
+
pin_memory: true
|
76 |
+
|
77 |
+
test_ds:
|
78 |
+
manifest_filepath: null
|
79 |
+
sample_rate: ${model.sample_rate}
|
80 |
+
batch_size: 16 # you may increase batch_size if your memory allows
|
81 |
+
shuffle: false
|
82 |
+
use_start_end_token: false
|
83 |
+
num_workers: 8
|
84 |
+
pin_memory: true
|
85 |
+
|
86 |
+
# recommend to SPE Unigram tokenizer with small vocab size of 128 or 256 when using 4x sub-sampling
|
87 |
+
# you may find more detail on how to train a tokenizer at: /scripts/tokenizers/process_asr_text_tokenizer.py
|
88 |
+
tokenizer:
|
89 |
+
dir: vocab.txt # path to directory which contains either tokenizer.model (bpe) or vocab.txt (wpe)
|
90 |
+
type: wpe # Can be either bpe (SentencePiece tokenizer) or wpe (WordPiece tokenizer)
|
91 |
+
|
92 |
+
preprocessor:
|
93 |
+
_target_: nemo.collections.asr.modules.AudioToMelSpectrogramPreprocessor
|
94 |
+
sample_rate: ${model.sample_rate}
|
95 |
+
normalize: "per_feature"
|
96 |
+
window_size: 0.025
|
97 |
+
window_stride: 0.01
|
98 |
+
window: "hann"
|
99 |
+
features: 80
|
100 |
+
n_fft: 512
|
101 |
+
log: true
|
102 |
+
frame_splicing: 1
|
103 |
+
dither: 0.00001
|
104 |
+
pad_to: 0
|
105 |
+
pad_value: 0.0
|
106 |
+
|
107 |
+
spec_augment:
|
108 |
+
_target_: nemo.collections.asr.modules.SpectrogramAugmentation
|
109 |
+
freq_masks: 2 # set to zero to disable it
|
110 |
+
# you may use lower time_masks for smaller models to have a faster convergence
|
111 |
+
time_masks: 5 # !! set to zero to disable it
|
112 |
+
freq_width: 27
|
113 |
+
time_width: 0.05
|
114 |
+
|
115 |
+
encoder:
|
116 |
+
_target_: nemo.collections.asr.modules.ConformerEncoder
|
117 |
+
feat_in: ${model.preprocessor.features}
|
118 |
+
feat_out: -1 # you may set it if you need different output size other than the default d_model
|
119 |
+
n_layers: 16 # !!
|
120 |
+
d_model: 176 # !!
|
121 |
+
|
122 |
+
# Sub-sampling params
|
123 |
+
subsampling: striding # vggnet, striding, stacking or stacking_norm, dw_striding
|
124 |
+
subsampling_factor: 4 # must be power of 2 for striding and vggnet
|
125 |
+
subsampling_conv_channels: -1 # -1 sets it to d_model
|
126 |
+
causal_downsampling: false
|
127 |
+
|
128 |
+
# Feed forward module's params
|
129 |
+
ff_expansion_factor: 4
|
130 |
+
|
131 |
+
# Multi-headed Attention Module's params
|
132 |
+
self_attention_model: rel_pos # rel_pos or abs_pos
|
133 |
+
n_heads: 4 # !! may need to be lower for smaller d_models
|
134 |
+
# [left, right] specifies the number of steps to be seen from left and right of each step in self-attention
|
135 |
+
att_context_size: [-1, -1] # -1 means unlimited context
|
136 |
+
att_context_style: regular # regular or chunked_limited
|
137 |
+
xscaling: true # scales up the input embeddings by sqrt(d_model)
|
138 |
+
untie_biases: true # unties the biases of the TransformerXL layers
|
139 |
+
pos_emb_max_len: 5000
|
140 |
+
|
141 |
+
# Convolution module's params
|
142 |
+
conv_kernel_size: 31
|
143 |
+
conv_norm_type: "batch_norm" # batch_norm or layer_norm or groupnormN (N specifies the number of groups)
|
144 |
+
# conv_context_size can be"causal" or a list of two integers while conv_context_size[0]+conv_context_size[1]+1==conv_kernel_size
|
145 |
+
# null means [(kernel_size-1)//2, (kernel_size-1)//2], and 'causal' means [(kernel_size-1), 0]
|
146 |
+
conv_context_size: null
|
147 |
+
|
148 |
+
### regularization
|
149 |
+
dropout: 0.1 # The dropout used in most of the Conformer Modules
|
150 |
+
dropout_pre_encoder: 0.1 # The dropout used before the encoder
|
151 |
+
dropout_emb: 0.0 # The dropout used for embeddings
|
152 |
+
dropout_att: 0.1 # The dropout for multi-headed attention modules
|
153 |
+
|
154 |
+
# set to non-zero to enable stochastic depth
|
155 |
+
stochastic_depth_drop_prob: 0.0
|
156 |
+
stochastic_depth_mode: linear # linear or uniform
|
157 |
+
stochastic_depth_start_layer: 1
|
158 |
+
|
159 |
+
decoder:
|
160 |
+
_target_: nemo.collections.asr.modules.ConvASRDecoder
|
161 |
+
feat_in: null
|
162 |
+
num_classes: -1
|
163 |
+
vocabulary: []
|
164 |
+
|
165 |
+
# config for InterCTC loss: https://arxiv.org/abs/2102.03216
|
166 |
+
# specify loss weights and which layers to use for InterCTC
|
167 |
+
# e.g., to reproduce the paper results, set loss_weights: [0.3]
|
168 |
+
# and apply_at_layers: [8] (assuming 18 layers). Note that final
|
169 |
+
# layer loss coefficient is automatically adjusted (to 0.7 in above example)
|
170 |
+
interctc:
|
171 |
+
loss_weights: []
|
172 |
+
apply_at_layers: []
|
173 |
+
|
174 |
+
optim: # ??
|
175 |
+
name: adamw
|
176 |
+
lr: 5.0 # ??
|
177 |
+
# optimizer arguments
|
178 |
+
betas: [0.9, 0.98]
|
179 |
+
# less necessity for weight_decay as we already have large augmentations with SpecAug
|
180 |
+
# you may need weight_decay for large models, stable AMP training, small datasets, or when lower augmentations are used
|
181 |
+
# weight decay of 0.0 with lr of 2.0 also works fine
|
182 |
+
weight_decay: 0.0 # ??
|
183 |
+
|
184 |
+
# scheduler setup
|
185 |
+
sched:
|
186 |
+
name: NoamAnnealing
|
187 |
+
d_model: ${model.encoder.d_model}
|
188 |
+
# scheduler config override
|
189 |
+
warmup_steps: 10000
|
190 |
+
warmup_ratio: null
|
191 |
+
min_lr: 1e-6
|
192 |
+
|
193 |
+
trainer:
|
194 |
+
devices: -1 # number of GPUs, -1 would use all available GPUs
|
195 |
+
num_nodes: 1
|
196 |
+
max_epochs: 1000
|
197 |
+
max_steps: -1 # computed at runtime if not set
|
198 |
+
val_check_interval: 1.0 # Set to 0.25 to check 4 times per epoch, or an int for number of iterations
|
199 |
+
accelerator: auto
|
200 |
+
strategy: ddp
|
201 |
+
accumulate_grad_batches: 1
|
202 |
+
gradient_clip_val: 0.0
|
203 |
+
precision: 32 # 16, 32, or bf16
|
204 |
+
log_every_n_steps: 10 # Interval of logging.
|
205 |
+
enable_progress_bar: True
|
206 |
+
num_sanity_val_steps: 0 # number of steps to perform validation steps for sanity check the validation process before starting the training, setting to 0 disables it
|
207 |
+
check_val_every_n_epoch: 1 # number of evaluations on validation every n epochs
|
208 |
+
sync_batchnorm: true
|
209 |
+
enable_checkpointing: False # Provided by exp_manager
|
210 |
+
logger: false # Provided by exp_manager
|
211 |
+
benchmark: false # needs to be false for models with variable-length speech input as it slows down training
|
212 |
+
|
213 |
+
exp_manager:
|
214 |
+
exp_dir: null
|
215 |
+
name: ${name}
|
216 |
+
create_tensorboard_logger: true
|
217 |
+
create_checkpoint_callback: true
|
218 |
+
checkpoint_callback_params:
|
219 |
+
# in case of multiple validation sets, first one is used
|
220 |
+
monitor: "val_wer"
|
221 |
+
mode: "min"
|
222 |
+
save_top_k: 5
|
223 |
+
always_save_nemo: True # saves the checkpoints as nemo files instead of PTL checkpoints
|
224 |
+
|
225 |
+
# you need to set these two to True to continue the training
|
226 |
+
resume_if_exists: false
|
227 |
+
resume_ignore_no_checkpoint: false
|
228 |
+
|
229 |
+
# You may use this section to create a W&B logger
|
230 |
+
create_wandb_logger: false
|
231 |
+
wandb_logger_kwargs:
|
232 |
+
name: null
|
233 |
+
project: null
|
exp_fast_conformer_08-14_04-24/code-folder/configs/demo_root.yaml
ADDED
@@ -0,0 +1,236 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# It contains the default values for training a Fast Conformer-CTC ASR model, large size (~120M) with CTC loss and sub-word encoding.
|
2 |
+
|
3 |
+
# You may find more info about FastConformer here: https://docs.nvidia.com/deeplearning/nemo/user-guide/docs/en/stable/asr/models.html#fast-conformer
|
4 |
+
|
5 |
+
# We suggest to use trainer.precision=bf16 for GPUs which support it otherwise trainer.precision=16 is recommended.
|
6 |
+
# Using bf16 or 16 would make it possible to double the batch size and speedup training/inference. If fp16 is not stable and model diverges after some epochs, you may use fp32.
|
7 |
+
# Here are the suggested batch size per GPU for each precision and memory sizes:
|
8 |
+
|
9 |
+
# +-----------+------------+------------+
|
10 |
+
# | Precision | GPU Memory | Batch Size |
|
11 |
+
# +===========+============+============+
|
12 |
+
# | 32 | 16GB | 16 |
|
13 |
+
# | | 32GB | 32 |
|
14 |
+
# | | 80GB | 64 |
|
15 |
+
# +-----------+------------+------------+
|
16 |
+
# | fp16 or | 16GB | 32 |
|
17 |
+
# | bf16 | 32GB | 64 |
|
18 |
+
# | | 80GB | 128 |
|
19 |
+
# +-----------+------------+------------+
|
20 |
+
# Here are the recommended configs for different variants of FastConformer-CTC-BPE, other parameters are the same as in this config file.
|
21 |
+
#
|
22 |
+
# +--------------+---------+---------+----------+----------------+--------------+--------------------------+-----------------+------------+
|
23 |
+
# | Model | d_model | n_heads | n_layers |conv_kernel_size| weight_decay | pred_hidden/joint_hidden | pred_rnn_layers | xscaling |
|
24 |
+
# +==============+=========+========+===========+================+==============+==========================+=================+============+
|
25 |
+
# | Small (14M) | 176 | 4 | 16 | 9 | 0.0 | 320 | 1 | True |
|
26 |
+
# +--------------+---------+--------+-----------+----------------+--------------+--------------------------+-----------------+------------+
|
27 |
+
# | Medium (32M) | 256 | 4 | 16 | 9 | 1e-3 | 640 | 1 | True |
|
28 |
+
# +--------------+---------+--------+-----------+----------------+--------------+--------------------------+-----------------+------------+
|
29 |
+
# | Large (120M) | 512 | 8 | 17 | 9 | 1e-3 | 640 | 1 | True |
|
30 |
+
# +--------------+---------+--------+-----------+----------------+--------------+--------------------------+-----------------+------------+
|
31 |
+
# | XLarge (616M)| 1024 | 8 | 24 | 9 | 1e-3 | 640 | 2 | False |
|
32 |
+
# +--------------+---------+--------+-----------+----------------+--------------+--------------------------+-----------------+------------+
|
33 |
+
# | XXLarge(1.2B)| 1024 | 8 | 42 | 5 | 1e-3 | 640 | 2 | False |
|
34 |
+
# +--------------------------------------------------------------+--------------+--------------------------+-----------------+------------+
|
35 |
+
|
36 |
+
# Note: They are based on the assumption of max_duration of 20. If you have longer or shorter max_duration, then batch sizes may need to get updated accordingly.
|
37 |
+
|
38 |
+
# Default learning parameters in this config are set for global batch size of 2K while you may use lower values.
|
39 |
+
# To increase the global batch size with limited number of GPUs, you may use higher accumulate_grad_batches.
|
40 |
+
# However accumulate_grad_batches is better to be avoided as long as the global batch size is large enough and training is stable.
|
41 |
+
|
42 |
+
name: "FastConformer-CTC-BPE"
|
43 |
+
|
44 |
+
model:
|
45 |
+
sample_rate: 16000
|
46 |
+
log_prediction: true # enables logging sample predictions in the output during training
|
47 |
+
ctc_reduction: "mean_volume"
|
48 |
+
skip_nan_grad: false
|
49 |
+
|
50 |
+
train_ds:
|
51 |
+
manifest_filepath: ???
|
52 |
+
sample_rate: ${model.sample_rate}
|
53 |
+
batch_size: 16 # you may increase batch_size if your memory allows
|
54 |
+
shuffle: true
|
55 |
+
num_workers: 8
|
56 |
+
pin_memory: true
|
57 |
+
max_duration: 16.7 # it is set for LibriSpeech, you may need to update it for your dataset
|
58 |
+
min_duration: 0.1
|
59 |
+
# tarred datasets
|
60 |
+
is_tarred: false
|
61 |
+
tarred_audio_filepaths: null
|
62 |
+
shuffle_n: 2048
|
63 |
+
# bucketing params
|
64 |
+
bucketing_strategy: "fully_randomized"
|
65 |
+
bucketing_batch_size: null
|
66 |
+
|
67 |
+
validation_ds:
|
68 |
+
manifest_filepath: ???
|
69 |
+
sample_rate: ${model.sample_rate}
|
70 |
+
batch_size: 16 # you may increase batch_size if your memory allows
|
71 |
+
shuffle: false
|
72 |
+
use_start_end_token: false
|
73 |
+
num_workers: 8
|
74 |
+
pin_memory: true
|
75 |
+
|
76 |
+
test_ds:
|
77 |
+
manifest_filepath: null
|
78 |
+
sample_rate: ${model.sample_rate}
|
79 |
+
batch_size: 16 # you may increase batch_size if your memory allows
|
80 |
+
shuffle: false
|
81 |
+
use_start_end_token: false
|
82 |
+
num_workers: 8
|
83 |
+
pin_memory: true
|
84 |
+
|
85 |
+
# recommend vocab size of 128 or 256 when training on ~1k hr datasets and 1k vocab size on 10+k hr datasets
|
86 |
+
# you may find more detail on how to train a tokenizer at: /scripts/tokenizers/process_asr_text_tokenizer.py
|
87 |
+
tokenizer:
|
88 |
+
dir: ??? # path to directory which contains either tokenizer.model (bpe) or vocab.txt (wpe)
|
89 |
+
type: bpe # Can be either bpe (SentencePiece tokenizer) or wpe (WordPiece tokenizer)
|
90 |
+
|
91 |
+
preprocessor:
|
92 |
+
_target_: nemo.collections.asr.modules.AudioToMelSpectrogramPreprocessor
|
93 |
+
sample_rate: ${model.sample_rate}
|
94 |
+
normalize: "per_feature"
|
95 |
+
window_size: 0.025
|
96 |
+
window_stride: 0.01
|
97 |
+
window: "hann"
|
98 |
+
features: 80
|
99 |
+
n_fft: 512
|
100 |
+
log: true
|
101 |
+
frame_splicing: 1
|
102 |
+
dither: 0.00001
|
103 |
+
pad_to: 0
|
104 |
+
pad_value: 0.0
|
105 |
+
|
106 |
+
spec_augment:
|
107 |
+
_target_: nemo.collections.asr.modules.SpectrogramAugmentation
|
108 |
+
freq_masks: 2 # set to zero to disable it
|
109 |
+
# you may use lower time_masks for smaller models to have a faster convergence
|
110 |
+
time_masks: 10 # set to zero to disable it
|
111 |
+
freq_width: 27
|
112 |
+
time_width: 0.05
|
113 |
+
|
114 |
+
encoder:
|
115 |
+
_target_: nemo.collections.asr.modules.ConformerEncoder
|
116 |
+
feat_in: ${model.preprocessor.features}
|
117 |
+
feat_out: -1 # you may set it if you need different output size other than the default d_model
|
118 |
+
n_layers: 18
|
119 |
+
d_model: 512
|
120 |
+
|
121 |
+
# Sub-sampling params
|
122 |
+
subsampling: dw_striding # vggnet, striding, stacking or stacking_norm, dw_striding
|
123 |
+
subsampling_factor: 8 # must be power of 2 for striding and vggnet
|
124 |
+
subsampling_conv_channels: 256 # -1 sets it to d_model
|
125 |
+
causal_downsampling: false
|
126 |
+
|
127 |
+
# Feed forward module's params
|
128 |
+
ff_expansion_factor: 4
|
129 |
+
|
130 |
+
# Multi-headed Attention Module's params
|
131 |
+
self_attention_model: rel_pos # rel_pos or abs_pos
|
132 |
+
n_heads: 8 # may need to be lower for smaller d_models
|
133 |
+
# [left, right] specifies the number of steps to be seen from left and right of each step in self-attention
|
134 |
+
att_context_size: [-1, -1] # -1 means unlimited context
|
135 |
+
att_context_style: regular # regular or chunked_limited
|
136 |
+
xscaling: true # scales up the input embeddings by sqrt(d_model)
|
137 |
+
untie_biases: true # unties the biases of the TransformerXL layers
|
138 |
+
pos_emb_max_len: 5000
|
139 |
+
use_pytorch_sdpa: false # use torch sdpa instead of manual attention
|
140 |
+
use_pytorch_sdpa_backends: [] # empty list means all backends https://pytorch.org/docs/stable/generated/torch.nn.attention.SDPBackend.html e.g. [MATH]
|
141 |
+
|
142 |
+
# Convolution module's params
|
143 |
+
conv_kernel_size: 9
|
144 |
+
conv_norm_type: "batch_norm" # batch_norm or layer_norm or groupnormN (N specifies the number of groups)
|
145 |
+
# conv_context_size can be"causal" or a list of two integers while conv_context_size[0]+conv_context_size[1]+1==conv_kernel_size
|
146 |
+
# null means [(kernel_size-1)//2, (kernel_size-1)//2], and 'causal' means [(kernel_size-1), 0]
|
147 |
+
conv_context_size: null
|
148 |
+
|
149 |
+
### regularization
|
150 |
+
dropout: 0.1 # The dropout used in most of the Conformer Modules
|
151 |
+
dropout_pre_encoder: 0.1 # The dropout used before the encoder
|
152 |
+
dropout_emb: 0.0 # The dropout used for embeddings
|
153 |
+
dropout_att: 0.1 # The dropout for multi-headed attention modules
|
154 |
+
|
155 |
+
# set to non-zero to enable stochastic depth
|
156 |
+
stochastic_depth_drop_prob: 0.0
|
157 |
+
stochastic_depth_mode: linear # linear or uniform
|
158 |
+
stochastic_depth_start_layer: 1
|
159 |
+
|
160 |
+
decoder:
|
161 |
+
_target_: nemo.collections.asr.modules.ConvASRDecoder
|
162 |
+
feat_in: null
|
163 |
+
num_classes: -1
|
164 |
+
vocabulary: []
|
165 |
+
|
166 |
+
# config for InterCTC loss: https://arxiv.org/abs/2102.03216
|
167 |
+
# specify loss weights and which layers to use for InterCTC
|
168 |
+
# e.g., to reproduce the paper results, set loss_weights: [0.3]
|
169 |
+
# and apply_at_layers: [8] (assuming 18 layers). Note that final
|
170 |
+
# layer loss coefficient is automatically adjusted (to 0.7 in above example)
|
171 |
+
interctc:
|
172 |
+
loss_weights: []
|
173 |
+
apply_at_layers: []
|
174 |
+
|
175 |
+
optim:
|
176 |
+
name: adamw
|
177 |
+
lr: 1e-3
|
178 |
+
# optimizer arguments
|
179 |
+
betas: [0.9, 0.98]
|
180 |
+
# less necessity for weight_decay as we already have large augmentations with SpecAug
|
181 |
+
# you may need weight_decay for large models, stable AMP training, small datasets, or when lower augmentations are used
|
182 |
+
# weight decay of 0.0 with lr of 2.0 also works fine
|
183 |
+
weight_decay: 1e-3
|
184 |
+
|
185 |
+
# scheduler setup
|
186 |
+
sched:
|
187 |
+
name: CosineAnnealing
|
188 |
+
# scheduler config override
|
189 |
+
warmup_steps: 15000
|
190 |
+
warmup_ratio: null
|
191 |
+
min_lr: 1e-4
|
192 |
+
|
193 |
+
trainer:
|
194 |
+
devices: -1 # number of GPUs, -1 would use all available GPUs
|
195 |
+
num_nodes: 1
|
196 |
+
max_epochs: 1000
|
197 |
+
max_steps: -1 # computed at runtime if not set
|
198 |
+
val_check_interval: 1.0 # Set to 0.25 to check 4 times per epoch, or an int for number of iterations
|
199 |
+
accelerator: auto
|
200 |
+
strategy:
|
201 |
+
_target_: lightning.pytorch.strategies.DDPStrategy
|
202 |
+
gradient_as_bucket_view: true
|
203 |
+
accumulate_grad_batches: 1
|
204 |
+
gradient_clip_val: 0.0
|
205 |
+
precision: 32 # 16, 32, or bf16
|
206 |
+
log_every_n_steps: 10 # Interval of logging.
|
207 |
+
enable_progress_bar: True
|
208 |
+
num_sanity_val_steps: 0 # number of steps to perform validation steps for sanity check the validation process before starting the training, setting to 0 disables it
|
209 |
+
check_val_every_n_epoch: 1 # number of evaluations on validation every n epochs
|
210 |
+
sync_batchnorm: true
|
211 |
+
enable_checkpointing: False # Provided by exp_manager
|
212 |
+
logger: false # Provided by exp_manager
|
213 |
+
benchmark: false # needs to be false for models with variable-length speech input as it slows down training
|
214 |
+
|
215 |
+
exp_manager:
|
216 |
+
exp_dir: null
|
217 |
+
name: ${name}
|
218 |
+
create_tensorboard_logger: true
|
219 |
+
create_checkpoint_callback: true
|
220 |
+
checkpoint_callback_params:
|
221 |
+
# in case of multiple validation sets, first one is used
|
222 |
+
monitor: "val_wer"
|
223 |
+
mode: "min"
|
224 |
+
save_top_k: 5
|
225 |
+
always_save_nemo: True # saves the checkpoints as nemo files instead of PTL checkpoints
|
226 |
+
|
227 |
+
resume_from_checkpoint: null # The path to a checkpoint file to continue the training, restores the whole state including the epoch, step, LR schedulers, apex, etc.
|
228 |
+
# you need to set these two to True to continue the training
|
229 |
+
resume_if_exists: false
|
230 |
+
resume_ignore_no_checkpoint: false
|
231 |
+
|
232 |
+
# You may use this section to create a W&B logger
|
233 |
+
create_wandb_logger: false
|
234 |
+
wandb_logger_kwargs:
|
235 |
+
name: null
|
236 |
+
project: null
|
exp_fast_conformer_08-14_04-24/code-folder/configs/fast_conformer.yaml
ADDED
@@ -0,0 +1,269 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# It contains the default values for training a Fast Conformer-CTC ASR model, #large size (~120M) with CTC loss and sub-word encoding.
|
2 |
+
|
3 |
+
# You may find more info about FastConformer here: https://docs.nvidia.com/deeplearning/nemo/user-guide/docs/en/stable/asr/models.html#fast-conformer
|
4 |
+
|
5 |
+
# We suggest to use trainer.precision=bf16 for GPUs which support it otherwise trainer.precision=16 is recommended.
|
6 |
+
# Using bf16 or 16 would make it possible to double the batch size and speedup training/inference. If fp16 is not stable and model diverges after some epochs, you may use fp32.
|
7 |
+
# Here are the suggested batch size per GPU for each precision and memory sizes:
|
8 |
+
#! fp16 >> 32 --> batch_size = 16
|
9 |
+
# +-----------+------------+------------+
|
10 |
+
# | Precision | GPU Memory | Batch Size |
|
11 |
+
# +===========+============+============+
|
12 |
+
# | 32 | 16GB | 16 |
|
13 |
+
# | | 32GB | 32 |
|
14 |
+
# | | 80GB | 64 |
|
15 |
+
# +-----------+------------+------------+
|
16 |
+
# | fp16 or | 16GB | 32 |
|
17 |
+
# | bf16 | 32GB | 64 |
|
18 |
+
# | | 80GB | 128 |
|
19 |
+
# +-----------+------------+------------+
|
20 |
+
# Here are the recommended configs for different variants of FastConformer-CTC-BPE, other parameters are the same as in this config file.
|
21 |
+
#
|
22 |
+
# +--------------+---------+---------+----------+----------------+--------------+--------------------------+-----------------+------------+
|
23 |
+
# | Model | d_model | n_heads | n_layers |conv_kernel_size| weight_decay | pred_hidden/joint_hidden | pred_rnn_layers | xscaling |
|
24 |
+
# +==============+=========+========+===========+================+==============+==========================+=================+============+
|
25 |
+
# | Small (14M) | 176 | 4 | 16 | 9 | 0.0 | 320 | 1 | True |
|
26 |
+
# +--------------+---------+--------+-----------+----------------+--------------+--------------------------+-----------------+------------+
|
27 |
+
# | Medium (32M) | 256 | 4 | 16 | 9 | 1e-3 | 640 | 1 | True |
|
28 |
+
# +--------------+---------+--------+-----------+----------------+--------------+--------------------------+-----------------+------------+
|
29 |
+
# | Large (120M) | 512 | 8 | 17 | 9 | 1e-3 | 640 | 1 | True |
|
30 |
+
# +--------------+---------+--------+-----------+----------------+--------------+--------------------------+-----------------+------------+
|
31 |
+
# | XLarge (616M)| 1024 | 8 | 24 | 9 | 1e-3 | 640 | 2 | False |
|
32 |
+
# +--------------+---------+--------+-----------+----------------+--------------+--------------------------+-----------------+------------+
|
33 |
+
# | XXLarge(1.2B)| 1024 | 8 | 42 | 5 | 1e-3 | 640 | 2 | False |
|
34 |
+
# +--------------------------------------------------------------+--------------+--------------------------+-----------------+------------+
|
35 |
+
|
36 |
+
# Note: They are based on the assumption of max_duration of #20. If you have longer or shorter max_duration, then batch sizes may need to get updated accordingly.
|
37 |
+
|
38 |
+
# Default learning parameters in this config are set for global batch size of 2K while you may use lower values.
|
39 |
+
# To increase the global batch size with limited number of GPUs, you may use higher accumulate_grad_batches.
|
40 |
+
# However accumulate_grad_batches is better to be avoided as long as the global batch size is large enough and training is stable.
|
41 |
+
|
42 |
+
name: "FastConformer-CTC-BPE"
|
43 |
+
train_path: "output/annot/train_300.json"
|
44 |
+
dev_path: "output/annot/dev_10.json"
|
45 |
+
test_path: "output/annot/test_10.json"
|
46 |
+
vocab_dir: "output/annot/" #* correct
|
47 |
+
full_val_path: "output/annot/dev_10.json"
|
48 |
+
|
49 |
+
train_ds_batch_size: 16
|
50 |
+
gen_ds_batch_size: 16
|
51 |
+
ds_max_duration: 32.0 #! Will be replaced
|
52 |
+
aug_time_masks: 2 # Change from 10 to faster smooth optimize
|
53 |
+
|
54 |
+
# Model parameters
|
55 |
+
d_model: 256
|
56 |
+
n_heads: 4
|
57 |
+
n_layers: 16
|
58 |
+
conv_kernel_size: 9
|
59 |
+
xscaling: true
|
60 |
+
# Optimize
|
61 |
+
lr: 1e-3 #! Select lr and decay = 0.0, sched, warm_step
|
62 |
+
weight_decay: 1e-3
|
63 |
+
warmup_steps: 15000
|
64 |
+
|
65 |
+
# Training parameters # Dont use # Dont use
|
66 |
+
num_epochs: 1000
|
67 |
+
precision: 32
|
68 |
+
accumulate_grad_batches: 1
|
69 |
+
|
70 |
+
model:
|
71 |
+
sample_rate: 16000
|
72 |
+
log_prediction: "val" #? (change from true to 'val') enables logging sample predictions in the output during training
|
73 |
+
ctc_reduction: "mean_volume"
|
74 |
+
skip_nan_grad: false
|
75 |
+
|
76 |
+
train_ds:
|
77 |
+
manifest_filepath: ${train_path}
|
78 |
+
sample_rate: ${model.sample_rate}
|
79 |
+
batch_size: ${train_ds_batch_size} # you may increase batch_size if your memory allows
|
80 |
+
shuffle: true
|
81 |
+
num_workers: 8
|
82 |
+
pin_memory: true
|
83 |
+
max_duration: ${ds_max_duration} # it is set for LibriSpeech, you may need to update it for your dataset
|
84 |
+
min_duration: 0.1
|
85 |
+
# tarred datasets
|
86 |
+
is_tarred: false
|
87 |
+
tarred_audio_filepaths: null
|
88 |
+
shuffle_n: 2048
|
89 |
+
# bucketing params
|
90 |
+
bucketing_strategy: "fully_randomized"
|
91 |
+
bucketing_batch_size: null
|
92 |
+
|
93 |
+
validation_ds:
|
94 |
+
manifest_filepath: ${dev_path}
|
95 |
+
sample_rate: ${model.sample_rate}
|
96 |
+
batch_size: ${gen_ds_batch_size} # you may increase batch_size if your memory allows
|
97 |
+
shuffle: false
|
98 |
+
use_start_end_token: false
|
99 |
+
num_workers: 8
|
100 |
+
pin_memory: true
|
101 |
+
|
102 |
+
test_ds:
|
103 |
+
manifest_filepath: ${test_path}
|
104 |
+
sample_rate: ${model.sample_rate}
|
105 |
+
batch_size: ${gen_ds_batch_size} # you may increase batch_size if your memory allows
|
106 |
+
shuffle: false
|
107 |
+
use_start_end_token: false
|
108 |
+
num_workers: 8
|
109 |
+
pin_memory: true
|
110 |
+
|
111 |
+
# recommend vocab size of 128 or 256 when training on ~1k hr datasets and 1k vocab size on 10+k hr datasets
|
112 |
+
# you may find more detail on how to train a tokenizer at: /scripts/tokenizers/process_asr_text_tokenizer.py
|
113 |
+
tokenizer:
|
114 |
+
dir: ${vocab_dir} # path to directory which contains either tokenizer.model (bpe) or vocab.txt (wpe)
|
115 |
+
type: wpe # Can be either bpe (SentencePiece tokenizer) or wpe (WordPiece tokenizer)
|
116 |
+
|
117 |
+
preprocessor:
|
118 |
+
_target_: nemo.collections.asr.modules.AudioToMelSpectrogramPreprocessor
|
119 |
+
sample_rate: ${model.sample_rate}
|
120 |
+
normalize: "per_feature"
|
121 |
+
window_size: 0.025
|
122 |
+
window_stride: 0.01
|
123 |
+
window: "hann"
|
124 |
+
features: 80
|
125 |
+
n_fft: 512
|
126 |
+
log: true
|
127 |
+
frame_splicing: 1
|
128 |
+
dither: 0.00001
|
129 |
+
pad_to: 0
|
130 |
+
pad_value: 0.0
|
131 |
+
|
132 |
+
spec_augment:
|
133 |
+
_target_: nemo.collections.asr.modules.SpectrogramAugmentation
|
134 |
+
freq_masks: 2 # set to zero to disable it
|
135 |
+
# you may use lower time_masks for smaller models to have a faster convergence
|
136 |
+
time_masks: ${aug_time_masks} # set to zero to disable it, from 10
|
137 |
+
freq_width: 27
|
138 |
+
time_width: 0.05
|
139 |
+
|
140 |
+
encoder:
|
141 |
+
_target_: nemo.collections.asr.modules.ConformerEncoder
|
142 |
+
feat_in: ${model.preprocessor.features}
|
143 |
+
feat_out: -1 # you may set it if you need different output size other than the default d_model
|
144 |
+
n_layers: ${n_layers}
|
145 |
+
d_model: ${d_model}
|
146 |
+
|
147 |
+
# Sub-sampling params
|
148 |
+
subsampling: dw_striding # vggnet, striding, stacking or stacking_norm, dw_striding
|
149 |
+
subsampling_factor: 8 # must be power of 2 for striding and vggnet
|
150 |
+
subsampling_conv_channels: 256 # -1 sets it to d_model = 256
|
151 |
+
causal_downsampling: false
|
152 |
+
|
153 |
+
# Feed forward module's params
|
154 |
+
ff_expansion_factor: 4
|
155 |
+
|
156 |
+
# Multi-headed Attention Module's params
|
157 |
+
self_attention_model: rel_pos # rel_pos or abs_pos
|
158 |
+
n_heads: ${n_heads} # may need to be lower for smaller d_models
|
159 |
+
# [left, right] specifies the number of steps to be seen from left and right of each step in self-attention
|
160 |
+
att_context_size: [-1, -1] # -1 means unlimited context
|
161 |
+
att_context_style: regular # regular or chunked_limited
|
162 |
+
xscaling: ${xscaling} # scales up the input embeddings by sqrt(d_model)
|
163 |
+
untie_biases: true # unties the biases of the TransformerXL layers
|
164 |
+
pos_emb_max_len: 5000
|
165 |
+
use_pytorch_sdpa: false #! use torch sdpa instead of manual attention
|
166 |
+
use_pytorch_sdpa_backends: [] # empty list means all backends https://pytorch.org/docs/stable/generated/torch.nn.attention.SDPBackend.html e.g. [MATH]
|
167 |
+
|
168 |
+
# Convolution module's params
|
169 |
+
conv_kernel_size: ${conv_kernel_size}
|
170 |
+
conv_norm_type: "batch_norm" # batch_norm or layer_norm or groupnormN (N specifies the number of groups)
|
171 |
+
# conv_context_size can be"causal" or a list of two integers while conv_context_size[0]+conv_context_size[1]+1==conv_kernel_size
|
172 |
+
# null means [(kernel_size-1)//2, (kernel_size-1)//2], and 'causal' means [(kernel_size-1), 0]
|
173 |
+
conv_context_size: null
|
174 |
+
|
175 |
+
### regularization
|
176 |
+
dropout: 0.1 # The dropout used in most of the Conformer Modules
|
177 |
+
dropout_pre_encoder: 0.1 # The dropout used before the encoder
|
178 |
+
dropout_emb: 0.0 # The dropout used for embeddings
|
179 |
+
dropout_att: 0.1 # The dropout for multi-headed attention modules
|
180 |
+
|
181 |
+
# set to non-zero to enable stochastic depth
|
182 |
+
stochastic_depth_drop_prob: 0.0
|
183 |
+
stochastic_depth_mode: linear # linear or uniform
|
184 |
+
stochastic_depth_start_layer: 1
|
185 |
+
|
186 |
+
decoder:
|
187 |
+
_target_: nemo.collections.asr.modules.ConvASRDecoder
|
188 |
+
feat_in: null
|
189 |
+
num_classes: -1
|
190 |
+
vocabulary: []
|
191 |
+
|
192 |
+
# config for InterCTC loss: https://arxiv.org/abs/2102.03216
|
193 |
+
# specify loss weights and which layers to use for InterCTC
|
194 |
+
# e.g., to reproduce the paper results, set loss_weights: [0.3]
|
195 |
+
# and apply_at_layers: [8] (assuming 18 layers). Note that final
|
196 |
+
# layer loss coefficient is automatically adjusted (to 0.7 in above example)
|
197 |
+
interctc:
|
198 |
+
loss_weights: []
|
199 |
+
apply_at_layers: []
|
200 |
+
|
201 |
+
optim:
|
202 |
+
name: adamw
|
203 |
+
# lr: 1e-3 #! Select lr and decay, sched, warm_step
|
204 |
+
lr: ${lr}
|
205 |
+
# optimizer arguments
|
206 |
+
betas: [0.9, 0.98]
|
207 |
+
# less necessity for weight_decay as we already have large augmentations with SpecAug
|
208 |
+
# you may need weight_decay for large models, stable AMP training, small datasets, or when lower augmentations are used
|
209 |
+
# weight decay of 0.0 with lr of 2.0 also works fine
|
210 |
+
weight_decay: ${weight_decay}
|
211 |
+
|
212 |
+
# scheduler setup
|
213 |
+
sched:
|
214 |
+
name: CosineAnnealing
|
215 |
+
# scheduler config override
|
216 |
+
# warmup_steps: 15000
|
217 |
+
warmup_steps: ${warmup_steps}
|
218 |
+
warmup_ratio: null
|
219 |
+
min_lr: 1e-4
|
220 |
+
|
221 |
+
# ==============================================================================
|
222 |
+
# Dont use
|
223 |
+
|
224 |
+
trainer:
|
225 |
+
devices: -1 # number of GPUs, -1 would use all available GPUs
|
226 |
+
num_nodes: 1
|
227 |
+
max_epochs: ${num_epochs}
|
228 |
+
max_steps: -1 # computed at runtime if not set
|
229 |
+
val_check_interval: 1.0 # Set to 0.25 to check 4 times per epoch, or an int for number of iterations
|
230 |
+
accelerator: auto
|
231 |
+
strategy:
|
232 |
+
_target_: lightning.pytorch.strategies.DDPStrategy
|
233 |
+
gradient_as_bucket_view: true
|
234 |
+
accumulate_grad_batches: ${accumulate_grad_batches}
|
235 |
+
gradient_clip_val: 0.0
|
236 |
+
precision: ${precision} # 16, 32, or bf16
|
237 |
+
log_every_n_steps: 10 # Interval of logging.
|
238 |
+
enable_progress_bar: True
|
239 |
+
num_sanity_val_steps: 0 # number of steps to perform validation steps for sanity check the validation process before starting the training, setting to 0 disables it
|
240 |
+
check_val_every_n_epoch: 1 # number of evaluations on validation every n epochs
|
241 |
+
sync_batchnorm: true
|
242 |
+
enable_checkpointing: False # Provided by exp_manager
|
243 |
+
logger: false # Provided by exp_manager
|
244 |
+
benchmark: false # needs to be false for models with variable-length speech input as it slows down training
|
245 |
+
|
246 |
+
# ==============================================================================
|
247 |
+
|
248 |
+
exp_manager:
|
249 |
+
exp_dir: null
|
250 |
+
name: ${name}
|
251 |
+
create_tensorboard_logger: true
|
252 |
+
create_checkpoint_callback: true
|
253 |
+
checkpoint_callback_params:
|
254 |
+
# in case of multiple validation sets, first one is used
|
255 |
+
monitor: "val_wer"
|
256 |
+
mode: "min"
|
257 |
+
save_top_k: 5
|
258 |
+
always_save_nemo: True # saves the checkpoints as nemo files instead of PTL checkpoints
|
259 |
+
|
260 |
+
resume_from_checkpoint: null # The path to a checkpoint file to continue the training, restores the whole state including the epoch, step, LR schedulers, apex, etc.
|
261 |
+
# you need to set these two to True to continue the training
|
262 |
+
resume_if_exists: false
|
263 |
+
resume_ignore_no_checkpoint: false
|
264 |
+
|
265 |
+
# You may use this section to create a W&B logger
|
266 |
+
create_wandb_logger: false
|
267 |
+
wandb_logger_kwargs:
|
268 |
+
name: null
|
269 |
+
project: null
|
exp_fast_conformer_08-14_04-24/code-folder/train.py
ADDED
@@ -0,0 +1,259 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os
|
2 |
+
import subprocess
|
3 |
+
import sys
|
4 |
+
|
5 |
+
from sklearn.model_selection import train_test_split
|
6 |
+
|
7 |
+
# Have first: V0 -> this
|
8 |
+
if True:
|
9 |
+
sys.path.append(os.getcwd())
|
10 |
+
if True:
|
11 |
+
from V0_Import.import_src import *
|
12 |
+
if True:
|
13 |
+
from Fast_conformer_nemo.utils.utils import *
|
14 |
+
|
15 |
+
|
16 |
+
# ==============================================================================
|
17 |
+
# Ultil functions
|
18 |
+
|
19 |
+
|
20 |
+
def set_all_seeds(seed=42):
|
21 |
+
random.seed(seed)
|
22 |
+
np.random.seed(seed)
|
23 |
+
torch.manual_seed(seed)
|
24 |
+
torch.cuda.manual_seed_all(seed)
|
25 |
+
|
26 |
+
|
27 |
+
def get_config_nemo():
|
28 |
+
config_path = "Fast_conformer_nemo/configs/fast_conformer.yaml" # NOTE: Setting
|
29 |
+
if len(sys.argv) >= 2:
|
30 |
+
config_path = sys.argv[1]
|
31 |
+
|
32 |
+
with open(config_path, "r", encoding="utf-8") as f:
|
33 |
+
yaml_text = f.read().strip()
|
34 |
+
|
35 |
+
_config = OmegaConf.create(yaml_text)
|
36 |
+
config_dict = OmegaConf.to_container(_config, resolve=True)
|
37 |
+
print(f"\n{config_dict['model']}\n{config_dict}", flush=True)
|
38 |
+
return config_dict
|
39 |
+
|
40 |
+
|
41 |
+
def get_train_dev_test(path): # Train is full, dev is 300, test is full
|
42 |
+
data = []
|
43 |
+
print(path, flush=True)
|
44 |
+
with open(path, "r", encoding="utf-8") as f:
|
45 |
+
for line in f:
|
46 |
+
if line.strip():
|
47 |
+
dic = json.loads(line)
|
48 |
+
data.append(dic)
|
49 |
+
return data
|
50 |
+
|
51 |
+
|
52 |
+
def get_info(train_path):
|
53 |
+
data = []
|
54 |
+
max_dur = 0.0
|
55 |
+
words = []
|
56 |
+
with open(train_path, "r", encoding="utf-8") as f: # Same with above
|
57 |
+
for line in f:
|
58 |
+
if line.strip():
|
59 |
+
dic = json.loads(line)
|
60 |
+
data.append(dic)
|
61 |
+
max_dur = max(max_dur, dic["duration"])
|
62 |
+
words.extend(str(dic["text"]).split())
|
63 |
+
|
64 |
+
words = list(set(sorted(words)))
|
65 |
+
return data, max_dur, len(words)
|
66 |
+
|
67 |
+
|
68 |
+
# ==============================================================================
|
69 |
+
# Setup global vars and data
|
70 |
+
if __name__ == "__main__":
|
71 |
+
set_all_seeds(42) # Set random seed for reproducibility
|
72 |
+
config_dict = get_config_nemo() # Get from path
|
73 |
+
data, max_dur, len_vocab = get_info(config_dict['train_path'])
|
74 |
+
sample_rate = 16000
|
75 |
+
dev_data, test_data = get_train_dev_test(
|
76 |
+
config_dict['dev_path']), get_train_dev_test(config_dict['test_path'])
|
77 |
+
|
78 |
+
log.info("Overall checking:")
|
79 |
+
log.info(f"Number of samples in manifest: {len(data)}")
|
80 |
+
log.info(
|
81 |
+
f"- Max duration in manifest: {max_dur:.2f} seconds, sample rate: {sample_rate}")
|
82 |
+
log.info(f"- Vocab in manifest: {len_vocab} units")
|
83 |
+
log.info(f"Number of dev is {len(dev_data)}, test is {len(test_data)}")
|
84 |
+
|
85 |
+
|
86 |
+
# ==============================================================================
|
87 |
+
# Create params, conf_model, mfpath and change st
|
88 |
+
if __name__ == "__main__":
|
89 |
+
params = copy.deepcopy(config_dict)['model']
|
90 |
+
train_mfpath = os.path.join(res_exp_dir, "_train_mf.json")
|
91 |
+
dev_mfpath = os.path.join(res_exp_dir, "_dev_mf.json")
|
92 |
+
|
93 |
+
for ds in ['train_ds', 'validation_ds']: # Change train and dev temporarily
|
94 |
+
if ds == 'train_ds':
|
95 |
+
params[ds]['manifest_filepath'] = train_mfpath
|
96 |
+
params[ds]['max_duration'] = round(max_dur + 0.1, 2)
|
97 |
+
else:
|
98 |
+
params[ds]['manifest_filepath'] = dev_mfpath
|
99 |
+
log.info(
|
100 |
+
f"Changed params['train_ds']['max_duration'] = {round(max_dur + 0.1, 2)} seconds \nand {train_mfpath}, {dev_mfpath} to write data!")
|
101 |
+
|
102 |
+
# Create an OmegaConf object from the dictionary
|
103 |
+
conf_model = OmegaConf.create(params)
|
104 |
+
write_txt_exp_dir("conf_model.txt", conf_model)
|
105 |
+
# Run pip freeze and capture output as string
|
106 |
+
pip_freeze_str = subprocess.check_output(["pip", "freeze"], text=True)
|
107 |
+
write_txt_exp_dir("pip_env.txt", pip_freeze_str)
|
108 |
+
|
109 |
+
|
110 |
+
# ==============================================================================
|
111 |
+
# Create subset from part and write it to mfpath
|
112 |
+
|
113 |
+
|
114 |
+
def create_train_dev(root_train_data: list, begin_idx, end_idx, num_train, num_dev, root_dev_data=None):
|
115 |
+
def get_min_max_duration(data):
|
116 |
+
mi, ma = 100.0, 0.0
|
117 |
+
for dic in data:
|
118 |
+
mi = min(mi, dic["duration"])
|
119 |
+
ma = max(ma, dic["duration"])
|
120 |
+
return mi, ma
|
121 |
+
|
122 |
+
def split_data(data: list, k):
|
123 |
+
if k >= len(data):
|
124 |
+
return data
|
125 |
+
_train_data, _test_data = train_test_split(
|
126 |
+
data, test_size=k, random_state=42
|
127 |
+
)
|
128 |
+
return _test_data
|
129 |
+
|
130 |
+
# # Sort by distribution
|
131 |
+
# data = list(sorted(root_train_data, key=lambda x: int(
|
132 |
+
# os.path.basename(x["audio_filepath"]).split("_")[0])))
|
133 |
+
|
134 |
+
# Select part
|
135 |
+
data = root_train_data.copy()
|
136 |
+
begin_idx = max(0, begin_idx)
|
137 |
+
end_idx = min(end_idx, len(data))
|
138 |
+
data = data[begin_idx:end_idx]
|
139 |
+
log.info(f"- Duration of this part: [{get_min_max_duration(data)}]")
|
140 |
+
|
141 |
+
# Select random subset/set from part: train from data, and dev from train or is root_dev
|
142 |
+
from tqdm import tqdm
|
143 |
+
num_train = min(num_train, len(data))
|
144 |
+
train_data = split_data(data, num_train)
|
145 |
+
if root_dev_data is None:
|
146 |
+
num_dev = min(num_dev, num_train)
|
147 |
+
dev_data = split_data(train_data, num_dev)
|
148 |
+
else:
|
149 |
+
dev_data = list(root_dev_data).copy()
|
150 |
+
|
151 |
+
# Write subset data back to a new file (or overwrite)
|
152 |
+
dev_in_train = True if root_dev_data is None else False
|
153 |
+
log.info(
|
154 |
+
f"- Number of train is {len(train_data)}, dev is {len(dev_data)}, dev in train: {dev_in_train}")
|
155 |
+
log.info(f"\n{train_data[0]}\n{dev_data[0]}\n")
|
156 |
+
|
157 |
+
with open(train_mfpath, "w", encoding="utf-8") as fout:
|
158 |
+
for item in tqdm(train_data):
|
159 |
+
fout.write(json.dumps(item, ensure_ascii=False) + "\n")
|
160 |
+
|
161 |
+
with open(dev_mfpath, "w", encoding="utf-8") as fout:
|
162 |
+
for item in tqdm(dev_data):
|
163 |
+
fout.write(json.dumps(item, ensure_ascii=False) + "\n")
|
164 |
+
|
165 |
+
|
166 |
+
# ==============================================================================
|
167 |
+
# Init Nemo model and demo first
|
168 |
+
if __name__ == "__main__":
|
169 |
+
log.info(f"\n\nDemo here:")
|
170 |
+
create_train_dev(root_train_data=data, begin_idx=0, end_idx=len(data), num_train=len(
|
171 |
+
data), num_dev=-1, root_dev_data=dev_data) # Demo create data, v
|
172 |
+
trainer = create_new_trainer(epochs=1000, min_stop=0.0) # Demo trainer, v
|
173 |
+
|
174 |
+
# Init nemo model
|
175 |
+
nemo_model = nemo_asr.models.EncDecCTCModelBPE(
|
176 |
+
cfg=conf_model, trainer=trainer)
|
177 |
+
summary = ModelSummary(nemo_model)
|
178 |
+
print(summary)
|
179 |
+
# trainer.fit(nemo_model)
|
180 |
+
|
181 |
+
|
182 |
+
# ==============================================================================
|
183 |
+
# Train model: Multi part training
|
184 |
+
|
185 |
+
|
186 |
+
def train_multi_turn(train_data, dev_data):
|
187 |
+
set_all_seeds(42)
|
188 |
+
# NOTE: Setting for multi part training
|
189 |
+
train_data = list(sorted(train_data, key=lambda x: x["duration"])).copy()
|
190 |
+
|
191 |
+
cnt = len(train_data)
|
192 |
+
setting = {
|
193 |
+
"begin_idx": [0, 0],
|
194 |
+
"end_idx": [5000, cnt],
|
195 |
+
"num_train": [1000, cnt],
|
196 |
+
"num_dev": [100, -1],
|
197 |
+
"epochs": [300, 1000],
|
198 |
+
"min_stop": [0.4, 0.0]
|
199 |
+
}
|
200 |
+
num_part = len(setting["begin_idx"])
|
201 |
+
trainer = None
|
202 |
+
|
203 |
+
for i in range(num_part):
|
204 |
+
begin_idx = setting["begin_idx"][i]
|
205 |
+
end_idx = setting["end_idx"][i]
|
206 |
+
num_train = setting["num_train"][i]
|
207 |
+
num_dev = setting["num_dev"][i]
|
208 |
+
num_epochs = setting["epochs"][i]
|
209 |
+
min_stop = setting["min_stop"][i]
|
210 |
+
log.info(
|
211 |
+
f"\n\n Here {i}: {begin_idx} --> {end_idx} | {num_train}, {num_dev}, {cnt} | {num_epochs}, {min_stop}")
|
212 |
+
|
213 |
+
# Create train dev file
|
214 |
+
if num_dev <= 0:
|
215 |
+
create_train_dev(root_train_data=train_data, begin_idx=begin_idx, end_idx=end_idx,
|
216 |
+
num_train=num_train, num_dev=num_dev, root_dev_data=dev_data)
|
217 |
+
else:
|
218 |
+
create_train_dev(root_train_data=train_data, begin_idx=begin_idx, end_idx=end_idx,
|
219 |
+
num_train=num_train, num_dev=num_dev)
|
220 |
+
|
221 |
+
# Create trainer newly
|
222 |
+
global params, nemo_model, res_exp_dir
|
223 |
+
trainer = create_new_trainer(
|
224 |
+
epochs=num_epochs, min_stop=min_stop)
|
225 |
+
|
226 |
+
nemo_model.setup_training_data(
|
227 |
+
train_data_config=params['train_ds']) # Reload it
|
228 |
+
nemo_model.setup_validation_data(
|
229 |
+
val_data_config=params['validation_ds']) # Reload it
|
230 |
+
trainer.fit(nemo_model) # Fit
|
231 |
+
|
232 |
+
# Save it tmply
|
233 |
+
save_path = os.path.join(res_exp_dir, f"_nemo_model_part_{i}.nemo")
|
234 |
+
nemo_model.save_to(save_path)
|
235 |
+
return trainer
|
236 |
+
|
237 |
+
|
238 |
+
# =======================
|
239 |
+
if __name__ == "__main__":
|
240 |
+
trainer = train_multi_turn(data, dev_data) # Train with data
|
241 |
+
|
242 |
+
# ==========================================================================
|
243 |
+
# Get paths from checkpoint callback
|
244 |
+
# # last in list of callbacks if added last
|
245 |
+
ckpt_callback = trainer.callbacks[-1]
|
246 |
+
best_paths = list(ckpt_callback.best_k_models.keys())
|
247 |
+
|
248 |
+
# Reload and save
|
249 |
+
nemo_model, avg_weights = reload_nemo_from_avg(
|
250 |
+
best_paths=best_paths, nemo_model=nemo_model)
|
251 |
+
avg_ckpt_path = f"{res_exp_dir}/model_avg.ckpt"
|
252 |
+
nemo_model_path = f"{res_exp_dir}/nemo_model_avg.nemo"
|
253 |
+
save_model_to_path(nemo_model, avg_weights, nemo_model_path, avg_ckpt_path)
|
254 |
+
|
255 |
+
# gen, score and save for mfpath
|
256 |
+
nemo_inference_for_mfpath(nemo_model, config_dict['dev_path'])
|
257 |
+
nemo_inference_for_mfpath(nemo_model, config_dict['test_path'])
|
258 |
+
nemo_inference_for_mfpath(nemo_model, config_dict['full_val_path'])
|
259 |
+
push_exp_dir_to_hub(res_exp_dir)
|
exp_fast_conformer_08-14_04-24/code-folder/utils/__pycache__/utils.cpython-311.pyc
ADDED
Binary file (15.3 kB). View file
|
|
exp_fast_conformer_08-14_04-24/code-folder/utils/install_cmd.txt
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
run_cmd("pip install -q datasets==3.6.0")
|
2 |
+
run_cmd("pip install -q numpy==1.26.4")
|
3 |
+
run_cmd("pip install -q scipy==1.15.2")
|
4 |
+
run_cmd("pip install -q omegaconf==2.3.0")
|
5 |
+
|
6 |
+
|
7 |
+
run_cmd("pip install -q torch==2.6.0+cu124")
|
8 |
+
run_cmd("pip install -q accelerate==1.5.2")
|
9 |
+
run_cmd("pip install -q lightning==2.4.0")
|
10 |
+
run_cmd("pip install -q lightning-utilities==0.14.3")
|
11 |
+
run_cmd("pip install -q pytorch-lightning==2.5.1.post0")
|
12 |
+
run_cmd("pip install -q jiwer==4.0.0")
|
13 |
+
|
14 |
+
|
15 |
+
run_cmd("apt-get update && apt-get install -y libsndfile1 ffmpeg")
|
16 |
+
run_cmd("pip install Cython")
|
17 |
+
run_cmd("pip install packaging")
|
18 |
+
run_cmd("pip -q install nemo_toolkit['asr']")
|
exp_fast_conformer_08-14_04-24/code-folder/utils/utils.py
ADDED
@@ -0,0 +1,273 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import copy
|
2 |
+
import csv
|
3 |
+
import glob
|
4 |
+
import json
|
5 |
+
import logging
|
6 |
+
import logging as log
|
7 |
+
import os
|
8 |
+
import random
|
9 |
+
import re
|
10 |
+
import shutil
|
11 |
+
import string
|
12 |
+
import sys
|
13 |
+
import unicodedata
|
14 |
+
|
15 |
+
import jiwer
|
16 |
+
import lightning.pytorch as pl
|
17 |
+
import nemo
|
18 |
+
import nemo.collections.asr as nemo_asr
|
19 |
+
import numpy as np
|
20 |
+
import torch
|
21 |
+
from datasets import load_dataset
|
22 |
+
from jiwer import wer
|
23 |
+
from lightning.pytorch.callbacks import Callback, EarlyStopping, ModelCheckpoint
|
24 |
+
from lightning.pytorch.utilities.model_summary import ModelSummary
|
25 |
+
from omegaconf import OmegaConf
|
26 |
+
from scipy.io import wavfile
|
27 |
+
|
28 |
+
from V0_Import.import_src import push_file_to_hub
|
29 |
+
|
30 |
+
|
31 |
+
class LossLogger(Callback):
|
32 |
+
def __init__(self, exp_dir):
|
33 |
+
super().__init__()
|
34 |
+
self.train_losses = []
|
35 |
+
self.val_losses = []
|
36 |
+
self.train_wer = []
|
37 |
+
self.val_wer = []
|
38 |
+
self.num_last = 100 # ?? epoch unit
|
39 |
+
self.num_plot = 100 # ?? epoch
|
40 |
+
self.allow_show_plot = False # ?? Allow show plot in notebook
|
41 |
+
self.exp_dir = exp_dir
|
42 |
+
|
43 |
+
def on_train_epoch_end(self, trainer, pl_module):
|
44 |
+
train_loss = trainer.callback_metrics.get('train_loss')
|
45 |
+
train_wer = trainer.callback_metrics.get('train_wer')
|
46 |
+
epoch_idx = trainer.current_epoch
|
47 |
+
lr = trainer.optimizers[0].param_groups[0]['lr'] # Print lr
|
48 |
+
print("\n" + "=" * 100, flush=True)
|
49 |
+
logging.info(f"Epoch {trainer.current_epoch} ended.")
|
50 |
+
if train_loss is not None:
|
51 |
+
self.train_losses.append(train_loss.item())
|
52 |
+
logging.info(f"Train Loss: {train_loss.item()}, lr: {lr}")
|
53 |
+
# print(f"Train Loss: {train_loss.item()}, lr: {lr}", flush=True)
|
54 |
+
# if train_wer is not None:
|
55 |
+
# self.train_wer.append(train_wer.item())
|
56 |
+
# logging.info(f"Train WER: {train_wer.item()}")
|
57 |
+
|
58 |
+
if epoch_idx != 0 and epoch_idx % self.num_plot == 0:
|
59 |
+
self._plot_train()
|
60 |
+
|
61 |
+
def on_validation_epoch_end(self, trainer, pl_module):
|
62 |
+
val_loss = trainer.callback_metrics.get('val_loss')
|
63 |
+
val_wer = trainer.callback_metrics.get('val_wer')
|
64 |
+
print("\n" + "=" * 20, flush=True)
|
65 |
+
if val_loss is not None:
|
66 |
+
self.val_losses.append(val_loss.item())
|
67 |
+
logging.info(f"Validation Loss: {val_loss.item()}")
|
68 |
+
if val_wer is not None:
|
69 |
+
self.val_wer.append(val_wer.item())
|
70 |
+
logging.info(f"Validation WER: {val_wer.item()}")
|
71 |
+
|
72 |
+
def _plot_train(self):
|
73 |
+
import matplotlib.pyplot as plt
|
74 |
+
plt.figure(figsize=(10, 6))
|
75 |
+
plt.subplot(2, 1, 1)
|
76 |
+
num = self.num_last
|
77 |
+
plt.plot(self.train_losses[-num:], label='Training Loss')
|
78 |
+
plt.plot(self.val_losses[-num:], label='Validation Loss')
|
79 |
+
plt.xlabel('Epoch')
|
80 |
+
plt.ylabel('Loss')
|
81 |
+
plt.legend()
|
82 |
+
plt.title('Training and Validation Loss')
|
83 |
+
|
84 |
+
plt.subplot(2, 1, 2)
|
85 |
+
plt.plot(self.train_wer[-num:], label='Training WER')
|
86 |
+
plt.plot(self.val_wer[-num:], label='Validation WER')
|
87 |
+
plt.xlabel('Epoch')
|
88 |
+
plt.ylabel('WER')
|
89 |
+
plt.legend()
|
90 |
+
plt.title('Training and Validation WER')
|
91 |
+
plt.tight_layout()
|
92 |
+
# allow_show_plot = True # Allow show plot in notebook
|
93 |
+
if self.allow_show_plot:
|
94 |
+
plt.show()
|
95 |
+
else:
|
96 |
+
plot_png = os.path.join(self.exp_dir, "training_process.png")
|
97 |
+
plt.savefig(plot_png)
|
98 |
+
push_file_to_hub(plot_png)
|
99 |
+
|
100 |
+
def on_train_end(self, trainer, pl_module):
|
101 |
+
self.num_last = len(self.val_wer)
|
102 |
+
self._plot_train()
|
103 |
+
|
104 |
+
|
105 |
+
res_exp_dir = "exp_fast_conformer" # NOTE: Setting
|
106 |
+
os.makedirs(res_exp_dir, exist_ok=True)
|
107 |
+
src_folder = "Fast_conformer_nemo"
|
108 |
+
dst_folder = os.path.join(res_exp_dir, "code-folder")
|
109 |
+
shutil.copytree(src_folder, dst_folder, dirs_exist_ok=True)
|
110 |
+
log.info(f"Copied code to {dst_folder}")
|
111 |
+
|
112 |
+
|
113 |
+
def write_txt_exp_dir(name, var):
|
114 |
+
path = os.path.join(res_exp_dir, name)
|
115 |
+
with open(path, "w", encoding="utf-8") as f:
|
116 |
+
f.write(str(var))
|
117 |
+
f.close()
|
118 |
+
|
119 |
+
|
120 |
+
# ==============================================================================
|
121 |
+
|
122 |
+
|
123 |
+
def create_time_callbacks(num_keep, min_stop, max_hour):
|
124 |
+
# num_keep = 500
|
125 |
+
early_stop_callback = EarlyStopping(
|
126 |
+
monitor="val_wer", # Metric to monitor
|
127 |
+
mode="min", # Lower is better
|
128 |
+
stopping_threshold=min_stop, # Stop if val_wer < 0.x
|
129 |
+
patience=num_keep, # Stop immediately when not reduce
|
130 |
+
verbose=True
|
131 |
+
)
|
132 |
+
# Keep top 5 checkpoints based on val_wer
|
133 |
+
num_avg = 5
|
134 |
+
save_last = False
|
135 |
+
checkpoint_callback = ModelCheckpoint(
|
136 |
+
dirpath=f"{res_exp_dir}/ckpts", # Dir of ckpts
|
137 |
+
filename="epoch{epoch}-valwer{val_wer:.4f}",
|
138 |
+
monitor="val_wer",
|
139 |
+
mode="min",
|
140 |
+
save_top_k=num_avg, # Only keep 5 best
|
141 |
+
save_last=save_last, # Also save last epoch: False
|
142 |
+
)
|
143 |
+
# max_time_training = "00:09:00:00"
|
144 |
+
max_time_training = f"00:{max_hour}:02:00"
|
145 |
+
callback_list = [LossLogger(res_exp_dir),
|
146 |
+
early_stop_callback, checkpoint_callback]
|
147 |
+
return max_time_training, callback_list
|
148 |
+
|
149 |
+
|
150 |
+
def create_new_trainer(epochs, min_stop):
|
151 |
+
# NOTE: Setting
|
152 |
+
max_hour = "00"
|
153 |
+
setting = {
|
154 |
+
'num_keep': 500,
|
155 |
+
'precision': 'bf16', # ! Use AMP
|
156 |
+
'accumulate_grad_batches': 1,
|
157 |
+
'max_hour': max_hour,
|
158 |
+
'enable_progress_bar': False, # ! Off bar training to shorter log
|
159 |
+
}
|
160 |
+
# Create callbacks
|
161 |
+
max_time_training, callback_list = create_time_callbacks(
|
162 |
+
num_keep=setting['num_keep'], min_stop=min_stop, max_hour=max_hour)
|
163 |
+
# Training args
|
164 |
+
trainer_dict = {
|
165 |
+
# Hardware
|
166 |
+
'precision': setting['precision'], # Trade-off
|
167 |
+
'devices': 1,
|
168 |
+
'num_nodes': 1,
|
169 |
+
'accelerator': 'gpu',
|
170 |
+
'strategy': 'auto', # Must: no multi gpu
|
171 |
+
# Training
|
172 |
+
'max_epochs': epochs,
|
173 |
+
'accumulate_grad_batches': setting['accumulate_grad_batches'],
|
174 |
+
'gradient_clip_val': 0.0,
|
175 |
+
# Prediction monitor
|
176 |
+
'log_every_n_steps': 100, # Logging in a epoch train
|
177 |
+
'val_check_interval': 1.0, # Compute wer after 1.0 epoch
|
178 |
+
# No-related
|
179 |
+
'enable_progress_bar': setting['enable_progress_bar'],
|
180 |
+
'num_sanity_val_steps': 0,
|
181 |
+
'check_val_every_n_epoch': 1,
|
182 |
+
# If True, enables cudnn benchmarking for faster training.
|
183 |
+
'sync_batchnorm': True,
|
184 |
+
'benchmark': False,
|
185 |
+
# Saving and callback: New setting for callbacks
|
186 |
+
'enable_checkpointing': True,
|
187 |
+
'max_time': max_time_training,
|
188 |
+
'callbacks': callback_list,
|
189 |
+
}
|
190 |
+
write_txt_exp_dir("args_trainer.txt", trainer_dict)
|
191 |
+
trainer = pl.Trainer(**trainer_dict)
|
192 |
+
return trainer
|
193 |
+
|
194 |
+
|
195 |
+
# ==============================================================================
|
196 |
+
|
197 |
+
|
198 |
+
def reload_nemo_from_avg(best_paths, nemo_model):
|
199 |
+
w_only = False # NOTE: Use w_only = False because it error
|
200 |
+
load_strict = False
|
201 |
+
|
202 |
+
def average_checkpoints(paths):
|
203 |
+
avg_state_dict = None
|
204 |
+
for path in paths:
|
205 |
+
ckpt = torch.load(path, map_location="cpu",
|
206 |
+
weights_only=w_only)["state_dict"]
|
207 |
+
if avg_state_dict is None:
|
208 |
+
avg_state_dict = {k: v.clone() for k, v in ckpt.items()}
|
209 |
+
else:
|
210 |
+
for k in avg_state_dict:
|
211 |
+
# if it's int/bool, leave as-is
|
212 |
+
if torch.is_floating_point(avg_state_dict[k]):
|
213 |
+
avg_state_dict[k] += ckpt[k]
|
214 |
+
for k in avg_state_dict:
|
215 |
+
if torch.is_floating_point(avg_state_dict[k]):
|
216 |
+
avg_state_dict[k] /= len(paths)
|
217 |
+
return avg_state_dict
|
218 |
+
|
219 |
+
# Average
|
220 |
+
log.info(f"\n\nBest paths for AVG(model): {best_paths}")
|
221 |
+
avg_weights = average_checkpoints(best_paths)
|
222 |
+
# Assign averaged weights to NeMo model
|
223 |
+
nemo_model = nemo_model.to("cuda" if torch.cuda.is_available() else "cpu")
|
224 |
+
nemo_model.load_state_dict(avg_weights, strict=load_strict)
|
225 |
+
return nemo_model, avg_weights
|
226 |
+
|
227 |
+
|
228 |
+
def save_model_to_path(nemo_model, avg_weights, nemo_model_path, avg_ckpt_path):
|
229 |
+
torch.save({"state_dict": avg_weights}, avg_ckpt_path)
|
230 |
+
nemo_model.save_to(nemo_model_path)
|
231 |
+
log.info(f"\n\nSaved avg_weights (.ckpt) at {avg_ckpt_path}")
|
232 |
+
log.info(f"Saved averaged NeMo model at {nemo_model_path}")
|
233 |
+
|
234 |
+
|
235 |
+
def nemo_inference_for_mfpath(nemo_model, mfpath):
|
236 |
+
def save_gen_list(text_list, gt_list):
|
237 |
+
random_name = ''.join(random.choices(
|
238 |
+
string.ascii_lowercase + string.digits, k=8))
|
239 |
+
file_path = f"{random_name}.csv"
|
240 |
+
# Create rd name
|
241 |
+
file_path = os.path.join(res_exp_dir, file_path)
|
242 |
+
log.info(f"Saved gen at {file_path}")
|
243 |
+
# Write it as .csv
|
244 |
+
with open(file_path, mode="w", newline="", encoding="utf-8") as f:
|
245 |
+
writer = csv.writer(f)
|
246 |
+
writer.writerow(["Gen", "GT"]) # header
|
247 |
+
for first, second in zip(text_list, gt_list):
|
248 |
+
writer.writerow([first, second])
|
249 |
+
|
250 |
+
with open(mfpath, "r", encoding="utf-8") as fin:
|
251 |
+
data = [json.loads(line) for line in fin]
|
252 |
+
log.info(f"\n\nLoaded {len(data)} entries from {mfpath}")
|
253 |
+
|
254 |
+
references = []
|
255 |
+
predictions = []
|
256 |
+
from tqdm import tqdm
|
257 |
+
for entry in data: # Limit data if need
|
258 |
+
ref = entry['text']
|
259 |
+
audio_path = entry['audio_filepath']
|
260 |
+
with torch.no_grad():
|
261 |
+
pred = nemo_model.transcribe(audio_path, verbose=False)[0].text
|
262 |
+
# if use_norm:
|
263 |
+
# pred = normalize_text_vietnamese(pred)
|
264 |
+
references.append(ref)
|
265 |
+
predictions.append(pred)
|
266 |
+
|
267 |
+
# Computer wer
|
268 |
+
wer_score = wer(references, predictions)
|
269 |
+
log.info(f"WER: {wer_score}")
|
270 |
+
|
271 |
+
# Save pred
|
272 |
+
save_gen_list(text_list=predictions, gt_list=references)
|
273 |
+
return wer_score
|
exp_fast_conformer_08-14_04-24/conf_model.txt
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
{'sample_rate': 16000, 'log_prediction': 'val', 'ctc_reduction': 'mean_volume', 'skip_nan_grad': False, 'train_ds': {'manifest_filepath': 'exp_fast_conformer/_train_mf.json', 'sample_rate': 16000, 'batch_size': 16, 'shuffle': True, 'num_workers': 8, 'pin_memory': True, 'max_duration': 32.03, 'min_duration': 0.1, 'is_tarred': False, 'tarred_audio_filepaths': None, 'shuffle_n': 2048, 'bucketing_strategy': 'fully_randomized', 'bucketing_batch_size': None}, 'validation_ds': {'manifest_filepath': 'exp_fast_conformer/_dev_mf.json', 'sample_rate': 16000, 'batch_size': 16, 'shuffle': False, 'use_start_end_token': False, 'num_workers': 8, 'pin_memory': True}, 'test_ds': {'manifest_filepath': 'output/annot/test_10.json', 'sample_rate': 16000, 'batch_size': 16, 'shuffle': False, 'use_start_end_token': False, 'num_workers': 8, 'pin_memory': True}, 'tokenizer': {'dir': 'output/annot/', 'type': 'wpe'}, 'preprocessor': {'_target_': 'nemo.collections.asr.modules.AudioToMelSpectrogramPreprocessor', 'sample_rate': 16000, 'normalize': 'per_feature', 'window_size': 0.025, 'window_stride': 0.01, 'window': 'hann', 'features': 80, 'n_fft': 512, 'log': True, 'frame_splicing': 1, 'dither': 1e-05, 'pad_to': 0, 'pad_value': 0.0}, 'spec_augment': {'_target_': 'nemo.collections.asr.modules.SpectrogramAugmentation', 'freq_masks': 2, 'time_masks': 2, 'freq_width': 27, 'time_width': 0.05}, 'encoder': {'_target_': 'nemo.collections.asr.modules.ConformerEncoder', 'feat_in': 80, 'feat_out': -1, 'n_layers': 16, 'd_model': 256, 'subsampling': 'dw_striding', 'subsampling_factor': 8, 'subsampling_conv_channels': 256, 'causal_downsampling': False, 'ff_expansion_factor': 4, 'self_attention_model': 'rel_pos', 'n_heads': 4, 'att_context_size': [-1, -1], 'att_context_style': 'regular', 'xscaling': True, 'untie_biases': True, 'pos_emb_max_len': 5000, 'use_pytorch_sdpa': False, 'use_pytorch_sdpa_backends': [], 'conv_kernel_size': 9, 'conv_norm_type': 'batch_norm', 'conv_context_size': None, 'dropout': 0.1, 'dropout_pre_encoder': 0.1, 'dropout_emb': 0.0, 'dropout_att': 0.1, 'stochastic_depth_drop_prob': 0.0, 'stochastic_depth_mode': 'linear', 'stochastic_depth_start_layer': 1}, 'decoder': {'_target_': 'nemo.collections.asr.modules.ConvASRDecoder', 'feat_in': None, 'num_classes': -1, 'vocabulary': []}, 'interctc': {'loss_weights': [], 'apply_at_layers': []}, 'optim': {'name': 'adamw', 'lr': 0.001, 'betas': [0.9, 0.98], 'weight_decay': 0.001, 'sched': {'name': 'CosineAnnealing', 'warmup_steps': 15000, 'warmup_ratio': None, 'min_lr': 0.0001}}}
|
exp_fast_conformer_08-14_04-24/hv3a3zmf.csv
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Gen,GT
|
2 |
+
,con dê này là tôi nuôi được năm nay là năm thứ ba đối với con dê này thì phát triển nó tốt với nguồn vốn vay của đoàn thanh niên hỗ trợ đoàn viên thanh niên phát triển kinh tế tạo công ăn việc làm vốn vay được năm mươi triệu để phát triển đàn dê của gia đình tạo công ăn việc làm ổn định cho hai vợ chồng đối với con dê thì ở địa phương này nó phù hợp
|
3 |
+
,cái gì em cũng không có hết vì người ta cho con dê là em mừng lắm con bò này thì em cũng vay tiền nhà nước mua em cũng cố gắng nuôi con dê để mai mốt phát triển
|
4 |
+
,là cha là mẹ của các cháu nhưng mà tôi cũng muốn con cái mình nó ngoan nhưng mà những cái trường hợp mà các cháu mà đi ra đường thì đúng thật tình là con của mình thì mình quản lý ở nhà thôi còn đi ra đường thì không thể quản lý được bây giờ những trường hợp chức năng mà đã ghi được hình như thế này thì tôi rất đồng tình
|
5 |
+
,nói chung là bây giờ nếu mà trường hợp như là cái dự án bây giờ làm hay không làm thì cũng trả lời cho người dân chúng tôi biết nếu mà làm thì có cái triển khai gì để cho người dân chúng tôi biết còn nếu không làm thì cũng có báo cáo cho người dân chúng tôi trồng mới và chăm sóc hiện tại chúng tôi đã bây giờ là cây trồng đã hầu như là chết rồi
|
6 |
+
,trong quá trình tôi học tập ở trong trường thì được các thầy cô hướng dẫn với cả đào tạo chuyên sâu về chuyên ngành thì tôi tiếp thu được từ ở trong trường cũng rất là nhiều kiến thức hữu ích cho công việc của tôi bây giờ cho nên là ra trường thì cũng là bỡ ngỡ bỡ ngỡ thật nhưng mà
|
7 |
+
,quan trọng nhất là công tác mà thăm khám tận tình chu đáo đổi mới phong cách thay đổi phục vụ đối với bệnh nhân thì thường xuyên là phải cập nhật kiến thức để mà nâng cao trình độ khám của cán bộ y tế
|
8 |
+
,cả làng bây giờ toàn sử dụng các khe suối
|
9 |
+
,thi đua dạy tốt học tốt theo lời bác dạy về phía nhà trường chúng tôi cũng tập trung cho công tác dạy và học động viên các thầy cô tham gia đầy đủ các buổi tập huấn tổ chức tốt các buổi chuyên đề để tiếp cận cái nội dung chương trình cũng như cái tinh thần của việc đổi mới tích cực để đầu tư thêm các trang thiết bị cơ sở vật chất cho khang trang đầy đủ hiện đại thuận tiện cho cái việc khai thác các thông tin cũng như các cái phương tiện trong quá trình dạy và học
|
10 |
+
,nó xuất hiện nhiều nhu cầu mới của khách du lịch chẳng hạn như là xuất hiện loại hình du lịch trải nghiệm du lịch chăm sóc sức khỏe sau dịch là du khách có nhu cầu trải nghiệm không gian sống hòa mình với thiên nhiên khách du lịch người ta sử dụng cái công nghệ bốn chấm không trong check in các địa điểm đến nhân dân vì vậy cho nên là cái việc mà các doanh nghiệp tiên phong trong phát triển du lịch sinh thái sẽ đáp ứng được cái nhu cầu tôi cho rằng nó sẽ phát triển trong thời gian tới hậu covid mười chín
|
11 |
+
,qua cái quá trình kinh doanh cho đến hiện nay thì công ty về hội doanh ngchiệp công ty nhỏ như chúng tôi thì cũng có những cái khó khăn nhất định ví dụ như chẳng hạn về cái quỹ đất hoặc về cái khách hàng về cái quỹ đất thì cũng là mong muốn làm sao mà bên hội doanh nghiệp trẻ mình có ý kiến lên trên là xin làm sao tạo điều kiện cho các hội viên doanh nghiệp trẻ là có được những cái ưu tiên về cái quỹ đất để cho chúng tôi được hoạt động và phát triển
|
exp_fast_conformer_08-14_04-24/model_avg.ckpt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:6f757a892582c1f44f05d3e7f6318990280ea14ccb7b340bc330e500245f1d4e
|
3 |
+
size 109794682
|
exp_fast_conformer_08-14_04-24/nemo_model_avg.nemo
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:fa8211ce44bd717e1d3f9f399ab976758a341fa917b3e5efa537ee2f060ceaf7
|
3 |
+
size 109926400
|
exp_fast_conformer_08-14_04-24/pbhsahxt.csv
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Gen,GT
|
2 |
+
,thì trước đây thì không có đường đi lại ấy thì học sinh kiểu đi bộ có hôm thì học sinh đi đến nửa đường đã lẩn trốn đi vào cạnh đường lề đường hoặc là đến trưa trưa rồi lại về xong rồi từ lúc có đường rồi thì bố mẹ mười mấy trở lại đây thì cũng gia đình cũng có một cái xe xong rồi lúc kia đưa con đi học đưa đến nơi về đến chốn
|
3 |
+
,bên công an thị trấn thì bước tuyên truyền rất là tốt rất là tích cực tuyên truyền cho bà con đến từng hộ nhà cũng thông báo cho bà con đến đây làm
|
4 |
+
,gây hại nhiều hơn so với vườn được thông thoáng thưa bà con thì đối với về sinh lý cây điều là cây tập trung ra hoa ở đầu cành đầu tán nên các cái cành trong tán thì nó sẽ không cho hoa hiệu quả nên bà con tiến hành các cắt tỉa các cành trong tán và chăm sóc và
|
5 |
+
,sự phối hợp với các phòng ban chuyên môn ví dụ phòng tài nguyên môi trường phòng kinh tế hạ tầng phòng nông nghiệp các giám khảo đã có kinh nghiệm các anh chị đã có kinh nghiệm cũng như đại học lạc hồng có hai thầy ở đại học lạc hồng về cùng chấm
|
6 |
+
,rồi hỗ trợ về ứng dụng công nghệ cao hỗ trợ về chi phí xây dựng nhà xưởng máy móc thiết bị nhưng mà cũng không quá hai tỷ đồng cho một dự án
|
7 |
+
,sau khi em tốt nghiệp xong cấp ba xong thì có rất nhiều lựa chọn ngành nghề mà người thân trong gia đình đã giới thiệu cho em nhưng sau đó em vẫn quyết định chọn tại trường cao đẳng nghề này thì em cảm thấy em nhận định được hiện tại ngành công nghệ ô tô cũng đang rất cần nhân công và lao động thì em quyết định học để đáp ứng nhu cầu của thị trường sau đó mong muốn là sẽ từ công việc này có một mức lương ổn định
|
8 |
+
,càng tham gia các phong trào thể dục thể thao văn hóa nghệ thuật bao nhiêu thì là càng tốt cho người cao tuổi bấy nhiêu tôi cảm thấy là sức khỏe của tuổi già được nâng lên rất là nhiều nhưng mà tinh thần cảm thấy là sảng khoái vui tươi
|
9 |
+
,tạm đến giờ thì cơ bản thì nó hơn ngày xưa một chút nhưng mà về cái đốt về cái bã rác thải vẫn đổ ở đây nó vẫn cháy âm ỉ cho nên người dân chúng tôi vẫn phải hứng chịu cái khói không khí của bãi rác lên mong muốn chúng tôi bây giờ thì cứ đề xuất coi như là cán bộ coi như là xã hoàn sơn và tiên du và cán bộ tỉnh bắc ninh coi như là sớm di chuyển cái bãi rác này cho người dân chúng tôi được cho các cháu đi học mà môi trường nó trong sạch hơn
|
10 |
+
,đảm bảo để mà bảo vệ và trồng rừng bảo vệ cho rừng để sau này cho con cái không phá làm nương rẫy như bà con hồi xưa bây giờ bà con bảo vệ để tương lai cho con cái sau này hưởng từ rừng
|
11 |
+
,liên tiếp xảy ra các vụ rất nghiêm trọng trước cái tình hình trên phòng cảnh sát hình sự đã tham mưu cho giám đốc công an tỉnh một kế hoạch huy động lực lượng cán bộ phương tiện và thực hiện các cái giải pháp phòng ngừa và đấu tranh
|
exp_fast_conformer_08-14_04-24/pip_env.txt
ADDED
@@ -0,0 +1,888 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
absl-py==1.4.0
|
2 |
+
accelerate==1.5.2
|
3 |
+
aiofiles==22.1.0
|
4 |
+
aiohappyeyeballs==2.6.1
|
5 |
+
aiohttp==3.12.13
|
6 |
+
aiosignal==1.3.2
|
7 |
+
aiosqlite==0.21.0
|
8 |
+
alabaster==1.0.0
|
9 |
+
albucore==0.0.24
|
10 |
+
albumentations==2.0.8
|
11 |
+
ale-py==0.11.1
|
12 |
+
alembic==1.16.2
|
13 |
+
altair==5.5.0
|
14 |
+
annotated-types==0.7.0
|
15 |
+
annoy==1.17.3
|
16 |
+
ansicolors==1.1.8
|
17 |
+
antlr4-python3-runtime==4.9.3
|
18 |
+
anyio==4.9.0
|
19 |
+
argon2-cffi==25.1.0
|
20 |
+
argon2-cffi-bindings==21.2.0
|
21 |
+
args==0.1.0
|
22 |
+
array_record==0.7.2
|
23 |
+
arrow==1.3.0
|
24 |
+
arviz==0.21.0
|
25 |
+
astropy==7.1.0
|
26 |
+
astropy-iers-data==0.2025.6.23.0.39.50
|
27 |
+
asttokens==3.0.0
|
28 |
+
astunparse==1.6.3
|
29 |
+
atpublic==5.1
|
30 |
+
attrs==25.3.0
|
31 |
+
audioread==3.0.1
|
32 |
+
autograd==1.8.0
|
33 |
+
babel==2.17.0
|
34 |
+
backcall==0.2.0
|
35 |
+
backports.tarfile==1.2.0
|
36 |
+
bayesian-optimization==3.0.0
|
37 |
+
beartype==0.21.0
|
38 |
+
beautifulsoup4==4.13.4
|
39 |
+
betterproto==2.0.0b6
|
40 |
+
bigframes==2.8.0
|
41 |
+
bigquery-magics==0.9.0
|
42 |
+
bitsandbytes==0.45.5
|
43 |
+
bleach==6.2.0
|
44 |
+
blinker==1.9.0
|
45 |
+
blis==1.3.0
|
46 |
+
blobfile==3.0.0
|
47 |
+
blosc2==3.5.0
|
48 |
+
bokeh==3.7.3
|
49 |
+
Boruta==0.4.3
|
50 |
+
boto3==1.39.1
|
51 |
+
botocore==1.39.1
|
52 |
+
Bottleneck==1.4.2
|
53 |
+
-e git+https://github.com/SohierDane/BigQuery_Helper@8615a7f6c1663e7f2d48aa2b32c2dbcb600a440f#egg=bq_helper
|
54 |
+
bqplot==0.12.45
|
55 |
+
braceexpand==0.1.7
|
56 |
+
branca==0.8.1
|
57 |
+
build==1.2.2.post1
|
58 |
+
CacheControl==0.14.3
|
59 |
+
cachetools==5.5.2
|
60 |
+
Cartopy==0.24.1
|
61 |
+
catalogue==2.0.10
|
62 |
+
catboost==1.2.8
|
63 |
+
category_encoders==2.7.0
|
64 |
+
certifi==2025.6.15
|
65 |
+
cesium==0.12.4
|
66 |
+
cffi==1.17.1
|
67 |
+
chardet==5.2.0
|
68 |
+
charset-normalizer==3.4.2
|
69 |
+
Chessnut==0.4.1
|
70 |
+
chex==0.1.89
|
71 |
+
clarabel==0.11.1
|
72 |
+
click==8.2.1
|
73 |
+
click-plugins==1.1.1.2
|
74 |
+
cligj==0.7.2
|
75 |
+
clint==0.5.1
|
76 |
+
cloudpathlib==0.21.1
|
77 |
+
cloudpickle==3.1.1
|
78 |
+
cmake==3.31.6
|
79 |
+
cmdstanpy==1.2.5
|
80 |
+
colorama==0.4.6
|
81 |
+
colorcet==3.1.0
|
82 |
+
colorlog==6.9.0
|
83 |
+
colorlover==0.3.0
|
84 |
+
colour==0.1.5
|
85 |
+
comm==0.2.2
|
86 |
+
community==1.0.0b1
|
87 |
+
confection==0.1.5
|
88 |
+
cons==0.4.6
|
89 |
+
contourpy==1.3.2
|
90 |
+
coverage==7.9.1
|
91 |
+
cramjam==2.10.0
|
92 |
+
cryptography==44.0.3
|
93 |
+
cuda-bindings==12.9.0
|
94 |
+
cuda-python==12.9.0
|
95 |
+
cudf-cu12==25.2.2
|
96 |
+
cudf-polars-cu12==25.2.2
|
97 |
+
cufflinks==0.17.3
|
98 |
+
cuml-cu12==25.2.1
|
99 |
+
cupy-cuda12x==13.4.1
|
100 |
+
curl_cffi==0.11.4
|
101 |
+
cuvs-cu12==25.2.1
|
102 |
+
cvxopt==1.3.2
|
103 |
+
cvxpy==1.6.6
|
104 |
+
cycler==0.12.1
|
105 |
+
cyipopt==1.5.0
|
106 |
+
cymem==2.0.11
|
107 |
+
Cython==3.0.12
|
108 |
+
cytoolz==1.0.1
|
109 |
+
daal==2025.6.1
|
110 |
+
dacite==1.9.2
|
111 |
+
dask==2024.12.1
|
112 |
+
dask-cuda==25.2.0
|
113 |
+
dask-cudf-cu12==25.2.2
|
114 |
+
dask-expr==1.1.21
|
115 |
+
dataclasses-json==0.6.7
|
116 |
+
dataproc-spark-connect==0.7.5
|
117 |
+
datascience==0.17.6
|
118 |
+
datasets==3.6.0
|
119 |
+
db-dtypes==1.4.3
|
120 |
+
dbus-python==1.2.18
|
121 |
+
deap==1.4.3
|
122 |
+
debugpy==1.8.0
|
123 |
+
decorator==4.4.2
|
124 |
+
deepdiff==8.5.0
|
125 |
+
defusedxml==0.7.1
|
126 |
+
Deprecated==1.2.18
|
127 |
+
diffusers==0.34.0
|
128 |
+
dill==0.3.8
|
129 |
+
dipy==1.11.0
|
130 |
+
distributed==2024.12.1
|
131 |
+
distributed-ucxx-cu12==0.42.0
|
132 |
+
distro==1.9.0
|
133 |
+
dlib==19.24.6
|
134 |
+
dm-tree==0.1.9
|
135 |
+
dnspython==2.7.0
|
136 |
+
docker==7.1.0
|
137 |
+
docopt==0.6.2
|
138 |
+
docstring-to-markdown==0.17
|
139 |
+
docstring_parser==0.16
|
140 |
+
docutils==0.21.2
|
141 |
+
dopamine_rl==4.1.2
|
142 |
+
duckdb==1.2.2
|
143 |
+
earthengine-api==1.5.21
|
144 |
+
easydict==1.13
|
145 |
+
easyocr==1.7.2
|
146 |
+
editdistance==0.8.1
|
147 |
+
eerepr==0.1.2
|
148 |
+
einops==0.8.1
|
149 |
+
eli5==0.13.0
|
150 |
+
email_validator==2.2.0
|
151 |
+
emoji==2.14.1
|
152 |
+
en_core_web_sm @ https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.8.0/en_core_web_sm-3.8.0-py3-none-any.whl#sha256=1932429db727d4bff3deed6b34cfc05df17794f4a52eeb26cf8928f7c1a0fb85
|
153 |
+
entrypoints==0.4
|
154 |
+
et_xmlfile==2.0.0
|
155 |
+
etils==1.12.2
|
156 |
+
etuples==0.3.9
|
157 |
+
execnb==0.1.14
|
158 |
+
Farama-Notifications==0.0.4
|
159 |
+
fastai==2.7.19
|
160 |
+
fastapi==0.115.13
|
161 |
+
fastcore==1.7.29
|
162 |
+
fastdownload==0.0.7
|
163 |
+
fastjsonschema==2.21.1
|
164 |
+
fastprogress==1.0.3
|
165 |
+
fastrlock==0.8.3
|
166 |
+
fasttext==0.9.3
|
167 |
+
featuretools==1.31.0
|
168 |
+
ffmpy==0.6.0
|
169 |
+
fiddle==0.3.0
|
170 |
+
filelock==3.18.0
|
171 |
+
fiona==1.10.1
|
172 |
+
firebase-admin==6.9.0
|
173 |
+
Flask==3.1.1
|
174 |
+
flatbuffers==25.2.10
|
175 |
+
flax==0.10.6
|
176 |
+
folium==0.19.7
|
177 |
+
fonttools==4.58.4
|
178 |
+
fqdn==1.5.1
|
179 |
+
frozendict==2.4.6
|
180 |
+
frozenlist==1.7.0
|
181 |
+
fsspec==2024.12.0
|
182 |
+
funcy==2.0
|
183 |
+
fury==0.12.0
|
184 |
+
future==1.0.0
|
185 |
+
fuzzywuzzy==0.18.0
|
186 |
+
gast==0.6.0
|
187 |
+
gatspy==0.3
|
188 |
+
gcsfs==2025.3.2
|
189 |
+
GDAL==3.8.4
|
190 |
+
gdown==5.2.0
|
191 |
+
geemap==0.35.3
|
192 |
+
gensim==4.3.3
|
193 |
+
geocoder==1.38.1
|
194 |
+
geographiclib==2.0
|
195 |
+
geojson==3.2.0
|
196 |
+
geopandas==0.14.4
|
197 |
+
geopy==2.4.1
|
198 |
+
ghapi==1.0.6
|
199 |
+
gin-config==0.5.0
|
200 |
+
gitdb==4.0.12
|
201 |
+
GitPython==3.1.44
|
202 |
+
glob2==0.7
|
203 |
+
google==2.0.3
|
204 |
+
google-ai-generativelanguage==0.6.15
|
205 |
+
google-api-core==1.34.1
|
206 |
+
google-api-python-client==2.173.0
|
207 |
+
google-auth==2.40.3
|
208 |
+
google-auth-httplib2==0.2.0
|
209 |
+
google-auth-oauthlib==1.2.2
|
210 |
+
google-cloud-aiplatform==1.99.0
|
211 |
+
google-cloud-automl==1.0.1
|
212 |
+
google-cloud-bigquery==3.25.0
|
213 |
+
google-cloud-bigquery-connection==1.18.3
|
214 |
+
google-cloud-core==2.4.3
|
215 |
+
google-cloud-dataproc==5.20.0
|
216 |
+
google-cloud-datastore==2.21.0
|
217 |
+
google-cloud-firestore==2.21.0
|
218 |
+
google-cloud-functions==1.20.4
|
219 |
+
google-cloud-iam==2.19.1
|
220 |
+
google-cloud-language==2.17.2
|
221 |
+
google-cloud-resource-manager==1.14.2
|
222 |
+
google-cloud-spanner==3.55.0
|
223 |
+
google-cloud-storage==2.19.0
|
224 |
+
google-cloud-translate==3.12.1
|
225 |
+
google-cloud-videointelligence==2.16.2
|
226 |
+
google-cloud-vision==3.10.2
|
227 |
+
google-colab @ file:///colabtools/dist/google_colab-1.0.0.tar.gz
|
228 |
+
google-crc32c==1.7.1
|
229 |
+
google-genai==1.21.1
|
230 |
+
google-generativeai==0.8.5
|
231 |
+
google-pasta==0.2.0
|
232 |
+
google-resumable-media==2.7.2
|
233 |
+
googleapis-common-protos==1.70.0
|
234 |
+
googledrivedownloader==1.1.0
|
235 |
+
gpxpy==1.6.2
|
236 |
+
gradio==5.31.0
|
237 |
+
gradio_client==1.10.1
|
238 |
+
graphviz==0.21
|
239 |
+
greenlet==3.2.3
|
240 |
+
groovy==0.1.2
|
241 |
+
grpc-google-iam-v1==0.14.2
|
242 |
+
grpc-interceptor==0.15.4
|
243 |
+
grpcio==1.73.1
|
244 |
+
grpcio-status==1.49.0rc1
|
245 |
+
grpclib==0.4.8
|
246 |
+
gspread==6.2.1
|
247 |
+
gspread-dataframe==4.0.0
|
248 |
+
gym==0.25.2
|
249 |
+
gym-notices==0.0.8
|
250 |
+
gymnasium==0.29.0
|
251 |
+
h11==0.16.0
|
252 |
+
h2==4.2.0
|
253 |
+
h2o==3.46.0.7
|
254 |
+
h5netcdf==1.6.1
|
255 |
+
h5py==3.14.0
|
256 |
+
haversine==2.9.0
|
257 |
+
hdbscan==0.8.40
|
258 |
+
hep_ml==0.8.0
|
259 |
+
hf-xet==1.1.5
|
260 |
+
hf_transfer==0.1.9
|
261 |
+
highspy==1.11.0
|
262 |
+
holidays==0.75
|
263 |
+
holoviews==1.20.2
|
264 |
+
hpack==4.1.0
|
265 |
+
html5lib==1.1
|
266 |
+
htmlmin==0.1.12
|
267 |
+
httpcore==1.0.9
|
268 |
+
httpimport==1.4.1
|
269 |
+
httplib2==0.22.0
|
270 |
+
httpx==0.28.1
|
271 |
+
huggingface-hub==0.33.1
|
272 |
+
humanize==4.12.3
|
273 |
+
hydra-core==1.3.2
|
274 |
+
hyperframe==6.1.0
|
275 |
+
hyperopt==0.2.7
|
276 |
+
ibis-framework==9.5.0
|
277 |
+
id==1.5.0
|
278 |
+
idna==3.10
|
279 |
+
igraph==0.11.9
|
280 |
+
ImageHash==4.3.1
|
281 |
+
imageio==2.37.0
|
282 |
+
imageio-ffmpeg==0.6.0
|
283 |
+
imagesize==1.4.1
|
284 |
+
imbalanced-learn==0.13.0
|
285 |
+
immutabledict==4.2.1
|
286 |
+
importlib_metadata==8.7.0
|
287 |
+
importlib_resources==6.5.2
|
288 |
+
imutils==0.5.4
|
289 |
+
in-toto-attestation==0.9.3
|
290 |
+
indic_numtowords==1.0.2
|
291 |
+
inflect==7.5.0
|
292 |
+
iniconfig==2.1.0
|
293 |
+
intel-cmplr-lib-rt==2024.2.0
|
294 |
+
intel-cmplr-lib-ur==2024.2.0
|
295 |
+
intel-openmp==2024.2.0
|
296 |
+
intervaltree==3.1.0
|
297 |
+
ipyevents==2.0.2
|
298 |
+
ipyfilechooser==0.6.0
|
299 |
+
ipykernel==6.17.1
|
300 |
+
ipyleaflet==0.20.0
|
301 |
+
ipympl==0.9.7
|
302 |
+
ipyparallel==8.8.0
|
303 |
+
ipython==7.34.0
|
304 |
+
ipython-genutils==0.2.0
|
305 |
+
ipython-sql==0.5.0
|
306 |
+
ipytree==0.2.2
|
307 |
+
ipywidgets==8.1.5
|
308 |
+
isoduration==20.11.0
|
309 |
+
isoweek==1.3.3
|
310 |
+
itsdangerous==2.2.0
|
311 |
+
Janome==0.5.0
|
312 |
+
jaraco.classes==3.4.0
|
313 |
+
jaraco.context==6.0.1
|
314 |
+
jaraco.functools==4.2.1
|
315 |
+
jax==0.5.2
|
316 |
+
jax-cuda12-pjrt==0.5.1
|
317 |
+
jax-cuda12-plugin==0.5.1
|
318 |
+
jaxlib==0.5.1
|
319 |
+
jedi==0.19.2
|
320 |
+
jeepney==0.9.0
|
321 |
+
jieba==0.42.1
|
322 |
+
Jinja2==3.1.6
|
323 |
+
jiter==0.10.0
|
324 |
+
jiwer==3.1.0
|
325 |
+
jmespath==1.0.1
|
326 |
+
joblib==1.5.1
|
327 |
+
json5==0.12.0
|
328 |
+
jsonpatch==1.33
|
329 |
+
jsonpickle==4.1.1
|
330 |
+
jsonpointer==3.0.0
|
331 |
+
jsonschema==4.24.0
|
332 |
+
jsonschema-specifications==2025.4.1
|
333 |
+
jupyter-console==6.1.0
|
334 |
+
jupyter-events==0.12.0
|
335 |
+
jupyter-leaflet==0.20.0
|
336 |
+
jupyter-lsp==1.5.1
|
337 |
+
jupyter-ydoc==0.2.5
|
338 |
+
jupyter_client==8.6.3
|
339 |
+
jupyter_core==5.8.1
|
340 |
+
jupyter_kernel_gateway @ git+https://github.com/googlecolab/kernel_gateway@b134e9945df25c2dcb98ade9129399be10788671
|
341 |
+
jupyter_server==2.12.5
|
342 |
+
jupyter_server_fileid==0.9.3
|
343 |
+
jupyter_server_terminals==0.5.3
|
344 |
+
jupyter_server_ydoc==0.8.0
|
345 |
+
jupyterlab==3.6.8
|
346 |
+
jupyterlab-lsp==3.10.2
|
347 |
+
jupyterlab_pygments==0.3.0
|
348 |
+
jupyterlab_server==2.27.3
|
349 |
+
jupyterlab_widgets==3.0.15
|
350 |
+
jupytext==1.17.2
|
351 |
+
kaggle==1.7.4.5
|
352 |
+
kaggle-environments==1.17.6
|
353 |
+
kagglehub==0.3.12
|
354 |
+
kaldi-python-io==1.2.2
|
355 |
+
keras==3.8.0
|
356 |
+
keras-core==0.1.7
|
357 |
+
keras-cv==0.9.0
|
358 |
+
keras-hub==0.18.1
|
359 |
+
keras-nlp==0.18.1
|
360 |
+
keras-tuner==1.4.7
|
361 |
+
keyring==25.6.0
|
362 |
+
keyrings.google-artifactregistry-auth==1.1.2
|
363 |
+
kiwisolver==1.4.8
|
364 |
+
kornia==0.8.1
|
365 |
+
kornia_rs==0.1.9
|
366 |
+
kt-legacy==1.0.5
|
367 |
+
langchain==0.3.26
|
368 |
+
langchain-core==0.3.66
|
369 |
+
langchain-text-splitters==0.3.8
|
370 |
+
langcodes==3.5.0
|
371 |
+
langid==1.1.6
|
372 |
+
langsmith==0.4.1
|
373 |
+
language_data==1.3.0
|
374 |
+
launchpadlib==1.10.16
|
375 |
+
lazr.restfulclient==0.14.4
|
376 |
+
lazr.uri==1.0.6
|
377 |
+
lazy_loader==0.4
|
378 |
+
learntools @ git+https://github.com/Kaggle/learntools@003526b6ef9d864326e2a099599de3380b4cc94c
|
379 |
+
Levenshtein==0.27.1
|
380 |
+
lhotse==1.30.3
|
381 |
+
libclang==18.1.1
|
382 |
+
libcst==1.8.2
|
383 |
+
libcudf-cu12==25.2.2
|
384 |
+
libcugraph-cu12==25.2.0
|
385 |
+
libcuml-cu12==25.2.1
|
386 |
+
libcuvs-cu12==25.2.1
|
387 |
+
libkvikio-cu12==25.2.1
|
388 |
+
libpysal==4.9.2
|
389 |
+
libraft-cu12==25.2.0
|
390 |
+
librosa==0.11.0
|
391 |
+
libucx-cu12==1.18.1
|
392 |
+
libucxx-cu12==0.42.0
|
393 |
+
lightgbm @ file:///tmp/lightgbm/LightGBM/dist/lightgbm-4.5.0-py3-none-linux_x86_64.whl
|
394 |
+
lightning==2.4.0
|
395 |
+
lightning-utilities==0.14.3
|
396 |
+
lilcom==1.8.1
|
397 |
+
lime==0.2.0.1
|
398 |
+
line_profiler==4.2.0
|
399 |
+
linkify-it-py==2.0.3
|
400 |
+
llvmlite==0.43.0
|
401 |
+
lml==0.2.0
|
402 |
+
locket==1.0.0
|
403 |
+
logical-unification==0.4.6
|
404 |
+
loguru==0.7.3
|
405 |
+
lxml==5.4.0
|
406 |
+
Mako==1.3.10
|
407 |
+
mamba==0.11.3
|
408 |
+
marisa-trie==1.2.1
|
409 |
+
Markdown==3.8.2
|
410 |
+
markdown-it-py==3.0.0
|
411 |
+
MarkupSafe==3.0.2
|
412 |
+
marshmallow==3.26.1
|
413 |
+
matplotlib==3.7.2
|
414 |
+
matplotlib-inline==0.1.7
|
415 |
+
matplotlib-venn==1.1.2
|
416 |
+
mdit-py-plugins==0.4.2
|
417 |
+
mdurl==0.1.2
|
418 |
+
mediapy==1.1.6
|
419 |
+
miniKanren==1.0.3
|
420 |
+
missingno==0.5.2
|
421 |
+
mistune==0.8.4
|
422 |
+
mizani==0.13.5
|
423 |
+
mkl==2025.2.0
|
424 |
+
mkl-fft==1.3.8
|
425 |
+
mkl-random==1.2.4
|
426 |
+
mkl-service==2.4.1
|
427 |
+
mkl-umath==0.1.1
|
428 |
+
ml-dtypes==0.4.1
|
429 |
+
ml_collections==1.1.0
|
430 |
+
mlcrate==0.2.0
|
431 |
+
mlxtend==0.23.4
|
432 |
+
mne==1.9.0
|
433 |
+
model-signing==1.0.1
|
434 |
+
more-itertools==10.7.0
|
435 |
+
moviepy==1.0.3
|
436 |
+
mpld3==0.5.10
|
437 |
+
mpmath==1.3.0
|
438 |
+
msgpack==1.1.1
|
439 |
+
multidict==6.6.3
|
440 |
+
multimethod==1.12
|
441 |
+
multipledispatch==1.0.0
|
442 |
+
multiprocess==0.70.16
|
443 |
+
multitasking==0.0.11
|
444 |
+
murmurhash==1.0.13
|
445 |
+
music21==9.3.0
|
446 |
+
mypy_extensions==1.1.0
|
447 |
+
namex==0.1.0
|
448 |
+
narwhals==1.44.0
|
449 |
+
natsort==8.4.0
|
450 |
+
nbclassic==1.3.1
|
451 |
+
nbclient==0.5.13
|
452 |
+
nbconvert==6.4.5
|
453 |
+
nbdev==2.3.36
|
454 |
+
nbformat==5.10.4
|
455 |
+
ndindex==1.10.0
|
456 |
+
nemo-toolkit==2.4.0
|
457 |
+
nest-asyncio==1.6.0
|
458 |
+
networkx==3.5
|
459 |
+
nibabel==5.3.2
|
460 |
+
nilearn==0.10.4
|
461 |
+
ninja==1.11.1.4
|
462 |
+
nltk==3.9.1
|
463 |
+
notebook==6.5.4
|
464 |
+
notebook_shim==0.2.4
|
465 |
+
num2words==0.5.14
|
466 |
+
numba==0.60.0
|
467 |
+
numba-cuda==0.2.0
|
468 |
+
numexpr==2.11.0
|
469 |
+
numpy==1.26.4
|
470 |
+
nvidia-cublas-cu12==12.4.5.8
|
471 |
+
nvidia-cuda-cupti-cu12==12.4.127
|
472 |
+
nvidia-cuda-nvcc-cu12==12.5.82
|
473 |
+
nvidia-cuda-nvrtc-cu12==12.4.127
|
474 |
+
nvidia-cuda-runtime-cu12==12.4.127
|
475 |
+
nvidia-cudnn-cu12==9.1.0.70
|
476 |
+
nvidia-cufft-cu12==11.2.1.3
|
477 |
+
nvidia-curand-cu12==10.3.5.147
|
478 |
+
nvidia-cusolver-cu12==11.6.1.9
|
479 |
+
nvidia-cusparse-cu12==12.3.1.170
|
480 |
+
nvidia-cusparselt-cu12==0.6.2
|
481 |
+
nvidia-ml-py==12.575.51
|
482 |
+
nvidia-nccl-cu12==2.21.5
|
483 |
+
nvidia-nvcomp-cu12==4.2.0.11
|
484 |
+
nvidia-nvjitlink-cu12==12.4.127
|
485 |
+
nvidia-nvtx-cu12==12.4.127
|
486 |
+
nvtx==0.2.12
|
487 |
+
nx-cugraph-cu12 @ https://pypi.nvidia.com/nx-cugraph-cu12/nx_cugraph_cu12-25.2.0-py3-none-any.whl
|
488 |
+
oauth2client==4.1.3
|
489 |
+
oauthlib==3.3.1
|
490 |
+
odfpy==1.4.1
|
491 |
+
olefile==0.47
|
492 |
+
omegaconf==2.3.0
|
493 |
+
onnx==1.18.0
|
494 |
+
open_spiel==1.6
|
495 |
+
openai==1.91.0
|
496 |
+
opencv-contrib-python==4.11.0.86
|
497 |
+
opencv-python==4.11.0.86
|
498 |
+
opencv-python-headless==4.11.0.86
|
499 |
+
openpyxl==3.1.5
|
500 |
+
openslide-bin==4.0.0.8
|
501 |
+
openslide-python==1.4.2
|
502 |
+
opt_einsum==3.4.0
|
503 |
+
optax==0.2.5
|
504 |
+
optree==0.16.0
|
505 |
+
optuna==4.4.0
|
506 |
+
orbax-checkpoint==0.11.16
|
507 |
+
orderly-set==5.4.1
|
508 |
+
orjson==3.10.18
|
509 |
+
osqp==1.0.4
|
510 |
+
overrides==7.7.0
|
511 |
+
packaging==24.2
|
512 |
+
pandas==2.2.3
|
513 |
+
pandas-datareader==0.10.0
|
514 |
+
pandas-gbq==0.29.1
|
515 |
+
pandas-profiling==3.6.6
|
516 |
+
pandas-stubs==2.2.2.240909
|
517 |
+
pandasql==0.7.3
|
518 |
+
pandocfilters==1.5.1
|
519 |
+
panel==1.7.1
|
520 |
+
papermill==2.6.0
|
521 |
+
param==2.2.1
|
522 |
+
parso==0.8.4
|
523 |
+
parsy==2.1
|
524 |
+
partd==1.4.2
|
525 |
+
path==17.1.0
|
526 |
+
path.py==12.5.0
|
527 |
+
pathlib==1.0.1
|
528 |
+
pathos==0.3.1
|
529 |
+
patsy==1.0.1
|
530 |
+
pdf2image==1.17.0
|
531 |
+
peewee==3.18.1
|
532 |
+
peft==0.15.2
|
533 |
+
pettingzoo==1.24.0
|
534 |
+
pexpect==4.9.0
|
535 |
+
phik==0.12.4
|
536 |
+
pickleshare==0.7.5
|
537 |
+
pillow==11.2.1
|
538 |
+
plac==1.4.5
|
539 |
+
platformdirs==4.3.8
|
540 |
+
plotly==5.24.1
|
541 |
+
plotly-express==0.4.1
|
542 |
+
plotnine==0.14.5
|
543 |
+
pluggy==1.6.0
|
544 |
+
plum-dispatch==2.5.7
|
545 |
+
ply==3.11
|
546 |
+
polars==1.21.0
|
547 |
+
pooch==1.8.2
|
548 |
+
portpicker==1.5.2
|
549 |
+
pox==0.3.6
|
550 |
+
ppft==1.7.7
|
551 |
+
preprocessing==0.1.13
|
552 |
+
preshed==3.0.10
|
553 |
+
prettytable==3.16.0
|
554 |
+
proglog==0.1.12
|
555 |
+
progressbar2==4.5.0
|
556 |
+
prometheus_client==0.22.1
|
557 |
+
promise==2.3
|
558 |
+
prompt_toolkit==3.0.51
|
559 |
+
propcache==0.3.2
|
560 |
+
prophet==1.1.7
|
561 |
+
proto-plus==1.26.1
|
562 |
+
protobuf==5.29.5
|
563 |
+
psutil==7.0.0
|
564 |
+
psycopg2==2.9.10
|
565 |
+
ptyprocess==0.7.0
|
566 |
+
pudb==2025.1
|
567 |
+
puremagic==1.29
|
568 |
+
py-cpuinfo==9.0.0
|
569 |
+
py4j==0.10.9.7
|
570 |
+
pyaml==25.5.0
|
571 |
+
pyannote.core==5.0.0
|
572 |
+
pyannote.database==5.1.3
|
573 |
+
pyannote.metrics==3.2.1
|
574 |
+
PyArabic==0.6.15
|
575 |
+
pyarrow==19.0.1
|
576 |
+
pyasn1==0.6.1
|
577 |
+
pyasn1_modules==0.4.2
|
578 |
+
pybind11==2.13.6
|
579 |
+
pycairo==1.28.0
|
580 |
+
pyclipper==1.3.0.post6
|
581 |
+
pycocotools==2.0.10
|
582 |
+
pycparser==2.22
|
583 |
+
pycryptodome==3.23.0
|
584 |
+
pycryptodomex==3.23.0
|
585 |
+
pycuda==2025.1.1
|
586 |
+
pydantic==2.11.7
|
587 |
+
pydantic_core==2.33.2
|
588 |
+
pydata-google-auth==1.9.1
|
589 |
+
pydegensac==0.1.2
|
590 |
+
pydicom==3.0.1
|
591 |
+
pydot==3.0.4
|
592 |
+
pydotplus==2.0.2
|
593 |
+
PyDrive==1.3.1
|
594 |
+
PyDrive2==1.21.3
|
595 |
+
pydub==0.25.1
|
596 |
+
pyemd==1.0.0
|
597 |
+
pyerfa==2.0.1.5
|
598 |
+
pyexcel-io==0.6.7
|
599 |
+
pyexcel-ods==0.6.0
|
600 |
+
pygame==2.6.1
|
601 |
+
pygit2==1.18.0
|
602 |
+
pygltflib==1.16.4
|
603 |
+
Pygments==2.19.2
|
604 |
+
PyGObject==3.42.0
|
605 |
+
PyJWT==2.10.1
|
606 |
+
pyLDAvis==3.4.1
|
607 |
+
pylibcudf-cu12==25.2.2
|
608 |
+
pylibcugraph-cu12==25.2.0
|
609 |
+
pylibraft-cu12==25.2.0
|
610 |
+
pyloudnorm==0.1.1
|
611 |
+
pymc==5.23.0
|
612 |
+
pymc3==3.11.4
|
613 |
+
pymongo==4.13.2
|
614 |
+
Pympler==1.1
|
615 |
+
pymystem3==0.2.0
|
616 |
+
pynndescent==0.5.13
|
617 |
+
pynvjitlink-cu12==0.5.2
|
618 |
+
pynvml==12.0.0
|
619 |
+
pyogrio==0.11.0
|
620 |
+
pyomo==6.9.2
|
621 |
+
PyOpenGL==3.1.9
|
622 |
+
pyOpenSSL==25.1.0
|
623 |
+
pyparsing==3.0.9
|
624 |
+
pypdf==5.7.0
|
625 |
+
pyperclip==1.9.0
|
626 |
+
pyproj==3.7.1
|
627 |
+
pyproject_hooks==1.2.0
|
628 |
+
pyshp==2.3.1
|
629 |
+
PySocks==1.7.1
|
630 |
+
pyspark==3.5.1
|
631 |
+
pytensor==2.31.4
|
632 |
+
pytesseract==0.3.13
|
633 |
+
pytest==8.3.5
|
634 |
+
python-apt==0.0.0
|
635 |
+
python-bidi==0.6.6
|
636 |
+
python-box==7.3.2
|
637 |
+
python-dateutil==2.9.0.post0
|
638 |
+
python-json-logger==3.3.0
|
639 |
+
python-louvain==0.16
|
640 |
+
python-lsp-jsonrpc==1.1.2
|
641 |
+
python-lsp-server==1.12.2
|
642 |
+
python-multipart==0.0.20
|
643 |
+
python-slugify==8.0.4
|
644 |
+
python-snappy==0.7.3
|
645 |
+
python-utils==3.9.1
|
646 |
+
pytools==2025.1.7
|
647 |
+
pytorch-ignite==0.5.2
|
648 |
+
pytorch-lightning==2.5.1.post0
|
649 |
+
pytz==2025.2
|
650 |
+
PyUpSet==0.1.1.post7
|
651 |
+
pyviz_comms==3.0.6
|
652 |
+
PyWavelets==1.8.0
|
653 |
+
PyYAML==6.0.2
|
654 |
+
pyzmq==24.0.1
|
655 |
+
qgrid==1.3.1
|
656 |
+
qtconsole==5.6.1
|
657 |
+
QtPy==2.4.3
|
658 |
+
raft-dask-cu12==25.2.0
|
659 |
+
RapidFuzz==3.13.0
|
660 |
+
rapids-dask-dependency==25.2.0
|
661 |
+
ratelim==0.1.6
|
662 |
+
ray==2.47.1
|
663 |
+
referencing==0.36.2
|
664 |
+
regex==2024.11.6
|
665 |
+
requests==2.32.4
|
666 |
+
requests-oauthlib==2.0.0
|
667 |
+
requests-toolbelt==1.0.0
|
668 |
+
requirements-parser==0.9.0
|
669 |
+
resampy==0.4.3
|
670 |
+
rfc3161-client==1.0.3
|
671 |
+
rfc3339-validator==0.1.4
|
672 |
+
rfc3986-validator==0.1.1
|
673 |
+
rfc8785==0.1.4
|
674 |
+
rgf-python==3.12.0
|
675 |
+
rich==14.0.0
|
676 |
+
rmm-cu12==25.2.0
|
677 |
+
roman-numerals-py==3.1.0
|
678 |
+
rpds-py==0.25.1
|
679 |
+
rpy2==3.5.17
|
680 |
+
rsa==4.9.1
|
681 |
+
rtree==1.4.0
|
682 |
+
ruamel.yaml==0.18.14
|
683 |
+
ruamel.yaml.clib==0.2.12
|
684 |
+
ruff==0.12.0
|
685 |
+
s3fs==0.4.2
|
686 |
+
s3transfer==0.13.0
|
687 |
+
sacremoses==0.1.1
|
688 |
+
safehttpx==0.1.6
|
689 |
+
safetensors==0.5.3
|
690 |
+
scikit-image==0.25.2
|
691 |
+
scikit-learn==1.2.2
|
692 |
+
scikit-learn-intelex==2025.6.1
|
693 |
+
scikit-multilearn==0.2.0
|
694 |
+
scikit-optimize==0.10.2
|
695 |
+
scikit-plot==0.3.7
|
696 |
+
scikit-surprise==1.1.4
|
697 |
+
scipy==1.15.2
|
698 |
+
scooby==0.10.1
|
699 |
+
scs==3.2.7.post2
|
700 |
+
seaborn==0.12.2
|
701 |
+
SecretStorage==3.3.3
|
702 |
+
securesystemslib==1.3.0
|
703 |
+
segment_anything @ git+https://github.com/facebookresearch/segment-anything.git@dca509fe793f601edb92606367a655c15ac00fdf
|
704 |
+
semantic-version==2.10.0
|
705 |
+
semver==3.0.4
|
706 |
+
Send2Trash==1.8.3
|
707 |
+
sentence-transformers==4.1.0
|
708 |
+
sentencepiece==0.2.0
|
709 |
+
sentry-sdk==2.31.0
|
710 |
+
setproctitle==1.3.6
|
711 |
+
setuptools-scm==8.3.1
|
712 |
+
shap==0.44.1
|
713 |
+
shapely==2.1.1
|
714 |
+
shellingham==1.5.4
|
715 |
+
Shimmy==1.3.0
|
716 |
+
sigstore==3.6.4
|
717 |
+
sigstore-protobuf-specs==0.3.2
|
718 |
+
sigstore-rekor-types==0.0.18
|
719 |
+
simple-parsing==0.1.7
|
720 |
+
simpleitk==2.5.2
|
721 |
+
simplejson==3.20.1
|
722 |
+
simsimd==6.4.9
|
723 |
+
siphash24==1.7
|
724 |
+
six==1.17.0
|
725 |
+
sklearn-compat==0.1.3
|
726 |
+
sklearn-pandas==2.2.0
|
727 |
+
slicer==0.0.7
|
728 |
+
smart-open==7.1.0
|
729 |
+
smmap==5.0.2
|
730 |
+
sniffio==1.3.1
|
731 |
+
snowballstemmer==3.0.1
|
732 |
+
sortedcontainers==2.4.0
|
733 |
+
soundfile==0.13.1
|
734 |
+
soupsieve==2.7
|
735 |
+
sox==1.5.0
|
736 |
+
soxr==0.5.0.post1
|
737 |
+
spacy==3.8.7
|
738 |
+
spacy-legacy==3.0.12
|
739 |
+
spacy-loggers==1.0.5
|
740 |
+
spanner-graph-notebook==1.1.7
|
741 |
+
Sphinx==8.2.3
|
742 |
+
sphinx-rtd-theme==0.2.4
|
743 |
+
sphinxcontrib-applehelp==2.0.0
|
744 |
+
sphinxcontrib-devhelp==2.0.0
|
745 |
+
sphinxcontrib-htmlhelp==2.1.0
|
746 |
+
sphinxcontrib-jsmath==1.0.1
|
747 |
+
sphinxcontrib-qthelp==2.0.0
|
748 |
+
sphinxcontrib-serializinghtml==2.0.0
|
749 |
+
SQLAlchemy==2.0.41
|
750 |
+
sqlglot==25.20.2
|
751 |
+
sqlparse==0.5.3
|
752 |
+
squarify==0.4.4
|
753 |
+
srsly==2.5.1
|
754 |
+
stable-baselines3==2.1.0
|
755 |
+
stanio==0.5.1
|
756 |
+
starlette==0.46.2
|
757 |
+
statsmodels==0.14.4
|
758 |
+
stopit==1.1.2
|
759 |
+
stringzilla==3.12.5
|
760 |
+
stumpy==1.13.0
|
761 |
+
sympy==1.13.1
|
762 |
+
tables==3.10.2
|
763 |
+
tabulate==0.9.0
|
764 |
+
tbb==2022.2.0
|
765 |
+
tbb4py==2022.2.0
|
766 |
+
tblib==3.1.0
|
767 |
+
tcmlib==1.4.0
|
768 |
+
tenacity==8.5.0
|
769 |
+
tensorboard==2.18.0
|
770 |
+
tensorboard-data-server==0.7.2
|
771 |
+
tensorflow==2.18.0
|
772 |
+
tensorflow-cloud==0.1.5
|
773 |
+
tensorflow-datasets==4.9.9
|
774 |
+
tensorflow-hub==0.16.1
|
775 |
+
tensorflow-io==0.37.1
|
776 |
+
tensorflow-io-gcs-filesystem==0.37.1
|
777 |
+
tensorflow-metadata==1.17.2
|
778 |
+
tensorflow-probability==0.25.0
|
779 |
+
tensorflow-text==2.18.1
|
780 |
+
tensorflow_decision_forests==1.11.0
|
781 |
+
tensorstore==0.1.74
|
782 |
+
termcolor==3.1.0
|
783 |
+
terminado==0.18.1
|
784 |
+
testpath==0.6.0
|
785 |
+
text-unidecode==1.3
|
786 |
+
textblob==0.19.0
|
787 |
+
texterrors==0.5.1
|
788 |
+
texttable==1.7.0
|
789 |
+
tf-slim==1.1.0
|
790 |
+
tf_keras==2.18.0
|
791 |
+
Theano==1.0.5
|
792 |
+
Theano-PyMC==1.1.2
|
793 |
+
thinc==8.3.6
|
794 |
+
threadpoolctl==3.6.0
|
795 |
+
tifffile==2025.6.11
|
796 |
+
tiktoken==0.9.0
|
797 |
+
timm==1.0.15
|
798 |
+
tinycss2==1.4.0
|
799 |
+
tokenizers==0.21.2
|
800 |
+
toml==0.10.2
|
801 |
+
tomlkit==0.13.3
|
802 |
+
toolz==1.0.0
|
803 |
+
torch @ https://download.pytorch.org/whl/cu124/torch-2.6.0%2Bcu124-cp311-cp311-linux_x86_64.whl
|
804 |
+
torchao==0.10.0
|
805 |
+
torchaudio @ https://download.pytorch.org/whl/cu124/torchaudio-2.6.0%2Bcu124-cp311-cp311-linux_x86_64.whl
|
806 |
+
torchdata==0.11.0
|
807 |
+
torchinfo==1.8.0
|
808 |
+
torchmetrics==1.7.3
|
809 |
+
torchsummary==1.5.1
|
810 |
+
torchtune==0.6.1
|
811 |
+
torchvision @ https://download.pytorch.org/whl/cu124/torchvision-0.21.0%2Bcu124-cp311-cp311-linux_x86_64.whl
|
812 |
+
tornado==6.5.1
|
813 |
+
TPOT==0.12.1
|
814 |
+
tqdm==4.67.1
|
815 |
+
traitlets==5.7.1
|
816 |
+
traittypes==0.2.1
|
817 |
+
transformers==4.51.3
|
818 |
+
treelite==4.4.1
|
819 |
+
treescope==0.1.9
|
820 |
+
triton==3.2.0
|
821 |
+
trx-python==0.3
|
822 |
+
tsfresh==0.21.0
|
823 |
+
tuf==6.0.0
|
824 |
+
tweepy==4.15.0
|
825 |
+
typeguard==4.4.4
|
826 |
+
typer==0.16.0
|
827 |
+
types-python-dateutil==2.9.0.20250516
|
828 |
+
types-pytz==2025.2.0.20250516
|
829 |
+
types-setuptools==80.9.0.20250529
|
830 |
+
typing-inspect==0.9.0
|
831 |
+
typing-inspection==0.4.1
|
832 |
+
typing_extensions==4.14.0
|
833 |
+
tzdata==2025.2
|
834 |
+
tzlocal==5.3.1
|
835 |
+
uc-micro-py==1.0.3
|
836 |
+
ucx-py-cu12==0.42.0
|
837 |
+
ucxx-cu12==0.42.0
|
838 |
+
ujson==5.10.0
|
839 |
+
umap-learn==0.5.7
|
840 |
+
umf==0.11.0
|
841 |
+
update-checker==0.18.0
|
842 |
+
uri-template==1.3.0
|
843 |
+
uritemplate==4.2.0
|
844 |
+
urllib3==2.5.0
|
845 |
+
urwid==3.0.2
|
846 |
+
urwid_readline==0.15.1
|
847 |
+
uvicorn==0.34.3
|
848 |
+
vega-datasets==0.9.0
|
849 |
+
visions==0.8.1
|
850 |
+
vtk==9.3.1
|
851 |
+
wadllib==1.3.6
|
852 |
+
Wand==0.6.13
|
853 |
+
wandb==0.20.1
|
854 |
+
wasabi==1.1.3
|
855 |
+
watchdog==6.0.0
|
856 |
+
wavio==0.0.9
|
857 |
+
wcwidth==0.2.13
|
858 |
+
weasel==0.4.1
|
859 |
+
webcolors==24.11.1
|
860 |
+
webdataset==1.0.2
|
861 |
+
webencodings==0.5.1
|
862 |
+
websocket-client==1.8.0
|
863 |
+
websockets==15.0.1
|
864 |
+
Werkzeug==3.1.3
|
865 |
+
wget==3.2
|
866 |
+
whisper_normalizer==0.1.12
|
867 |
+
widgetsnbextension==4.0.14
|
868 |
+
woodwork==0.31.0
|
869 |
+
wordcloud==1.9.4
|
870 |
+
wrapt==1.17.2
|
871 |
+
wurlitzer==3.1.1
|
872 |
+
xarray==2025.3.1
|
873 |
+
xarray-einstats==0.9.1
|
874 |
+
xgboost==2.0.3
|
875 |
+
xlrd==2.0.2
|
876 |
+
xvfbwrapper==0.2.13
|
877 |
+
xxhash==3.5.0
|
878 |
+
xyzservices==2025.4.0
|
879 |
+
y-py==0.6.2
|
880 |
+
yarl==1.20.1
|
881 |
+
ydata-profiling==4.16.1
|
882 |
+
ydf==0.9.0
|
883 |
+
yellowbrick==1.5
|
884 |
+
yfinance==0.2.63
|
885 |
+
ypy-websocket==0.8.4
|
886 |
+
zict==3.0.0
|
887 |
+
zipp==3.23.0
|
888 |
+
zstandard==0.23.0
|
exp_fast_conformer_08-14_04-24/training_process.png
ADDED
![]() |
exp_fast_conformer_08-14_04-24/xaji0y6d.csv
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Gen,GT
|
2 |
+
,con dê này là tôi nuôi được năm nay là năm thứ ba đối với con dê này thì phát triển nó tốt với nguồn vốn vay của đoàn thanh niên hỗ trợ đoàn viên thanh niên phát triển kinh tế tạo công ăn việc làm vốn vay được năm mươi triệu để phát triển đàn dê của gia đình tạo công ăn việc làm ổn định cho hai vợ chồng đối với con dê thì ở địa phương này nó phù hợp
|
3 |
+
,cái gì em cũng không có hết vì người ta cho con dê là em mừng lắm con bò này thì em cũng vay tiền nhà nước mua em cũng cố gắng nuôi con dê để mai mốt phát triển
|
4 |
+
,là cha là mẹ của các cháu nhưng mà tôi cũng muốn con cái mình nó ngoan nhưng mà những cái trường hợp mà các cháu mà đi ra đường thì đúng thật tình là con của mình thì mình quản lý ở nhà thôi còn đi ra đường thì không thể quản lý được bây giờ những trường hợp chức năng mà đã ghi được hình như thế này thì tôi rất đồng tình
|
5 |
+
,nói chung là bây giờ nếu mà trường hợp như là cái dự án bây giờ làm hay không làm thì cũng trả lời cho người dân chúng tôi biết nếu mà làm thì có cái triển khai gì để cho người dân chúng tôi biết còn nếu không làm thì cũng có báo cáo cho người dân chúng tôi trồng mới và chăm sóc hiện tại chúng tôi đã bây giờ là cây trồng đã hầu như là chết rồi
|
6 |
+
,trong quá trình tôi học tập ở trong trường thì được các thầy cô hướng dẫn với cả đào tạo chuyên sâu về chuyên ngành thì tôi tiếp thu được từ ở trong trường cũng rất là nhiều kiến thức hữu ích cho công việc của tôi bây giờ cho nên là ra trường thì cũng là bỡ ngỡ bỡ ngỡ thật nhưng mà
|
7 |
+
,quan trọng nhất là công tác mà thăm khám tận tình chu đáo đổi mới phong cách thay đổi phục vụ đối với bệnh nhân thì thường xuyên là phải cập nhật kiến thức để mà nâng cao trình độ khám của cán bộ y tế
|
8 |
+
,cả làng bây giờ toàn sử dụng các khe suối
|
9 |
+
,thi đua dạy tốt học tốt theo lời bác dạy về phía nhà trường chúng tôi cũng tập trung cho công tác dạy và học động viên các thầy cô tham gia đầy đủ các buổi tập huấn tổ chức tốt các buổi chuyên đề để tiếp cận cái nội dung chương trình cũng như cái tinh thần của việc đổi mới tích cực để đầu tư thêm các trang thiết bị cơ sở vật chất cho khang trang đầy đủ hiện đại thuận tiện cho cái việc khai thác các thông tin cũng như các cái phương tiện trong quá trình dạy và học
|
10 |
+
,nó xuất hiện nhiều nhu cầu mới của khách du lịch chẳng hạn như là xuất hiện loại hình du lịch trải nghiệm du lịch chăm sóc sức khỏe sau dịch là du khách có nhu cầu trải nghiệm không gian sống hòa mình với thiên nhiên khách du lịch người ta sử dụng cái công nghệ bốn chấm không trong check in các địa điểm đến nhân dân vì vậy cho nên là cái việc mà các doanh nghiệp tiên phong trong phát triển du lịch sinh thái sẽ đáp ứng được cái nhu cầu tôi cho rằng nó sẽ phát triển trong thời gian tới hậu covid mười chín
|
11 |
+
,qua cái quá trình kinh doanh cho đến hiện nay thì công ty về hội doanh ngchiệp công ty nhỏ như chúng tôi thì cũng có những cái khó khăn nhất định ví dụ như chẳng hạn về cái quỹ đất hoặc về cái khách hàng về cái quỹ đất thì cũng là mong muốn làm sao mà bên hội doanh nghiệp trẻ mình có ý kiến lên trên là xin làm sao tạo điều kiện cho các hội viên doanh nghiệp trẻ là có được những cái ưu tiên về cái quỹ đất để cho chúng tôi được hoạt động và phát triển
|