[PYTHON] N'utilisez pas de mots trop forts ... Cela semble faible ~ Vérifions si l'IA peut être paraphrasée "gentiment" ~

J'ai écrit le titre comme AI, mais devinez s'il vous plaît. S'il vous plaît…

Je pense que vous êtes ingénieur, mais avez-vous une expérience du dessin en parlant à des gens ordinaires en termes techniques? J'ai.

Donc, cette fois, mon expression est Est-ce une expression «transmise»? Quelle est une expression plus compréhensible? Jugons cela à l'aide de l'apprentissage automatique. C'est une tentative.

TL;DR

Nous avons proposé et implémenté un système qui combine l'analyse d'équivalence sémantique par la tête BERT + CNN et la détermination de la difficulté des mots par le corpus du manuel pour déterminer si une phrase est paraphrasée d'une manière simple et significative.

github https://github.com/MosasoM/Aizen J'ai mis une source que je peux facilement essayer, donc je pense que ce serait intéressant si vous pouviez l'essayer.

Texte standard Texte de paraphrase score                    Probabilité d'implication             difficulté      
Veuillez résumer l'ordre du jour sous forme papier de la prochaine réunion Résumez l'ordre du jour dans un CV pour la prochaine réunion 0.08641 0.744 9
Veuillez résumer l'ordre du jour sous forme papier de la prochaine réunion Préparez un morceau de papier pour en discuter pour la prochaine réunion inf 0.994 0

Dans ce cas, «Veuillez noter sur papier ce dont vous discutez pour la prochaine réunion» est une paraphrase plus appropriée et plus douce.

Il y a une chose que je veux faire pour passer en revue ma communication, qui a tendance à utiliser des mots difficiles, et que signifie encore ce mot? Je pense qu'il est important de penser que c'est également important.

Il y a de nombreux endroits qui sont lâches, mais je pense que ce serait formidable si nous pouvions utiliser cela comme point de départ pour fabriquer de meilleurs produits.

introduction

Vous n'avez pas à lire ici.

Je pense que tout le monde utilise des termes plus ou moins techniques dans son travail. Certes, les termes techniques sont tellement compressés qu'ils sont très utiles pour ceux qui partagent ces connaissances.

Cependant, je pense que c'est un fait bien connu que les termes techniques peuvent être très désagréables pour ceux qui ne les connaissent pas. Cependant, je suis obsédé par le pouvoir magique de la quantité d'informations que possèdent les termes techniques, et sans reconnaître le degré de compréhension de l'autre partie (il est irréaliste de procéder en vérifiant toutes les connaissances de l'autre partie en premier lieu), j'utilise juste beaucoup les termes techniques. Je pense qu'il y a beaucoup de gens qui ont eu l'expérience d'échouer en communication.

Un tel phénomène est assez courant chez les personnes qualifiées d '«excellentes» avec un grand nombre de vocabulaire standard, mais c'est une perte pour la société dans son ensemble que des personnes excellentes perdent leur réputation en raison d'un tel échec de communication. Je pense que ça peut l'être. Il y a un besoin pour une paraphrase facile du texte ici. Bien sûr, il existe de nombreuses autres situations où une paraphrase facile des phrases est nécessaire, comme lors de l'explication aux enfants ou lors de l'enseignement à des débutants en langue. De plus, essayer de paraphraser les phrases doucement est considéré comme ayant des mérites tels que pouvoir approfondir la réflexion en reconfirmant la définition de quelque chose qui n'est pas seulement pour le destinataire de la conversation mais aussi pour l'orateur. ..

Sur la base du contexte ci-dessus, cet article résume ce que nous avons fait dans le but de construire un système pour déterminer si une phrase est une paraphrase douce de la phrase standard et fournir des commentaires.

↑ Je ne comprends pas les mots difficiles! En d'autres termes facilement !!!

Par conséquent, nous allons créer un système qui détermine s'il s'agit d'une simple paraphrase et donne des commentaires.

Puisqu'il s'agit d'un prototype, il existe de nombreux points de contrôle. Autant que je sache, je vais mettre les points de gouverneur dans chaque chapitre en pliant.

Aperçu de la méthode

Puisqu'il faut être «doux» et «paraphraser», nous allons créer un jugement «doux» et une machine à juger «paraphrase». Pour la "douceur", nous avons utilisé le niveau de difficulté des mots qui sont simplement utilisés, et pour juger de la "paraphrase", nous avons utilisé la tâche de jugement d'implication de BERT + CNN.

model_sumary_aizen.png

<détails>

Governor Point 1 </ summary> Ce serait bien si non seulement le jugement des mots mais aussi le jugement des expressions sensibles pouvaient être ajoutés. Il existe également une lacune dans la tâche de jugement d'implication, qui sera décrite plus loin.

Méthode 1: Jugement de gentillesse

Effectuer une analyse morphologique en utilisant JUMAN ++, et le résultat de l'analyse morphologique est un mot indépendant (nom, verbe, adjectif, adjonction). ), Le niveau de difficulté est déterminé par la première note du Textbook Corpus Dictionary. (Merci au laboratoire Kurohashi / Kawahara et à l'Institut national de la langue japonaise) (J'ai emprunté un tableau de vocabulaire parce que je pensais que c'était à des fins éducatives et de recherche, mais s'il y a un problème, j'en utiliserai un autre.)

Cette fois, les mots indépendants qui ne figurent pas dans le corpus du manuel ne sont pas comptés. Parce que je n'ai pas trouvé de mot variable comme ~, ou que j'utilise rarement des mots à un niveau qui ne rentre pas dans le corpus du manuel dans une simple paraphrase, j'ai donc souligné la facilité de mise en œuvre.

Si JUMAN ++ est actuellement installé sur un Mac

brew install jumanpp

C'est possible avec. Cette fois, je vais l'utiliser à partir de la liaison python, donc j'installerai également KNP, mais comme il sera entré avec pip,

!pip install pyknp

Ça va. J'obtiens chacun d'eux avec de vieilles informations, mais maintenant je peux le faire. Ensuite, faites un dictionnaire de jugement de difficulté. Cela dit, ce n'est pas si difficile, juste un peu de traitement de la table de vocabulaire et de l'avoir comme type de dictionnaire.


vocab = pd.read_csv("./cahier de texte.txt",encoding="utf8",sep="\t")
vocab = vocab[["Mots","Mots読み","Première année scolaire"]]
grade_dif_dic = {"petit_Avant":0,"petit_arrière":1,"Pendant ~":2,"Haute":3}
vocab_diff_dic = {}
for line in vocab.values:
    if line[0] in vocab_diff_dic and grade_dif_dic[line[2]] < vocab_diff_dic[line[0]]:
        vocab_diff_dic[line[0]] = grade_dif_dic[line[2]]
    else:
        vocab_diff_dic[line[0]] = grade_dif_dic[line[2]]

Je viens de créer un dictionnaire comme celui-ci. Carte des pandas Veuillez me pardonner de l'avoir rendue plus intelligente. Probablement pas tellement, mais si le mot-clé est usé, j'essaie de l'interpréter d'une meilleure manière (adopter celui qui apparaît le plus tôt).

L'analyse morphologique est presque comme dans l'exemple

Référence

Parmi ceux-ci, uniquement pour ceux dont les mots partiels sont des mots indépendants, le niveau de difficulté est obtenu à partir du dictionnaire et additionné. En particulier,

test1 = "Ceci est un texte d'essai et est différent du texte utilisé dans cette expérience."
result = jumanpp.analysis(test1)
d1 = 0
d1_cnt = 0
for mrph in result.mrph_list(): #Accéder à chaque morphologie
    if mrph.hinsi in indep:
        if mrph.genkei in vocab_diff_dic:
            d1 += vocab_diff_dic[mrph.genkei]
            d1_cnt += 1
            print(mrph.genkei,vocab_diff_dic[mrph.genkei])
print("Difficulté totale:{}Nombre de mots indépendants:{}Difficulté moyenne:{}".format(d1,d1_cnt,d1/d1_cnt))
Difficulté totale:4 Nombre de mots indépendants:6 Difficulté moyenne:0.6666666666666666

C'est comme ça.

Méthode 2: Analyse d'équivalence sémantique

C'est le point qui inclut le plus de gouverneur, alors soyez prêt.

2-1: Préparation des données

Cette fois, nous utiliserons BERT efficacement comme pré-processus pour les données, donc ce chapitre ne décrira que où les données ont été empruntées. Puisque nous déterminerons si les significations sont les mêmes cette fois, nous utiliserons l'ensemble de données pour déterminer les implications comme une tâche similaire. De plus, j'ai utilisé les données suivantes parce que je veux que vous jugiez la simple paraphrase.

Nagaoka University of Technology Natural Language Laboratory Easy Japanese Corpus NTCIR-10 RITE2 [Données d'évaluation de l'implication textuelle du laboratoire Kurohashi / Kawahara de l'Université de Kyoto](http://nlp.ist.i.kyoto-u.ac.jp/index.php?Textual%20Entailment%20%E8%A9%95%E4 % BE% A1% E3% 83% 87% E3% 83% BC% E3% 82% BF)

Parmi ceux-ci, le corpus japonais facile sera fermé fin mars 2020 en raison de la fermeture du laboratoire, il semble donc préférable de le télécharger plus tôt.

Merci à l'auteur de chaque jeu de données.

  • RITE2 a bc, mc, unittest, mais j'ai utilisé bc, mc parmi eux. mc convertit en réponses correctes et incorrectes binaires.
  • Les données d'évaluation de l'implication textuelle ont emprunté une version de données binaires.
  • Le jeu de données japonais facile contient pas mal de paraphrases qui ne changent pas (celles qui étaient à l'origine japonaises faciles), donc je n'ai utilisé que celles qui changent avant et après.

Si les données sont créées jusqu'à ce point, l'ensemble de données japonais facile ne contient que des données d'implication, et comme le nombre de données est important, il devient des données déséquilibrées avec une grande quantité de données d'implication, ce qui est gênant.

Par conséquent, à la fin, deux phrases différentes ont été sélectionnées au hasard dans le groupe de données ci-dessus et combinées pour gonfler les données de non-implication et en faire de force des données équilibrées.

Cliquez ici pour le code pour créer les données ci-dessus
def data_load():
    train_x = []
    train_y = []
    
    true_count = 0
    
    entail_kyoto = ET.parse("/content/drive/My Drive/Aizen/Datas/entail_evaluation_set_label_conv.xml") #Corpus de l'Université de Kyoto
    entail_kyoto_root = entail_kyoto.getroot()
    for child in entail_kyoto_root:
        temp = []
        if child.attrib["label"] == "Y":
            train_y.append(1)
            true_count += 1
        else:
            train_y.append(0)
        for gchild in child:
            temp.append(gchild.text)
        train_x.append(temp)
    RITE_names = ["dev_bc","dev_mc","testlabel_bc","testlabel_mc"]
    pos = ["F","B","Y"]
    neg = ["C","I","N"]
    for name in RITE_names: #Chargez RITE. Lisez chaque test et divisez-le plus tard
        rite_file_path = "/content/drive/My Drive/Aizen/Datas/RITE2_JA_bc-mc-unittest_forOpenAccess/RITE2_JA_{}/RITE2_JA_{}.xml".format(name,name)
        rite_tree = ET.parse(rite_file_path)
        root = rite_tree.getroot()
        for child in root:
            temp = []
            if child.attrib["label"] in pos:
                train_y.append(1)
                true_count += 1
            else:
                train_y.append(0)
            for gchild in child:
                temp.append(gchild.text)
            train_x.append(temp)
    easy_jp = pd.read_csv("/content/drive/My Drive/Aizen/Datas/T15-2020.1.7.csv").values #Lecture japonaise facile.
    for line in easy_jp:
        if line[1] != line[2]: #Seul celui qui a changé en d'autres termes
            train_y.append(1)
            train_x.append([line[1],line[2]])
            true_count += 1
    
	#À partir de là, jusqu'à ce que les réponses correctes et incorrectes soient identiques, ajoutez deux phrases aléatoires et gonflez les réponses incorrectes.
    all_num = len(train_x)
    
    for i in range(2*true_count-all_num):
        left_raw = np.random.randint(all_num)
        left_col = np.random.randint(2)
        right_raw = np.random.randint(all_num)
        while left_raw == right_raw:
            right_raw = np.random.randint(all_num)
        right_col = np.random.randint(2)
        train_x.append([train_x[left_raw][left_col],train_x[right_raw][right_col]])
        train_y.append(0)
    
    
    
    return train_x,train_y

<détails>

Governor Point 2 </ summary>

Puisque l'ensemble de données d'implication n'a fondamentalement que A → B ou A = B, il aurait peut-être été préférable à cette fin de préparer A Par conséquent, il est tout à fait possible que les résultats obtenus avec ce modèle aient des performances de généralisation médiocres en tant que tâche de détermination d'implication générale. Cependant, cette fois, il suffit de juger si la paraphrase facile est implicite, donc cette fois c'est correct car elle contient suffisamment de données de paraphrase facile à cet effet.

2-2

En tant que modèle, j'utilise BERT, qui est un modèle de traitement du langage naturel très chaud récemment (ou plutôt il y a quelque temps?). Je n'ai pas vraiment compris ce qu'était BERT, alors j'ai fait référence au site suivant. https://udemy.benesse.co.jp/ai/bert.html https://ainow.ai/2019/05/21/167211/ http://deeplearning.hatenablog.com/entry/transformer

Le modèle utilisé cette fois est le modèle BERT + CNN. La partie BERT est assez difficile à entraîner par moi-même, alors quand je me demandais quoi faire, j'ai trouvé les suivantes très reconnaissantes. https://yoheikikuta.github.io/bert-japanese/ Dieu. Merci beaucoup.

Au fait, puisqu'il s'agit d'une phrase, je dois créer des données d'apprentissage ... Hmm ...? https://qiita.com/hideki/items/1ec1c21c33326ad5615f

Eh, c'est trop pratique? Merci beaucoup. Par conséquent, l'accumulation de grands ancêtres a permis d'acquérir instantanément des vecteurs par le modèle monstre BERT.

Alors, je vais faire la partie tête. En tant qu'étudiant pauvre cette fois, je ne pouvais pas préparer suffisamment de ressources informatiques pour affiner chaque BERT, donc je ne règle que la partie principale avec Google Colablatory. (Grâce à Google)

Le vecteur obtenu par BERT est mot par mot. Entrez les vecteurs pour deux documents et résolvez le problème comme une classification à deux classes avec la même signification ou non.

Le point que j'ai imaginé un peu ici est que le vecteur d'entrée a été créé en insérant alternativement les vecteurs de deux documents. C'est parce que j'ai pensé qu'il serait préférable d'avoir un vecteur avec des informations de position qui rapproche les mots proches les uns des autres plutôt que de les disposer en parallèle.

BERT_con.png

Les vecteurs ci-dessus sont classés par CNN. La configuration de CNN est comme ça quand on utilise des keras.

def make_network():
    x_in = Input((256,768,1))
    x = Conv2D(64,(3,3),padding="valid")(x_in)
    x = BatchNormalization()(x)
    x = Activation('relu')(x)
    x = Conv2D(64,(3,3),padding="valid")(x)
    x = BatchNormalization()(x)
    x = Activation('relu')(x)
    x = MaxPooling2D(pool_size=(3,3),strides=2,padding="same")(x)

    x = Conv2D(64,(2,2),padding="valid")(x)
    x = BatchNormalization()(x)
    x = Activation('relu')(x)
    x = Conv2D(128,(2,2),padding="valid")(x)
    x = BatchNormalization()(x)
    x = Activation('relu')(x)
    x = MaxPooling2D(pool_size=(3,3),strides=2,padding="same")(x)

    x = GlobalAveragePooling2D()(x)

    x = Dense(2)(x)
    x = Activation("softmax")(x)
    model = Model(x_in,x)
    return model

Eh bien, c'est juste un CNN sans changement particulier.

<détails>

Governor Point 3 </ summary> En ne considérant que la direction horizontale, j'estime que l'utilisation d'un filtre tel que 1 * 5 plutôt qu'un filtre 3 * 3 peut être vue relativement loin et le nombre de paramètres peut être réduit.

Le générateur qui jette les données ci-dessus dans le modèle ressemble à ceci.
def data_gen(data_X,data_y,vectorian,batchsize=32):
    d_cnt = 0
    x = []
    y = []
    while True:
        for i in range(len(data_X)):
            t_l = str(data_X[i][0])
            t_r = str(data_X[i][1])

            t_l = vectorian.fit(t_l).vectors
            t_r = vectorian.fit(t_r).vectors


            itp = range(t_l.shape[1])
            in_x = np.insert(t_r,itp,t_l[:,itp],axis=1)
            
            x.append(in_x)
            
            if data_y[i] == 1:
                y.append([0,1])
            else:
                y.append([1,0])
            
            d_cnt += 1
            
            if d_cnt == batchsize:
                inputs = np.array(x).astype(np.float32)
                inputs = inputs.reshape(batchsize,256,768,1)
                targets = np.array(y)
                x = []
                y = []
                d_cnt = 0
                yield inputs,targets

Eh bien, ce n'est pas intéressant. Alors j'ai commencé à apprendre

Cela a pris 1 époque par heure, donc apprendre au Google Colablatory était une douleur. La précision de 3 à 5 époques est comme ça (j'ai effacé la sortie de 1 à 2 époques en raison de la limitation du GPU sur le chemin et du nouveau temps d'exécution.)

Epoch 1/1
1955/1955 [==============================] - 3846s 2s/step - loss: 0.1723 - categorical_accuracy: 0.9396 - val_loss: 0.1632 - val_categorical_accuracy: 0.9398
Epoch 1/1
1955/1955 [==============================] - 3852s 2s/step - loss: 0.1619 - categorical_accuracy: 0.9436 - val_loss: 0.1477 - val_categorical_accuracy: 0.9487
Epoch 1/1
1955/1955 [==============================] - 3835s 2s/step - loss: 0.1532 - categorical_accuracy: 0.9466 - val_loss: 0.1462 - val_categorical_accuracy: 0.9482

Il semble que la perte va encore baisser, mais il est difficile de s'en tenir à l'avant du PC, alors pardonnez-moi ... À propos, cette fois, il est forcé, mais comme il s'agit de données équilibrées, F1 n'est pas calculé ~~ (gênant) ~~

S'il s'agit de données équilibrées, je pense que l'exactitude ne donnera pas un résultat aussi étrange.

production

Vous pouvez utiliser le modèle et le dictionnaire ci-dessus pour faire un jugement de paraphrase de phrase et un score de difficulté. Préparez une fonction de sortie le cas échéant.

def texts_to_inputs(text1,text2):
    t_l = text1
    t_r = text2

    t_l = vectorian.fit(t_l).vectors
    t_r = vectorian.fit(t_r).vectors

    itp = range(t_l.shape[1])
    in_x = np.insert(t_r,itp,t_l[:,itp],axis=1).reshape(1,256,768,1)
    return in_x

def easy_trans_scores(test1,test2,vocab_diff_dic):
    test_x = texts_to_inputs(test1,test2)
    p = model.predict(test_x)

    result = jumanpp.analysis(test1)
    d1 = 0
    d1_cnt = 0
    for mrph in result.mrph_list(): #Accéder à chaque morphologie
        if mrph.hinsi in indep:
            if mrph.genkei in vocab_diff_dic:
                d1 += vocab_diff_dic[mrph.genkei]
                d1_cnt += 1
    print("Probabilité d'implication:{:.3g}Difficulté totale:{}Nombre de mots indépendants:{}Difficulté moyenne:{}".format(p[0][1],d1,d1_cnt,d1/d1_cnt))
    print("total score:{:.5g}".format(p[0][1]/d1))

Pour l'instant, utilisons implication / (difficulté totale) comme score. La raison de la difficulté totale plutôt que moyenne est que j'ai pensé qu'il valait mieux évaluer correctement les phrases courtes et concises. Eh bien, il y a un bug qui fait que lorsque le niveau de difficulté total est de 0, la valeur devient toujours inf et il n'y a aucune implication ... Cette fois, ça va ...

résultat

Texte standard Texte de paraphrase score                  Probabilité d'implication            difficulté               
Ceci est un texte d'essai et est différent du texte utilisé dans cette expérience. Ceci est une sentence d'essai 0.88207 0.882 1
Ceci est un texte d'essai et est différent du texte utilisé dans cette expérience. Ce texte est préparé uniquement pour le test et est différent de celui réellement utilisé. 0.20793 0.832 4
Ceci est un texte d'essai et est différent du texte utilisé dans cette expérience. C'est un test 0.53867 0.539 1
Veuillez résumer l'ordre du jour sous forme papier de la prochaine réunion Résumez l'ordre du jour dans un CV pour la prochaine réunion 0.086415 0.744 9
Veuillez résumer l'ordre du jour sous forme papier de la prochaine réunion Préparez un morceau de papier pour en discuter pour la prochaine réunion inf 0.994 0
Hypnose complète qui contrôle les cinq sens et la perception de la pression spirituelle de l'autre partie qui a vu le moment de la libération même une fois, et peut induire le sujet en erreur. Si vous voyez le moment de la solution ne serait-ce qu'une seule fois, vous comprendrez sûrement mal l'objet. 0.063651 0.287 5
Hypnose complète qui contrôle les cinq sens et la perception de la pression spirituelle de l'autre partie qui a vu le moment de la libération même une fois, et peut induire le sujet en erreur. Vous pouvez faire en sorte que le sujet se sente mal en manipulant la personne qui a vu le moment de la solution ne serait-ce qu'une seule fois. 0.11004 0.654 7

Les paraphrases considérées comme ayant le score le plus élevé sont en gras. N'est-ce pas un résultat raisonnablement convaincant?

Au fait, M. Aizen ... Veuillez me donner quelques mots plus gentils ...

Résultat 2 (ajout) En d'autres termes, bonne bataille et puissance de Kim Roger

En utilisant ce système, j'ai paraphrasé un ami et joué un bon match décisif contre le roi (jeu 1vs1, mais si je gagne, je serai le roi) Cela ressemblera à ceci quand il sera transformé en jeu? C'est comme ça.

Cliquez ici pour le thème.

** L'homme qui a gagné la richesse, la renommée, le pouvoir et tout le monde'Gold Roger, le roi des pirates'Les paroles qu'il a prononcées à sa mort ont poussé les gens à la mer. ** **

C'est la gueule du PO d'une certaine animation nationale que tout le monde connaît.

Premier coup (I) 1er tour

** L'argent, la position, le pouvoir L'homme qui a tout pris dans ce monde, le roi pirate Gold Roger Les mots qu'il a prononcés avant de mourir ont donné envie aux gens d'aller à la mer **

Score: Probabilité d'implication: 0,696 Difficulté totale: 8 ** score total: 0,087022 **

Eh bien, je pense que c'est un bon premier pas. La probabilité d'implication étant un peu faible, je sens que j'ai trop attaqué pour abaisser le niveau de difficulté.

Deuxième coup (en face) 1er tour

** "L'homme qui a obtenu tout l'argent, la popularité, le pouvoir et le monde" Pirate King Gold Roger "Le mot qu'il a prononcé juste avant sa mort a envoyé des gens à la mer" **

Score: Probabilité d'implication: 0,974 Difficulté totale: 14 ** score total: 0,069588 **

On en parle avec des implications, mais je suis toujours meilleur au score total. Si vous n'attaquez pas en paraphrasant des mots, ce sera comme ça. C'est étonnamment stratégique.

Premier coup (I) 2e tour

** L'argent, la popularité, le pouvoir, l'homme qui a tout obtenu dans le monde, 'Pirate King Gold Roger' Les mots qu'il a prononcés avant de mourir ont donné envie aux gens d'aller à la mer **

Score: Probabilité d'implication: 0,917 Difficulté totale: 9 ** score total: 0,10194 **

Étant donné que l'autre partie avait une probabilité d'implication plus élevée, j'ai pu améliorer considérablement la probabilité d'implication et le score total en l'incorporant comme modèle. C'est ** gagné ** (drapeau)

Deuxième tour (opposé) 2e tour (phrase gagnante)

** L'homme qui a obtenu tout l'argent, la popularité, le pouvoir et le monde 'Le roi des pirates Kim Roger' Le mot qu'il a prononcé à sa mort a envoyé tout le monde à la mer **

Score: Probabilité d'implication: 0,952 Difficulté totale: 9 ** score total: 0,10581 **

e ···?

perdu. Bien qu'il s'agisse d'une marge serrée, perdre c'est perdre. Le gagnant était probablement ** Kim Roger **. Cela réduit considérablement le niveau de difficulté tout en maintenant la probabilité d'implication. (Quand j'ai vu le résultat, j'ai ri.)

Eh bien, c'est aussi une partie intéressante de ce système que vous pouvez avoir une paraphrase amusante pour décider d'un match comme celui-ci. ~~ Parce que c'est bâclé ici et là ~~ Comment interprétez-vous ce système? Vous pouvez concourir pour des points compétitifs, y compris la méta-compétition, et vous pouvez également concourir pour des points dans le cadre du bon sens, et chacun a son propre plaisir.

Résumé et perspectives d'avenir

Bien qu'il y ait eu quelques bizarreries, j'ai pu en quelque sorte juger si j'étais capable ou non de faire une paraphrase douce en combinant le jugement d'implication et le jugement de difficulté.

** C'est assez intéressant à faire par moi-même ** (Il est également intéressant de poser la question: «Est-ce bien paraphrasé?» Ou une telle phrase n'est-elle pas difficile?) Donc, je veux en faire un jeu ou un service. (Je souhaite mettre en place un classement en ligne, etc.) (je ne peux pas le faire maintenant car je n'ai pas les connaissances pour créer des services)

Comme je l'ai mentionné au début, si vous appréciez cela en tant que jeu, vous pourrez peut-être en profiter, et en même temps, vous pourrez peut-être créer un ensemble de données de paraphrases faciles faites par des personnes, et en utilisant ces données, vous pouvez faire des considérations plus intéressantes. J'y pense.

Ce modèle etc. (pour ceux qui veulent l'essayer)

https://github.com/MosasoM/Aizen

C'est arrivé. Je l'ai écrit dans le référentiel,

  • JUMAN++
  • text-vectorian
  • Modèle appris japonais BERT (https://yoheikikuta.github.io/bert-japanese/)

Si vous regardez Aizen.ipynb, vous pouvez (probablement) l'essayer assez facilement. Si vous avez des résultats intéressants ou si vous aimez ce système de notation, je vous serais reconnaissant de bien vouloir commenter.

Merci

Cet article est basé sur l'emprunt de modèles formés par BERT et de divers ensembles de données. Comme mentionné dans le texte, merci à toutes les personnes qui les ont maintenues.