【机器学习】文本数据简单向量化

本文介绍了将文本数据转化为计算机可理解的向量表示方法,包括one-hot、tf和tf-idf表示法。one-hot关注单词是否存在,tf考虑单词频率,而tf-idf结合单词在文档和整个数据集的频率。此外,还提到深度学习方法通过词向量解决语义鸿沟问题。
摘要由CSDN通过智能技术生成

一个文本数据指的是一篇文章,或者一段话,或者一句话。这个文本数据通常称为document,或者text。我们平常的文本都是以人的表达方式展现的,是一个流数据,时间序列数据。我们如果要用计算机对文本数据进行处理,就必须将文本数据表示为计算机能理解的方式。这篇博客就讲解给定一个已经分词、去除停用词后的文本数据集,如何将其向量化的方法。

one-hot表示法

one-hot表示法先将文本数据集中不重复的单词提取出来,得到一个大小为V的词汇表。然后用一个V维的向量来表示一个文章,向量中的第d个维度上的1表示词汇表中的第d个单词出现在这篇文章中。比如给定一个数据集
这里写图片描述

首先提取出其中的不重复单词(不考虑单词在文本中出现的先后顺序),得到一个含有7个单词的词汇表:
这里写图片描述

那么文本数据集就转化为one-hot矩阵:
这里写图片描述

vocab = sorted(set(words), key=words.index)

def doc2onehot_matrix(vocab, docs):
    ''' 
      transform a document to onehot vector
    '''
    M = len(docs)
    V = len(vocab)
    onehot = np.zeros((M, V))
    for d, doc in enumerate(docs):
        for word in doc:
            if word in vocab:
                pos = vocab.index(word)
                onehot[d][pos] = 1
    return onehot

如果文本数据集太大,那么得到的词汇表中可能存在几千个单词,这样会文本的维度太大,不仅会导致计算时间增加,而且带来了稀疏问题(one-hot矩阵中大多数元素都是0)。因此,我们通常在计算词汇表的时候,会排除那些出现次数太少的单词,从而降低文本维度。

tf 表示法

不同于one-hot表示法只关心单词是否出现,tf (term-frequency)表示法还关心单词出现的次数,因此tf矩阵中每个元素表示其对应的单词在文章中出现的次数/文章中的总次数,即单词在文章中的频率。

tfi,j=n
机器学习中,通常需要将文本文档数据集转换为数值型向量,以便于机器学习算法对其进行处理。常用的文本文档数据向量化方法包括: 1. 词袋模型(Bag of Words):将每个文档表示为一个固定长度的向量,向量的每个元素表示该文档中对应词汇的出现次数或者权重。可以使用Scikit-learn库中的CountVectorizer或TfidfVectorizer类来进行词袋模型向量化。 2. N-gram模型:将每个文档表示为一个由N个词或字符组成的序列,然后使用词袋模型将序列向量化。可以使用Scikit-learn库中的CountVectorizer或TfidfVectorizer类来进行N-gram模型向量化。 3. Word2Vec模型:将每个文档表示为一个固定长度的向量,向量的每个元素表示该文档中对应词汇的语义特征。可以使用Gensim库来进行Word2Vec模型向量化。 下面是一个使用CountVectorizer类进行词袋模型向量化的示例代码: ```python from sklearn.feature_extraction.text import CountVectorizer # 读取文本数据 with open('data.txt', 'r') as f: data = f.readlines() # 构建词袋模型向量 vectorizer = CountVectorizer(stop_words='english') X = vectorizer.fit_transform(data) # 输出向量维度和词汇表 print(X.shape) print(vectorizer.vocabulary_) ``` 这个例子中,我们首先读取文本数据,然后使用CountVectorizer类将文本数据向量化为词袋模型。需要注意的是,我们使用了英文停用词列表来去除常见的无意义词汇。最后,我们打印出向量维度和词汇表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值