提高文本分类模型性能的6个实践

1.领域语料特征的提取

对于分类问题,收集和提取测试集和训练集的语料需要非常仔细。

对于分类算法来说,领域知识是从语料中抽取众多特征中的重要部分。

例如,假设我们要做一个针对社交媒体的情感分类,那训练集就应该包含来自例如twitter,facebook的社交信息数据,

再比如,要做一个针对新闻语料的情感分析,那语料应该包含来自新闻数据的信息。这是因为,语料的词表包含大量的领域内信息,或者说是与领域内知识高度相关的。

社交媒体产生的信息包含大量的俚语,和非正规的词汇例如 “真棒”、“厉害”、“666”、“牛逼”等等,类似上述的词在正式的新闻报道和博客文章中就出现的相对较少。

下面通过例子阐述一下上述分类环境下的“朴素贝叶斯”所需语料是怎么构建的。简单定义两个类别ClassA和ClassB。我们需要构建一个训练数据集和测试数据集,

值得一提的是,训练的语料需要包含与实际语料相关的特征,因此,训练语料应该包含的数据信息如下:


training_data = [

            …

            ...

            ('The apple iphone was gooooooood, ##$! http://www.apple.com', 'Class A'),

            ('I do not enjoy my job, holy shiiit', 'Class B'),

            ("I ain't feeling lol today crappp.", 'Class B'),

            ("I feel amazing!", 'Class A')

            …

            …

            ]


test_data = [

    ('I luv this phones.', 'Class A'),

    ('This is an amaaaazingg company!', 'Class A'),

    ('I am feeling very gooood about these features lol.', 'Class A'),

    ('This is my bestest phones.', 'Class A'),

    ("What an awesomee player", 'Class A'),

    ('I do not like this phone #apple  ', 'Class B'),

    ('I am tired of this stuff.', 'Class B'),

    ('They are my worst fears! . check them out here: http://goo.gl/qdjk3rf ', 'Class B'),

    ('My boss lives in India, He is horrible.', 'Class B')

           ]


2.利用一个全面而又彻底的停止词表

停止词绝大多数是在语料中使用非常频繁的词,常见的停止词例如“的”、“地”、“得”、“着”、“了”、“过”等等,这些词汇通常用来辅助或定义句子结构,但

是他们在表征上下文是没什么意义的。文本分类中如果将类似的词作为特征将会大大降低分类的性能。所以提升分类性能的关键之一就是忽略这些词。在停止词表的构建中要注意几点:

停止词一部分是来自于语言相关的(比如汉语的虚词,语气词,拟声词,英语中的冠词,介词,连词等等),

一部分是通过统计计算得出语料中那些重要性比较低的词,通常包括以下几种:

语言级别的停止词

比较大的位置词汇(城市名称-国家名称等等)

时间停止词

数字和量词


通过移除上述几点提到的停止词实体,例子中的测试集将会被清洗成如下:

test_data = [

    (' luv  phones.', 'Class A'),

    ('   amaaaazingg company!', 'Class A'),

    ('  feeling very gooood about  features lol.', 'Class A'),

    ('   bestest phones.', 'Class A'),

    ("  awesomee player", 'Class A'),

    ('  not like  phone #apple  ', 'Class B'),

    ('  tired   stuff.', 'Class B'),

    ('   worst fears! . check  out here: http://goo.gl/qdjk3rf ', 'Class B'),

    (' boss lives,   horrible.', 'Class B')

x]


3.为语料剔除噪音

在绝大多数数据科学问题中,更推荐的是将分类算法和模型应用在一个干净,噪音较少的语料中而不是一个“脏”语料。带有噪音的语料通常都会提及不重要的实体词,例如标点符号,标签,数字,链接等

将此类词汇删除将会提升文本分类的表现,因为可能特征集合的样本空间减小了。但是,有一点值得注意的是,在不使用这些词汇的文本分类中才应该被删除,例如对于情感分类来说,可能:)类似的标记和符号表情都是重要的,但是对于其他类型的文本分类可能就是“垃圾”。

通过消除这些噪声实体例如hash标签,url文本,上述例子的测试集语料应该得到如下清洗结果:

test_data = [

    ('luv phones', 'Class A'),

    ('amaaaazingg company', 'Class A'),

    ('feeling very gooood about features lol', 'Class A'),

    ('bestest phones', 'Class A'),

    ("awesomee player", 'Class A'),

    ('not like phone apple  ', 'Class B'),

    ('tired stuff', 'Class B'),

    ('worst fears check out here', 'Class B'),

    ('boss lives horrible', 'Class B')

]


4.消除低频特征词和高频特征词

通常,语料中出现极低频率的关键词对文本分类的特征贡献并不大,过高频的词汇可能也会对文本分类带来干扰,如果能消除这些词的影响,文本分类表现性能将会更好。


5.对语料进行归一化

词是任何文本分类计数的组成部分,但是很多次都会因为在不同的语法语境条件下使用词的不同变体(形容词,名词,动词形式)。所以就需要对这些词进行词干化表征,将带有变体的词汇还原为词根。这类技术被称为词形还原,例如下列词汇

Playing

Player

Plays

Play

Players

Played

上述所有的词都能被还原为“play”,并且这个词才是分类器所关心的,经过词性还原,一个特征对应十个变体,而不是一个变体对应是个特征,在这这情况下样本的特征空间也被进一步压缩了,文本分类的性能也将会得到提高。

(对于中文来说所涉及的技术应该是实体消岐,同义词替换。)

经过语料的归一化处理上述例子测试集清洗结果如下:

test_data = [

    ('luv phone', 'Class A'),

    ('amazing company', 'Class A'),

    ('feeling very good about feature lol', 'Class A'),

    ('best phone', 'Class A'),

    ("awesome player", 'Class A'),

    ('not like phone apple', 'Class B'),

    ('tired stuff', 'Class B'),

    ('worst fear check out here', 'Class B'),

    ('boss live horrible', 'Class B')

]


6.构造复杂的特征:N-grams和词性标签

在大多数场景下,通常一堆词汇合并提供的信息作为特征要好过单个词作为特征。通常合并N个词汇的这种特征表示法被叫做N元模型(N-grams),例如比较著名的二元模型(Bi-grams)就是N元模型的一种。将二元模型作为特征表示将会提高文本分类的性能。

同样,词性和多元模型合并考虑也能提高分类性能,例如英文“book”,当使用名词标签的时候可能是指代可读的书物,如果使用动词标签,可能指代的是预订。


0点赞了文章

网友评论

0条评论

发表

网友评论

0条评论

发表

最新评论

推荐文章

彩龙

Copyright © 2008-2020 彩龙社区(https://www.clzg.cn) 版权所有 All Rights Reserved.

免责声明: 本网不承担任何由内容提供商提供的信息所引起的争议和法律责任。

经营许可证编号:滇B2-20090009-7

下载我家昆明APP 下载彩龙社区APP