Esta é uma postagem convidada por Swapan Rajdev, Co-Fundador e CTO, Haptik Inc.
Dadas as vidas ocupadas que todos vivemos, nossas listas de tarefas continuam crescendo, e torna-se cada vez mais difícil acompanhar todas as coisas que precisamos para realizar diariamente. De lembrar as nossas reuniões para certificar-se de que compramos o nosso próximo bilhete de voo, lembramo-nos de beber bastante água para garantir que chegamos à academia, nossas listas nunca terminam, e sua manutenção fica cansativa.
Haptik é o primeiro assistente pessoal da Índia. Os usuários podem usar o aplicativo para planejar viagens, verificar os voos, reservar táxis e definir lembretes. E de todos os recursos diferentes, o mais importante e freqüentemente usado é o recurso Lembretes. As pessoas usam o Haptik para configurar chamadas de despertador, configurar lembretes para beber água, chamar pessoas em momentos diferentes, enviar saudações a outras pessoas para diferentes ocasiões e muito mais. Através do recurso de lembretes, os usuários receberão notificações no aplicativo, juntamente com uma chamada telefônica no momento solicitado, relacionando a mensagem de lembrete.
Nesta publicação, abordaremos como usamos o aprendizado de máquina e o texto para fala (TTS) para definir lembretes para os usuários – para chamá-los no momento dado para lembrá-los de suas tarefas. Vamos abordar como a Amazon Polly nos ajudou a fazer chamadas personalizadas aos nossos usuários e nos ajudou a dimensionar nosso recurso de lembretes para milhões de usuários.
Para obter qualquer coisa feita pelo assistente pessoal, o usuário entra no aplicativo Haptik e envia uma mensagem ao bot. Toda mensagem no nosso sistema passa por um canal de mensagens no qual tentamos detectar o seguinte:
No final deste pipeline, se o bot tiver todas as informações, ele vai adiante e completa a tarefa. Caso contrário, ele responde com perguntas relevantes para reunir todas as informações.
Além deste pipeline básico, temos muitos outros algoritmos que usam a Aprendizagem Profunda para aprender com conversas históricas para poderem completar as tarefas do usuário sem a intervenção.
Para lembrar aos usuários sobre suas tarefas, enviamos-lhes uma notificação no aplicativo, juntamente com uma chamada telefônica. Embora o Haptik use técnicas de notificação comumente usadas para lembrar os usuários, acreditamos que chamar as pessoas trabalha de forma mais efetiva devido a alguns motivos:
Primeiro, na era do smartphone de hoje, todos estamos passando por uma sobrecarga de notificação de qualquer outro aplicativo, o que leva a perder algumas notificações importantes. Um telefonema de um número desconhecido ou Haptik é mais eficaz do que um alarme regular que geralmente recebe o tratamento de sono.
Em segundo lugar, podemos fornecer uma experiência de usuário muito melhor, alterando o conteúdo e a voz da chamada com base no tipo de tarefa de lembrete. Por exemplo, para as chamadas de despertar matinais que enviamos, usamos uma voz suave e calma. Ocasionalmente, adicionamos uma citação motivacional no final da chamada para garantir que o usuário acorda agradavelmente e seja carregado. Implementar esses casos de uso TTS é simples, fácil e confiável com o Amazon Polly.
Lembretes na Haptik é um dos domínios mais complexos, onde muitas tecnologias diferentes se juntam para garantir que possamos fazer chamadas para nossos usuários de forma oportuna e personalizada. Para configurar com êxito um lembrete para o usuário, capturamos os seguintes pontos de dados do usuário:
Toda essa informação é usada para derivar metadados e é passada para um agendador cujo trabalho é chamar o usuário. O snippet de código a seguir mostra como um lembrete é criado:
def create_reminder(user, reminder_task, date, time, repeat_pattern=None): is_valid = check_reminder_date_time_validity(date, time, repeat_pattern) if not is_valid: Return False notification_content = get_notification_content_for_reminder(user, reminder_Task) call_script
= get_call_script_for_reminder (user, reminder_task) audio_url = generate_audio_using_polly (usuário, call_script) return schedule_job (user, audio_url, notification_content
Antes de agendar um lembrete, primeiro buscamos o script que queremos que a Amazon Polly sintetize. Para isso, temos uma função que busca o script de chamada com base no tipo de lembrete e no usuário.
Def get_call_script_for_reminder(user, reminder_task): all_call_scripts = CallScriptStore.objects.values('script').filter(task_name=reminder_task.name) Call_script = random.choice(all_call_sciprts) return call_script.format(**{user_name: user.name})
Exemplo de saída:
Suba e brilha, Swapan! É um lindo dia - Hora de acordar!
Depois de termos o script, chamamos o Amazon Polly para converter o texto em voz e carregar o arquivo de áudio para o Amazon S3, que podemos usar mais tarde para jogar durante a chamada. Use o seguinte código para criar o arquivo de áudio (mp3) e faça o upload para o Amazon S3:
from boto3 import Session Def generatea_audio_using_polly(user, call_Script): session = Session() polly = session.client("polly", region_name=POLLY_REGION) response = polly.synthesize_speech(Text=content, OutputFormat="mp3", VoiceId=get_polly_voice_for_task(reminder_ask)) with closing(response["AudioStream"]) as stream: with open(mp3_file_path, "wb") as file: file.write(stream.read()) # Upload to S3 s3 = session.client("s3", region_name=AUDIO_BUCKET_REGION) s3.upload_file( mp3_file_path, AUDIO_BUCKET_NAME, “file.mp3" ) url = "https://s3-{0}.amazonaws.com/{1}/{2}/{3}".format( AUDIO_BUCKET_REGION, AUDIO_BUCKET_NAME, “file.mp3”) Return url
No momento da lembrança real, nosso sistema de agendador faz uma chamada de API para o nosso parceiro de chamada usando o número de celular e o URL do script de chamada. Uma chamada é então feita ao usuário durante o qual o script de chamada é reproduzido; Isso completa o lembrete. Recebemos muitos comentários positivos sobre o conteúdo e o comportamento da chamada. Em qualquer dia, enviamos mais de 100 mil lembretes.
Usando o Amazon Polly, você pode gerar scripts de chamadas em 51 vozes diferentes em 25 idiomas. Isso ajuda você a fornecer uma ampla gama de experiências de usuários. Na função anterior ao gerar o script de chamada, chamamos uma função ` get_polly_voice_for_task` para gerar um voiceId. Você pode obter as diferentes vozes suportadas pelo Amazon Polly usando o seguinte código:
session = Session() polly = session.client("polly", region_name=POLLY_REGION) response = polly.describe_voices() voice_ids = [item['Id'] for item in response['Voices']]
Como a maioria de nossa audiência está na Índia, usamos “Raveena” (voz indiana feminina inglesa) freqüentemente porque essa voz ressoa com muitos de nossos usuários.
Experimentamos vários serviços diferentes para o TTS, mas a Amazon Polly foi a líder por milhas. Algumas das razões pelas quais escolhemos Amazon Polly são:
Velocidade de desenvolvimento e iteração – O Amazon Polly API é simples e muito robusto. Demorou menos de um dia para implementar as chamadas da Amazon Polly API, e nós criamos nosso sistema de uma forma em que quase todas as configurações podem ser alteradas de imediato, sem a necessidade de alterações de código. Temos uma ferramenta para mudar os scripts de chamada e uma ferramenta para mudar as diferentes vozes. Isso nos permitiu experimentar e executar testes A / B com muitos scripts e vozes diferentes antes de termos ficado satisfeitos com a experiência.
Escalabilidade – Com base na arquitetura descrita anteriormente, criamos o script de chamada com antecedência e armazenamos no Amazon S3 para que, quando tivermos que fazer a chamada, o áudio já está pronto. Isso nos ajudou a dimensionar e acionar milhares de chamadas ao mesmo tempo, sem dificultar a experiência do usuário.
Confiabilidade e monitoramento – A Amazon fornece muitas ferramentas excelentes para monitorar nossos pedidos do Amazon Polly. Experimentamos cerca de 100% de confiabilidade e disponibilidade até agora. Nós nunca enfrentamos um tempo de inatividade com a Amazon Polly até agora. Para estar no lado seguro, criamos alarmes para sair sempre que tivermos mais de 5 pedidos falhados em um período de 5 minutos. Você pode configurar facilmente alarmes usando o Amazon CloudWatch, que depois sincronizamos com o PagerDuty.
mqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2017/12/05/haptik-4.gif “data-image-enhancer =” maior que 645 “/>
Latência – Amazon CloudWatch oferece algumas ótimas maneiras de monitorar diferentes métricas da Amazon Polly. Se você olhar para os seguintes gráficos, o tempo médio em que um arquivo de áudio da Amazon Polly é criado é de 17 ms para uma média de 85 caracteres por arquivo. Isso é muito rápido e nos ajuda a oferecer uma experiência de usuário muito boa em milhares de chamadas simultâneas.
Em uma base diária, nós, na Haptik, tentamos facilitar a vida dos nossos usuários, fornecendo uma maneira simples de fazer as coisas. No futuro, planejamos adicionar suporte para vários idiomas e a vantagem de usar o Amazon Polly é que ele já suporta 24 idiomas diferentes. Além disso, estamos sempre ajustando e tocando com nossos algoritmos de Aprendizado de Máquinas para poder entender mais dos usuários. Juntamente com isso, estamos encontrando maneiras diferentes de usar a tecnologia para ajudar a servir melhor os nossos usuários. Esperamos que você tenha achado este post útil.
Certifique-se de ler o Haptik Case Study, ” Haptik oferece suporte a 30% de aumento mensal em downloads de aplicativos usando o AWS “.
Esta é uma postagem de blog convidada por Swapan Rajdev, Co-Fundador e CTO, Haptik Inc. Nas suas próprias palavras, “Haptik é uma empresa especializada em chatbots, com o produto principal sendo o aplicativo de assistente pessoal Android e iOS com o mesmo nome . Além do aplicativo para consumidores, também trabalhamos com empresas para ajudar a criar soluções de chatbots para atendimento ao cliente, geração de leads, marketing e muito mais “.