【Python】NLP实操笔记—基于机器学习的文本分类-(1)文本表示

基于机器学习的文本分类

知识点

1.文本表示方法

  • One-hot:这种表示方法无法表达单词与单词之间的相似程度

`measurements = [

{'city': 'Dubai', 'temperature': 33.},

{'city': 'London', 'temperature': 12.},

{'city': 'San Francisco', 'temperature': 18.},

]

from sklearn.feature_extraction import DictVectorizer

vec = DictVectorizer()

vec.fit_transform(measurements).toarray()

`

【Python】NLP实操笔记—基于机器学习的文本分类-(1)文本表示

【Python】NLP实操笔记—基于机器学习的文本分类-(1)文本表示

  • Bag of Words:词袋表示,也称为计数向量表示(Count Vectors)。文档的向量表示可以直接用单词的向量进行求和得到。

scikit-learn提供了从文本内容中提取数字特征的常见方法,即:

  1. tokenizing: 标记字符串并为每个可能的token提供整数id,例如使用空白和标点作为token分隔符;(分词标记)
  2. counting: 统计每个文档中出现的token次数;(统计词频)
  3. normalizing: 通过减少大多数样本/文档中都会出现的一般性标记来进行标准化和加权。(标准化/归一化)

在此方案中,特征和样本定义如下:

每个独立token出现的频率(已标准化或未标准化)作为特征。
给定文档的所有token频率的向量作为多元样本。

因此,文本语料库可以由矩阵表示,每一行代表一个文本,每一列代表一个token(例如一个单词)。

向量化:将文本集合转换为数字特征向量的一般过程。
这种方法(tokenizing,counting和normalizing)称为“词袋”或“n-gram”模型。 即只通过单词频率来描述文档,而完全忽略文档中单词的相对位置信息。

John likes to watch movies. Mary likes too.  -->> [1, 2, 1, 1, 1, 0, 0, 0, 1, 1]

John also likes to watch football games. -->> [1, 1, 1, 1, 0, 1, 1, 1, 0, 0]

具体实现:sklearn
1.CountVectorizer
2.TfidfVectorizer
3.HashingVectorizer

Feature extraction
Vectorize实例:

>>> measurements = [

... {'city': 'Dubai', 'temperature': 33.},

... {'city': 'London', 'temperature': 12.},

... {'city': 'San Francisco', 'temperature': 18.},

... ]

>>> from sklearn.feature_extraction import DictVectorizer

>>> vec = DictVectorizer()

>>> vec.fit_transform(measurements).toarray()

array([[ 1., 0., 0., 33.],

[ 0., 1., 0., 12.],

[ 0., 0., 1., 18.]])

>>> vec.get_feature_names()

['city=Dubai', 'city=London', 'city=San Francisco', 'temperature']

SKlearn中的文本提取

  • TF-IDF

TF-IDF的分数代表了词语在当前文档和整个语料库中的相对重要性。TF-IDF 分数由两部分组成:第一部分是词语频率(Term Frequency),第二部分是逆文档频率(Inverse Document Frequency)。其中计算语料库中文档总数除以含有该词语的文档数量,然后再取对数就是逆文档频率。

TF-IDF与一个词在当前文档中的出现次数成正比,与该词在整个语料库中的出现次数成反比

  • 共现矩阵 (Cocurrence matrix)

ex:

John likes to watch movies.

John likes to play basketball.

【Python】NLP实操笔记—基于机器学习的文本分类-(1)文本表示

一般配合PCA或SVD将其进行降维,如将原来 m×n 的矩阵降为 m×r的矩阵,其中 r<n,即将词向量的长度进行缩减。

  • 分布式表示
  • NNLM(Neural Network Language model)
  • CBOW 连续词袋

CBOW是给定上下文,来预测input word
【Python】NLP实操笔记—基于机器学习的文本分类-(1)文本表示

  • 负例采样 Negative Sampling

使用霍夫曼树来代替传统的神经网络,可以提高模型训练的效率。但是如果我们的训练样本里的中心词w是一个很生僻的词,那么就得在霍夫曼树中辛苦的向下走很久了。Negative Sampling就是这么一种求解word2vec模型的方法,它摒弃了霍夫曼树,采用了Negative Sampling(负采样)的方法来求解。

  • Skip-gram

Skip-Gram是给定input word来预测上下文

  • fasttext

CBOW预测上下文的中间词,fasttext预测文本标签。
【Python】NLP实操笔记—基于机器学习的文本分类-(1)文本表示

fasttext的python实现

参考:

以上是 【Python】NLP实操笔记—基于机器学习的文本分类-(1)文本表示 的全部内容, 来源链接: utcz.com/a/90756.html

回到顶部