用NLP预测技术趋势

我上一篇文章是关于为特定用例微调较小的自然语言模型。具体来说,我谈到了为关键词提取微调一个BART模型。我还将其开源给任何想要使用它的人。

对于这篇文章,我将深入探讨更多基于这些较小的NLP模型的应用程序构建。在这里使用的模型中有两个是我自己微调的,另一个是从Hugging Face仓库获得的。

当我向人们展示完成的应用程序时,他们发现这是一个有点奇怪的概念,类似于某种结合了搜索功能的科技领域的Google Trends。

然而,这个想法是它会爬取某些科技网站,并利用NLP将可爬取的内容分解以分析情感、提取关键词、按类别组织内容。

使用三个不同的NLP模型处理三个标题的示例流程

最终结果将允许你看到每个类别或整体上哪些关键词是“热门”的以及它们的容量。

为了演示一个例子,请检查下面使用“工具与服务”类别的图表。

绘制每个类别的关键词图表以演示应用程序

如上所示,我们可以推断出Copilot在本周表现不佳,因为提到它的次数增加并且大多数情感都是负面的。

然后它会让你获取你感兴趣的关键词的来源,这样你可以导航到每个来源或整体分析内容。因此,在这种情况下,有趣的是检查有关Copilot的网址并阅读那里的内容。

该应用程序主要是一个API,我一直在持续构建它——所以它远未完成——但我一直在尝试为其构建前端。我称之为Safron

前端为你提供了一种有趣的方式来点击某个类别中的关键词,以查看前一天对它的评论。

你可以去测试一下;目前它运行得很好并且每天更新数据。

点击趋势关键词“FTX”会给你一个摘要和来源 | safron.io

如果你决定玩一下这个应用程序,选择你的类别,然后点击关键词以从AI那里获得关于发生了什么的摘要。你还可以看到它使用的来源。如果它是蓝色的,系统会说它是“热门”。

如果你想尝试使用API来构建新闻机器人——请参阅这篇文章。你可以获取最近一周的趋势和顶级关键词。它总是在早晨更新前一天的数据。

虽然可以实时处理,但保持NLP模型全天候运行的成本也会很高。我现在以非常低的成本维持系统的运行。

如何才能构建这样的东西,让这些NLP模型为我承担大部分工作?我将简要介绍应用程序本身,然后再进入技术细节。

这并不是突破性的内容,但如果有人正在寻找灵感或正在构建类似的东西,那就很有趣了。

1、简介

建造它困难吗?维护起来昂贵吗?为什么我要建造它?

建造它并不容易,主要是因为需要清理和维护的数据量很大。不过,我认为机器学习的进步使得像这样的事情比以前更容易实现。

分析公众意见和行为是很有趣的,由于我在科技领域工作,所以建造它是有意义的。

当你建造一些你感兴趣的东西时,你会逐渐提高自己的能力,并想到新的创新方法继续研究它。因此,有时候你不需要有一个明确的目标,因为过程本身就会产生有价值的结果。

1.1 建造和运行它是否昂贵?

微调这些较小的开源模型的主要原因是为了降低成本。在我的上一篇文章中,我详细介绍了使用大型语言模型(LLMs)和小型语言模型(SLMs)的成本差异。如果不包括购买域名费用,到目前为止我的总成本还没有超过80美元。

这个价格包括数据提取、数据库存储、托管、微调开源NLP模型、API和云托管。现在,如果流量增加,那就是另一个问题了。

最大的成本是使用GPT-4 Turbo帮助处理较小模型的初始数据集。但是你可以查看一些开源选项。

那么问题来了,如果我使用更大的语言模型,这样的东西会有多贵?每天调用API多达15,000次或将非常大的模型托管起来都会非常昂贵。

我在另一篇文章中做了计算,比较了使用零样本提示模板调用GPT-4和Claude API的成本。你可以在这里了解更多。

1.2 那么,为什么我要建造它?

像这样的结构化数据可以实现很多目标。

仅仅将自己附着在关键词和类别上进行产品和社区研究是一种方法,但同时能够使用API为AI代理提供数据可以让你无需每天筛选大量文本就能保持更新。

一个明确的应用场景就是每天看看哪些AI模型被讨论得最多,以及讨论的程度如何。也就是说,我们多久听到一次有新模型推出并被认为是突破性的?通过按AI模型类别过滤数据,你可以识别出一周内提到最多的AI模型以及哪些模型的提及数异常。

然后你可以深入到来源,看看人们在说什么,让LLM为你总结。

你可以看到下面是如何做到这一点的。

根据AI模型作为类别对每周数据进行排序(注意:这是过时的UI)

你会发现Mistral和Code Llama在上面的图表中被显著提及——这是2024年1月的一周。Mistral一直在稳步增长,但这并不总是如此。

如果某段时间内的提及和参与度急剧上升,API会将其显示为趋势。

相比之下,ChatGPT在市场上的巨大份额令人惊叹。这让你思考它已经覆盖了多少地盘。

如果你想亲自查看,可以按Categor选择AI模型和助手类别。你可以按11个类别进行过滤,例如公司、网站、工具和平台。

自这篇文章撰写以来,界面已经改变,但你仍然可以根据类别对关键词进行排序,并点击关键词查看来源。

说实话,为我做分类的那个模型创建起来相当困难。我最初不得不采用混合方法,后来改成了我自己构建的模型理解了上下文。如今它已经可以独立运行,但构建这个数据集花费了相当长的时间。

我发现的另一个有用的应用是使用带有API的AI代理来总结人们在某些关键词下遇到的问题。这对于生成定期报告以及产品研究都非常棒。

以下是一个使用2024年1月的数据示例,关键词为“Copilot”,使用的是GPT-4。

或者一个由ChatGPT总结的关于“Unity”的报告。

通过每天轮询API并让LLM处理这些关键词,然后将报告发送到你的邮箱或你偏好的媒介中,这将是相当直接的操作。

这就是我所说的结构化数据的工作方式。它可以协助LLM为你提供准确的报告。

通过对这些数据的分析,我发现有很多工具是你从未听说过的。如果你关注趋势,你会发现大多数人每天谈论的都是相同的工具、公司和人物。

很少有东西在被介绍后能立即进入主流轨道。

关键在于,一旦系统积累了数月的数据,就可以开始利用这些数据来创建更好的ML流程,以了解某事物何时何地开始获得关注。

2、技术过程

我不想深入探讨网络爬虫或构建类似系统的架构细节,应该已经有大量的相关内容了。

不过,我将长期数据存储在BigQuery中,并在MongoDB中缓存数据。为了构建面向用户的API,通过自动化脚本每天在BigQuery中使用更复杂的SQL查询在MongoDB中创建临时集合是有意义的。这种方法可以让我将BigQuery查询成本降到零。

我确实支付了一个MongoDB专用集群的费用,这是一个临时解决方案,因为我希望将成本保持得非常低。这种设置是可行的,但在这种情况下,在前端缓存表数据会减少请求的数量。这是我目前决定跳过的事情,因为我的代码有点混乱。

我想通过这个应用程序传达的信息是,几乎不需要任何成本就能做到这一点。我认为我已经成功传达了这个信息。

让我们深入探讨我在自然语言处理方面使用的部分。

3、自然语言处理

对于所有刚刚接触自然语言处理的人来说,Transformer模型是在2017年引入的。与之前的模型相比,Transformer模型更好地理解了自然语言的细微差别。

随着谷歌在2018年发布BERT,模型微调变得更加普遍。BERT和其他基础模型引入了这样一个概念:你可以从预训练的模型出发,针对特定任务在较小的数据集上进行微调,从而取得良好的效果。

HuggingFace这样的平台使得处理高级NLP变得非常容易,任何人都可以参与我在这里所做的工作,并将NLP应用于各种用例。

我使用的一个模型是由别人构建的,其他的则是我自己微调的。如果你想了解更多关于如何微调这些模型的内容,请查看这篇文章这里或这篇文章这里

4、情感分析、关键词提取与分类

在Safron的背后,有三个NLP模型在运作。

我原本打算构建六个模型,但为了保持理智,我最终只使用了三个。第一个模型是我之前构建的技术关键词提取器

我在一篇以前的文章中详细介绍了我是如何构建这个模型。这个模型很重要,因为它有能力自动识别重要的词汇,否则这将会非常混乱。

关键词提取是很多人认为非常简单的事情。想象一下,如何构建一个系统来识别什么是公司、什么是人、什么是工具,而系统却不理解自然语言。

在我对这个模型进行微调之后,我又回去再次微调它,但结果并不理想。这让我怀疑,未来是否会有专门从事整理数据集的工作岗位。这项工作非常艰难,而且你很容易放弃。虽然GPT-4可以提供一些帮助,但没有人类监督的话,它的表现并不一致。

第二个模型我使用的是情感分析器,这是别人构建的模型。这个模型可以将文本分类为中性、积极或消极,并为其分配特定的分数。

使用这个模型一段时间后,我发现在线上很少遇到积极的文本;它们通常是消极的或中性的,尤其是在科技领域。如果我重新构建它,我会让它更好地理解特定关键词的上下文,也许不仅仅是情感,而是情绪。

那么,我是如何使用这些模型的呢?想法是将之前收集并处理好的爬取数据,每天分批应用这些两个模型。

可爬取的标题通过NLP分解成关键词

这些关键词被存储下来,并与原始内容链接到另一个数据表中。我收集所有数据,汇总后发送到MongoDB,使其从此处轻松访问。

需要注意的是,由于应用程序对整个文本进行情感分析,因此关键词的情感分析是基于上下文的。然而,如果某个关键词持续显示出大量负面情感,通常表明公众对该关键词持负面态度。

特斯拉就是一家最近经历了一些困难的公司。

ChatGPT对2024年1月由Safron提取的关键词“特斯拉”数据的总结

我想在这个应用程序中附加一个LLM,这样它不仅给你提供来源,还会给你一个很好的总结。

这是现在可以通过safron.io完成的事情,因为我使用了一个非常便宜的LLM来按关键词总结文本。

让我们回到正轨,我还没有完全完成关键词提取和情感分析,但我希望能够对输入的词语进行分类。每天面对成千上万的关键词太难通过肉眼分析了,所以我开始微调一个用于分类的编码模型。

我选择了更大的RoBERTa模型来完成这个任务,因为我需要它尽可能多地训练数据。目标是让它识别每个关键词并将其分配到12个不同标签中的一个。

我采用了一种混合方法,结合数据库和NLP模型来确定类别,尽管有时会出现错误。后来,我重建了模型,让它理解关键词及其上下文文本,这个模型表现得很好。上次我尝试时,它在12个不同标签上的准确率达到了99%。

不过,它有时也会出错,但这可以通过用更多高质量的数据重新训练模型来纠正。

如果你想了解文本分类,可以看这篇文章

5、托管小型NLP模型

你可以使用Colab启动一个小型模型,但使用Hugging Face的免费管道与模型交互大约需要2小时才能处理多达2,000条文本,参数为4亿。

我每天处理多达10,000条文本,这意味着它需要每天运行大约8小时。在小型GPU上托管这些模型对于处理这些小型模型来说非常高效;通过使用Nvidia Tesla T4 GPU,我可以每30分钟处理10,000条文本,每次批量处理20-40条文本。

目前,我只尝试过使用Hugging Face的推理端点和Replicate来托管这些模型,主要是因为设置起来足够简单。不过,也可以简单地容器化它们并通过自己的API端点暴露出来。

6、结束语

任何在这个领域有经验的专家可能只需要看一眼这个项目就会承认这不是那么简单。创建NLP模型并不难,最难的部分是数据清理和数据排序。算法的创建和计算什么正在流行的API也是一个巨大的工作。

例如,提取技术术语的模型不可避免地会提取出“Google Gemini”、“Gemini Pro”或“Google的Gemini”等变体。

清理这些东西是一项艰巨的任务。向数据工程师们致敬,真的。

你不能简单地指导这些小型模型;它们的操作基于它们所接受的训练数据。你需要额外的处理来能够正确连接这些词,即使如此,有些词还是会丢失。

决定关键词应归入哪个类别的分类模型使用的是预训练的RoBERTA,该模型最后一次训练是在2019年。它没有看到许多它被要求分类的工具和公司。它会假设正确的类别,但你需要大量的数据对其进行训练,以便它能够执行。

另一个普遍存在的问题是,这些模型有时会对未受过训练的数据反应强烈。例如,我的关键词模型会在遇到未受过训练的数据时崩溃,每当出现一个汉字时,GPU 就会出问题,仅仅是因为它之前从未见过这种语言。

关键词模型在从评论中提取词语时也存在问题,因为它没有经过评论数据的训练。这是我将在后续模型中引入的内容,但如果你是第一次构建这些模型,请确保尽早引入你想要处理的数据。

自己构建模型意味着你了解了它所基于的数据,并且可以学会如何有效地使用它。

当你考虑到所有这些工作时,还需要考虑到创建算法和计算趋势的 API 的工作量。

尽管如此,我希望这能给你一些启发,让你去构建自己的东西。我非常热衷于分析当前收集到的数据,并尝试找到有效利用它的方法。

我会继续扩展 API,希望将来能够对技术领域的实际情况得出实际见解。


原文链接:Predicting Tech Trends with Natural Language Processing

汇智网翻译整理,转载请标明出处