Bagaimana saya mencari standar kecantikan menggunakan Natural Language Processing (dan tidak menemukannya)

Tidak mungkin untuk mengukur secara obyektif gadis mana yang lebih cantik: pirang atau berambut cokelat, berkulit gelap atau berkulit putih, tinggi atau mini. Tetapi Anda dapat menghitung fitur penampilan apa yang lebih sering disebutkan ketika mereka berbicara tentang kecantikan.

Saya punya satu minggu untuk eksperimen, mesin analisis data kami, 16 ribu novel dan novel Rusia abad XIX dan 15 ribu karya panjang modern. Dan, tentu saja, tidak ada data yang ditandai.

Gagasan utamanya adalah mengekstraksi fragmen deskripsi wanita cantik dari kumpulan teks ini, dan kemudian mengekstrak garis frekuensi penampilan dari fragmen ini.

Berikut ini visualisasi dari apa yang terjadi. Lebih tepatnya, salah satu opsi umum.


Warna mata, rambut, pakaian, pertumbuhan, pendidikan - semua ini dapat dibedakan dari tubuh teks.

Tentu saja, tidak semuanya begitu sederhana dan tidak ambigu seperti pada gambar, tetapi Anda telah menerima ide kasar. Sekarang mari kita bicara tentang detail dan urutan tindakan.

Teks Corpus


Saya berhasil menemukan sumber daya dengan lisensi terbuka untuk distribusi teks. Terima kasih kepada orang-orang yang telah mengumpulkan dan memposting semua ini.

Baik abad ke-19 dan sekarang hanya menyertakan teks-teks berbahasa Rusia asli dalam korps, yaitu, tidak ada literatur yang diterjemahkan.

Saya melakukan semua analisis menggunakan sekelompok SAS Visual Text Analytics dan perpustakaan Python (pymorphy2, gensim, tensorflow).

Langkah 1. Aturan linguistik


Jadi, pertama-tama, perlu untuk menyoroti fragmen dengan deskripsi penampilan wanita. Tidak ada data yang ditandai, jadi saya mulai dengan aturan sederhana dalam semangat "gadis DAN (mata ATAU rambut ATAU wajah)". Aturan ditulis dalam SAS Visual Text Analytics, sehingga mereka memperhitungkan bentuk morfologis akun, kesalahan ketik (untuk kasus modern itu relevan), sintaksis sederhana, jarak antara token dan filter konteks yang tidak diinginkan.

Aturan yang disederhanakan
PREDICATE_RULE: (arg1, arg2, arg3): (KECUALI, "bad_contexts", (SENT_5, "_arg1 {beauty}", "_arg2 {woman}", "_arg3 {traits}"))

Dengan kata lain, dalam lima kalimat harus ada penyebutan seorang wanita, penyebutan fakta tentang ketertarikannya, deskripsi penampilan apa pun, dan seharusnya tidak ada konteks yang tidak diinginkan.

Menulis aturan seperti itu tidak sulit, masalahnya ada di detail. Bagaimana, misalnya, untuk mengumpulkan semua referensi yang mungkin tentang perempuan? Memang, dalam teks itu bisa "nyonya", dan "perempuan", dan "Margarita", dan "sepupu". Sinonim sederhana sangat diperlukan di sini, tidak ada kamus tunggal yang akan memberikan "pengetik" atau "siswa" sebagai sinonim untuk "wanita". Anda bisa daftar "dari kepala", sementara ada imajinasi yang cukup, tetapi daftar itu tidak lengkap (dan itu membosankan).

Untuk memperluas aturan dan mencari sinonim kontekstual, kami menghubungkan representasi vektor.

Langkah 2. Model word2vec


Word2vec adalah alat vektorisasi kata yang didasarkan pada gagasan "beri tahu saya siapa yang berdiri di sebelah Anda dan saya akan memberi tahu siapa Anda." Misalnya, dalam kalimat “Aku ___ dia pada pandangan pertama”, sebagian besar akan mengganti kartu dengan kata seperti “dicintai”. Idenya sederhana - kata-kata yang mirip ditemukan dalam konteks yang sama. Untuk bahasa Rusia, ada model pra-terlatih yang sudah jadi yang diposting di sini . Pengalaman pada proyek menunjukkan bahwa model yang dilatih di bidang subjek bekerja lebih baik daripada model "untuk seluruh bahasa", jadi saya melatih dua model di tubuh saya.

Pertama, dia memecah korps dengan python menjadi kata-kata, membawa kata-kata ke bentuk awal (terima kasih kepada pymorphy2), mengekstraksi ekspresi verbose frekuensi seperti sepupu, surai singa, pinggang tawon (terima kasih untuk frasa dari gensim). Pada data yang diproses, saya belajar model word2vec (algoritma skipgram, jendela - 3, dimensi - 300).

Dengan menggunakan model yang terlatih, daftar kata-kata yang sama disusun secara iteratif. Fungsi most_similar di gensim mengambil kata sebagai input dan mengembalikan daftar kata / ekspresi yang vektornya mendekati ukuran kosinus dengan vektor kata aslinya.

Vektor dekat dengan vektor kata "keindahan" pada bangunan abad ke-21. Nilai kedua adalah ukuran cosinus.
('cantik', 0.6690341234207153)
('cantik', 0,6438576579093933)
('menawan', 0,6156517267227173)
('gadis pintar', 0,6063219308853149)
('tampan', 0,6044491529464722)
('girly', 0,5829722285270691)
('bermata biru', 0,5814758539199829)
('nona muda', 0,5773882865905762)
('putri', 0,5754760503768921)
('cerah', 0,5743755102157593)
('berambut pirang', 0,5731547474861145)
('bermata biru', 0,5724368095397949)

Masalahnya di sini adalah bahwa di antara vektor yang sama, antonim dapat ditemukan, karena mereka dapat berada dalam konteks yang sama. Misalnya, di tempat pas dalam contoh tentang "jatuh cinta pada pandangan pertama" itu mungkin menjadi antonim "dibenci pada pandangan pertama". Dalam kasus kami, misalnya, vektor "pria muda" paling dekat dengan kata "gadis", dan hanya setelah itu muncul "wanita", "wanita", dll. Masalah dengan antonim diselesaikan hanya dengan pemilihan manual. Tapi ada beberapa antonim, jadi butuh sedikit usaha.

Ngomong-ngomong, lucu bahwa kata-kata yang mirip dengan seorang wanita abad ke-19 adalah segala macam konsep keluarga (anak perempuan, saudara perempuan, sepupu) atau profesi melayani (pembantu, pembantu, juru masak), status sosial oleh suami (laksamana, jenderal, baroness). Pada abad ke-21, spektrum berkembang: ada seorang siswa, teman sekelas, atlet, asisten laboratorium, anggota Komsomol, penerjemah, dan pemimpin.

Wanita abad XIX:
Katerina
Katya
Claudia
Clotilde
putri
putri
coquette
pendamping
perawat
kecantikan
wanita petani
pembuat renda
sepupu
kepompong
kumushka
wanita pedagang
masak

Wanita abad XXI:
Karen
Karina
kasir
Katerina
Katrina
Katka
Katya
penyewa
Kira
Clara
klien
coquette
Anggota Komsomol
sang ratu
kecantikan
kecantikan
Christina
Ksenia
Ksenia
sepupu

Menggunakan prinsip yang sama untuk memperluas aturan yang tersisa.

Misalnya, untuk mengekstrak konteks rambut:
surai
ikal
kain pel
sabit
kuncir
ikal
rambut keriting
ikal
gaya rambut
mengunci
mengunci
balok
potong rambut
poni
bang
rambut
ekor
ekor kuda

Langkah 3. Konteks yang tidak diinginkan


Jadi, saya punya aturan panjang yang cukup terperinci yang cukup berhasil menangkap deskripsi penampilan, menyebut-nyebut seorang wanita dan menyebutkan fakta daya tariknya. Saya meresepkan batasan yang jelas dalam aturan linguistik: seseorang harus memperhitungkan negatif, modalitas, suasana hati kondisional sehingga konteks seperti "tidak dibedakan oleh kecantikan", "jauh dari kecantikan" tidak tertangkap.

Ini yang tidak kita butuhkan.
Di masa mudanya dia sama sekali tidak cantik, tetapi lebih dari seorang gadis cukup makan dengan hidung bebek lebar. Dia sangat khawatir tentang hidungnya, dan menurut cerita saudara perempuannya, dia sering tidur dengan jepitan kayu di hidungnya untuk mempersempitnya dengan cara ini.
P. Rebenina, “Zinka yang malang”.

Selain itu, sering kali, penulis berhasil menggambarkan karakter yang umumnya menjijikkan yang memiliki satu sentuhan yang bagus. Konteks ini sulit untuk ditangani, mereka dapat membuat kebisingan, jadi saya hanya menghapusnya dari pertimbangan.

Sekarang saya memiliki fragmen teks dengan markup berdasarkan aturan dan representasi vektor. Meskipun butuh beberapa hari untuk mengklarifikasi aturan, konteks ditemukan memiliki kesalahan, yang cocok untuk saya dengan tugas ini. Sebagai contoh, beberapa deskripsi tentang penampilan tidak diekstraksi karena fakta bahwa tidak jelas tentang wanita atau pria yang dimaksud: "Vali memiliki mata biru-abu-abu yang bersembunyi di bawah kacamata tipis kacamata." Pada prinsipnya, ambiguitas ini dapat diselesaikan berdasarkan fragmen teks yang lebih besar, tetapi saya hanya memiliki satu minggu, jadi saya meninggalkan semua ketidakakuratan untuk menunggu di sayap.
Ini markupnya.

Contoh parsing, konteks disorot dalam huruf tebal , garis bawahi adalah fakta tentang penampilan. Kecuali beberapa. Dan tautan ini juga bukan tautan dan tidak mengklik!
Alina , bagaimanapun, berasal dari lingkaran yang berbeda, dan secara umum segalanya lainnya. Dia sangat cantik : berambut cokelat dengan mata biru abu-abu , dahi yang miring , hidung yang rapi , wajah yang dipahat , pergelangan tangan tipis, yang menggantung pernak-pernik paling bergaya yang pernah kulihat dalam hidupku. Dia luka di atas kepalaku, sosoknya ... yah, tidak main-main, keren .
K. Belozyorova, "Seorang Teman yang Bukan".

Dia bukan salah satu dari mereka yang naik ke sakunya untuk sebuah kata, keindahan alam dan daya tariknya terpesona dan memberi isyarat. Dahi tinggi setengah tertutup oleh ledakan halus , rambut hitam halus , berkilau dalam cahaya lampu bistro, mencapai bahu , lembut mengalir di sepanjang leher kecokelatan anggun. Mata hijaunya menunjukkan minat yang jelas pada diri saya: Alena terus menggosok jembatan hidung tipis dengan jari telunjuk tangan kanannya, yang menunjukkan rasa malunya. Pada lelucon saya yang berikutnya, gadis itu tertawa, dan ini membuat bibirnya yang sensual terentang menjadi senyuman, dan lesung pipit muncul di dekat sudut bibirnya. Aku mendapati diriku berpikir bahwa aku benar-benar ingin malam ini tidak pernah berakhir.
D. Ilyin, "Persimpangan Nasib."

Ada sesuatu yang misterius dan menarik dalam dirinya , dia langsing dan cantik . Rambut pirang panjang, sedikit keriting, fitur reguler , mata biru yang sangat hidup membuat Lena menawan . Boris menyukai senyum nakal, mulut sensual, keriangannya. Penampilannya dan caranya memegang tampaknya menarik baginya.
A. Bolshakov, "Diasingkan".

Dia adalah wanita yang sangat cantik dengan wajah yang tajam, hidung yang tajam dan dagu yang dipahat , namanya tidak kalah mengesankan - Adelaide. Dia pergi menemui saya dengan gaun hijau panjang yang cerah, dan di dada serta tangannya tergantung banyak ornamen etnik yang aneh. "Kau bisa saja Ida," katanya dengan ramah, dan sudut-sudut mulutnya yang tipis terpisah secara asimetris. "Sungguh cantik dengan twist!" Pikirku.
O. Pavlenko, "Kisah Para Penyihir."

Seorang wanita muda berdiri di pintu kamar sebelah dengan lilin di tangannya ... Saya melihat dan kagum - dia begitu cantik dalam tudung putih, dengan rambut longgar di pundaknya. Sungguh suatu sifat yang indah , terlepas dari kenyataan bahwa mereka terdistorsi oleh kemarahan! Mata biru dengan pupil melebar bersinar dengan kecemerlangan tak menyenangkan ... Sosoknya ramping , fleksibel.
K. Stanyukovich, “Pasangan Asli”.

Dan Yakub memiliki sesuatu untuk mencintai wanita mudanya: seorang wanita - seorang wanita pekerja keras, tidak kosong, tidak tetesan air mata, wanita yang sehat dan cantik . Wajahnya lonjong , dengan hidung lurus, tipis dan dengan bibir bengkak . Mata birunya menatap terang pada cahaya putih. Dan di atas mereka, seperti kuas, ada alis gelap . Memerah pipi yang tebal di pipinya yang kecokelatan .
P. Zasodimsky, "Dari bajak ke senjata."

Langkah 4. Merakit hasilnya


Masih mengumpulkan Frankenstein dan menggabungkan fitur frekuensi paling banyak. Beberapa tanda memiliki frekuensi yang sangat dekat, jadi kami membiarkan diri kami berfantasi sedikit dan mengumpulkan beberapa karakter.

Dua jenis sifat pertama:


Wanita abad ke 19. Wanita VS abad ke 21.

Itu adalah: pirang tinggi dan kurus dengan kulit sangat putih, hampir pucat dan mata biru besar. Kemungkinan besar, dengan ikal "tersebar di bahu". Mungkin dia dimanjakan, bandel dan sedikit murung. Kira-kira analog modern yang sesuai: seorang wanita bermata coklat keriting dengan rambut hitam panjang, bibir montok menonjol di wajah kecokelatan. Mungkin dia genit dan santai, tetapi pada saat yang sama romantis dan rentan.

Tipe kedua. Anda sudah terbiasa dengan gambar ini:



Itu adalah: berambut cokelat muda lembut dengan mata biru yang tersenyum hangat. Banyak perhatian diberikan pada jari-jari tipis yang rapi. Dia bijaksana, lemah lembut, patuh, bahkan pemalu. Seringkali dia melihat dari belakang keriting. Keindahan modern akan berbeda. Mata biru masih merupakan tanda kecantikan bersama dengan yang hitam, tetapi mata hijau muncul yang sebelumnya tidak ada sama sekali. Ternyata seorang gadis muda, bermata hijau, berambut merah (ini juga merupakan pertanda yang benar-benar baru!) Gadis, dengan tata rias yang bagus, ia juga langsing, tinggi, mengenakan gaun yang ringan dan ringan. Dia optimis, tenang dan pintar.

Visualisasi lebih cenderung menunjukkan perbedaan: seniman melihat array parameter saya dengan cara ini. Fantasi karakter juga muncul dari julukan frekuensi yang ditemukan dalam fragmen yang diekstraksi.

Kenapa ini semua?


Hanya berlatih di antara proyek. Dengan cara yang sama, saya dapat mencari tanda-tanda rahasia dagang dalam korespondensi Anda, bahkan jika Anda menggambarkannya dengan cara terselubung. Dengan cara yang sama, saya dapat memonitor berita untuk mencari peristiwa atau peristiwa spesifik yang terkait dengan perusahaan Anda. Dengan cara yang sama, saya dapat memonitor penyebutan merek dan membaginya ke dalam kategori berdasarkan departemen, nada suara dan alasan untuk kontak. Saya dapat menguraikan aplikasi untuk dukungan teknis dari pengguna yang sangat tidak memadai. Saya dapat menganalisis di kota mana dialog dilakukan. Saya dapat mengatur platform pada semua pembayaran Anda dari bagian dalam bank dan untuk semua rekanan bank membuat daftar produk yang diproduksi, daftar produk yang dikirim dan memahami apa yang menarik bagi manajer. Secara umum, takut padaku!

Ya, atau saya bisa melihat apa saja dalam teks. Analisis deskripsi rumah dan interior. Temukan efek samping pada obat. Cari tahu bahwa waffle crunch entah bagaimana salah, dan gula dalam kue tidak cukup manis. Cari tahu bahwa pirang hampir dua kali lebih populer dari berambut cokelat, dan mata biru tidak ketinggalan zaman. Dan seterusnya ...

Tetapi aplikasi praktisnya: bagaimana kita mencari tanda-tanda kesalahan medis .

Source: https://habr.com/ru/post/id472490/


All Articles