如何对非结构化文本数据进行特征工程操作?这里有妙招!雷峰网

除此之外,还可以使用其他的标准操作,比如标记化、删除多余的空格、文本大写转换为小写,以及其他更高级的操作,例如拼写更正、语法错误更正、删除重复字符等。

由于本文的重点是特征工程,我们将构建一个简单的文本预处理程序,其重点是删除特殊字符、多余的空格、数字、无用词以及语料库的大写转小写。

wpt=nltk.WordPunctTokenizer()

defnormalize_document(doc):

#lowercaseandremovespecialcharacters\whitespaces

doc=doc.lower()

doc=doc.strip()

#tokenizedocument

tokens=wpt.tokenize(doc)

#filterstopwordsoutofdocument

filtered_tokens=[tokenfortokenintokensiftokennotinstop_words]

#re-createdocumentfromfilteredtokens

returndoc

normalize_corpus=np.vectorize(normalize_document)

一旦搭建好基础的预处理流程,我们就可以将它应用在语料库中了。

norm_corpus=normalize_corpus(corpus)norm_corpus

上面的输出结果应该能让大家清楚的了解样本文档在预处理之后的样子。现在我们来开始特征工程吧!

这也许是非结构化文本中最简单的向量空间表示模型。向量空间是表示非结构化文本(或其他任何数据)的一种简单数学模型,向量的每个维度都是特定的特征/属性。词袋模型将每个文本文档表示为数值向量,其中维度是来自语料库的一个特定的词,而该维度的值可以用来表示这个词在文档中的出现频率、是否出现(由0和1表示),或者加权值。将这个模型叫做词袋模型,是因为每个文档可以看作是装着单词的袋子,而无须考虑单词的顺序和语法。

fromsklearn.feature_extraction.textimportCountVectorizer

cv=CountVectorizer(min_df=0.,max_df=1.)

cv_matrix=cv.fit_transform(norm_corpus)

cv_matrix=cv_matrix.toarray()

cv_matrix

可以看到,文档已经被转换为数字向量,这样每个文档都由上述特征矩阵中的一个向量(行)表示。下面的代码有助于以一种更易理解的格式来表示这一点。

#getalluniquewordsinthecorpus

vocab=cv.get_feature_names()

#showdocumentfeaturevectors

pd.DataFrame(cv_matrix,columns=vocab)

词袋模型的文档特征向量

上面的表格应该更能助于理解!可以清楚地看到,特征向量中每个列(维度)都代表一个来自语料库的单词,每一行代表一个文档。单元格中的值表示单词(由列表示)出现在特定文档(由行表示)中的次数。因此,如果一个文档语料库是由N个单词组成,那么这个文档可以由一个N维向量表示。

一个单词只是一个标记,通常被称为单元(unigram)或者一元(1-gram)。我们已经知道,词袋模型不考虑单词的顺序。但是如果我们也想要考虑序列中出现的短语或者词汇集合呢?N元模型能够帮我们实现这一点。N-Gram是来自文本文档的单词记号的集合,这些记号是连续的,并以序列的形式出现。二元表示阶数为二的N-Gram,也就是两个单词。同理三元表示三个单词。N元词袋模型是普通词袋模型的一种拓展,使得我们可以利用基于N元的特征。下面的示例展示了文档中二元的特征向量。

#youcansetthen-gramrangeto1,2togetunigramsaswellasbigrams

bv=CountVectorizer(ngram_range=(2,2))

bv_matrix=bv.fit_transform(norm_corpus)

bv_matrix=bv_matrix.toarray()

vocab=bv.get_feature_names()

pd.DataFrame(bv_matrix,columns=vocab)

使用二元词袋模型的特征向量

在上面的例子中,每个二元特征由两个单词组成,其中的值表示这个二元词组在文档中出现的次数。

在大型语料库中使用词袋模型可能会出现一些潜在的问题。由于特征向量是基于词的频率,某些单词可能会在文档中频繁出现,这可能会在特征集上掩盖掉其他单词。TF-IDF模型试图通过缩放或者在计算中使用归一化因子来解决这个问题。TF-IDF即TermFrequency-InverseDocumentFrequency,在计算中结合了两种度量:词频(TermFrequency)和逆文档频率(InverseDocumentFrequency)。这种技术是为搜索引擎中查询排序而开发的,现在它是信息检索和NLP领域中不可或缺的模型。

在数学上,TF-IDF可以定义为:tfidf=tfxidf,也可以进一步拓展为下面的表示:

在这里,tfidf(w,D)表示单词w在文档D中的TF-IDF分数。Tf(w,D)项表示单词w在文档D中的词频,这个值可以从词袋模型中获得。idf(w,D)项是单词w的逆文档频率,可以由语料库中所有文档的总数量C除以单词w的文档频率df(w)的log值得到,其中文档频率是指语料库中文档出现单词w的频率。这种模型有多种变种,但是给出的最终结果都很相似。下面在语料库中使用这个模型吧!

fromsklearn.feature_extraction.textimportTfidfVectorizer

tv=TfidfVectorizer(min_df=0.,max_df=1.,use_idf=True)

tv_matrix=tv.fit_transform(norm_corpus)

tv_matrix=tv_matrix.toarray()

vocab=tv.get_feature_names()

pd.DataFrame(np.round(tv_matrix,2),columns=vocab)

基于TF-IDF模型的文档特征向量

文档相似性是使用从词袋模型或者tf-idf模型中提取出的特征,基于距离或者相似度度量判断两个文档相似程度的过程。

因此,可以使用在上一部分中提到的tf-idf模型提取出的特征,用其来生成新的特征。这些特征在搜索引擎、文档聚类以及信息检索等领域发挥着重要作用。

语料库中的配对文档相似性需要计算语料库中每两个文档对的文档相似性。因此,如果一个语料库中有C个文档,那么最终会得到一个C*C的矩阵,矩阵中每个值代表了该行和该列的文档对的相似度分数。可以用几种相似度和距离度量计算文档相似度。其中包括余弦距离/相似度、欧式距离、曼哈顿距离、BM25相似度、jaccard距离等。在我们的分析中,我们将使用最流行和最广泛使用的相似度度量:余弦相似度,并根据TF-IDF特征向量比较文档对的相似度。

fromsklearn.metrics.pairwiseimportcosine_similarity

similarity_matrix=cosine_similarity(tv_matrix)

similarity_df=pd.DataFrame(similarity_matrix)

similarity_df

文档对的相似性矩阵(余弦相似度)

仔细观察相似度矩阵可以清楚地看出,文档(0,1和6),(2,5和7)之间非常相似,文档3和4略微相似。这表明了这些相似的文档一定具有一些相似特征。这是分组或聚类的一个很好的案例,可以通过无监督的学习方法来解决,特别是当需要处理数百万文本文档的庞大语料库时。

聚类是利用无监督学习的方法,将数据点(本场景中即文档)分类到组或者cluster中。我们将在这里利用一个无监督的层次聚类算法,通过利用我们之前生成的文档相似性特征,将我们的玩具语料库中的类似文档聚合到一起。有两种类型的层次聚类方法,分别是凝聚方法(agglomerative)和分裂方法(divisive)。这里将会使用凝聚聚类算法,这是一种自下而上(bottomup)的层次聚类算法,最开始每个文档的单词都在自己的类中,根据测量数据点之间的距离度量和连接准则(linkagecriterion),将相似的类连续地合并在一起。下图展示了一个简单的描述。

连接准则决定了合并策略。常用的连接准则有Ward,Completelinkage,Averagelinkage等等。这些标准在将一对cluster合并在一起(文档中低层次的类聚类成高层次的)时是非常有用的,这是通过最优化目标函数实现的。我们选择Ward最小方差作为连接准则,以最小化总的内部聚类方差。由于已经有了相似特征,我们可以直接在样本文档上构建连接矩阵。

fromscipy.cluster.hierarchyimportdendrogram,linkage

我们语料库的连接矩阵

下面,把这个矩阵看作一个树状图,以更好地理解元素!

plt.figure(figsize=(8,3))

dendrogram(Z)

可以看到每个数据点是如何从一个单独的簇开始,慢慢与其他数据点合并形成集群的。从颜色和树状图的更高层次来看,如果考虑距离度量为1.0(由虚线表示)或者更小,可以看出模型已经正确识别了三个主要的聚类。利用这个距离,我们可以得到集群的标签。

fromscipy.cluster.hierarchyimportfcluster

max_dist=1.0

pd.concat([corpus_df,cluster_labels],axis=1)

可以清楚地看到,我们的算法已经根据分配给它们的标签,正确识别了文档中的三个不同类别。这应该能够给大家一个关于如何使用TF-IDF特征来建立相似度特征的思路。大家可以用这种处理流程来进行聚类。

也可以使用一些摘要技术从文本文档中提取主题或者基于概念的特征。主题模型围绕提取关键主题或者概念。每个主题可以表示为文档语料库中的一个词袋或者一组词。总之,这些术语表示特定的话题、主题或概念,凭借这些单词所表达的语义含义,可以轻松将每个主题与其他主题区分开来。这些概念可以从简单的事实、陈述到意见、前景。主题模型在总结大量文本来提取和描绘关键概念时非常有用。它们也可用于从文本数据中捕捉潜在的特征。

主题建模有很多种方法,其中大多涉及到某种形式的矩阵分解。比如隐含语义索引(LatentSemanticIndexing,LSI)就使用了奇异值分解。这里将使用另一种技术:隐含狄利克雷分布(LatentDirichletAllocation,LDA),它使用了生成概率模型,其中每个文档由几个主题组合而成,每个术语或单词可以分配给某个主题。这与基于pLSI(probabilisticLSI)的模型很类似。在LDA的情况下,每个隐含主题都包含一个狄利克雷先验。

上图中的黑色框表示利用前面提到的参数,从M个文档中提取K个主题的核心算法。下面的步骤是对算法的解释。

a)对于文档中的单词W:

i.对于主题T:

计算P(T|D),表示文档D中单词分配给T主题的比例。

计算P(W|T),表示在所有文档中,主题T包含单词W的比例。

ii.通过计算概率P(T|D)*P(W|T)重新分配单词W的主题T。

运行几个迭代之后,就能获得混合了每个文档的主题,然后就可以根据指向某个主题的单词生成文档的主题。像gensim或者scikit-learn这样的框架,使得我们能够利用LDA模型来生成主题。

大家应该记住,当LDA应用于文档-单词矩阵(TF-IDF或者词袋特征矩阵)时,它会被分解为两个主要部分:

使用scikit-learn可以得到如下的文档-主题矩阵。

fromsklearn.decompositionimportLatentDirichletAllocation

lda=LatentDirichletAllocation(n_topics=3,max_iter=10000,random_state=0)

dt_matrix=lda.fit_transform(cv_matrix)

features

可以清楚地看到哪些文档对上述输出中的三个主题贡献最大,可以通过如下的方式查看主题及其组成部分。

tt_matrix=lda.components_

fortopic_weightsintt_matrix:

topic=[(token,weight)fortoken,weightinzip(vocab,topic_weights)]

topic=sorted(topic,key=lambdax:-x[1])

topic=[itemforitemintopicifitem[1]>0.6]

print(topic)

print()

可以看到,由于组成术语不同,很容易区分这三个主题。第一个在讨论天气,第二个关于食物,最后一个关于动物。主题建模的主题数量选择是一门完整的课题,既是一门艺术,也是一门科学。获得最优主题数量的方法有很多,这些技术既复杂又繁琐,这里就不展开讨论了。

这里使用LDA法从词袋模型特征构建主题模型特征。现在,我们可以利用获得的文档单词矩阵,使用无监督的聚类算法,对文档进行聚类,这与我们之前使用的相似度特征进行聚类类似。

这次我们使用非常流行的基于分区的聚类方法——K-means聚类,根据文档主题模型特征表示,进行聚类或分组。在K-means聚类法中,有一个输入参数K,它制定了使用文档特征输出的聚类数量。这种聚类方法是一种基于中心的聚类方法,试图将这些文档聚类为等方差的类。这种方法通过最小化类内平方和来创建聚类。选择出最优的K的方法有很多,比如误差平方和度量,轮廓系数(SilhouetteCoefficients)和Elbowmethod。

THE END
1.理解数据类型:每个数据科学爱好者都应该知道的数据结构现在的大量数据中,大部分是非结构化的,即没有预定义模型/结构的数据。如图像,是像素的集合,文本数据是没有预定义储存模型的字符序列,以及用户在Web应用程序上操作的点击流。非结构化数据所需要处理的地方在于,需要通过预处理等方法转化为结构化数据,以便对结构化数据应用统计方法获取原始数据中的重要信息。 https://www.528045.com/article/d32b356ce2.html
2.四不像正版资料,构建解答解释落实m418.39.40看点一、构建“四不像”数据的框架 我们需要明确“四不像”数据的定义,所谓“四不像”,指的是那些既不符合常规数据类型,又难以用传统方法进行分类和分析的数据,这类数据通常具有以下特点: 1、多样性:数据来源广泛,包括文本、图像、音频、视频等多种格式。 2、复杂性:数据结构复杂,可能包含嵌套结构、多维数组等。 https://www.yzcjl.cn/post/5569.html
3.非结构化数据包括哪些内容即超文本标记语言文件。超文本标记语言的结构包括头部分(Head)、和主体部分(Body)。报表 报表就是用表格、图表等格式来动态显示数据。音频 指存储声音内容的文件。视频 泛指将一系列静态影像以电信号的方式加以捕捉、记录、处理、储存、传送与重现的各种技术。非结构化数据主要是指那些无法用固定结构来逻辑表达实现的https://baijiahao.baidu.com/s?id=1751523632293431932&wfr=spider&for=pc
4.什么是非结构化数据和结构化数据没有预定义的格式:非结构化数据的存储形式非常灵活,没有固定的行和列。 多样性:可以包括文本文件、PDF 文档、图片、视频、社交媒体数据等。 复杂的处理方式:处理非结构化数据需要使用更复杂的技术,如自然语言处理(NLP)或图像识别技术。 无法直接使用传统数据库存储:非结构化数据通常存储在文件系统或分布式存储系统中https://zhuanlan.zhihu.com/p/718480499
5.为什么我们称文本为“非结构化”?为什么计算机对结构化和非结构化的定义会有所不同? 该计算机可以处理结构化数据,而非非结构化数据,计算机希望数据整齐,整齐地堆在一起,称为记录,每个记录都有一个键和其他属性,一旦将数据组织成结构化格式,计算机就会加快速度,就像子弹穿过机枪一样,如果没有子弹则机枪卡住。 https://www.chinacpda.com/data/detail/?id=1951
6.什么是非结构化数据?非结构化数据定义 我们所处理的数据分为三类,分别是规格化数据、半结构化数据以及非结构化数据,其中非结构化数据的定义为:呈现出不规则且无明显结构特征的数据。 -规格化数据:数据与字段相对应,数据以表格和数据集形式存在。 -半结构化数据:这种数据形态介于规格化数据和非结构化数据之间,方法是结合不明晰的规则来补足https://www.filez.com/news/detail/faee08ab6bdc85c2d6216e4773bcc01f.html
7.什么是结构化半结构化和非结构化数据?①结构化数据:指关系模型数据,即以关系数据库表形式管理的数据,结合到典型场景中更容易理解,比如企业ERP、OA、HR里的数据。 ②非结构化数据:指数据结构不规则或不完整,没有预定义的数据模型,不方便用数据库二维逻辑表来表现的数据。如word、pdf、ppt及各种格式的图片、视频等。 https://it.ynnu.edu.cn/info/1054/2898.htm
8.复杂高维多元数据的可视化高维多元数据(Multidimensional常规的关系型数据库处理具有明确结构、可有效存储于二维数据库表中的结构化数据。 非结构化数据(文本、时间、日志等)无法采用这种形式表示。 非结构化数据不但大量存在, 而且蕴涵巨大价值。 异构数据 异构数据指同一个数据集中存在结构或者属性不同的数据的情况。 https://juejin.cn/post/6922364405111848967
9.非结构化的数据库51CTO博客已为您找到关于非结构化的数据库的相关内容,包含IT学习相关文档代码介绍、相关教程视频课程,以及非结构化的数据库问答内容。更多非结构化的数据库相关解答可以来51CTO博客参与分享和学习,帮助广大IT技术人实现成长和进步。https://blog.51cto.com/topic/feijiegouhuadeshujuku.html
10.数据概念的解构与数据法律制度的构建数据资源市场化,涵盖各种数据的各种状态,例如,个人数据和非个人数据、结构化数据和非结构化数据,等等;数据处理行为的产业化,就是推动数据的收集、存储、使用、加工、传输、提供、公开以及删除等数据处理行为的产业化。数据资源市场化和数据处理行为产业化,需要数据法律制度予以规范和引导,以进一步提高数据质量、提高数据http://www.legaldaily.com.cn/fxjy/content/2023-02/22/content_8824664.html
11.结构化与非结构化的区别多源异构数据源半结构化数据①结构化数据:指关系模型数据,即以关系数据库表形式管理的数据,结合到典型场景中更容易理解,比如企业ERP、OA、HR里的数据。 ②非结构化数据:指数据结构不规则或不完整,没有预定义的数据模型,不方便用数据库二维逻辑表来表现的数据。如word、pdf、ppt及各种格式的图片、视频等。 https://www.fanruan.com/bw/doc/154297
12.非结构化数据(UnstructuredData)数据采集名词数据库和CMS 2023-10-26 11:15:48 浏览6865 次 摘要:非结构化数据是指那些没有明确定义格式或结构的数据,通常以自由文本、多媒体内容、社交媒体帖子、图像、音频和视频等形式存在。与结构化数据(如数据库表)不同,非结构化数据的组织和解释通常需要更多的上下文和语境。 https://www.houyicaiji.com/?type=post&pid=12136
13.《华为数据之道》读书笔记:第5章面向“联接共享”的数据底座建设华为公司通过建设数据底座,将公司内外部的数据汇聚在一起,对数据进行重新组织和联接,让数据有清晰的定义和统一的结构,并在尊重数据安全与隐私的前提下,让数据更易获取,最终打破数据孤岛和垄断。 ? 通过数据底座,主要可以实现如下目标: 1)统一管理结构化、非结构化数据。将数据视为资产,能够追溯数据的产生者、业务https://xie.infoq.cn/article/ca685bfdce0341b1280fb71b0
14.《DAMADMBOK2》读书笔记第9章文件和内容管理非结构化数据的增长速度远远快于结构化数据。管理非结构化数据需要数据管理专员与其他数据管理专业人员、档案管理人员的有效合作。P258 定义高质量的内容需要了解它生产和使用的背景: 1)生产者。谁创建内容?为什么要创建? 2)消费者。谁使用信息?出于什么目的? 3)时间。何时需要信息?需要多久https://www.jianshu.com/p/fa34d269374b
15.银行专岗计算机考试大纲(三)大数据的结构类型 大数据包括结构化、半结构化和非结构化数据,非结构化数据越来越成为数据的主要部分。据IDC(互联网内容提供商)的调查报告显示,企业中80%的数据都是非结构化数据。 1.结构化数据 包括预定义的数据类型、格式和结构的数据。如:关系数据库中的数据。 2.半结构化数据 具有可识别的模式并可以解析http://www.yinhangzhaopin.com/yhks/yhbs/1/96117.html
16.[经典收藏]终极RPA术语表:机器人流程自动化的基础概念非结构化数据 【Unstructured Data】 未按照定义好的结构来组织的信息,包括文本、日期和数字在未组织的系统中。 虚拟环境 【Virtual Environment】 由自动化软件和程序创建的系统,用于在公司现有的IT设置中管理组织的流程。该环境由公司控制,并为管理员和用户创建一个中央软件中心。 https://blog.itpub.net/69948333/viewspace-2687461/
17.取其精华!设计师读书笔记连载系列之《简约至上》优设网让用户定义自己的成功很重要,我们要做的,就是为他提供一个简单的工具,让他们能自由发挥想象力,最终版他们实现目标。 5、非结构化数据 系统要求用户输入信息:2016-04-06,当你少输入一个数字或者输入错误时,就会提示你。向用户转移用在这里并不合适,用户非常反感强制性的做法。如果你能仅仅让用户输入:明天,本周五https://www.uisdc.com/note-for-simple-and-usable
18.《简约至上》三千字总结(简约至上)书评核心用户体验设计应该简约,“简约至上”指的让用户感觉用起来简单。为什么应该简约?复杂的产品不可持续。不断向软件中增加功能,同样也是不可持续的。增加复杂性意味着遗留代码越来越沉重,导致产品维护成本越来越高,而且也越来越难以灵活应对市场变化。怎样做到简约?一、明确认识1. 为主流用户设计产品,忽略专家型用户。https://book.douban.com/review/13806006/