Text Embedding ile Benzer Kelime ve Cümleleri Bulma — HMS ML Kit

ibrahimertanylmz
Huawei Developers - Türkiye
3 min readSep 12, 2023
Pixel Searching GIF By BigBrains

Giriş

Selamlarr 👋

Huawei ML Kit NLP(Doğal Dil İşleme)’nin Text Embedding servisi Çince ve İngilizce kelime ve cümleleri eşleşen vektör değerlerini döndürüp sorgu sonucuna göre kullanmanızı sağlar. Bu makalede bu servisi bir demo uygulama üzerinde text similarity, sentence similarity ve benzer kelimeleri sorgulama özelliklerini kullanıp çıktıları örneklerle birlikte kontrol edeceğiz.

Hazırlık Adımları

İlk olarak Android Stüdyo ile projenizi oluşturun.

Daha sonra “Preparations for Integrating HUAWEI HMS Core” kısmından adımları takip edip AppGallery Connect üzerinden Huawei ML Kit servisini aktifleştirin.

Geliştirme ortamınını ve sürecini buradan takip edebilirsiniz. Entegrasyon süreci tamamlandığında Text Embedding’ in word ve sentence similarity özelliklerini kullanmaya başlayabiliriz.

AGC ve Text Embedding için bağımlılıkları build.gradle dosyasına ekleyin.

// Text Embedding - ML Kit
implementation 'com.huawei.hms:ml-nlp-textembedding:3.11.0.302'
// Huawei AGC
implementation 'com.huawei.agconnect:agconnect-core:1.7.0.300'

Gerekli izinleri AndroidManifest.xml dosyasına eklemeyi unutmayın.

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

Geliştirme Süreci

Artık geliştirme sürecine Text Embedding servislerini kullanarak başlayabiliriz.

İlk olarak user region (kullanıcı bölgesi) ayarlanmalıdır.

MLApplication.getInstance().setUserRegion(MLApplication.REGION_DR_CHINA);

Daha sonra API key’ini aşağıdaki gibi atayın.

MLApplication.getInstance().apiKey = "YOUR_API_KEY_HERE"

Sonra ayarlarıyla birlikte bir Text Embedding Analyzer oluşturun.

val setting =
MLTextEmbeddingSetting.Factory() // Set languages that can be recognized. Currently, English (MLTextEmbeddingSetting.LANGUAGE_EN) and Simplified Chinese (MLTextEmbeddingSetting.LANGUAGE_ZH) are supported.
.setLanguage(MLTextEmbeddingSetting.LANGUAGE_EN)
.create()
val analyzer =
MLTextEmbeddingAnalyzerFactory.getInstance().getMLTextEmbeddingAnalyzer(setting)

ML Kit’in Text Embedding özelliği sayesinde artık word ve sentence similarity ile kelime ve cümle benzerliklerini bulabiliriz.

val wordsSimilarityTask = analyzer.analyseWordsSimilarity(
input1,
input2
) // input1 and input2 refer to the input text information of the String type.

wordsSimilarityTask.addOnSuccessListener {
// Processing for successful recognition.
it
}.addOnFailureListener {
// If the recognition fails, handle the exception by referring to step 10 below.
it
}

Text Embedding özelliği bize kelime ve cümlelerin eşleşen vektör değerlerini bulmamıza yardım eder. Benzerlik sonucu 0'dan büyük ve 1'den küçük bir float değeridir. Bu sonuçlara göre kelime ve cümle benzerliklerini karşılaştırabilirsiniz. Değer 1'e ne kadar yaklaşırsa kelime ve cümleler arasındaki benzerlik o kadar fazla demektir.

Hadi şimdi bazı benzerlik sonuçlarına göz atalım:

red - white -> 0.7342116
basketball - football -> 0.8305812
cake - pie -> 0.8054973
money - ring -> 0.3621515

Şimdi de sentence similarity özelliğini test edelim. Aynı text embedding analyzer sentence similarity taskı için de kullanılabilir.

val sentencesSimilarityTask = analyzer.analyseSentencesSimilarity(
input1,
input2
) // input1 and input2 refer to the input text information of the String type.

sentencesSimilarityTask.addOnSuccessListener {
// Processing for successful recognition.
it
}.addOnFailureListener {
// If the recognition fails, handle the exception by referring to step 10 below.
it
}

Hadi cümlelerin benzerlik sonuçlarına göz atalım:

"male customers can use the right line",
"female customers can use the left line" -> 0.97288185

"processing for successful recognition",
"failure is not falling down but refusing to get up" -> 0.55849314

"the secret of life is to fall seven times and to get up eight times",
"failure is not falling down but refusing to get up" -> 0.8553748

Şimdi de son olarak kelimelere benzer kelimeleri bulmayı deneyeceğiz. Burada ilk input kelime ikinci input ise benzer almak istediğimiz kelime sayısı olmalıdır.

val multipleSimilarityWordsTask: Task<List<String>> = analyzer.analyseSimilarWords(
input1,
input2
) // input1 is the input text information of the String type, and input2 indicates the number of similar words, of the Int type.

multipleSimilarityWordsTask.addOnSuccessListener(OnSuccessListener<List<String>?> {
// Processing for successful recognition.
it
}).addOnFailureListener(OnFailureListener {
it
// If the recognition fails, handle the exception by referring to step 10 below.
})

Aşağıda her kelime için gelen benzer 3 kelime için sonuçlar listelenmiştir:

money -> "monies", "cash", "funds"
book -> "books", "novella", "memoir/biography"
developer -> "builder/developer", "developes", "co-developers"
phone -> "cellphone", "phoner", "telephone"

Geliştirme kısmı bu kadardı!

Sonuç

Bu makale ML Kit’in Text Embedding özelliğini word similarity, sentence similarity ve benzer kelimeleri sorgulama fonksiyonlarını açıklamıştır. Makalenin hem ML Kit özelliklerinden bazılarını tanımış olmanıza hem de bu özelliklerin ne için kullanıldığını anlamanıza yardımcı olması amaçlanmıştır. Diğer ML Kit özelliklerini de buradan inceleyebilirsiniz. Text embedding özelliği kullanıcıya benzer içerikler sunmayı hedefleyen text tabanlı öneri sistemlerinde datasetten benzer text datalarının bulunması amacıyla kullanılabilir. Sizin senaryonuz için optimum metodu seçebilirsiniz.

Umarım bu makaleyi faydalı bulmuşsunuzdur :)). Yorumlarınızı, sorularınızı ve önerilerinizi aşağıdan belirtebilirsiniz!

--

--

ibrahimertanylmz
Huawei Developers - Türkiye

Android Developer @Huawei 💻, ESOGU Computer Engineering Graduate 🎓, Proactive Self-Starter, Quick Learner, Team Player 👨‍👦‍👦