[PYTHON] Ich habe versucht, eine Luftlippenerkennung und eine automatische Reaktion BOT für Fernarbeit zu machen

Aufgrund des Einflusses von Corona ist Fernarbeit zu mir gekommen, der seit vielen Jahren der nächste Auftragnehmer ist. Sie können zu Hause in einer ruhigen Umgebung arbeiten. Ich muss keinen Nahverkehrszug nehmen und weiß, dass ich viel Abfall gemacht habe.

Das Problem, das ich mit einer solchen Fernarbeit habe, ist übrigens "Chat". Ich habe ziemlich viele Kanäle wie meine Firma und Kundenabteilung, Daher tritt häufig das Luftlippenereignis auf, dass "Ihr Name ohne Erwähnung herauskommt". Mit zunehmender Anzahl von Remote-Mitarbeitern steigt auch der Chat-Fluss, und es ist schwierig, ihn zu erfassen.

Dies selbst ist "Erwähnungen richtig machen, wenn Bedarf besteht" "Keyword-Benachrichtigung festlegen" Es ist eine Geschichte, die mit der Abdeckung der Operationsseite verwaltet werden sollte, aber diesmal ist es eine große Sache ** Lassen Sie uns "Analysieren Sie den Inhalt der Luftlippe und trennen Sie die BOT-Antwort abhängig vom Inhalt" **.

Das Bild sieht so aus. bot_flow.png

Erstellen eines Chat-BOT

Es spielt keine Rolle, was Sie verwenden. Mit Python sollte für jede Chat-Plattform etwas dabei sein. Qiita hat auch viele gute Artikel.

Ich habe darüber nachgedacht, es mit meinem eigenen Slack zu verwenden, aber vorher möchte ich den Betrieb richtig überprüfen, also Dieses Mal werde ich Telegramm verwenden, das viele Bekannte in meinem Internet hat.

Wenn das COTOHA dieses Mal verwendet wird, ist dies nur eine Funktion für Entwickler gemäß den Nutzungsbedingungen. https://www.ntt.com/content/dam/nttcom/hq/jp/about-us/disclosure/tariff/pdf/c256.pdf Bitte seien Sie vorsichtig, wenn Sie es verwenden, da es ein Lizenzproblem verursachen kann, wenn Sie es für geschäftliche Zwecke verwenden.

Ich werde diesen BOT verwenden, den ich zuvor gemacht habe. https://qiita.com/Ovismeme/items/cc59a2de1cf537c977cf https://github.com/ovismeme/telegram_autoreply_bot

Zum Zeitpunkt der Erstellung habe ich es geschrieben, indem ich den Beispielcode in "Ich verstehe Python nicht" nachgeahmt habe. Als ich zum ersten Mal seit einem Jahr zurückblickte, sagte ich: "Was ist das für ein Müll. Wer hat ihn geschrieben?" Also habe ich viel repariert. Die Lesbarkeit hat sich ein wenig verbessert, aber der Hauptteil dieses Artikels ist nicht vorhanden, daher werde ich ihn weglassen.

Informationen zur Herstellung finden Sie im Originalartikel. Als Voraussetzung für BOT ist alles in Ordnung, solange es die Funktionen "Aufnehmen des Gesprochenen" und "Sprechen" hat. Es sollte auch ein Modul bereitgestellt werden, aber der Mechanismus zum Aufnehmen von Äußerungen ist je nach Artikel unterschiedlich. Lesen Sie das Dokument daher sorgfältig durch.

Verwenden Sie die COTOHA-API

Kontoregistrierung

Um festzustellen, "ob der Text negativ oder positiv ist" Wir werden COTOHA von NTT Communications Co., Ltd. für Entwickler verwenden.

COTOHA API

Erklären Sie, wie Sie sich ganz einfach registrieren können
![c99dba0e850d24459e47cb2889b10af6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211046/ee0f6b61-a23d-1a6e-c9a9-73126c277b37.png) Klicken Sie hier, um Ihre E-Mail-Adresse einzugeben, und folgen Sie dem Link in der zurückgegebenen E-Mail, um die Registrierung abzuschließen.

86f90895a0c958336f53ca6a7e57dbd2.png

Nach der Registrierung sehen Sie das Kontoportal, in dem Ihre Kunden-ID und Ihr Kundengeheimnis ausgestellt werden.

API-Aufruf

So erhalten Sie Zugriffstoken Emotionsanalyse-API Die Methode ist hier geschrieben.

Nur die API zu treffen, ist nur zu treffen, aber ich werde den Code einfügen, der tatsächlich ausgeführt wird. Zugriffsinformationen, URLs usw. werden in die Konfiguration übernommen. Wenn Sie sie also selbst verwenden, Bitte verschieben Sie es per Hardcode oder rufen Sie config auf.

API-Aufruf

cotoha.py


import requests
import configparser
import pprint

class CotohaController:
    def __init__(self):
        config_file = './settings/config.ini'
        self.config = configparser.ConfigParser()
        self.config.read(config_file, 'utf-8')
        self.base_url = str(self.config.get('cotoha_auth', 'base_url'))
        self.headers = {
            'Content-Type' : 'application/json;charset=UTF-8'
        }
        self.get_accesstoken()

    def get_accesstoken(self):
        request_body = {
            "grantType": "client_credentials",
            "clientId": str(self.config.get('cotoha_auth', 'client_id')),
            "clientSecret": str(self.config.get('cotoha_auth', 'client_secret'))
        }
        auth_url = str(self.config.get('cotoha_auth', 'auth_url'))
        responce = requests.post(auth_url, headers=self.headers, json=request_body)
        self.headers.update(Authorization = 'Bearer ' + responce.json()['access_token'])

    def emotion_analysis(self, text):
        request_body = {
            "sentence": str(text)
        }
        url = self.base_url + '/nlp/v1/sentiment'
        responce = requests.post(url, headers=self.headers, json=request_body)
        return responce.json()['result']['sentiment']


if __name__ == '__main__':
    cotoha = CotohaController()
    print(cotoha.emotion_analysis('Ich werde auch heute mein Bestes geben!'))

Wenn Sie den Text an "emotions_analysis ()" übergeben, analysiert die API die Emotionen und gibt "Positiv", "Negativ", "Neutral" zurück.

PS D:\src\telegram_autoreply_bot> python .\cotoha.py
Positive

Der Beispielcode sieht so aus.

BOT-Seiteneinstellung

try:
    cth = cotoha.CotohaController()
    emote = cth.emotion_analysis(rcv_text)
    reply_list = self.replyLists['cotoha'][emote]
    return_text = reply_list[random.randrange(len(reply_list))]
except Exception:
    return_text = "・ ・ ・"

Wenn eine Trigger-Äußerung vorliegt, drücken Sie das zuvor erstellte API-Aufrufmodul und geben Sie eine Antwort aus der Definitionsdatei gemäß der Emotionsanalyse der API zufällig zurück.


 [
   "regex:.*Memetan.*",
   "regex:.*(Schaf|Schaf|Schaf).*"
 ]

In meiner Implementierung wird es ausgelöst, wenn es mit diesem regulären Ausdruck übereinstimmt.

Als Referenz sieht der Definitionsteil der Antwort so aus.

Definition json
  "cotoha" : {
    "Positive" : [
      "Kompliment mehr! !!",
      "Das ist es! Das ist es! !!",
      "Es dehnt sich aus, wenn Sie es loben (unter der Nase)"
    ],
    "Negative" : [
      "Ich kann Dich hören!",
      "Worauf wartest du! !!",
      "Was für ein Schleicher! !!",
      "Kein schlechtes Gespräch! !!"
    ],
    "Neutral" : [
      "Keine Luftlippe! !!",
      "namens? Du hast es genannt! ?? Du hast es genannt! ??",
      "Bitte teilen Sie uns die Anforderungen mit und zahlen Sie 10.000 Yen, wenn Sie es verwenden.",
      "Hast du etwas gesagt"
    ]
  }

Übrigens ist es keine Implementierung von "Antworten" Es gibt viele böse Implementierungen wie ** "Machen Sie sich eine tickende Erwähnung, wenn ein negatives Wort hereinkommt" **. Ich verzichte diesmal darauf, verschiedene Dinge zu tun, aber bitte lassen Sie mich wissen, wenn Sie interessante Implementierungen haben.

Bewegung

29cf765e043a4d68331e75ebd750ea64.png

Es wurde gut aufgenommen und ist vor allem.

Sei vorsichtig und rede über Yomoyama

Informationen zu Anrufauslösern

https://api.ce-cotoha.com/contents/reference/apireference.html#parsing Es ist eine coolere Implementierung, diese morphologische Analyse durchzuführen und Ihren Namen aus den morphologischen Elementen zu übernehmen.

Die Verarbeitung natürlicher Sprache in Japan ist jedoch anfällig für die richtige Nomenklatur. Insbesondere kann ich keine Namen finden, die die Bedeutung von Hiragana nicht verstehen, und es kann zu Fehlfunktionen kommen. Ich denke, dass COTOHA API oder NTT Produkte genauer sind, aber Trotzdem ist es schwierig, genau so etwas wie einen Spitznamen zu finden. Mein Bildschirmname "Memetan" kann je nach Kontext auch wie "Memetan" zerlegt werden. Daher gibt es keinen Fehler in Form eines Feuers mit einem regulären Ausdruck ohne Verwendung einer morphologischen Analyse für den Auslöser.

Über Emotionsanalyse

Es tut mir leid, dass ich so weit gelesen habe, aber es kann schwierig sein zu sagen. Ehrlich gesagt wird gesagt, dass es nur wenige Variationen von schlechten Wörtern gibt, oder wird es gemacht, ohne schlechte Wörter anzunehmen? Ich bin mir nicht sicher, ob "Bad Talk" und "Negative" unterschiedlich sind, aber Derzeit ist die Flagge "Negativ" nicht sehr hoch. Ich habe mein Herz verletzt und schlechte Worte über mich geschrieben, aber ich war ein wenig enttäuscht. afc12487ec568fb355eec13a260ce6bb.png

Ich habe hohe Erwartungen für diesen Bereich in der Zukunft. Als Abdeckung auf der Betriebsseite implementiert meine BOT-Seite, dass sogar "Neutral" eine ähnliche Antwort zurückgibt. Für diejenigen, die einen tickenden BOT erstellen möchten, ist es möglicherweise besser, ihn anders als "Positiv" funktionieren zu lassen.

Sie können es nicht für kommerzielle Zwecke verwenden! Was ist es für Fernarbeit!

Sie können es für 130.000 Yen pro Monat einschließlich Spracheingabe verwenden! !! Das ist billig! !! (Ich sage nicht zu zahlen) Natürlich denke ich nicht, dass es möglich ist, diese Funktion alleine einzuschließen, aber wenn Sie sie als Satz mit anderen Funktionen vorschlagen, kann das Unternehmen sie bestehen. Bitte verwenden Sie auf eigenes Risiko.

Am Ende

Ich habe einen vorgefertigten Chat-BOT verwendet, aber da ich den API-Aufruf erst heute Morgen vorbereitet habe, Vielleicht kann jeder, der Qiita sieht, es ohne großen Aufwand verwenden. Die Verarbeitung natürlicher Sprache hat viele alberne Verwendungszwecke und macht sehr viel Spaß. Zeigen Sie uns bitte Ihre Ideen.

Danke für Ihren Besuch.

Recommended Posts

Ich habe versucht, eine Luftlippenerkennung und eine automatische Reaktion BOT für Fernarbeit zu machen
Ich habe versucht, KI für Smash Bra zu machen
Ich habe mein Bestes versucht, um eine Optimierungsfunktion zu erstellen, aber es hat nicht funktioniert.
Ich habe versucht, eine OCR-App mit PySimpleGUI zu erstellen
Ich habe versucht, einen automatischen Charakterdialoggenerator für die Markov-Kette im N-Stock zu erstellen
Ich habe versucht, einen Bot für die Ankündigung eines Wiire-Ereignisses zu erstellen
Ich habe versucht, eine Aktivität zu erstellen, die gemeinsam die Positionsinformationen festlegt
Ich habe versucht, in 3 Jahren 5 Muster der Analysebasis zu erstellen
[Python] Einfaches Japanisch ⇒ Ich habe versucht, ein englisches Übersetzungswerkzeug zu erstellen
Ich habe versucht, Jojo mit LSTM ein seltsames Zitat zu machen
Ich habe versucht, mit Python + OpenCV eine Bildähnlichkeitsfunktion zu erstellen
Ich habe versucht, eine Gesichtsdiagnose-KI für professionelle Golferinnen zu erstellen ①
Ich habe mit TWE-Lite-2525A einen Öffnungs- / Schließsensor (Twitter-Link) erstellt
Ich habe versucht, eine Gesichtsdiagnose-KI für professionelle Golferinnen zu erstellen ②
Ich habe versucht, "Sakurai-san" LINE BOT mit API Gateway + Lambda zu erstellen
Ich möchte ein Automatisierungsprogramm erstellen!
Ich habe eine Web-API erstellt
Ich habe versucht, einen Übersetzungs-BOT zu erstellen, der mit Discord unter Verwendung von Googletrans funktioniert
Ich habe versucht, die Gesichtsverdeckungsarbeit des Koordinationsbildes für das Tragen zu automatisieren
Eine Einführung in maschinelles Lernen für Bot-Entwickler
Ich habe versucht, durch Schaben ein Bild zu bekommen
Ich habe versucht, ein Objekt mit M2Det zu erkennen!
Ich habe versucht, Linux mit Discord Bot zu betreiben
Ich habe ein ○ ✕ Spiel mit TensorFlow gemacht
Python-Anfänger haben einen Chat-BOT erstellt, also habe ich versucht, zusammenzufassen, wie man es macht
Ich habe versucht, mit Python (Mac OS X) eine Umgebung für maschinelles Lernen zu erstellen.
Ich habe versucht, einen "verdammt großen Literaturkonverter" zu machen.
Ich habe ein automatisches Kitskript für OpenBlocks IoT geschrieben
Fortsetzung ・ Ich habe versucht, Slackbot zu erstellen, nachdem ich Python3 studiert habe
Ich habe versucht, künstliches Perzeptron mit Python zu implementieren
Ich habe versucht, mit AWS Lambda einen AMI zu erhalten
Ich habe versucht, mit OpenCV Ann Man zu werden
Ich habe ein automatisches Installationsskript für Arch Linux geschrieben
Ich habe versucht, die alternative Klasse mit Tensorflow zu finden
Ich habe versucht, einen automatischen Nachweis der Sequenzberechnung zu implementieren
[Python] Ich habe versucht, mit tkinter eine Anwendung zu erstellen, die das Gehalt anhand der Arbeitszeit berechnet
[Für diejenigen, die TPU verwenden möchten] Ich habe versucht, die Tensorflow Object Detection API 2 zu verwenden
Ich habe versucht, mit OpenCV eine Bewegungserkennungsüberwachungskamera mit einer WEB-Kamera mit Raspberry Pi herzustellen