Tan difícil de encontrar, fácil de perder e imposible de emitir

Nuestras reglas de vida: comience el título de los artículos con la letra "T" y busque préstamos de texto de forma rápida, precisa y, lo más importante, bellamente . Durante más de un año, hemos encontrado con éxito préstamos transferibles y reescribimos con la ayuda de redes neuronales. Pero a veces necesitas "dispararte intencionalmente en el pie" y, cojeando, ir por otro camino, es decir No busque paráfrasis o plagio, solo deje un fragmento de texto solo. Paradójicamente, duele, pero es necesario. Digamos de inmediato: no tocaremos la bibliografía. ¿Cómo encontrarlo en el texto? ¿Por qué es fácil de decir, pero mucho más difícil de hacer de lo que parece? Todo esto es una continuación del blog corporativo de Antiplagiarism , el único blog donde no les gusta el texto tachado .



Fuente de la imagen: Fandom.com


¿Por qué tardas tanto en encontrar esa?


Primero, una pequeña teoría. ¿Qué es un documento y cómo debemos tratarlo? En la "Arqueología del conocimiento", M. Foucault señala: "La historia ahora organiza el documento, lo divide, organiza, redistribuye los niveles, establece los rangos, los califica según el grado de importancia, aísla elementos, define unidades, describe la relación. Nosotros, por supuesto, no somos historiadores de ideas, pero sabemos por nuestra propia experiencia que un documento es una colcha de retazos de varios elementos cosidos juntos. Cuáles son estos elementos y cómo están interconectados depende de un documento específico. Si se trata, por ejemplo, del trabajo de un alumno, lo más probable es que incluya: una página de título, capítulos del texto principal, figuras, tablas, fórmulas, referencias y aplicaciones. En un artículo científico, lo más probable es que haya una anotación, pero la página del título puede faltar por completo. Y la colección de artículos o materiales de la conferencia incluye una gran cantidad de artículos, cada uno de los cuales tiene su propia estructura. En una palabra, cada elemento del documento es interesante y autosuficiente y puede decir mucho sobre a qué tipo pertenece el documento.


Idealmente, todos, tanto nosotros como los maestros, quisiéramos tener una estructura de documentos ideal y procesar cada elemento de una manera que cumpla con una tarea específica. El primer paso para el éxito es determinar cómo se llama el artículo. Stack_more_layers y yo decidimos comenzar por último pero no menos importante , es decir, con un elemento de texto como "bibliografía". Este es el segmento en el que el préstamo de texto es menos interesante para el usuario. Por lo tanto, es necesario mostrar en el informe que "captamos" la bibliografía y no comenzamos a buscar nada en ella.


La vida es un espectáculo. No importa cuánto dure. Lo principal es que debe haber una bibliografía al final.


En un mundo perfecto, todo es hermoso, y la apariencia del documento también. El texto de un documento ideal está estructurado, es agradable de leer y encontrar una bibliografía tirando rápidamente del control deslizante hasta el final no será nada difícil. Como ha demostrado la práctica, la realidad tiene una estructura completamente diferente.


Para empezar, por "bibliografía" muchas personas se refieren igualmente a los siguientes conceptos: "lista de referencias", "literatura usada", "lista de referencias" e incluso más de cien (¡sic!) Títulos. En general, para tales cosas, existen reglas para el diseño de referencias bibliográficas y registros, según las cuales puede extraer una lista de referencias de la capa de texto. Digamos más: incluso hay GOST para el diseño de estos registros . Aquí, por ejemplo, el diseño correcto de un registro bibliográfico para un libro conocido:



Es cierto que vale la pena considerar el hecho de que el manual sobre el diseño de registros "según GOST" ocupa casi 150 páginas. Para el registro de referencias bibliográficas en publicaciones no impresas, hay un GOST separado para más de 20 páginas. Sin embargo, surge una pregunta razonable: ¿cuántas personas dedicarán tiempo a una lectura tan entretenida solo para elaborar correctamente algunas referencias literarias? Como muestra la práctica, hay pocos. Por supuesto, existen sistemas de diseño de texto automático (por ejemplo, LaTeX ), pero en el entorno estudiantil (y esta es la mayoría de nuestros "clientes") no son muy comunes. Como resultado, en la entrada tenemos un texto que contiene (o tal vez no contiene) al menos una lista estructurada de fuentes literarias.


Aclararemos un punto más. El hecho es que no trabajamos directamente con el trabajo descargado (pdf, docx, doc, etc.), pero primero los llevamos a una apariencia unificada, es decir, extraemos la capa de texto . Esto significa que cualquier tipo de formato, por ejemplo, el tipo o tamaño de la fuente, se elimina del texto. Como resultado, solo tenemos texto "en bruto" a nuestra disposición, que a menudo se ve muy mal debido a varios artefactos de extracción.


Solo tenga en cuenta que nuestro algoritmo debe ser rápido y preciso. La selección de un bloque de bibliografía es solo una "característica" adicional en todo el proceso de verificación de un documento, por lo que no debe gastar muchos recursos. Esto significa que el algoritmo no debe ser demasiado complicado.


Para hacer esto, primero determinamos la métrica de calidad mediante la cual evaluaremos el funcionamiento de nuestro algoritmo. Consideraremos nuestra tarea como un problema de clasificación. Cada línea de texto nos referiremos a una de dos clases: bibliografía o no bibliografía. Para no complicar la vida con indicadores de calidad mal interpretados (¡y hay suficientes de estos!), Consideraremos la proporción de líneas clasificadas correcta e incorrectamente. Actuamos suponiendo que la capa de texto entrante se divide en líneas. Y aún más para que la clasificación como tal tenga sentido, necesitamos una línea para no combinar la bibliografía junto con texto extraño. Esta es una suposición bastante fuerte, pero casi todos los textos que pasaron por nuestro DocParser lo satisfacen. En la clasificación de dos clases de objetos, que es nuestra tarea, las métricas de calidad más populares son Precisión y Recuperación . Cómo se ve: vea la imagen a continuación:



Fuente de la imagen arriba: Wikipedia
Fuente de la imagen a continuación: Serie: Para Dummies


La imagen muestra cuántas veces el algoritmo clasificó correctamente (o no) la cadena, a saber:


  • TP es una cadena bibliográfica que el algoritmo determinó correctamente;
  • TN es una línea de texto plano que el algoritmo determinó correctamente;
  • FP - una línea de texto plano, que el algoritmo definió como bibliográfico;
  • FN es una cadena bibliográfica que el algoritmo definió como una cadena de texto sin formato.

Otro requisito es que nuestro algoritmo debe ser lo suficientemente preciso (es decir, tener un puntaje de precisión suficientemente alto). Esto puede interpretarse como "más bien, no seleccionamos algo necesario que seleccionamos algo innecesario".


All May Dreams Cam Tru


¿Qué, en su opinión, lleva más tiempo resolver un problema de investigación? Desarrollo de algoritmos? ¿Incrustar una solución en un sistema o prueba existente? ¡No importa cómo!


Por extraño que parezca, la mayor parte del tiempo se dedica a recopilar datos y prepararlos. También en este caso: para encontrar un algoritmo y configurar sus parámetros, es necesario tener a su disposición un número suficiente de documentos marcados. Es decir, documentos para los que se sabe exactamente dónde contienen registros bibliográficos. Sería posible atraer a evaluadores externos, sin embargo, para tareas tan pequeñas, generalmente puede arreglárselas con un poco de sangre y marcar los datos por su cuenta. Como resultado, a través de esfuerzos conjuntos, procesamos alrededor de 1000 documentos. Por supuesto, para el entrenamiento, por ejemplo, una red neuronal, esto no es suficiente. Sin embargo, recuerde que el algoritmo debe ser simple, lo que significa que no necesita muchos datos para configurar sus parámetros.


Sin embargo, antes de desarrollar un algoritmo, debe comprender los detalles de los datos. Después de ver aproximadamente 1000 documentos aleatorios, o más bien, sus capas de texto, podemos sacar algunas conclusiones sobre cómo el texto bibliográfico difiere del habitual. Uno de los patrones más importantes es que casi siempre una bibliografía comienza con una palabra clave. Además de la popular "lista de referencias" o "fuentes usadas", también hay algunas bastante específicas, por ejemplo, "Libros de texto, manuales, monografías".


Otra característica igualmente importante es la numeración de los registros bibliográficos. Nuevamente, vale la pena mencionar que todos estos "signos" de la lista de referencias son muy inexactos y está lejos de ser siempre posible encontrar todos los registros bibliográficos en el texto.


Sin embargo, incluso estas características inexactas son suficientes para desarrollar el algoritmo más simple para encontrar bibliografías en la capa de texto. Describámoslo más formalmente:


  1. Estamos buscando "claves de sol" en el texto: las palabras clave de la bibliografía;
  2. Intentamos encontrar en el texto a continuación la numeración de los registros bibliográficos;
  3. Si hay una numeración, revisamos el texto hasta que termina.

Este algoritmo simple muestra casi el 100% de precisión, pero muy poca integridad. Esto sugiere que nuestro algoritmo selecciona solo líneas bibliográficas, pero lo hace de manera tan selectiva que solo encuentra una pequeña parte de la bibliografía. La dificultad es que la bibliografía no puede numerarse fácilmente, por lo que utilizaremos este algoritmo como auxiliar.


Tratemos ahora de construir otro algoritmo que encuentre los tipos restantes de registros bibliográficos en el texto. Para hacer esto, resalte las características que distinguen las líneas de texto sin formato de las líneas de registros bibliográficos. Cabe señalar que el texto bibliográfico es bastante estructurado, aunque cada autor forma esta estructura a su manera. Hemos identificado las siguientes características distintivas de las líneas deseadas:


  1. La presencia de numeración al comienzo de la línea: esto ya se mencionó anteriormente al describir el primer algoritmo;
  2. La presencia en la cadena de números de años. Además, estos no deberían ser solo números de cuatro dígitos (de lo contrario, habrá muchas coincidencias), sino años específicos que se usan con mayor frecuencia al citar: desde 1900 hasta el presente;
  3. Listado de nombres completos de autores, editores y otras personas que participaron en la publicación de la publicación, en diferentes formatos;
  4. Indicación de números de página, volúmenes y otra información de un tipo similar;
  5. La presencia en la línea de frases que indica el número del problema;
  6. La presencia de una url en la cadena;
  7. Adicción en una línea de vocabulario profesional. En su mayor parte, estas son abreviaturas especiales, como 'conf.', 'Científico-práctico'. y abreviaturas similares.

Definimos estos signos como binarios y los entrenamos en uno de los clasificadores más simples, pero al mismo tiempo bastante efectivos: Random Forest . El algoritmo Random Forest es un método de clasificación por conjuntos. Consiste en muchos (generalmente unos 100) árboles de decisión simples, cada uno de los cuales toma su propia decisión, a qué clase pertenece el objeto en cuestión. La respuesta de todo el algoritmo se crea de manera muy simple: se selecciona una clase formada por la mayoría de los árboles de decisión:



Fuente de la imagen: www.researchgate.net


Como se mencionó anteriormente, seleccionaremos los parámetros del algoritmo para maximizar su precisión. Tratemos de aplicar este algoritmo a algún documento y observemos el resultado del trabajo:



En la imagen de arriba, las líneas que el algoritmo considera bibliográficas están resaltadas en rojo. Como puede ver, el algoritmo se adapta bastante bien a su tarea: casi no hay resaltado innecesario en todo el texto, sin embargo, la bibliografía en sí está determinada por "piezas". Esto se explica fácilmente: dado que el algoritmo se agudiza con gran precisión, selecciona solo aquellas líneas que tienen una alta probabilidad de ser bibliográficas. Las líneas no seleccionadas, de acuerdo con el algoritmo, parecen fragmentos de texto sin formato.


Intentemos "peinar" el resultado. Necesitamos eliminar dos problemas: selecciones individuales aleatorias dentro del texto principal y selección discontinua de la propia bibliografía. Una solución rápida y efectiva a estos problemas son las operaciones de "pegado" y "adelgazamiento". Los nombres hablan por sí mismos: eliminaremos las líneas bibliográficas independientes y pegaremos las líneas adyacentes entre las cuales hay varias líneas no seleccionadas. Además, lo más probable es que sea necesario llevar a cabo varias iteraciones de encolado y adelgazamiento, porque con una pasada, las líneas simples que no son bibliográficas pueden unirse y no eliminarse. Configuramos los parámetros de las operaciones de encolado y adelgazamiento (número de pasadas, ancho de encolado, parámetros de eliminación) en una submuestra separada (quién no sabe qué es "reentrenamiento", recomendamos buscar aquí ).


¿Qué pasó después de nuestras mejoras? Al ver varios documentos, notamos que hay bibliografías con las siguientes "características":


Afortunadamente, tenemos un algoritmo simple pero efectivo que solo tiene en cuenta estos casos. Y dado que este algoritmo simple no selecciona nada más que las líneas necesarias de la bibliografía, podemos combinar los resultados de los dos algoritmos sin pérdida de calidad.



Se ve bastante bien. Por supuesto, dado que el algoritmo es probabilístico, existe la posibilidad de que la bibliografía no se encuentre en el texto. Cambiamos específicamente la lista de bibliografías para que el algoritmo "no lo notara":



Pero tal bibliografía, en una visión puramente subjetiva, ya no es muy diferente del texto ordinario.


Al final, ¿qué obtuvimos? Hemos implementado un módulo para resaltar registros bibliográficos en documentos descargables. El módulo consta de dos algoritmos, cada uno de los cuales está diseñado para una especificidad de operación específica. Un algoritmo asigna un bloque bibliográfico numerado después de la palabra clave. El segundo algoritmo selecciona filas que tienen muchas probabilidades de ser bibliográficas, y luego realiza varias operaciones de "pegado" y "adelgazamiento". El resultado del módulo es la unión de los algoritmos descritos.


También vale la pena señalar que la velocidad del algoritmo, incluso en documentos grandes, es bastante alta. Esto significa que nuestro algoritmo es totalmente adecuado para los requisitos de la "característica auxiliar" durante el proceso de verificación.


Conclusión


Entonces de fósforos y bellotas ...

Como resultado, pudimos implementar un proceso simple pero efectivo de extracción de registros bibliográficos en textos de usuarios. Y aunque esta es una pequeña parte en la tarea de resaltar la estructura de los documentos, es un gran paso para mejorar la calidad del servicio del sistema antiplagio . Por cierto, los resultados de nuestro trabajo ya se pueden ver en los informes de los usuarios del sistema. ¡Crea con tu propia mente!

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


All Articles