web-dev-qa-db-fra.com

Extraction de phrases clés à partir de texte basé sur le sujet avec Python

J'ai un grand ensemble de données avec 3 colonnes, les colonnes sont du texte, une phrase et un sujet. Je souhaite trouver un moyen d'extraire des phrases clés (colonne de phrases) en fonction du sujet. La phrase-clé peut faire partie de la valeur de texte ou de la valeur de texte entière.

import pandas as pd


text = ["great game with a lot of amazing goals from both teams",
        "goalkeepers from both teams made misteke",
        "he won all four grand slam championchips",
        "the best player from three-point line",
        "Novak Djokovic is the best player of all time",
        "amazing slam dunks from the best players",
        "he deserved yellow-card for this foul",
        "free throw points"]

phrase = ["goals", "goalkeepers", "grand slam championchips", "three-point line", "Novak Djokovic", "slam dunks", "yellow-card", "free throw points"]

topic = ["football", "football", "tennis", "basketball", "tennis", "basketball", "football", "basketball"]

df = pd.DataFrame({"text":text,
                   "phrase":phrase,
                   "topic":topic})

print(df.text)
print(df.phrase)

J'ai de gros problèmes pour trouver un chemin pour faire quelque chose comme ça, car j'ai plus de 50000 lignes dans mon ensemble de données et environ 48000 de valeurs uniques de phrases et 3 sujets différents.

Je suppose que créer un ensemble de données avec tous les sujets de football, de basket-ball et de tennis n'est pas vraiment la meilleure solution. Donc, je pensais faire une sorte de modèle ML pour cela, mais encore une fois cela signifie que j'aurai 2 fonctionnalités (texte et sujet) et un résultat (phrase), mais j'aurai plus de 48000 classes différentes dans mon résultat, et ce n'est pas une bonne approche.

Je pensais utiliser la colonne de texte comme fonctionnalité et appliquer un modèle de classification afin de trouver des sentiments. Après cela, je peux utiliser le sentiment prédit pour extraire des fonctionnalités clés, mais je ne sais pas comment les extraire.

Un autre problème est que je n'obtiens que 66% de précision lorsque j'essaie de classer les sentiments en utilisant CountVectorizer ou TfidfTransformer avec Random Forest, Decision Tree ou tout autre algorithme de classification, et aussi 66% de précision si j'utilise TextBlob pour l'analyse des sentiments.

De l'aide?

3
taga

Il semble que vous cherchiez à regrouper de courts morceaux de texte par sujet. Vous devrez tokeniser les données d'une manière ou d'une autre. Il existe une variété d'encodages que vous pourriez envisager:

Sac de mots, qui classe en comptant la fréquence de chaque mot de votre vocabulaire.

TF-IDF: fait ce qui est ci-dessus mais rend les mots qui apparaissent dans plus d'entrées moins importants

n_grams/bigrams/trigrams qui fait essentiellement la méthode du sac de mots mais maintient également un certain contexte autour de chaque mot. Vous aurez donc des encodages pour chaque mot mais vous aurez également des jetons pour "great_game", "game_with" et "great_game_with" etc.

Bigrammes clairsemés orthogonaux (OSB) Créez également des fonctionnalités qui ont les mots plus éloignés, comme "great__with"

Chacune de ces options pourrait être idéale pour votre ensemble de données (les deux dernières sont probablement votre meilleur pari). Si aucune de ces options ne fonctionne, vous pouvez essayer quelques autres options:


Vous pouvez d'abord utiliser les incorporations Word. Ce sont des représentations vectorielles de chaque mot qui, contrairement au codage à chaud, contiennent intrinsèquement une signification de mot. Vous pouvez additionner les mots d'une phrase ensemble pour obtenir un nouveau vecteur contenant l'idée générale de l'objet de la phrase qui peut ensuite être décodé.

Vous pouvez également utiliser des intégrations Word avec un LSTM bidirectionnel. C'est l'option la plus gourmande en calculs, mais si vos autres options ne fonctionnent pas, cela peut être un bon choix. Les biLSTM essaient d'interpréter les phrases en examinant le contexte autour des mots pour essayer de comprendre ce que le mot pourrait signifier dans ce contexte.

J'espère que cela t'aides

0
Mike

Je pense que ce que vous recherchez s'appelle "Modélisation de sujets" en PNL. vous devriez essayer d'utiliser LDA pour la modélisation de sujets. C'est l'une des méthodes les plus simples à appliquer. également comme @Mike l'a mentionné, la conversion de Word en vecteur a de nombreuses approches. Vous devriez d'abord essayer des approches simples comme le vectoriseur de comptage, puis passer progressivement à quelque chose comme Word-2-vect ou glove.

Je joins quelques liens pour appliquer LDA au corpus. 1. https://towardsdatascience.com/nlp-extracting-the-main-topics-from-your-dataset-using-lda-in-minutes-21486f5aa925 2. https: //www.machinelearningplus.com/nlp/topic-modeling-visualization-how-to-present-results-lda-models/

0
Immortal3