[PYTHON] Enseigner les bonnes et les mauvaises machines avec le classificateur Naive Bayes (phase de draft)

Comment enseigner le bien et le mal à un ordinateur

Comme le titre l'indique, je voudrais mettre en place une méthode ** «enseigner le bien et le mal» ** pour les ordinateurs. Si cela est réalisé, les machines seront en mesure de prendre automatiquement des décisions éthiques correctes au nom d'humains non éthiques, ce qui contribuera grandement à l'amélioration de la société, comme l'atténuation des crimes et la dissuasion du terrorisme. En raison de mes connaissances limitées, j'utilise une bibliothèque qui permet une classification naïve-bayes simple, mais j'aimerais finalement organiser un cadre afin qu'il puisse être appliqué à l'apprentissage automatique en général.

Quelles sont les bonnes et mauvaises éthiques que vous souhaitez enseigner aux ordinateurs en premier lieu?

Tout d'abord, clarifiez le type d'éthique que vous souhaitez enseigner à l'ordinateur. Il est très difficile de faire comprendre à un ordinateur toutes les actions humaines en général, ou bien et mauvaises philosophiques et culturelles dans une encyclopédie (bien que certaines personnes puissent le viser sérieusement), c'est donc pratique et appliqué. Tout d'abord, je voudrais réfléchir à la «bonté / exactitude» qui est universellement applicable.

L'éthique obligatoire convient à l'apprentissage automatique

En conclusion, la meilleure façon de former un ordinateur est le philosophe allemand Immanuel Kant 83% 9E% E3% 83% 8C% E3% 82% A8% E3% 83% AB% E3% 83% BB% E3% 82% AB% E3% 83% B3% E3% 83% 88) C'est ** Éthique obligatoire **. En éthique obligatoire, toutes les phrases correspondant au "principe" qui est la norme du bien ou du mal sont ** "should" , ** "must be" ** en anglais ** "I" Il est exprimé comme il faut ... », « Nous ne devons pas ... ». Temporairement, le texte qui mentionne une telle correction éthique est ** "déclaration éthique" **, qui se distingue clairement de ** "déclaration factuelle" ** telle que "en fait ... qu'est-ce que c'est? Disons que c'est fait. C'est le texte qui contient cette déclaration éthique que nous voulons que le classificateur apprenne.

Classification des déclarations éthiques dans l'éthique obligatoire

Il existe différentes théories, mais les déclarations éthiques peuvent être globalement divisées en deux catégories. "Je ne peux jamais mentir même si je suis poignardé avec un couteau et tué" ** Méthode de vie fixe **, et "Si vous me donnez de l'argent, je peux vous aider" ** Méthode de vie provisoire * *est. Le texte "Ne jamais mentir" est, en d'autres termes, une déclaration ** "Le mensonge inconditionnel est interdit" ** (qu'il soit correct ou non) est catégorique. C'est une déclaration éthique. D'autre part, le texte "Si vous me donnez de l'argent, j'aiderai les gens" est une déclaration que ** "J'aiderai les gens à condition que je puisse gagner de l'argent" **, qui est une déclaration éthique avec des hypothèses précises. Je vais. Il existe diverses théories, mais les déclarations éthiques provisoires sont reconnues dans l'éthique obligatoire comme étant des déclarations contraires à l'éthique ou franchement non éthiques.

En plus de la distinction entre catégorique et provisoire, il existe une catégorie liée à «quels énoncés éthiques statutaires sont universellement valables?». C'est assez difficile, mais les trois points principaux sont:

  1. Peut prendre des décisions de manière autonome, pas sur ordre d'autrui ** (peut prendre des décisions de manière indépendante) **
  1. Sur la base de l'éthique de l'obligation ** (sous la forme d'actes / de commandes dans le discours tels que "doit", "devoir", "devrait") **
  2. Le sujet / domaine cible de la déclaration est universel ** (cohérent) **

Former le classificateur pour savoir si la phrase contient "must"

Pour simplifier le problème, examinons si nous pouvons prendre cette fois des décisions rudimentaires mais éthiques. En premier lieu, il faut pouvoir distinguer ** «si le texte saisi est une déclaration factuelle ou une déclaration éthique» **. Nous utilisons donc une bibliothèque qui peut implémenter le classificateur Naive Bayes pour classer si le texte est une déclaration factuelle ou une déclaration éthique. Tout d'abord, nous allons permettre de juger de la différence entre la phrase anglaise de la méthode directe de 10 lignes et presque la même phrase avec son mode changé en "must". import nltk nltk.download('punkt') import numpy as np import matplotlib.pyplot as plt from textblob import TextBlob from textblob.classifiers import NaiveBayesClassifier with open("analysed/actual_statement_pos.txt","r", encoding="utf8", errors='ignore')as f: entire_txt = f.read() """stm = entire_txt.split(".")""" stm = entire_txt.splitlines() print("Text lines =", len(stm)) with open("analysed/ethical_statement_pos.txt","r", encoding="utf8", errors='ignore')as f: entire_txt2 = f.read() """stm = entire_txt.split(".")""" stm2 = entire_txt2.splitlines() print("Text lines =", len(stm2))

Text lines = 10 Text lines = 10

for i,item in enumerate(stm): train = [ (stm[i], "act"), (stm2[i], "etc"), ] cl = NaiveBayesClassifier(train) state1 = "We are trying to be ethical" state2 = "We must be trying to be ethical" state1_class = cl.classify(state1) state2_class = cl.classify(state2) print(state1,"<<- Text | Classified ->> ", state1_class) print(state2,"<<- Text | Classified ->> ", state2_class)

We are trying to be ethical <<- Text | Classified ->> act We must be trying to be ethical <<- Text | Classified ->> etc

La phrase «Nous sommes ...» a été jugée comme une déclaration de fait, tandis que la phrase «Nous devons être ...» a été jugée comme une déclaration d'éthique. Maintenant, vous pouvez au moins ** faire la distinction entre les déclarations factuelles rudimentaires et les déclarations éthiques **.

Juger si la déclaration éthique à juger correspond ou ressemble à la déclaration éthique apprise

Ensuite, nous vérifierons si la déclaration éthique que nous voulons juger est "correcte" par le classificateur. J'ai une théorie, mais pour comprendre correctement le jugement éthique, il est nécessaire de comprendre ** la polarité de la phrase (positive ou négative) ** en plus du contenu de la phrase. Par exemple, même si vous dites au classificateur une déclaration qui interdit le suicide, comme * "Nous ne devons pas nous tuer" *, le taux de correspondance du mot avec le texte * "Nous devons nous tuer" * est de 80%, donc le classificateur est ** Il y a un risque de mal comprendre cette phrase encourageant le suicide comme "80% éthiquement correcte" **. Pour éviter cela, ajoutez la polarité de phrase mentionnée ci-dessus à l'étiquette de classification en plus de l'instruction elle-même. En d'autres termes, ** S'il y a une différence de polarité même si le degré d'accord avec la déclaration éthique correcte est élevé, cela doit être considéré comme une déclaration non éthique **. En plus de la polarité, il est important de pouvoir prendre des décisions indépendantes, mais à ce stade, ce n'est qu'à titre de référence.

  • À ce stade, je prévoyais d'utiliser l'analyse des sentiments de TextBlob, mais à la suite de la vérification, j'ai décidé qu'elle ne pouvait pas être utilisée, donc les étiquettes indiquant la polarité sont etc_pos, etc_neg comme quantités de caractéristiques nominales. Pour une analyse des sentiments à l'aide de TextBlob, consultez l'article ici.

with open("analysed/ethical_statement_pos.txt","r", encoding="utf8", errors='ignore')as f: entire_txt = f.read() stm_pos = entire_txt.splitlines() print("Text lines =", len(stm_pos)) with open("analysed/ethical_statement_neg.txt","r", encoding="utf8", errors='ignore')as f: entire_txt2 = f.read() stm_neg = entire_txt2.splitlines() print("Text lines =", len(stm_neg)) for i,item in enumerate(stm_pos): train2 = [ (stm_pos[i], "etc_pos"), (stm_neg[i], "etc_neg"), ] cl2 = NaiveBayesClassifier(train2) state3 = "We must be trying to be ethical" state4 = "We must not be trying to be ethical" state3_class = cl2.classify(state3) state4_class = cl2.classify(state4) print(state3,"<<- Text | Classified ->> ", state3_class) print(state4,"<<- Text | Classified ->> ", state4_class)

We must be trying to be ethical <<- Text | Classified ->> etc_pos We must not be trying to be ethical <<- Text | Classified ->> etc_neg

"Nous devrions essayer d'être éthiques" est une déclaration "correcte", «Nous n'avons pas à essayer d'être éthiques» a été déterminé comme une déclaration «incorrecte». Il n'est pas exagéré de dire que ce classificateur a appris ** "ce qui est juste et ce qui ne l'est pas" à partir d'au moins 10 lignes de phrases.

(GitHub pour cet article est ici)

Perspectives d'avenir

-Comme le classificateur TextBlob utilisé pour le jugement est une boîte noire, je voudrais créer mon propre classificateur Naive Bayes afin que le degré de correspondance et la quantité de fonctionnalités puissent être visualisés. ・ Comme je l'ai écrit ci-dessus, je voudrais améliorer la précision en augmentant les données de catégorie qui peuvent être classées. Au moins, je voudrais apprendre la polarité en tant que quantité de caractéristique ordinale. ・ Bien sûr, je ne veux pas vraiment juger le bien ou le mal à partir de seulement 10 lignes de phrases, alors j'aimerais augmenter le nombre d'énoncés factuels et éthiques que le classificateur apprend.

Recommended Posts

Enseigner les bonnes et les mauvaises machines avec le classificateur Naive Bayes (phase de draft)
J'ai essayé de classer M. Hanyu et M. Hanyu avec le traitement du langage naturel × classificateur Naive Bayes