У вас є Служба простого зберігання Amazon (Amazon S3) відра, повні файлів, що містять вхідні чати клієнтів, огляди продуктів і канали соціальних мереж багатьма мовами. Ваше завдання полягає в тому, щоб ідентифікувати продукти, про які говорять люди, визначити, чи висловлюють вони радісні чи сумні думки, перекласти їхні коментарі єдиною загальною мовою та створити копії даних для ваших бізнес-аналітиків, додавши цю нову інформацію до кожен запис. Крім того, вам потрібно видалити будь-яку особисту інформацію (PII), як-от імена, адреси та номери кредитних карток.
Ви вже знаєте, як користуватися Амазонка Афіна перетворювати дані в Amazon S3 за допомогою простих команд SQL і вбудованих функцій в Athena. Тепер ви також можете використовувати Athena для перекладу та аналізу текстових полів, завдяки Amazon Translate, «Амазонка», а також потужність Athena, визначених користувачем функцій (UDF).
Athena — це інтерактивна служба запитів, яка спрощує аналіз даних, що зберігаються в Amazon S3, за допомогою SQL. Amazon Comprehend — це служба обробки природної мови (NLP), яка дозволяє легко виявляти ідеї з тексту. Amazon Translate — це служба нейронного машинного перекладу, яка забезпечує швидкий, високоякісний, доступний і настроюваний переклад мовою. У цій публікації я покажу вам, як тепер ви можете використовувати їх разом для виконання таких дій:
- Визначте домінуючу мову текстового поля
- Визначте переважаючі виражені почуття — позитивні, негативні, ні те, ні інше або обидва
- Виявляти або редагувати сутності (наприклад, елементи, місця або кількість)
- Виявлення або редагування ідентифікаційної інформації
- Перекладайте текст з однієї мови на іншу
Цей пост досягає наступних цілей:
- Покаже вам, як швидко налаштувати функції текстової аналітики у вашому обліковому записі AWS (це швидко та легко!)
- Коротко поясніть, як працюють функції
- Обговоріть продуктивність і вартість
- Надайте підручник, у якому ми проводимо текстову аналітику оглядів продуктів Amazon
- Опишіть усі доступні функції
Ми включаємо список усіх доступних функцій у кінці публікації; наступний код показує кілька прикладів запитів і результатів:
Встановіть текстову аналітику UDF
Використовує Athena UDF AWS Lambda реалізувати функціональні можливості. Більше деталей я обговорюю далі в цій публікації, але вам не потрібно розуміти внутрішню роботу, щоб використовувати UDF текстової аналітики, тож почнемо.
Встановіть попередньо зібрану функцію Lambda, виконавши такі дії:
- перейдіть до TextAnalyticsUDFHandler застосування в Сховище програм AWS без серверів.
- В Налаштування програми розділі, залиште налаштування за замовчуванням.
- Select Я визнаю, що ця програма створює власні ролі IAM.
- Вибирати Розгортання.
І це все! Тепер у вас є нова лямбда-функція textanalytics-udf
. Ви готові спробувати деякі текстові аналітичні запити в Athena.
Якщо ви надаєте перевагу створенню та розгортанню з вихідного коду, перегляньте вказівки в кінці Репозиторій GitHub README.
Виконайте свій перший текстовий аналітичний запит
Якщо ви новачок у Athena, ви можете переглянути Приступаючи до роботи путівник
На момент написання цієї статті функція Athena UDF все ще перебуває в попередній версії. Щоб увімкнути його, створіть робочу групу Athena під назвою AmazonAthenaPreviewFunctionality
і запустіть усі UDF-запити з цієї робочої групи.
Введіть наступний запит у редактор SQL:
Ви отримуєте простий POSITIVE
результат. Тепер спробуйте ще раз, змінюючи введений текст — спробуйте щось менш позитивне, щоб побачити, як зміниться повернуте значення настрою.
Щоб отримати настрій разом із оцінками достовірності для кожного потенційного значення настрою, замість цього використовуйте такий запит:
Тепер ви отримуєте рядок JSON, що містить настрої та всі бали настроїв:
Ви можете використовувати вбудовані функції вилучення JSON в Афіні за цим результатом, щоб отримати поля для подальшого аналізу.
Як працює UDF
Щоб отримати додаткові відомості про структуру Athena UDF, див Запити з функціями, визначеними користувачем.
Клас Java TextAnalyticsUDFHandler реалізує наш обробник функції UDF Lambda. Кожна функція аналітики тексту має відповідний відкритий метод у цьому класі.
Athena викликає нашу функцію UDF Lambda з пакетами вхідних записів. The TextAnalyticsUDFHandler
ділить ці пакети на менші пакети до 25 рядків, щоб скористатися перевагами синхронних пакетних API із кількома документами Amazon Comprehend, де вони доступні (наприклад, для виявлення мови, об’єктів і настрою). Якщо синхронний багатодокументний API недоступний (наприклад, для DetectPiiEntity
та TranslateText
), замість цього ми використовуємо API для одного документа.
API API розуміння Amazon квоти на обслуговування забезпечте огорожі, щоб обмежити ваші витрати через ненавмисне інтенсивне використання (ми обговоримо це докладніше в наступному розділі). За замовчуванням багатодокументні пакетні API обробляють до 250 записів на секунду, а однодокументні API обробляють до 20 записів на секунду. Наші UDF використовують експоненціальну відмову та повторюють спроби зменшити частоту запитів, щоб залишатися в межах цих обмежень. Ви можете запросити збільшення квоти транзакцій за секунду для API, використовуючи Шаблон запиту на квоту на Консоль управління AWS.
Amazon Comprehend і Amazon Translate забезпечують максимальну довжину вхідного рядка 5,000 utf-8 байт. Текстові поля, які перевищують 5,000 байт utf-8, скорочуються до 5,000 байт для визначення мови та настроїв і розбиваються на кордонах речень на кілька текстових блоків розміром менше 5,000 байт для перекладу та виявлення та редагування сутності або PII. Потім результати об’єднуються.
Оптимізація витрат
Окрім витрат на запити Athena, текстова аналітика UDF несе витрати на використання Lambda, Amazon Comprehend і Amazon Translate. Сума, яку ви сплачуєте, є фактором загальної кількості записів і символів, які ви обробляєте за допомогою UDF. Для отримання додаткової інформації див Ціни AWS Lambda, Ціноутворення Amazon Comprehend та Ціни Amazon Translate.
Щоб мінімізувати витрати, я рекомендую уникати обробки одних і тих самих записів кілька разів. Натомість матеріалізуйте результати текстової аналітики UDF за допомогою запитів CREATE TABLE AS SELECT (CTAS), щоб зафіксувати результати в окремій таблиці, до якої потім можна економно надсилати запити стільки разів, скільки потрібно, без додаткових витрат на UDF. Поступово обробляйте нові записи, використовуючи запити INSERT INTO…SELECT, щоб аналізувати та збагачувати лише нові записи та додавати їх до цільової таблиці.
Уникайте без потреби викликати функції текстової аналітики для записів, які ви згодом відкинете. Напишіть свої запити для фільтрації набору даних, спершу використовуючи тимчасові таблиці, подання або вкладені запити, а потім застосуйте функції текстової аналітики до отриманих відфільтрованих записів.
Завжди оцінюйте потенційну вартість, перш ніж запускати запити текстової аналітики для таблиць із різною кількістю записів.
У цьому розділі ми надаємо два приклади оцінки витрат.
Приклад 1. Проаналізуйте мову та настрої твітів
Припустімо, що у вас є 10,000 100 записів твітів із середньою довжиною XNUMX символів на твіт. Ваш SQL-запит визначає домінуючу мову та настрої для кожного твіту. Ви працюєте другий рік (безкоштовний рівень більше не діє). Деталі вартості такі:
- Розмір кожного твіту = 100 символів
- Кількість одиниць (100 символів) на запис (мінімум 3 одиниці) = 3
- Загальна кількість одиниць: 10,000 3 (записів) x 2 (одиниць на запис) x 60,000 (запитів Amazon Comprehend на запис) = XNUMX XNUMX
- Ціна за одиницю = 0.0001 $
- Загальна вартість для Amazon Comprehend = [кількість одиниць] x [вартість за одиницю] = 60,000 0.0001 x 6.00 $ = XNUMX $
Приклад 2. Перекладіть твіти
Припустимо, що 2,000 ваших твітів написані не вашою місцевою мовою, тому ви виконуєте другий запит SQL, щоб перекласти їх. Деталі вартості такі:
- Розмір кожного твіту = 100 символів
- Загальна кількість символів: 2,000 (записів) * 100 (символів на запис) x 1 (запитів на переклад на запис) = 200,000 XNUMX
- Ціна за символ = 0.000015 $
- Загальна вартість для Amazon Translate = [кількість символів] x [вартість за символ] = 200,000 0.000015 x 3.00 $ = XNUMX $
Аналізуйте інформацію з відгуків клієнтів
Настав час використовувати наші нові текстові аналітичні запити.
Навчальний посібник із отримання корисної інформації з відгуків клієнтів див Навчальний посібник: Аналіз статистики з відгуків клієнтів за допомогою Amazon Comprehend. Ця публікація пропонує альтернативний підхід до тієї ж проблеми: використання SQL-запитів на базі Athena та Amazon Comprehend.
Виконання навчального посібника займає приблизно 10 хвилин і коштує до 6 доларів США за Amazon Comprehend — якщо ви маєте право на безкоштовний рівень, оплата не стягується.
Створіть нову базу даних в Athena
Виконайте такий запит у редакторі запитів Athena:
Підключаючи джерело даних, виберіть нову базу даних.
Створіть вихідну таблицю з даними відгуків клієнтів
Ми використовуємо Набір даних про відгуки клієнтів Amazon, зручно розміщений для загального доступу в Amazon S3.
- Виконайте такий запит у редакторі запитів Athena:
- під таблиці, знайдіть нову таблицю amazon_reviews_parquet.
- У меню параметрів виберіть Завантажити розділи.
- Переглянути нову таблицю,
amazon_reviews_parquet
.
- Виконайте такий запит, щоб оцінити середню тривалість перегляду:
Середня довжина огляду становить близько 365 символів. Це дорівнює 4 одиницям Amazon Comprehend на запис (1 одиниця = 100 символів).
Визначте мову для кожного відгуку
Щоб визначити мову кожного відгуку, запустіть такий запит у редакторі запитів Athena — його виконання займає трохи більше 1 хвилини та коштує 2 долари:
Цей запит створює нову таблицю, amazon_reviews_with_language
, додавши один новий стовпець: language
. Речення LIMIT обмежує кількість записів до 5,000.
Вартість розраховується так: 5,000 (записів) x 4 (одиниць на запис) x 1 (запитів на запис) x 0.0001 $ (ціна Amazon Comprehend за одиницю) = 2 $.
Виконайте такий запит, щоб переглянути виявлені коди мов із відповідною кількістю відгуків для кожної мови:
Визначайте настрої та сутності для кожного огляду
Щоб виявити настрої, запустіть такий запит у редакторі запитів Athena — він використовує дві функції текстової аналітики, виконання займає близько 1 хвилини та коштує 4 долари:
Цей запит створює нову таблицю, amazon_reviews_with_text_analysis
з двома додатковими стовпцями: sentiment
та entities
. Речення WHERE обмежує набір результатів списком мов, які підтримують Amazon Comprehend визначення настроїв і об’єктів.
Вартість розраховується так: 5,000 (записів) x 4 (одиниць на запис) x 2 (запитів на запис) x 0.0001 $ (ціна Amazon Comprehend за одиницю) = 4 $.
Перегляньте нову таблицю та перевірте деякі значення для нової sentiment
та entities
колонки. Вони містять рядки JSON із вкладеними структурами та полями.
На наступному знімку екрана показано sentiment
деталі колонки.
На наступному знімку екрана показано деталі стовпця сутностей.
Далі ми використовуємо функції JSON в Athena, щоб підготувати ці стовпці для аналізу.
Підготуйте почуття до аналізу
Виконайте наведений нижче SQL-запит, щоб створити нову таблицю, яка містить настрої та оцінки настроїв, розгорнуті в окремі стовпці:
Попередній перегляд нового sentiment_results_final
таблицю (див. наступний знімок екрана). Чи узгоджується настрій із текстом review_body
поле? Як це співвідноситься з star_rating
? Якщо ви помітили будь-які сумнівні призначення настроїв, перевірте оцінки достовірності, щоб побачити, чи настрою було призначено низьку достовірність.
Підготувати сутності до аналізу
Виконайте наведений нижче SQL-запит, щоб створити нову таблицю, яка містить виявлені сутності, не вкладені в окремі рядки (внутрішній підзапит), з кожним полем в окремому стовпці (зовнішній запит):
Попередній перегляд вмісту нової таблиці, entities_results_final
(див. наступний знімок екрана).
Візуалізація в Amazon QuickSight (необов’язково)
Як додатковий крок ви можете візуалізувати свої результати за допомогою Amazon QuickSight. Інструкції див Крок 5. Візуалізація вихідних даних Amazon Comprehend в Amazon QuickSight.
Ви можете використовувати новий візуальний тип хмари слів для сутностей замість карти дерева. У меню діаграми хмари слів виберіть Сховати «інші» категорії.
Тепер у вас є інформаційна панель із візуалізаціями настроїв і сутностей, схожа на наведений нижче знімок екрана.
Пошук і усунення несправностей
Якщо ваш запит невдалий, перевірте Amazon CloudWatch метрики та журнали, згенеровані функцією UDF Lambda.
- На консолі Lambda знайдіть
textanalytics-udf
функції. - Вибирати Моніторинг.
Ви можете переглянути показники CloudWatch, які показують, як часто функція запускалася, як довго вона працює, як часто виникали збої тощо.
- Вибирати Перегляд журналів у CloudWatch щоб відкрити потоки журналу функцій для отримання додаткової інформації щодо усунення несправностей.
Щоб отримати додаткові відомості про перегляд метрик CloudWatch через Lambda, див Використання лямбда-консолі.
Додаткові випадки використання
Існує багато випадків використання функцій аналітики тексту SQL. Окрім прикладу, наведеного в цій публікації, зверніть увагу на таке:
- Спростіть конвеєри ETL за допомогою інкрементних запитів SQL, щоб збагатити текстові дані настроями та об’єктами, наприклад потокові потоки соціальних мереж, отримані Amazon Kinesis Data Firehose
- Використовуйте запити SQL, щоб досліджувати настрої та сутності в текстах служби підтримки клієнтів, електронних листах і зверненнях до служби підтримки
- Підготуйте набори даних, готові для дослідження, видаливши ідентифікаційну інформацію зі взаємодії з клієнтом або пацієнтом
- Стандартизуйте багато мов до однієї спільної мови
У вас можуть бути додаткові варіанти використання цих функцій або додаткові можливості, які ви хочете бачити, наприклад, такі:
- Функції SQL для виклику настроюваних моделей розпізнавання сутностей і настроюваних моделей класифікації в Amazon Comprehend
- Функції SQL для деідентифікації — розширення функцій редагування сутності та ідентифікаційної інформації для заміни сутностей альтернативними унікальними ідентифікаторами
Крім того, реалізація є відкритим вихідним кодом, що означає, що ви можете клонувати репо, змінювати та розширювати функції, як вважаєте за потрібне, і (сподіваємось) надсилати нам запити на отримання, щоб ми могли об’єднати ваші вдосконалення назад у проект і зробити його кращим для кожен.
Очищення
Після завершення цього посібника ви можете очистити всі ресурси AWS, які більше не хочете використовувати. Активні ресурси AWS можуть продовжувати стягуватися з вашого облікового запису.
- В Athena виконайте такий запит, щоб видалити базу даних і всі таблиці:
- У AWS CloudFormation видаліть стек
serverlessrepo-TextAnalyticsUDFHandler
. - Скасуйте підписку на QuickSight.
Висновок
Я показав вам, як інсталювати зразок текстової аналітики UDF Lambda для Athena, щоб ви могли використовувати прості SQL-запити для перекладу тексту за допомогою Amazon Translate, генерувати аналітику з тексту за допомогою Amazon Comprehend і редагувати конфіденційну інформацію. Сподіваюся, ви знайдете це корисним і поділіться прикладами того, як ви можете використовувати його, щоб спростити свою архітектуру та реалізувати нові можливості для свого бізнесу.
Будь ласка, поділіться з нами своїми думками в розділі коментарів або в розділі проблем проекту GitHub сховище.
Додаток: Доступна довідка про функції
У цьому розділі підсумовано надані на даний момент функції. The README файл містить додаткові відомості.
визначити мову
Ця функція використовує Amazon Comprehend BatchDetectDominantLanguage API для визначення домінуючої мови на основі перших 5,000 байт вхідного тексту.
Наступний код повертає код мови, наприклад fr для французької або en для англійської:
Наступний код повертає масив кодів мов у форматі JSON і відповідні оцінки надійності:
Визначте настрої
Ця функція використовує Amazon Comprehend BatchDetectSentiment API для визначення настрою на основі перших 5,000 байт вхідного тексту.
Наступний код повертає настрій як ПОЗИТИВНИЙ, НЕГАТИВНИЙ, НЕЙТРАЛЬНИЙ або ЗМІШАНИЙ:
Наступний код повертає об’єкт у форматі JSON, що містить виявлені настрої та оцінки достовірності для кожного значення настрою:
Виявити сутності
Ця функція використовує Amazon Comprehend DetectEntities API для ідентифікації ідентифікаційної інформації. Введення тексту довжиною понад 5,000 байт призводить до кількох викликів Amazon Comprehend API.
Наступний код повертає об’єкт у форматі JSON, що містить масив типи сутностей і значення:
Наступний код повертає об’єкт у форматі JSON, що містить масив типів сутностей ідентифікаційної інформації з їхніми значеннями, балами та зсувами символів:
Редагувати сутності
Ця функція замінює значення сутності для вказаних типів сутності на «[ENTITY_TYPE]
”. Введення тексту довжиною понад 5,000 байт призводить до кількох викликів Amazon Comprehend API. Перегляньте наступний код:
Команда повертає відредаговану версію вхідного рядка. Укажіть один або декілька типи сутностей відредагувати, надавши список дійсних, розділених комами types
у рядковому параметрі типів або ALL
редагувати всі типи.
Виявлення ідентифікаційної інформації
Ця функція використовує DetectPiiEntities API для ідентифікації ідентифікаційної інформації. Введення тексту довжиною понад 5,000 байт призводить до кількох викликів Amazon Comprehend API.
Наступний код повертає об’єкт у форматі JSON, що містить масив Типи PII сутностей і значення:
Наведений нижче код повертає об’єкт у форматі JSON, що містить масив типів сутностей ідентифікаційної інформації з їх балами та зсувами символів:
Відредагуйте ідентифікаційну інформацію
Ця функція замінює значення ідентифікаційної інформації для вказаних типів сутностей ідентифікаційної інформації на «[PII_ENTITY_TYPE]
”. Введення тексту довжиною понад 5,000 байт призводить до кількох викликів Amazon Comprehend API. Перегляньте наступний код:
Функція повертає відредаговану версію вхідного рядка. Укажіть один або декілька Типи PII сутностей відредагувати, надавши розділений комами список допустимих типів у type
рядковий параметр або ALL
редагувати всі типи.
Перекладіть текст
Ця функція перекладає текст з мови оригіналу на мову перекладу. Введення тексту довжиною понад 5,000 байт призводить до кількох викликів Amazon Translate API. Перегляньте наступний код:
Функція повертає перекладений рядок. За бажанням автоматично визначте мову оригіналу (використовуйте auto як код мови, який використовує Amazon Comprehend) і додатково вкажіть нестандартна термінологія (в іншому випадку використовуйте NULL
та цінності customTerminologyName
).
Про автора
Боб Страхан є головним архітектором рішень команди AI Services AI Services.