Tarefa: extrair expressões-chave do texto em russo. PNL do Python

O que era necessário desde o início:

  • um programa que “pesque” nomes exclusivos de produtos em um setor específico a partir de um texto bruto em russo. Texto bruto - um texto que uma pessoa escreveu, simplesmente expressando seus pensamentos e não se importando com a formação ou seleção de uma lista de palavras;
  • lista de palavras obtida automaticamente;
  • processamento manual ou automatizado mínimo para converter a lista em um conjunto de hashtags ou palavras-chave para o texto.

Acredito que muitas pessoas enfrentam o problema implicitamente todos os dias, depois de escrever ou analisar um artigo, postar, comentar, anotar, reportar, etc. Então, por minha ocupação, tive que lidar com esse problema várias vezes ao dia. Portanto, pode-se dizer que “preguiça”, no bom sentido da palavra, me levou à ideia de automação.

Agora, quando estou escrevendo este artigo, a ideia foi preservada, mas o conjunto de dados do resultado final mudou bastante:

  • Não são selecionadas palavras, mas frases-chave, incluindo palavras;
  • a lista de expressões-chave está marcada com 16 marcadores diferentes;
  • todas as palavras do texto (incluindo não-chave) são lematizadas - são fornecidas no formato inicial ou são unificadas no formato exibido;
  • cada palavra no texto possui análises adicionais relacionadas à posição no texto e ao número de repetições.

Os resultados do software Nrlpk (processamento natural da língua russa pelas chaves) preparam dados para:

  • análise de textos de uma variedade ilimitada de tópicos e indústrias (o desenvolvimento e o teste foram realizados com base em materiais industriais e complexos militares-industriais - o Complexo Industrial Militar);
  • rubrica automática, classificação, catalogação, materialização de materiais (sites on-line);
  • monitoramento e filtragem por conteúdo com configurações de resposta do sistema (serviços e sistemas de segurança em loops fechados ou online);
  • marcação multicamada de textos (AI).

Qualidade


Para não passar por todo o artigo aqueles que acreditam apenas em números, e não em palavras, e aqueles que esperam qualidade absoluta e não aceitam o outro ...

A qualidade da amostra está na faixa de 95 a 100% ao testar artigos com tamanho não superior a 3.500 palavras. A dispersão está relacionada à qualidade e complexidade da apresentação. Aqui está um exemplo de um dos artigos que participaram do teste e aqui está o resultado de sua análise automática .

É necessário remover cerca de 7-10% do intervalo de qualidade obtido, isto é, o nível real de qualidade provavelmente será de 85 a 93%. Isso se deve ao fato de que:

  • durante o processo de teste, os requisitos para os dados selecionados são alterados, os quais eu não havia percebido antes e acredito que não percebo tudo agora;
  • ao reconciliar manualmente, há minha opinião subjetiva de que o que exatamente pode ser reconhecido como chave em um artigo e o que não é - e provavelmente não corresponde à chave da chave com a opinião dos autores dos artigos.

Uma lista completa de artigos que foram testados e estatísticas detalhadas dos resultados podem ser encontradas no GitHub .

O que afetou especificamente a qualidade do resultado em cada artigo pode ser encontrado no arquivo Motivos no GitHub .

Como ler os resultados


Em cada pasta de um artigo específico que está sendo analisado, há 5 arquivos com um conjunto de dados em Unicode:

  1. words.csv - uma lista de palavras relevantes, incluindo uma lista de palavras não identificadas;
  2. keys.csv - uma lista de palavras-chave, agora contém, além das expressões marcadas, também palavras que são repetidas no texto pelo menos um número especificado de vezes - nesse caso, pelo menos 4 vezes;
  3. garbage.csv - lista de palavras não identificadas;
  4. descr_words.csv - descrição (estatística) para a lista de todas as palavras do texto;
  5. descr_keys.csv - descrição (estatística) da lista de palavras-chave;

E reason_quality.txt é uma lista (opcional) de expressões do artigo que foram selecionadas manualmente e perderam as chaves ou foram incorretas (de acordo com o autor nrlpk).

Você pode aprender a ler esses arquivos no arquivo Legend no GitHub .

O nrlpk permite obter qualquer conjunto de dados em um dos seguintes formatos:

  • Dataframe do Pandas (padrão);
  • Dicionário Python;
  • JSON
  • Arquivo CSV.

Metodologia de teste


  1. Análise de texto (automática) por software.
  2. Identificação manual (pelos olhos), manual (marcação) de expressões-chave e reconciliação da lista recebida de expressões-chave, com a lista recebida automaticamente.
  3. Cálculo da porcentagem de qualidade : o número de expressões perdidas ou com erros ortográficos incorretos + o número de palavras no lixo, para o número total de palavras no texto.

As ferramentas


O nrlpk é escrito em Python 3.7.0. Já no processo de desenvolvimento do futuro software nrlpk, dois requisitos obrigatórios apareceram:

  • escolha expressões, não palavras - incluindo palavras;
  • a presença de um dicionário de termos especializados da indústria.

Esses requisitos puseram em questão o uso de NLTK e pymorphy2, o que poderia resolver alguns dos desafios.

Para remover dúvidas, a seleção manual foi feita de uma seleção de textos da mídia extraídos do maior agregador de notícias em língua russa sobre o complexo industrial militar - VPK.Name . A análise de rotulagem revelou:

  • uma camada inteira de dados que não deve estar sujeita a tokenização e lematização palavra por palavra;
  • a impossibilidade em muitos casos de tokenização, de acordo com as frases, a uma séria transformação do texto para corrigir imprecisões gramaticais que os autores permitem em mais de 80% dos artigos. Essas imprecisões de maneira alguma afetam a percepção do texto por uma pessoa, mas afetam muito significativamente a percepção e a interpretação desse texto pela máquina.

Além disso, já nesse estágio, a necessidade de coletar e armazenar uma variedade de informações estatísticas sobre os objetos que estão sendo processados ​​tornou-se aparente.

Diante desses fatores, o Pandas foi escolhido como o pacote básico para trabalhar com dados, o que, além das tarefas descritas acima, possibilitou a realização da lematização de lotes.

Após analisar os dicionários disponíveis do idioma russo, o OpenCorpora foi tomado como base, que , a propósito, também é usada na pymorphy2.
Foi submetido à transformação em um formato conveniente para trabalhar com o Pandas, após o qual foram selecionados os seguintes dicionários:

  • grande - toda a base de palavras;
  • palavrões - palavras que são excluídas da análise do texto devido à falta de significância;
  • especial - um dicionário de palavras especializadas (da indústria). Os nomes próprios não estão incluídos no dicionário: nomes, nomes, sobrenomes, endereços, produtos, produtos, empresas, pessoas, etc. Esta é uma decisão fundamental e informada, pois em qualquer setor / direção viva, tal abordagem exigiria monitoramento constante e adição manual de dicionários, o que arruina a idéia de facilitar o trabalho através da automação;

Os dicionários são salvos em Unicode em um formato de texto simples para gerenciamento de qualquer programa externo.

Como a base dos dicionários em nrlpk e pymorphy2 é idêntica, a designação de partes do discurso (grama) é idêntica. O número de marcadores (gramáticas não padronizadas) no momento é 16 e a maioria deles, se as expressões marcadas não consistirem em várias palavras, além do marcador, também terão uma designação da parte da fala do grama básico. A designação de marcadores correspondentes (gramas não padronizados) com pymorphy2 é idêntica, em especial:

  • NUMB é um número;
  • ROMN é um número romano;
  • UNKN - o token não pôde ser analisado.

A propósito, para expressões que contêm dados numéricos, em nrlpk, além de NUMB e ROMN, os seguintes marcadores são usados ​​adicionalmente:

  • NUSR - a expressão contém um ou mais dados numéricos;
  • MATEMÁTICA - A expressão contém uma fórmula matemática.

O que é uma expressão de palavra-chave com várias palavras? Por exemplo, NUSR:

  • se o texto for 25 de fevereiro de 2020, a expressão-chave será 25 de fevereiro de 2020, com o lema “02.25.2020”, o grama “NUSR” e o marcador NUSR;
  • no entanto, se o texto indicar “25 de fevereiro de 2020”, a expressão-chave será “25 de fevereiro de 2020”, com o lema “2f2g”, o grama “WIQM” e o marcador WIQM;
  • se houver 25 toneladas no texto, na chave veremos “25 toneladas”, com o lema “2t”, onde “NUSR” também será usado como grama e marcador.

Por que você precisa descrever palavras e chaves


Inicialmente, era necessário verificar a operação dos algoritmos nrlpk - se as palavras foram perdidas, se houve uma união desnecessária, qual a proporção de chaves no texto etc.

Mas como o software estava sendo depurado, algumas "regularidades" começaram a aparecer, cuja identificação, como tarefa, não foi colocada no nrlpk:

  • identificação de palavras escritas com erros ortográficos;
  • identificação de textos com um estilo ruim, ruim -%> 35% (observações práticas como resultado de testes);
  • identificação de textos alvo (foco estreito, posicionamento claro) - chaves% <5 sem chaves numéricas (observações práticas como resultado de testes);
  • identificação de textos que não estão sujeitos a tópicos do setor - skeys-% <1.

Uma análise da combinação mútua de indicadores estatísticos pode não ser menos interessante, por exemplo:

  • identificação de textos de "amplo escopo" - chaves -%> 45% com ukeys-% tendendo a chaves -%.

Por que está tudo escrito


O nrlpk está pronto para trabalhar com os indicadores de qualidade atuais para o processamento de textos em russo, mas não é fornecido como um serviço. O autor tem orientações claras e compreensíveis de desenvolvimento para aumentar o percentual de qualidade e estabilizar esse percentual. Para desenvolver essa tarefa, é necessário um investidor estratégico e / ou um novo detentor dos direitos autorais, pronto para o desenvolvimento do projeto, de acordo com as metas estabelecidas.

PS


Os rótulos para este texto (inicial - em Habré um pouco alterado) (listados abaixo) são gerados automaticamente pelo nrlpk com os seguintes parâmetros:

  • Não reconheça como chaves as expressões com dados numéricos;
  • reconhecer como teclas as palavras repetidas no texto pelo menos 8 vezes.

Dados detalhados sobre o resultado do processamento do nrlpk deste artigo podem ser encontrados no GitHub .

Postada por: avl33

Source: https://habr.com/ru/post/pt468141/


All Articles