顾客贡献者ERGEST Xheblati.

最近我被Tiago问了,看看我是否可以用它的Instapaper文章集合做一些有趣的东西,存储在Evernote上。我最近在工作中完成了类似的项目,我看着产品描述并从中生成了标签。我以为我可以做一些类似于Tiago的项目的事情。

我最喜欢的工具是kn这是一个免费的Visual数据科学平台,您需要执行NLP(自然语言处理)所需的所有功能。我以为我可以使用LDA算法在KNIME中,为了做不监督(又名统一)主题发现。无人监督只是意味着算法正在发现主题而不预先讲述它们,因此不需要任何示例来学习。

算法背后的直觉非常简单,虽然统计信息不是。鉴于一组文件,假设文档中只有少量主题或主题,文档中的单词可以归因于主题。因此,算法的输出是标记为主题的主题_1,主题_2 ...主题_n(因为它不知道它们实际上是什么),并且对于构成该主题的一组单词组的每个主题都不知道。

这是输出:

You can see that some of the topics are quite sharp (topic 6 is about knowledge management which is Tiago’s specialty, topic 9 is about books and reading, topic 8 is about companies and businesses. You can also see some not very sharp topics such as topic 17 which is quite miscellaneous. So how was this done?

第1步:获取数据

为了获得文章,Tiago与我分享了他的Evernote笔记本,在那里他拥有所有保存的文章。乍一看,工作看起来不可逾越。这些文件基本上是标题,简短的描述和原始文章的链接。我以为我必须用读取Evernote API的读取数据。但是,一旦我发现Evernote桌面应用程序有能力将所有文档导出为HTML文件,事情会非常令人兴奋。

我将所有Evernote文档导出到HTML文件中,并必须在创建可视工作流程中以读取和处理它们以KNIME。这是工作流程的屏幕截图

工作流程以节点开始,以获取所有导出的HTML文件的列表。列表是必要的,因为您使用数据的工作方式是一次处理一行并读取您需要在计算机中了解其位置的文件。此节点将表格输出到计算机驱动器中的文件名和位置。通过双击节点,您可以在其中设置配置屏幕,您可以在其中设置文件夹和文件类型。

现在我们有文件列表和他们的位置,是时候实际读取和解析每个文件的内容了。

由于文件主要是Instapaper URL,因此我们需要做的是提取物品的标题和instapaper URL,以便稍后我们可以转到该URL并抓取实际内容。

下一个节点就是这样。它实际上是一个元德,这意味着它是其他节点的集合。我在这里使用它来将工作流程组织成逻辑步骤。双击此节点,将我们在节点内部,以便我们看到该过程。在KNIME中,您可以将多个元节点嵌套在一起逻辑工作流程,使其稍后易于阅读,理解和调试工作流程。

这是内部节点的屏幕截图,所以你可以看到发生了什么

所有这些节点都是Palladian插件的一部分,需要在运行之前下载和安装。这HTML解析器节点从中获取文件的URL文件列表节点并读取HTML。然后我们使用XPath.提取物品标题和Instapaper URL的节点。

什么是xpath?它是一种类似于常规表达式的语言,用于导航和提取XML或HTML文件的元素。你可以在这里读更多关于它的内容:https://www.w3schools.com/xml/xml_xpath.asp.

但这是很酷的部分。

您无需了解它以使用此节点。只需单击所需的元素即可自动为您生成XPath表达式。只需点击添加XPath.添加新列。这很方便。您可以在单个节点中提取您想要的多个元素。

我第一次运行这个节点,我注意到一些文章不是从Instapaper的,而且物品的完整文本实际上是在HTML文件本身中,因此我将工作流拆分为两个路径以单独处理它们。对于顶级工作流部分上的Instapaper文章,我们需要实际打开Instapaper URL以获取文章文本。

为此,我们需要使用http retriever.节点和节点HTTP结果提取器节点实际上转到文章的页面并读取每个的HTML。一旦完成,我们会过滤掉死链接(空结果或404错误),最后使用内容提取器节点以获取文章的文本。输出是每行的文档。对于非Instapaper文章,我们已经拥有了HTML,所以我们需要做的就是运行内容提取器节点(见图3.)

第2步:预处理文本

现在我们有文件,我们想在通过LDA运行之前清理一下。通常在NLP文本处理中,我们想做像删除非常常见的术语一样的事情(如不是等等)因为它们没有用于我们目的的有用信息。

请记住,我们从假设中开始,我们的文档语料库中有几个主题和单词,而且,而不是不要告诉我们语料库中的主题。在NLP术语中,这些单词被称为秒表他们经常被筛选出来。

好吧,让我们来看看文本清洁元节点的方式。

所有上面的节点都将文件作为输入,这正是什么内容提取器为我们创建的节点。所以我们正在做的第一步是删除数值。在文本处理中,数字通常毫无意义,因此它们总是过滤。

接下来我们删除标点符号,所以一个术语,如“真的?”变得“真的”,“我”变成了“我”。需要明确讲述计算机的计算机,否则他们会认为真的吗?而且真的是两个独特的术语。

在此之后,我们将所有单词转换为小写,从而与“真实”和“真正”的单词与算法的立场相同。再次,我们可以轻松算法为我们做正确的事情。

我们谈到了上面的停止词,所以我们希望在这里过滤它们。在下一步中,我通过自定表达式将所有文本放入自定义清除节点以删除其他非文本字符。

最后,我们通过了一切斯坦福·莱姆迈拉节点,基本上消除了单词的拐点形式。这样,动词就像曾是一切都是。更多详情可在这找到:https://nlp.stanford.edu/ir-book/html/htmledition/stemming-and-lemmatization-1.html.

正如您所看到的,只是以“易于摘要”格式为“消费”的“易于摘要”格式进行准备,这是非常时间的密集,实际上它在今天机器学习/数据科学中的工作中占了大约80%的工作。不要相信一秒钟,即时艾美将随时接管世界

第3步:主题发现

我们终于准备好完成了实际的工作,如果你愿意,“烘烤蛋糕”。我们到目前为止我们所做的所有筹备工作都已完成,以获得更好的结果主题提取器(并行LDA)节点,但这是实际魔法发生的地方。

You don’t really have to understand exactly how the algorithm words in order to be able to use it, just like you don’t need to know how an engine works in order to drive a car, but you do need to understand it’s settings.

主题提取器节点具有一些参数:

首先,它需要一个文件列作为输入,它是从上一个节点的输出。然后,您必须设置4个参数(也称为HyperParameters)。一些算法可以有数百个,甚至数千个这些超参数,并找到合适的组合非常硬。它背后有一个艺术和科学,称为封锁率调整,但我们不需要进入这里。如果你好奇:https://en.wikipedia.org/wiki/hyperparameter_optimization.

我们最关心的是没有主题没有言语每个主题

您如何确定提供的最佳数字?那么没有精确的科学,所以你必须在设置中玩并看看不同的输出。注意到这一点也很重要种子:设置,也影响输出很多。我通常不会改变Αbet设置,但您可以尝试不同的设置,看看你得到了什么。

这种算法的缺点之一是它有点不稳定,从某种意义上是每次运行它时,都可以获得不同的结果。每次更改设置时,您都会得到不同的结果。该产出还需要人类解释,可以邀请调查结果偏见。然而,这种算法非常强大,如果您没有什么可以从中开始,可以帮助指导您。

节点有三个输出:

1.第一个输出是表中的所有文档和所有主题作为列。主题中的数字表示文档所属的概率属于该主题。具有最高值的那个成为该文档的分配主题。这可能很有趣,因为某些文档可能同样适用于两三个主题。


2.第二个输出是主题项,每行一个术语和称重的列。我们不需要担心这里的重量。

3.第三个输出更为技术,我不会因为我们不需要而覆盖它。

现在我们拥有我们想要以更好的方式呈现它的输出,就像我在上表中所做的那样。为此,我们必须进行一点分组和串联这些条款。这是一个非常强大的表现通过...分组节点。

那里有两个通过...分组图1中的节点在此帖子的顶部。顶部计算主题所属的文档和底部的所有文件都会连接到上面的所有术语,因此我们只能获得一行。最后,Joiner节点就像数据库表连接一样,将两个表组合成单个输出,如下所示。

现在可以通过外部工具进一步处理这些术语,以便它们可以作为标签添加到文档中,或者可以在KNIME内部输入另一算法。在我所做的一个应用程序中,我用手标记了主题,为每个标记的主题抓住了一组200个文件,并用作培训集,以便在监督分类过程中查找具有相同主题的更多文件KNIME。

我有附近的KNIME工作流程其中包括导出的文件,因此您可以在自己的计算机上运行此工作流程并修改它以查看它所的内容。关于KNIME的一个很酷的事情是,您可以在步骤中运行工作流程,KNIME将节省中介结果,因此每次更改时都不要重新运行整个事物。

享受!


订阅下面以获得免费的每周电子邮件,我们最好的新内容,或者跟随我们推特FacebookInstagram.linkedin., 或者YouTube。或者成为A.帕迪斯成员即时访问我们完整的职位集合的帖子。