美文网首页FastAI
FastAI08-NLP的分词化和数字化

FastAI08-NLP的分词化和数字化

作者: 科技老丁哥 | 来源:发表于2019-10-10 17:28 被阅读0次

    在NLP中,第一步基本上都是分词化(Tokenization)和数字化(Numericalization).分词化就是将一整段话切分成一个一个的分词,此处的分词并不是简单的一个单词,而数字化是将该单词转换为整数值,便于模型训练。

    FastAI库中将这两个过程直接封装起来了,所以一般我们用TextDataBunch.from_csv(path, 'texts.csv')加载文本数据时,根本就觉察不到这两个过程。

    1. 分词化-Tokenization

    lesson-3提供的数据集是imdb_sample,这是IMDB数据集的一个子集,全部位于一个csv文件中,这个csv文件的格式为:


    第一列是label,表示该评论是正面还是负面,第二列text是评论本身文本,第三列is_valid表示该文本是不是val set。

    当然,最简单的分词化就是用空格来分开一个一个的单词,这样一个单词就是一个分词,但是这样不太准确,标点符号怎么办?缩写怎么办,比如isn't, don't等?大小写怎么办?

    FastAI在加载文本数据集之后,直接将文本进行分词化处理了,处理之后的分词可以用data.show_batch()显示出来:

    2. 数字化-Numericalization

    FastAI在将文本进行分词化处理之后,马上对其进行了数字化处理,即用所有文本中的所有分词(默认下,只考虑出现2次及以上的分词,且分词总数为6万)来构建一个分词库,然后用整数来标注每一个分词,这样就将分词和整数一一对应起来。

    这个分词库就是刚才加载的data.vocab,我们可以用这个分词库来将整数转换为分词,也可以将分词转换为整数。

    data.vocab.itos[:10]
    

    ['xxunk',
    'xxpad',
    'xxbos',
    'xxeos',
    'xxfld',
    'xxmaj',
    'xxup',
    'xxrep',
    'xxwrep',
    'the']

    可以打印出第一个文本对应的整数值:

    data.train_ds[0][0].data[:10]
    

    array([ 2, 5, 66, 62, 34, 99, 72, 34, 42, 96], dtype=int64)

    可以看出,对应的分词都已经转换为整数了。

    其实,TextClasDataBunch.from_csv()函数是一种高级的封装之后的API,所以它失去了一些灵活性,如果想要更多灵活性,可以用下面的方法,效果一样:

    data = (TextList.from_csv(path, 'texts.csv', cols='text')
                    .split_from_df(col=2)
                    .label_from_df(cols=0)
                    .databunch())
    

    使用NLP专用的TextList类的工厂方法可以满足各种定制化需求。比如上面指定文本来源于text列,使用col=2列来分割train set和val set,label来源于cols=0列。

    相关文章

      网友评论

        本文标题:FastAI08-NLP的分词化和数字化

        本文链接:https://www.haomeiwen.com/subject/rhsapctx.html