NSDT工具推荐Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开发包

早在 6 月份,我就参加了 Databricks 主办的数据和人工智能会议。 这是一次很棒的会议,举办了很多研讨会,并提供了有关人工智能和数据领域最新动态的信息。
企业LLM是一个重要的焦点,对于想要利用人工智能的公司来说,它似乎是不久的将来。 对我来说,最好的发现之一是使用矢量数据库来存储和搜索文档或文本。 这将允许企业现在使用 Llama2 或 PaLM 2 和 Falcon-40B 等开源基础模型之一在自己的系统上搜索自己的数据。 这些模型功能强大且准确,足以帮助企业准确、安全和隐私地搜索信息数据库。 例如,公司可以使用LLM在自己的私有云上的自己的数据中搜索客户记录。

这是一个大消息,企业不必从头开始训练模型,他们可以使用预先训练的 LLM 模型,现在使用向量数据库来存储和访问自己的数据。 节省训练机器学习模型的成本并快速准确地访问其文档/数据。

1、用于统计的LLM

我无法找到答案的一个用例是,我如何使用LLM来帮助理解我的统计数据? 理所当然,对吧? 这些模型的第一个词是语言而不是数字。 尽管如此,我还是想尝试一下。 我想到的数据是营销指标的数字数据。 有无数的营销数据导出需要一些解释。 LLM能否根据我的统计数据回答诸如“照片帖子在哪一天和什么时间获得最多参与度?”之类的问题?

根据我的测试,我相信答案是肯定的。 诀窍是让LLM通过搜索和/或上下文使用我们的数字数据。 这应该允许我们提出有关数字数据中的内容的问题,并返回我们可以理解的答案。

2、Facebook数据

数据是 Facebook 指标。 来自这里。这就是它的样子;

“139441,Photo,2,12,4,3,0,2752,5091,178,109,159,3078,1640,119,4,79,17,100” 

数百行数字 CSV 数据。 每一列确实都有意义,只需要传达给LLM模型即可。

3、Google GCP平台

在寻找技术和平台的正确组合后,我选择了谷歌的云平台。 这使我可以轻松地将矢量数据和标准关系数据库放在一起。 我想出于上下文和历史原因存储原始数据。 另外,该过程适用于执行纯文本或文档项目,该项目将响应有关 PostgreSQL 数据库中存储的数据的人类语言查询。

在 Google 上使用 Postgres 的主要原因是允许我使用他们新发布的 pgvector 扩展。 该扩展允许我从我们的数据创建矢量数据,并将其及其相关列存储在 Postgres 中。 基本上,允许我为我的统计数据提供“背景”。 这个博客对我设置必要的工具和自定义一些例程以添加新流程有很大帮助。

4、实现过程

首先,我创建了一个 Postgres 数据库,并使用 Panda 的 Dataframe 向其中加载 CSV 数据。 然后根据每行中的数据创建一个向量,为每个元素添加上下文。

下面是为每列创建的类型上下文的示例。

string += f"Page Total likes is {df.page_total_likes[row_index]}.The type of Post is {df.post_type[row_index]}."

添加上下文信息,例如为什么该列很重要以及列用途的描述。 然后将这些行和列转换为向量嵌入。 我确实使用了 LangChain 的“chunk”处理来减小尺寸。

从那里,我创建了一个表来保存 Postgres 数据库中的嵌入。

使用 Google 示例,用户查询生成其向量嵌入,并使用 pgvector 向量相似性搜索运算符在应用相关 SQL 过滤器后找到最接近的匹配行。

由于我使用的是数字数据,因此 SQL 过滤器可能不会匹配,只有向量嵌入应该返回一些内容。

然后我使用 LangChain 框架中的 MapReduceChain 使用 LLM 模型(本例中为 Google PaLM2)生成汇总上下文。

最后一步是将上下文传递给 LLM 提示以回答用户查询。 LLM 模型向我们返回格式良好、听起来自然的响应。

如果没有结果,我们将不显示任何结果。 我们可以控制“相似度阈值”,这很大程度上影响你是否得到答案。 “.5 - .7”对我来说是最佳位置。

5、用LangChain推理

我相信这是我进行最多自定义处理数字数据的地方。

map_prompt_template = "

              You will be given a question about the data in the vector embeddings.

              the data in the embeddings are Facebook statistics for Posts.

               Select the right column described in the question and do the analysis.

                You should use SUM() and AVG(), MEAN() when necessary. Always return the row_id. The question will be enclosed in triple backticks (```).

              Using this description only, extract the number for the column referenced and return your answer.

              ```{text}```

              SUMMARY:

              """

map_prompt = PromptTemplate(template=map_prompt_template, input_variables=["text"])

combine_prompt_template = """

  You will be given a question about the Facebook statistics about POSTs.
  
  All information for answering the question is in the vector embeddings and fb_stats database. (```) and a question enclosed in
  
  double backticks(``).
  
  Select the right column described in the question and do the analysis.
  
  You should use SUM() and AVG(), MEAN() when necessary.
  
  You should only use the information in the description. always return the row_id.
  
  Your answer should include the explanation for your answer. Your answer should be less than 200 words.
  
  Your answer should be in a numbered list format.
  
  Description:
  
           ```{text}```
    
  
          Question:
  
          ``{user_query}``
  
         Answer:
  
           """
  
  combine_prompt = PromptTemplate(
  
     template=combine_prompt_template, input_variables=["text", "user_query"]
  )"

结果令人鼓舞。 以下是我能够提出的一些问题,以及LLM返回的答案。

问:照片帖子在哪一天和什么时间获得的参与度最高?

答案:照片帖子获得最多参与度的日期和时间是周六上午 10:00。 这是因为周六上午 10:00 照片帖子的平均参与度为 10.00,高于任何其他日期或时间照片帖子的平均参与度。

问:什么类型的帖子会获得最多的点赞?

答:点赞最多的是带有“爱”字的帖子。

接下来是应用更多的数字数据,例如营销活动的成本和预期结果。 我还想将该解决方案应用于更多类型的数据,例如财务数据和客户销售数据。

我的最终目标是让LLM根据业务用户自己的数字和文本数据回答问题并给出答案。 业务用户知道要问什么问题。 看起来使用企业数据的LLM可以给出他们需要的答案。


原文链接:LLM(Large Language Models) for Numeric data, think Stats

BimAnt翻译整理,转载请标明出处