Bot di jaringan saraf: bagaimana asisten virtual bekerja dan belajar

Pada 2016, di puncak popularitas chatbots, tim kami membuat asisten tombol untuk bisnis. Sampai sebuah pemikiran menarik muncul: "Bagaimana jika kita mengotomatiskan dukungan klien dengan jaringan saraf?" Kami ingin robot obrolan akhirnya belajar memahami bahasa alami dan menjadi nyaman.

Butuh empat ahli matematika, enam bulan kerja keras, satu bahasa pemrograman baru dan banyak kesalahan - dan kami menciptakan konstruktor di mana setiap orang dapat mengumpulkan asisten virtual dengan AI.

Dalam materi akan kami sampaikan


  • Bagaimana asisten virtual berbeda dari bot obrolan biasa
  • Benarkah asisten virtual memahami bahasa
  • Bagaimana kami mengajarkan robot untuk memahami konteks dan menulis bahasa lialang
  • Uji kasus: bagaimana kami mengotomatiskan dukungan di tiga bank
  • Pembuatan Lia Platform dan engine untuk antarmuka
  • Tiga langkah: bagaimana cara kerja platform untuk merakit asisten virtual (di mana siapa pun, bahkan yang bukan programmer, dapat merakit robot)


Bot obrolan vs asisten virtual


Obrolan canggih dapat menyorot kata kunci dan meniru dialog manusia kembali di tahun 60an. Hippies terjun ke LSD, The Beatles mengumpulkan stadion, dan Joseph Weizenbaum menciptakan Eliza, seorang psikoterapis yang akan memberi peluang bagi banyak bot modern, dan bahkan psikolog.
Misalnya, dalam kalimat "Ayahku membenciku", Eliza menanggapi kata kunci "ayah" dan bertanya: "Siapa lagi di keluarga yang membencimu?" Tetapi psikoterapis robo tidak memahami esensi dari masalah tersebut. Chatbot modern juga berfungsi: kata kunci, skrip linier, dan parodi dialog langsung.

Tetapi ada sesuatu yang berubah sejak tahun 60an: sekarang, berkat pembelajaran mesin dan teknologi NLP, kita dapat mengajarkan chat chat untuk memahami bahasa dan konteks alami. Ini masih tiruan, tetapi lebih bermakna.

Untuk melihat perbedaannya, mari kita bandingkan chatbot dan asistennya - bayangkan kita perlu membuat sommelier virtual yang membantu pelanggan dengan pilihan anggur.

Tahap 1


Tahap pertama dari chatbot dan asisten virtual adalah satu: kami mencari tahu permintaan pengguna dan menghasilkan frasa yang dapat mereka tulis. Dan kemudian kita meresepkan bagaimana robot akan bertindak sebagai respons.

Permintaan dasar jelas - mengambil anggur. Tetapi permintaan ini dapat memiliki banyak parameter: alasan, harga, negara, warna, variasi anggur. Mungkin pengguna langsung menulis nama anggur yang akan ditemukan. Atau dia akan mengklarifikasi detail: "Di mana itu dibuat?" Atau mungkin karena penasaran, dia akan mulai melempar bot dengan pertanyaan: "Botol mana yang paling mahal di dunia?" Dan seterusnya. Selain itu, selain permintaan dalam kasus ini, ada "halo", "selamat tinggal", "apa kabar" dan frasa bicara kecil lainnya yang perlu ditanyakan.

Anda dapat berfantasi tanpa henti, tetapi tetap saja kami tidak akan dapat memprediksi semua pertanyaan pengguna. Ketika tampaknya bagi kami bahwa situasi yang dijelaskan akan cukup untuk menutup 98% dari permintaan, kami berhenti (meskipun kemudian kenyataan pahit terputus dan kami menemukan bahwa 80% akan tercakup paling baik).

Kemudian kami menyebarkan asumsi kami tentang kebutuhan pengguna untuk permintaan spesifik - niat. Niat menunjukkan apa yang diinginkan pengguna, tetapi membuang informasi tentang bagaimana ia menulis tentang itu. Tahap ini sama untuk chatbots dan asisten.

Daftar niat


Niat 1 - Saya ingin anggur
Frase:

- Bantu aku memilih anggur
- Anggur apa yang akan Anda rekomendasikan?
- Saya ingin anggur terbaik
- ...
Apa yang harus dilakukan dengan itu: pilih secara acak salah satu anggur paling populer dan beri tahu pengguna.

Niat 2 - anggur yang lebih murah

Frase:

- apakah ada anggur yang baik hingga 1000 rubel?
- Tapi tidak ada yang lebih murah?
- terlalu mahal untukku
- ...
Apa yang harus dilakukan: tambahkan filter harga ke permintaan dan pilih salah satu anggur paling populer.

Niat 3 - Saya ingin anggur untuk daging
Frase:

- Sarankan anggur ke steak
"Aku akan makan malam goulash." Apa yang harus diminum?
- ...
Apa yang harus dilakukan tentang itu: permintaan ke database dengan kriteria "untuk daging", pilih salah satu anggur paling populer dan beri tahu pengguna.

... (dan seterusnya ratusan niat berbeda)

Niat 290 - kami tidak memahami pengguna
Frasa: lainnya

Apa yang harus dilakukan: mengeluarkan frasa rintisan: "Saya tidak tahu apa yang Anda maksud, tetapi Pinista menyenangkan setiap saat sepanjang tahun."

Tahap 2


Pada tahap ini, kita mulai membuat algoritma yang digunakan robot untuk bekerja. Di sini kesamaan chatbot dan asisten virtual berakhir.

Saat mengode chatbot, programmer secara manual menentukan kata kunci untuk setiap niat, dan ketika pengguna menulis, bot akan mencari kata kunci ini dalam frasa.

Ketika mengembangkan asisten, seorang programmer mengajarkan algoritma untuk membandingkan replika pengguna sesuai dengan makna leksikal. Ini memungkinkan Anda untuk menemukan niat terdekat.

Anggur pilihan dengan bot obrolanPilihan anggur dengan asisten AI virtualApa yang terjadi
Pengguna: Halo! Saya ingin memilih anggur untuk makan malam sebelum tahun 2000
Bot: Halo!
Bot: Berapa kisaran harga yang kami cari?
Pengguna: hingga 2000r
Bot: Saya dapat merekomendasikan Ramirez de la Piscina. Untuk yang terbaik dari para pelacur, pria tampan dari Spanyol cocok untuk makan malam, dan untuk seri favorit Anda. 1240₽ per botol
Pengguna: Halo! Saya ingin memilih anggur untuk makan malam sebelum tahun 2000
Asisten: Halo! Saya dapat merekomendasikan Ramirez de la Piscina. Untuk yang terbaik dari para pelacur, pria tampan dari Spanyol cocok untuk makan malam, dan untuk seri favorit Anda. 1240₽ per botol
Bot - pergi dengan kata kunci untuk memilih + anggur. Saya tidak mengerti kisaran harga dan bertanya lagi. Asisten - pergi untuk niat terdekat dan mengambil kisaran harga.
Pengguna: Saya tidak suka tart
Bot: Calon Anda adalah Casillero del Diablo Cabernet Sauvignon Reserva
Bot: Chili tart Sauvignon pasti akan menghangatkan Anda. Hanya 872₽
Pengguna: Saya tidak suka tart
Asisten: Calon Anda adalah Antigal, "Uno" Malbec.
Asisten: Argentina lembut langsung dari 2015. Harga botol adalah $ 20
Chatbot dipandu oleh kata kunci "tart" dan melakukan kesalahan. Dan asisten mengerti bahwa niat terdekat dengan niat "Saya tidak suka tart" adalah anggur yang lembut.
Pengguna: Ya, sangat murah. Saya mungkin akan menerimanya.
Bot: Lalu coba Blend Merah "FYI"
Bot: Meskipun memiliki peringkat tinggi, harganya hanya $ 10
Bot: Pilihan Bagus
Pengguna: Ya, sangat murah. Saya mungkin akan menerimanya.
Asisten: Pilihan Baik
Proses robot menawarkan satu per satu. Tn. Chatbot melihat kata “tidak mahal”, menjawab sesuai dengan templat - sebagai hasilnya, dia tidak menebak dan menjadi bingung. Asisten mengabaikan kalimat pertama, karena dia mengerti kalimat kedua.

Cara kerjanya: tabel yang membandingkan chatbots dan asisten virtual
Bot obrolanAsisten virtual
Untuk memahami pengguna, kami menggunakan kata kunci.
Saat membuat chatbot, pembelajaran mesin dan teknologi NLU tidak digunakan.
Untuk memahami pengguna, kami membuat perbandingan "pintar" dan memilih niat terdekat (sesaat kemudian kami menjelaskan cara kerjanya).
Pembelajaran mesin dan algoritma NLU memungkinkan kami untuk mengukur jarak antara replika. Misalnya, frasa "pesawat ruang angkasa" lebih dekat dengan "pesawat" daripada "skuter". Dan dari "penjualan ginjal" - sangat jauh.
Persiapan: Untuk setiap niat, kami menuliskan kata kunci (wine_year_meat: steak, daging, gulai, anggur + daging)

Algoritma:
  • Kami mengambil kata-kata dari replika pengguna (“Advise wine to steak” → saran, anggur, steak).
  • Pilih maksud di mana kata kunci terbanyak berasal dari replika pengguna (wine_meat_meat).
  • Jika bot tidak menemukan persimpangan dengan kata kunci, kami memilih maksud "kami tidak memahami pengguna".
  • Lakukan tindakan yang sesuai dengan niat.

Persiapan: Kami melatih model untuk perbandingan cerdas

Algoritma:
  • Bandingkan frasa pengguna dengan frasa dari niat menggunakan perbandingan cerdas.
  • Pilih niat dengan frasa terdekat
  • Jika niat yang dipilih tidak cukup dekat dengan replika pengguna (ambang batas belum terlewati), kami memilih niat "kami tidak memahami pengguna".
  • Lakukan tindakan yang sesuai dengan niat.

Cara meningkatkan:
Untuk mengurangi kesalahan, tambahkan perintah dan tombol.
Kemudian pengguna umumnya berhenti berkomunikasi dalam bahasa, dan hanya akan mengklik tombol.
Perbaikan semacam itu mengarah pada degradasi kecerdasan percakapan.
Cara meningkatkan:
Setelah pengguna berbicara dengan robot, kami akan memiliki contoh frasa baru dan kami akan mendistribusikannya sesuai dengan niat mereka.
Seiring waktu, persentase cakupan akan meningkat, asisten akan mulai mengatasi komunikasi dengan lebih baik.
Perbaikan semacam itu mengarah pada peningkatan kecerdasan percakapan.


Benarkah asisten virtual memahami bahasa?


Algoritma dapat membedakan beberapa frasa dari yang lain - tetapi dapatkah kita mengatakan bahwa robot benar-benar memahami bahasa?

Untuk menjawab pertanyaan ini, mari kita kembali ke perbandingan makna leksikal dari frasa. Arti untuk sebuah komputer adalah tipe data yang dapat dimengerti: string, angka, dan kombinasinya. Oleh karena itu, programmer menghadapi tugas untuk mengubah teks sumber menjadi bentuk yang cocok untuk operasi matematika perbandingan - vektor.

vectorize(" ") = (0.004, 17.43, -0.021, ..., 18.68) vectorize("  ") = (0.004, 19.73, -0.001, ..., 25.28) vectorize("  ") = (-8.203, 15.22, -9.253, ..., 10.11) vectorize(" ") = (89.23, -68.99, -10.62, ..., -0.982) 

Untuk tugas-tugas kami, vektor frasa leksikal dekat harus secara matematis dekat satu sama lain, yang leksikal jauh harus jauh, vektor frasa dari opera lain harus sangat jauh. Misalnya, "Saya ingin anggur" lebih dekat dengan "Saya ingin anggur putih" daripada "Saya tidak ingin anggur". Dan jauh dari "serangan Mars".

Jaringan saraf yang terlatih dengan baik akan dapat menyimpulkan makna leksikal dalam vektor-vektor ini. Ternyata, untuk membandingkan makna dua frasa, Anda perlu membandingkan vektornya.

Oleh karena itu, jawaban atas pertanyaan "Apakah robot mengerti bahasa?" Akan seperti ini: mereka tidak mengerti bagaimana seseorang, mereka hanya tahu bagaimana membandingkan makna leksikal dan tidak membingungkan antara yang hangat dengan yang lunak. Tetapi ketika algoritma dapat menawarkan perbaikan sugestif dan menarik kesimpulan, kami jujur ​​mengatakan: ya, pemahaman telah tiba. Sementara itu, "memahami bahasa" hanyalah ungkapan pemasaran yang indah.

Faktanya, robot hanya bekerja dengan analogi, seperti anak berusia tiga tahun. Namun, jika Anda memberi anak cukup banyak contoh, ia akan bisa berpura-pura menjadi intelektual dan memimpin diskusi. Operator "langsung" dari garis dukungan pertama bekerja dengan cara yang sama - mereka menguraikan serangkaian situasi dan memberi tahu mereka bagaimana berperilaku di dalamnya. Oleh karena itu, asisten virtual sangat cocok untuk otomatisasi dukungan.

Bagaimana kami mengajarkan robot untuk memahami konteksnya: lialang


Untuk dukungan normal, robot perlu sedikit "memahami" bahasa alami - penting bahwa mereka dapat menjawab pertanyaan dan tetap dalam konteks. Untuk melakukan ini, kami menulis lialang, bahasa markup dialog tempat skrip dapat dijelaskan dan diteruskan ke robot.

Tugas utama seorang programmer lialang adalah untuk menggambarkan semua situasi yang dapat terjadi dalam dialog antara seseorang dan mesin. Untuk melakukan ini, dalam bahasa kami Anda dapat mengaitkan nama niat dan tindakan.

Pertimbangkan contoh sederhana - salam:

 if intent() { reaction(_) } 

Ini terlihat seperti kode biasa, tetapi sebuah neural grid bekerja di belakang maksud (...) construct - lialang menggambarkan dialog dalam pola umum ("jika Anda diminta untuk sesuatu") menggunakan konstruksi pemrograman yang biasa. Tentu saja, agar ini berfungsi, Anda perlu menerapkan pembelajaran mesin dan teknologi NLU, karena pengguna dapat menulis permintaannya sesuai keinginan.

Dan inilah cara menggambarkan situasi kontekstual.
Kami memperkenalkan konstruksi “was” untuk menangkap salam yang tidak pantas di mana pun dalam dialog:

 if intent() { if was_reaction(_) { reaction(___) } else { reaction(_) } } 

Dikatakan: Lia, jika mereka menyapa Anda, katakan halo sebagai tanggapan. Dan jika setelah itu mereka kembali berkata "halo" - katakan bahwa Anda sudah mengatakan halo.

Reaksi adalah tindakan yang harus dilakukan Lia dalam menanggapi niat. Dalam 95% kasus, ini hanya teks. Tetapi juga robot dapat memanggil fungsi dalam kode, beralih komunikasi ke operator atau melakukan tindakan kompleks lainnya.

Kode untuk mengirim teks dan fungsi ada secara terpisah dari bahasa - bahasa menggambarkan situasi sesederhana mungkin.

Sekarang mari kita coba menulis hal yang lebih rumit - dalam obrolan dengan bank, pelanggan sering meminta detailnya. Mari belajar cara mengirim mereka ke chat dan email menggunakan lialang.

 if intent(_) or intent(___) { reaction(___) { if intent(__) { reaction(___) } } } if intent(___) { reaction(___) } 

Dua situasi dijelaskan di sini:

  1. Lia, jika Anda diminta untuk mengirim detailnya - kirim ke obrolan. Jika setelah mereka bertanya "perlu ke kantor pos", kemudian kirim ke kantor pos.
  2. Lia, jika Anda segera diminta untuk mengirim rincian ke surat - kirim rincian ke surat.

Jadi lialang melakukan tugasnya - bekerja dalam konteks. Bahkan jika seseorang menulis "melalui surat, tolong," robot akan mengerti bahwa kita berbicara tentang detail.

Lia telah belajar untuk mendukung skenario yang kompleks - pada saat diperlukan untuk pengguna, ia akan mendapatkan / memasukkan data dari / ke CRM, mengirim SMS, membantu pembayaran atau berbicara tentang kehidupan.

Secara bertahap, kami meningkatkan bahasa: kami menambahkan variabel, fungsi, entitas (tanggal, alamat, nomor telepon, nama, dll.), Status, dan konstruksi berguna lainnya. Jadi menjadi lebih nyaman untuk menulisnya.

Uji kasus: bagaimana kami mengotomatiskan dukungan di tiga bank


Segera setelah kami membuat teknologinya, itu harus diselesaikan secepatnya - kami memiliki pelanggan pertama kami. VTB perlu mengotomatiskan dukungan di bank Internet baru untuk pengusaha.

Kami memulai dengan cukup sukses - terutama untuk produk yang dibuat dalam empat bulan. Robot hibrida kami untuk VTB didasarkan pada jaringan saraf dan langsung efektif: ia menjawab lebih dari 800 pertanyaan, mendukung beberapa skenario kompleks (pernyataan, perubahan tarif, pengaturan pengguna) dan berbicara seperti manusia. Akibatnya, dalam dua bulan, Lia kami mengurangi beban dukungan sebesar 74%. Menjadi jelas: ide dengan dukungan otomasi bekerja.

gambar

Selanjutnya, berdasarkan Lia, kami mengotomatiskan FAQ di Rocketbank dan DeloBank - dan dalam dua minggu mereka menutup 32% aplikasi tanpa operator.

Tampaknya anak-anak itu mencapai kesuksesan. Namun, setelah pelanggan pertama menjadi jelas bahwa konsep tersebut perlu diubah. Itu adalah neraka - kami harus memodifikasi skrip secara manual, melakukan pengeditan, mengembangkan cabang. Hal yang sama dengan bot sederhana, hanya lebih keras dan membutuhkan lebih banyak kekuatan. Dalam situasi ini, sulit untuk mengukur.

Kemudian kami memutuskan untuk membuat alat di mana klien sendiri akan dapat mengumpulkan bahkan asisten yang kompleks. Dan kami hanya akan membantu dengan tutorial dan mendidik pengguna.

Lia Platform dan engine untuk antarmuka


Jadi, kami memutuskan untuk membuat platform bagi mereka yang tidak mengerti perkembangannya. Meskipun lialang mengandung kurang dari sepuluh desain yang berbeda, tidak setiap manajer akan mengajarkannya untuk membuat bot sendiri. Manajer menyukai mouse.

Oleh karena itu, kami mulai berpikir tentang antarmuka seperti itu yang akan dapat melakukan semua yang dapat dilakukan lialang. Dia tidak akan memiliki masalah dengan cabang bersarang, transisi dari satu skrip ke skrip lain, dan yang paling penting - tidak hanya programmer kami, tetapi semua orang yang ingin dapat membuat skrip.

Lihat tampilannya:

Lia patform
Dialog adalah hal yang non-linear dan menulis mesin universal untuk semua jenis skema percakapan sangat sulit. Tetapi sebelum kita berpikir tentang skema, kita sudah memiliki lialang - itu menjadi mesin.

Apa pun perancang antarmuka yang mungkin muncul, kami tidak membuat kode untuknya, tetapi hanya menulis sedikit penerjemah markup dari antarmuka ke kode lialang. Jika antarmuka redone, kita hanya perlu mengubah penerjemah - berkat perintah antarmuka dan perintah inti dapat ada secara terpisah.

Bagaimana cara kerja platform untuk membuat asisten virtual?


Untuk mengumpulkan asisten virtual Anda sendiri di Lia, pengguna harus melalui tiga tahap.

Langkah 1. Unduh riwayat obrolan dengan pengguna sehingga robot memahami dan menyoroti skenario utama


Jika klien memiliki riwayat percakapan dengan pengguna, ia dapat mengunggahnya ke sistem dan mendapatkan kelompok dari pertanyaan paling populer. Akan sangat mudah untuk membuat niat dari mereka.

Contoh pengguna yang tidak tahu

Seiring waktu, efektivitas Lia akan meningkat. Pesan yang tidak dapat dijawab robot didistribusikan lagi ke dalam kelompok: misalnya, “siapa kamu?”, “Siapa kamu?”, “Siapa namamu?” Dan “apakah kamu robot?” Akan jatuh ke dalam satu kelompok. Jadi, platform belajar mandiri semi-otomatis: pengguna melihat di mana celah itu dan menutupnya, menambahkan skenario baru - sebagai akibatnya, persentase permintaan tertutup tumbuh dari 30% menjadi 70% dalam enam bulan.

Jika tidak ada riwayat korespondensi, kami lewati langkah ini dan segera mulai dengan langkah kedua: kami memperkirakan permintaan apa yang akan diberikan pengguna kepada asisten.

Langkah 2. Kami menuliskan maksudnya: 10-20 opsi untuk permintaan pengguna yang paling sering


Pada tahap kedua, kami meresepkan niat berdasarkan 10-20 pertanyaan paling populer: jumlah opsi ini cukup berkat jaringan saraf. Jadi frasa seperti "Saya ingin memesan anggur" mengajarkan bot untuk mengenali permintaan pengguna yang serupa: misalnya, "Dapatkan anggur" atau "Pesan anggur".

Contoh marka yang diinginkan

Asisten lain memahami dan mengekstrak esensi: nama kota, nomor telepon, alamat, stempel waktu, titik, tanggal, dan kutukan - bahkan jika Anda mengatakan "lelah, bawa sekotak anggur besok".

Selain itu, pengguna dapat menambahkan objek mereka sendiri dan secara manual menandai frasa pelatihan sehingga asisten belajar lebih cepat. Ini adalah salah satu fitur paling kuat dari platform, berkat itu dapat membuat robot yang bekerja tidak lebih buruk daripada operator manusia.

Langkah 3. Buat skenario: tentukan beberapa jawaban atau tindakan


Di sini pengguna harus memberikan jawaban atas permintaan pengguna. 95% dari rata-rata proyek biasanya menggunakan skenario Tanya Jawab sederhana - jawaban untuk pertanyaan populer.

gambar

Omong-omong, asisten dapat merespons dengan gambar, video, dan file audio, dan jika perlu, mengirim geolokasi.

Lompatan untuk membangun sangat berguna - berkat itu, Lia dapat beralih dari satu skenario ke skenario lain, dan kemudian kembali lagi, menyelesaikan beberapa masalah. Ini berguna jika Anda perlu minggir dalam dialog, tetapi kemudian kembali ke jalur yang benar: misalnya, ajukan pertanyaan klarifikasi.

Contoh lompatan dialog ke:

Asisten: Kami perlu mengklarifikasi alamat pengiriman, karena penerima tidak merespons.
Klien: Dan tentang apa? Pesanan yang mana? (JumpTo untuk klarifikasi pesanan)
Asisten: Memesan 21 Agustus, Antigal, "Uno" Malbec.
Asisten: Jadi bisakah kita mengklarifikasi alamat pengiriman saat ini? (Kembali ke skrip utama)

Ketika pembuat menginginkan asistennya tidak hanya merespons dengan teks, tetapi untuk mengambil tindakan, ia akan dapat memanggil seorang programmer untuk menulis cuplikan JS untuk spesialis. Kami memungkinkan Anda untuk menjalankan JavaScript secara langsung selama skrip: mengakses API eksternal, mengirim email atau melakukan tindakan kompleks lainnya.

4. Ringkasan


Seorang asisten dapat berintegrasi dengan apa saja: berbicara dengan seseorang di telepon, dalam pesan instan atau widget yang akan dikirim oleh klien di situs.

Merakit asisten yang cerdas di platform membutuhkan waktu beberapa jam hingga sebulan. Kemudian robot belajar untuk memahami permintaan dan mengenali pola secara realistis - dibutuhkan sekitar enam bulan (selama ini orang yang hidup mengawasi permintaan itu). Bisnis dapat melakukan sebagian besar tugas rutin untuk gadis robot Lia: dari mengoordinasikan pengiriman dan memanggil taksi hingga berkonsultasi dengan klien.

Contoh Virtual Wine Assistant Assistant

Omong-omong, kami telah mentransfer proyek dengan bank ke platform. Mereka bekerja dengan baik, tetapi mereka lebih mudah dimoderasi.

Dalam waktu dekat, kami berencana untuk menambahkan ekstraktor, yang akan memungkinkan pengguna kami untuk mengekstrak data yang lebih kompleks (misalnya, robot akan memahami frasa "lusa setelah makan siang"). Kami juga akan menyelesaikan kontrol versi sehingga klien dapat dengan cepat memutar dan memutar kembali versi proyek. Dan juga kami akan melepaskan sistem peran organisasi.

Kami perkirakan ramalan Gartner benar - dan pada tahun 2022, hingga 70% dari semua interaksi pelanggan akan melewati beberapa jenis AI. Menurut ide kami, desainer seperti Lia akan membantu mentransfer layanan klien ke robot lebih cepat.

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


All Articles