24.09.2024
Rumah / Ikhtisar Linux / N-gram. Meningkatkan optimasi pada halaman dengan bantuan Program pesaing menggunakan huruf n gram

N-gram. Meningkatkan optimasi pada halaman dengan bantuan Program pesaing menggunakan huruf n gram


Definisi Contoh masalah terapan Membuat model bahasa n-gram Menghitung probabilitas n-gram Menghilangkan ketersebaran korpus pelatihan o Add-one Smoothing o Witten-Bell Discounting o Good-Turing Discounting o Katzs Backoff o Deleted Interpolation Memperkirakan n Model bahasa -gram menggunakan entropi Isi


N-gram (Bahasa Inggris N-gram) adalah barisan N elemen tertentu. Mari kita lihat rangkaian kata-katanya. Unigram kucing, anjing, kuda,... Bigram kucing kecil, anjing besar, kuda kuat,... Trigram makan kucing kecil, anjing besar menggonggong, lari kuda kuat,... Definisi


Contoh masalah terapan Pengenalan ucapan. Beberapa kata dengan ejaan berbeda diucapkan sama. Tugasnya adalah memilih kata yang tepat dalam konteksnya. Pembuatan teks tentang topik tertentu. Contoh: Yandex.Abstrak. Cari kesalahan semantik. Dia mencoba menjelaskan - dari sudut pandang sintaksis itu benar, dari sudut pandang semantik tidak. Dia mencoba mencari tahu – itu benar. mencoba mencari tahu lebih sering ditemukan dalam teks bahasa Inggris daripada mencoba mencari tahu, yang berarti bahwa jika Anda memiliki statistik, Anda dapat menemukan dan menghilangkan kesalahan semacam ini


Membuat model bahasa n-gram Untuk menyelesaikan masalah aplikasi yang tercantum, Anda perlu membuat model bahasa N-gram. Untuk membuat model Anda perlu: 1. Menghitung probabilitas n-gram dalam korpus pelatihan. 2. Hilangkan masalah kelangkaan korpus dengan menggunakan salah satu metode penghalusan. 3. Menilai kualitas model bahasa n-gram yang dihasilkan menggunakan entropi.


Menghitung probabilitas N-gram (1) Dalam korpus pelatihan, n-gram tertentu muncul dengan frekuensi yang berbeda. Untuk setiap n-gram, kita dapat menghitung berapa kali n-gram tersebut muncul dalam korpus. Berdasarkan data yang diperoleh, dapat dibangun model probabilistik, yang kemudian dapat digunakan untuk memperkirakan probabilitas n-gram pada beberapa korpus uji.


Menghitung probabilitas N-gram (2) Mari kita lihat sebuah contoh. Misalkan korpusnya terdiri dari satu kalimat: Mereka piknik di tepi kolam renang, lalu berbaring di rumput dan memandangi bintang-bintang. Unigram: Mereka, dipilih, oleh,… Bigram: Mereka piknik, dipilih oleh, oleh,… Trigram Mereka dipilih oleh, dipilih oleh, di tepi kolam renang,…


Menghitung probabilitas N-gram (3) Sekarang Anda dapat menghitung n-gram. Semua bi- dan trigram yang teridentifikasi muncul satu kali dalam korpus. Semua unigram, kecuali kata the, juga muncul satu kali. Kata itu muncul tiga kali. Sekarang kita mengetahui berapa kali setiap n-gram muncul, kita dapat membangun model probabilistik dari n-gram. Dalam kasus unigram, probabilitas kata u dapat dihitung dengan menggunakan rumus: Misalnya, untuk kata probabilitasnya adalah 3/16 (karena ada 16 kata dalam korpus, 3 di antaranya adalah kata itu). Banyaknya kemunculan kata u dalam korpus latihan Mereka berpiknik di tepi kolam renang, kemudian berbaring di rerumputan dan memandangi bintang-bintang


1, probabilitasnya dihitung sedikit berbeda. Pertimbangkan kasus bigram: biarlah perlu menghitung probabilitas bigram kumpulan. Jika kita menganggap setiap kata dalam bigram sebagai suatu peristiwa, maka probabilitasnya" title=" Menghitung probabilitas N-gram (4) Untuk n-gram, di mana n>1, probabilitasnya dihitung sedikit berbeda. Pertimbangkan kasus bigram: biarlah kita perlu menghitung probabilitas bigram dalam kumpulan. Jika kita menganggap setiap kata dari bigram sebagai suatu peristiwa, maka" class="link_thumb"> 9 !} Menghitung probabilitas N-gram (4) Untuk n-gram, dimana n>1, probabilitas dihitung sedikit berbeda. Pertimbangkan kasus bigram: biarlah perlu menghitung probabilitas bigram kumpulan. Jika kita menganggap setiap kata bigram sebagai suatu peristiwa, maka peluang suatu himpunan peristiwa dapat dihitung dengan menggunakan rumus: Jadi, peluang bigram adalah pool :, di mana 1, probabilitasnya dihitung sedikit berbeda. Pertimbangkan kasus bigram: biarlah perlu menghitung probabilitas bigram kumpulan. Jika kita menganggap setiap kata bigram sebagai suatu peristiwa, maka keyakinan "> 1, probabilitasnya dihitung agak berbeda. Pertimbangkan kasus bigram: misalkan kita perlu menghitung probabilitas bigram kumpulan. Jika kita mempertimbangkan setiap kata dari bigram sebagai suatu kejadian, maka peluang suatu himpunan kejadian dapat dihitung dengan menggunakan rumus : Jadi, peluang bigram pool :, dimana "> 1, peluangnya dihitung sedikit berbeda. Pertimbangkan kasus bigram: biarlah perlu menghitung probabilitas bigram kumpulan. Jika kita menganggap setiap kata bigram sebagai suatu peristiwa, maka probabilitasnya" title=" Menghitung probabilitas N-gram (4) Untuk n-gram, di mana n>1, probabilitas dihitung sedikit berbeda. Pertimbangkan kasus bigram: biarlah kita perlu menghitung probabilitas bigram dalam kumpulan. Jika kita menganggap setiap kata dari bigram sebagai suatu peristiwa, maka"> title="Menghitung probabilitas N-gram (4) Untuk n-gram, dimana n>1, probabilitas dihitung sedikit berbeda. Pertimbangkan kasus bigram: biarlah perlu menghitung probabilitas bigram kumpulan. Jika kita menganggap setiap kata dalam bigram sebagai suatu peristiwa, maka"> !}


Menghitung probabilitas N-gram (5) Sekarang pertimbangkan untuk menghitung probabilitas n-gram sembarang (atau kalimat dengan panjang n). Memperluas kasus bigram, kita memperoleh rumus probabilitas untuk n-gram: Menghitung probabilitas menggunakan rumus seperti itu tidak mudah, jadi penyederhanaan diperkenalkan - gunakan riwayat dengan panjang tetap, yaitu. Jadi, menghitung probabilitas suatu kalimat berarti menghitung probabilitas bersyarat dari N-gram yang membentuk kalimat ini:




Menghilangkan ketersebaran korpus (1) Masalah dengan model bahasa n-gram yang tidak dihaluskan: untuk beberapa n-gram, probabilitasnya bisa sangat diremehkan (atau bahkan nol), meskipun pada kenyataannya (dalam korpus pengujian) n-gram ini dapat muncul cukup sering . Alasan: keterbatasan korps pelatihan dan kekhususannya. Solusi: dengan mengurangi probabilitas beberapa n-gram, tingkatkan probabilitas n-gram yang tidak ditemukan (atau jarang terjadi) dalam korpus pelatihan.




Menghapus ketersebaran korpus (3) Algoritme penghapusan ketersebaran menggunakan konsep berikut: Jenis – kata-kata (urutan kata) yang berbeda dalam teks. Token – semua kata (urutan kata) dalam teks. Mereka piknik di tepi kolam renang, lalu berbaring di rumput dan memandangi bintang – 14 jenis, 16 token





Add-one smoothing (4) Metode ini menimbulkan kesalahan perhitungan yang kuat (misalnya, pada slide sebelumnya terlihat bahwa untuk kata Cina jumlah bigram berkurang 8 kali lipat). Pengujian menunjukkan bahwa model yang tidak dihaluskan sering kali menunjukkan hasil yang lebih akurat. Oleh karena itu, metode ini hanya menarik dari sudut pandang teoretis.


Diskon Witten-Bell (1) Berdasarkan ide sederhana: gunakan data tentang n-gram yang muncul di korpus pelatihan untuk memperkirakan kemungkinan hilangnya n-gram. Ide metode ini diambil dari algoritma kompresi: dua jenis peristiwa dipertimbangkan - simbol (tipe) baru ditemukan dan simbol (token) ditemukan. Rumus probabilitas untuk semua n-gram yang hilang (yaitu probabilitas menemukan n-gram dalam korpus pengujian yang tidak ada dalam korpus pelatihan): N adalah jumlah token dalam korpus pelatihan, T adalah jumlah tipe yang telah ditemui dalam korpus pelatihan






Diskon Witten-Bell (4) =>=> =>"> =>"> =>" title="Diskon Witten-Bell (4) =>=>"> title="Diskon Witten-Bell (4) =>=>"> !}




Diskon Turing Baik (1) Ide: untuk n-gram yang muncul sebanyak nol kali (s kali), skornya sebanding dengan jumlah n-gram yang muncul satu kali (s + 1 kali). Mari kita lihat contohnya: Misalkan 18 ikan ditangkap. Tertangkap total jenis yang berbeda– 6, dan hanya satu perwakilan yang ditangkap dari tiga spesies. Kita perlu mencari kemungkinan ikan berikutnya termasuk spesies baru. Ada total 7 kemungkinan spesies (6 spesies telah ditangkap).








Katzs Backoff (2) Koefisien α diperlukan untuk distribusi probabilitas sisa N-gram yang benar sesuai dengan distribusi probabilitas (N-1)-gram. Jika tidak memasukkan , perkiraannya akan salah, karena kesetaraan tidak akan terpenuhi: Perhitungan α diberikan di akhir laporan.




Mengevaluasi model bahasa menggunakan entropi (3) Untuk membandingkan model bahasa yang berbeda, digunakan entropi silang: Semakin dekat nilai entropi silang H(p,m) dengan entropi sebenarnya H(p), semakin baik model bahasanya: Dalam kasus kami, H(p ) adalah entropi korpus pengujian. m(w) – model bahasa (misalnya, model N-gram)


Mengevaluasi model bahasa menggunakan entropi (4) Ada metode lain untuk menilai kualitas model bahasa, berdasarkan apa yang disebut. indikator konektivitas (kebingungan). Ide: hitung probabilitas seluruh korpus pengujian. Model yang lebih baik akan menunjukkan probabilitas yang lebih tinggi. Rumus kebingungan: Jadi, semakin rendah kebingungannya, semakin besar model yang lebih baik. Anda dapat menafsirkan kebingungan sebagai jumlah rata-rata kata yang muncul setelah kata tertentu (yaitu, semakin besar kebingungannya, semakin tinggi ambiguitasnya, dan oleh karena itu, semakin buruk model bahasanya). Hubungan antara kebingungan dan entropi biner:


Estimasi model bahasa menggunakan entropi (5) Sebagai contoh, perhatikan nilai kebingungan untuk korpus tertentu, yang diperoleh dengan menggunakan model unigram, bigram, dan trigram terlatih: Dalam kasus trigram, kebingungan adalah yang terkecil, karena disambiguasi difasilitasi oleh panjang sejarah terbesar dari semua model (sama dengan 2) saat menghitung probabilitas bersyarat trigram. Kebingungan UnigramBigramTrigram


Inti semantik

Agar berhasil mengembangkan dan meningkatkan visibilitas situs web dalam realitas modern, perlu dilakukan perluasan terus-menerus inti semantik. Salah satu cara terbaik ekstensinya adalah mengumpulkan kata kunci pesaing.

Saat ini, tidak sulit untuk mendapatkan semantik pesaing, karena Ada banyak layanan, baik berbayar maupun gratis.

Daftar yang gratis:

— megaindex.ru — Alat “Visibilitas Situs”.

- xtool.ru - layanan terkenal yang juga menampilkan kata kunci yang menentukan peringkat situs

Daftar yang berbayar:

— spywords.ru — cocok untuk Yandex dan Google

— semrush.ru — hanya berorientasi pada Google

— prodvigator.ua — Analog Ukraina dari spywords.ru

Selain layanan, Anda juga dapat menggunakan metode manual berdasarkan pemisahan judul dan deskripsi menjadi n-gram, sehingga menghasilkan daftar frasa tambahan sebagai keluaran.

N-gram - urutan n elemen. Dalam praktiknya, N-gram lebih sering ditemukan sebagai rangkaian kata. Barisan dua unsur yang berurutan sering disebut bigram, barisan tiga elemen disebut trigram. Setidaknya empat atau lebih unsur ditetapkan sebagai N-gram, N diganti dengan banyaknya unsur yang berurutan.

Mari kita lihat teknik ini langkah demi langkah:

— Kami membongkar judul (deskripsi) pesaing. Dapat dilakukan dengan menggunakan program Screaming Frog SEO.

— Di editor teks, kami membersihkan daftar yang dihasilkan dari bagian bantu bicara, tanda baca, dan sampah lainnya. Saya menggunakan fungsi pencarian dan penggantian di editor teks luhur ( tombol pintas ctrl+H), menggunakan ekspresi reguler:

— Pilih n-gram yang diinginkan dan atur frekuensinya ke setidaknya satu. Pilihan terbaik adalah trigram dan 4 gram:

— Kami mendapatkan hasil sebagai berikut:

Kolommenghitungmenunjukkan jumlah pengulanganN-gram, kolomfrekuensi -frekuensiN-gram.

Setelah kami menerima daftar frasa, kami perlu menganalisisnya dan memilih kata kunci yang sesuai untuk memperluas inti semantik. Anda dapat mengetahui lebih lanjut di bagian terkait di blog kami.

Permintaan pengelompokan

Sangat penting untuk memahami bagaimana inti semantik pesaing dikelompokkan, karena ini membantu mendistribusikan frasa kunci dengan benar di halaman situs.

Untuk melakukan ini, setelah kita terbentuk daftar lengkap pertanyaan, kami perlu mendapatkan halaman dan posisi pesaing yang relevan (Anda dapat menggunakan layanan seolib.ru), dan kemudian membandingkannya dengan pengelompokan Anda. Jika jelas bahwa pesaing menempati posisi yang baik dan pada saat yang sama pengelompokannya berbeda dari kami (misalnya, permintaan pesaing didistribusikan ke seluruh halaman yang berbeda, dan kami memiliki permintaan yang sama pada salah satunya), Anda perlu memperhatikan hal ini dan meninjau laman landas di situs web Anda.

Mari kita lihat contoh kecil membandingkan pengelompokan situs bersyarat dan pesaingnya.

Seperti dapat dilihat dari tabel, di situs site.ru satu halaman arahan dipilih untuk semua kata kunci. Pesaing memberi peringkat pada halaman berbeda untuk kueri yang sama dan menempati posisi TOP atau mendekati TOP. Berdasarkan hal tersebut, kita dapat menyimpulkan bahwa pengelompokan pada site.ru perlu direvisi, khususnya perlu dibuat halaman tersendiri untuk frase kunci dengan kata “fasad”.

Kualitas teks

Hal pertama dan terpenting yang harus Anda perhatikan ketika menganalisis teks pesaing bukanlah komponen kuantitatif (jumlah kemunculan, volume teks, dll.), tetapi komponen kualitatif atau semantik - seberapa berguna informasi tersebut, apa pesaingnya. penawaran dan bagaimana dia melakukannya.

Mari kita lihat beberapa contoh.

Katakanlah Anda mengirimkan bunga dan halaman rumah dalam teks Anda menjamin kesegarannya. Misalnya seperti ini:

Layanan pengiriman bungalokasi. rumenjamin keamanan karangan bunga bahkan di musim dingin.

Berikut ini contoh dari salah satu pesaing kami:

Menguntungkan memesan komposisi wangi dari kami, karena kami menjamin uang kembali 100% jika kesegaran bunga diragukan.

Jaminan pesaing didukung oleh uang, yang lebih penting daripada jaminan abstrak.

Mari kita lihat contoh lain - teks pada halaman kategori "ubin keramik" di toko online:

Teks ini tidak membawa muatan semantik yang berguna, ini adalah air murni. Kemungkinan besar, seseorang yang mengunjungi situs tersebut dan membuat keputusan pembelian ingin mengetahui manfaat produk dan kemungkinan konfigurasinya, namun malah menerima serangkaian karakter yang tidak berarti.

Sekarang mari kita lihat teks pesaing:

Teks ini lebih berguna karena... Mengkomunikasikan perbedaan antara ubin secara ringkas dan membantu Anda memahami cara memilih ubin yang tepat.

Jadi, dengan membandingkan teks pesaing dengan teks Anda sendiri, Anda bisa mendapatkan banyak informasi berguna yang akan membantu copywriter dalam menyusun spesifikasi teknis.

Relevansi teks

Melanjutkan topik kualitas teks, kami tidak bisa tidak menyentuh relevansinya. Saat ini, agar teks menjadi relevan, tidak cukup hanya memasukkan kata kunci. Untuk meningkatkan relevansi halaman tanpa membuat teks menjadi spam, Anda perlu menggunakan kata-kata yang berhubungan dengan topik.

Saat menilai relevansi teks dengan kueri, mesin pencari tidak hanya menganalisis keberadaan kata kunci, tetapi juga kata tambahan, sehingga menentukan makna teks. Misalnya, jika kita menulis teks tentang gajah, maka kata-kata yang terkait dapat dipertimbangkan: “belalai”, “gading”, “alam”, “kebun binatang”. Jika teksnya tentang bidak catur “uskup”, maka kata-katanya akan menjadi: “bidak”, “cek”, “ratu”, dll.

Anda bisa mendapatkan daftar kata yang paling sesuai untuk pertanyaan Anda di teks pesaing. Untuk melakukan ini, Anda perlu mengambil langkah-langkah berikut:

— Kami menyalin semua teks dari TOP-10 sesuai dengan permintaan HF yang diinginkan ke dalam file teks yang berbeda.

— Kami menghapus bagian pidato resmi, tanda baca, dan angka dari teks (dibahas sebelumnya).

- Susun kata dalam satu baris - gunakan fungsi "cari dan ganti" dengan ekspresi reguler. Ganti spasi dengan \n.

- Selanjutnya semua bentuk kata perlu dibawa ke bentuk kamus normal (leme). Untuk melakukan ini, Anda dapat menggunakan layanan https://tools.k50project.ru/lemma/. Di bidang tersebut Anda perlu memasukkan daftar kata dari setiap file secara terpisah dan klik tombol "lemmetize dan output sebagai tabel csv". Hasilnya harusnya 10 file dengan kata-kata lemmetized.

— Kami menghapus kata duplikat di setiap file.

— Kami menggabungkan kata-kata dari file ke dalam satu daftar.

— Sekarang kita perlu membuat kamus frekuensi. Untuk melakukan ini, tambahkan daftar yang dihasilkan ke layanan https://tools.k50project.ru/lemma/ dan klik "buat kamus frekuensi sebagai CSV".

— Daftar kata kami sudah siap:

Jika frekuensinya 10, maka kata ini digunakan di 10 situs, jika 8, maka hanya di 8, dst. Kami merekomendasikan penggunaan kata-kata yang paling umum, namun solusi menarik juga dapat ditemukan di antara kata-kata yang jarang muncul.

Seperti ini dengan cara yang sederhana Anda bisa mendapatkan daftar kata tematik untuk menyusun spesifikasi teknis untuk copywriter.

Seperti yang Anda lihat, pesaing adalah sumber informasi yang sangat penting yang dapat membantu Anda mengoptimalkan situs Anda dengan lebih baik. Pada artikel ini saya belum membahas semua aspeknya, dan kedepannya saya akan terus menulis tentang apa saja yang berguna dan bagaimana Anda bisa belajar dari kompetitor Anda.

Berlangganan buletin kami Algoritme ini dirancang untuk menelusuri teks yang sebelumnya tidak diketahui, dan dapat digunakan, misalnya, dalam editor teks, penampil dokumen, atau browser web untuk mencari halaman. Mereka tidak memerlukan pra-pemrosesan teks dan dapat bekerja dengan aliran data yang berkelanjutan.

Pencarian linier

Penerapan sekuensial sederhana dari metrik tertentu (misalnya, metrik Levenshtein) ke kata-kata dari teks masukan. Saat menggunakan metrik yang dibatasi, metode ini memungkinkan performa optimal. Tapi, pada saat yang sama, lebih dari itu k, semakin banyak waktu pengoperasian yang bertambah. Perkiraan waktu asimtotik - HAI(kn).

Bitap (juga dikenal sebagai Shift-Or atau Baeza-Yates-Gonnet, dan modifikasinya oleh Wu-Manber)

Algoritma sedikit dan berbagai modifikasinya paling sering digunakan untuk pencarian fuzzy tanpa pengindeksan. Variasinya digunakan, misalnya, dalam utilitas Unix agrep, yang menjalankan fungsi yang mirip dengan grep standar, tetapi dengan dukungan untuk kesalahan dalam permintaan pencarian dan bahkan memberikan kemampuan terbatas untuk menggunakan ekspresi reguler.

Ide algoritma ini pertama kali dikemukakan oleh warganet Ricardo Baeza-Yates Dan Gaston Gonnet, menerbitkan artikel terkait pada tahun 1992.
Versi asli dari algoritma ini hanya berhubungan dengan substitusi karakter, dan, pada kenyataannya, menghitung jarak mengelim. Tapi sebentar lagi Sun Wu Dan Udi Manber mengusulkan modifikasi algoritma ini untuk menghitung jarak Levenshtein, yaitu memperkenalkan dukungan untuk penyisipan dan penghapusan, dan mengembangkan versi pertama utilitas agrep berdasarkan itu.






Nilai yang dihasilkan

Di mana k- jumlah kesalahan, J- indeks simbol, S x - topeng karakter (dalam topeng, bit unit ditempatkan pada posisi yang sesuai dengan posisi karakter ini dalam permintaan).
Cocok atau tidaknya suatu permintaan ditentukan oleh bit terakhir dari vektor R yang dihasilkan.

Kecepatan tinggi algoritma ini dipastikan dengan perhitungan paralelisme bit - dalam satu operasi dimungkinkan untuk melakukan perhitungan pada 32 bit atau lebih secara bersamaan.
Pada saat yang sama, implementasi sepele mendukung pencarian kata dengan panjang tidak lebih dari 32. Batasan ini ditentukan oleh lebar tipe standar ke dalam(pada arsitektur 32-bit). Tipe dimensi yang lebih besar juga dapat digunakan, namun hal ini mungkin memperlambat algoritma sampai batas tertentu.

Terlepas dari kenyataan bahwa waktu berjalan asimtotik dari algoritma ini HAI(kn) bertepatan dengan metode linier, ini jauh lebih cepat dengan kueri yang panjang dan jumlah kesalahan k lebih dari 2.

Pengujian

Pengujian dilakukan pada teks sebanyak 3,2 juta kata, rata-rata panjang kata adalah 10.
Pencarian yang tepat
Waktu pencarian: 3562 ms
Telusuri menggunakan metrik Levenshtein
Waktu pencarian di k=2: 5728 ms
Waktu pencarian di k=5: 8385 ms
Pencarian menggunakan algoritma Bitap dengan modifikasi Wu-Manber
Waktu pencarian di k=2: 5499 ms
Waktu pencarian di k=5: 5928 ms

Jelas bahwa pencarian sederhana menggunakan metrik, tidak seperti algoritma Bitap, sangat bergantung pada jumlah kesalahan k.

Namun, ketika mencari teks berukuran besar dan tidak berubah, waktu pencarian dapat dikurangi secara signifikan dengan melakukan pra-pemrosesan teks tersebut, yang juga disebut pengindeksan.

Algoritma pencarian fuzzy dengan pengindeksan (Offline)

Fitur dari semua algoritma pencarian fuzzy dengan pengindeksan adalah bahwa indeks dibangun menggunakan kamus yang dikompilasi dari teks sumber atau daftar catatan dalam database.

Algoritme ini menggunakan pendekatan berbeda untuk memecahkan masalah - beberapa di antaranya menggunakan reduksi untuk pencarian eksak, yang lain menggunakan properti metrik untuk membangun berbagai struktur spasial, dan seterusnya.

Pertama-tama, pada langkah pertama, kamus dibangun dari teks sumber, berisi kata-kata dan posisinya dalam teks. Anda juga dapat menghitung frekuensi kata dan frasa untuk meningkatkan kualitas hasil pencarian.

Diasumsikan bahwa indeks, seperti kamus, dimuat seluruhnya ke dalam memori.

Karakteristik taktis dan teknis kamus:

  • Teks sumber - 8,2 gigabyte materi dari perpustakaan Moshkov (lib.ru), 680 juta kata;
  • Ukuran kamus - 65 megabita;
  • Jumlah kata - 3,2 juta;
  • Panjang kata rata-rata adalah 9,5 karakter;
  • Rata-rata panjang kata persegi (dapat berguna saat mengevaluasi beberapa algoritma) - 10,0 karakter;
  • Alfabet - huruf kapital huruf A-Z, tanpa E (untuk menyederhanakan beberapa operasi). Kata-kata yang mengandung karakter non-abjad tidak disertakan dalam kamus.
Ketergantungan ukuran kamus pada volume teks tidak sepenuhnya linier - hingga volume tertentu, kerangka dasar kata terbentuk, mulai dari 15% untuk 500 ribu kata hingga 5% untuk 5 juta, dan kemudian ketergantungan mendekati linier, perlahan menurun dan mencapai 0,5% untuk 680 juta kata Pemeliharaan pertumbuhan selanjutnya dipastikan sebagian besar melalui kata-kata langka.

Algoritma perluasan pengambilan sampel

Algoritme ini sering digunakan dalam sistem pemeriksa ejaan (yaitu pemeriksa ejaan), yang ukuran kamusnya kecil, atau yang kecepatannya bukan kriteria utama.
Hal ini didasarkan pada pengurangan masalah pencarian fuzzy menjadi masalah pencarian eksak.

Dari kueri asli, sekumpulan kata yang “salah” dibuat, yang masing-masing kata tersebut kemudian dilakukan pencarian tepat di kamus.

Waktu berjalannya sangat bergantung pada jumlah k kesalahan dan ukuran alfabet A, dan dalam kasus penggunaan pencarian kamus biner, waktu berjalannya adalah:

Misalnya kapan k = 1 dan kata-kata dengan panjang 7 (misalnya, "Buaya") dalam alfabet Rusia, banyak kata yang salah berukuran sekitar 450, artinya, Anda perlu membuat 450 kueri ke kamus, yang cukup dapat diterima.
Tapi sudah di k = 2 ukuran set seperti itu akan lebih dari 115 ribu opsi, yang sesuai dengan pencarian lengkap kamus kecil, atau 1/27 dalam kasus kami, dan, oleh karena itu, waktu pengerjaannya akan cukup lama. Pada saat yang sama, kita tidak boleh lupa bahwa untuk setiap kata ini perlu dilakukan pencarian kata yang sama persis di kamus.

Keunikan:
Algoritme ini dapat dengan mudah dimodifikasi untuk menghasilkan opsi yang "salah" menurut aturan yang sewenang-wenang, dan, terlebih lagi, tidak memerlukan pemrosesan awal kamus, dan, karenanya, memori tambahan.
Kemungkinan perbaikan:
Tidak mungkin menghasilkan seluruh rangkaian kata yang “salah”, tetapi hanya kata-kata yang paling mungkin muncul dalam situasi nyata, misalnya, kata-kata yang memperhitungkan kesalahan ejaan umum atau kesalahan pengetikan.

Metode ini sudah ditemukan sejak lama, dan paling banyak digunakan, karena penerapannya sangat sederhana dan memberikan kinerja yang cukup baik. Algoritma ini didasarkan pada prinsip:
“Jika kata A cocok dengan kata B, dengan mempertimbangkan beberapa kesalahan, maka dengan tingkat kemungkinan yang tinggi kata tersebut akan memiliki setidaknya satu substring yang sama dengan panjang N.”
Substring dengan panjang N ini disebut N-gram.
Selama pengindeksan, sebuah kata dipecah menjadi N-gram ini, dan kemudian kata tersebut dimasukkan dalam daftar untuk masing-masing N-gram tersebut. Selama pencarian, kueri juga dibagi menjadi N-gram, dan untuk masing-masingnya, daftar kata yang mengandung substring tersebut dicari secara berurutan.

Yang paling sering digunakan dalam praktiknya adalah trigram - substring dengan panjang 3. Memilih nilai N yang lebih besar akan membatasi panjang kata minimum di mana kesalahan sudah dapat dideteksi.

Keunikan:
Algoritma N-gram tidak menemukan semua kemungkinan kata yang salah eja. Jika kita ambil misalnya kata VOTKA, dan menguraikannya menjadi trigram: VO T KA→VO T TENTANG T KE T KA - Anda dapat melihat bahwa semuanya mengandung kesalahan T. Jadi, kata "VODKA" tidak akan ditemukan, karena tidak mengandung salah satu trigram ini, dan tidak akan dimasukkan dalam daftar terkait. Jadi, semakin pendek panjang kata dan semakin banyak kesalahan yang dikandungnya, semakin tinggi kemungkinan kata tersebut tidak dimasukkan dalam daftar yang sesuai dengan N-gram kueri, dan tidak akan muncul dalam hasil.

Sementara itu, metode N-gram memberikan ruang penuh untuk menggunakan metrik Anda sendiri dengan properti dan kompleksitas yang berubah-ubah, tetapi Anda harus membayarnya - saat menggunakannya, Anda masih perlu mencari sekitar 15% kamus secara berurutan, yang merupakan jumlah yang cukup besar. banyak untuk kamus besar.

Kemungkinan perbaikan:
Anda dapat membagi tabel hash N-gram berdasarkan panjang kata dan posisi N-gram dalam sebuah kata (modifikasi 1). Bagaimana panjang kata pencarian dan query tidak boleh berbeda lebih dari k, dan posisi N-gram dalam sebuah kata dapat berbeda tidak lebih dari k. Oleh karena itu, yang perlu diperiksa hanya tabel yang sesuai dengan posisi N-gram ini dalam kata, serta k tabel di kiri dan k tabel di kanan, yaitu. total 2k+1 meja tetangga.

Anda selanjutnya dapat mengurangi ukuran kumpulan yang diperlukan untuk dilihat dengan membagi tabel berdasarkan panjang kata, dan dengan cara yang sama hanya melihat tabel yang berdekatan 2k+1 tabel (modifikasi 2).

Algoritma ini dijelaskan dalam artikel oleh L.M. Boytsov. "Hashing dengan tanda tangan." Hal ini didasarkan pada representasi yang cukup jelas dari “struktur” sebuah kata dalam bentuk bit-bit, yang digunakan sebagai hash (tanda tangan) dalam tabel hash.

Selama pengindeksan, hash tersebut dihitung untuk setiap kata, dan korespondensi daftar kata kamus dengan hash ini dimasukkan ke dalam tabel. Kemudian, selama pencarian, hash dihitung untuk permintaan tersebut dan semua hash tetangga yang berbeda dari hash asli tidak lebih dari k bit dicari. Untuk masing-masing hash ini, daftar kata yang sesuai dengannya dicari.

Proses penghitungan hash - setiap bit hash dikaitkan dengan sekelompok karakter dari alfabet. Bit 1 pada posisi Saya dalam hash berarti kata sumber mengandung karakter dari saya-itu kelompok alfabet. Urutan huruf dalam sebuah kata sama sekali tidak ada artinya.

Menghapus satu karakter tidak akan mengubah nilai hash (jika masih ada karakter dari grup alfabet yang sama dalam kata), atau bit yang sesuai dengan grup ini akan berubah menjadi 0. Saat memasukkan, dengan cara yang sama, salah satu bit akan lanjutkan ke 1, atau tidak akan ada perubahan. Saat mengganti karakter, semuanya menjadi sedikit lebih rumit - hash bisa tetap tidak berubah sama sekali, atau berubah dalam 1 atau 2 posisi. Selama permutasi, tidak ada perubahan yang terjadi sama sekali, karena urutan simbol saat membuat hash, seperti disebutkan sebelumnya, tidak diperhitungkan. Jadi, untuk menutupi k kesalahan sepenuhnya, Anda setidaknya perlu mengubah 2k sedikit dalam hash.

Waktu pengoperasian, rata-rata, dengan k kesalahan “tidak lengkap” (penyisipan, penghapusan dan transposisi, serta sebagian kecil penggantian):

Keunikan:
Karena kenyataan bahwa ketika mengganti satu karakter, dua bit dapat berubah sekaligus, suatu algoritma yang mengimplementasikan, misalnya, distorsi tidak lebih dari 2 bit secara bersamaan tidak akan benar-benar memberikan hasil penuh karena tidak adanya signifikansi (tergantung pada rasio ukuran hash terhadap alfabet) bagian kata dengan dua penggantian (dan semakin besar ukuran hash, semakin sering penggantian karakter akan menyebabkan distorsi dua bit sekaligus, dan semakin kurang lengkap hasilnya. ). Selain itu, algoritma ini tidak mengizinkan pencarian awalan.

Pohon BK

Pohon Burkhard-Keller adalah pohon metrik, algoritme untuk membuat pohon tersebut didasarkan pada properti metrik untuk memenuhi pertidaksamaan segitiga:

Properti ini memungkinkan metrik membentuk ruang metrik dengan dimensi arbitrer. Ruang metrik seperti itu belum tentu ada Euclidean, jadi, misalnya, metrik Levenshtein Dan Damerau-Levenshtein membentuk non-Euclidean ruang angkasa. Berdasarkan properti ini, dimungkinkan untuk membangun struktur data yang mencari dalam ruang metrik, yaitu pohon Barkhard-Keller.

Perbaikan:
Anda dapat menggunakan kemampuan beberapa metrik untuk menghitung jarak dengan batasan, menetapkan batas atas sama dengan jumlah jarak maksimum ke anak titik dan jarak yang dihasilkan, yang akan sedikit mempercepat proses:

Pengujian

Pengujian dilakukan pada laptop dengan Intel Inti Duo T2500 (2GHz/667MHz FSB/2MB), RAM 2Gb, OS - Ubuntu 10.10 Desktop i686, JRE - OpenJDK 6 Pembaruan 20.

Pengujian dilakukan dengan menggunakan jarak Damerau-Levenshtein dan jumlah error k = 2. Ukuran indeks ditunjukkan bersama dengan kamus (65 MB).

Ukuran indeks: 65 MB
Waktu pencarian: 320 ms / 330 ms
Kelengkapan hasil : 100%

N-gram (asli)
Ukuran indeks: 170 MB
Waktu pembuatan indeks: 32 detik
Waktu pencarian: 71ms / 110ms
Kelengkapan hasil : 65%
N-gram (modifikasi 1)
Ukuran indeks: 170 MB
Waktu pembuatan indeks: 32 detik
Waktu pencarian: 39ms / 46ms
Kelengkapan hasil: 63%
N-gram (modifikasi 2)
Ukuran indeks: 170 MB
Waktu pembuatan indeks: 32 detik
Waktu pencarian: 37 ms / 45 ms
Kelengkapan hasil: 62%

Ukuran indeks: 85 MB
Waktu pembuatan indeks: 0,6 detik
Waktu pencarian: 55ms
Kelengkapan hasil : 56,5%

Pohon BK
Ukuran indeks: 150 MB
Waktu pembuatan indeks: 120 detik
Waktu pencarian: 540ms
Kelengkapan hasil: 63%

Total

Kebanyakan algoritma pencarian fuzzy yang diindeks tidak benar-benar sublinear (yaitu, memiliki waktu berjalan asimtotik HAI(log n) atau lebih rendah), dan kecepatan pengoperasiannya biasanya bergantung langsung pada N. Namun demikian, berbagai perbaikan dan modifikasi memungkinkan tercapainya waktu pengoperasian yang cukup singkat bahkan dengan kamus dalam jumlah yang sangat besar.

Ada juga banyak metode yang lebih beragam dan tidak efektif, yang antara lain didasarkan pada adaptasi berbagai teknik dan teknik yang telah digunakan di tempat lain ke bidang subjek tertentu. Di antara metode tersebut adalah adaptasi pohon awalan (Trie) untuk masalah pencarian fuzzy, yang saya abaikan karena efisiensinya yang rendah. Namun ada juga algoritma yang didasarkan pada pendekatan asli, misalnya algoritma Maassa-Nowak, yang meskipun memiliki waktu berjalan asimtotik sublinear, sangat tidak efisien karena adanya konstanta besar yang tersembunyi di balik perkiraan waktu tersebut, yang memanifestasikan dirinya dalam bentuk ukuran indeks yang sangat besar.

Penggunaan praktis algoritma pencarian fuzzy secara nyata mesin pencari terkait erat dengan algoritme fonetik, algoritme stemming leksikal - mengisolasi bagian dasar dari berbagai bentuk kata dari kata yang sama (misalnya, Snowball dan Yandex mystem menyediakan fungsi ini), serta memberi peringkat berdasarkan informasi statistik, atau menggunakan metrik canggih yang kompleks .

  • Jarak Levenshtein (dengan opsi cutoff dan awalan);
  • Jarak Damerau-Levenshtein (dengan opsi cutoff dan awalan);
  • Algoritma Bitap (Shift-OR/Shift-AND dengan modifikasi Wu-Manber);
  • Algoritma perluasan pengambilan sampel;
  • Metode N-gram (asli dan dengan modifikasi);
  • Metode hashing tanda tangan;
  • Pohon BK.
Saya ingin membuat kodenya mudah dimengerti, dan pada saat yang sama cukup efisien aplikasi praktis. Bukan tugas saya untuk memeras jus terakhir dari JVM. Menikmati.

Perlu dicatat bahwa dalam proses mempelajari topik ini, saya menemukan beberapa perkembangan saya sendiri yang memungkinkan saya mengurangi waktu pencarian berdasarkan urutan besarnya karena peningkatan moderat dalam ukuran indeks dan beberapa pembatasan kebebasan untuk pilih metrik. Tapi itu cerita yang sama sekali berbeda.

Menggunakan N-gram

Penggunaan umum N-gram

  • mengekstraksi data untuk mengelompokkan serangkaian citra satelit Bumi dari luar angkasa untuk kemudian memutuskan bagian bumi mana yang ada dalam citra tersebut,
  • mencari urutan genetik,
  • di bidang genetika digunakan untuk menentukan sampel DNA spesies hewan tertentu yang dikumpulkan,
  • dalam kompresi komputer,
  • Menggunakan N-gram, data terkait audio biasanya diindeks.

N-gram juga banyak digunakan dalam pemrosesan bahasa alami.

Menggunakan N-Gram untuk Kebutuhan Pemrosesan Bahasa Alami

Di bidang pemrosesan bahasa alami, N-gram digunakan terutama untuk prediksi berdasarkan model probabilistik. Model N-gram menghitung probabilitas munculnya kata terakhir dari N-gram jika semua kata sebelumnya diketahui. Saat menggunakan pendekatan model bahasa ini, diasumsikan bahwa kemunculan setiap kata hanya bergantung pada kata-kata sebelumnya.

Penerapan N-gram lainnya adalah untuk mendeteksi plagiarisme. Jika Anda membagi teks menjadi beberapa fragmen kecil, yang diwakili oleh n-gram, teks tersebut dapat dengan mudah dibandingkan satu sama lain, dan dengan demikian memperoleh tingkat kemiripan dokumen yang dikontrol. N-gram sering kali berhasil digunakan untuk kategorisasi teks dan bahasa. Selain itu, mereka dapat digunakan untuk membuat fungsi yang memungkinkan Anda memperoleh pengetahuan dari data teks. Dengan menggunakan N-gram, Anda dapat secara efisien menemukan kandidat untuk menggantikan kata yang salah eja.

Proyek Penelitian Google

Pusat penelitian Google telah menggunakan model N-gram untuk berbagai penelitian dan pengembangan. Ini termasuk proyek-proyek seperti terjemahan statistik dari satu bahasa ke bahasa lain, pengenalan ucapan, koreksi ejaan, ekstraksi informasi, dan banyak lagi. Untuk keperluan proyek ini, kumpulan teks yang berisi beberapa triliun kata digunakan.

Google memutuskan untuk membuat gedung pendidikannya sendiri. Proyek ini disebut Google teracorpus dan berisi 1.024.908.267.229 kata yang dikumpulkan dari situs publik.

Metode untuk mengekstraksi n-gram

Karena seringnya penggunaan N-gram untuk menyelesaikan berbagai masalah, diperlukan algoritma yang andal dan cepat untuk mengekstraknya dari teks. Alat ekstraksi n-gram yang sesuai harus mampu menangani ukuran teks tak terbatas, cepat, dan memanfaatkan sumber daya yang tersedia secara efisien. Ada beberapa metode untuk mengekstraksi N-gram dari teks. Metode-metode ini didasarkan pada prinsip-prinsip yang berbeda:

Catatan

Lihat juga


Yayasan Wikimedia.

  • 2010.
  • n-tv

N-kaderin

    Lihat apa itu "N-gram" di kamus lain: GRAM - (Tata bahasa Perancis, dari sifat tata bahasa Yunani). Satuan Perancis berat = berat 1 sentimeter kubik air suling = 22,5 Rusia. saham Kamus kata-kata asing yang termasuk dalam bahasa Rusia. Chudinov A.N., 1910. Satuan ukuran berat GRAM di Perancis ...

    Kamus kata-kata asing dari bahasa Rusia gram - gram, gen. hal. gram dan gram yang dapat diterima (dalam pidato lisan setelah angka). Seratus gram (gram). Dalam pertahanan bentuk baru marga. kasus jamak jumlah gram diucapkan oleh pakar bahasa Rusia, penulis K. Chukovsky. Inilah yang dia tulis dalam buku “Alive as Life”: ... ...

    Lihat apa itu "N-gram" di kamus lain:- GRAM, gram, suami. (dari tanda tata bahasa Yunani, huruf). Satuan dasar berat dalam sistem metrik, sama dengan berat 1 sentimeter kubik air. Satu gram beratnya sekitar 1/400 pon. ❖ Gram atom (fisika) jumlah gram suatu zat sama dengan berat atomnya.... ... Kamus Penjelasan Ushakov

    gram-roentgen- gram roentgen/n, gram roentgen/na, gen. hal. gram roentgen dan gram roentgen... Bersama. Terpisah. Ditandai dengan tanda hubung.

    Kamus kata-kata asing dari bahasa Rusia- Gram, kata sederhana ini tidak mungkin dimasukkan dalam kamus kesalahan, jika bukan karena dua keadaan; pertama, jika ingin pamer dengan bahasa yang benar-benar benar, maka ketika Anda datang ke toko, kejutkan penjualnya dengan bahasa yang benar: Timbang saya dua ratus gram (bukan... ... Kamus kesalahan bahasa Rusia

    GRAM-ATOM- ATOM GRAM, banyaknya suatu unsur yang massanya dalam gram sama dengan MASSA ATOMnya. Itu digantikan oleh satuan SI mol. Misalnya, satu gram atom hidrogen (H, massa atom = 1) sama dengan satu gram. b>SETARA GRAM, berat dalam gram itu... ... Kamus ensiklopedis ilmiah dan teknis

    Lihat apa itu "N-gram" di kamus lain:- GRAM, ah, baiklah. hal. gram dan gram, suami. Satuan massa dalam sistem desimal, seperseribu kilogram. Bukan satu gram (tidak) apa pun (bahasa sehari-hari) tidak sama sekali, tidak sama sekali. Orang ini (tidak) mempunyai hati nurani sedikitpun. | adj. gram, oh, oh. Cerdas... ... Kamus Penjelasan Ozhegov

    Kamus kata-kata asing dari bahasa Rusia- A; hal. marga. gram dan gram; m.[Perancis] gramme] Satuan massa dalam sistem metrik, seperseribu kilogram. ◊ Bukan satu gram pun. Tidak sama sekali, tidak sama sekali. Di siapa l. tidak satu ons pun kebohongan. Tidak ada seorang pun yang memiliki hati nurani sedikit pun. * * * gram (Perancis ... Kamus Ensiklopedis

    Gram Zenob Theophile- (Gramme) (1826 1901), insinyur listrik. Lahir di Belgia, bekerja di Perancis. Menerima paten untuk generator listrik yang dapat digunakan secara praktis dengan jangkar cincin (1869). Mendirikan produksi industri mesin listrik. * * * GRAM Zenob... ... Kamus Ensiklopedis

    gram-atom- jumlah suatu zat dalam gram, yang secara numerik sama dengan massa atomnya. Istilah ini tidak disarankan untuk digunakan. Dalam SI, jumlah suatu zat dinyatakan dalam mol. * * * GRAM ATOM GRAM ATOM, jumlah suatu zat dalam gram, secara numerik sama dengan massa atomnya (cm ... Kamus Ensiklopedis

    molekul gram- jumlah suatu zat dalam gram, yang secara numerik sama dengan berat molekulnya. Istilah ini tidak disarankan untuk digunakan. Dalam SI, jumlah suatu zat dinyatakan dalam mol. * * * GRAM MOLECULE GRAM MOLECULE, jumlah suatu zat dalam gram, yang secara numerik sama dengan... ... Kamus Ensiklopedis

,

Dipertimbangkan N-gram sebagai sarana untuk memperbaiki realitas linguistik dan sebagai konstruksi model. Hubungan antar model N-gram dan tata bahasa formal. Perhatian tertuju pada kekurangan dan kontradiksi yang terkait dengan penggunaan model probabilistik.

Perkenalan

Mari kita mulai dengan definisi formal. Biarkan beberapa alfabet terbatas diberikan VT={wi), Di mana wi– simbol terpisah. Satu set rantai (string) dengan panjang terbatas yang terdiri dari karakter alfabet VT, disebut bahasa dalam alfabet VT dan ditunjuk aku(VT). Rantai lidah yang terpisah aku(VT) kami akan menyebutnya pernyataan dalam bahasa ini. Pada gilirannya, N-gram dalam alfabet VT disebut panjang rantai N. N-gram dapat bertepatan dengan suatu pernyataan, menjadi substringnya, atau tidak disertakan dalam pernyataan sama sekali aku(VT).

Berikut beberapa contohnya N-gram.

3. , N-gram bahasa Rusia. // Koleksi ini.

4. Glanz S. Statistik medis dan biologis. Per. dari bahasa Inggris diedit oleh Dan. M., 1999.

5. Linguistik deskriptif. Kata Pengantar untuk buku G. Gleason "Pengantar Linguistik Deskriptif". M., 1959.

6. Linguistik teoretis dan terapan. M., 1968.

8. , Menjeda selama sintesis ucapan otomatis. // Teori dan praktik penelitian wicara. M.1999.

9. Minsky M. Kecerdasan dan logika ketidaksadaran kognitif. // Baru dalam linguistik asing. Jil. XXIII. M., 1988.

10. Slobin D., Hijau J. Psikolinguistik. M., 1976

11. Teori probabilitas. M., 1972.

12. Fu K. Metode struktural dalam pengenalan pola. M., 1977.

13. Haris T. Teori percabangan proses acak. M., 1966.

14. Brill E. dkk. Di luar N-gram: Bisakah kecanggihan linguistik meningkatkan pemodelan bahasa?

15. stan T. Representasi Probabilitas Bahasa Formal. // Simpel Tahunan IEEE. Teori Switching dan Automata. 1969.

16. Jelinek F.Sejarah pertemuanJelinek F. Pemodelan Bahasa Terorganisir Sendiri untuk Pengenalan Ucapan. // Bacaan dalam Pengenalan Ucapan. 1989.

17. Yagaris F., Lafferty J. Perhitungan probabilitas pembuatan substring awal dengan tata bahasa bebas konteks stokastik. // Linguistik Komputasi, vol.

18. Harris Z.S. Metode dalam Linguistik Struktural. Chicago, 1951.

19. Lashley K. Masalah urutan serial dalam perilaku. // Psikolinguistik: Buku bacaan, N. Y. 1961.

20. Schlesinger E.Sejarah pertemuanSchlesinger E. Struktur Kalimat dan Proses Membaca. Mouton. 1968.

21. Shieber S. Bukti yang menentang kebebasan konteks bahasa alami. // Linguistik dan Filsafat, vol.

22. Kolam Sola I. Tren Analisis Konten Saat Ini. // Psikolinguistik: Buku bacaan, N. Y. 1961

23. Stolcke A., Segal J. Probabilitas n-gram yang tepat dari tata bahasa bebas konteks stokastik. // Prosiding Pertemuan Tahunan ACL ke-32. 1994.