predict4all adalah perpustakaan prediksi kata berikutnya yang akurat, cepat, ringan, multibahasa, gratis, dan bersumber terbuka .
Ini bertujuan untuk diintegrasikan dalam aplikasi untuk menampilkan kemungkinan kata berikutnya dan membantu input pengguna: keyboard virtual, editor teks, sistem AAC...
predict4all orisinalitas berdiri dalam model koreksinya : ia bekerja berkat serangkaian aturan koreksi (umum atau khusus : aksen, tata bahasa, spasi yang hilang, dll). Model koreksi ini memungkinkan koreksi terjadi lebih awal dalam prediksi dibandingkan dengan teknik jarak string. Hal ini juga memungkinkan koreksi serupa dengan korektor yang ada (misalnya GBoard) tetapi dapat ditingkatkan dengan aturan khusus berdasarkan kesalahan pengguna (disortografi, disleksia, dll)
predict4all dirancang bersama dengan terapis wicara dan terapis okupasi dari CMRRF Kerpape dan Hopital Raymond Poincaré untuk memastikan bahwa ini sesuai dengan kebutuhan dan persyaratan pengguna dengan masalah bicara dan penulisan teks. Perhatian khusus diberikan untuk menentukan kesalahan umum dan khusus yang dilakukan oleh penderita disortografi dan disleksia.
Saat ini, predict4all mendukung bahasa Prancis (menyediakan aturan dan model bahasa yang telah dilatih sebelumnya).
Perpustakaan ini dikembangkan dalam proyek kolaboratif predict4all yang melibatkan CMRRF Kerpape, Hopital Raymond Poincaré dan Tim BdTln, LIFAT, Université de Tours
predict4all didukung oleh Fondation Paul Bennetot, Fondation du Groupe Matmut di bawah Fondation de l'Avenir, Paris, Prancis ( proyek AP-FPB 16-001 )
Proyek ini telah terintegrasi dalam perangkat lunak AAC berikut: LifeCompanion, Sibylle, CiviKey
Proyek ini masih dikembangkan dalam proyek AAC4ALL.
Latih (lihat "Melatih model bahasa Anda sendiri") atau unduh model bahasa. Tersedia model bahasa Prancis yang telah dihitung sebelumnya:
Model bahasa Perancis telah dilatih pada lebih dari +20 juta kata dari Wikipedia dan korpus subtitle. Kosakata berisi ~112.000 kata unik.
Dapatkan perpustakaan melalui manajer ketergantungan favorit Anda :
Maven
< dependency >
< groupId >io.github.mthebaud</ groupId >
< artifactId > predict4all </ artifactId >
< version >1.2.0</ version >
</ dependency >
Gradle
implementation 'io.github.mthebaud: predict4all :1.2.0'
Dalam contoh berikut, kami berasumsi bahwa Anda menginisialisasi model bahasa, prediktor, dll.
final File FILE_NGRAMS = new File ( "fr_ngrams.bin" );
final File FILE_WORDS = new File ( "fr_words.bin" );
LanguageModel languageModel = new FrenchLanguageModel ();
PredictionParameter predictionParameter = new PredictionParameter ( languageModel );
WordDictionary dictionary = WordDictionary . loadDictionary ( languageModel , FILE_WORDS );
try ( StaticNGramTrieDictionary ngramDictionary = StaticNGramTrieDictionary . open ( FILE_NGRAMS )) {
WordPredictor wordPredictor = new WordPredictor ( predictionParameter , dictionary , ngramDictionary );
// EXAMPLE CODE SHOULD RUN HERE
}
Anda dapat menemukan kode kerja lengkap untuk contoh-contoh ini dan yang lebih kompleks di predict4all -contoh
Silakan baca Javadoc (kelas publik didokumentasikan dengan baik)
WordPredictionResult predictionResult = wordPredictor . predict ( "j'aime manger des " );
for ( WordPrediction prediction : predictionResult . getPredictions ()) {
System . out . println ( prediction );
}
Hasil (model bahasa Perancis)
trucs = 0.16105959785338766 (insert = trucs, remove = 0, space = true)
fruits = 0.16093509126844632 (insert = fruits, remove = 0, space = true)
bonbons = 0.11072838908013616 (insert = bonbons, remove = 0, space = true)
gâteaux = 0.1107102433239866 (insert = gâteaux, remove = 0, space = true)
frites = 0.1107077522148962 (insert = frites, remove = 0, space = true)
WordPredictionResult predictionResult = wordPredictor . predict ( "je te r" );
for ( WordPrediction prediction : predictionResult . getPredictions ()) {
System . out . println ( prediction );
}
Hasil (model bahasa Perancis)
rappelle = 0.25714609184509885 (insert = appelle, remove = 0, space = true)
remercie = 0.12539880967030353 (insert = emercie, remove = 0, space = true)
ramène = 0.09357117922321868 (insert = amène, remove = 0, space = true)
retrouve = 0.07317575867400958 (insert = etrouve, remove = 0, space = true)
rejoins = 0.06404375655722373 (insert = ejoins, remove = 0, space = true)
Untuk menyempurnakan WordPredictor, Anda dapat menjelajahi javadoc PredictionParameter
CorrectionRuleNode root = new CorrectionRuleNode ( CorrectionRuleNodeType . NODE );
root . addChild ( FrenchDefaultCorrectionRuleGenerator . CorrectionRuleType . ACCENTS . generateNodeFor ( predictionParameter ));
predictionParameter . setCorrectionRulesRoot ( root );
predictionParameter . setEnableWordCorrection ( true );
WordPredictor wordPredictor = new WordPredictor ( predictionParameter , dictionary , ngramDictionary );
WordPredictionResult predictionResult = wordPredictor . predict ( "il eta" );
for ( WordPrediction prediction : predictionResult . getPredictions ()) {
System . out . println ( prediction );
}
Hasil (model bahasa Perancis)
était = 0.9485814446960688 (insert = était, remove = 3, space = true)
établit = 0.05138460933797299 (insert = établit, remove = 3, space = true)
étale = 7.544080911878824E-6 (insert = étale, remove = 3, space = true)
établissait = 4.03283914323952E-6 (insert = établissait, remove = 3, space = true)
étaye = 4.025324786425216E-6 (insert = étaye, remove = 3, space = true)
Dalam contoh ini, hapus menjadi positif karena huruf pertama pada kata tersebut salah : teks yang diketik sebelumnya harus dihapus sebelum disisipkan.
DynamicNGramDictionary dynamicNGramDictionary = new DynamicNGramDictionary ( 4 );
predictionParameter . setDynamicModelEnabled ( true );
WordPredictor wordPredictor = new WordPredictor ( predictionParameter , dictionary , ngramDictionary , dynamicNGramDictionary );
WordPredictionResult predictionResult = wordPredictor . predict ( "je vais à la " );
for ( WordPrediction prediction : predictionResult . getPredictions ()) {
System . out . println ( prediction );
}
wordPredictor . trainDynamicModel ( "je vais à la gare" );
predictionResult = wordPredictor . predict ( "je vais à la " );
for ( WordPrediction prediction : predictionResult . getPredictions ()) {
System . out . println ( prediction );
}
Hasil (model bahasa Perancis)
fête = 0.3670450710570904 (insert = fête, remove = 0, space = true)
bibliothèque = 0.22412342109445696 (insert = bibliothèque, remove = 0, space = true)
salle = 0.22398910838330122 (insert = salle, remove = 0, space = true)
fin = 0.014600071765987328 (insert = fin, remove = 0, space = true)
suite = 0.014315510457449597 (insert = suite, remove = 0, space = true)
- After training
fête = 0.35000112941797795 (insert = fête, remove = 0, space = true)
bibliothèque = 0.2137161256141207 (insert = bibliothèque, remove = 0, space = true)
salle = 0.213588049788271 (insert = salle, remove = 0, space = true)
gare = 0.045754860284824 (insert = gare, remove = 0, space = true)
fin = 0.013922109328323544 (insert = fin, remove = 0, space = true)
Dalam contoh ini, kata "gare" muncul setelah melatih model dengan "je vais à la gare".
Hati-hati , melatih model dengan kalimat yang salah akan merusak data Anda.
Saat menggunakan model dinamis, Anda harus berhati-hati dalam menyimpan/memuat dua file berbeda: ngram pengguna dan kamus kata pengguna.
File asli tidak akan diubah, untuk dibagikan ke pengguna yang berbeda : pola implementasi yang baik.
Setelah model Anda dilatih, Anda mungkin ingin menyimpannya :
dynamicNGramDictionary . saveDictionary ( new File ( "fr_user_ngrams.bin" ));
dan kemudian memuatnya lagi (dan meneruskannya ke konstruktor WordPredictor)
DynamicNGramDictionary dynamicNGramDictionary = DynamicNGramDictionary . load ( new File ( "fr_user_ngrams.bin" ));
Anda juga dapat menyimpan kamus kata jika kata-kata baru telah ditambahkan:
dictionary . saveUserDictionary ( new File ( "fr_user_words.bin" ));
dan kemudian memuatnya lagi (pada instance WordDictionary yang sudah ada)
dictionary . loadUserDictionary ( new File ( "fr_user_words.bin" ));
Terkadang berguna untuk memodifikasi kosakata yang tersedia untuk menyesuaikan prediksi dengan lebih baik bagi pengguna.
Ini dapat dilakukan dengan menggunakan WordDictionary, misalnya, Anda dapat menonaktifkan Word :
Word maisonWord = dictionary . getWord ( "maison" );
maisonWord . setForceInvalid ( true , true );
Atau Anda dapat menunjukkan kepada pengguna setiap kata khusus yang ditambahkan ke kamus:
dictionary . getAllWords (). stream ()
. filter ( w -> w . isValidToBePredicted ( predictionParameter )) // don't want to display to the user the word that would never appears in prediction
. filter ( Word :: isUserWord ) // get only the user added words
. forEach ( w -> System . out . println ( w . getWord ()));
Ketika Anda memodifikasi kata-kata (asli atau ditambahkan oleh pengguna), jangan lupa untuk menyimpan kamus pengguna: ini akan menyimpan kata-kata pengguna tetapi juga modifikasi kata-kata asli.
Anda dapat menemukan informasi lebih lanjut dengan melihat Word javadoc
Saat predict4all , Anda harus memperhatikan bahwa:
Untuk melatih model bahasa Anda sendiri, pertama-tama Anda perlu mempersiapkan :
CPU yang baik juga merupakan poin penting : predict4all sangat menggunakan algoritma multi-thread, jadi semakin banyak inti yang Anda dapatkan, semakin cepat pelatihannya
Kemudian, Anda dapat menjalankan jar yang dapat dieksekusi (tersedia versi yang telah dikompilasi) dengan baris perintah:
java -Xmx16G -jar predict4all -model-trainer-cmd-1.1.0-all.jar -config fr_training_configuration.json -language fr -ngram-dictionary fr_ngrams.bin -word-dictionary fr_words.bin path/to/corpus
Perintah ini akan meluncurkan pelatihan, memungkinkan JVM mendapatkan memori 16 GB, dan memberikan konfigurasi input dan output.
File data yang dihasilkan adalah fr_ngrams.bin dan fr_words.bin
Alternatifnya, Anda dapat memeriksa LanguageDataModelTrainer predict4all -model-trainer-cmd untuk meluncurkan pelatihan Anda secara terprogram.
Harap beri tahu kami jika Anda predict4all !
Jangan ragu untuk mengisi masalah jika Anda memerlukan bantuan atau jika Anda menemukan bug.
Perangkat lunak ini didistribusikan di bawah Lisensi Apache 2.0 (lihat file LISENSI)
Proyek ini mengembangkan berbagai teknik NLP (terutama berbasis ngram)
predict4all dibuat menggunakan tindakan Github untuk menerbitkan versi baru di Maven Central
Untuk membuat versi
Dokumen referensi tentang penerbitan