内容导航:
  • 「Python数据分析系列」21 自然语言处理(上)
  • 智媒AI伪原创工具可以一键生成原创文章吗
  • 小发猫AI伪原创工具 ,生成的文章质量怎么样
  • 伪原创文章生产工具用什么呀
  • 「好书推荐」:构建企业级推荐系统
  • 一 、「Python数据分析系列」21 自然语言处理(上)

    ai伪原创文章可读

    数据与智能 出版了专著「构建企业级推荐系统:算法 、工程实现与案例分析」 。每周输出7篇推荐系统、数据分析、大数据 、AI原创文章 。「数据与智能」(同名视频号、知乎、头条 、B站、快手、抖音 、小红书等自媒体平台号) 社区,聚焦数据、智能领域的知识分享与传播。

    来源 | Data Science from Scratch, Second Edition

    作者 | Joel Grus

    译者 | cloverErna

    校对 | gongyouliu

    编辑 | auroral-L

    全文共5234字 ,预计阅读时间35分钟。

    第二十一章 自然语言处理

    1. 词云

    2. n-grams 模型

    3. 语法

    4. 题外话:吉布斯采样

    5. 主题建模

    他们刚从一场语言的盛宴上偷了些残羹冷炙回来 。

    ——威廉 · 莎士比亚

    自然语言处理(natural language processing,NLP)是指与语言有关的各种计算技术。这是一个广泛的领域,但我们这里只介绍几种相关的技术 ,它们简约却不简单。

    1. 词云

    第 1 章 (点击蓝字可直接跳转阅读)中,我们曾经计算过用户兴趣词汇的数量 。为了使单词及其数量可视化,一种方法是使用词云 ,它不仅能够以艺术化的形式展示单词,而且还能使单词的大小与其数量呈正比。

    但是,一般情况下 ,数据科学家并不看重词云,这在很大程度上是因为单词的布局没有任何特殊意义,顶多意味着“这里还有一些空 ,可以放上一个单词 ”而已。

    当你不得不生成一个词云的时候 ,不妨考虑一下能否透过词的坐标传达某些东西 。举例来说,假如你收集了一些与数据科学相关的流行语,那么对于每一个流行语 ,你可以用两个介于 0 至 100 之间的数字来描述,第一个数字代表它在招聘广告中出现的频次,第二个数字是在简历中出现的频次:

    「Python数据分析系列」21. 自然语言处理(上)

    词云的做法 ,只不过就是利用很酷的字体把各个单词布置到页面上罢了(图 21-1)。

    「Python数据分析系列」21. 自然语言处理(上)

    图 20-1:由热门术语组成的词云

    这看起来虽然整洁,但并没有告诉我们任何事情。一个更有趣的方法可能是将它们分散开来,利用水平位置表示其在招聘广告中的流行度 ,用垂直位置表示其在简历中的流行度,这样就能形象地传达一些信息(图 21-2):

    「Python数据分析系列」21. 自然语言处理(上)

    「Python数据分析系列」21. 自然语言处理(上)

    图21-2 。一个更有意义(如果不那么有吸引力)的词云

    2. n-grams模型

    DataSciencester 负责搜索引擎营销的副总突发奇想,要创建数以千计的数据科学方面的Web 页面 ,以便人们在搜索与数据科学有关的词语时,我们的网站能够在搜索结果中的排名更加靠前。(你试图向他解释,由于搜索引擎的算法已经足够聪明了 ,所以这种做法很难奏效 ,但是他根本就不听这一套。)

    当然,他既不想亲自编写数以千计的网页,也不打算雇用一批“水军 ”来做这件事情 。相反 ,他向你咨询是否可以通过编程方式来生成这些网页 。为此,我们需要寻找某种方法来对语言进行建模。

    这种方法当然是有的,比如首先搜集一批文档 ,然后利用统计方法得到一个语言模型。在我们的例子中,我们将从 Mike Loukides 的文章“什么是数据科学?”着手 。

    就像在第 9 章中所做的那样,我们将使用一些 Web 请求命令(requests)和BeautifulSoup来检索数据。不过 ,这里有几个问题需要引起我们的注意。

    第一个问题是,文本中的单引号实际上就是 Unicode 字符 u\u2019 。我们可以创建一个辅助函数,用正常的单引号来取代它们:

    「Python数据分析系列」21. 自然语言处理(上)

    第二个问题是 ,在获得了网页的文本之后,我们需要把它做成一个由单词和句号组成的序列(这样我们就可以知道句子的结尾在哪里)。为此,我们可以借助于 () 函数来完成:

    「Python数据分析系列」21. 自然语言处理(上)

    「Python数据分析系列」21. 自然语言处理(上)

    「Python数据分析系列」21. 自然语言处理(上)

    当然 ,我们可以(也应该)进一步清理这些数据。文档中依然存在一些多余的文字(例如 ,第一个字“Section”就多余),同时,我们是利用句点来断句的(例如 ,遇到“Web2.0 ”就会出问题) 。此外,文档中还散布了一些标题和列表。尽管如此,这个文档已经可以凑合着用了。

    那么起始单词呢?实际上 ,我们只要从句点后面的单词中随机选择就行了 。首先,让我们预先计算出可能的单词语次转变。回想一下,对于 zip 来说 ,只要输入中有一个已经处理完毕,它就会停下来,因此 ,我们可以利用 zip(document, document[1:]) 求出文档中有多少对连续元素:

    「Python数据分析系列」21. 自然语言处理(上)

    现在,我们已经准备好生成句子了:

    「Python数据分析系列」21. 自然语言处理(上)

    它产生的那些句子都是些无意义的数据,不过你可以把这些句子放到网站上 ,以让网站看起来更能与数据科学挂钩。举例来说:

    「Python数据分析系列」21. 自然语言处理(上)

    如果我们使用三元模型(trigrams)的话 ,就能够降低这些句子无意义的程度 。所谓三元模型,就是使用三个连续的词得到的模型 。(更一般地讲,你还可以考虑由 n 个连续的单词得到的 n-grams 模型 ,不过对于我们来说,由三个词组成的就足够了。)

    现在,这种语次转变将取决于前两个单词:

    「Python数据分析系列」21. 自然语言处理(上)

    需要注意的是 ,现在我们必须将这些起始词单独记录下来。我们可以使用几乎相同的方法来生成句子:

    「Python数据分析系列」21. 自然语言处理(上)

    这就可以产生更好的句子,比如:

    「Python数据分析系列」21. 自然语言处理(上)

    当然,它们之所以看起来更好一些 ,是因为生成过程的每一步中,所面临的选择要更少一些,甚至有时候只有一种选择 。这就意味着生成的句子(或至少是长短语)经常跟原始数据中的一字不差。更多的数据会有所帮助;此外 ,如果从多篇数据科学方面的文章中收集n- grams,收到的成效会更好。

    3. 语法

    还有一种语言建模方法,那就是利用语法规则(grammar)来生成符合要求的句子 。在小学的时候 ,我们就已经知道了词的词类及其组合方式。例如 ,如果你有一个非常糟糕的英语老师,你必定会认为句子都是由名词后面跟动词构成的。这样的话,如果给你一个由名词和动词组成的列表 ,你就可以根据这种规则来造句了 。

    下面,我们将定义一个稍微复杂的语法:

    「Python数据分析系列」21. 自然语言处理(上)

    我们约定,以下划线开头的名称表示语法规则 ,它们需要进一步展开;而其他名称是不需要进一步处理的终端符号。

    例如,_S 是“句子”规则,其产生一个 _NP(“名词短语”)规则 ,后面紧跟一个 _VP(“动词短语 ”)规则。

    动词短语规则可能会产生一个 _V(“动词”)规则,也可能会产生一个动词规则继之以名词短语规则 。

    请注意,_NP 规则所生成的规则中也包括其自身。我们知道 ,语法是可以递归的,因此,尽管这里这些语法非常有限 ,但是照样能够产生无穷多不同的句子。

    那么 ,我们如何通过这些语法来生成句子呢?我们不妨从一个包含句子规则的列表 [_S]着手 。然后,我们将不断展开每一项规则,即从该规则的产物中随机选择一个来代替它 。当我们的列表元素全部变成终端符号时 ,我们就可以停下来了。

    例如,这样的进展可能如下:

    「Python数据分析系列」21. 自然语言处理(上)

    我们该如何实现这个目标呢?首先,我们将创建一个简单的辅助函数来识别终端:

    「Python数据分析系列」21. 自然语言处理(上)

    接下来 ,我们需要编写一个函数,将一个标记列表变成一个句子。首先,我们需要找到第一个非终结符号标记 。如果我们找不到这种标记 ,那就意味着我们已经有一个完整的句子,可以收工了。

    如果我们真的找到了一个非终端符号,那么就在其中随机选择一个。如果选中的是个终端符号(即一个单词) ,那么直接用它替换相应的标记即可 。除此之外,如果选中的是一个由空格符分隔的非终端符标记,那么则需要进行拆分 ,并将其拼接到当前标记中。总之 ,我们的工作就是在一组新标记上不断重复这个过程。

    把这些放在一起,我们得到:

    「Python数据分析系列」21. 自然语言处理(上)

    上述过程可以通过下列代码实现:

    「Python数据分析系列」21. 自然语言处理(上)

    只要我们不断改变语法——例如添加更多的单词、添加更多的规则 、添加各种词类等——就能得到足够多的网页来满足公司的需要 。

    实际上,当语法用于另一个方向时 ,会变得更加有趣。给定一个句子,我们就可以用语法来解析句子。这就能帮助我们识别主语和动词,从而理解句子的含义 。

    使用数据科学生成文本是一个巧妙的技巧;使用它来理解文本更神奇。(有关可为此使用的库 ,请参见“有关进一步探索”。)

    4. 题外话:吉布斯采样

    根据一些概率分布来生成样本是非常简单的事情 。我们可以通过以下这行代码得到一些均匀分布的随机变量:

    「Python数据分析系列」21. 自然语言处理(上)

    和正态随机变量,包括:

    「Python数据分析系列」21. 自然语言处理(上)

    但某些概率分布却很难进行采样 。当我们只知道一些条件分布时,可以通过吉布斯采样技术根据多维分布来生成样本。

    例如 ,假设我们在掷两只骰子。这里用 x 表示第一骰子的点数,y 表示两个骰子的点数之和 。假设我们要产生大量形如 (x, y) 的数据对,这种情况下 ,我们可以直接通过下列代码来轻松生成所需样本:

    「Python数据分析系列」21. 自然语言处理(上)

    「Python数据分析系列」21. 自然语言处理(上)

    但是,这里假设你只知道条件分布。在已知道 x 的条件下求 y 的分布是很容易的:如果你知道了 x 的值,那么 y 就有同等机会等于 x+1 ,x+2 ,x+3,x+ 4,x+5 ,x+6:

    「Python数据分析系列」21. 自然语言处理(上)

    如果将已知条件反过来,事情会变得更加复杂。举例来说,如果你知道 y 为 2 ,那么 x 必定为 1(因为只有当两个骰子的点数都为 1 的时候,点数之和才可能为 2) 。如果你知道 y为 3,那么 x 有等同的机会为 1 或 2。类似地 ,如果 y 为 11,那么 x 要么为 5,要么为 6:

    「Python数据分析系列」21. 自然语言处理(上)

    吉布斯抽样的方法是先从任意(有效)的 x 和 y 值入手 ,然后不断用 y 条件下随机选择的 x 值替换原来的 x,并用 x 条件下随机选择的 y 值替换原来的 y。

    重复一定次数后,得到的x 值和 y 值就可以作为根据无条件的联合分布获取的样本了:

    「Python数据分析系列」21. 自然语言处理(上)

    通过下列代码你会发现 ,这种取样方法与直接取样的效果相似:

    「Python数据分析系列」21. 自然语言处理(上)

    我们将在接下来的部分使用这种取样方法 。

    5. 主题建模

    在第 1 章我们建立“你应该知道的数据科学家 ”推荐系统的时候 ,我们只是根据科学家与读者的兴趣是否严格匹配来进行推荐的。

    要想理解我们的用户,更高级的方法是识别这些兴趣背后的相关主题。有一种叫作隐含狄利克雷分析(latent dirichlet analysis,LDA)的技术 ,常用来确定一组文档的共同主题 。我们会用它来分析包含每个用户的兴趣的那些文档。

    这里的 LDA 与第 13 章中的朴素贝叶斯分类器有一些相似之处,它们都是用于处理文档的概率模型。我们将尽量避开一些数学细节问题,但对于该模型的某些假设却不得不说 ,如下所述 。

    • 存在固定数目的主题,即 K 个 。

    • 有一个给每个主题在单词上的概率分布赋值的随机变量。你可以把这个分布看作是单词w 在给定主题 k 中出现的概率。

    • 还有另一个随机变量来指出每个文档在主题下面的概率分布 。你可以将这个分布看作是文档 d 中各主题所占比重。

    • 文档中各个单词的生成方式为,首先(根据文档的主题分布情况)随机选择一个主题 ,然后(根据该主题下面各单词的分布情况)随机选择一个单词。

    特别地,我们要建立一个文档(documents)集合,其中每个文档都是一个单词的列表 。同时 ,我们还要建立一个相应的 document_topics 集合,以便给每个文档中的每个单词都指定一个主题(这里用 0 到 K–1 之间的一个数字表示)。

    这样的话,第 4 个文档中的第 5 个单词就可以表示为:

    「Python数据分析系列」21. 自然语言处理(上)

    而这个选定的单词对应的主题可以表示为:

    「Python数据分析系列」21. 自然语言处理(上)

    这非常显式地定义了每个文档在各个主题上的分布情况 ,同时也隐式地定义了每个主题在各个单词上面的分布情况。

    我们可以估算出主题 1 产生一个特定单词的可能性 ,方法是将主题 1 产生该单词的次数除以主题 1 产生任意单词的次数 。(类似地,我们在第 13 章中建立垃圾邮件过滤器时,也曾经用每个单词出现在垃圾邮件中的次数与这些单词出现在垃圾邮件中的总次数进行过相应的比较。)

    这些主题都只是些数字 ,不过,我们可以用其权重最大的单词给它们取一个描述性的名称。接下来,我们只需设法生成 document_topics 即可 。这时 ,吉布斯取样技术就派上用场了。

    首先,我们以完全随机的方式给所有文档中的每个单词都赋予一个主题。现在,我们就以每次一个单词的方式遍历所有文档 。对于给定的单词和文档 ,我们需要根据该文档中主题(当前)的分布情况以及相对于该主题各单词(当前)的分布情况来建立相应的权重 。然后,我们会使用这些权重给这个单词选取新主题。如果将该过程迭代多次,我们就能利用主题—单词分布和文档—主题分布完成联合取样。

    首先 ,我们需要一个函数来根据任意权重集随机选择一个索引:

    「Python数据分析系列」21. 自然语言处理(上)

    「Python数据分析系列」21. 自然语言处理(上)

    例如,如果你给它的权重为[1,1,3],那么五分之一的时间它将返回0 ,五分之一的时间它将返回1 ,五分之三的时间它将返回2 。让我们来编写一个测试吧:

    「Python数据分析系列」21. 自然语言处理(上)

    我们的文档是我们用户的兴趣,具体如下:

    「Python数据分析系列」21. 自然语言处理(上)

    「Python数据分析系列」21. 自然语言处理(上)

    我们将尝试找到:

    「Python数据分析系列」21. 自然语言处理(上)

    个主题。为了计算采样权重,我们需要跟踪多个计数。让我们首先为它们创建数据结构 。

    •我们要统计每个文档中每个主题出现的次数 ,代码如下:

    「Python数据分析系列」21. 自然语言处理(上)

    •我们要统计每个主题中每个单词出现的次数,代码如下:

    「Python数据分析系列」21. 自然语言处理(上)

    •我们要知道每个主题中单词的总数,代码如下:

    「Python数据分析系列」21. 自然语言处理(上)

    •每个文档中所包含的单词总数:

    「Python数据分析系列」21. 自然语言处理(上)

    •不同单词的数量:

    「Python数据分析系列」21. 自然语言处理(上)

    •另外 ,下列代码可以用来统计文档的数量:

    「Python数据分析系列」21. 自然语言处理(上)

    一旦掌握了这些数据,我们就可以了解(比如说)documents[3] 中与主题 1 相关的单词的数量,具体代码如下所示:

    「Python数据分析系列」21. 自然语言处理(上)

    同时 ,我们还可以找出与主题 2 相关的单词 nlp 出现的次数,具体代码如下所示:

    「Python数据分析系列」21. 自然语言处理(上)

    现在,我们已经为定义条件概率函数做好了准备。就像在第 13 章中那样 ,这里的每个主题和单词都需要有一个平滑项,来确保每个主题在任何文档中被选中的几率都不能为 0,同时保证每个单词在任何主题中被选中的几率也都不能为 0:

    「Python数据分析系列」21. 自然语言处理(上)

    「Python数据分析系列」21. 自然语言处理(上)

    我们将使用这些方法来创建用来更新主题的权重:

    「Python数据分析系列」21. 自然语言处理(上)

    上面的 topic_weight 之所以如此定义 ,背后是有坚实的数学理论作为依据的 ,不过其中的数学细节已经超出了本书的讨论范围。不过从直观的角度来看,如果已知一个单词和所在文档,那么该单词属于某主题的概率取决于两个方面 ,即该主题属于该文档的可能性以及该单词属于该主题的可能性 。

    这就是我们所需要的全部零部件。下面,我们开始将每个单词随机指派给一个话题,并计入相应的计数器:

    「Python数据分析系列」21. 自然语言处理(上)

    我们的目标是获得一个主题的联合样本-单词分发和文档-主题分发。我们使用一种使用条件概率的吉布斯采样形式 ,它使用了前面定义的条件概率:

    「Python数据分析系列」21. 自然语言处理(上)

    这些主题都是什么呢?它们只是些数字而已:0、1、2 和 3 。如果我们要让它们拥有名称的话,必须亲自给它们取名。下面,让我们来找出权重较大的 5 个单词(见表 21-1) ,具体代码如下所示:

    「Python数据分析系列」21. 自然语言处理(上)

    表21-1。每个主题中最常见的单词

    「Python数据分析系列」21. 自然语言处理(上)

    根据这些数据,我们就可以给主题取名了:

    「Python数据分析系列」21. 自然语言处理(上)

    至此我们就清楚模型是如何将主题分配到每个用户的兴趣上面了:

    「Python数据分析系列」21. 自然语言处理(上)

    其中提供:

    「Python数据分析系列」21. 自然语言处理(上)

    以此类推 。鉴于一些主题名称中需要的“领域”,我们可能应该使用更多的主题 ,尽管很可能我们没有足够的数据来成功地学习它们 。

    「Python数据分析系列」21. 自然语言处理(上)

    二 、智媒AI伪原创工具可以一键生成原创文章吗

    ai的帖子

    可以的,这个伪原创工具挺不错的,上面功能很多 ,不仅能一键生成原创文章还能把生成的原创文章进行原创度检测。

    三 、小发猫AI伪原创工具 ,生成的文章质量怎么样

    ai伪原创文章可读

    小发猫是电脑生成的一款伪原创工具,所谓不会出现误差

    四、伪原创文章生产工具用什么呀

    ai的帖子

    答:我现在一直都在用的这个就还不错,你可以看一下。是牛商股份的牛商云平台上的i写作 ,这个平台功能给我感觉还不错,质量方面也很好,使用起来效果很好 ,是人工智能的,你可以看看 。

    五、「好书推荐」:构建企业级推荐系统

    ai伪原创文章可读

    数据与智能 出版了畅销书「构建企业级推荐系统:算法 、工程实现与案例分析」。每周输出7篇推荐系统、数据分析、大数据 、AI原创文章。「数据与智能」(同名视频号、知乎、头条 、B站、快手、抖音 、小红书等自媒体平台号) 社区,聚焦数据、智能领域的知识分享与传播 。

    作者 | Harper

    审核 | gongyouliu

    编辑 | auroral-L

    今天给大家带来的书 ,是我期待已久的一本技术类书籍。《构建企业级推荐系统:算法、工程实现与案例分析》。这本书正是我们数据与智能社区的创始人刘强所写 。旨在通过笔者近十年来的知识沉淀和经验积累,能够帮助读者构建出具有商业价值的推荐系统。

    「好书推荐」:《构建企业级推荐系统》

    这本书是在8月上旬出版上架的,而我有幸在在这本书出版之前就通读过了这本书 ,这里跟大家分享一下我之前读这本书的一些体会,起初我并不了解推荐系统的相关原理,但是出于自己的好奇心并且正好得到能够提前阅读的机会 ,就决定看一看这本书。但令我没有想到的是 ,我只花了4天的时间就把这本近36万字的书看完了,这让我自己也很吃惊 。能够促使我看下去的根本原因就是这本书循序渐进的知识结构,看完一章的内容 ,又马上被下一章的标题吸引,知识衔接地非常有序紧凑,这是我读别的技术类书籍从来没有过的一种体验。

    当然第一遍阅读都是粗读的 ,现在这本书出版了,我也打算再仔细精读一下。因为这本书带给我的,是另一个知识世界的入口 。我们每天都会使用到一些应用 ,比如音乐软件 、电子商务软件和现在非常火爆的短视频平台等等,都涉及到了推荐系统的部署与应用 。可见如今推荐系统的应用非常广泛,并且大幅度提升了我们的用户体验 ,这也是激发我好奇心的一个主要来源点。而这本书主要就是介绍推荐算法,再从算法到系统,并涵盖了产品设计与运营等等推荐的全生命周期 ,所以就知识体系来说这本书也是十分全面且系统的。

    还有一点就是 ,本书的作者,也就是我们数据与智能社区的开创者刘强,他从事了十多年的大数据与推荐系统的工作 ,是他带领了公司团队从零开始搭建大数据平台,所构建的推荐系统已经成功服务于过亿的互联网用户 。这本书也正是他这么多年来的经验总结与知识梳理,十年磨一剑 ,因此这本书的价值是巨大的,也真诚地向那些想要着手了解推荐系统的小伙伴推荐这本书,这本书一定能够帮助你们尽快入门。当然还有那些从事推荐系统 ,在工作中遇到了困难的人,相信这本书会给你们答案。

    最后再给大家简单介绍一下这本书的知识框架,全书的篇幅比较大 ,一共27章,分成了7个篇章,第一篇是关于推荐系统的基础认知 ,然后第二篇就是推荐系统基础算法 ,接下来分别是推荐系统的进阶算法 、推荐系统评估与价值、推荐系统工程实现、推荐系统产品与运营 、推荐系统案例分析,所以这本书显然干货满满,相信大家在看完这本书之后必定收获颇丰 。

    大家有需要可以直接上京东或者当当购买。谢谢支持。

    「好书推荐」:《构建企业级推荐系统》

    「好书推荐」:《构建企业级推荐系统》

    本文版权归去快排Seo www.SEOgurublog.com 所有,如有转发请注明来出,竞价开户托管,seo优化请联系QQ▷61910465