我们是否在实际分析中包括了所有 n-gram 的组合?
Do we include all the combinations of n-grams in the actual anlaysis?
我看了多个关于如何推导 n-gram 的教程(这里我将坚持使用 bigram)并将它们包含在 NLP 的分析中。
我的问题是,我们是否需要将所有可能的双字母组合作为特征包括在内,因为并非所有双字母都有意义。
例如,如果我们有一个句子,如“我喜欢这部电影,因为它既有趣又可怕”,并且考虑二元语法,这些包括(预处理后):
bigrams=["like movie","movie fun", "fun scary"]
我不确定这可能是一个好方法,但我现在能想到的是仅将一些频繁的二元语法作为特征包含在内。
或者是否有其他实用规范可以有效地仅包含有意义的双字母组(尽管有意义可能是主观的和上下文相关的)?
我们可以将每个二元组视为不同重要性的特征。那么问题可以重新表述为“如何选择最重要的特征?”。正如您已经提到的,一种方法是考虑按语料库中的词频排序的最大特征。选择最重要特征的其他可能方法是:
- 应用TF-IDF加权方案。您还可以控制两个额外的超参数:最大文档频率和最小文档频率;
- 使用 Principle Component Analysis 到 select 大型功能集中最有用的功能。
- 训练 scikit-learn 中的任何估计器,然后 select the features 来自训练模型。
这些是NLP领域最广泛使用的特征selection方法。仍然可以使用其他方法,如递归特征消除或顺序特征 selection,但如果信息特征的数量很少(如 1000)并且特征总数很高(如 10000),这些方法是不可行的).
我看了多个关于如何推导 n-gram 的教程(这里我将坚持使用 bigram)并将它们包含在 NLP 的分析中。
我的问题是,我们是否需要将所有可能的双字母组合作为特征包括在内,因为并非所有双字母都有意义。
例如,如果我们有一个句子,如“我喜欢这部电影,因为它既有趣又可怕”,并且考虑二元语法,这些包括(预处理后):
bigrams=["like movie","movie fun", "fun scary"]
我不确定这可能是一个好方法,但我现在能想到的是仅将一些频繁的二元语法作为特征包含在内。
或者是否有其他实用规范可以有效地仅包含有意义的双字母组(尽管有意义可能是主观的和上下文相关的)?
我们可以将每个二元组视为不同重要性的特征。那么问题可以重新表述为“如何选择最重要的特征?”。正如您已经提到的,一种方法是考虑按语料库中的词频排序的最大特征。选择最重要特征的其他可能方法是:
- 应用TF-IDF加权方案。您还可以控制两个额外的超参数:最大文档频率和最小文档频率;
- 使用 Principle Component Analysis 到 select 大型功能集中最有用的功能。
- 训练 scikit-learn 中的任何估计器,然后 select the features 来自训练模型。
这些是NLP领域最广泛使用的特征selection方法。仍然可以使用其他方法,如递归特征消除或顺序特征 selection,但如果信息特征的数量很少(如 1000)并且特征总数很高(如 10000),这些方法是不可行的).