Você pode imaginar quantos documentos regulatórios por hora um advogado corporativo deve examinar e quais consequências o descuido dele pode levar? Um colega pobre advogado deve ler todos os contratos, especialmente se não houver um modelo padrão para ele, o que acontece com frequência.
Olhando nos olhos cansados de nosso advogado corporativo, decidimos criar um serviço que encontrará problemas nos documentos e os sinalizará ao advogado cochilando. Como resultado, criamos uma solução com a agregação de conhecimento em uma certa base de contratos e dicas para advogados, que deve receber atenção especial. Claro, não sem mágica. Magia matemática chamada Anomaly Detection.
Basicamente, as abordagens de detecção de anomalias são usadas para analisar o comportamento de uma variedade de equipamentos para detectar falhas ou no setor bancário para determinar fraudes. E tentamos aplicar esses algoritmos para a análise de documentos legais. Siga o corte para descobrir como fizemos.
1. Lidamos com informações estruturadas
Temos sorte porque Os textos dos contratos são suficientemente estruturados, secos e compilados de acordo com determinados modelos. Para trabalhar no projeto, foi proposta a idéia de implementar um protótipo baseado em contratos e contratos do site zakupki.gov.ru (recebemos 200.000 documentos). Em 170.000 contratos, conseguimos identificar a estrutura: preâmbulo, capítulos, parágrafos e anexos do contrato, levando em consideração as palavras-chave, posição no texto e numeração.
2. Vários tipos de contratos
É necessário levar em consideração o fato de que os contratos podem ser de tipos diferentes. Todos eles diferem muito em conteúdo, assunto do contrato, capítulos principais, etc. Para otimizar a análise de cada tipo de contrato, é necessário realizar trabalhos sobre sua classificação ou agrupamento.
Talvez você já saiba quais tipos de contratos estão presentes no seu banco de dados e saiba os sinais pelos quais eles podem ser determinados. No nosso caso, temos um corpo bruto de contratos sem informações adicionais sobre cada contrato e sem nenhuma premissa sobre a classificação dos contratos de aquisição. Portanto, fomos forçados a recorrer ao agrupamento de nossa base de contratos.
Você pode padronizar o cluster usando o vetor de apresentação de documento tf-idf, mas decidimos tentar o algoritmo Doc2Vec, apenas por diversão. Usando o algoritmo Doc2Vec, os contratos foram convertidos em vetores e os vetores de contrato resultantes foram enviados para a entrada do algoritmo de agrupamento. Utilizamos o algoritmo K-means para agrupar vetores. Como a similaridade é geralmente medida usando a distância do cosseno, usamos em vez da distância euclidiana.
Depois de receber 20 grupos de documentos, era necessário verificar a qualidade do cluster. Como não temos nenhuma classificação de contratos, não podemos comparar os clusters resultantes com a partição existente. Então decidimos olhar para as palavras que descrevem o cluster. Para fazer isso, pegamos os itens "Assunto do Contrato" para cada cluster, removemos palavras de parada, números e palavras encontradas na maioria dos clusters. Em seguida, selecionamos as 5 palavras mais comuns para cada cluster como palavras-chave. De maneira tão direta, pode-se avaliar subjetivamente a qualidade do agrupamento.
Exemplos de palavras que descrevem clusters:
- inquilino, proprietário, apartamento, aluguel, desenvolvedor
- competência, ensino, educacional, acadêmico, em período integral
- empreiteiro geral, subempreiteiro, construção geral, designer, planejamento urbano
- farmácia, quarentena, despesa, fitossanitária, hermética
- detetive, segurança, supressão, ansiedade, ofensa
- licenciado, sublicenciado, filme, licenciante, retransmissão
- mutuário, compromisso, credor, empréstimo, promotor
- centralizado, fornecimento de energia, intrazona, encanamento, esgoto
3. Que anomalias podemos encontrar nos contratos
Vamos determinar quais casos consideraremos anormais e o que podemos fazer com eles. Identificamos os seguintes cenários:
- Uma cláusula extra foi adicionada ao contrato que nunca havia sido vista neste contexto antes. É necessário chamar a atenção de um advogado para ele.
- Não há cláusula no contrato que foi encontrada anteriormente em tais contratos. Devemos aconselhar o advogado a adicioná-lo.
- Um parágrafo é semelhante a algum ponto da história, mas, de alguma forma, é reformulado, algumas palavras são adicionadas ou excluídas. Você pode informar o advogado e aconselhá-lo a editar.
4. De que forma enviar contratos
Como já mencionado, o contrato consiste em capítulos, os capítulos são divididos em parágrafos, cada parágrafo pode conter parágrafos, etc. Para dividir o contrato em capítulos e parágrafos, levamos em conta a numeração, as transferências, as palavras-chave: “Capítulo”, “Artigo” etc. Cada item consiste em uma ou mais frases. Para dividir um item em frases, foi usado o sent_tokenize do módulo nltk.tokenize.
O contrato em si contém vários capítulos globais, cuja essência e conteúdo podem ser encontrados pelos títulos: o assunto do contrato, os direitos e as obrigações das partes, o preço e o procedimento de liquidação ... Tentamos combinar os capítulos com os mesmos títulos e trabalhar com diferentes capítulos independentemente. Os títulos dos capítulos são frequentemente reformulados, têm erros de digitação ou sinais de pontuação extras. Para aumentar o tamanho dos grupos de capítulos, combinamos os títulos próximos à distância de Levenshtein em um grupo.
Um dos problemas que podemos encontrar definitivamente é o enorme volume de entidades nomeadas em contratos, que geralmente são únicos e podem ser confundidos com uma anomalia. Existem muitas entidades nos contratos, como nomes, nomes de empresas, datas, endereços etc., que variam de contrato para contrato. É necessário encontrar e eliminar essas entidades do contrato, ou seja, traga o contrato para algum formulário de modelo. Tivemos sorte com o conjunto de dados, porque no descarregamento de contratos, havia uma grande proporção de contratos-modelo, denominados entidades nos quais são substituídos por sublinhados. Identificamos entre quais sublinhados de frases geralmente ocorrem para encontrar essas frases em documentos completos e remover delas as entidades nomeadas. É claro que dessa maneira não excluímos todas as entidades nomeadas. Portanto, mais uma vez percorremos o casco com a biblioteca Natasha e excluímos as entidades que ela encontrou.
5. Definição de cláusulas anormais no contrato
Já conseguimos separar os contratos por tipo usando clustering e conseguimos identificar grupos de capítulos semelhantes. Agora, usando o conhecimento acumulado sobre uma determinada cláusula de um determinado tipo de contrato, podemos entender o que precisa ser corrigido no atual. Vamos calcular a probabilidade de sua anomalia para cada sentença do capítulo.
Para cada grupo de capítulos, armazenamos todas as ofertas que encontramos em nosso conjunto de documentos de treinamento das compras do Estado. Porque existem muitos deles, para cada grupo de capítulos o modelo Word2Vec foi treinado e cada sentença está associada a um vetor de soma ponderada (por tf-idf) dos vetores das palavras incluídas nele. Além disso, os vetores de frases foram divididos em grupos de maneira semelhante à divisão de vetores para documentos.
Agora, quando uma proposta nos chega, determinamos de qual cluster de contratos é, de qual grupo de capítulos, de qual cluster de propostas está mais próximo e nesse cluster encontramos o mais próximo. A distância para a oferta mais próxima pode ser considerada como uma medida de quão anormal é essa oferta. Se a distância até a oferta mais próxima for zero, nossa oferta não será anormal. Com o aumento dessa distância, duvidamos cada vez mais que a proposta não contenha anomalias. Provavelmente algo está errado com ele.
6. O que fazer com os itens que estão faltando
Nós descobrimos como encontrar pontos anômalos no contrato, mas não aprendemos como encontrar anomalias na forma de sentenças ou pontos ausentes. Essa anomalia pode ser facilmente encontrada se tivermos em mãos um modelo para esse tipo de contrato, mas, por exemplo, há momentos em que outra empresa nos enviou um contrato elaborado de acordo com nosso próprio modelo.
Para detectar tais anomalias, precisamos criar um modelo para o contrato com um conjunto de ofertas / cláusulas obrigatórias, novamente com base apenas na base de nossos contratos.
Criamos e testamos o algoritmo para a construção do modelo. Esse algoritmo supõe que em nosso banco de dados de contratos exista um capítulo semelhante com o conjunto correto de itens, que queremos identificar e indicar como modelo.
Algoritmo:

- Para cada grupo de capítulos, pré-treine um modelo baseado no algoritmo MinHashLSH, que permite localizar rapidamente textos próximos.
- Para cada capítulo do contrato baixado, encontre uma lista de parágrafos próximos a ele no banco de dados.
- Com base nos parágrafos próximos obtidos, construa um modelo de linguagem e selecione como um parágrafo de modelo com a maior probabilidade prevista pelo modelo de linguagem.
Depois de receber um modelo para cada capítulo, podemos identificar os itens ausentes que estão presentes no modelo, mas não estão no contrato atual, e aconselhamos o advogado a adicioná-los.
7. Pipeline completo
Para resumir e coletar todas as etapas juntas:
I. Coleta, processamento e armazenamento do corpo de contratosA. Monte o corpo dos contratos do modelo.
B. Classificar / agrupar contratos por tipo.
C. Divida o contrato em capítulos, parágrafos e frases.
D. Remova as entidades nomeadas dos contratos.
E. Agrupe os capítulos por seus títulos.
F. Para cada grupo de capítulos, treine o Word2Vec.
G. Combine cada sentença com o vetor da soma ponderada dos vetores das palavras incluídas nela.
H. Agrupe os vetores de sentença recebidos e armazene cada cluster separadamente para procurar rapidamente o vetor mais próximo no cluster mais próximo.
I. Para cada grupo de capítulos, treine MinHashLSH.
II. Procure anomalias em um novo documentoA. Destacando pontos anormais
1. Defina o tipo de contrato (classe ou cluster)
2. Divida o documento em capítulos, parágrafos e frases
3. Para cada capítulo, encontre o grupo correspondente de capítulos no banco de dados
4. Combine cada frase com um vetor
5. Encontre para cada oferta do contrato o conjunto de ofertas mais próximo e nele a oferta mais próxima
6. Calcule as distâncias entre os vetores da proposta e pinte as frases com base nas distâncias obtidas.
7. Pinte apenas partes das frases, se, com as mais próximas, diferirem em poucas palavras.
8. Aconselhe a edição na forma da próxima frase.
B. Procure por itens ausentes
1. Para cada capítulo, crie um modelo
2. Aconselhe para adicionar os itens ausentes do modelo
8. Avaliação da qualidade
Para avaliar a qualidade das soluções para o problema, um conjunto de testes de contratos foi formado. Anomalias foram adicionadas artificialmente aos contratos na forma de excluir parte de palavras, inserir palavras / frases em frases, inserir frases de outros capítulos, excluir frases. Avaliamos a qualidade de cada tipo de anomalia e obtivemos a seguinte distribuição de erros de determinação:

Ou seja, o algoritmo proposto nos permite determinar inclusões incorretas em 4 de 5 casos. Note-se que, com o aumento do volume da amostra de treinamento e o agrupamento de contratos para diferentes tipos, podemos obter uma melhoria nessa avaliação.
9. Visualização
Para visualizar essa solução para o problema, foi implementada uma interface da Web na qual um novo contrato pode ser carregado, cujo texto será exibido na página e as ofertas anormais serão destacadas. Quanto mais escura a cor da frase, mais forte temos a certeza de que é anômala. Porque encontramos a oferta mais próxima, recomendamos a edição para o usuário na forma da próxima oferta ou recomendamos alterar a parte específica da oferta se a próxima tiver uma pequena diferença com o original.

10. Onde aplicável?
A aplicação prática do serviço resultante é mais apropriada nos casos em que é necessário um exame "fluxo" da pureza legal de um grande número de documentos do mesmo tipo: por exemplo, ao emitir empréstimos colaterais ao público (hipotecas, empréstimos para automóveis e seguros). Por exemplo, no caso de uma hipoteca, trata-se de contratos de venda de imóveis, contratos de seguros imobiliários e de mutuários, contratos de avaliação de propriedades, etc. - centenas de páginas de texto nos dossiês de cada cliente, que podem ser analisadas quase instantaneamente, e locais anormais serão "destacados" ao advogado para análise de riscos ou fraudes.
Portanto, advogados de carne e osso não podem prescindir completamente, mas as tecnologias modernas permitem que eles facilitem a vida.
Material preparado por Elena Sannikova (
helen_sunny ).