如何知道 NLP 模型中与特定 class 关联的词?

How to know the words associated with a specific class in NLP model?

我已经使用 Logistic 回归算法和 TF-IDF 向量化器为“消费者投诉 Class化”训练了一个 NLP 模型。我想知道我的模型与特定 class 关联的词。我正在寻找这样的东西 -
Class 1 = [“帮助我的模型识别输入文本属于此 class 的单词列表”]

我想你需要的是与一个 class 相关联的最重要的词(或更好的 标记 )。因为通常所有标记都将以一种或另一种方式与所有 classes“关联”。所以我会用以下方法回答你的问题:

让我们假设 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)

LogisticRegressioncoef_ 属性的形状为 (n_classes, n_features) for multiclass 问题并包含为每个标记和每个 class 计算的系数。这意味着,通过根据 classes 对其进行索引,可以访问用于该特定 class 的系数,例如coef_[0] 对应 class 0coef_[1] 对应 class 1,依此类推。

只需将标记名称与系数重新关联起来,并根据它们的值对它们进行排序。然后你会得到每个 class 最重要的令牌。获取 class 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 中的标记现在根据它们对 class 0 的重要性进行排序,并且可以通过索引值轻松提取。例如,要获取 n 最重要的特征列表:important_tokens.head(n).index.values.

如果您想要其他 classes 的最重要标记,只需根据需要替换 coef_ 属性的索引即可。