Skip to content

文本分类 说明文档

冬日新雨 edited this page Feb 7, 2021 · 3 revisions

朴素贝叶斯分析类别词汇

analyse_freq_words

采用朴素贝叶斯的概率分布,分析文本分类语料中,各个类别的高频特征词汇。

>>> import jieba
>>> import jionlp as jio
>>> dataset_x = ['房间比较差,挺糟糕的,尤其是洗手间。', 
                 '真糟糕!连热水都没有。',
                 '价格比比较不错的酒店。']
>>> dataset_y = ['负', '负', '正']
>>> dataset_x = [jieba.lcut(text) for text in dataset_x]  # 采用任何分词器处理均可
>>> dataset_x = [jio.remove_stopwords(text_segs) for text in dataset_x]  # 去停用词
>>> result = jio.text_classification.analyse_freq_words(
    ... dataset_x, dataset_y, min_word_freq=1)

# {
#     '负': {
#         '糟糕': [2, 1.0],
#         '没有': [1, 1.0],
#         '差': [1, 1.0]
#     }, 
#     '正': {
#          '不错': [1, 1.0]
#     }
# }

  • 采用朴素贝叶斯的概率分布,分析文本分类语料中,各个类别的高频特征词汇,用于制作类型词典。
  • 分析完毕后,方便加入模型当中,形成有效的模型和规则词典相结合的模型,提高模型的稳定性以及F1 值。具体来讲,获取每个类别 y 对应的词汇 x 的条件分布,即 p(x|y),找出其中概率最高,即大于 min_word_threshold 的词汇表,即该类的特征词。对于一般的判别式神经网络模型而言,这些词汇的概率在数据量偏少的情况下,或模型参数量过大的情况下,是很难学习得到的。因此,将这些词信息以各种形式融入模型,可以有效提升模型的 F1 值。根据经验,往往能提升 2% ~ 8%。
  • min_word_freq 指在统计范围内的最低词频,默认 10,;min_word_threshold 指在一个类别语料中,特征词的条件概率的最低值,默认 0.8。

分割数据集

analyse_dataset

对给定的文本分类语料,按照训练、验证、测试进行划分,统计数据集中各个类别的数量和占比,计算训练、验证、测试集的相对熵,判断数据集分割是否合理。

>>> import jionlp as jio
>>> dataset_x = ['美股大涨...', '金融市场开放...', '小米无屏电视...', ...]
>>> dataset_y = ['财经', '财经', '科技', ...]
>>> train_x, train_y, valid_x, valid_y, test_x, test_y, stats = \
    ... jio.text_classification.analyse_dataset(dataset_x, dataset_y)
>>> print(stats)
>>> print(jio.text_classification.analyse_dataset.__doc__)

    whole dataset:
    财经                            32,268        84.52%
    科技                             5,910        15.48%
    total                           38,178       100.00%

    train dataset: 80.00%
    财经                            25,848        84.63%
    科技                             4,694        15.37%
    total                           30,542       100.00%

    valid dataset: 5.00%
    财经                            32,268        84.52%
    科技                             5,910        15.48%
    total                            1,908       100.00%

    test dataset: 15.00%
    财经                             4,840        84.53%
    科技                               886        15.47%
    total                            5,726       100.00%

    train KL divergence: 0.000007, info dismatch: 0.00%
    valid KL divergence: 0.001616, info dismatch: 0.26%
    test KL divergence: 0.000000, info dismatch: 0.00%

  • info dismatch 信息比例越低,证明数据集划分的各类别比例越贴近数据全集的分布。
  • 当文本分类数据集为多标签分类时,须指定参数multi_label(bool),此时,打印各个数据子集的 total 百分比将大于100%,说明了多标签数据的大致比例。