Dapatkah Anda bayangkan berapa banyak dokumen peraturan per jam yang harus dilihat oleh pengacara perusahaan dan apa akibatnya akibat kecerobohannya? Seorang pengacara yang malang harus membaca setiap kontrak, terutama jika tidak ada templat standar untuknya, yang sering terjadi.
Melihat ke mata lelah pengacara perusahaan kami, kami memutuskan untuk membuat layanan yang akan menemukan masalah dalam dokumen dan memberi sinyal kepada pengacara yang tertidur. Sebagai hasilnya, kami menciptakan solusi dengan agregasi pengetahuan berdasarkan kontrak dan kiat-kiat tertentu untuk pengacara, yang harus mendapat perhatian khusus. Tentu saja, bukan tanpa sihir. Sihir matematika yang disebut Deteksi Anomali.
Pada dasarnya, pendekatan Deteksi Anomali digunakan untuk menganalisis perilaku berbagai peralatan untuk mendeteksi kegagalan, atau di sektor perbankan untuk menentukan penipuan. Dan kami mencoba menerapkan algoritma ini untuk analisis dokumen hukum. Ikuti cut untuk mengetahui bagaimana kami melakukannya.
1. Kami menangani informasi terstruktur
Kita beruntung karena Teks-teks dalam kontrak cukup terstruktur, kering dan disusun sesuai dengan templat tertentu. Untuk mengerjakan proyek, ide itu diusulkan untuk mengimplementasikan prototipe berdasarkan kontrak dan kontrak dari situs zakupki.gov.ru (kami mendapat 200.000 dokumen). Untuk 170.000 kontrak, kami dapat mengidentifikasi struktur: pembukaan, bab, paragraf dan lampiran pada kontrak, dengan mempertimbangkan kata kunci, posisi dalam teks dan penomoran.
2. Berbagai jenis kontrak
Penting untuk mempertimbangkan fakta bahwa kontrak dapat terdiri dari berbagai jenis. Semuanya sangat berbeda dalam konten, subjek kontrak, bab utama, dll. Untuk mengoptimalkan analisis masing-masing jenis kontrak, perlu untuk melakukan pekerjaan klasifikasi atau pengelompokan.
Mungkin Anda sudah tahu jenis kontrak apa yang ada dalam basis data Anda, dan Anda tahu tanda-tanda yang dengannya mereka dapat ditentukan. Dalam kasus kami, kami memiliki badan kontrak mentah tanpa informasi tambahan tentang setiap kontrak dan tanpa asumsi tentang klasifikasi kontrak pengadaan. Karena itu, kami terpaksa menggunakan pengelompokan basis kontrak kami.
Anda dapat membakukan pengelompokan menggunakan vektor presentasi dokumen tf-idf, tetapi kami memutuskan untuk mencoba algoritma Doc2Vec, hanya untuk bersenang-senang. Menggunakan algoritma Doc2Vec, kontrak diubah menjadi vektor, dan vektor kontrak yang dihasilkan dikirim ke input dari algoritma pengelompokan. Kami menggunakan algoritma K-means untuk mengelompokkan vektor. Karena kesamaan biasanya diukur menggunakan jarak cosinus, kami menggunakannya bukan jarak Euclidean.
Setelah menerima 20 kelompok dokumen, perlu untuk memeriksa kualitas pengelompokan. Karena kami tidak memiliki klasifikasi kontrak, kami tidak dapat membandingkan cluster yang dihasilkan dengan partisi yang ada. Kemudian kami memutuskan untuk melihat kata-kata yang menggambarkan klaster. Untuk melakukan ini, kami mengambil item "Subjek Perjanjian" untuk setiap cluster, menghapus kata berhenti, angka dan kata-kata yang ditemukan di sebagian besar cluster. Lalu kami memilih 5 kata yang paling umum untuk setiap cluster sebagai kata kunci. Sedemikian mudahnya, seseorang dapat secara subyektif menilai kualitas pengelompokan.
Contoh kata yang menggambarkan kluster:
- penyewa, pemilik, apartemen, persewaan, pengembang
- kompetensi, pengajaran, pendidikan, akademik, penuh waktu
- kontraktor umum, subkontraktor, konstruksi umum, perancang, perencanaan kota
- farmasi, karantina, pengeluaran, fitosanitasi, kedap udara
- detektif, penjaga keamanan, penindasan, kecemasan, pelanggaran
- penerima lisensi, sublisensi, film, pemberi lisensi, estafet
- peminjam, escrow, kreditor, pinjaman, pledger
- terpusat, pasokan energi, intrazon, pipa ledeng, saluran pembuangan
3. Anomali apa yang bisa kita temui dalam kontrak
Mari kita tentukan kasus apa yang kita anggap abnormal dan apa yang bisa kita lakukan dengannya. Kami mengidentifikasi skenario berikut:
- Klausul tambahan telah ditambahkan ke kontrak yang belum pernah terlihat dalam konteks ini sebelumnya. Penting untuk menarik perhatian seorang pengacara kepadanya.
- Tidak ada klausul dalam kontrak yang sebelumnya ditemui dalam kontrak tersebut. Kami harus menyarankan pengacara untuk menambahkannya.
- Paragraf mirip dengan beberapa poin dari cerita, tetapi entah bagaimana diulang, beberapa kata ditambahkan atau dihapus. Anda dapat memberi tahu pengacara dan menyarankan Anda untuk mengedit.
4. Dalam bentuk apa untuk menyerahkan kontrak
Seperti yang telah disebutkan, kontrak terdiri dari bab-bab, bab dibagi menjadi beberapa paragraf, setiap paragraf dapat berisi sub-paragraf, dll. Untuk membagi kontrak menjadi beberapa bab dan paragraf, kami memperhitungkan penomoran, transfer, kata kunci: "Bab", "Artikel", dll. Setiap item terdiri dari satu kalimat atau lebih. Untuk memecah item menjadi kalimat, sent_tokenize dari modul nltk.tokenize digunakan.
Kontrak itu sendiri berisi beberapa bab global, esensi dan konten yang dapat ditemukan oleh pos: subjek kontrak, hak dan kewajiban para pihak, harga dan prosedur penyelesaian ... Kami mencoba menggabungkan bab dengan pos yang sama dan bekerja dengan bab yang berbeda secara mandiri. Judul-judul bab sering diulang, memiliki kesalahan ketik atau tanda baca ekstra. Untuk membuat kelompok bab cukup besar, kami menggabungkan judul yang dekat dalam jarak Levenshtein menjadi satu kelompok.
Salah satu masalah yang pasti dapat kita temui adalah volume besar entitas yang disebutkan dalam kontrak, yang seringkali unik dan dapat disalahartikan sebagai anomali. Ada banyak entitas dalam kontrak, seperti nama, nama perusahaan, tanggal, alamat, dll., Yang berbeda dari satu kontrak ke kontrak lainnya. Adalah perlu untuk menemukan dan menghilangkan entitas tersebut dari kontrak, yaitu bawa kontrak ke beberapa formulir templat. Kami beruntung dengan dataset, karena dalam pembongkaran kontrak ada sebagian besar kontrak templat, entitas bernama di mana digantikan oleh garis bawah. Kami telah mengidentifikasi di antara frasa mana garis bawah biasanya muncul untuk menemukan frasa ini dalam dokumen yang lengkap dan menghapus entitas yang disebutkan dari mereka. Jelas bahwa dengan cara ini kami tidak menghapus semua entitas yang disebutkan. Karena itu, kami sekali lagi berjalan melewati lambung dengan perpustakaan Natasha dan menghapus entitas yang ia temukan.
5. Definisi klausa abnormal dalam kontrak
Kami telah dapat memisahkan kontrak berdasarkan jenis menggunakan pengelompokan dan mampu mengidentifikasi kelompok-kelompok dari bab yang sama. Sekarang, dengan menggunakan akumulasi pengetahuan tentang klausa tertentu dari jenis kontrak tertentu, kita dapat memahami apa yang perlu diperbaiki dalam kontrak saat ini. Mari kita hitung probabilitas anomali untuk setiap kalimat dalam bab ini.
Untuk setiap kelompok bab, kami menyimpan semua penawaran yang kami temui dalam set dokumen pelatihan kami dari pengadaan Negara. Karena ada cukup banyak dari mereka, untuk setiap kelompok bab model Word2Vec dilatih, dan setiap kalimat dikaitkan dengan vektor jumlah vektor (dari tf-idf) tertimbang (dengan tf-idf) dari kata-kata yang termasuk di dalamnya. Selanjutnya, vektor kalimat dibagi menjadi kelompok-kelompok yang mirip dengan pembagian vektor untuk dokumen.
Sekarang, ketika sebuah proposal datang kepada kami, kami menentukan dari kelompok kontrak mana, dari kelompok bab mana, ke kelompok proposal mana yang paling dekat dan dalam kelompok ini kami menemukan yang terdekat. Jarak ke penawaran terdekat dapat dianggap sebagai ukuran seberapa abnormal penawaran ini. Jika jarak ke penawaran terdekat adalah nol, maka penawaran kami tidak abnormal. Dengan meningkatnya jarak ini, kami semakin ragu bahwa proposal tersebut tidak mengandung anomali. Kemungkinan besar ada sesuatu yang salah dengannya.
6. Apa yang harus dilakukan dengan barang yang hilang
Kami menemukan cara menemukan poin anomali dalam kontrak, tetapi tidak belajar bagaimana menemukan anomali dalam bentuk kalimat atau poin yang hilang. Anomali semacam itu dapat dengan mudah ditemukan jika kita memiliki templat untuk jenis kontrak ini, tetapi, misalnya, ada kalanya perusahaan lain mengirimi kita kontrak yang dibuat menurut templat kita sendiri.
Untuk mendeteksi anomali seperti itu, kita perlu membuat templat untuk kontrak dengan seperangkat penawaran / klausul wajib, sekali lagi hanya berdasarkan pada kontrak kita.
Kami datang dengan dan menguji algoritma untuk membangun template. Algoritma ini mengasumsikan bahwa dalam basis data kontrak kami terdapat bab serupa dengan set item yang benar, yang ingin kami identifikasi dan tunjukkan sebagai templat.
Algoritma:

- Untuk setiap kelompok bab, pra-latih model yang didasarkan pada algoritma MinHashLSH, yang memungkinkan Anda menemukan teks-teks dekat dengan cepat.
- Untuk setiap bab dari kontrak yang diunduh, temukan daftar paragraf yang dekat dengannya dari database.
- Berdasarkan paragraf tutup yang diperoleh, buat model bahasa dan pilih sebagai templat paragraf dengan probabilitas tertinggi yang diprediksi oleh model bahasa.
Setelah menerima templat untuk setiap bab, kami dapat mengidentifikasi barang-barang yang hilang yang ada dalam templat tetapi tidak ada dalam kontrak saat ini, dan menyarankan pengacara untuk menambahkannya.
7. Pipa penuh
Untuk merangkum dan mengumpulkan semua langkah bersama:
I. Pengumpulan, pemrosesan, dan penyimpanan korps kontrakA. Kumpulkan badan kontrak model.
B. Mengklasifikasikan / mengelompokkan kontrak berdasarkan jenis.
C. Memecah kontrak menjadi beberapa bab, paragraf dan kalimat.
D. Hapus entitas yang disebutkan dari kontrak.
E. Kelompokkan bab menurut judulnya.
F. Untuk setiap grup bab, latih Word2Vec.
G. Cocokkan setiap kalimat dengan vektor jumlah vektor dari kata-kata yang dimasukkan di dalamnya.
H. Cluster vektor kalimat yang diterima dan simpan masing-masing cluster secara terpisah untuk dengan cepat mencari vektor terdekat di cluster terdekat.
I. Untuk setiap grup bab, latih MinHashLSH.
II. Cari anomali dalam dokumen baruA. Menyoroti Poin Abnormal
1. Tentukan jenis kontrak (kelas atau kluster)
2. Bagi dokumen menjadi beberapa bab, paragraf dan kalimat
3. Untuk setiap bab, cari grup bab terkait dalam database
4. Cocokkan setiap kalimat dengan vektor
5. Temukan untuk setiap penawaran kontrak kluster penawaran terdekat, dan di dalamnya tawaran terdekat
6. Hitung jarak antara vektor proposal dan warna kalimat berdasarkan jarak yang diperoleh.
7. Warnai hanya sebagian kalimat, jika dengan yang terdekat mereka berbeda dalam beberapa kata.
8. Sarankan pengeditan dalam bentuk kalimat berikutnya.
B. Cari barang yang hilang
1. Untuk setiap bab, buat templat
2. Nasihat untuk menambahkan item yang hilang dari template
8. Penilaian kualitas
Untuk menilai kualitas solusi untuk masalah tersebut, serangkaian uji kontrak telah dibentuk. Anomali secara artifisial ditambahkan ke dalam kontrak dalam bentuk menghapus bagian dari kata-kata, memasukkan kata-kata / frasa ke dalam kalimat, memasukkan kalimat dari bab lain, menghapus kalimat. Kami mengevaluasi kualitas untuk setiap jenis anomali dan memperoleh distribusi kesalahan penentuan berikut:

Artinya, algoritma yang diusulkan memungkinkan kami untuk menentukan inklusi yang salah dalam 4 dari 5 kasus. Perlu dicatat bahwa dengan peningkatan volume sampel pelatihan dan pengelompokan kontrak untuk berbagai jenis, kita bisa mendapatkan peningkatan dalam penilaian ini.
9. Visualisasi
Untuk memvisualisasikan solusi untuk masalah tersebut, antarmuka web diimplementasikan di mana kontrak baru dapat dimuat, teks yang akan ditampilkan pada halaman dan penawaran abnormal akan disorot. Semakin gelap warna kalimatnya, semakin kuat kita yakin bahwa itu adalah anomali. Karena kami menemukan penawaran terdekat, kami menyarankan pengeditan untuk pengguna dalam bentuk penawaran berikutnya, atau kami sarankan untuk mengubah bagian spesifik dari penawaran jika yang berikutnya memiliki sedikit perbedaan dengan yang asli.

10. Di mana berlaku?
Aplikasi praktis dari layanan yang dihasilkan paling tepat dalam kasus-kasus di mana pemeriksaan "aliran" kemurnian hukum sejumlah besar dokumen dengan jenis yang sama diperlukan: misalnya, ketika mengeluarkan pinjaman jaminan kepada publik (hipotek, pinjaman mobil, dan asuransi). Misalnya, dalam kasus hipotek, ini adalah kontrak untuk penjualan real estat, real estat dan kontrak asuransi peminjam, kontrak evaluasi properti, dll. - ratusan halaman teks dalam dokumen masing-masing klien, yang dapat dianalisis hampir secara instan, dan tempat-tempat abnormal akan "disorot" ke pengacara untuk analisis risiko atau penipuan.
Jadi, pengacara dari darah dan daging tidak dapat melakukannya tanpa sepenuhnya, tetapi teknologi modern memungkinkan mereka untuk membuat hidup lebih mudah.
Materi disiapkan oleh Elena Sannikova (
helen_sunny ).