ML Kit के GenAI Proofreading API की मदद से, उपयोगकर्ताओं को छोटे टेक्स्ट में व्याकरण और स्पेलिंग की जांच करने में मदद की जा सकती है.
मुख्य सुविधाएं
- कीबोर्ड या आवाज़ से डाले गए टेक्स्ट की स्पेलिंग और व्याकरण की जांच करना
- अनुरोधों के जवाब में कम से कम एक सुझाव मिलेगा. अगर एक से ज़्यादा सुझाव मिलते हैं, तो नतीजों को भरोसेमंद होने के क्रम में लगाया जाएगा.
परिणामों के उदाहरण
इनपुट |
इनपुट टाइप |
आउटपुट |
यह एक छोटा मैसेज है |
कीबोर्ड |
यह एक छोटा मैसेज है |
प्रोजेक्ट लगभग पूरा हो गया है, लेकिन इसकी समीक्षा की जानी बाकी है |
कीबोर्ड |
प्रोजेक्ट लगभग पूरा हो गया है, लेकिन इसकी समीक्षा होनी बाकी है |
कृपया भालू के पास मुझसे मिलो, |
Google Voice |
कृपया बार में आकर मुझसे मिलें. |
शुरू करें
GenAI Proofreading API का इस्तेमाल शुरू करने के लिए, इस डिपेंडेंसी को अपने प्रोजेक्ट की बिल्ड फ़ाइल में जोड़ें.
implementation("com.google.mlkit:genai-proofreading:1.0.0-beta1")
इसके बाद, भाषा और इनपुट टाइप की सेटिंग के साथ Proofreader
क्लाइंट को कॉन्फ़िगर करें और उसे पाएं. यह देखें कि डिवाइस पर मौजूद मॉडल की ज़रूरी सुविधाएं उपलब्ध हैं या नहीं. अगर ज़रूरी हो, तो उन्हें डाउनलोड करें. आपको जिस टेक्स्ट का विश्लेषण करना है उसे ProofreadingRequest
में सबमिट करें. इसके बाद, स्पेलिंग और व्याकरण की जांच करने वाली सुविधा का इस्तेमाल करें. आखिर में, टेक्स्ट को ठीक करने के लिए मिले सुझावों को प्रोसेस करें.
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();
मॉडल, अलग-अलग तरह के इनपुट को कैसे हैंडल करता है
जब मॉडल के पास यह जानकारी होती है कि उपयोगकर्ता ने टेक्स्ट कैसे डाला है (कीबोर्ड या आवाज़ से), तो वह बेहतर तरीके से यह अनुमान लगा सकता है कि किस तरह की गड़बड़ियां हो सकती हैं. कीबोर्ड से टाइप किए गए टेक्स्ट में, आस-पास की कुंजियों के इस्तेमाल की वजह से स्पेलिंग गलत होने की संभावना ज़्यादा होती है. वहीं, आवाज़ से टाइप किए गए टेक्स्ट में, एक जैसी आवाज़ वाले शब्दों की स्पेलिंग गलत होने की संभावना ज़्यादा होती है.
इस्तेमाल की जा सकने वाली सुविधाएं और सीमाएं
प्रूफ़रीडिंग की सुविधा इन भाषाओं में उपलब्ध है: अंग्रेज़ी, जैपनीज़, फ़्रेंच, जर्मन, इटैलियन, स्पैनिश, और कोरियन. इनके बारे में ProofreaderOptions.Language
में बताया गया है. इनपुट में 256 से कम टोकन होने चाहिए.
ProofreaderOptions
के ज़रिए तय की गई किसी सुविधा के कॉन्फ़िगरेशन की उपलब्धता, डिवाइस के कॉन्फ़िगरेशन और डिवाइस पर डाउनलोड किए गए मॉडल के हिसाब से अलग-अलग हो सकती है.
डेवलपर के लिए, यह पक्का करने का सबसे भरोसेमंद तरीका है कि एपीआई की सुविधा, अनुरोध किए गए ProofreaderOptions
वाले डिवाइस पर काम करती है या नहीं. इसके लिए, checkFeatureStatus()
तरीके का इस्तेमाल करें. इस तरीके से, डिवाइस पर सुविधा की उपलब्धता की स्थिति के बारे में रनटाइम में पता चलता है.
सेटअप से जुड़ी सामान्य समस्याएं
ML Kit GenAI API, Gemini Nano को ऐक्सेस करने के लिए Android AICore ऐप्लिकेशन पर निर्भर करते हैं. जब किसी डिवाइस को सेट अप किया जाता है (रीसेट करने के बाद भी), तो AICore ऐप्लिकेशन को शुरू होने में समय लग सकता है. ऐसा तब भी हो सकता है, जब AICore ऐप्लिकेशन को रीसेट किया गया हो. जैसे, डेटा मिटाना, अनइंस्टॉल करना, और फिर से इंस्टॉल करना. इस वजह से, AICore ऐप्लिकेशन को शुरू होने में समय लग सकता है. इसमें सर्वर से नए कॉन्फ़िगरेशन डाउनलोड करना भी शामिल है. इस वजह से, ऐसा हो सकता है कि ML Kit GenAI API ठीक से काम न करें. यहां सेटअप से जुड़ी कुछ सामान्य गड़बड़ियों के मैसेज दिए गए हैं. साथ ही, उन्हें ठीक करने का तरीका भी बताया गया है:
गड़बड़ी के मैसेज का उदाहरण | इसे कैसे मैनेज करें |
AICore में गड़बड़ी हुई है. गड़बड़ी का टाइप 4-CONNECTION_ERROR है और गड़बड़ी का कोड 601-BINDING_FAILURE है: AICore सेवा बाइंड नहीं हो सकी. | ऐसा तब हो सकता है, जब डिवाइस सेटअप करने के तुरंत बाद, ML Kit GenAI API का इस्तेमाल करके ऐप्लिकेशन इंस्टॉल किया गया हो. इसके अलावा, ऐसा तब भी हो सकता है, जब ऐप्लिकेशन इंस्टॉल करने के बाद AICore को अनइंस्टॉल कर दिया गया हो. AICore ऐप्लिकेशन को अपडेट करने के बाद, अपने ऐप्लिकेशन को फिर से इंस्टॉल करने से यह समस्या ठीक हो जाएगी. |
AICore में गड़बड़ी हुई है. गड़बड़ी का टाइप 3-PREPARATION_ERROR है और गड़बड़ी का कोड 606-FEATURE_NOT_FOUND है: सुविधा ... उपलब्ध नहीं है. |
ऐसा तब हो सकता है, जब AICore ने नए कॉन्फ़िगरेशन डाउनलोड न किए हों. डिवाइस के इंटरनेट से कनेक्ट होने पर, अपडेट होने में कुछ मिनट से लेकर कुछ घंटे तक लग सकते हैं. डिवाइस को रीस्टार्ट करने से, अपडेट की प्रोसेस तेज़ हो सकती है.
ध्यान दें कि अगर डिवाइस का बूटलोडर अनलॉक है, तो आपको यह गड़बड़ी दिखेगी. यह एपीआई, अनलॉक किए गए बूटलोडर वाले डिवाइसों के साथ काम नहीं करता. |
AICore में गड़बड़ी हुई है. गड़बड़ी का टाइप 1-DOWNLOAD_ERROR है और गड़बड़ी का कोड 0-UNKNOWN है: सुविधा ... में गड़बड़ी हुई है. गड़बड़ी की स्थिति 0 है और गड़बड़ी esz: UNAVAILABLE है: होस्ट ... को हल नहीं किया जा सका | इंटरनेट कनेक्शन चालू रखें. कुछ मिनट इंतज़ार करें और फिर से कोशिश करें. |