引言
我们坚决致力于持续改进我们的文档及其导航。使用Mendable(一款支持AI的聊天应用程序),用户可以通过关键词或问题搜索我们的文档。随着时间的推移,Mendable收集了大量问题数据集,突显了文档改进的领域。
挑战
从每月数万个问题中提炼出常见主题是一项重大挑战。手动标记可能有效,但速度慢且费力。 统计方法可以分析词语分布以推断常见主题,但可能无法捕捉问题的语义丰富性和上下文。
提案
LLM可以帮助我们总结并识别由Mendable收集的问题中存在的文档空白。我们尝试了两种将大型问题数据集传递给LLM的方法:1)通过聚类对相似问题进行分组,然后总结每个组;2)应用一种“映射-规约”(map-reduce)方法,将问题分成小段,总结每个段,然后将它们合并成最终的综合。

这些方法之间存在权衡,我们希望对此进行考察。

成果
我们测试了一个端到端的LLM总结流程,该流程使用LangChain的映射-规约链,根据GPT-3.5-16k(16k个token)或Claude-2(100k个token)的上下文窗口将问题分组,总结每个组(映射),然后将组的总结提炼成最终的综合(规约)。
我们还测试了嵌入式问题的k-Means聚类,然后使用GPT-4总结每个簇,这是一种类似于OpenAI在其食谱之一中报告的方法。为了保持一致性,我们使用与映射-规约相同的数据集。
我们将笔记本和数据(请参阅此处的仓库)开源,以便进行此分析的复现。 此处有一个包含详细结果的表格,我们在下表总结了这些结果;我们要求两种方法总结用户提出的主要问题主题,并列出每个类别的问题比例。

可以使用替代的总结提示来查询特定主题;例如,使用映射-规约,我们可以要求规约阶段返回关于特定主题(例如,数据处理)的顶尖问题。例如,使用此规约提示
The following is a list of summaries for questions entered into a Q+A system:
{question_summaries}
Take these and distill it into a final, consolidated list with:
(1) the top 10 question related to loading, processing, and manipulating different types of data and documents.
(2) estimate the proportion of each question
我们得到了关于加载、处理和操作不同类型数据和文档的十大问题的详细主题细分。
1. "How can I load a PDF file and split it into chunks using langchain?" - 15%`
2. "How do I load and process a CSV file using Langchain?" - 12%
3. "How do I use the 'readfiletool' to load a text file?" - 11%
4. "How do I use Langchain to summarize a PDF document using the LLM model?" - 10%
5. "What are the different data loaders available in Langchain, and how do I choose the right one for my use case?" - 9%
6. "How do I load and process multiple PDFs?" - 9%
7. "How do I load all documents in a folder?" - 8%
8. "How do I split a string into a list of words in Python?" - 8%
9. "How do I load and process HTML content using BeautifulSoup?" - 8%
10. "How can I add metadata to the Pinecone upsert?" - 10%
为了获得更好的成本诊断分析,我们使用即将推出的LangChain工具来比较这些方法的诊断(token使用量等)。例如,我们量化了token的使用量,这表明映射-规约确实成本更高。
- ~50万个token
- ~8万个token(~8k / 簇,共10个簇)
总结
正如预期的那样,这些方法之间存在权衡。映射-规约提供了高度的可定制性,因为问题可以被划分成任意精细的组,并使用可调的映射-规约提示进行总结。然而,如token使用量所示,成本可能相当高。聚类存在因预处理阶段的手动调整(例如,簇数量)而丢失信息的风险,但它成本较低,并且可能是一种在进行更精细(且成本更高)的LLM总结之前快速压缩非常大的数据集的合理方法。这两种方法的深思熟虑的结合为解决这一挑战提供了 considerable promise。