Как узнать слова, связанные с определенным классом c в модели НЛП? - PullRequest
0 голосов
/ 21 июня 2020

Я обучил модель НЛП «Классификации потребительских жалоб» с использованием алгоритма регрессии Logisti c и векторизатора TF-IDF. Я хочу знать слова, которые моя модель ассоциирует с определенным классом. Я ищу что-то подобное - Класс 1 = [«Список слов, которые помогают моей модели определить, что вводимый текст принадлежит этому классу»]

1 Ответ

1 голос
/ 21 июня 2020

Полагаю, вам нужно что-то вроде самых важных слов (или лучше токенов ), связанных с одним классом. Потому что обычно все токены так или иначе «связаны» со всеми классами. Поэтому я отвечу на ваш вопрос следующим подходом:

Предположим, ваши токены (или слова), сгенерированные TfidfVectorizer, хранятся в X_train с метками в y_train, и вы обучили такую ​​модель, как :

from sklearn.linear_model import LogisticRegression
from sklearn.feature_extraction.text import TfidfVectorizer

vectorizer = TfidfVectorizer()
X_train = vectorizer.fit_transform(corpus)

clf = LogisticRegression()
clf.fit(X_train, y_train)

Атрибут coef_ для LogisticRegression имеет форму (n_classes, n_features) для мультиклассовых задач и содержит коэффициенты, рассчитанные для каждого токена и каждого класса. Это означает, что, индексируя его в соответствии с классами, можно получить доступ к коэффициентам, используемым для этого конкретного класса, например, coef_[0] для класса 0, coef_[1] для класса 1 и т. Д.

Просто свяжите имена токенов с коэффициентами и отсортируйте их по их значению. Тогда вы получите самые важные жетоны для каждого класса. Пример получения наиболее важных токенов для класса 0:

import pandas as pd

important_tokens = pd.DataFrame(
    data=clf.coef_[0],
    index=vectorizer.get_feature_names(),
    columns=['coefficient']
).sort_values(ascending=False)

Токены в important_tokens теперь отсортированы в соответствии с их важностью для класса 0 и могут быть легко извлечены с помощью значений индекса. . Например, чтобы получить n наиболее важных функций в виде списка: important_tokens.head(n).index.values.

Если вам нужны наиболее важные токены для других классов, просто замените индекс coef_ атрибут по мере необходимости.

...