自然语言处理的数据预处理过程

经过毕设一段时间的学习,我对自然语言处理领域数据预处理部分有了一点浅显的理解。

自然语言处理领域实现过程中需要将文本转化为深度学习模型的向量输入。因此重要的是如何将文本转化为模型需要的向量输入格式。我目前将转化方法分为两种:一个是Bert预训练模型的输入,另一个是一般深度学习模型(如TextCNN)。其实前者也可以归属于后者,只是Bert预训练模型有专门的方法对文本数据进行处理,所以操作方面有所不同,但实际上本质是一样的。

对于Bert模型而言,我们一般可以使用Bert模型自己的分词器tokenizer去对文本数据进行处理,得到模型需要的imput_ids和attention_mask。将上述两类向量作为输入即可对模型进行训练。

对于一般的深度模型而言,数据处理需要对文本进行分词,并建立一个词表word2id,如下图所示。

自然语言处理的数据预处理过程_第1张图片

对于不同的文本进行向量转化时即是得到文本单词在上图word2id表中的序号,作为模型的输入。在模型中,它的第一层是词嵌入embedding层,该层被初始化时有两个参数。

self.embedding = nn.Embedding(vocab_size, embedding_size)

vocab_size是词表的大小,embedding_size是词向量的维度,即你想要用多少维的向量去表示这个词 。模型进行训练是,会不断去拟合逼近我们的标签值,其中embedding层中训练好的权重即是我们想要的词向量。

这里还有一点,我们可以使用word2vec或glove训练好的词向量模型对模型的词嵌入层进行初始化,让模型一开始就可以得到训练好的词向量,有助于提升模型效果。

self.embedding.weight.data.copy_(embedding_pretrained)

我们也可以设置让初始化好的词嵌入层随着模型一起训练,可以有更好的效果。(知乎 -安全中心这个连接中的论文有进行实验验证) 。

你可能感兴趣的:(p2p,linq,网络协议)