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 Layanan 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
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 Layanan. OpenSearch
Estimasi 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
. -
OpenSearch Domain layanan dengan satu
t2.medium
instans dan 10 GIB penyimpanan EBS selama beberapa jamUntuk mempelajari 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
.
Topik
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 Layanan Penyimpanan Sederhana Amazon. |
OpenSearch Domain layanan | Tujuan untuk data. Untuk informasi selengkapnya, lihat Membuat domain OpenSearch Layanan. |
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
-
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())
-
Perbarui enam variabel awal.
-
Instal paket yang diperlukan menggunakan perintah-perintah berikut:
pip install boto3 pip install requests pip install requests_aws4auth
-
Tempatkan Anda MP3 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:
-
Skrip mengunggah file audio (dalam hal ini MP3, namun Amazon Transcribe mendukung beberapa format) ke bucket S3 Anda.
-
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.
-
Setelah tugas transkripsi selesai, skrip mengekstraksi transkrip, memangkasnya menjadi 5.000 karakter, dan mengirimkannya ke Amazon Comprehend untuk analisis kata kunci dan sentimen.
-
Terakhir, skrip menambahkan transkrip lengkap, kata kunci, sentimen, dan stempel waktu saat ini ke dokumen JSON dan mengindeksnya di Layanan. OpenSearch
Tip
LibriVox
(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
.
-
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))
-
Perbarui dua variabel awal untuk
host
danregion
. -
Instal paket yang diperlukan menggunakan perintah berikut:
pip install opensearch-py
-
Unduh dan unzip sample-calls.zip.
-
Tempatkan
sample-calls.bulk
dalam direktori yang sama denganbulk-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 Layanan, Anda dapat memvisualisasikannya menggunakan OpenSearch dasbor.
-
Navigasi ke
https://search-
.domain
.region
.es.amazonaws.com/_dashboards -
Sebelum Anda bisa 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 yangcall-center.py
dibuat, pergi ke Stack Management, Index Patternssupport*
, dan tentukan pola indeks, lalu pilih Langkah berikutnya. -
Untuk Nama bidang Filter Waktu, pilih stempel waktu.
-
Sekarang Anda dapat mulai membuat visualisasi. Pilih Visualisasikan, lalu tambahkan visualisasi baru.
-
Pilih diagram lingkaran dan pola indeks
support*
. -
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.
-
Kembali ke halaman Visualisasikan, dan tambahkan visualisasi lain. Kali ini, pilih diagram batang horizontal.
-
Pilih Bagi Seri.
Untuk Agregasi, pilih Persyaratan. Untuk Bidang, pilih keywords.keyword dan ubah Ukuran ke 20. Lalu pilih Terapkan Perubahan dan Simpan.
-
Kembali ke halaman Visualisasikan dan tambahkan satu visualisasi terakhir, diagram batang vertikal.
-
Pilih Bagi Seri. Untuk Agregasi, pilih Histogram Tanggal. Untuk Bidang, pilih stempel waktu dan ubah Interval ke Harian.
-
Pilih Metrik & Sumbu dan ubah Mode ke Normal.
-
Pilih Terapkan Perubahan dan Simpan.
-
Sekarang setelah Anda memiliki tiga visualisasi, Anda dapat menambahkannya ke visualisasi dasbor. Pilih Dasbor, buat sebuah dasbor, dan tambahkan visualisasi Anda.
Langkah 5: Membersihkan sumber daya dan langkah selanjutnya
Untuk menghindari biaya yang tidak perlu, hapus bucket S3 dan domain OpenSearch Layanan. Untuk mempelajari selengkapnya, lihat Menghapus Bucket di Panduan Pengguna Layanan Penyimpanan Sederhana Amazon dan Hapus domain OpenSearch Layanan dalam panduan ini.
Transkrip membutuhkan ruang disk yang jauh lebih sedikit daripada MP3 file. Anda mungkin dapat mempersingkat jendela MP3 penyimpanan 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 dan AWS Step Functions Lambda, tambahkan metadata tambahan sebelum pengindeksan, atau buat visualisasi yang lebih kompleks agar sesuai dengan kasus penggunaan Anda yang tepat.