Tutorial: Memvisualisasikan panggilan dukungan pelanggan dengan OpenSearch Service dan Dasbor OpenSearch - OpenSearch Layanan Amazon

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Tutorial: Memvisualisasikan panggilan dukungan pelanggan dengan OpenSearch Service dan Dasbor OpenSearch

Bab ini adalah panduan lengkap dari situasi berikut: sebuah bisnis menerima sejumlah panggilan dukungan pelanggan dan ingin menganalisisnya. Apa subjek dari setiap panggilan? Berapa banyak yang positif? Berapa banyak yang negatif? Bagaimana manajer dapat mencari atau meninjau transkrip panggilan ini?

Alur kerja manual mungkin melibatkan karyawan yang mendengarkan rekaman, mencatat subjek dari setiap panggilan, dan memutuskan apakah interaksi pelanggan itu positif atau tidak.

Proses seperti itu akan sangat padat karya. Dengan asumsi waktu rata-rata 10 menit per panggilan, setiap karyawan hanya dapat mendengarkan 48 panggilan per hari. Kecuali bias manusia, data yang mereka hasilkan akan sangat akurat, namun jumlah data akan minimal: hanya subjek panggilan dan sebuah boolean untuk apakah pelanggan puas atau tidak. Apa pun yang lebih terlibat, seperti transkrip lengkap, akan membutuhkan banyak waktu.

Dengan menggunakan Amazon S3, Amazon Transcribe, Amazon Comprehend, dan Amazon OpenSearch Service, Anda dapat mengotomatisasi proses serupa dengan kode yang sangat sedikit dan berakhir dengan lebih banyak data. Misalnya, Anda bisa mendapatkan transkrip lengkap panggilan, kata kunci dari transkrip, dan keseluruhan “sentimen” panggilan (positif, negatif, netral, atau campuran). Kemudian Anda dapat menggunakan OpenSearch dan OpenSearch Dasbor untuk mencari dan memvisualisasikan data.

Meskipun Anda dapat menggunakan panduan ini apa adanya, tujuannya adalah untuk memicu ide-ide tentang bagaimana untuk memperkaya dokumen JSON Anda sebelum Anda mengindeksnya di Service. OpenSearch

Perkiraan Biaya

Secara umum, melakukan langkah-langkah dalam panduan ini membutuhkan biaya kurang dari $2. Panduan menggunakan sumber daya berikut:

  • Bucket S3 dengan kurang dari 100 MB yang ditransfer dan disimpan

    Untuk mempelajari selengkapnya, lihat Harga Amazon S3.

  • OpenSearchDomain layanan dengan satu t2.medium instans dan 10 GIB penyimpanan EBS untuk beberapa jam

    Untuk selengkapnya, lihat Harga Amazon OpenSearch Service.

  • Beberapa panggilan ke Amazon Transcribe

    Untuk mempelajari selengkapnya, lihat Harga Amazon Transcribe.

  • Beberapa pemrosesan bahasa alami panggilan ke Amazon Comprehend

    Untuk mempelajari selengkapnya, lihat Harga Amazon Comprehend.

Langkah 1: Mengkonfigurasi prasyarat

Sebelum melanjutkan, Anda harus memiliki sumber daya berikut.

Prasyarat Deskripsi
Bucket Amazon S3 Untuk informasi selengkapnya, lihat Membuat Bucket di Panduan Pengguna Amazon Simple Storage Service.
OpenSearchDomain layanan Tujuan untuk data. Untuk selengkapnya, lihat Membuat domain OpenSearch Service.

Jika Anda belum memiliki sumber daya ini, Anda dapat membuatnya menggunakan perintah AWS CLI berikut:

aws s3 mb s3://my-transcribe-test --region us-west-2
aws opensearch create-domain --domain-name my-transcribe-test --engine-version OpenSearch_1.0 --cluster-config InstanceType=t2.medium.search,InstanceCount=1 --ebs-options EBSEnabled=true,VolumeType=standard,VolumeSize=10 --access-policies '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"AWS":"arn:aws:iam::123456789012:root"},"Action":"es:*","Resource":"arn:aws:es:us-west-2:123456789012:domain/my-transcribe-test/*"}]}' --region us-west-2
catatan

Perintah ini menggunakan us-west-2 Wilayah, tetapi Anda dapat menggunakan Wilayah mana pun yang didukung Amazon Comprehend. Untuk mempelajari lebih lanjut, lihat Referensi Umum AWS.

Langkah 2: Menyalin kode sampel

  1. Salin dan tempel kode sampel Python 3 berikut ke dalam file baru bernama call-center.py:

    import boto3 import datetime import json import requests from requests_aws4auth import AWS4Auth import time import urllib.request # Variables to update audio_file_name = '' # For example, 000001.mp3 bucket_name = '' # For example, my-transcribe-test domain = '' # For example, https://search-my-transcribe-test-12345.us-west-2.es.amazonaws.com index = 'support-calls' type = '_doc' region = 'us-west-2' # Upload audio file to S3. s3_client = boto3.client('s3') audio_file = open(audio_file_name, 'rb') print('Uploading ' + audio_file_name + '...') response = s3_client.put_object( Body=audio_file, Bucket=bucket_name, Key=audio_file_name ) # # Build the URL to the audio file on S3. # # Only for the us-east-1 region. # mp3_uri = 'https://' + bucket_name + '.s3.amazonaws.com/' + audio_file_name # Get the necessary details and build the URL to the audio file on S3. # For all other regions. response = s3_client.get_bucket_location( Bucket=bucket_name ) bucket_region = response['LocationConstraint'] mp3_uri = 'https://' + bucket_name + '.s3-' + bucket_region + '.amazonaws.com/' + audio_file_name # Start transcription job. transcribe_client = boto3.client('transcribe') print('Starting transcription job...') response = transcribe_client.start_transcription_job( TranscriptionJobName=audio_file_name, LanguageCode='en-US', MediaFormat='mp3', Media={ 'MediaFileUri': mp3_uri }, Settings={ 'ShowSpeakerLabels': True, 'MaxSpeakerLabels': 2 # assumes two people on a phone call } ) # Wait for the transcription job to finish. print('Waiting for job to complete...') while True: response = transcribe_client.get_transcription_job(TranscriptionJobName=audio_file_name) if response['TranscriptionJob']['TranscriptionJobStatus'] in ['COMPLETED', 'FAILED']: break else: print('Still waiting...') time.sleep(10) transcript_uri = response['TranscriptionJob']['Transcript']['TranscriptFileUri'] # Open the JSON file, read it, and get the transcript. response = urllib.request.urlopen(transcript_uri) raw_json = response.read() loaded_json = json.loads(raw_json) transcript = loaded_json['results']['transcripts'][0]['transcript'] # Send transcript to Comprehend for key phrases and sentiment. comprehend_client = boto3.client('comprehend') # If necessary, trim the transcript. # If the transcript is more than 5 KB, the Comprehend calls fail. if len(transcript) > 5000: trimmed_transcript = transcript[:5000] else: trimmed_transcript = transcript print('Detecting key phrases...') response = comprehend_client.detect_key_phrases( Text=trimmed_transcript, LanguageCode='en' ) keywords = [] for keyword in response['KeyPhrases']: keywords.append(keyword['Text']) print('Detecting sentiment...') response = comprehend_client.detect_sentiment( Text=trimmed_transcript, LanguageCode='en' ) sentiment = response['Sentiment'] # Build the Amazon OpenSearch Service URL. id = audio_file_name.strip('.mp3') url = domain + '/' + index + '/' + type + '/' + id # Create the JSON document. json_document = {'transcript': transcript, 'keywords': keywords, 'sentiment': sentiment, 'timestamp': datetime.datetime.now().isoformat()} # Provide all details necessary to sign the indexing request. credentials = boto3.Session().get_credentials() awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, 'opensearchservice', session_token=credentials.token) # Index the document. print('Indexing document...') response = requests.put(url, auth=awsauth, json=json_document, headers=headers) print(response) print(response.json())
  2. Perbarui enam variabel awal.

  3. Instal paket yang diperlukan menggunakan perintah-perintah berikut:

    pip install boto3 pip install requests pip install requests_aws4auth
  4. Tempatkan MP3 Anda di direktori yang sama dengan call-center.py dan jalankan skrip. Sebuah output sampel berikut:

    $ python call-center.py Uploading 000001.mp3... Starting transcription job... Waiting for job to complete... Still waiting... Still waiting... Still waiting... Still waiting... Still waiting... Still waiting... Still waiting... Detecting key phrases... Detecting sentiment... Indexing document... <Response [201]> {u'_type': u'call', u'_seq_no': 0, u'_shards': {u'successful': 1, u'failed': 0, u'total': 2}, u'_index': u'support-calls4', u'_version': 1, u'_primary_term': 1, u'result': u'created', u'_id': u'000001'}

call-center.py melakukan sejumlah operasi:

  1. Skrip mengunggah file audio (dalam hal ini, MP3, namun Amazon Transcribe mendukung beberapa format) ke bucket S3 Anda.

  2. Ini mengirimkan URL file audio ke Amazon Transcribe dan menunggu tugas transkripsi selesai.

    Waktu untuk menyelesaikan tugas transkripsi tergantung pada panjang file audio. Asumsikan menit, bukan detik.

    Tip

    Untuk meningkatkan kualitas transkripsi, Anda dapat mengkonfigurasi kosa kata kustom untuk Amazon Transcribe.

  3. Setelah tugas transkripsi selesai, skrip mengekstraksi transkrip, memangkasnya menjadi 5.000 karakter, dan mengirimkannya ke Amazon Comprehend untuk analisis kata kunci dan sentimen.

  4. Terakhir, skrip menambahkan transkrip lengkap, kata kunci, sentimen, stempel waktu saat ini ke dokumen JSON dan mengindeksnya di Service. OpenSearch

Tip

LibriVoxmemiliki buku audio domain publik yang dapat Anda gunakan untuk pengujian.

(Opsional) Langkah 3: Mengindeks data sampel

Jika Anda tidak memiliki banyak rekaman panggilan berguna—dan siapa yang melakukannya?—Anda dapat mengindeks dokumen sampel di sample-calls.zip, yang sebanding dengan apa yang dihasilkan call-center.py.

  1. Buat file bernama bulk-helper.py:

    import boto3 from opensearchpy import OpenSearch, RequestsHttpConnection import json from requests_aws4auth import AWS4Auth host = '' # For example, my-test-domain.us-west-2.es.amazonaws.com region = '' # For example, us-west-2 service = 'es' bulk_file = open('sample-calls.bulk', 'r').read() credentials = boto3.Session().get_credentials() awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token) search = OpenSearch( hosts = [{'host': host, 'port': 443}], http_auth = awsauth, use_ssl = True, verify_certs = True, connection_class = RequestsHttpConnection ) response = search.bulk(bulk_file) print(json.dumps(response, indent=2, sort_keys=True))
  2. Perbarui dua variabel awal untuk host dan region.

  3. Instal paket yang diperlukan menggunakan perintah berikut:

    pip install opensearch-py
  4. Unduh dan unzip sample-calls.zip.

  5. Tempatkan sample-calls.bulk dalam direktori yang sama dengan bulk-helper.py dan jalankan pembantu. Sebuah output sampel berikut:

    $ python bulk-helper.py { "errors": false, "items": [ { "index": { "_id": "1", "_index": "support-calls", "_primary_term": 1, "_seq_no": 42, "_shards": { "failed": 0, "successful": 1, "total": 2 }, "_type": "_doc", "_version": 9, "result": "updated", "status": 200 } }, ... ], "took": 27 }

Langkah 4: Menganalisis dan memvisualisasikan data Anda

Sekarang setelah Anda memiliki beberapa data di OpenSearch Service, Anda dapat memvisualisasikannya menggunakan OpenSearch Dasbor.

  1. Navigasikan ke https://search-domain.region.es.amazonaws.com/_dashboards.

  2. Sebelum Anda dapat menggunakan OpenSearch Dasbor, Anda memerlukan pola indeks. Dasbor menggunakan pola indeks untuk mempersempit analisis Anda menjadi satu atau lebih indeks. Untuk mencocokkan support-calls indeks yang call-center.py dibuat, pergi ke Stack Management, Index Patterns, dan menentukan pola indekssupport*, dan kemudian pilih Next step.

  3. Untuk Nama bidang Filter Waktu, pilih stempel waktu.

  4. Sekarang Anda dapat mulai membuat visualisasi. Pilih Visualisasikan, lalu tambahkan visualisasi baru.

  5. Pilih diagram lingkaran dan pola indeks support*.

  6. Visualisasi default adalah dasar, jadi pilih Belah Irisan untuk membuat visualisasi yang lebih menarik.

    Untuk Agregasi, pilih Persyaratan. Untuk Bidang, pilih sentiment.keyword. Lalu pilih Terapkan perubahan dan Simpan.

    
                        Sampel konfigurasi untuk diagram lingkaran Dashboard.
  7. Kembali ke halaman Visualisasikan, dan tambahkan visualisasi lain. Kali ini, pilih diagram batang horizontal.

  8. Pilih Bagi Seri.

    Untuk Agregasi, pilih Persyaratan. Untuk Bidang, pilih keywords.keyword dan ubah Ukuran ke 20. Lalu pilih Terapkan Perubahan dan Simpan.

    
                        Sampel konfigurasi untuk diagram batang horizontal.
  9. Kembali ke halaman Visualisasikan dan tambahkan satu visualisasi terakhir, diagram batang vertikal.

  10. Pilih Bagi Seri. Untuk Agregasi, pilih Histogram Tanggal. Untuk Bidang, pilih stempel waktu dan ubah Interval ke Harian.

  11. Pilih Metrik & Sumbu dan ubah Mode ke Normal.

  12. Pilih Terapkan Perubahan dan Simpan.

    
                        Sampel konfigurasi untuk diagram batang vertikal.
  13. Sekarang setelah Anda memiliki tiga visualisasi, Anda dapat menambahkannya ke visualisasi dasbor. Pilih Dasbor, buat sebuah dasbor, dan tambahkan visualisasi Anda.

    
                        Sampel visualisasi.

Langkah 5: Membersihkan sumber daya dan langkah selanjutnya

Untuk menghindari biaya yang tidak perlu, hapus bucket S3 dan domain OpenSearch Service. Untuk mempelajari selengkapnya, lihat Menghapus Bucket di Panduan Pengguna Amazon Simple Storage OpenSearch Service dan Hapus domain Layanan dalam panduan ini.

Transkrip memerlukan ruang disk yang jauh lebih sedikit daripada file MP3. Anda mungkin dapat mempersingkat jendela penyimpanan MP3 Anda—misalnya, dari tiga bulan rekaman panggilan menjadi satu bulan—mempertahankan transkrip selama bertahun-tahun, dan tetap menghemat biaya penyimpanan.

Anda juga dapat mengotomatisasi proses transkripsi menggunakan AWS Step Functions dan Lambda, tambahkan metadata tambahan sebelum pengindeksan, atau buat visualisasi yang lebih kompleks agar sesuai dengan kasus penggunaan Anda yang tepat.