1.文本分析与关键词提取
文本数据
文本数据是指包含自然语言文本的信息,可以是文章、评论、新闻等。在新闻分类任务中,文本数据通常是包含新闻内容的文字信息。这些数据可以来自各种来源,如新闻网站、社交媒体等。
停用词
在自然语言处理中,停用词是那些在文本中频繁出现但通常不携带太多信息的词语。这些词通常是语言中的常见连接词、介词、冠词等。由于它们在大多数文本中都出现,因此在进行文本分析或挖掘时,通常会被排除在外。这有助于减小数据噪音,使模型更专注于那些携带实质信息的词汇。
停用词的选择通常基于语境和任务的需求。一些常见的停用词包括:"的"、"是"、"在"、"有"等。在英文中,还可能包括"the"、"and"等。
为什么要去除停用词?
- 信息冗余: 停用词在文本中普遍存在,但往往并没有提供足够的上下文信息,因此在某些任务中会被视为冗余。
- 计算效率: 在大规模文本处理中,去除停用词可以降低计算复杂度,提高处理效率。
- 模型性能: 在一些任务中,特别是文本分类和聚类,去除停用词有助于提高模型的性能,使其更专注于关键信息。
停用词的处理方法:
- 预定义列表: 使用预定义的停用词列表,这些列表可以是通用的,也可以根据具体任务进行定制。
- 基于频率: 基于词语在文本中的频率,可以动态地选择停用词。例如,可以将在大多数文本中都出现的词定义为停用词。
在实际应用中,去除停用词是文本预处理的一个重要步骤,有助于提高后续任务的效果和效率。
*** Tf-idf:关键词提取 ***
Tf-idf是一种用于信息检索和文本挖掘的常用加权技术,目的是评估一词在文档集中的重要性。它的计算基于词频(TF)和逆文档频率(IDF)的乘积。
-
词频(TF,Term Frequency):
- 定义: 衡量一个词在文档中出现的频率,通常用该词在文档中出现的次数除以文档的总词数。
- 公式:
-
逆文档频率(IDF,Inverse Document Frequency):
- 定义: 衡量一个词对于整个文档集的重要性,即词在文档集中的稀有程度。
- 公式:
其中,加1是为了避免分母为零的情况,确保计算的稳定性。
-
Tf-idf计算:
- 定义: Tf-idf是词频和逆文档频率的乘积,用于给定词在文档中的重要性。
- 公式:
Tf-idf的计算结果是一个给定词在一个特定文档中的权重值。高权重的词通常被认为在该文档中更为重要,因为它们在该文档中频繁出现,同时在整个文档集中相对较为罕见。这使得Tf-idf成为一种有效的文本特征表示方法,特别是在信息检索和文本挖掘任务中。
逆文档频率(IDF,Inverse Document Frequency)
逆文档频率衡量一个词在整个文档集中的重要性。计算方式是总文档数除以包含该词的文档数,然后取对数。高IDF值表示词在整个文档集中相对不常见,因此可能具有较高的信息量。
IDF公式:
其中, 是词语,
是文档集。在分母中加1是为了避免分母为零的情况,确保计算的稳定性。
2.相似度计算
Tf-idf:关键词提取:
-
Tf-idf(Term Frequency-Inverse Document Frequency): 这是一种用于衡量文本中词语重要性的统计方法。在关键词提取中,Tf-idf被用来确定文本中哪些词是最具代表性和重要性的。这一过程涉及计算每个词的Tf-idf值,然后根据这些值选择关键词。
-
公式:
这里,TF是词频(Term Frequency),表示某个词在文本中出现的频率;IDF是逆文档频率(Inverse Document Frequency),衡量一个词对于整个文档集的重要性。
相似度计算:
-
相似度: 在自然语言处理中,相似度指的是两个文本或词语之间的相似程度。在关键词提取后,可以使用相似度计算方法来比较文本之间的相似性,这在文本匹配、信息检索等任务中非常有用。
-
常用的相似度计算方法:
这两种方法都可以在关键词提取后的向量表示中应用,以度量文本之间的相似性。
-
余弦相似度(Cosine Similarity): 用于衡量两个向量的夹角余弦值,其范围在[-1, 1]之间。对于两个文本向量,余弦相似度计算公式如下:
-
Jaccard相似度(Jaccard Similarity): 用于比较两个集合的相似性,计算公式如下:
-
3.新闻数据与任务简介
数据概览
分词
数据清洗
去除停用词
词云展示

4.TF-IDF关键词提取
“TF-IDF”是一种常用于文本挖掘和信息检索的技术,用于提取文本中的关键词。TF-IDF代表了“词频-逆文档频率”(Term Frequency-Inverse Document Frequency)。
以下是简要介绍“TF-IDF:提取关键词”的步骤和原理:
-
TF(词频 - Term Frequency):
- 衡量一个词在文本中出现的频率。
- 计算方法是某个词在文本中出现的次数除以文本的总词数。
- 常规化,以防止较长的文本对结果的影响。
-
IDF(逆文档频率 - Inverse Document Frequency):
- 衡量一个词的重要性,避免常见词对结果的过分影响。
- 计算方法是总文档数除以包含该词的文档数的对数。
-
TF-IDF计算:
- TF和IDF相乘,得到一个词在文本中的TF-IDF值。
- 公式为 TF-IDF = TF * IDF。
-
提取关键词:
- 根据计算得到的TF-IDF值,选取具有高TF-IDF值的词作为关键词。
- topK参数用于指定提取的关键词数量。
在给定的代码示例中,jieba.analyse.extract_tags
函数使用了TF-IDF算法,通过分析文本中每个词的TF-IDF值,提取了权重较高的前几个关键词。这些关键词可以反映文本的主题或重要内容,对于文本摘要、主题分析等任务非常有用。在这里,提取了权重最高的5个关键词,并通过空格连接起来打印出来。
5.LDA建模
格式要求:list of list形式,分词好的的整个语料
LDA(Latent Dirichlet Allocation)是一种用于文本挖掘和主题建模的概率图模型。LDA的目标是从文档中发现主题,并为每个文档分配一组主题。以下是更具体的介绍:
-
主题模型的概念:
- 主题模型是一种数学模型,用于在文档集合中发现潜在主题。
- 每个文档可以被看作是多个主题的混合,而每个主题又可以被看作是多个词的分布。
-
LDA的原理:
- LDA将文档的生成过程假设为一个概率图模型。
- 每个文档都被看作是从一组主题中以一定的概率选择的,而每个词则是从选定的主题中以一定的概率选择的。
-
主题分布:
- LDA会为每个文档分配一个主题分布,表示文档中各个主题的权重。
- 同样,LDA会为每个主题分配一个词汇分布,表示主题中各个词的权重。
-
LDA的应用:
- LDA广泛应用于文本挖掘、信息检索、社交媒体分析等领域。
- 它可以帮助发现文档集中的主题结构,使得我们可以更好地理解文档之间的关系。
-
主题提取:
- LDA可以用于提取文档集合中的主题,每个主题由一组关键词表示。
- 这些关键词代表了文档集合中的概念或主题。
以下代码中,通过LDA建模,每个主题都被表示为一组关键词及其权重。这些主题可以用于解释文档集中的不同主题内容,有助于深入理解文本数据。
“LDA(Latent Dirichlet Allocation): 主题模型”是一种概率模型,主要用于对文本进行主题建模。LDA假设文档中的每个词都是由若干个主题的混合生成的,而每个主题又以一定的概率生成一些词。以下是对给定代码的简要介绍:
-
建立词典和语料库:
- 通过
corpora.Dictionary
创建词典,将文本数据转换成“词袋”表示。 corpus
是将文本转换成词袋表示的语料库。
- 通过
-
LDA模型建立:
- 使用
gensim.models.ldamodel.LdaModel
构建LDA模型。 corpus
是词袋表示的文本数据,id2word
是词典。num_topics
是指定的主题数量。
- 使用
-
打印单个主题:
- 使用
lda.print_topic(1, topn=5)
打印出第一个主题的前5个关键词及其权重。
- 使用
-
打印所有主题:
- 使用
lda.print_topics(num_topics=20, num_words=5)
打印所有20个主题,每个主题包含前5个关键词及其权重。
- 使用
在输出结果中,每个主题都以一组关键词及其权重的形式呈现。这些关键词是由LDA模型自动学习的,并且可以帮助理解每个主题所表示的主题内容。在文本分析中,LDA主题模型通常用于发现文本中潜在的主题结构,为文本数据提供更深层次的理解。
6.基于贝叶斯算法进行新闻分类
数据预处理
-
创建DataFrame:
- 使用
pd.DataFrame
创建一个DataFrame,包含两列,一列是经过清理的文本内容('contents_clean'),另一列是文本的标签('label')。
- 使用
-
标签映射:
- 通过创建一个字典
label_mapping
将文本标签进行映射,将字符串标签映射为数字。 - 使用
map
函数将原始标签列映射为数字标签。
- 通过创建一个字典
-
训练集和测试集划分:
- 使用
train_test_split
函数将数据集划分为训练集和测试集。 - 输入是清理后的文本数据和映射后的标签,划分比例是默认的 75% 训练集和 25% 测试集。
- 使用
-
文本处理:
- 通过遍历训练集中的文本数据,将文本内容转换为一维数组(
words
)。 - 使用两层嵌套的循环,首先遍历每个文本,然后遍历每个文本中的词汇。
- 将文本中的词汇拼接为字符串,并添加到
words
列表中。
- 通过遍历训练集中的文本数据,将文本内容转换为一维数组(
-
异常处理:
- 使用
try-except
块处理可能出现的异常情况,例如某些文本中的某个词汇不存在。
- 使用
-
结果输出:
- 打印出处理后的第一条文本,以便查看文本处理的效果。
这段代码的目的是为了将文本数据转换为适合机器学习算法处理的形式,包括对标签的映射和文本内容的处理。处理后的文本数据可以用于训练和测试文本分类模型。
这段代码演示了如何使用Scikit-Learn中的CountVectorizer进行文本特征提取,并探讨了如何使用n-gram范围来考虑多个连续词。以下是对代码的简要概括:
-
CountVectorizer基本用法:
- 使用
CountVectorizer
创建一个文本特征提取器。 fit_transform
函数用于将文本数据转换为文档-词频矩阵。
- 使用
-
单词级别的特征提取:
- 使用默认参数的
CountVectorizer
,它默认考虑单个词作为特征。 - 输出了词汇表('bird', 'cat', 'dog', 'fish')和每个文本对应的文档-词频矩阵。
- 使用默认参数的
-
n-gram级别的特征提取:
- 使用
ngram_range=(1,4)
参数,指定n-gram的范围为1到4。 - 输出了扩展后的词汇表和对应的文档-词频矩阵。
- 使用
-
结果输出:
- 输出了词汇表和文档-词频矩阵的总和。
-
结果解读:
- 在单词级别的情况下,每个文本被表示为词汇表中词的出现次数。
- 在n-gram级别的情况下,除了单个词外,还考虑了多个连续词的组合,如'cat cat'和'dog cat fish'等。
总体而言,这段代码演示了如何使用CountVectorizer进行文本特征提取,通过调整n-gram范围,可以考虑不同程度的词组合,从而更全面地捕捉文本信息。
“n-gram”是一种文本特征提取的方法,它将文本中的词语按照一定的固定长度N进行切分,并考虑这些长度为N的片段。这里简要解释一下:
-
Unigram (1-gram):
- 单独的词语被视为unigram。例如,在短语 "I love natural language processing" 中,每个单词都是一个unigram。
-
Bigram (2-gram):
- 两个相邻的词语组成一个bigram。在相同的例子中,"I love"、"love natural"、"natural language"、"language processing"都是bigram。
-
Trigram (3-gram):
- 三个相邻的词语组成一个trigram。在相同的例子中,"I love natural"、"love natural language"、"natural language processing"都是trigram。
-
N-gram:
- 一般地,N-gram表示由N个相邻词语组成的片段。可以是1-gram、2-gram、3-gram,以此类推。
在文本处理中,使用N-gram模型有助于更全面地捕捉语境信息。例如,对于情感分析,"not good"和"very good"的含义截然不同,而使用bigram可以帮助区分这两种情况。同样,对于机器翻译等任务,考虑上下文信息也是很重要的。
在CountVectorizer中,通过设置ngram_range
参数,可以选择考虑的N-gram的范围。在示例代码中,ngram_range=(1, 4)
表示考虑1-gram到4-gram的所有情况。这有助于提取更多丰富的文本特征,从而提高模型对文本语境的理解能力。
这段代码展示了如何使用Scikit-Learn进行文本分类,主要涉及到特征提取和使用朴素贝叶斯分类器进行模型训练与评估。以下是简要概括:
-
CountVectorizer的使用:
- 导入
CountVectorizer
,通过设置参数(analyzer='word'
表示按照单词切分,max_features=4000
表示保留最频繁出现的4000个特征词),并使用fit
方法对训练数据(words
)进行拟合。
- 导入
-
MultinomialNB分类器的训练:
- 导入
MultinomialNB
朴素贝叶斯分类器。 - 创建
MultinomialNB
分类器,并使用fit
方法传入通过CountVectorizer提取的特征矩阵(vec.transform(words)
)进行训练,标签为y_train
。
- 导入
-
测试集的处理:
- 通过
for
循环,将测试集的文本数据(x_test
)进行与训练集相同的文本处理(尽管在实际应用中可能使用相同的文本预处理函数会更好)。 - 使用
try-except
块处理可能的异常情况。
- 通过
-
模型评估:
- 使用
classifier.score
方法计算训练好的模型在测试集上的准确度(accuracy)。
- 使用
-
TfidfVectorizer的使用:
- 导入
TfidfVectorizer
,同样通过设置参数进行特征提取,并使用fit
方法对训练数据进行拟合。
- 导入
-
重新训练与评估:
- 创建新的
MultinomialNB
分类器,并使用fit
方法传入通过TfidfVectorizer提取的特征矩阵进行重新训练。 - 使用
classifier.score
方法计算重新训练后的模型在测试集上的准确度。
- 创建新的
总体而言,这段代码演示了一个文本分类的基本流程,通过比较使用词频统计(CountVectorizer)和TF-IDF权重(TfidfVectorizer)两种特征提取方法在贝叶斯分类器上的效果。