- Manusia tidak pandai mengelola spaghetti code
- Dalam proyek riset, sering kali perlu menulis program yang mengekstrak informasi dari data mentah
- Data tidak mengikuti spesifikasi yang jelas
- Contoh:
- Mengidentifikasi perusahaan dan eksekutif dalam artikel berita
- Memberi label pada kontrak pengadaan publik berdasarkan jenis layanan
- Mengidentifikasi kode program dalam pesan antarinsinyur
Mendeteksi kode program dalam pesan
- Menyelesaikan masalah mendeteksi apakah sebuah pesan merujuk pada kode program selama code review
- Contoh pesan:
- LGTM with render_ipa_alloc()
- If the FTPSACK flag is set, then use a prespecified value
- AFAICT there is nothing else to check (unless you can think of something)
- Actually, debug_error() doesn’t return NULL, so we should use IS_ERROR() here
- This fails to build on aarch64 even though it works without issue on amd64
- I’ve added if (err) goto cleanup; but the code still leaks
Ide aturan keputusan
- Pendekatan yang membedakan kode program dan bahasa Inggris biasa dengan menggunakan aturan sederhana
- Aturan:
- Kata yang diikuti tanda kurung adalah kode
- Kata dengan semua huruf kapital adalah kode
- Kata non-Inggris adalah kode
- Kelebihan dan kekurangan tiap aturan:
- Aturan 1: sederhana tetapi melewatkan kasus positif yang jelas
- Aturan 2: salah mengklasifikasikan singkatan huruf besar sebagai kode program
- Aturan 3: salah mengklasifikasikan istilah rekayasa sebagai kode program
Algoritme yang ditulis dengan tangan
- Disimpulkan bahwa algoritme sederhana dapat bekerja cukup baik
- Menentukan apakah pesan mengandung kode dalam dua tahap:
- Pra-pemrosesan: mengubah pesan menjadi urutan token
- Inferensi: menerapkan aturan pada urutan token untuk menentukan apakah kode ada
- Contoh implementasi dalam Python:
from dataclasses import dataclass
Token = str
@dataclass
class State:
previous_was_identifier: bool = False
previous_was_open_paren: bool = False
previous_previous_was_identifier: bool = False
seen_code: bool = False
def contains_code(tokens: Iterable[Token]) -> bool:
state = State()
for token in tokens:
state = process(state, token)
return state.seen_code
def process(state: State, token: Token) -> State:
if state.seen_code:
return state
if (token == "close_paren" and state.previous_was_open_paren and state.previous_previous_was_identifier):
state.seen_code = True
return state
state.previous_previous_was_identifier = state.previous_was_identifier
state.previous_was_identifier = token in ("all_caps_identifier", "underscore_identifier", "misc_identifier")
state.previous_was_open_paren = token == "open_paren"
return state
Bantuan dari jaringan saraf
contains_code dan process sebagai mesin status dapat dienkode sebagai RNN
- RNN dapat digunakan untuk menemukan algoritme yang lebih baik
Gagasan umum
- RNN mengaproksimasi probabilitas bersyarat
- Menghitung vektor status untuk setiap token
- Mengklasifikasikan pesan berdasarkan status akhir
Kode Python dilihat dari matematika
- Menjelaskan bagaimana RNN mengenkode aturan 1
- Mewakili setiap token sebagai vektor biner
- Menghitung hidden state untuk menerapkan aturan
Melatih jaringan
- Untuk melatih RNN, fungsi aktivasi diubah menjadi ReLU
- Dapat dilatih menggunakan PyTorch
Arsitektur dengan implementasi yang lebih efisien
- Menggunakan arsitektur yang disediakan PyTorch seperti Elman RNN
- Elman RNN menggunakan input dari layer tersembunyi sebelumnya dan layer saat ini pada setiap hidden layer
Arsitektur dengan gradien yang lebih stabil
- Pesan yang panjang menimbulkan masalah karena gradien mendekati 0
- Arsitektur seperti GRU atau LSTM dapat menunjukkan kinerja yang lebih baik
Disiplin yang berpusat pada data
- RNN lebih baik dalam menangani spaghetti code
- Memperjelas masalah dengan memaksakan disiplin yang berpusat pada data
Pendapat GN⁺
- Artikel ini menjelaskan dengan baik cara menggunakan RNN untuk menyelesaikan masalah yang kompleks
- Menggunakan RNN membuat pemeliharaan kode lebih mudah
- Implementasi yang efisien dimungkinkan dengan alat seperti PyTorch
- Perlu mempertimbangkan arsitektur seperti GRU atau LSTM
- Pendekatan yang berpusat pada data berguna untuk pemecahan masalah
1 komentar
Komentar Hacker News
Artikel ini tidak banyak membahas pengujian atau data pelatihan
Artikel ini menarik jika dibaca sebagai cara membangun jaringan saraf untuk melakukan pekerjaan yang praktis
Ada Universal Approximation Theorem untuk jaringan saraf
Artikel ini membahas konsep matematika yang mendalam tentang RNN, tetapi menawarkan ide yang menarik
Ada pendapat yang bertanya-tanya apakah RNN sudah sepenuhnya digantikan oleh transformer
Genetic Programming layak untuk dilihat
Artikel ini membahas RNN sebagai pengalaman belajar, dan membandingkannya dengan RNN di PyTorch
RNN dapat melakukan komputasi arbitrer, tetapi tidak praktis
Ada pendapat bahwa jaringan saraf akan semakin terlihat seperti kode