当前位置:首页 > 科技  > 软件

使用LangChain、DeepInfra逆向工程Twitter算法

来源: 责编: 时间:2023-08-09 23:03:13 254观看
导读作者 | Mike Young译者 | 李睿审校 | 重楼在这个指南中,将对Twitter的推荐算法进行逆向工程,以更好地理解代码库,并提供见解,以制作更好的内容。想象一下,如果非编程人员能够借助工具编写一个能够理解、协助甚至生成代码的

作者 | Mike YoungW3N28资讯网——每日最新资讯28at.com

译者 | 李睿W3N28资讯网——每日最新资讯28at.com

审校 | 重楼W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

在这个指南中,将对Twitter的推荐算法进行逆向工程,以更好地理解代码库,并提供见解,以制作更好的内容。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

想象一下,如果非编程人员能够借助工具编写一个能够理解、协助甚至生成代码的软件该有多好,就像经验丰富的开发人员所做的那样。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

这对LangChain来说是可能实现的。利用VectorStores、Conversational RetrieverChain和LLM等高级模型,LangChain可以让非编程人员在代码理解和生成方面达到更高的水平。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

在这一指南中,将对Twitter的推荐算法进行逆向工程,以更好地理解代码库,并提供见解,以制作更好的内容。在这里将使用OpenAI公司的嵌入技术和一个名为Activeloop的工具来使代码易于理解,并在DeepInfra上托管一个名为Dolly的LLM来与代码进行对话。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

在完成之后,能够通过让人工智能回答最紧迫的问题来减少理解算法所需的困难工作,而不是花几周时间进行筛选。W3N28资讯网——每日最新资讯28at.com

1、采用LangChain理解代码的概念

W3N28资讯网——每日最新资讯28at.com

LangChain是一个非常有用的工具,可以分析GitHub上的代码库。它汇集了三个重要部分:VectorStores、Conversationa RetrieverChain和LLM,以帮助人们理解代码,在场景中回答有关代码的问题,甚至在GitHub存储库中生成新代码。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

Conversational RetrieverChain系统有助于从VectorStore中查找和检索有用的信息。它使用智能技术,例如场景感知过滤和排名,来确定哪些代码片段和信息与用户的特定问题或查询最相关。其与众不同之处在于,它考虑了对话的历史和提问的背景。这意味着它可以为用户提供高质量和相关的结果,专门满足用户的需求。简单地说,这就像有一个智能助手,它能理解问题的场景,并根据场景给出最好的答案。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

现在,了解一下LangChain的工作流,看看它是如何在高层次上工作的:W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

(1)为代码库编制索引

W3N28资讯网——每日最新资讯28at.com

第一步是克隆要分析的目标存储库。加载存储库中的所有文件,将它们分成更小的块,并启动索引过程。如果已经有了索引数据集,可以跳过这一步骤。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

(2)嵌入和代码存储

W3N28资讯网——每日最新资讯28at.com

为了使代码片段更容易理解,LangChain采用了代码感知嵌入模型。该模型有助于捕获代码的本质,并将嵌入的代码片段存储在VectorStore中,以便在将来查询时可以随时访问它们。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

简而言之,LangChain使用一种称为代码感知嵌入的特殊技术,使代码片段更容易理解。它有一个可以分析代码并捕获其重要特征的模型。然后,它将这些分析过的代码片段存储在VectorStore中,这就像一个易于访问的存储场所。这样,代码片段就被组织起来,可以在将来有查询或问题时进行快速检索。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

(3)理解查询

W3N28资讯网——每日最新资讯28at.com

这是LLM发挥作用的地方。可以使用像databricks/dolly-v2-12b这样的模型来处理查询。该模型分析用户的查询,并通过考虑场景和提取重要信息来理解它们的含义。通过这样做,该模型可以帮助LangChain准确地解释其查询,并为用户提供精确且相关的结果。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

(4)构建检索器

W3N28资讯网——每日最新资讯28at.com

一旦提出的问题或查询是明确的,Conversational RetrieverChain开始发挥作用。它通过VectorStore这一存储代码片段的地方,找到与用户的查询最相关的代码片段。这个搜索过程非常灵活,可以根据用户的需求进行定制。用户可以调整设置并应用特定于其需要的过滤器,以确保获得最准确和最有用的查询结果。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

一旦设置好了检索器,就是建立对话链的时候了。这一步包括调整检索器的设置以更好地满足用户的需求,并应用可能需要的任何其他过滤器。通过这样做,用户可以缩小搜索范围,并确保收到最精确、准确和相关的查询结果。从本质上来说,它允许用户微调检索过程,以获得对其最有用的信息。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

(5)提问

W3N28资讯网——每日最新资讯28at.com

用户可以使用Conversational RetrieverChain询问有关代码库的问题。它将为用户生成全面的和场景相关的答案。用户的LLM作为会话链的一部分,考虑到检索的代码片段和会话历史,为用户提供详细和准确的答案。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

遵循这一工作流程,用户可以有效地使用LangChain来更深入地了解代码,为其问题获得场景感知的答案,甚至在GitHub存储库中生成代码片段。现在逐步地了解其实际效果。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

2、分步指南

W3N28资讯网——每日最新资讯28at.com

以下深入了解实际的实现。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

(1)获取密钥

在开始时,必须在各自的网站注册,并获得Activeloop、DeepInfra和OpenAI的API密钥。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

(2)设置Indexer.py文件

创建一个Python文件(例如indexer.py)来索引数据。导入必要的模块,并将API密钥设置为环境变量:W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

Pythonimport osfrom langchain.document_loaders import TextLoaderfrom langchain.embeddings.openai import OpenAIEmbeddingsfrom langchain.vectorstores import DeepLakeos.environ['OPENAI_API_KEY'] = 'YOUR KEY HERE'os.environ['ACTIVELOOP_TOKEN'] = 'YOUR KEY HERE'embeddings = OpenAIEmbeddings(disallowed_special=())

W3N28资讯网——每日最新资讯28at.com

简单地说,嵌入是文本的表示,它捕获不同文本字符串的含义和相关性。它们是数字向量或数字列表,用于度量不同文本输入之间的相似性或距离。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

嵌入通常用于各种任务,例如搜索、聚类、推荐、异常检测、多样性测量和分类。在搜索中,嵌入有助于对搜索结果与查询的相关性进行排序。在聚类中,嵌入将相似的文本字符串分组在一起。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

推荐利用嵌入来推荐具有相关文本字符串的项目。异常检测使用嵌入来识别关联度小的异常值。多样性测量包括分析文本字符串之间的相似性分布。分类利用嵌入将文本字符串分配给最相似的标签。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

两个嵌入向量之间的距离表示相应文本字符串的相关或相似程度。较小的距离表明亲缘关系高,而较大的距离表明亲缘关系低。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

(3)克隆和索引目标存储库

接下来,将克隆Twitter算法存储库,加载、拆分和索引文档。可以从此链接(https://github.com/twitter/the-algorithm)克隆这一算法。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

这段代码遍历一个目录及其子目录(os.walk(root_dir))。对于遇到的每个文件(文件名),它尝试执行以下步骤:W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

Python root_dir = './the-algorithm'docs = []for dirpath, dirnames, filenames in os.walk(root_dir):    for file in filenames:        try:            loader = TextLoader(os.path.join(dirpath, file), encoding='utf-8')            docs.extend(loader.load_and_split())        except Exception as e:            pass

W3N28资讯网——每日最新资讯28at.com

  • 它创建一个TextLoader对象,指定当前正在处理的文件的路径(os.path.join(dirpath, file)),并将编码设置为UTF-8。
  • 然后调用TextLoader对象的load_and_split()方法,该方法可能读取文件的内容,执行一些处理或拆分操作并返回结果文本数据。
  • 然后使用extend()方法将获得的文本数据添加到一个名为docs的现有列表中。
  • 如果在这个过程中发生任何异常,则由try-except块捕获并简单地忽略(' pass ')。

W3N28资讯网——每日最新资讯28at.com

这个代码片段递归地遍历一个目录,从文件中加载和分割文本数据,并将结果数据添加到一个名为docs的列表中。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

(4)嵌入代码片段

接下来,使用OpenAI嵌入来嵌入代码片段。然后将这些嵌入存储在VectorStore中,这将允许执行有效的相似性搜索:W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

Python from langchain.text_splitter import CharacterTextSplittertext_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)texts = text_splitter.split_documents(docs)username = "mikelabs" # replace with your username from app.activeloop.aidb = DeepLake(dataset_path=f"hub://{username}/twitter-algorithm", embedding_functinotallow=embeddings, public=True) #dataset would be publicly availabledb.add_documents(texts)print(“done”)

W3N28资讯网——每日最新资讯28at.com

这段代码导入CharacterTextSplitter类,并初始化它的一个实例,其块大小为1000个字符且没有重叠。然后,它使用split_documents方法将提供的文档分成更小的文本块,并将它们存储在文本变量中。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

接下来,它设置用户名(用于注册Activeloop!)。它创建了一个名为db的DeepLake实例,该实例的数据集路径指向以指定用户名托管在“app.activeloop.ai”上的公共数据集。embedding_function处理所需的嵌入。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

最后,它使用add_documents方法将文本添加到数据库中,可能是为了存储或进一步处理。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

运行该文件,然后等待几分钟(它可能会挂起一段时间,通常不超过5分钟)。然后,进入下一步。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

(5)使用dolly-v2-12b来处理和理解用户查询

现在设置另一个Python文件question.py,以使用DeepInfra平台中可用的语言模型dolly-v2-12b来处理和理解用户查询。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

(6)构建检索器

使用前面创建的VectorStore构建一个检索器。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

Python db = DeepLake(dataset_path="hub://mikelabs/twitter-algorithm", read_notallow=True, embedding_functinotallow=embeddings) #use your usernameretriever = db.as_retriever()retriever.search_kwargs['distance_metric'] = 'cos'retriever.search_kwargs['fetch_k'] = 100retriever.search_kwargs['maximal_marginal_relevance'] = Trueretriever.search_kwargs['k'] = 10

W3N28资讯网——每日最新资讯28at.com

以下是代码正在执行的操作:W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

该代码初始化一个名为db的DeepLake对象。它从指定为“hub://mikelabs/twitter-algorithm”的路径读取数据集。值得注意的是,需要将“mikelabs”替换为自己的用户名!W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

然后使用as_retriver()方法将db对象转换为检索器。这一步骤允许对存储在VectorStore中的数据执行搜索操作。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

一些搜索选项可以通过修改检索器自定义多个retriever.search_kwargs字典:W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

distance _ metric被设置为“cos”,表示余弦相似度将用于测量文本输入之间的相似度。假设有两个向量来表示不同的文本片段,例如句子或文档。余弦相似性是衡量这两段文本的相似程度或相关性的一种方法。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

通过观察两个向量之间的夹角来计算余弦相似度。如果向量指向相同的方向或者彼此非常接近,余弦相似度将接近于1。这意味着文本片段彼此非常相似。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

另一方面,如果向量指向相反的方向或相距很远,余弦相似度将接近于-1。这表明文本片段非常不同或不相似。余弦相似度为0意味着两个向量彼此垂直或成90度角。在这种情况下,文本片段之间没有相似性。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

在上面的代码中,余弦相似度被用作比较文本输入之间相似度的度量。它有助于确定两个文本片段的关联程度。使用余弦相似度,代码可以与给定查询最相似的顶级匹配进行排序和检索。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

fetch_k参数设置为100,这意味着检索器将根据余弦相似度检索前100个最接近的匹配项。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

maximal_marginal_relevance设置为True,这表明检索器将优先考虑不同的结果,而不是返回高度相似的匹配。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

参数k设置为10,表示检索器将为每个查询返回10个结果。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

(7)构建会话链

使用Conversational RetrievalChain来连接检索器和语言模型。这使系统能够处理用户查询并生成场景感知的响应:W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

Python model = DeepInfra(model_id="databricks/dolly-v2-12b")qa = ConversationalRetrievalChain.from_llm(model,retriever=retriever)

W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

Conversational RetrievalChain充当检索器和语言模型之间的连接。该连接允许系统处理用户查询并生成场景感知的响应。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

(8)提问

现在可以问关于Twitter算法代码库的问题。Conversational RetrievalChain提供的答案是场景感知的,并且直接基于代码库。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

以下是得到的一个样本答案:W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

Python questions = ["What does favCountParams do?", ...]chat_history = []for question in questions:      result = qa({"question": question, "chat_history": chat_history})    chat_history.append((question, result['answer']))    print(f"-> **Question**: {question} /n")    print(f"**Answer**: {result['answer']} /n")

W3N28资讯网——每日最新资讯28at.com

以下是一些摘自LangChain文档的示例问题:W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

Python 1 questions = [2 "What does favCountParams do?",3 "is it Likes + Bookmarks, or not clear from the code?",4 "What are the major negative modifiers that lower your linear ranking parameters?",5 "How do you get assigned to SimClusters?",6 "What is needed to migrate from one SimClusters to another SimClusters?",7 "How much do I get boosted within my cluster?",8 "How does Heavy ranker work. what are it’s main inputs?",9 "How can one influence Heavy ranker?",10 "why threads and long tweets do so well on the platform?",11 "Are thread and long tweet creators building a following that reacts to only threads?",12 "Do you need to follow different strategies to get most followers vs to get most likes and bookmarks per tweet?",13 "Content meta data and how it impacts virality (e.g. ALT in images).",14 "What are some unexpected fingerprints for spam factors?",15 "Is there any difference between company verified checkmarks and blue verified individual checkmarks?",16 ]

W3N28资讯网——每日最新资讯28at.com

以下是得到的一个样本答案:W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

Python**Question**: What does favCountParams do? **Answer**: FavCountParams helps count your favorite videos in a way that is friendlier to the video hosting ser

3、有用的资源

W3N28资讯网——每日最新资讯28at.com

这里有一些额外的资源,可能会有用:W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

  • Activeloop documentation

(https://docs.activeloop.ai/)W3N28资讯网——每日最新资讯28at.com

  • AIModels.fyi

(http://aimodels.fyi/) W3N28资讯网——每日最新资讯28at.com

  • LangChain guides

(https://notes.aimodels.fyi/tag/langchain/)W3N28资讯网——每日最新资讯28at.com

  • OpenAI embeddings documentation

(https://platform.openai.com/docs/guides/embeddings)W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

4、结论

W3N28资讯网——每日最新资讯28at.com

在这一指南中,探索了使用LangChain对Twitter的推荐算法进行逆向工程。通过利用人工智能功能,节省了宝贵的时间和精力,用自动查询响应取代了人工代码检查。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

LangChain是一个强大的工具,它彻底改变了代码的理解和生成。使用VectorStores、Conversational Retriverchain等高级模型,以及托管在DeepInfra等服务上的LLM, LangChain使开发人员能够有效地分析代码库,提供场景感知的答案,并生成新代码。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

LangChain的工作流程包括索引代码库、嵌入代码片段、使用语言模型处理用户查询,以及利用Conversational RetrieverChain检索相关代码片段。通过自定义检索器并构建会话链,开发人员可以微调检索过程以获得精确的结果。W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

按照分步指南,可以利用LangChain来增强代码理解能力,获得场景感知的答案,甚至在GitHub存储库中生成代码片段。LangChain为生产力和理解开辟了新的可能性。那么人们会采用它建造什么?W3N28资讯网——每日最新资讯28at.com

W3N28资讯网——每日最新资讯28at.com

原文链接:https://dzone.com/articles/a-plain-english-guide-to-reverse-engineering-the-tW3N28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-5172-0.html使用LangChain、DeepInfra逆向工程Twitter算法

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 空间智能化为产业转型带来新动能,华为开放能力与合作伙伴共赢时代

下一篇: 电商订单履约-卖家发货演化史

标签:
  • 热门焦点
  • 5月iOS设备性能榜:M1 M2依旧是榜单前五

    5月iOS设备性能榜:M1 M2依旧是榜单前五

    和上个月一样,没有新品发布的iOS设备性能榜的上榜设备并没有什么更替,仅仅只有跑分变化而产生的排名变动,刚刚开始的苹果WWDC2023,推出的产品也依旧是新款Mac Pro、新款Mac Stu
  • 28个SpringBoot项目中常用注解,日常开发、求职面试不再懵圈

    28个SpringBoot项目中常用注解,日常开发、求职面试不再懵圈

    前言在使用SpringBoot开发中或者在求职面试中都会使用到很多注解或者问到注解相关的知识。本文主要对一些常用的注解进行了总结,同时也会举出具体例子,供大家学习和参考。注解
  • 谷歌KDD'23工作:如何提升推荐系统Ranking模型训练稳定性

    谷歌KDD'23工作:如何提升推荐系统Ranking模型训练稳定性

    谷歌在KDD 2023发表了一篇工作,探索了推荐系统ranking模型的训练稳定性问题,分析了造成训练稳定性存在问题的潜在原因,以及现有的一些提升模型稳定性方法的不足,并提出了一种新
  • JVM优化:实战OutOfMemoryError异常

    JVM优化:实战OutOfMemoryError异常

    一、Java堆溢出堆内存中主要存放对象、数组等,只要不断地创建这些对象,并且保证 GC Roots 到对象之间有可达路径来避免垃 圾收集回收机制清除这些对象,当这些对象所占空间超过
  • 大厂卷向扁平化

    大厂卷向扁平化

    来源:新熵作者丨南枝 编辑丨月见大厂职级不香了。俗话说,兵无常势,水无常形,互联网企业调整职级体系并不稀奇。7月13日,淘宝天猫集团启动了近年来最大的人力制度改革,目前已形成一
  • ESG的面子与里子

    ESG的面子与里子

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之三伏大幕拉起,各地高温预警不绝,但处于厄尔尼诺大“烤”之下的除了众生,还有各大企业发布的ESG报告。ESG是“环境保
  • 年轻人的“职场羞耻感”,无处不在

    年轻人的“职场羞耻感”,无处不在

    作者:冯晓亭 陶 淘 李 欣 张 琳 马舒叶来源:燃次元“人在职场,应该选择什么样的着装?”近日,在网络上,一个与着装相关的帖子引发关注,在该帖子里,一位在高级写字楼亚洲金
  • 联想小新Pad Pro 12.6将要推出,搭载高通骁龙 870 处理器

    联想小新Pad Pro 12.6将要推出,搭载高通骁龙 870 处理器

    联想小新Pad Pro 12.6将于秋季新品会上推出,官方按照惯例直接在发布会前给出了机型的所有参数。联想小新 Pad Pro 12.6 将搭载高通骁龙 870 处理器,重量为 5
  • DRAM存储器10月价格下跌,NAND闪存本月价格与上月持平

    DRAM存储器10月价格下跌,NAND闪存本月价格与上月持平

    10月30日,据韩国媒体消息,自今年年初以来一直在上涨的 DRAM 存储器的交易价格仅在本月就下跌了近 10%,此次是全年首次降价,而NAND 闪存本月价格与上月持平。市
Top