ML Kit'in GenAI Proofreading API'si ile kullanıcıların kısa metinlerde dil bilgisi ve yazım denetimi yapmasına yardımcı olabilirsiniz.
Temel özellikler
- Klavyeyle veya sesle girilen metinleri düzeltme
- İstekler en az bir öneri döndürür. Birden fazla öneri döndürülürse sonuçlar güven düzeyine göre azalan sırada sıralanır.
Örnek sonuçlar
Giriş |
Giriş Türü |
Çıkış |
this is a short msg |
Klavye |
Bu kısa bir mesajdır |
Proje neredeyse tamamlandı ancak incelenmesi gerekiyor |
Klavye |
Proje neredeyse tamamlandı ancak incelenmesi gerekiyor |
Lütfen ayının yanında buluşalım. |
Ses |
Lütfen barda buluşalım. |
Başlarken
Üretken Yapay Zeka ile Metin Düzeltme API'sini kullanmaya başlamak için bu bağımlılığı projenizin derleme dosyasına ekleyin.
implementation("com.google.mlkit:genai-proofreading:1.0.0-beta1")
Ardından, belirli dil ve giriş türü ayarlarıyla bir Proofreader
istemcisini yapılandırıp edinin. Gerekli cihaz üzerinde model özelliklerinin mevcut olup olmadığını kontrol edin ve mevcut olduğundan emin olun (gerekirse indirme işlemini başlatın). Analiz etmek istediğiniz metni ProofreadingRequest
içinde gönderin, yazım denetimi çıkarımını çalıştırın ve son olarak metni düzeltmek için döndürülen önerileri işleyin.
Kotlin
val textToProofread = "The praject is compleet but needs too be reviewd"
// Define task with required input and output format
val options = ProofreaderOptions.builder(context)
// InputType can be KEYBOARD or VOICE. VOICE indicates that
// the user generated text based on audio input.
.setInputType(ProofreaderOptions.InputType.KEYBOARD)
// Refer to ProofreaderOptions.Language for available
// languages
.setLanguage(ProofreaderOptions.Language.ENGLISH)
.build()
val proofreader = Proofreading.getClient(options)
suspend fun prepareAndStartProofread() {
// Check feature availability, status will be one of the
// following: UNAVAILABLE, DOWNLOADABLE, DOWNLOADING, AVAILABLE
val featureStatus = proofreader.checkFeatureStatus().await()
if (featureStatus == FeatureStatus.DOWNLOADABLE) {
// Download feature if necessary.
// If downloadFeature is not called, the first inference
// request will also trigger the feature to be downloaded
// if it's not already downloaded.
proofreader.downloadFeature(object : DownloadCallback {
override fun onDownloadStarted(bytesToDownload: Long) { }
override fun onDownloadFailed(e: GenAiException) { }
override fun onDownloadProgress(
totalBytesDownloaded: Long
) {}
override fun onDownloadCompleted() {
startProofreadingRequest(textToProofread, proofreader)
}
})
} else if (featureStatus == FeatureStatus.DOWNLOADING) {
// Inference request will automatically run once feature is
// downloaded.
// If Gemini Nano is already downloaded on the device, the
// feature-specific LoRA adapter model will be downloaded
// very quickly. However, if Gemini Nano is not already
// downloaded, the download process may take longer.
startProofreadingRequest(textToProofread, proofreader)
} else if (featureStatus == FeatureStatus.AVAILABLE) {
startProofreadingRequest(textToProofread, proofreader)
}
}
suspend fun startProofreadingRequest(
text: String, proofreader: Proofreader
) {
// Create task request
val proofreadingRequest =
ProofreadingRequest.builder(text).build()
// Start proofreading request with non-streaming response
// More than 1 result may be returned. If multiple suggestions
// are returned, results will be sorted by descending confidence.
val proofreadingResults =
proofreader.runInference(proofreadingRequest).await().results
// You can also start a streaming request
// proofreader.runInference(proofreadingRequest) { newText ->
// // show new text in UI
// }
}
// Be sure to release the resource when no longer needed
// For example, on viewModel.onCleared() or activity.onDestroy()
proofreader.close()
Java
String textToProofread = "The praject is compleet but needs too be reviewd";
// Define task with required input and output format
ProofreaderOptions proofreaderOptions =
ProofreaderOptions
.builder(context)
// InputType can be KEYBOARD or VOICE. VOICE indicates that the
// user generated text based on audio input.
.setInputType(ProofreaderOptions.InputType.KEYBOARD)
// Refer to ProofreaderOptions.Language for available languages
.setLanguage(ProofreaderOptions.Language.ENGLISH)
.build();
Proofreader proofreader = Proofreading.getClient(proofreaderOptions);
void prepareAndStartProofread(Context context) throws ExecutionException,
InterruptedException {
// Check feature availability, status will be one of the following:
// UNAVAILABLE, DOWNLOADABLE, DOWNLOADING, AVAILABLE
try {
int featureStatus = proofreader.checkFeatureStatus().get();
if (featureStatus == FeatureStatus.DOWNLOADABLE) {
// Download feature if necessary.
// If downloadFeature is not called, the first inference request
// will also trigger the feature to be downloaded if it's not
// already downloaded.
proofreader.downloadFeature(new DownloadCallback() {
@Override
public void onDownloadCompleted() {
startProofreadingRequest(textToProofread, proofreader);
}
@Override
public void onDownloadFailed(GenAiException e) {
}
@Override
public void onDownloadProgress(long totalBytesDownloaded) {
}
@Override
public void onDownloadStarted(long bytesDownloaded) {
}
});
} else if (featureStatus == FeatureStatus.DOWNLOADING) {
// Inference request will automatically run once feature is
// downloaded.
// If Gemini Nano is already downloaded on the device, the
// feature-specific LoRA adapter model will be downloaded
// very quickly. However, if Gemini Nano is not already
// downloaded, the download process may take longer.
startProofreadingRequest(textToProofread, proofreader);
} else if (featureStatus == FeatureStatus.AVAILABLE) {
startProofreadingRequest(textToProofread, proofreader);
}
} catch (ExecutionException | InterruptedException e) {
e.printStackTrace();
}
}
void startProofreadingRequest(String text, Proofreader proofreader) {
// Create task request
ProofreadingRequest proofreadingRequest = ProofreadingRequest
.builder(text).build();
try {
// Start proofreading request with non-streaming response
// More than 1 result may be returned. If multiple suggestions are
// returned, results will be sorted by descending confidence.
proofreader.runInference(proofreadingRequest).get().getResults();
// You can also start a streaming request
// proofreader.runInference(proofreadingRequest, newText -> {
// // Show new text in UI
// });
} catch (ExecutionException | InterruptedException e) {
e.printStackTrace();
}
}
// Be sure to release the resource when no longer needed
// For example, on viewModel.onCleared() or activity.onDestroy()
proofreader.close();
Modelin farklı giriş türlerini nasıl işlediği
Model, kullanıcının metni nasıl girdiğine (klavye veya ses) dair daha fazla bilgiye sahip olduğunda olabilecek hata türlerini daha iyi tahmin edebilir. Klavyeyle girilen metinlerde yakındaki tuşlara basılarak yazım hatası yapılması daha olasıdır. Sesle girilen metinlerde ise aynı telaffuza sahip kelimelerin yazım hatası yapılması daha olasıdır.
Desteklenen özellikler ve sınırlamalar
Yazım denetimi şu dillerde desteklenir: İngilizce, Japonca, Fransızca, Almanca, İtalyanca, İspanyolca ve Korece. Bu diller ProofreaderOptions.Language
içinde tanımlanmıştır. Giriş 256 jetondan kısa olmalıdır.
Belirli özellik yapılandırmasının (ProofreaderOptions
ile belirtilir) kullanılabilirliği, cihazın yapılandırmasına ve cihaza indirilen modellere bağlı olarak değişebilir.
Geliştiricilerin, amaçlanan API özelliğinin istenen ProofreaderOptions
ile bir cihazda desteklendiğinden emin olmasının en güvenilir yolu checkFeatureStatus()
yöntemini çağırmaktır. Bu yöntem, çalışma zamanında cihazdaki özellik kullanılabilirliğiyle ilgili kesin durumu sağlar.
Sık karşılaşılan kurulum sorunları
ML Kit üretken yapay zeka API'leri, Gemini Nano'ya erişmek için Android AICore uygulamasına bağlıdır. Bir cihaz yeni kurulduğunda (sıfırlama dahil) veya AICore uygulaması yeni sıfırlandığında (ör. veriler temizlendiğinde, uygulama kaldırılıp yeniden yüklendiğinde) AICore uygulaması başlatma işlemini (sunucudan en son yapılandırmaları indirme dahil) tamamlamak için yeterli zamana sahip olmayabilir. Bu nedenle, ML Kit GenAI API'leri beklendiği gibi çalışmayabilir. Karşılaşabileceğiniz yaygın kurulum hata mesajları ve bunların nasıl ele alınacağı aşağıda açıklanmıştır:
Örnek hata mesajı | Ne yapmalı? |
AICore, 4-CONNECTION_ERROR hata türü ve 601-BINDING_FAILURE hata koduyla başarısız oldu: AICore hizmeti bağlanamadı. | Bu durum, cihaz kurulumundan hemen sonra ML Kit GenAI API'lerini kullanarak uygulamayı yüklediğinizde veya uygulamanız yüklendikten sonra AICore kaldırıldığında ortaya çıkabilir. AICore uygulamasını güncelleyip uygulamanızı yeniden yüklediğinizde sorun düzelir. |
AICore, 3-PREPARATION_ERROR hata türü ve 606-FEATURE_NOT_FOUND hata koduyla başarısız oldu: Özellik ... kullanılamıyor. |
Bu durum, AICore en son yapılandırmaları indirmeyi tamamlamadığında meydana gelebilir. Cihaz internete bağlandığında güncelleme işlemi genellikle birkaç dakika ile birkaç saat arasında sürer. Cihazı yeniden başlatmak güncellemeyi hızlandırabilir.
Cihazın önyükleyicisi kilidi açılmışsa bu hatayı da görürsünüz. Bu API, önyükleyicisi kilidi açılmış cihazları desteklemez. |
AICore, 1-DOWNLOAD_ERROR hata türü ve 0-UNKNOWN hata koduyla başarısız oldu: Feature ... failed with failure status 0 and error esz: UNAVAILABLE: Unable to resolve host ... | Ağ bağlantısını koruyun, birkaç dakika bekleyin ve tekrar deneyin. |