nlp中将文本数字化的方法

         在分词之后,对于文本类型的特征属性,需要进行文本数据转换,也就是需要将文本数据转 换为数值型数据。因为神经网络的本质还是数学运算。所以我们第一步是将分词转化为数字符号进行表示。

(想知道中文如何进行分词?
点击这里:NLP基础_分词_jieba学习笔记_nlp分词-CSDN博客

                                                                                                        

基础方式如下:

        序号化、

        哑编码(One-Hot)、

        词袋法(BOW/TF) TF-IDF(Term frequency-inverse document frequency)

        主题模型

                LSA

                LDA等

word embedding部分:

        Word2Vec、Char2Vec

        Doc2Vec

        FastText

        cw2vec

注:本篇笔记只是将相关的知识框架简单的罗列出来,仅供学习参考

1.序号化

将单词按照词典排序,给定从0或者1或者2开始的序号即可,一般情况有几 个特征的单词: 、;PAD表示填充字符,UNK表示未知字符

        在这个例子中,我们可以看到我们分别将3个文本分为了4个token,每个token用左侧的词典表示(词典可自定义)

 这就是简单的序号化

2.one-hot编码

        使用一个非常稀疏的向量来表示单词的特征向量信息,假设现在有n个单词 (词表大小为n),那么转换的特征向量就是n维,仅在对应位置为1,其它位 置全部为0。

注意:当一个文本有多个词同时出现时文本向量就会累加。根据这个特性我们可以知道每个词在文本中出现的次数

 在这个例子中我们使用one-hot编码表示了文本数据。

3.词袋法,TF-IDF

词袋法

        词袋法(Bag of words, BOW)是最早应用于NLP和IR领域的一种文本处理模型,该模型忽略文本的语法和语序,用一组无序的单词(words)来表达一段文字或者一个文档,词袋法中使用单词在文档中出现的频数/频率来表示文档,使用所有文档中出现的单词作为特征属性

        需要详细资料的调转博主:词向量之词袋模型(BOW)详解_bow词袋模型-CSDN博客

拓展:序号化和词袋法的区别

词袋法(Bag of Words)和序号化(Tokenization)是文本处理中常用的两种技术,它们有以下区别:

  1. 词袋法(Bag of Words)

    • 定义: 词袋法是一种简单的文本表示方法,将文本看作是无序的单词集合,忽略单词在文本中的顺序,只关注单词的出现频率或计数。
    • 过程: 将文本分割成单词(tokenization),然后统计每个单词在文本中的出现次数,构建一个基于单词频率的向量表示每个文档。
    • 特点: 词袋法忽略了单词顺序和语法结构,只关注单词出现的频率,适用于很多文本分类和聚类任务。
  2. 序号化(Tokenization)

    • 定义: 序号化是将文本数据转换为一系列单词、短语或符号的过程,每个单词或符号被称为一个 token。
    • 过程: 序号化包括词汇划分、标点符号处理、大小写处理等步骤,将文本分割成有意义的 token,并可能对 token 进行进一步处理(如词干提取、停用词过滤等)。
    • 特点: 序号化保留了文本的结构信息,能够更好地捕捉单词之间的关系,例如,词序对于语言模型和序列生成任务至关重要。

区别总结:

  • 词袋法关注单词出现的频率,忽略了单词顺序和语法结构;而序号化保留了文本的结构信息,考虑单词之间的顺序关系。
  • 词袋法主要用于文本分类、情感分析等任务;序号化通常是文本预处理的一部分,为后续的文本分析任务提供处理后的文本数据。

TF-IDF

        TF-IDF就是在词袋法的基础上加入单词重要性的影响系数:

        单词的重要性随着它在文本中出现的次数成正比增加,也就是单词的出现次数 越多,该单词对于文本的重要性就越高。 --> TF

        同时单词的重要性会随着在语料库/训练数据中出现的频率成反比下降,也就 是单词在语料库中出现的频率越高,表示该单词越常见,也就是该单词对于文 本的重要性越低。 --> ID

得到TF和IDF后,我们 :

计算出文档的每个词的TF-IDF值,然后按降序排列,取排在最前面的几个词。这就是TF-IDF

代码实现:

# corpus:语料库
# words:对所有句子分词后的结果,[[], ...]
# word_count:对每个句子进行词频统计, [{}, ...]
# word_dict:每一个句子的词频统计结果, {}
# word:每一个词,word_id
# 
import math
from collections import defaultdict
 
corpus = [
    "what is the weather like today",
    "what is for dinner tonight",
    "this is a question worth pondering",
    "it is a beautiful day today"
]
words = []
# 对corpus分词
for sentence in corpus:
    words.append(sentence.strip().split())

# 如果有自定义的停用词典,我们可以用下列方法来分词并去掉停用词
# f = ["is", "the"]
# for i in corpus:
#     all_words = i.split()
#     new_words = []
#     for j in all_words:
#         if j not in f:
#             new_words.append(j)
#     words.append(new_words)
# print(words)
 
# 进行词频统计
def Counter(words):
    word_count = []
    for sentence in words:
        word_dict = defaultdict(int)
        for word in sentence:
            word_dict[word] += 1
        word_count.append(word_dict)
    return word_count
 
word_count = Counter(words)
 
# 计算TF(word代表被计算的单词,word_dict是被计算单词所在句子分词统计词频后的字典)
def tf(word, word_dict):
    return word_dict[word] / sum(word_dict.values())
 
# 统计含有该单词的句子数
def count_sentence(word, word_count):
    return sum([1 for i in word_count if i.get(word)])  # i[word] >= 1
 
# 计算IDF
def idf(word, word_count):
    return math.log(len(word_count) / (count_sentence(word, word_count) + 1))
 
# 计算TF-IDF
def tfidf(word, word_dict, word_count):
    return tf(word, word_dict) * idf(word, word_count)
 
p = 1
for word_dict in word_count:
    print("part:{}".format(p))
    p += 1
    for word, cnt in word_dict.items():
        print("word: {} ---- TF-IDF:{}".format(word, tfidf(word, word_dict, word_count)))

代码部分来自博主aift

4.主题模型

主题模型是一种用于发现文本集合中潜在话题结构的统计模型。其中,Latent Semantic Analysis(LSA)和Latent Dirichlet Allocation(LDA)是两种常见的主题模型。

  1. Latent Semantic Analysis(LSA):

    • LSA是一种基于奇异值分解(SVD)的方法,通过将文本数据表示为词项-文档矩阵,然后对这个矩阵进行降维处理,从而找到隐藏的语义结构。
    • LSA可以帮助识别相关的词汇和文档,捕捉词汇之间的语义关系,但无法直接给出话题的具体内容。
  2. Latent Dirichlet Allocation(LDA):

    • LDA是一种生成式的概率模型,假设每个文档是由多个主题混合而成,每个主题又由多个词汇组成。
    • 在LDA中,通过推断文档的主题分布和词汇的主题分布,可以揭示文本集合中潜在的主题信息。
    • LDA不需要预先指定主题数量,而是通过训练数据推断出最有可能的主题结构。

主题模型的应用包括文本主题分析、信息检索、文本分类等领域。通过主题模型,我们可以更好地理解大规模文本数据中的主题结构,挖掘隐藏在文本背后的语义信息。虽然主题模型并不直接考虑词汇之间的语义关系,但它们可以帮助我们理解文本数据的话题结构,为文本处理任务提供有益的信息。

        但现在不是主流所以这里简单介绍一下。想要详细了解还请自行学习。

word embedding部分

后半部分详情请见:https://blog.csdn.net/m0_62965652/article/details/135370268?spm=1001.2014.3001.5501

本人水平有限,如有错误请多多指正,谢谢!

  • 23
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值