Codifique propriedades de texto multilíngues no Amazon Neptune para treinar modelos preditivos PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Codifique propriedades de texto multilíngue no Amazon Neptune para treinar modelos preditivos

Amazon Netuno ML é um recurso de aprendizado de máquina (ML) de Amazon Netuno que ajuda você a fazer previsões precisas e rápidas sobre os dados do gráfico. Sob o capô, o Neptune ML usa Graph Neural Networks (GNNs) para aproveitar simultaneamente a estrutura do gráfico e as propriedades de nó/borda para resolver a tarefa em questão. Os métodos tradicionais usam apenas propriedades e nenhuma estrutura de grafo (por exemplo, XGBoost, Redes Neurais), ou apenas estrutura de grafo e nenhuma propriedade (por exemplo, node2vec, Label Propagation). Para manipular melhor as propriedades do nó/borda, os algoritmos de ML exigem que os dados sejam dados numéricos bem comportados, mas os dados brutos em um banco de dados podem ter outros tipos, como texto bruto. Para fazer uso desses outros tipos de dados, precisamos de etapas de processamento especializadas que os convertam de seu tipo nativo em dados numéricos, e a qualidade dos resultados de ML depende fortemente da qualidade dessas transformações de dados. Texto bruto, como frases, estão entre os tipos mais difíceis de transformar, mas o progresso recente no campo do Processamento de Linguagem Natural (PLN) levou a métodos fortes que podem lidar com texto proveniente de vários idiomas e uma ampla variedade de tamanhos.

A partir da versão 1.1.0.0, o Neptune ML suporta vários codificadores de texto (texto_fasttext, texto_sbert, texto_palavra2vec e text_tfidf), que traz os benefícios dos avanços recentes em NLP e permite suporte para propriedades de texto multilíngue, bem como requisitos adicionais de inferência em torno de idiomas e comprimento de texto. Por exemplo, em um caso de uso de recomendação de emprego, os postos de trabalho em diferentes países podem ser descritos em diferentes idiomas e a extensão das descrições de cargos varia consideravelmente. Além disso, o Neptune ML suporta um auto opção que escolhe automaticamente o melhor método de codificação com base nas características do recurso de texto nos dados.

Neste post, ilustramos o uso de cada codificador de texto, comparamos suas vantagens e desvantagens e mostramos um exemplo de como escolher os codificadores de texto certos para uma tarefa de recomendação de trabalho.

O que é um codificador de texto?

O objetivo da codificação de texto é converter as propriedades de borda/nó baseadas em texto no Neptune em vetores de tamanho fixo para uso em modelos de aprendizado de máquina downstream para tarefas de classificação de nó ou previsão de link. O comprimento do recurso de texto pode variar muito. Pode ser uma palavra, frase, frase, parágrafo ou até mesmo um documento com várias frases (o tamanho máximo de uma única propriedade é 55 MB no Neptune). Além disso, os recursos de texto podem estar em diferentes idiomas. Também pode haver frases que contenham palavras em vários idiomas diferentes, que definimos como mudança de código.

A partir da versão 1.1.0.0, o Neptune ML permite que você escolha entre vários codificadores de texto diferentes. Cada codificador funciona de forma ligeiramente diferente, mas tem o mesmo objetivo de converter um campo de valor de texto do Neptune em um vetor de tamanho fixo que usamos para construir nosso modelo GNN usando o Neptune ML. Os novos codificadores são os seguintes:

  • texto_fasttext (novo) – Usos texto rápido codificação. FastText é uma biblioteca para aprendizagem de representação de texto eficiente. text_fasttext é recomendado para recursos que usam um e apenas um dos cinco idiomas suportados pelo fastText (inglês, chinês, hindi, espanhol e francês). o text_fasttext método pode opcionalmente tomar o max_length campo, que especifica o número máximo de tokens em um valor de propriedade de texto que será codificado, após o qual a string será truncada. Você pode considerar um token como uma palavra. Isso pode melhorar o desempenho quando os valores da propriedade de texto contêm strings longas, porque se max_length não for especificado, fastText codifica todos os tokens, independentemente do comprimento da string.
  • texto_sbert (novo) – Usa a Frase BERT (SBERT) método de codificação. SBERT é um tipo de método de incorporação de sentenças usando os modelos de aprendizagem de representação contextual, BERT-Networks. text_sbert é recomendado quando o idioma não é suportado por text_fasttext. O Neptune suporta dois métodos SBERT: text_sbert128, que é o padrão se você apenas especificar text_sbert e text_sbert512. A diferença entre eles é o número máximo de tokens em uma propriedade de texto que são codificados. o text_sbert128 codificação codifica apenas os primeiros 128 tokens, enquanto text_sbert512 codifica até 512 tokens. Como resultado, usando text_sbert512 pode exigir mais tempo de processamento do que text_sbert128. Ambos os métodos são mais lentos do que text_fasttext.
  • texto_palavra2vec - Usos Palavra2Old algoritmos originalmente publicados pelo Google para codificar texto. Word2Vec suporta apenas inglês.
  • text_tfidf – Usa uma frequência de documento inversa de frequência de termo (TF-IDF) vetorizador para codificar texto. A codificação TF-IDF suporta recursos estatísticos que as outras codificações não suportam. Ele quantifica a importância ou relevância das palavras em uma propriedade de nó entre todos os outros nós.

Observe que text_word2vec e text_tfidf eram suportados anteriormente e os novos métodos text_fasttext e text_sbert são recomendados sobre os métodos antigos.

Comparação de diferentes codificadores de texto

A tabela a seguir mostra a comparação detalhada de todas as opções de codificação de texto suportadas (text_fasttext, text_sbert e text_word2vec). text_tfidf não é um método de codificação baseado em modelo, mas sim uma medida baseada em contagem que avalia a relevância de um token (por exemplo, uma palavra) para os recursos de texto em outros nós ou bordas, portanto, não incluímos text_tfidf para comparação. Recomendamos o uso text_tfidf quando você deseja quantificar a importância ou relevância de algumas palavras em um nó ou propriedade de borda entre todas as outras propriedades de nó ou borda.)

. . texto_fasttext texto_sbert texto_palavra2vec
Capacidade do modelo Idioma suportado Inglês, chinês, hindi, espanhol e francês Mais de 50 idiomas Inglês
Pode codificar propriedades de texto que contenham palavras em diferentes idiomas Não Sim Não
Suporte de comprimento máximo Sem limite máximo de comprimento Codifica a sequência de texto com o comprimento máximo de 128 e 512 Sem limite máximo de comprimento
Custo de tempo Carregando Aproximadamente 10 segundos Aproximadamente 2 segundos Aproximadamente 2 segundos
Inferência pomposidade Devagar Médio

Observe as seguintes dicas de uso:

  • Para valores de propriedade de texto em inglês, chinês, hindi, espanhol e francês, text_fasttext é a codificação recomendada. No entanto, ele não pode lidar com casos em que a mesma frase contém palavras em mais de um idioma. Para outras línguas além das cinco que fastText suporta, usa text_sbert codificação.
  • Se você tiver muitas strings de texto de valor de propriedade maiores que, por exemplo, 120 tokens, use o max_length campo para limitar o número de tokens em cada string que text_fasttext codifica.

Para resumir, dependendo do seu caso de uso, recomendamos o seguinte método de codificação:

  • Se suas propriedades de texto estiverem em um dos cinco idiomas suportados, recomendamos usar text_fasttext devido à sua rápida inferência. text_fasttext são as opções recomendadas e você também pode usar text_sbert nas duas exceções seguintes.
  • Se suas propriedades de texto estiverem em idiomas diferentes, recomendamos usar text_sbert porque é o único método suportado que pode codificar propriedades de texto contendo palavras em vários idiomas diferentes.
  • Se suas propriedades de texto estiverem em um idioma que não seja um dos cinco idiomas suportados, recomendamos usar text_sbert porque suporta mais de 50 idiomas.
  • Se o comprimento médio de suas propriedades de texto for maior que 128, considere usar text_sbert512 or text_fasttext. Ambos os métodos podem usar codificar sequências de texto mais longas.
  • Se suas propriedades de texto estiverem apenas em inglês, você pode usar text_word2vec, mas recomendamos o uso text_fasttext por sua rápida inferência.

Demonstração de caso de uso: tarefa de recomendação de trabalho

O objetivo da tarefa de recomendação de emprego é prever para quais empregos os usuários se candidatarão com base em seus aplicativos anteriores, informações demográficas e histórico de trabalho. Esta postagem usa um conjunto de dados Kaggle aberto. Construímos o conjunto de dados como um gráfico do tipo três nós: trabalho, usuário e cidade.

Um trabalho é caracterizado por seu título, descrição, requisitos, cidade localizada e estado. Um usuário é descrito com as propriedades de especialização, tipo de graduação, número de histórico de trabalho, número total de anos de experiência de trabalho e muito mais. Para este caso de uso, o título do trabalho, a descrição do trabalho, os requisitos do trabalho e as especialidades estão todos na forma de texto.

No conjunto de dados, os usuários têm as seguintes propriedades:

  • Estado – Por exemplo, CA ou 广东省 (chinês)
  • Principal – Por exemplo, Gestão de Recursos Humanos ou Lic Cytura Fisica (espanhol)
  • Tipo de grau – Por exemplo, bacharelado, mestrado, doutorado ou nenhum
  • Contagem de histórico de trabalho – Por exemplo, 0, 1, 16 e assim por diante
  • Total de anos de experiência – Por exemplo, 0.0, 10.0 ou NAN

Os trabalhos têm as seguintes propriedades:

  • Título – Por exemplo, Assistente Administrativo ou Lic Cultura Física (espanhol).
  • Descrição – Por exemplo, “Este cargo de Assistente Administrativo é responsável por desempenhar uma variedade de funções de apoio administrativo e administrativo nas áreas de comunicação, …” O número médio de palavras em uma descrição é de cerca de 192.2.
  • Requisitos – Por exemplo, “REQUISITOS DO TRABALHO: 1. Atenção aos detalhes; 2.Capacidade de trabalhar em um ambiente de ritmo acelerado;3.Faturamento…”
  • Estado: – Por exemplo, CA, NY e assim por diante.

O tipo de nó cidade como Washington DC e Orlando FL só tem o identificador para cada nó. Na seção a seguir, analisamos as características de diferentes recursos de texto e ilustramos como selecionar os codificadores de texto adequados para diferentes propriedades de texto.

Como selecionar diferentes codificadores de texto

Para o nosso exemplo, o Principal e Título as propriedades estão em vários idiomas e têm sequências de texto curtas, então text_sbert é recomendado. O código de exemplo para o parâmetros de exportação é o seguinte. Para o text_sbert tipo, não há outros campos de parâmetro. Aqui nós escolhemos text_sbert128 exceto text_sbert512, porque o comprimento do texto é relativamente menor que 128.

"additionalParams": {
    "neptune_ml": {
        "version": "v2.0",
        "targets": [ ... ],
        "features": [
            {
                "node": "user",
                "property": "Major",
                "type": "text_sbert128"
            },
            {
                "node": "job",
                "property": "Title",
                "type": "text_sbert128",
            }, ...
        ], ...
    }
}

A Descrição e Requisitos As propriedades geralmente estão em sequências de texto longo. O comprimento médio de uma descrição é de cerca de 192 palavras, que é maior do que o comprimento máximo de entrada de text_sbert (128). Podemos usar text_sbert512, mas pode resultar em inferência mais lenta. Além disso, o texto está em um único idioma (inglês). Portanto, recomendamos text_fasttext com o en valor de idioma devido à sua inferência rápida e comprimento de entrada não limitado. O código de exemplo para o parâmetros de exportação é o seguinte. o text_fasttext codificação pode ser personalizada usando língua e comprimento máximo. O language valor é necessário, mas max_length é opcional.

"additionalParams": {
    "neptune_ml": {
        "version": "v2.0",
        "targets": [ ... ],
        "features": [
            {
                "node": "job",
                "property": "Description",
                "type": "text_fasttext",
                "language": "en",
                "max_length": 256
            },
            {
                "node": "job",
                "property": "Requirements",
                "type": "text_fasttext",
                "language": "en"
            }, ...
        ], ...
    }
}

Mais detalhes dos casos de uso de recomendação de trabalho podem ser encontrados no Tutorial do notebook Netuno.

Para fins de demonstração, selecionamos um usuário, ou seja, o usuário 443931, que possui mestrado em 'Gestão e Recursos Humanos'. O usuário se candidatou a cinco empregos diferentes, intitulados “Gerente de Recursos Humanos (RH)”, “Generalista de RH”, “Gerente de Recursos Humanos”, “Administrador de Recursos Humanos” e “Especialista Sênior de Folha de Pagamento”. Para avaliar o desempenho da tarefa de recomendação, excluímos 50% dos trabalhos de aplicação (as bordas) do usuário (aqui excluímos “Administrador de Recursos Humanos” e “Gerente de Recursos Humanos (RH)) e tentamos prever os melhores 10 vagas para as quais este usuário provavelmente se candidatará.

Depois de codificar os recursos do trabalho e os recursos do usuário, realizamos uma tarefa de previsão de link treinando um modelo de rede convolucional de grafos relacionais (RGCN). O treinamento de um modelo Neptune ML requer três etapas: processamento de dados, treinamento de modelo e criação de endpoint. Após a criação do endpoint de inferência, podemos fazer recomendações para o usuário 443931. Dos 10 principais trabalhos previstos para o usuário 443931 (ou seja, "Generalista de RH", "Gerente de Recursos Humanos (RH)", "Especialista em Folha de Pagamento Sênior", " Administrador de Recursos”, “Analista de RH”, et al.), observamos que os dois trabalhos excluídos estão entre as 10 previsões.

Conclusão

Neste post, mostramos o uso dos codificadores de texto recém-suportados no Neptune ML. Esses codificadores de texto são simples de usar e podem suportar vários requisitos. Resumindo,

  • text_fasttext é recomendado para recursos que usam um e apenas um dos cinco idiomas suportados por text_fasttext.
  • text_sbert é recomendado para texto que text_fasttext não suporta.
  • text_word2vec suporta apenas inglês e pode ser substituído por text_fasttext em qualquer cenário.

Para obter mais detalhes sobre a solução, consulte o GitHub repo. Recomendamos usar os codificadores de texto nos dados do gráfico para atender às suas necessidades. Você pode simplesmente escolher um nome de codificador e definir alguns atributos de codificador, mantendo o modelo GNN inalterado.


Sobre os autores

Codifique propriedades de texto multilíngues no Amazon Neptune para treinar modelos preditivos PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.Jian Zhang é um cientista aplicado da AWS AI Research and Education (AIRE). Ela trabalha na solução de aplicativos do mundo real usando algoritmos de aprendizado de máquina, especialmente linguagem natural e problemas relacionados a gráficos.

Carimbo de hora:

Mais de Aprendizado de máquina da AWS