Siapa Pencipta Tuhan

Dalam filosofi, problem of the creator of God, adalah topik perdebatan yang tiada habisnya. Argumennya adalah: “Jika alam semesta diciptakan oleh Tuhan, maka siapa pencipta Tuhan?”

Saya ingin menjawab pertanyaan itu dengan sederhana. Begini analoginya.

Jika alam semesta, sebagai ciptaan, diibaratkan oleh angka 2, maka sebelum angka dua itu pastilah ada angka sebelumnya, yaitu 1. Angka 2 adalah alam semesta dan angka 1 adalah Tuhan. Lalu, siapa/apa sebelum 1? Tidak ada alias nol, 0. Begitu juga dengan Tuhan, tidak ada penciptanya. 

from Blogger https://ift.tt/2gL8jGb
via IFTTT

Membuat Alias untuk Github Copilot CLI

Untuk membuat alias untuk Github Copilot, misal ?? untuk menggantikan `gh copilot suggest`, beberapa baris alias berikut dapat ditambahkan pada fail `.bashrc`.

alias '??'='gh copilot suggest -t shell'
alias 'git?'='gh copilot suggest -t git'
alias 'explain'='gh copilot explain'

Dengan cara ini kita bisa mempermudah hidup dan menghemat waktu. Berikut contohnya:

bagus@m049:~$ ?? list WAV files less than 1 MB

Welcome to GitHub Copilot in the CLI!
version 0.5.4-beta (2024-01-04)

I'm powered by AI, so surprises and mistakes are possible. Make sure to verify any generated code or suggestions, and share feedback so that we can learn and improve. For more information, see https://gh.io/gh-copilot-transparency

Suggestion:                                                                     
                                                                                
  find . -name "*.wav" -size -1M                                                

? Select an option
> Exit
bagus@m049:~$ git? show history

Welcome to GitHub Copilot in the CLI!
version 0.5.4-beta (2024-01-04)

I'm powered by AI, so surprises and mistakes are possible. Make sure to verify any generated code or suggestions, and share feedback so that we can learn and improve. For more information, see https://gh.io/gh-copilot-transparency

Suggestion:                                                                     
                                                                                
  git log                                                                       

? Select an option
> Exit
bagus@m049:~$ explain "make -j 5"

Welcome to GitHub Copilot in the CLI!
version 0.5.4-beta (2024-01-04)

I'm powered by AI, so surprises and mistakes are possible. Make sure to verify any generated code or suggestions, and share feedback so that we can learn and improve. For more information, see https://gh.io/gh-copilot-transparency

Explanation:                                                                    
                                                                                
  • make is a build automation tool used to compile and build projects.         
    • -j 5 specifies the maximum number of jobs (parallel tasks) that make can  
    run simultaneously. In this case, it is set to 5.  

from Blogger https://ift.tt/MVFH1KS
via IFTTT

Menggunakan (Mini) Conda Untuk Komersial (Institusi Riset, dll)

Per 30 September 2020, term of service Anaconda berubah; lisensi berbayar dibutuhkan untuk menggunakan Anaconda untuk keperluan komersial (gratis untuk skala kecil, perusahaan kurang 200 orang pekerja). Miniconda dapat digunakan secara gratis, namun setting default dapat menyebabkan akses ke repository berbayarnya (meskipun gratis).

Solusi singkatnya adalah menambahkan `conda-forge` pada channel di .condarc. Cek dengan `conda config –show channels` sebelum dan sesudah mengganti channel default (tidak tertulis di `.condar`c) dengan `conda-forge`.

Cek setting default channel:

$ conda config --show channels
channels:
  - defaults

Ganti channel default dengan menambahkan conda-forge di fail `.condarc` (default di direktori home)

 auto_activate_base: false
  channels: 
    - conda-forge

Cek kembali config conda:

$ conda config --show channels
channels:
  - conda-forge

Dengan cara ini, Miniconda dapat digunakan secara sah dan halal. Saya menggunakan Miniconda (daripada Anaconda) hanya untuk membuat virtual environment dengan versi python yang berbeda (misal dengan python3.8, python3.12, dll). Instalasi paket dalam python (seperti Numpy, Pandas) tetap saya lakukan dengan pip, bukan dengan Conda.

from Blogger https://ift.tt/zJKAp1B
via IFTTT

Dual Afiliasi

Salah satu cita-cita saya yang belum tercapai adalah dual afiliasi, bekerja di dua institusi dan memberi manfaat untuk keduanya dengan mengisi kekurangan satu insitusi dengan kelebihan institusi lainnya, begitu pula sebaliknya. Contoh terbaik untuk kasus ini adalah Yan Lecun (Facebook dan New York University), Junichi Tsujii (AIST dan Manchester University), dan Junichi Yamagishi (NII dan Edinburg University).

Contoh dari manfaat dual afiliasi adalah pada riset dan publikasi akademik. Biaya publikasi akan tertutupi oleh institusi yang secara finansial lebih stabil. Keuntungan untuk instituti yang secara finansial lebih stabil adalah pada kolaborasi. Contohnya pada institusi privat (Swasta), dimana butuh usaha ekstra untuk merekrut peneliti dan kolaborator. Sebaliknya, hal tersebut mudah dilakukan di universitas. Institusi privat tidak perlu mengeluarkan waktu dan biaya ekstra untuk proyek mereka.

Manfaat utama ada pada siklus teori dan praktek. Dosen (seperti Lecun) yang bekerja di sektor swasta secara dual afiliasi akan dengan mudah menangkap permasalahan nyata (praktek) di lapangan/industri, alih-alih permasalah teoritik di buku teks. Mahasiswa dari dosen yang bersangkutan juga akan memecahkan permasalahan nyata, the real problem, bukan sebatas permasalahan yang ada di buku teks. Permasalahan (soal-soal) di buku teks tetap penting untuk mengasah teori atau konsep dasar dan kerangka berpikir dalam menyelesaikan permasalahan nyata.

Keterbatasan Untuk Dosen PNS

Ada keterbatasan PNS (atau dosen yang berstatus sebagai PNS). Keterbatasan rangkap jabatann tersebut seperi yang didiskusikan di sini: https://www.hukumonline.com/klinik/a/hukumnya-rangkap-menjadi-asn-sekaligus-pegawai-swasta-lt5ed13c19b8117. Diperlukan usaha ekstra untuk mewujudkan dual afiliasi sebagai dosen PNS dan praktisi di tempat lain (atau peneliti di institusi lain).

p.s.: Saat ini saya dual afiliasi, namun bukan sebagai pekerja tetap di salah satu instansinya. Cita-cita saya adalah menjadi staf tetap (long-term) di dua institusi, akademik dan industri/institusi riset.

from bagustris@/home https://ift.tt/3tIsi7u
via IFTTT

Tools for Academic Writing in 2023

When writing a scientific paper, I use several tools below to boost and speed up my writing process. Hence, I only need two weeks to a month to complete the first version of my manuscript. Before going down to the list below, you may also be interested in my resources for academic writing – word concordance [1].

  1. Mendeley (the old desktop version, not the new reference manager, to create a BIB file automatically)
  2. Grammarly (vscode plugin)
  3. Latex Workshop (vscode plugin)
  4. Copilot (vscode plugin)
  5. ChatGPT (to ask questions)
By using these tools, I DON’T need to:
  • Create bibliography manually
  • Sometimes, write all sentences in paragraphs since Copilot will do it.
  • Check the grammar manually.
  • Create Table, Figure, and Equation manually in Latex (thanks to Latex Workshop).
Other tools (unexplored well, in progress for adaptation)
  1. https://ift.tt/DvNPGbf (tool to explain any hard-to-understand terms/sentences in a paper)
  2. https://elicit.org/ (like ChatGPT, but with reference)
  3. LTeX – LanguageTool grammar/spell checking (alternative to Grammarly, free)
Reference

from bagustris@/home https://ift.tt/AtzYI5u
via IFTTT

Mengikuti Sekolah Mengemudi Di Jepang

Tulisan ini adalah catatan pengalaman saya mengikuti sekolah mengemudi di Jepang di awal tahun 2022.

Kenapa driving school?

Ada tiga jalur untuk mendapatkan SIM di Jepang, yakni:

1. Jalur Sekolah (自動車学校, jidousha gakko)

2. Jalur Konversi (外免切替, gaimen kirikae)

3. Jalur Umum (普通一種一般試験, futsu isshu ippan shiken)

Dari ketiga jalur di atas, kenapa saya memilih jalur driving school?

1. Saya belum pernah ‘pegang’ mobil secara formal dan tidak punya SIM A untuk dikonversi.

2. Meski saya bisa saja belajar sendiri kemudian lewat jalur formal, namun waktunya akan sangat lama (1-2 tahun) kalau pakai jalur umum. Waktu tempuh ini juga berlaku untuk mereka yang sudah bisa (bahkan pandai menyetir).

3. Jalur driving school adalah yang paling cepat meski paling mahal.

Oya, ada dua tipe driving school di Jepang: driving school yang punya lisensi untuk tes tulis 50 soal dan praktek, dan driving shool yang tidak punya lisensi tersebut. Saya memilih driving school tipe pertama.

Pendaftaran

Satu-satunya kelemahan jalur driving school adalah biaya pendaftaran yang mahal, yakni sekitar 336,000 yen. Namun, seperti telah saya sampaikan di atas, jalur ini adalah yang tercepat. Saya hanya butuh sekitar dua bulan dari hari pertama les nyetir sampai dengan mendapatkan SIM resmi (bukan SIM belajar atau kari menkyou). 

Untuk info kursus mengemudi yang saya ikuti adalah sebagai berikut.

Nama : Tsuchiura Driving School (Tsuchiura Jidouka Gakkou)

Web: https://ift.tt/32gRHIC

Alamat: 

〒300-0843 茨城県土浦市中村南 4-1-20

TEL 029-841-0577

Mobil yang digunakan untuk latihan (Toyota)

Alur  

Ada empat tahapan atau langkah untuk mendapatkan SIM untuk semua jalur di atas.

1. Tes Praktek I untukKari Menkyou

2. Tes Tulis 50 soal

3. Tes Praktek II

4. Tes Tulis 100 soal

Jika keempat langkah di atas lulus, maka SIM bisa didapatkan. Jika langkah 1-2 terpenuhi, maka SIM belajar (kari menkyou) bisa didapatkan. Jika ada satu saja langkah di atas yang gagal, maka SIM tidak bisa didapatkan. Untuk mengulang setiap langkah ada biaya tambahan, untuk semua jalur. Kasus saya gagal sekali pada tes 50 soal dan mengulang dan membayar biaya test tsb (1700 yen untuk sekali tes).

Kelas

Hari Pertama

Hari pertama ini bisa dibilang fullday. Jam pertama dimulai  jam 9:50 dan berakhir jam 17:50. Istirahat dua kali, jam 11:15-11:50 dan jam 12:50-13:30. Ada tiga kelas (学会,gakka)sekaligus, yakni kelas 1, 6, dan 9. Oya, total ada 26 kelas yang dibagi menjadi tiga periode. Di kelas pertama tadi dikenalkan pengertian kendaran (車, kuruma) yang meliputi mobil (自動車), sepeda (自転車), dan sepeda motor (モトバイク). Poin-poin penting kelas 1 meliputi: seat belt, child seat, driving license, dan surat kelayakan kendaraan (車検). Poin-poin penting kelas 6 membahas banyak tentang perempatan (tata cara belok, berhenti, lurus). Kelas 9 lebih banyak membahas tentang pejalan kali, zebra cross, mengemudi di samping pejalan kali, sepeda, kursi roda dan sejenisnya.  Pada hari pertama ini ada dua (jam) praktek. Praktek pertama dengan simulator meliputi: persiapan sebelum mengemudi (cek depan dan belakang), menyetel kursi, menstarter mobil, memindahka handle dari P, ke R, N, D, S, B (sambil menginjak rem), belok kanan dan belok kiri (tangan dalam keadaan lurus untuk putaran setir > 180 derajat). Praktek kedua adalah dengan mobil asli setelah melalui simulator.

Hari Kedua

Pada hari kedua ada dua kelas dan dua praktek. Kelas pertama adalah kelas 8 membahas tentang perempatan meliputi cara berpindah jalur, menyalip, dan belok kiri kanan. Praktek pertama di hari kedua ini (praktek ketiga secara total) adalah latihan belok (putaran) kanan, kebalikan dari hari pertama. Belok kanan dan kiri berbeda, putaran belok kanan lebih sedikit dari belok kiri. Kelas kedua yakni kelas 10 membahas tentang jenis-jenis SIM (ada tiga: kelas 1, kelas 2, SIM belajar), jenis-jenis SIM dari berat kendaraan dan pelanggaran lalu lintas beserta hukumannya. Setiap melanggar, selain tindakan langsung (tilang) berupa uang, pelanggar akan dikenakan poin. Jika poin tersebut sudah mencapai batas, SIM akan dicabut baik sementara atau permanen. Pada praktek kedua saya berlatih belok kanan dan kiri (sasetsu dan usasetsu). Praktek ini juga meliputi implementasi kelas 8 yakni cara berpindah jalur: lihat room mirror, side mirror, nyalakan sein, hitung tiga detik, tengok kanan, pindah jalur. Praktek kedua ini sangat penting untuk membiasakan menyetir.

Hari ketiga

Hari ketiga mirip dengan hari sebelumnya: dua kelas dan dua praktek. Kelas pertama dimulai dari buku “Rules of the Road” hal 114 berkaitan dengan menyalip, kapan dilarang menyalip, di mana dilarang menyalip dan sejenisnya. Contohnya larangan menyalip adalah ketika mobil di depan kita juga mau menyalip. Contoh tempat dilarang menyalip adalah tanjakan. Kelas kedua berkaitan dengan mobil-mobil emergensi: ambulans, pemadam kebakaran, dan polisi (untuk mengutamakan mobil tersebut). Praktek pertama naik tanjakan dan pindah lajur kanan (berhenti sejenak, rem tangan, gas pelan, lepas rem tangan, bel, reteng kanan, D–>S, turun sambil injak rem pelan-pelan, berhenti, S –> D. Praktek kedua di tikungan S dan J. Poin penting praktek kedua ini adalah injakan rem dan kapan memutar dan mengembalikan handle dengan melihat jalan.

Hari keempat

Skema hari keempat sama dengan hari sebelumnya, dua teori (kelas) dan dua praktek. Kelas pertama berkaitan lampu lalu lintas (merah, kuning, hijau dengan empasis kuning harus berhenti pada dasarnya, kecuali sudah melewati garis putih). Lamu lalu lintas di Jepang berbeda dengan Indonesia, meski hijau tidak serta merta jalan, menunggu mobil dari arah lawan, jika kosong baru bisa jalan. Kelas kedua berkaitan dengan rambu-rambu lalu lintas (secara garis besar dibagi dua, rambu di pinggir jalan dan rambu di permukaan jalan). Praktek pertama dan kedua sama, course seperti gambar di bawah. Bedanya, praktek pertama mbak instrukturnya gaul (pernah tinggal di Jakarta tujuh tahun), sedangkan praktek kedua mbak instrukturnya judes.

Hari keenam

Hari keenam hanya dua praktek. Dua-duanya sama, praktek kedua mengulang praktek pertama. Praktek ini adalah gladi resik untuk praktek I. Rutenya seperti gambar di bawah.

Rute Latihan / Tes Praktek I

Tes Tulis 50 Soal (Hari ketujuh)

Hari ketujuh adalah test untuk step 1. Tes ini merupakan test praktek dengan course C sesuai gambar. Untuk mengambil tes ini harus lulus pre-test online 1, 2, dan 3. Masing-masing test online untuk step 1 berisi 50 soal benar atau salah. Untuk lulus harus memiliki skor (benar) minimal 45. Ada trik khusus untuk test online ini. Setelah test akan muncul review atas jawaban benar dan salah. Highlight semua pertanyaan dan jawaban kemudian print di browser dalam bentuk pdf. Ketika mengulang lagi, tinggal melihat jawaban yang benar. Meski pertanyaannya acak, ada banyak pertanyaan yang sama untuk tiap pre-test tersebut sehingga file pdf sebelumnya sangat membantu untuk mencari jawaban yang benar. Dari test praktek saya mendapat masukan untuk menginjak rem lebih halus dan tidak mendadak. Setelah test praktek adalah test tulis. Meski saya sudah lulus tiga pre-test online di test tulis ini saya tidak lulus. Saya gagal di tes pertama 50 soal untuk mendapatkan kari menkyou. Walhasil saya harus mengulang dan membayar pendaftaran 1700 yen. Jadwal short-term plan saya juga langsung berubah menjadi basic plan.

Hari ke delapan dan seterusnya lupa tidak tercatat, tapi catatan berikut di bawah ini cukup bermanfaat.

Tes Praktek I

Tes praktek I ini secara umum mudah karena hanya di lintasan di dalam driving school (tidak keluar ke Jalan raya). Beberapa hal yang perlu diperhatikan adalah saat sebelum mengemudi (cek spion tengah, side mirror), toleh kanan kiri dan start. Minimal kecepatan pada jalan lurus adalah 40 km,/jam sekali saja. Kecepatan pada saat beluk maksimual 15 km/jam. Belokan S juga di tes kan pada tes praktek I ini.

Mikiwame

Mikiwame adalah semacam gladi resik untuk tes praktek (II). Jadi materinya hampir sama dengan test praktek II. Pada mikiwame ini saya mengendarai mobil di rute yang akan dijadikan test, termasuk juga mengendarai mobil di arena di dalam driving school. Beberapa teknik yang di-teskan antara lain houkohenkan (putar balik) dan parkir. Pada hari tes, dua dari teknik tersebut akan dipilih salah satu secara acak.

Tes Praktek II

Meski berhasil pada tes praktek II ini, ada banyak pelajaran yang bisa di ambil. Utamanya adalah untuk “mendahulukan yang mudah daripada yang sulit”. Kasus pertama pelajaran tersebut ketika berada di perempatan untuk belok kanan. Di Jepang, belok kanan tidak bisa langsung meski lampunya hijau, jadi mobil harus maju pelan-pelan sampai di tengah perempatan menunggu mobil dari arah kiri kosong (atau panah kanan hijau menyala pada lampu lalu lintas). Karena mobil di depan saya maju, saya juga ikut maju di belakangnya. Di akhir test, instruktur mengatakan bahwa saya terlalu mempersulit diri. Baiknya, menunggu di belakang zebra cross, tidak perlu mengikuti mobil di depan ke tengah perempatan. Kasus kedua ketika putar balik, saya beberapa kali maju dan mundur untuk mengatur agar mobil pas di tengah (seperti parkir). Di akhir instruktur mengatakan, karena bukan parkir, kamu gak perlu bersusah payah mengatur mobil, intinya mobil bisa putar balik (mundur, belok kiri, dan belok kanan). Alhamdulillah meski agak susah saya lulus di tes praktek II ini.

Tes Tulis 100 soal di Mito: 

LULUS!

Ini adalah tes terakhir, bukan di driving school tapi di menkyou senta (Mito-shi). Alhamdulillah saya langsung lulus di tes pertama ini. Tipsnya banyak-banyak buku “Master of your driving in Japan” saja. Penantian kelulusan ini mirip-mirip ujian, menunggu nomor kita ada di layar monitor (lulus) atau tidak. Alhamdulillah nomor saya muncul di layar, langsung dapat SIM hari itu juga (setelah tes mata dan mengikuti arahan-arahan lainnya). Qodarullah, sehari setelah dapat SIM saya langsung dapat mobil. Alhamdulillah.

Nomor ujian saya, 162, muncul di layar menandakan kelulusan ujian SIM di Jepang

P.S: Jika anda inging mengikuti driving school di Tsuchiura Driving School, anda bisa memasukkan nama saya dan alamat saya  untuk mendapatkan potongan biaya 7000 yen (referral). Silahkan email saya di (btatmaja[at]gmail[dot]com) untuk mendapatkan alamat saya.

from bagustris@/home https://ift.tt/Uu4eARL
via IFTTT

Konversi Fail Stereo ke Mono Dari Direktori Berisi Banyak Fail Suara

Skrip berikut dapat merubah fail suara stereo ke mono dari suatu direktori (termasuk subdirektori di dalamnya) yang diberikan.
Input: Direktori/folder
Output: Fail berakhiran “_mono” dengan direktori yang sama terhadap input (termasuk subdirektori)


#!/usr/bin/env python3
import os
import argparse
import glob
from pydub import AudioSegment

def stereo2mono(files):
"""Convert all files from stereo to mono.
Note: this would effectively also create a copy of files that were already in a mono format
Parameters
----------
files : iterable
Sequence of files
Example use:
```
$ python3 stereo2mono.py -f /path/to/audio/files/
```
Then you may remove the files that do not contain the '_mono' tag with:
$ find . -name "*-??.wav" -delete # for emovo
"""
for f in files:
print(f"Converting {f}")
# Load audio
sound = AudioSegment.from_wav(f)
# Convert to mono
sound = sound.set_channels(1)
# Save file
stem, ext = os.path.splitext(f)
sound.export(f'{stem}_mono{ext}', format='wav')


if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Convert stereo to mono')
parser.add_argument('-f', '--folder',
type=str, help='Path to wavfiles')
args = parser.parse_args()
files = glob.glob(args.folder + '**/*.wav', recursive=True)
stereo2mono(files)

Contoh penggunaan

# Konversi ke mono
python3 stereo2mono.py -f tensorflow_datasets/downloads/extracted/ZIP.emovo.zip/EMOVO/
# menghapus file yang bukan mono
$ pwd
/home/bagus/tensorflow_datasets/downloads/extracted/ZIP.emovo.zip/EMOVO/
$ find . -name "*-??.wav" -delete

Referensi gist:
1. https://gist.github.com/bagustris/40b406d99820207bc804a020db169f7e

from bagustris@/home https://ift.tt/oQUMF1k
via IFTTT

Install TexLive 2022 on Ubuntu 22.04 under Multipass

Multipass is a game changer. It looks like a virtual environment for python or a virtual box for OS, but for Ubuntu only. This short writing documented my effort to enable the installation of TexLive 2022 for adding IEEE header and footer for camera-ready APSIPA 2022.

Host environment

bagus@L140MU:~$ snap --version
snap 2.56.2
snapd 2.56.2
series 16
ubuntu 20.04
kernel 5.15.0-46-generic
bagus@L140MU:~$ multipass --version
multipass 1.10.1
multipassd 1.10.1

Steps

1. Install multipass (refer to this link for detail).
2. Create an instance with Jammy (Ubuntu 22.04)
3. Update Jammy
4. Install texlive and required packages

sudo apt install texlive-base texlive-fonts-extra texlive-fonts-recommended

5. Try on the desired latex template

$ https://www.apsipa2022.org/APSIPA_ASC_2022_Template.zip
$ sudo apt install unzip
$ unzip APSIPA_ASC_2022_Template.zip
$ cd APSIPA_ASC_2022_Template/Latex
$ pdflatex PaperSample_Guideline_tex.tex
...
Output written on PaperSample_Guideline_tex.pdf (3 pages, 126525 bytes).
Transcript written on PaperSample_Guideline_tex.log.

That’s all. For 20.04, it will throw to an infinite recursion loop due to the lower fancy version. The only solution is to install newer Latex on Ubuntu 22.04 under multipass. For real cases, you may need to mount your local directory (which contains TEX files) to an instance with `multipass mount`.

from bagustris@/home https://ift.tt/azBAHrR
via IFTTT

Acoustic Feature Extraction with Transformers

The example in Transformers’ documentation here shows how to use the wav2vec2 model for automatic speech recognition. However, there are two crucial issues in that example. First, we usually use our data (set) instead of their (available) dataset. Second, we need to extract acoustic features (the last hidden states instate of logits). The following is my example of adapting Transformers to extract acoustic embedding given any audio file (WAVE) using several models. It includes the pooling average from frame-based processing to utterance-based processing for given any audio file. You don’t need to perform the pooling average if you want to process your audio file in frame-based processing.

Basic syntax: wav2vec2 base model

This is the example from the documentation. I replaced the use of the dataset with the defined path of the audio file (‘00001.wav’).

from transformers import Wav2Vec2Processor, Wav2Vec2Model
import torchaudio

# load model
processor = Wav2Vec2Processor.from_pretrained("facebook/wav2vec2-base-960h")
model = Wav2Vec2Model.from_pretrained("facebook/wav2vec2-base-960h")

# audio file is decoded on the fly
array, fs = torchaudio.load("/data/A-VB/audio/wav/00001.wav")
input = processor(array.squeeze(), sampling_rate=fs, return_tensors="pt")

# apply the model to the input array from wav
with torch.no_grad():
outputs = model(**input)

# extract last hidden state, compute average, convert to numpy
last_hidden_states = outputs.last_hidden_state.squeeze().mean(axis=0).numpy()

# change to list to print
print(f"Hidden state shape: {last_hidden_states.shape}")
# Hidden state shape: (768,)

The syntax for the wav2vec2 large and robust model

In this second example, I replace the base model with the large and robust model without finetuning. This example is adapted from here. Note that I replaced ‘Wav2Vec2ForCTC’ with ‘wav2vec2Model’. The former is used when we want to obtain the logits (for speech-to-text transcription) instead of obtaining the hidden states.

from transformers import Wav2Vec2Processor, Wav2Vec2Model
import torch
import torchaudio

# load model
processor = Wav2Vec2Processor.from_pretrained(
"facebook/wav2vec2-large-robust-ft-swbd-300h")
model = Wav2Vec2Model.from_pretrained(
"facebook/wav2vec2-large-robust-ft-swbd-300h")

# audio file is decoded on the fly
array, fs = torchaudio.load("/data/A-VB/audio/wav/00001.wav")
input = processor(array.squeeze(), sampling_rate=fs, return_tensors="pt")

with torch.no_grad():
outputs = model(**input)

last_hidden_states = outputs.last_hidden_state.squeeze().mean(axis=0).numpy()
# change to list to print
print(f"Hidden state shape: {last_hidden_states.shape}")

You can replace “facebook/wav2vec2-large-robust-ft-swbd-300h” with “facebook/wav2vec2-large-robust-ft-libri-960h” for the larger fine-tuned model.

 

The syntax for the custom model (wav2vec-R-emo-vad)

The last one is the example of the custom model. The model is wav2vec 2.0 fine-tuned on the MSP-Podcast dataset for speech emotion recognition. This last example differs from the previous since the configuration is given by the authors of the model (read the code thoroughly to inspect the details). I replaced the dummy audio file with the real audio file. It is assumed to process in batch (with batch_size=2) by replicating the same audio file.

import torch
import torch.nn as nn
from transformers import Wav2Vec2Processor
from transformers.models.wav2vec2.modeling_wav2vec2 import (
Wav2Vec2Model,
Wav2Vec2PreTrainedModel,
)
import torchaudio


class RegressionHead(nn.Module):
r"""Classification head."""

def __init__(self, config):

super().__init__()

self.dense = nn.Linear(config.hidden_size, config.hidden_size)
self.dropout = nn.Dropout(config.final_dropout)
self.out_proj = nn.Linear(config.hidden_size, config.num_labels)

def forward(self, features, **kwargs):

x = features
x = self.dropout(x)
x = self.dense(x)
x = torch.tanh(x)
x = self.dropout(x)
x = self.out_proj(x)

return x


class EmotionModel(Wav2Vec2PreTrainedModel):
r"""Speech emotion classifier."""

def __init__(self, config):

super().__init__(config)

self.config = config
self.wav2vec2 = Wav2Vec2Model(config)
self.classifier = RegressionHead(config)
self.init_weights()

def forward(
self,
input_values,
):

outputs = self.wav2vec2(input_values)
hidden_states = outputs[0]
hidden_states = torch.mean(hidden_states, dim=1)
logits = self.classifier(hidden_states)

return hidden_states, logits


def process_func(
wavs,
sampling_rate: int
# embeddings: bool = False,
):
r"""Predict emotions or extract embeddings from raw audio signal."""

# run through processor to normalize signal
# always returns a batch, so we just get the first entry
# then we put it on the device
# wavs = pad_sequence(wavs, batch_first=True)
# load model from hub
device = 'cpu'
model_name = 'audeering/wav2vec2-large-robust-12-ft-emotion-msp-dim'
processor = Wav2Vec2Processor.from_pretrained(model_name)
model = EmotionModel.from_pretrained(model_name)

y = processor([wav.cpu().numpy() for wav in wavs],
sampling_rate=sampling_rate,
return_tensors="pt",
padding="longest"
)
y = y['input_values']
y = y.to(device)


y = model(y)

return {
'hidden_states': y[0],
'logits': y[1],
}


## test to an audiofile
sampling_rate = 16000
signal = [torchaudio.load('train_001.wav')[0].squeeze().to('cpu') for _ in range(2)]

# extract hidden states
with torch.no_grad():
hs = process_func(signal, sampling_rate)['hidden_states']
print(f"Hidden states shape={hs.shape}")

Please note for all models, the audio file must be sampled with 16000 Hz, otherwise, you must resample it before extracting acoustic embedding using the methods above. It may not throw an error even if the sampling rate is not 16000 Hz but the results, hence, is not valid since all models were generated based on a 16 kHz of sampling rate speech dataset. You may also want to extract acoustic features using opensmile toolkit. The tutorial for Windows users using WSL is available here: http://bagustris.blogspot.com/2021/08/extracting-emobase-feature-using-python.html.

Happy reading, don’t wait more to apply these methods on your own audio file.

from bagustris@/home https://ift.tt/3hcSCMj
via IFTTT

Siapa yang seharusnya membersihkan sampah B?

Andaikan sebuah eksperimen pikiran sebagai berikut.

A mengadakan suatu acara (panitia acara). B mengikuti acara tersebut (peserta acara). Jika B membuang sampah secara sembarangan di saat mengikuti acara tersebut, siapa yang wajib membersihkannya?

Jika anda masih menjawab A. Kita tambahkan kasus lain seperti ini.

B berada di rumahnya sendiri. B membuang sampah secara sembarangan di rumahnya sendiri. Siapa yang seharusnya membersihkan sampah B?

B yang seharusnya membuang sampahnya sendiri, tak peduli dimanapun. Selama itu sampahnya, maka dia sendiri yang wajib membuangnya, bukan orang lain.

from bagustris@/home https://ift.tt/XYyhNMl
via IFTTT