[PYTHON] Suchen Sie nach technischen Blogs durch maschinelles Lernen mit dem Schwerpunkt "Verständlichkeit"

Ich möchte neue Technologie erwerben! Selbst wenn Sie danach suchen, ist es häufig so, dass die Artikel, die an die Spitze der Suche kommen, nicht "leicht zu verstehen" sind. Die Anzahl der Aufrufe des Artikels sowie die Anzahl der Likes und Endungen von Qiita können als Referenz verwendet werden, dies bedeutet jedoch nicht, dass es als Gefühl hoch sein sollte.

Können wir also nicht nur den "Ruf" dieser Sätze, sondern auch die Zusammensetzung und den Schreibstil der Sätze selbst bewerten und ihre "Verständlichkeit" bewerten? Also, was ich experimentell versucht habe, ist der folgende "Elephant Sense".

chakki-works/elephant_sense (Es wird ermutigend sein, wenn Sie mir einen Stern m (_ _) m geben)

top.png

Während der Entwicklung haben wir das grundlegende Verfahren zur Verarbeitung natürlicher Sprache / zum maschinellen Lernen befolgt, daher möchte ich den Prozess in diesem Artikel vorstellen.

Tor

Im Voraus habe ich versucht herauszufinden, wie einfach es ist, die Artikel von Qiita zu verstehen, indem ich "einfach gesucht" und "diejenigen mit einer hohen Anzahl von Likes extrahiert" habe (zu diesem Zeitpunkt). "Leicht zu verstehen" wurde subjektiv bewertet. In den folgenden Phasen werde ich erklären, wie man mit diesem Gefühl umgeht. Als Ergebnis wurde festgestellt, dass die Situation wie folgt ist.

Es schien, als ob die Situation so wäre, dass selbst wenn wir basierend auf Likes extrahieren würden, es nicht 50% erreichen würde, also haben wir uns das Ziel gesetzt, die Hälfte davon leicht verständlich zu machen.

Frühere Forschungen

Es gibt einige frühere Studien zur Bewertung der Verständlichkeit von Sätzen. Die folgenden zwei Indikatoren sind im englischsprachigen Raum bekannt ("Bewertungsindex für Lesbarkeit (1)) Ich bin mit dem Blog vertraut.

Mit anderen Worten: "Ein langer Satz voller Wörter ist schwer zu verstehen." Im Gegenteil, wenn die Satzlänge angemessen ist und die Anzahl der verwendeten Wörter insgesamt gering ist, ist die Punktzahl gut. MS Word kann diesen Index übrigens berechnen. Es kann eine gute Idee sein, es auszuprobieren.

Der Zweck dieses Index besteht hauptsächlich darin, die Schwierigkeit von Texten zu messen, z. B. ob ein bestimmter Satz für Grundschüler oder Schüler gedacht ist. In Japan gibt es folgende Forschungsanstrengungen.

Da jedoch nichts als lehrbuchartiger Satz angenommen wird, wird die Punktzahl stark vom Verhältnis von pädagogischem Kanji und Hiragana beeinflusst, das im Satz enthalten ist, und es wird in Standardnotation wie in diesem technischen Blog geschrieben. Ich habe den Eindruck, dass das Messen und Schätzen des Satzniveaus vorhandener Texte begrenzt ist (dieser Punkt lautet "Über Sätze, die für japanische Lernende leicht zu lesen sind. /project-meeting/files/JCLWorkshop_no2_papers/JCLWorkshop2012_2_34.pdf) ”).

Als Abschlussstudie gab es eine Studie zur Messung der Verständlichkeit der folgenden Computerhandbücher.

Quantitative Bewertungsmethode zur Verständlichkeit des Computerhandbuchs

Diese Studie präsentiert die folgenden zwei Perspektiven zur Qualität des Ausdrucks im Handbuch.

In Bezug auf technische Blogs gibt es zwei Punkte: "Ist der Inhalt, den Sie schreiben, korrekt?" Und "Ist der Schreibstil angemessen?" Ähnlich wie in dieser Studie konzentrieren wir uns diesmal auf die "Qualität des Ausdrucks" (da externes Wissen erforderlich ist, um festzustellen, ob der Ausdruck korrekt ist). Wie später beschrieben wird, haben wir uns auch auf diese Untersuchung für die zu verwendenden Merkmalsmengen bezogen.

Darüber hinaus habe ich die folgenden Artikel kurz als Studie zu den Merkmalen von Sätzen gelesen (siehe das neueste NIPS / EMNLP).

Vorbereitung der Daten

Ich habe mich dieses Mal für maschinelles Lernen entschieden, daher brauche ich trotzdem Daten. Insbesondere wurden Daten mit Anmerkungen versehen, z. B. "Dieser Artikel ist leicht zu verstehen / schwer zu verstehen".

In der Regel ist es wichtig, die Aufgabe vor dem Kommentieren gut zu gestalten.

NAIST Text Corpus Annotation Specification

Diese Methode ist in den folgenden Büchern sehr gut organisiert. Es empfiehlt sich daher, sie beim Kommentieren von Textdaten einmal zu lesen.

Natural Language Annotation for Machine Learning

Dieses Mal haben wir uns entschieden, "leicht verständlich" als Standard für "Können Junioren es lesen?" Zu verwenden. Dies soll verhindern, dass die Klarheit des Wissens des Kommentators beeinträchtigt wird. Und ich habe beschlossen, es am 0/1 zu bewerten. Dies liegt daran, dass es schwierig war, die Bühne zu definieren, und nur drei Mitglieder des Teams für die Bewertung mobilisiert werden konnten. Daher war es notwendig, sie so stabil wie möglich zu gestalten (ich habe sie leicht geschrieben, aber dies ist "leicht zu verstehen". Es gab viele Debatten darüber, wie man Anmerkungen macht.

Außerdem habe ich beschlossen, das Zielkorpus von Qiita zu nehmen. Mit anderen Worten, diesmal besteht der Zweck darin, "zu bewerten, ob Qiitas Artikel von Junioren am 0/1 gelesen werden können oder nicht" und die Punktzahl vorherzusagen, um "die Anzahl der Artikel, die sich leicht verständlich anfühlen, auf 50% zu erhöhen". (Gemäß dem obigen Buch war es wichtig, dass die Annotationsarbeit und die darüber hinaus zu erledigende Aufgabe richtig miteinander verknüpft waren).

Die Annotation wurde für 100 Artikel durchgeführt. Wenn Sie jedoch die Artikel zufällig auswählen, haben die meisten Artikel eine geringe Anzahl von Likes, daher habe ich das angepasst. Das endgültige Annotationsergebnis lautet wie folgt (3 ist MAX (alle hinzugefügt 1), da es von 3 Personen erstellt wurde).

annotation_result.png

Wir werden ein Modell mit diesen Daten erstellen.

Ein Modell bauen

Wenn Sie süchtig nach neuronalen Netzen sind, tendieren Sie dazu, Word2Vec zum Codieren mit RNN zu verwenden, aber dieses Mal habe ich beschlossen, ein Modell zu erstellen, das die Basislinie darstellt.

Die Merkmalsmengen, die als Kandidaten unter Bezugnahme auf frühere Forschungsergebnisse ausgewählt wurden, sind wie folgt.

Das Bild von Merkmalen in natürlicher Sprache ist grundsätzlich entweder in "Länge" oder "Zahl" unterteilt. "Zahl" kann durch Hinzufügen einer Populationsnummer als "Häufigkeit (Wahrscheinlichkeit)" und durch Hinzufügen von Voraussetzungen als "bedingte Wahrscheinlichkeit" abgeleitet werden.

image

Was die Worte betrifft, habe ich diesmal die Vorverarbeitung sehr sorgfältig durchgeführt (@Hironsan sollte diesen Bereich später erklären).

Ich habe versucht, den einfachen RandomForest mit den aufgeführten Funktionen zu verwenden. (RandomForest ist auch gut, weil Sie den Beitrag jedes Feature-Betrags leicht sehen können).

Hier ist das Ergebnis der tatsächlichen Erstellung des Modells.

elephant_sense/notebooks/feature_test.ipynb

Der Datensatz ist klein, aber viel genauer. Wenn man sich die Funktionen ansieht, scheint das Folgende gut zu funktionieren.

Es bedeutet: "Es wird von einer zuverlässigen Person geschrieben, es wird mit einer angemessenen Satzlänge geschrieben und es enthält eine Zahl." Insbesondere das Vorhandensein oder Fehlen der Figur war sehr effektiv. "Anzahl der Follower von Benutzern" widerspricht dem Zweck dieser Zeit, und es war ursprünglich eine Richtlinie, sie aufgrund der einzigartigen Eigenschaften von Qiita nicht aufzunehmen, sondern aufgrund der Genauigkeit + Informationen über "Schriftsteller", wenn sie in Zukunft auf andere Sätze angewendet werden Ich habe beschlossen, es einzulegen, weil es in irgendeiner Form genommen werden kann.

Darüber hinaus ist das Ergebnis der Klassifizierung nur nach den Likes, die dieses Mal verglichen werden sollen, wie folgt.

elephant_sense/notebooks/like_based_classifier.ipynb

Wenn Sie sich das ansehen, können Sie sehen, dass der "leicht verständliche" Satz (1) nicht vorhergesagt werden kann. In diesem Sinne scheint dieses Modell nützlicher zu sein als ich erwartet hatte.

Einbeziehung in die Anwendung

Lassen Sie uns eine Anwendung erstellen, die tatsächlich verwendet werden kann, indem das erstellte Modell integriert wird.

Beim Einbetten eines maschinellen Lernmodells in eine Anwendung wird das in diesem Modell verwendete Objekt zur Normalisierung verwendet (diesmal StandardScaler. Beachten Sie, dass) ebenfalls erforderlich ist. Wenn Sie beim Erstellen des Modells normalisiert haben, müssen Sie bei der Erstellung von Vorhersagen natürlich normalisieren.

Das Frontend ist einfach und mit Vue.js/axios erstellt. axios ist eine Bibliothek zum Senden von http-Anfragen, die sowohl auf der Serverseite (Node) als auch auf der Clientseite verwendet werden kann (insbesondere die Unterstützung von XSRF-Cookies wurde geschätzt).

Die fertige Anwendung wurde in Heroku bereitgestellt. Da wir dieses Mal Scicit-Learn usw. verwenden, ist die normale Bereitstellung schwierig, sodass wir die Bereitstellung mit Docker durchführen.

Container Registry and Runtime

Bis jetzt musste ich ein Buildpack-Handwerker werden, daher ist dies praktisch (aber es ist ein bisschen schmerzhaft, weil es nicht in einer Proxy-Umgebung verwendet werden kann).

Die bereitgestellte Anwendung lautet wie folgt.

Elephant Sense

image

Aber ... langsam! Ich hätte wirklich gerne mehr Beiträge zur Bewertung, aber ich schränke sie aufgrund der Leistung ein (derzeit erziele ich 50 Suchergebnisse und zeige sie an). Ich mache vorerst Parallelverarbeitung, aber schließlich analysiere ich jeden Satz in HTML und extrahiere Features ... also wird es ziemlich langsam sein. Ich denke, dass hier Verbesserungen erforderlich sind, einschließlich Einfallsreichtum auf der Front-End-Seite.

Was das Anzeigeergebnis betrifft, habe ich den Eindruck, dass es in Ordnung ist. Um jedoch 50% des Ziels zu erreichen, müssen vor der Anzeige mehr Sätze ausgewertet werden, sodass es zwei Seiten derselben Medaille mit dem oben genannten Leistungsproblem gibt.

Das Tag meter wird verwendet, um die Punktzahl anzuzeigen. Ich habe zum ersten Mal in dieser Entwicklung von der Existenz erfahren. Wie das "Fortschritt" -Tag gibt es einige Tags, die ich nicht kenne.

von jetzt an

Ich habe den Eindruck, dass ich eine Reihe von Prozessen wie Problemstellung, Datenerfassung, Modellkonstruktion und Anwendung durchlaufen habe. Wenn sich dies weiterentwickelt, kann es meiner Meinung nach auf Entwurfsdokumente, API-Dokumente usw. angewendet werden, um die Qualität von Dokumenten zu verbessern und neue Teilnehmer bei der Suche nach "gut organisierten" Sätzen zu unterstützen. ..

Derzeit arbeitet mein Team chakki an einer "Gesellschaft, in der jeder bis zur Teezeit (15:00) zurückkehren kann" durch maschinelles Lernen / Verarbeitung natürlicher Sprache. Wir versuchen es zu realisieren. Zunächst arbeiten wir derzeit an Informationen in natürlicher Sprache (Dokumente, Überprüfungen, Quellcode usw.) in der Systementwicklung.

[@chakki_works](https://twitter.com/chakki_works)

Wenn Sie interessiert sind, Bitte kommen Sie und hören Sie zu!

Recommended Posts

Suchen Sie nach technischen Blogs durch maschinelles Lernen mit dem Schwerpunkt "Verständlichkeit"
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 10 Einführung in Cupy
Wie nutzt man maschinelles Lernen für die Arbeit? 01_ Den Zweck des maschinellen Lernens verstehen
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 9 Einführung in das Scikit-Lernen
Notieren Sie die Schritte zum Verständnis des maschinellen Lernens
Eine Einführung in Python für maschinelles Lernen
Eine Einführung in maschinelles Lernen für Bot-Entwickler
Versuchen Sie, durch maschinelles Lernen basierend auf Wetterdaten eine "wetterkartenähnliche Front" zu zeichnen (5)
Versuchen Sie, den Strombedarf durch maschinelles Lernen vorherzusagen
Hinweise zum maschinellen Lernen (von Zeit zu Zeit aktualisiert)
Versuchen Sie, durch maschinelles Lernen basierend auf Wetterdaten eine "wetterkartenähnliche Front" zu zeichnen (1)
Versuchen Sie, durch maschinelles Lernen anhand von Wetterdaten eine "wetterkartenähnliche Front" zu zeichnen (4)
Versuchen Sie, durch maschinelles Lernen basierend auf Wetterdaten eine "wetterkartenähnliche Front" zu zeichnen (2)
Ich habe versucht, die Veränderung der Schneemenge für 2 Jahre durch maschinelles Lernen vorherzusagen
Sammeln Sie Bilder für maschinelles Lernen (Bing Search API)
[Für Anfänger] Einführung in die Vektorisierung beim maschinellen Lernen
Python-Lernnotiz für maschinelles Lernen von Chainer aus Kapitel 2
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 1 und 2
Vorbereitung zum Starten von "Python Machine Learning Programming" (für macOS)
[Maschinelles Lernen] Versuchen Sie, Objekte mithilfe der selektiven Suche zu erkennen
Künstliche Intelligenz, maschinelles Lernen, tiefes Lernen zu implementieren und zu verstehen
14 E-Mail-Newsletter zum Sammeln von Informationen zum maschinellen Lernen
Alles für Anfänger, um maschinelles Lernen zu können
Einführung in das maschinelle Lernen
Erstellen Sie eine Umgebung für maschinelles Lernen mit Python unter MacOSX
Die Verwendung von icrawler zum Sammeln von Daten zum maschinellen Lernen wurde vereinfacht
Für diejenigen, die mit TensorFlow2 maschinelles Lernen beginnen möchten
Wie nutzt man maschinelles Lernen für die Arbeit? 03_Python-Codierungsverfahren
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 7 Regressionsanalyse
Ich habe versucht, das überwachte Lernen des maschinellen Lernens auch für Serveringenieure auf leicht verständliche Weise zu verstehen 1
Ich habe HR Tech versucht, eine Expertensuchmaschine zu entwickeln, indem ich interne Besprechungsinformationen maschinell gelernt habe
Ich habe versucht, das überwachte Lernen des maschinellen Lernens auch für Serveringenieure auf leicht verständliche Weise zu verstehen 2
Datensatz für maschinelles Lernen
Japanische Vorverarbeitung für maschinelles Lernen
Eine Einführung in das maschinelle Lernen
Verstehe maschinelles Lernen ~ Ridge Regression ~.
Super Einführung in das maschinelle Lernen
4 [/] Vier Arithmetik durch maschinelles Lernen
[Maschinelles Lernen] Verstehen Sie aus der Mathematik, warum der Korrelationskoeffizient zwischen -1 und 1 liegt.
Newton-Methode für maschinelles Lernen (von 1 Variablen zu mehreren Variablen)
Vor der Einführung in das maschinelle Lernen. ~ Techniken, die für anderes maschinelles Lernen als maschinelles Lernen erforderlich sind ~
Maschinelles Lernen mit Docker (42) Programmieren von PyTorch für Deep Learning Von Ian Pointer
Einführung in Deep Learning zum ersten Mal (Chainer) Japanische Zeichenerkennung Kapitel 2 [Modellgenerierung durch maschinelles Lernen]