Nossas regras de vida: inicie o título dos artigos com a letra “T” e procure empréstimos de texto com rapidez, precisão e, o mais importante, com beleza . Por mais de um ano, encontramos empréstimos transferíveis com sucesso e reescrevemos com a ajuda de redes neurais. Mas às vezes você precisa intencionalmente "dar um tiro no pé" e, mancando, seguir outro caminho, ou seja, Não verifique se há paráfrase ou plágio, mas deixe apenas um pedaço de texto. Paradoxalmente, dói, mas é necessário. Digamos imediatamente: não tocaremos na bibliografia. Como encontrá-lo no texto? Por que é fácil dizer, mas muito mais difícil de fazer do que parece? Tudo isso continua no blog corporativo do Antiplagiarism , o único blog em que eles não gostam de texto tachado .

Fonte da imagem: Fandom.com
Por que demorar tanto para encontrar esse?
Primeiro, um pouco de teoria. O que é um documento e como devemos lidar com isso? Na “Arqueologia do conhecimento”, M. Foucault observa: “A história agora organiza o documento, divide-o, organiza, redistribui os níveis, define as fileiras, qualifica-as de acordo com o grau de significância, isola os elementos, define unidades, descreve a relação”. É claro que não somos historiadores de idéias, mas sabemos por experiência própria que um documento é uma colcha de retalhos de vários elementos costurados. O que são esses elementos e como eles estão interconectados depende de um documento específico. Se este for, por exemplo, trabalho do aluno, provavelmente incluirá: uma página de título, capítulos do texto principal, figuras, tabelas, fórmulas, referências e aplicativos. Em um artigo científico, provavelmente haverá uma anotação, mas a página de título pode estar completamente ausente. E a coleção de artigos ou materiais de conferência inclui toda uma série de artigos, cada um com sua própria estrutura. Em uma palavra, cada elemento do documento é interessante e auto-suficiente e pode dizer muito sobre que tipo de documento pertence.
Idealmente, todos - nós e os professores - gostariam de ter uma estrutura ideal de documentos e processar cada elemento de maneira a cumprir uma tarefa específica. O primeiro passo para o sucesso é determinar como o item é chamado. Stack_more_layers e eu decidimos começar com o último, mas não menos importante , a saber, com um elemento de texto como "bibliografia". Este é o segmento em que o empréstimo de texto é menos interessante para o usuário. Portanto, é necessário mostrar no relatório que “capturamos” a bibliografia e não começamos a procurar nada nela.
A vida é um espetáculo. Não importa quanto tempo dure. O principal é que deve haver uma bibliografia no final.
Em um mundo perfeito, tudo é lindo e a aparência do documento também. O texto de um documento ideal é estruturado, é agradável de ler e encontrar uma bibliografia puxando rapidamente o controle deslizante até o fim não será difícil. Como a prática demonstrou, a realidade tem uma estrutura completamente diferente.
Para começar, por "bibliografia", muitas pessoas significam igualmente os seguintes conceitos: "lista de referências", "literatura usada", "lista de referências" e até mais de cem títulos (sic!). Em geral, para essas coisas, existem regras para o design de referências e registros bibliográficos, segundo as quais você pode obter uma lista de referências da camada de texto. Digamos mais - existe até um GOST para o design desses registros . Aqui, por exemplo, o design correto de um registro bibliográfico para um livro conhecido:

É verdade que vale a pena considerar o fato de o manual sobre o design de registros "de acordo com o GOST" demorar quase 150 páginas. Para o registro de referências bibliográficas em publicações não impressas, existe um GOST separado para mais de 20 páginas. No entanto, surge uma pergunta razoável: quantas pessoas dedicarão tempo a uma leitura tão divertida apenas para elaborar corretamente algumas referências literárias? Como mostra a prática, há poucos. Obviamente, existem sistemas de layout de texto automático (por exemplo, LaTeX ), mas no ambiente do aluno (e essa é a maioria de nossos "clientes") eles não são muito comuns. Como resultado, na entrada, temos um texto que contém (ou talvez não contenha) pelo menos alguma lista estruturada de fontes literárias.
Esclareceremos mais um ponto. O fato é que não trabalhamos diretamente com o trabalho baixado (pdf, docx, doc, etc.), mas primeiro os levamos a uma aparência unificada, a saber, extraímos a camada de texto . Isso significa que qualquer tipo de formatação, por exemplo, o tipo ou tamanho da fonte, é removida do texto. Como resultado, temos apenas texto "bruto" à nossa disposição, que geralmente parece muito ruim devido a vários artefatos de extração.
Observe que nosso algoritmo deve ser rápido e preciso. A seleção de um bloco bibliográfico é apenas um “recurso” adicional em todo o processo de verificação de um documento, portanto, ele não deve gastar muitos recursos. Isso significa que o algoritmo não deve ser supercomplicado.
Para fazer isso, primeiro determinamos a métrica de qualidade pela qual avaliaremos a operação do nosso algoritmo. Vamos considerar nossa tarefa como um problema de classificação. Cada linha de texto nos relacionaremos a uma das duas classes - bibliografia ou não bibliografia. Para não complicar a vida com indicadores de qualidade mal interpretados (e são suficientes!), Consideraremos a proporção de linhas classificadas correta e incorretamente. Atuamos no pressuposto de que a camada de texto recebida é dividida em linhas. E ainda mais, para que a classificação, como tal, faça sentido, precisamos de uma linha para não combinar a bibliografia com texto estranho. Essa é uma suposição bastante forte, mas quase todos os textos que passaram pelo nosso DocParser o satisfazem. Na classificação de objetos de duas classes, que é nossa tarefa, as métricas de qualidade mais populares são Precision and Recall . Como fica - veja a imagem abaixo:

Fonte da imagem acima: Wikipedia
Fonte da imagem abaixo: Série: For Dummies
A figura mostra quantas vezes o algoritmo classificou corretamente (ou não) a string, a saber:
- TP é uma sequência bibliográfica que o algoritmo determinou corretamente;
- TN é uma linha de texto simples que o algoritmo determinou corretamente;
- FP - uma linha de texto simples, que o algoritmo definiu como bibliográfico;
- FN é uma sequência bibliográfica que o algoritmo definiu como uma sequência de texto sem formatação.
Outro requisito é que nosso algoritmo seja suficientemente preciso (ou seja, tenha uma pontuação de precisão suficientemente alta). Isso pode ser interpretado como "em vez disso, não selecionamos algo necessário do que selecionamos algo desnecessário".
Todos os sonhos de maio Cam Tru
Na sua opinião, o que leva mais tempo para resolver um problema de pesquisa? Desenvolvimento de algoritmo? Incorporando uma solução em um sistema ou teste existente? Não importa como!
Curiosamente, a maior parte do tempo é gasta coletando dados e preparando-os. Também neste caso: para elaborar um algoritmo e configurar seus parâmetros, é necessário dispor de um número suficiente de documentos marcados. Ou seja, documentos para os quais se sabe exatamente onde eles contêm registros bibliográficos. Seria possível atrair avaliadores de terceiros, no entanto, para tarefas tão pequenas, geralmente você pode conviver com um pouco de sangue e marcar os dados por conta própria. Como resultado, através de esforços conjuntos, processamos cerca de 1000 documentos. Obviamente, para treinar, por exemplo, uma rede neural, isso não é suficiente. No entanto, lembre-se de que o algoritmo deve ser simples, o que significa que você não precisa de muitos dados para configurar seus parâmetros.
No entanto, antes de desenvolver um algoritmo, você precisa entender as especificidades dos dados. Depois de visualizar cerca de 1000 documentos aleatórios, ou melhor, suas camadas de texto, podemos tirar algumas conclusões sobre como o texto bibliográfico difere do usual. Um dos padrões mais importantes é que quase sempre uma bibliografia começa com uma palavra-chave. Além da popular “lista de referências” ou “fontes usadas”, também existem referências bastante específicas, por exemplo, “Livros didáticos, manuais, monografias”.
Outra característica igualmente importante é a numeração dos registros bibliográficos. Novamente, vale ressaltar que todos esses "sinais" da lista de referências são muito imprecisos e nem sempre é possível encontrar todos os registros bibliográficos no texto.
No entanto, mesmo esses recursos imprecisos são suficientes para desenvolver o algoritmo mais simples para encontrar bibliografias na camada de texto. Vamos descrevê-lo mais formalmente:
- Estamos procurando "clave de sol" no texto - as palavras-chave da bibliografia;
- Tentamos encontrar no texto abaixo a numeração dos registros bibliográficos;
- Se houver uma numeração, examinamos o texto até o final.
Este algoritmo simples mostra quase 100% de precisão, mas uma completude muito baixa. Isso sugere que nosso algoritmo seleciona apenas linhas bibliográficas, mas o faz de maneira seletiva que encontra apenas uma pequena parte da bibliografia. A dificuldade é que a bibliografia não pode ser facilmente numerada, portanto, usaremos esse algoritmo como auxiliar.
Vamos agora tentar construir outro algoritmo que encontre os tipos restantes de registros bibliográficos no texto. Para fazer isso, destaque as características que distinguem linhas de texto sem formatação de linhas de registros bibliográficos. Cabe ressaltar que o texto bibliográfico é bastante estruturado, embora cada autor crie essa estrutura à sua maneira. Identificamos as seguintes características distintivas das linhas desejadas:
- A presença de numeração no início da linha - isso já foi mencionado acima ao descrever o primeiro algoritmo;
- A presença na sequência de números de anos. Além disso, esses números não devem ser apenas de quatro dígitos (caso contrário, haverá muitas coincidências), mas anos específicos que são mais frequentemente usados ao citar: do século XX até o presente;
- Listagem dos nomes completos dos autores, editores e outras pessoas que participaram da publicação da publicação, em diferentes formatos;
- Indicação de números de páginas, volumes e outras informações de tipo semelhante;
- A presença na linha de frases indicando o número do problema;
- A presença de um URL na string;
- Dependência em uma linha de vocabulário profissional. Na maioria das vezes, essas são abreviações especiais, como 'conf.', 'Científico-prático'. e abreviações semelhantes.
Definimos esses sinais como binários e os treinamos em um dos classificadores mais simples, mas ao mesmo tempo bastante eficazes - Random Forest . O algoritmo Random Forest é um método de classificação de conjuntos. Ele consiste em muitas (geralmente cerca de 100) árvores de decisão simples, cada uma das quais toma sua própria decisão, a qual classe o objeto em questão pertence. A resposta de todo o algoritmo é criada de maneira muito simples: é selecionada uma classe formada pela maioria das árvores de decisão:

Fonte da imagem: www.researchgate.net
Como mencionado acima, selecionaremos os parâmetros do algoritmo para maximizar sua precisão. Vamos tentar aplicar esse algoritmo a algum documento e analisar o resultado do trabalho:

Na figura acima, as linhas que o algoritmo considera bibliográficas são destacadas em vermelho. Como você pode ver, o algoritmo lida muito bem com sua tarefa - quase não há destaque desnecessário em todo o texto, no entanto, a própria bibliografia é determinada por "partes". Isso é facilmente explicado: como o algoritmo é aguçado com alta precisão, ele seleciona apenas as linhas com maior probabilidade de serem bibliográficas. As linhas não selecionadas, de acordo com o algoritmo, parecem pedaços de texto sem formatação.
Vamos tentar "pentear" o resultado. Precisamos eliminar dois problemas: seleções únicas aleatórias no texto principal e seleção descontínua da própria bibliografia. Uma solução rápida e eficaz para esses problemas são as operações de "colagem" e "desbaste". Os nomes falam por si: removeremos linhas bibliográficas independentes e colamos linhas adjacentes entre as quais existem várias linhas não selecionadas. Além disso, muito provavelmente, será necessário realizar várias iterações de desbaste de colagem, porque com uma passagem, linhas únicas que não são bibliográficas podem ficar juntas e não serem excluídas. Configuramos os parâmetros das operações de colagem e desbaste (número de passagens, largura da colagem, parâmetros de exclusão) em uma subamostra separada (quem não sabe o que é "reciclagem", recomendamos a consulta aqui ).
O que aconteceu após nossas melhorias? Ao visualizar vários documentos, notamos que existem bibliografias com os seguintes "recursos":

Felizmente, temos um algoritmo simples, mas eficaz, que apenas leva em consideração esses casos. E como esse algoritmo simples não seleciona nada além das linhas necessárias da bibliografia, podemos combinar os resultados dos dois algoritmos sem perda de qualidade.

Parece muito bom. Obviamente, como o algoritmo é probabilístico, existe a possibilidade de que a bibliografia não possa ser encontrada no texto. Alteramos especificamente a lista de bibliografias para que o algoritmo "não percebesse":

Mas essa bibliografia, em uma visão puramente subjetiva, não é mais muito diferente do texto comum.
No final, o que conseguimos? Implementamos um módulo para destacar registros bibliográficos em documentos para download. O módulo consiste em dois algoritmos, cada um dos quais é adaptado para uma especificidade de operação específica. Um algoritmo aloca um bloco bibliográfico numerado após a palavra-chave. O segundo algoritmo seleciona linhas com grande probabilidade de serem bibliográficas e, em seguida, executa várias operações de "colagem" e "afinamento". O resultado do módulo é a união dos algoritmos descritos.
Também é importante notar que a velocidade do algoritmo, mesmo em documentos grandes, é bastante alta. Isso significa que nosso algoritmo é totalmente adequado para os requisitos do "recurso auxiliar" durante o processo de verificação.
Conclusão
Então, de fósforos e bolotas ...Como resultado, conseguimos implementar um processo simples, mas eficaz, de extrair registros bibliográficos nos textos dos usuários. E embora essa seja uma pequena parte da tarefa de destacar a estrutura dos documentos, ainda assim, é um grande passo para melhorar a qualidade do serviço do sistema antiplágio . A propósito, os resultados do nosso trabalho já podem ser vistos nos relatórios do usuário do sistema. Crie com sua própria mente!