Semantik terbuka bahasa Rusia, tentang sejarah yang dapat Anda baca di
sini dan di
sini , menerima pembaruan besar. Kami telah mengumpulkan cukup data untuk menerapkan pembelajaran mesin di atas markup yang dikumpulkan dan membangun model bahasa semantik. Apa yang keluar darinya, lihat di bawah luka.

Apa yang kita lakukan
Ambil dua kelompok kata:
- berlari, menembak, merencanakan, hiking, berjalan;
- pelari, fotografer, insinyur, turis, atlet.
Tidak sulit bagi seseorang untuk menentukan bahwa kelompok pertama berisi kata benda yang menyebutkan
tindakan atau peristiwa ; pada orang yang memanggil kedua. Tujuan kami adalah mengajarkan mesin untuk memecahkan masalah seperti itu.
Untuk melakukan ini, Anda harus:
- Cari tahu kelas alami apa yang ada dalam bahasa tersebut.
- Tandai sejumlah kata yang memadai tentang subjek yang termasuk dalam kelas dalam paragraf 1 .
- Buat algoritma yang mempelajari markup dari item 2 dan mereproduksi klasifikasi dengan kata-kata yang tidak dikenal.
Apakah mungkin untuk menyelesaikan masalah ini dengan bantuan semantik distribusi?word2vec adalah alat yang sangat baik, tetapi masih lebih suka kedekatan kata kata, daripada kesamaan kelas semantik mereka. Untuk menunjukkan fakta ini, jalankan algoritma dalam kata-kata dari contoh:
w1 | w2 | cosine_sim | | | | | | 1.0000 | | | 0.6618 | | | 0.5410 | | | 0.3389 | | | 0.1531 | | | 0.1342 | | | 0.1067 | | | 0.0681 | | | 0.0458 | | | 0.0373 | | | | | | 1.0000 | | | 0.5782 | | | 0.2525 | | | 0.2116 | | | 0.1644 | | | 0.1579 | | | 0.1342 | | | 0.1275 | | | 0.1100 | | | 0.0975 | | | | | | 1.0000 | | | 0.3575 | | | 0.2116 | | | 0.1587 | | | 0.1207 | | | 0.1067 | | | 0.0889 | | | 0.0794 | | | 0.0705 | | | 0.0430 | | | | | | 1.0000 | | | 0.1896 | | | 0.1753 | | | 0.1644 | | | 0.1548 | | | 0.1531 | | | 0.0889 | | | 0.0794 | | | 0.0568 | | | -0.0013 | | | | | | 1.0000 | | | 0.5410 | | | 0.3442 | | | 0.2469 | | | 0.1753 | | | 0.1650 | | | 0.1207 | | | 0.1100 | | | 0.0673 | | | 0.0642 | | | | | | 1.0000 | | | 0.6618 | | | 0.4909 | | | 0.3442 | | | 0.1548 | | | 0.1427 | | | 0.1422 | | | 0.1275 | | | 0.1209 | | | 0.0705 | | | | | | 1.0000 | | | 0.5782 | | | 0.3687 | | | 0.2334 | | | 0.1911 | | | 0.1587 | | | 0.1209 | | | 0.0642 | | | 0.0373 | | | -0.0013 | | | | | | 1.0000 | | | 0.3575 | | | 0.2334 | | | 0.1579 | | | 0.1503 | | | 0.1447 | | | 0.1422 | | | 0.0673 | | | 0.0568 | | | 0.0458 | | | | | | 1.0000 | | | 0.3687 | | | 0.2525 | | | 0.1896 | | | 0.1650 | | | 0.1503 | | | 0.1495 | | | 0.1427 | | | 0.0681 | | | 0.0430 | | | | | | 1.0000 | | | 0.4909 | | | 0.3389 | | | 0.2469 | | | 0.1911 | | | 0.1495 | | | 0.1447 | | | 0.0975 | | | 0.0889 | | | 0.0889 |
Bagaimana semantik terbuka memecahkan masalah iniPencarian di
kamus semantik memberikan hasil sebagai berikut:
| | | | | ABSTRACT:ACTION | | ABSTRACT:ACTION | | ABSTRACT:ACTION | | ABSTRACT:ACTION | | ABSTRACT:ACTION | | HUMAN | | HUMAN | | HUMAN | | HUMAN | | HUMAN |
Apa yang telah dilakukan dan di mana untuk mengunduh
Hasil dari karya yang diterbitkan dalam
repositori di GC dan tersedia untuk diunduh adalah deskripsi hirarki kelas dan markup (manual dan otomatis) dari kata benda untuk kelas-kelas ini.
Untuk berkenalan dengan dataset, Anda dapat menggunakan navigator interaktif (tautan di repositori). Ada juga versi set yang disederhanakan di mana kami menghapus seluruh hierarki dan menetapkan satu tag semantik besar untuk setiap kata: "orang", "hewan", "tempat", "benda", "benda", "tindakan", dll.
Tautan ke Github: semantik terbuka dari bahasa Rusia (dataset) .
Tentang kelas kata
Dalam masalah klasifikasi, kelas-kelas itu sendiri sering didikte oleh masalah yang dipecahkan, dan pekerjaan insinyur data turun untuk menemukan serangkaian atribut yang sukses di atasnya Anda dapat membangun model kerja.
Dalam masalah kami, kelas kata, sebenarnya, tidak diketahui sebelumnya. Di sini, sebuah strata besar penelitian tentang semantik yang dilakukan oleh para sarjana linguistik dalam dan luar negeri, yang akrab dengan kamus-kamus semantik yang ada dan WordNet telah membantu.
Ini adalah bantuan yang baik, tetapi keputusan akhir sudah terbentuk dalam penelitian kami sendiri. Ini masalahnya. Banyak sumber daya semantik mulai diciptakan di era pra-komputer (setidaknya dalam pemahaman modern tentang komputer) dan pilihan kelas sebagian besar ditentukan oleh intuisi bahasa pencipta mereka. Pada akhir abad sebelumnya, WordNet secara aktif digunakan dalam tugas analisis teks otomatis, dan banyak sumber daya yang baru dibuat dipertajam untuk aplikasi praktis tertentu.
Hasilnya adalah sumber daya bahasa ini secara bersamaan mengandung informasi ensiklopedis linguistik dan ekstralinguistik tentang unit-unit bahasa. Adalah logis untuk berasumsi bahwa tidak mungkin untuk membangun sebuah model yang akan memeriksa informasi ekstralinguistik, hanya mengandalkan analisis statistik teks, karena sumber data tidak mengandung informasi yang diperlukan.
Berdasarkan asumsi ini, kami hanya mencari kelas alami yang dapat dideteksi dan diverifikasi secara otomatis berdasarkan model linguistik murni. Pada saat yang sama, arsitektur sistem memungkinkan penambahan sejumlah besar lapisan informasi tambahan tentang unit linguistik, yang dapat berguna dalam aplikasi praktis.
Kami akan menunjukkan hal di atas dengan contoh spesifik, dengan menganalisis kata "kulkas". Dari model linguistik, kita dapat mengetahui bahwa "kulkas" adalah objek material, desain, adalah wadah dari tipe "kotak atau tas", yaitu. tidak dimaksudkan untuk penyimpanan cairan atau padatan tanpa wadah tambahan. Selain itu, tidak jelas dari model ini bahwa "kulkas" adalah komoditas, apalagi, produk yang tahan lama, dan juga tidak jelas bahwa ini adalah artefak, mis. objek buatan manusia. Ini adalah informasi non-linguistik, yang harus diberikan secara terpisah.
Hasil model untuk kata "kulkas" Kenapa semua ini dibutuhkan
Meskipun demikian, seseorang dalam proses belajar dan pengetahuan tentang realitas digantungkan informasi tambahan tentang objek dan fenomena di sekitarnya pada kerangka alami, yang diperolehnya di masa kecil. Namun, beberapa konsep bersifat universal, independen dari area subjek, dan dapat berhasil digunakan kembali.
Katakan "penjual" adalah
orang +
peran fungsional . Dalam beberapa kasus, penjual mungkin sekelompok orang atau organisasi, tetapi subjektivitas selalu dipertahankan: jika tidak, tindakan target tidak akan mungkin dilakukan. Kata-kata "pertukaran" atau "pelatihan" merujuk pada tindakan, yaitu mereka memiliki peserta, durasi dan hasil. Isi persis dari tindakan ini dapat sangat bervariasi tergantung pada situasi dan bidang subjek, tetapi aspek-aspek tertentu akan tidak berubah. Ini adalah kerangka bahasa di mana variabel pengetahuan extralinguistik berlapis.
Tujuan kami adalah untuk menemukan dan mengeksplorasi informasi intralinguistik maksimum yang tersedia dan membangun atas dasar model penjelasan bahasa. Ini akan meningkatkan algoritma yang ada untuk pemrosesan kata otomatis, termasuk yang kompleks seperti menyelesaikan ambiguitas leksikal, menyelesaikan anafora, kasus rumit penandaan morfologis. Dalam prosesnya, kita perlu beristirahat di suatu tempat melawan kebutuhan untuk menarik pengetahuan ekstra-linguistik, tetapi setidaknya kita akan tahu di mana batas yang sebenarnya terjadi ketika pengetahuan internal bahasa tidak lagi cukup.
Klasifikasi dan pelatihan, serangkaian atribut
Untuk saat ini, kami hanya bekerja dengan kata benda, oleh karena itu di bawah ini, ketika kami mengucapkan "kata", kami akan berarti tanda yang hanya terkait dengan bagian pembicaraan ini. Karena kami memutuskan untuk hanya menggunakan informasi intralinguistik, kami akan bekerja dengan teks yang dilengkapi dengan marka morfologis.
Sebagai tanda, kami mengambil semua kemungkinan mikrokonteks di mana kata ini muncul. Untuk kata benda, ini akan menjadi:
- APP + X (cantik X: mata)
- GLAG + X (vdite X: utas)
- VL + PRED + X (masukkan X: pintu)
- X + SUSCH_ROD (X: tepi tabel)
- SUSHCH + X_ROD (menangani X: pedang)
- X_ SUBJECT + GL (X: plot sedang berkembang)
Ada lebih banyak jenis mikrokontek, tetapi di atas adalah yang paling sering dan sudah memberikan hasil yang baik ketika belajar.
Semua mikrokonteks direduksi menjadi bentuk dasar dan kami membuat satu set fitur dari mereka. Selanjutnya, untuk setiap kata, kami membuat vektor yang koordinat
ke-i-nya akan berkorelasi dengan kemunculan kata yang diberikan dalam mikrokonteks
ke-i .
Tabel Microcontext untuk kata "backpack" | | | | | | | | | VBP_ | 3043 | 1.0000 | | ADJ | 2426 | 0.9717 | | NX_NG | 1438 | 0.9065 | | VBP_ | 1415 | 0.9045 | | VBP__ | 1300 | 0.8940 | | NX_NG | 1292 | 0.8932 | | NX_NG | 1259 | 0.8900 | | ADJ | 1230 | 0.8871 | | ADJ | 1116 | 0.8749 | | ADJ | 903 | 0.8485 | | ADJ | 849 | 0.8408 | | NX_NG | 814 | 0.8356 | | ADJ | 795 | 0.8326 | | ADJ | 794 | 0.8325 | | VBP_ | 728 | 0.8217 | | ADJ | 587 | 0.7948 | | ADJ | 587 | 0.7948 | | VBP__ | 567 | 0.7905 | | VBP_ | 549 | 0.7865 | | VBP__ | 538 | 0.7840 | | VBP_ | 495 | 0.7736 | | VBP_ | 484 | 0.7708 | | NX_NG | 476 | 0.7687 | | ADJ | 463 | 0.7652 | | NX_NG | 459 | 0.7642 |
Nilai target, hierarki pengiris semantik
Bahasa ini memiliki mekanisme alami untuk penggunaan kembali kata-kata, yang menyebabkan munculnya fenomena seperti polisemi. Selain itu, kadang-kadang tidak hanya kata-kata individual digunakan kembali, tetapi transfer metaforis seluruh konsep dibuat. Ini terutama terlihat dalam transisi dari konsep material ke konsep abstrak.
Fakta ini menentukan perlunya klasifikasi hierarkis, di mana bagian-bagian semantik disusun dalam struktur pohon dan terjadi partisi di setiap simpul internal. Ini memungkinkan Anda untuk menangani ambiguitas dalam konteks mikro jauh lebih efektif.
Contoh transfer konsep metaforisSelain memecahkan masalah praktis yang mendesak dari linguistik komputer, pekerjaan kami bertujuan untuk mempelajari kata dan berbagai fenomena linguistik. Pemindahan konsep metaforis dari bidang nyata ke abstrak adalah fenomena yang dikenal oleh ahli bahasa kognitif. Jadi, misalnya, salah satu konsep paling cemerlang di dunia material adalah kelas "wadah" (dalam literatur berbahasa Rusia sering disebut sebagai "wadah").
Metafora ontologis lain yang ada di mana-mana adalah metafora wadah, atau wadah, yang menyiratkan menggambar batas dalam rangkaian pengalaman kita dan memahaminya melalui kategori spasial. Menurut penulis, cara seseorang memandang dunia di sekitarnya ditentukan oleh pengalamannya berurusan dengan benda-benda material yang terpisah dan, khususnya, persepsinya tentang dirinya sendiri, tubuhnya. Manusia adalah makhluk yang dibatasi kulitnya dari seluruh dunia. Dia adalah sebuah wadah, dan oleh karena itu umum baginya untuk menganggap entitas lain sebagai wadah dengan bagian dalam dan permukaan luar.
Skrebtsova T. G. Linguistik Kognitif: Teori Klasik, Baru
pendekatan
Model yang kami bangun beroperasi dalam satu ruang atribut dan memungkinkan kami belajar dari contoh nyata, dan membuat prediksi di bidang abstrak. Ini memungkinkan Anda untuk melakukan transfer yang dijelaskan di atas. Jadi, misalnya, kata-kata berikut adalah wadah abstrak, yang konsisten dengan ide intuitif:

Contoh lain yang menarik adalah transfer konsep "cair" ke bidang yang tidak berwujud:

Pemilihan algoritma
Sebagai algoritma, kami menggunakan regresi logistik. Ini disebabkan oleh beberapa faktor:
- Dengan satu atau lain cara, markup awal berisi sejumlah kesalahan dan kebisingan.
- Tanda-tanda bisa tidak seimbang dan juga mengandung kesalahan - polisemi dan metaforis (kiasan) penggunaan kata.
- Analisis awal menunjukkan bahwa antarmuka yang dipilih secara memadai harus diperbaiki dengan algoritma yang cukup sederhana.
- Penafsiran algoritma yang baik adalah penting.
Algoritma menunjukkan akurasi yang cukup baik:
Log algoritma markup == ENTITY == slice | label | count | correctCount | accuracy | | | | | | ENTITY | PHYSICAL | 12249 | 11777 | 0.9615 | ENTITY | ABSTRACT | 9854 | 9298 | 0.9436 | | | | | | | | | | 0.9535 | == PHYSICAL:ROLE == slice | label | count | correctCount | accuracy | | | | | | PHYSICAL:ROLE | ORGANIC | 7001 | 6525 | 0.9320 | PHYSICAL:ROLE | INORGANIC | 3805 | 3496 | 0.9188 | | | | | | | | | | 0.9274 | == PHYSICAL:ORGANIC:ROLE == slice | label | count | correctCount | accuracy | | | | | | PHYSICAL:ORGANIC:ROLE | HUMAN | 4879 | 4759 | 0.9754 | PHYSICAL:ORGANIC:ROLE | ANIMAL | 675 | 629 | 0.9319 | PHYSICAL:ORGANIC:ROLE | FOOD | 488 | 411 | 0.8422 | PHYSICAL:ORGANIC:ROLE | ANATOMY | 190 | 154 | 0.8105 | PHYSICAL:ORGANIC:ROLE | PLANT | 285 | 221 | 0.7754 | | | | | | | | | | 0.9474 | == PHYSICAL:INORGANIC:ROLE == slice | label | count | correctCount | accuracy | | | | | | PHYSICAL:INORGANIC:ROLE | CONSTRUCTION | 1045 | 933 | 0.8928 | PHYSICAL:INORGANIC:ROLE | THING | 2385 | 2123 | 0.8901 | PHYSICAL:INORGANIC:ROLE | SUBSTANCE | 399 | 336 | 0.8421 | | | | | | | | | | 0.8859 | == PHYSICAL:CONSTRUCTION:ROLE == slice | label | count | correctCount | accuracy | | | | | | PHYSICAL:CONSTRUCTION:ROLE | TRANSPORT | 188 | 178 | 0.9468 | PHYSICAL:CONSTRUCTION:ROLE | APARTMENT | 270 | 241 | 0.8926 | PHYSICAL:CONSTRUCTION:ROLE | TERRAIN | 285 | 253 | 0.8877 | | | | | | | | | | 0.9044 | == PHYSICAL:THING:ROLE == slice | label | count | correctCount | accuracy | | | | | | PHYSICAL:THING:ROLE | WEARABLE | 386 | 357 | 0.9249 | PHYSICAL:THING:ROLE | TOOLS | 792 | 701 | 0.8851 | PHYSICAL:THING:ROLE | DISHES | 199 | 174 | 0.8744 | PHYSICAL:THING:ROLE | MUSIC_INSTRUMENTS | 63 | 51 | 0.8095 | PHYSICAL:THING:ROLE | WEAPONS | 107 | 69 | 0.6449 | | | | | | | | | | 0.8739 | == PHYSICAL:TOOLS:ROLE == slice | label | count | correctCount | accuracy | | | | | | PHYSICAL:TOOLS:ROLE | PHY_INTERACTION | 213 | 190 | 0.8920 | PHYSICAL:TOOLS:ROLE | INFORMATION | 101 | 71 | 0.7030 | PHYSICAL:TOOLS:ROLE | EM_ENERGY | 72 | 49 | 0.6806 | | | | | | | | | | 0.8031 | == ATTR:INORGANIC:WEARABLE == slice | label | count | correctCount | accuracy | | | | | | ATTR:INORGANIC:WEARABLE | NON_WEARABLE | 538 | 526 | 0.9777 | ATTR:INORGANIC:WEARABLE | WEARABLE | 282 | 269 | 0.9539 | | | | | | | | | | 0.9695 | == ATTR:PHYSICAL:CONTAINER == slice | label | count | correctCount | accuracy | | | | | | ATTR:PHYSICAL:CONTAINER | CONTAINER | 636 | 627 | 0.9858 | ATTR:PHYSICAL:CONTAINER | NOT_A_CONTAINER | 1225 | 1116 | 0.9110 | | | | | | | | | | 0.9366 | == ATTR:PHYSICAL:CONTAINER:TYPE == slice | label | count | correctCount | accuracy | | | | | | ATTR:PHYSICAL:CONTAINER:TYPE | CONFINED_SPACE | 291 | 287 | 0.9863 | ATTR:PHYSICAL:CONTAINER:TYPE | CONTAINER | 140 | 131 | 0.9357 | ATTR:PHYSICAL:CONTAINER:TYPE | OPEN_AIR | 72 | 64 | 0.8889 | ATTR:PHYSICAL:CONTAINER:TYPE | BAG_OR_BOX | 43 | 31 | 0.7209 | ATTR:PHYSICAL:CONTAINER:TYPE | CAVITY | 30 | 20 | 0.6667 | | | | | | | | | | 0.9253 | == ATTR:PHYSICAL:PHY_STATE == slice | label | count | correctCount | accuracy | | | | | | ATTR:PHYSICAL:PHY_STATE | SOLID | 308 | 274 | 0.8896 | ATTR:PHYSICAL:PHY_STATE | FLUID | 250 | 213 | 0.8520 | ATTR:PHYSICAL:PHY_STATE | FABRIC | 72 | 51 | 0.7083 | ATTR:PHYSICAL:PHY_STATE | PLASTIC | 78 | 42 | 0.5385 | ATTR:PHYSICAL:PHY_STATE | SAND | 70 | 31 | 0.4429 | | | | | | | | | | 0.7853 | == ATTR:PHYSICAL:PLACE == slice | label | count | correctCount | accuracy | | | | | | ATTR:PHYSICAL:PLACE | NOT_A_PLACE | 855 | 821 | 0.9602 | ATTR:PHYSICAL:PLACE | PLACE | 954 | 914 | 0.9581 | | | | | | | | | | 0.9591 | == ABSTRACT:ROLE == slice | label | count | correctCount | accuracy | | | | | | ABSTRACT:ROLE | ACTION | 1497 | 1330 | 0.8884 | ABSTRACT:ROLE | HUMAN | 473 | 327 | 0.6913 | ABSTRACT:ROLE | PHYSICS | 257 | 171 | 0.6654 | ABSTRACT:ROLE | INFORMATION | 222 | 146 | 0.6577 | ABSTRACT:ROLE | ABSTRACT | 70 | 15 | 0.2143 | | | | | | | | | | 0.7896 |
Analisis kesalahan
Kesalahan yang timbul dari klasifikasi otomatis disebabkan oleh tiga faktor utama:
- Homonim dan polisemi: kata-kata yang memiliki tipe yang sama dapat memiliki arti yang berbeda (menyiksa dan mematikan, berhenti sebagai suatu proses dan berhenti sebagai suatu lokasi ). Ini juga dapat mencakup penggunaan kata-kata dan metonimi metaforis (misalnya, pintu akan diklasifikasikan sebagai ruang tertutup - ini adalah fitur bahasa yang diharapkan).
- Ketidakseimbangan dalam konteks penggunaan kata. Beberapa penggunaan organik mungkin tidak tersedia dalam paket asli, yang menyebabkan kesalahan klasifikasi.
- Batas kelas tidak valid. Anda dapat menggambar batasan yang tidak dapat dihitung dari konteks dan membutuhkan keterlibatan pengetahuan ekstra-linguistik. Di sini algoritma tidak akan berdaya.
Pada tahap ini, kami hanya memperhatikan kesalahan tipe ketiga dan menyesuaikan batas yang dipilih antara kelas. Kesalahan dari dua jenis pertama dalam konfigurasi sistem yang diberikan tidak dapat dihilangkan, tetapi dengan jumlah data berlabel yang memadai, mereka tidak mewakili masalah besar - ini dapat dilihat dari keakuratan markup dari proyeksi atas.
Apa selanjutnya
Saat ini, dataset mencakup sebagian besar kata benda yang ada dalam bahasa Rusia dan diwakili dalam korpus dalam berbagai konteks yang cukup. Fokus utama ditempatkan pada benda-benda material - sebagai yang paling dimengerti dan dielaborasi dalam karya ilmiah. Tugas-tugas tetap untuk memperbaiki markup yang ada, dengan mempertimbangkan data yang diterima dari algoritma, dan bekerja dengan kelas-kelas di tingkatan yang lebih rendah, di mana penurunan akurasi prediksi diamati, karena mengaburkan batas-batas antara kategori.
Tapi ini semacam pekerjaan rutin, yang selalu ada. Lapisan riset kualitatif baru akan menyangkut kemungkinan mengklasifikasikan kata tertentu dalam konteks atau kalimat tertentu, yang akan memungkinkan untuk memperhitungkan fenomena homonimi dan polisemi, termasuk metafora (makna kiasan).
Kami juga sedang mengerjakan beberapa proyek terkait:
- kamus pengenalan kata-kata RY: variasi dari kamus frekuensi, di mana kelengkapan dan keakraban kata dievaluasi sebagai hasil dari markas crowdsourcing, dan tidak dihitung sesuai dengan tubuh teks.
- open corpus untuk menyelesaikan ambiguitas leksikal: berdasarkan kompetisi RUSSE 2018 WSI & D Shared Task yang diadakan sebagai bagian dari konferensi Dialog 2018 , kegunaan corpus dengan menghilangkan ambiguitas leksikal untuk menguji algoritma otomatis untuk disambiguasi dan pengelompokan makna kata menjadi jelas. Kita juga membutuhkan badan ini untuk menuju tahap kerja semantik terbuka yang dijelaskan dalam paragraf sebelumnya.
Kamus nada bahasa Rusia
Kamus nada adalah kata-kata dan ungkapan RJ, yang ditandai oleh nada suara dan kekuatan dari keparahan muatan emosional-evaluatif. Sederhananya, seberapa banyak kata tertentu itu "buruk" atau "baik".
Saat ini, 67.392 karakter ditandai (dengan 55.532 kata dan 11.860 ekspresi).
Umpan balik dan distribusi
Kami menyambut setiap umpan balik dalam komentar - dari kritik terhadap pekerjaan dan pendekatan kami hingga tautan ke studi yang menarik dan artikel terkait.
Jika Anda memiliki kenalan atau kolega yang mungkin tertarik dengan dataset yang diterbitkan, kirimkan tautan ke artikel atau tempat penyimpanan untuk membantu menyebarkan data terbuka.
Unduh tautan dan lisensi
Dataset: semantik terbuka dari bahasa RusiaDataset ini dilisensikan di bawah
CC BY-NC-SA 4.0 .