Plato Veri Zekası.
Dikey Arama ve Yapay Zeka.

Sokak adreslerini yakalamak için Amazon Lex'i kullanın

Tarih:

Amazon Lex'i kullanıcı girdisini kopyalamak, isteklerinin yapısını belirlemek ve konuşmaları verimli bir şekilde yönetmek için otomatik konuşma tanıma (ASR) ve doğal dil anlama (NLU) teknolojileri sağlar. Lex, gelişmiş konuşmalar oluşturmanıza, müşteri memnuniyeti (CSAT) puanlarını iyileştirmek için kullanıcı deneyiminizi düzenlemenize ve iletişim merkezlerinizdeki kapsamı artırmanıza olanak tanır.

Doğal, etkili müşteri etkileşimleri, Lex sanal aracısının müşteri tarafından sağlanan bilgileri doğru bir şekilde yorumlamasını gerektirir. Özellikle zorlayıcı olabilecek bir senaryo, arama sırasında bir sokak adresini yakalamaktır. Örneğin, yakın zamanda yeni bir şehre taşınan ve kablosuz hesabı için sokak adresini güncellemek için arayan bir müşteriyi düşünün. Tek bir Amerika Birleşik Devletleri posta kodu bile çok çeşitli sokak adları içerebilir. Telefon üzerinden doğru adresi almak, insan aracılar için bile zor olabilir.

Bu gönderide, Amazon Lex'i nasıl kullanabileceğinizi göstereceğiz ve Amazon Konum Hizmeti adreslerini ses veya metin yoluyla yakalamak için etkili bir kullanıcı deneyimi sağlamak.

Çözüme genel bakış

Bu örnek için, self servis özellikleri sağlayan bir Amazon Lex botu kullanacağız. Amazon Bağlantısı temas akışı. Kullanıcı telefonundan aradığında adresini değiştirmek isteyebilir ve bot onlardan müşteri numarasını ve yeni adresini ister. Çoğu durumda, yeni adres ilk denemede doğru şekilde yakalanacaktır. Daha zorlu adresler için, bot onlardan sokak adlarını yeniden yazmalarını, sokak adlarını hecelemelerini veya doğru adresi yakalamak için posta kodlarını veya adres numaralarını tekrar etmelerini isteyebilir.

Lex botumuzu modellemek için örnek bir kullanıcı etkileşimi:

IVR: Merhaba, ACME bank müşteri hizmetlerine hoş geldiniz. Nasıl yardımcı olabilirim? Hesap bakiyelerini kontrol edebilir, çek sipariş edebilir veya adresinizi değiştirebilirsiniz.

kullanıcı: Adresimi değiştirmek istiyorum.

IVR: Müşteri numaranızı söyler misiniz?

kullanıcı: 123456.

IVR: Teşekkürler. Lütfen bana yeni posta kodunuzu söyleyin.

kullanıcı: 32312.

IVR: Tamam, yeni adresiniz nedir?

kullanıcı: 6800 Thomasville Yolu, Süit 1-oh-1.

IVR: Teşekkür ederim. Doğru anladığımdan emin olmak için bana sadece sokağınızın adını söyleyebilir misiniz?

kullanıcı: Thomasville Yolu.

IVR: Tamam, yeni adresiniz 6800 Thomasville Road, Suite 101, Tallahassee Florida 32312, ABD. Bu doğru mu?

kullanıcı: Evet.

IVR: Tamam, adresiniz güncellendi. Yardımcı olabileceğim başka bir şey var mı?

kullanıcı: Hayır, teşekkürler.

IVR: Ulaştığınız için teşekkür ederiz. İyi günler!

Alternatif bir yaklaşım olarak, önce posta kodunu sormak yerine tüm adresi tek bir dönüşte yakalayabilirsiniz:

IVR: Merhaba, ACME bank müşteri hizmetlerine hoş geldiniz. Nasıl yardımcı olabilirim? Hesap bakiyelerini kontrol edebilir, çek sipariş edebilir veya adresinizi değiştirebilirsiniz.

kullanıcı: İstiyorum güncelleştirme benim adresim.

IVR: Müşteri numaranızı söyler misiniz?

kullanıcı: 123456.

IVR: Teşekkürler. Lütfen bana cadde, şehir, eyalet ve posta kodu dahil olmak üzere yeni adresinizi söyleyin.

kullanıcı: 6800 Thomasville Yolu, Süit 1-oh-1, Tallahassee Florida, 32312.

IVR: Teşekkür ederim. Doğru anladığımdan emin olmak için bana sadece sokağınızın adını söyleyebilir misiniz?

kullanıcı: Thomasville Yolu.

IVR: Tamam, yeni adresiniz 6800 Thomasville Road, Suite 101, Tallahassee Florida 32312, ABD. Bu doğru mu?

kullanıcı: Evet.

IVR: Tamam, adresiniz güncellendi. Yardımcı olabileceğim başka bir şey var mı?

kullanıcı: Hayır, teşekkürler.

IVR: Ulaştığınız için teşekkür ederiz. İyi günler!

Çözüm mimarisi

Bu çözümde Amazon Connect ile entegre bir Amazon Lex botu kullanacağız. Kullanıcı arayıp yeni adresini verdiğinde Lex, konuşmalarını metne dönüştürmek için otomatik konuşma tanımayı kullanır. Daha sonra, bir kullanır AWS Lambda Adres araması yapan ve normalleştirilmiş bir adres döndüren Amazon Konum Hizmeti'ne kopyalanan metni göndermek için yerine getirme işlevi.

kapsamında AWS CloudFormation yığın, ayrıca isteğe bağlı bir Amazon CloudWatch Günlükleri Sonuçları görselleştirmek için bir konuşma analizi panosu oluşturmak için kullanılabilen Lex konuşma günlüklerini yakalamak için günlük grubu (yazıya bakın) Amazon Lex botlarınız için bir iş zekası panosu oluşturma Bunu yapmanın bir yolu için).

Nasıl çalışır

Bu çözüm, aşağıdakiler de dahil olmak üzere, etkili bir kullanıcı deneyimi oluşturmak için çeşitli teknikleri birleştirir:

  • Konuşmayı metne dönüştürmek için Amazon Lex otomatik konuşma tanıma teknolojisi.
  • Adres arama ve normalleştirme için Amazon Konum Hizmeti ile entegrasyon.
  • Lex yazım stilleri, ses girişleri net olmadığında bir "söyle-yazım" yaklaşımı uygulamak için (örneğin, kullanıcıdan sokak adını söylemesini ve ardından gerekirse hecelemesini isteyin).

İlk adım, gerekli yuvaların yakalandığından emin olmaktır.

Takip eden ilk kod bölümünde, kullanıcıdan Lex'i kullanarak posta kodunu ve sokak adresini isteriz. ElicitSlot diyalog eylemi. bu elicit_slot_with_retries() işlevi, kullanıcıya bir dizi yapılandırılabilir bilgi istemine göre bilgi verir.

 
    # check for ZipCode code slot; if not available; elicit it
    zip_code = None
    zipCode = slot_values.get('ZipCode', None)
    if zipCode is not None:
        zip_code = zipCode['value'].get('interpretedValue', None)
    else:
        response = helpers.elicit_slot_with_retries( intent, activeContexts, sessionAttributes, 'ZipCode', requestAttributes)
        return response		
    # check for StreetAddress slot
    street_address = None
    streetAddress = slot_values.get('StreetAddress', None)
    if streetAddress is not None:
        street_address = streetAddress['value'].get('interpretedValue', None)
    else:
        # give the caller extra time for this response
        sessionAttributes['x-amz-lex:audio:end-timeout-ms:' + intent_name + ':StreetAddress'] = 2000
        response = helpers.elicit_slot_with_retries( intent, activeContexts, sessionAttributes, 'StreetAddress', requestAttributes)
        return response
    street_address = parse_address.parse(street_address)
    sessionAttributes['inputAddress'] = street_address

Yukarıdaki kodun son bölümü bir yardımcı işlev kullanır parse_address.parse() konuşulan sayıları rakamlara çeviren (örneğin, "altmış sekiz yüz"ü "6800"e çevirir).

Ardından, kullanıcının ifadesini Amazon Konum Hizmetine gönderir ve yanıtı inceleriz. Sokağı, sokak numarası olmayan veya yanlış posta koduna sahip girişleri atıyoruz. Bir sokak adı veya numarası için yeniden sormamız gereken durumlarda, daha önce önerilen adresleri de atıyoruz.

# validate the address using the AWS Location Service
    location_response = locationClient.search_place_index_for_text(IndexName='explore.place', Text=street_address)
    # inspect the response from Amazon Location Service
    if location_response.get('Results', None) is not None:
        for address in location_response['Results']:
            if address.get('Place', None) is not None:
                addressLabel = address['Place'].get('Label', None)
                addressNumber = address['Place'].get('AddressNumber', None)
                street = address['Place'].get('Street', None)
                postalCode = address['Place'].get('PostalCode', None)
                if street is None:
                    continue                    
                if addressNumber is None:
                    continue                    
                if zip_code is not None:
                    if postalCode[:len(zip_code)] != zip_code:
                        continue
                already_tried = False
                prior_suggestions = helpers.get_all_values('suggested_address', sessionAttributes)
                for prior_suggestion in prior_suggestions:
                    if addressLabel == prior_suggestion:
                        already_tried = True
                        break                    
                if already_tried:
                    continue
                # the first entry with a valid street that was not already tried is the next best guess
                resolvedAddress = addressLabel
                break

Çözümlenmiş bir adresimiz olduğunda, bunu kullanıcıyla onaylarız.

if (event.get('inputMode') == 'Speech'):
        response_string = '<speak>OK, your new address is <say-as interpret-as="address">'
        response_string += resolvedAddress + '</say-as>. Is that right?</speak>'
        response_message = helpers.format_message_array(response_string, 'SSML')
    else:
       response_string = 'OK, your new address is ' + resolvedAddress + '. Is that right?'
        response_message = helpers.format_message_array(response_string, 'PlainText')
    intent['state'] = 'Fulfilled'
    response = helpers.confirm(intent, activeContexts, sessionAttributes, response_message, requestAttributes)
    return response

Amazon Konum Hizmeti'nden çözümlenmiş bir adres alamazsak veya kullanıcı önerdiğimiz adresin doğru olmadığını söylerse, bazı ek bilgileri yeniden isteriz ve yeniden deneriz. Ek bilgi yuvaları şunları içerir:

  • StreetName: alan türü AMAZON.StreetName
  • SpelledStreetName: AMAZON.AlphaNumeric alan türü (Amazon Lex kullanarak yazım stilleri)
  • StreetAddressNumber: yuva türü AMAZON.Number

Yeniden sorma mantığı, next_retry() denenecek eylemlerin bir listesine danışan işlev:

RETRY_ACTIONS = [
    { "street_name": {
          "method": elicit_street_name,
          "style": None,
          "no-match": "Thank you. To make sure I get it right, can you tell me just the name of your street?",
          "incorrect": "Let's try again. Can you tell me just the name of your street?"
       }
    },
    { "street_name_spelled_by_letter": {
          "method": elicit_spelled_street, 
          "style": "SpellByLetter",
          "no-match": "Let's try a different way. Can you please spell just the name of your street?",
          "incorrect": "Let's try a different way. Can you please spell just the name of your street?"
       }
    },
    { "street_address_number": {
          "method": elicit_street_address_number, 
          "style": None,
          "no-match": "I didn't find a matching address. Can you please tell me your street address number?",
          "incorrect": "OK, let's try your street address number. Can you tell me that once more?"
       }
    },
    { "street_name_spelled_by_word": {
          "method": elicit_spelled_street, 
          "style": "SpellByWord",
          "no-match": "Let's try one last time. Please spell the name of your street. You can use words for letters, such as a as in apple, or b like bob.",
          "incorrect": "Let's try one last time. Please spell the name of your street. You can use words for letters, such as a as in apple, or b like bob."
       }
    },
    { "agent": {
          "method": route_to_agent, 
          "style": None,
          "no-match": "Sorry, I was not able to find a match for your address. Let me get you to an agent.",
          "incorrect": "Sorry, I was not able to find a match for your address. Let me get you to an agent."
       }
    }
]

The next_retry() işlevi bu eylemleri sırayla deneyecektir. içindeki sırayı değiştirerek istemlerin sırasını değiştirebilirsiniz. RETRY_ACTIONS liste. Ayrıca, Amazon Konum Hizmetinin bir eşleşme bulamadığı senaryolar ile kullanıcının önerilen adresin doğru olmadığını söylediği durumlar için farklı istemler yapılandırabilirsiniz. Gördüğünüz gibi, kullanıcıdan sokak adını yeniden yazmasını isteyebiliriz ve bu olmazsa, Amazon Lex yazım stillerini kullanarak hecelemesini isteyebiliriz. Biz buna “söyle-büyü” yaklaşımı diyoruz ve bu senaryoda bir insan aracının bir müşteriyle nasıl etkileşime gireceğine benzer.

Bunu çalışırken görmek için AWS hesabınıza dağıtabilirsiniz.

Önkoşullar

Çözümü kendi AWS hesabınızda dağıtmak için aşağıdaki CloudFormation bağlantısını kullanabilirsiniz. Bu çözümü dağıtmadan önce, aşağıdaki ön koşullara sahip olduğunuzu onaylamanız gerekir:

  • mevcut AWS hesabı çözümü dağıtabileceğiniz yer.
  • Aşağıdaki AWS hizmetlerine erişim:
    • Amazon Lex'i
    • AWS Lambda, Amazon Konum Hizmeti ile entegrasyon için
    • Adres arama için Amazon Konum Hizmeti
    • AWS Kimlik ve Erişim Yönetimi (IAM), gerekli politikaları ve rolleri oluşturmak için
    • Lambda işlevi için günlük grupları oluşturmak ve isteğe bağlı olarak Lex konuşma günlüklerini yakalamak için CloudWatch Günlükleri
    • Yığını oluşturmak için CloudFormation
  • Bir Amazon Connect eşgörünümü (birini kurmayla ilgili talimatlar için bkz. Amazon Connect örneği oluşturun).

Aşağıdaki AWS Bölgeleri Amazon Lex, Amazon Connect ve Amazon Konum Hizmetini destekler: ABD Doğu (K. Virginia), ABD Batı (Oregon), Avrupa (Frankfurt), Asya Pasifik (Singapur), Asya Pasifik (Sidney) Bölgesi ve Asya Pasifik (Tokyo).

Örnek çözümü dağıtma

Adresinde oturum açın AWS Yönetim Konsolu AWS hesabınızda ve örnek çözümü dağıtmak için aşağıdaki bağlantıyı seçin:

Bu, yeni bir CloudFormation yığını oluşturacaktır.

Bir girin Yığın adıGibi lex-update-address-example. Çözümü test etmek için kullanacağınız Amazon Connect bulut sunucusu için ARN'yi (Amazon Kaynak Adı) girin. Diğer parametreler için varsayılan değerleri koruyabilir veya ihtiyaçlarınıza göre değiştirebilirsiniz. Seçmek Sonrakive yığınınız için isteyebileceğiniz etiketleri ekleyin (isteğe bağlı). Seçmek Sonraki tekrar yığın ayrıntılarını gözden geçirin, IAM kaynaklarının oluşturulacağını onaylamak için onay kutusunu seçin ve ardından Yığın oluştur.

Birkaç dakika sonra yığınınız tamamlanacak ve aşağıdaki kaynakları içerecektir:

  • Bir takma ada sahip yayınlanmış bir sürüm de dahil olmak üzere bir Lex botu (Development-Alias)
  • Bot için bir Lambda gerçekleştirme işlevi (BotHandler)
  • Lex konuşma günlükleri için bir CloudWatch Logs günlük grubu
  • Gerekli Amazon IAM rolleri
  • Connect örneğinize örnek bir kişi akışı ekleyen özel bir kaynak

Bu noktada yukarıdaki örnek etkileşimi Lex V2 konsolunda deneyebilirsiniz. CloudFormation şablonunda belirttiğiniz ada sahip örnek botu görmelisiniz (örn. update-address-bot).

Bu botu seç, seç Bot sürümleri sol taraftaki gezinme panelinde, Sürüm 1 sürümünü seçin ve ardından Amaçlar sol taraftaki panelde. Bir niyet listesinin yanı sıra bir test düğmesine basın.

Test etmek için, test düğme, seçmek Development-AliasVe sonra seçim Onaylamak Test penceresini açmak için

Başlamak için "Adresimi değiştirmek istiyorum"u deneyin. Bu UpdateAddressZipFirst posta kodunu sorarak ve ardından sokak adresini sorarak bir adres yakalama niyetindesiniz.

Şunu da söyleyebilirsiniz: güncelleştirme adresim” denemek için UpdateAddress tek bir ifadeyle bir adresi bir kerede yakalayan niyet.

Amazon Connect ile test etme

Şimdi bunu bir Connect örneği kullanarak sesle deneyelim. Connect örneğinizde bir örnek kişi akışı zaten yapılandırılmıştır:

Tek yapmanız gereken bir telefon numarası belirlemek ve bu iletişim akışı ile ilişkilendirmek. Bunu yapmak için şu adımları izleyin:

  • AWS Konsolunda Amazon Connect'i başlatın.
  • öğesini seçerek Connect örneğinizi açın. Erişim URL'si, ve örneğe giriş yapın.
  • Pano'da, seçin Telefon numaralarını görüntüleyin.
  • seç Bir numara talep edin, arasından bir ülke seçin Ülke açılır menüsüne gidin ve bir sayı seçin.
  • "Amazon Lex ile bir adresi güncellemek için örnek akış" gibi bir Açıklama girin ve az önce oluşturduğunuz kişi akışını seçin.
  • Klinik İndirim.

Artık botunuzu ses kullanarak test etmek için Connect örneğinize çağrı yapmaya hazırsınız. Sadece telefonunuzdaki numarayı çevirin ve bazı ABD adreslerini deneyin. Posta kodu yaklaşımını denemek için önce "adresimi değiştir" deyin. Adres değiştirme yöntemini tek dönüşte denemek için “adresimi güncelle” deyin. Ayrıca "yeni adresim" deyip ardından geçerli bir ABD adresi de diyebilirsiniz.

Ama bekleyin… dahası var

Ses senaryoları için bir başka zorlu kullanım durumu, bir kullanıcının e-posta adresini yakalamaktır. Bu genellikle kullanıcı doğrulama amacıyla veya yalnızca kullanıcının dosyadaki e-posta adresini değiştirmesine izin vermek için gereklidir. Lex, Lex yazım stillerini de destekleyen AMAZON.EmailAddress yerleşik yuva türünü kullanan e-posta adresleri için yerleşik desteğe sahiptir.

E-posta adreslerini yakalamak için bir "söyleme-yazım" yaklaşımı kullanmak çok etkili olabilir ve bu yaklaşım, yukarıda açıkladığımız sokak adresi yakalama senaryolarındaki kullanıcı deneyimine benzer olduğu için buraya ekledik. Bir şans ver!

Temizlemek

Devam eden ücretlere maruz kalmamak için botu kullanmayı bitirdiğinizde CloudFormation şablonunun bir parçası olarak oluşturulan kaynakları temizlemek isteyebilirsiniz. Bunu yapmak için CloudFormation Stack'i silin.

Sonuç

Amazon Lex, otomatikleştirilmiş self servis işlevsellik sağlamak için kullanıcılarınızdan ihtiyaç duyulan bilgileri almak için kullanılabilecek güçlü otomatik konuşma tanıma ve doğal dil anlama özellikleri sunar. Cadde, şehir ve kasaba adlarının çeşitliliği nedeniyle konuşma tanıma yoluyla bir müşterinin adresini yakalamak zor olabilir. Ancak, müşterinin girdisine göre doğru adresi aramak için Amazon Lex'i Amazon Konum Hizmeti ile kolayca entegre edebilirsiniz. Bu tekniği kendi Lex konuşma akışlarınıza dahil edebilirsiniz.


Yazar Hakkında

Brian Yost AWS Lex ekibinde Kıdemli Teknik Program yöneticisidir. Boş zamanlarında dağ bisikleti sürmekten, evde bira yapmaktan ve teknolojiyle uğraşmaktan hoşlanıyor.

spot_img

En Son İstihbarat

spot_img