假设您已经完成了(一)所需的设置。
在本讲座中,我们将使用 Gensim和NLTK,这两个广泛使用的Python自然语言处理库。
如果我们想要能够对文本进行分类,我们需要能够根据文章、段落、句子和文本的其他主体所包含的信息以及它们所表示的内容来生成它们的特征。有很多方法可以做到这一点,我们将采用3种方法。
从文本中提取特征的一种最简单的方法是只计算一个单词在正文中出现的次数。在这个模型中,单词的顺序并不重要,只考虑每个文档中每个唯一术语的出现次数。
清除文本数据
删除停顿和标点符号,小写
这些都是停顿或标点符号!
还好,有一种简单的方法来移除它们:nltk和内置的字符串模块有单独的停顿词和标点符号列表
Stemming and Lemmatizing
我们也可以发现很多词有相似的意思,但只有它们的词性形式等不同。有时在索引之前将同一个单词的不同形式归一化给单个根标记是有意义的。有两种方法可以做到这一点:
Stemming: 启发式方法,切去不同形式单词的结尾,试图返回即使有各种变体也保持相同的词根语素。
Lemmatizing: 返回派生的范式或单词的字典形式,称为 lemma
请注意,当我们使用这个模型来特征化文本:
Term Frequency: Number of occurrences of a word in a document(文档中单词的出现次数)
Inverse Document Frequency: Number of documents that contain a certain word scaled by a weight(包含按权重缩放的某个词的文档数)
Term Frequency - Inverse Document Frequency: (ww这个词在TT这个文档中出现的次数) * loglog(语料库中的文档数/包含按权重缩放的ww这个词的文档数)
让我们看看我们之前审查的电影评论的TF IDF分数。
看起来更像是一个我们可以用来进行文本分类的特征向量!
请注意,在TF IDF模型中:
NLP对象的绝大多数被认为是原子符号: king, queen, book, etc.
在向量空间项中,这个向量有一个1和许多0。
king=[1,0,0,0,0,0,0,0,0]
queen=[0,1,0,0,0,0,0,0,0]
book=[0,0,1,0,0,0,0,0,0]
这被称为"one-hot"表示法。在模型中表示类别是一种常用的方法。然而,它非常稀疏(正如我们从BOW模型中看到的),每行主要是0。
你可以通过它相邻的词来代表一个词,这样就能获得更多的信息。我们可以使用小的上下文来代替整个文档。
这样,在上下文单词计数上定义单词(假设在相似上下文中出现的两个词本身是相似的)
但是基于计数的模型有缺点:
Word2Vec是一个无监督神经网络模型,它最大化上下文邻居之间的相似性,同时最小化不可见上下文的相似性。通过滑动窗口对模型在语料库上进行训练,随机生成初始向量并收敛。在训练过程开始时设置目标向量的大小,因此向量是密集的,不需要降维技术。
训练目标是对于给出上下文词wc1,wc2,...wcjwc1,wc2,...wcj最大化观察到正确的目标词wt的概率。
预测向量被设置为所有上下文字向量的平均值。
训练目标是对于给出目标词wt最大化观察到正确的上下文词wc1,wc2,...wcjwc1,wc2,...wcj的概率。
在这种情况下,预测向量是目标词向量。
现在让我们试着训练我们自己的单词嵌入,看看我们能用它们做什么。
Word2Vec
size
: 字嵌入模型的维数window
: 在每个方向观察的上下文词汇的数目min_count
: 模型中包含的词的最小频率sg
(Skip-Gram): '0' 代表 CBOW 模型; '1' i表示 Skip-Gramalpha
: 学习率(初始值);防止模型过校正,使收敛更精确。iterations
: 通过数据集的次数batch_words
: 在每次通过时从数据中取样的单词数单词向量是空间中的方向,可以对单词之间的关系进行编码。
词汇之间的接近可以通过余弦相似性来计算。
Doc2vec (又名 paragraph2vec 或者 sentence embeddings) 将word2vec算法从词向量扩张到更大的文本, 比如句子、段落或者整个文件
每个段落都映射到一个唯一的向量,用矩阵D中的列来表示,每个单词也映射到一个唯一的向量,用矩阵W中的列来表示。段落向量和字向量被平均或级联以预测上下文中的下一个单词。
每个附加上下文都不是固定长度(因为它被矢量化并投影到同一空间)。
额外的参数,但更新是稀疏的,因此仍然有效。
亮点:
亮点:
让我们尝试用Gensim建立自己的DOC2VEC模型
Doc2Vec参数
size
: 嵌入模型的维数window
: 在文档中的每个方向上观察的上下文字的数目min_count
: 包含在模型中的单词的最小频率dm
(distributed memory):“0”表示dBuy模型;“1”表示DMalpha
: Learning rate (initial); 学习速率(初始);防止模型过度校正,使收敛更精细iter
: 通过语料库的迭代次数