开始
几个月前,在使用R研讨会上工作的Databricks时,遇到了一些自定义SQL功能。这些特定功能在“ AI_”之前,NLP使用简单的SQL调用运行:
> SELECT ai_analyze_sentiment('I am happy');
positive
> SELECT ai_analyze_sentiment('I am sad');
negative
这对我来说是一个启示。在我们作为分析师的日常工作中,已经提供了一种使用LLM的新方法。迄今为止,我主要是在LLM上完成代码并制定开发任务。但是,这种新方法专注于直接将LLM直接用于我们的数据。
我的第一个反应是尝试通过R。
dbplyr
我们可以在R中访问SQL功能,很高兴看到它们正常工作:
orders |>
mutate(
sentiment = ai_analyze_sentiment(o_comment)
)
#> # Source: SQL [6 x 2]
#> o_comment sentiment
#>
#> 1 ", pending theodolites … neutral
#> 2 "uriously special foxes … neutral
#> 3 "sleep. courts after the … neutral
#> 4 "ess foxes may sleep … neutral
#> 5 "ts wake blithely unusual … mixed
#> 6 "hins sleep. fluffily … neutral
该集成的负面方面之一是,尽管可以通过R访问它,但我们需要与Databricks直接联系,以便以这种方式从LLM中受益,这限制了可以从中受益的人数。
根据他们的文件,Databricks利用Llama 3.1 70B。虽然这是一个非常有效的语言模型,但其巨大的规模是大多数用户机器的主要挑战,这使得操作标准设备的实用性。
获得可行性
LLM开发以快速的速度加速。最初,大型的在线语言模型(LLMS)对于日常使用很可行。这涉及到毫不犹豫地在外部共享数据的公司。此外,在线使用LLMS的成本可能很大,并且可以将费用添加到高速上。
理想的解决方案是将LLM集成到我们自己的系统中,这需要三个基本组件:
- 一个可以舒适地适合记忆的模型
- NLP任务的完全准确性
- 用户模型与用户笔记本电脑之间的直观接口
去年,这三个要素的存在几乎是不可能的。能够安装内存的模型不准确或非常慢。但是,现代开发(例如Meta Llama和Ollama等平台交互引擎)使得传播这些模型成为可能,为希望将LLMS集成到其工作流程任务的公司提供了有希望的解决方案。
项目
该项目最初是作为探索的,受兴趣驱动的驱动,以从LLM中受益于“一般目的”,以产生与数据库AI功能中的结果相似的结果。主要的挑战是确定这种形式提供可靠和一致结果所需的准备和准备量。
在不访问开源设计或代码的情况下,它仅依靠LLM作为测试地面。这提供了许多障碍,包括可调节表格的许多选项。即使在即时工程中,可能性也很广。为了确保模型不是很专业或专注于特定主题或结果,您需要在准确性和公众之间取得准确的平衡。
幸运的是,经过激烈的测试,我发现一个简单的“单镜头”路由器导致了最佳效果。通过“最佳”,我的意思是,对于通过多个等级的特定且一致的行,答案是准确的。一致性非常重要,因为这意味着提供答案是没有任何其他解释的特定选择(正,负或中性)之一。
以下是我对喇嘛3.2的可靠工作的说法的例子:
>>> You are a helpful sentiment engine. Return only one of the
... following answers: positive, negative, neutral. No capitalization.
... No explanations. The answer is based on the following text:
... I am happy
positive
作为侧面观察,我试图在失败的时间进行多行。实际上,我花了很多时间探索不同的方法,例如一次使用10或2行,并以JSON或CSV格式格式化它们。结果通常是不一致的,似乎它并没有加快该过程的加快,应应付努力。
一旦您对这种方法感到满意,下一步就是将工作包裹在R中。
方法
我的目标之一是使商业中心套餐尽可能“舒适”。换句话说,我想确保在R和Python中使用该软件包与数据分析师每天使用他们喜欢的语言的方式平滑地集成在一起。
对于R,这相对清楚。我只需要检查工作是否与试管效果很好(%>%
和 |>
它可以很容易地组合成诸如中的包装 tidyverse
:
reviews |>
llm_sentiment(review) |>
filter(.sentiment == "positive") |>
select(review)
#> review
#> 1 This has been the best TV I've ever used. Great screen, and sound.
但是,对于Python来说,对我来说是一种非原始语言,这意味着我必须调整对数据处理的思考。具体来说,我了解到,在Python中,对象(例如Pandas DataFrames)通过设计“包含”转换功能。
这种见解使我调查了API Pandas是否允许扩展,我做到了!探索了可能性后,我决定从Polar开始,使我可以通过创建新名称空间来扩展其应用程序编程接口。这种简单的添加使用户可以轻松访问必要的功能:
>>> import polars as pl
>>> import mall
>>> df = pl.DataFrame(dict(x = ["I am happy", "I am sad"]))
>>> df.llm.sentiment("x")
shape: (2, 2)
┌────────────┬───────────┐
│ x ┆ sentiment │
│ --- ┆ --- │
│ str ┆ str │
╞════════════╪═══════════╡
│ I am happy ┆ positive │
│ I am sad ┆ negative │
└────────────┴───────────┘
通过将所有新功能保留在LLM名称中,用户很容易找到所需和使用的作业:

接下来
我认为会更容易知道会发生什么 mall
一旦社区使用并提供笔记。我希望添加更多LLM后端是主要需求。另一个可能的改进是,当有新的更新模型可用时,您可能需要更新此给定模型的索赔。我面对从喇嘛3.1到骆驼3.2。有必要修改其中一项主张。该包装是有组织的,这样的未来修正案将是包装的补充,而不是需求的替代方案,以保持与纸张的兼容性。
这是我第一次写一篇有关项目历史和结构的文章。由于R + Python和LLM的各个方面,我认为这是值得分享的,这项工作尤其独特。
如果您想了解更多有关 mall
请随时访问其官方网站:https://mlverse.github.io/mall/