「LangChain、Activeloop、およびDeepInfraを使用したTwitterアルゴリズムのリバースエンジニアリングのためのプレーンな英語ガイド」
A plain English guide for reverse engineering Twitter algorithms using LangChain, Activeloop, and DeepInfra.
ソフトウェアを書くことを想像してみてください。それは、経験豊富な開発者と同様に、コードを理解し、支援し、生成することができるのです。
それはLangChainで可能です。VectorStores、Conversational RetrieverChain、LLMなどの高度なモデルを活用することで、LangChainは新たなレベルのコード理解と生成を実現します。
このガイドでは、Twitterの推奨アルゴリズムを逆解析し、コードベースをより理解し、より良いコンテンツを作成するための洞察を提供します。OpenAIの埋め込み技術とActiveloopというツールを使用し、コードを理解可能にし、DeepInfraにホスティングされたLLMのDollyを使ってコードと会話します。
終わったら、自分自身で逐次的に見つけ出すのに数週間かかる難しい作業をAIに最も重要な質問に答えてもらうことによって、アルゴリズムを理解するための困難な作業をショートカットできるようになります。さあ、始めましょう。
- 「ゴミを入れればゴミが出る:AIにおけるデータ品質の重要な役割」
- 「パート1:ステップバイステップでWindowsベースのシステム上でデータパイプラインを実行するための仮想環境の作成」
- ChatGPTにおけるCSVファイルのクエリパフォーマンス向上
LangChainを使ったコード理解のための概念的なアウトライン
LangChainは、GitHub上のコードリポジトリを分析できる非常に便利なツールです。VectorStores、Conversational RetrieverChain、LLM(言語モデル)の3つの重要な要素を組み合わせて、コードの理解、コンテキストに基づいた質問への回答、GitHubリポジトリ内での新しいコードの生成をサポートします。
Conversational RetrieverChainシステムは、VectorStoreから有用な情報を見つけ出し、取得するのに役立ちます。コンテキストに関するフィルタリングやランキングなどのスマートな技術を使用して、特定の質問やクエリに最も関連性の高いコードスニペットや情報を特定します。それが他と異なる点は、会話の履歴と質問の文脈を考慮していることです。つまり、質問の文脈を理解し、その文脈に基づいて最適な回答を提供できるスマートなアシスタントのような存在です。
では、LangChainのワークフローを見て、高レベルでどのように機能するか見てみましょう:
コードベースのインデックス作成
最初のステップは、分析したいターゲットリポジトリをクローンすることです。リポジトリ内のすべてのファイルを読み込み、それらをより小さなチャンクに分割し、インデックス作成のプロセスを開始します。すでにインデックス化されたデータセットを持っている場合は、このステップをスキップすることができます。
埋め込みとコードストア
コードスニペットをより理解しやすくするために、LangChainはコードに対応した埋め込みモデルを使用します。このモデルは、コードの本質を捉え、埋め込まれたスニペットをVectorStoreに保存し、将来のクエリで簡単にアクセスできるようにします。
簡単に言えば、LangChainはコードスニペットを理解しやすくするための特別な技術であるコードに対応した埋め込みを使用します。コードを分析し、重要な特徴を把握するモデルを持っています。そして、これらの分析済みのコードスニペットをVectorStoreに保存します。VectorStoreは、簡単にアクセスできる保存場所のようなものです。この方法で、コードスニペットは整理され、将来のクエリや質問がある場合に迅速に取得できるようになります。
クエリの理解
ここでLLMが活躍します。databricks/dolly-v2-12bのようなモデルを使用して、クエリを処理することができます。モデルはクエリを分析し、コンテキストを考慮し、重要な情報を抽出することで、クエリの意味を理解します。これにより、モデルはLangChainが正確にクエリを解釈し、正確で関連性の高い結果を提供するのを助けます。
リトリーバの構築
質問やクエリが明確になったら、Conversational RetrieverChainが登場します。コードスニペットが保存されているVectorStoreを通過し、クエリに最も関連性の高いコードスニペットを見つけ出します。この検索プロセスは非常に柔軟で、要件に合わせてカスタマイズすることができます。設定を調整し、特定のニーズに合わせたフィルタを適用することで、クエリに対して最も正確で有用な結果を得ることができます。
会話チェーンの構築
リトリーバを設定したら、会話チェーンの構築の時間です。このステップでは、リトリーバの設定をより適したものに調整し、必要な追加フィルタを適用します。これにより、検索範囲を絞り込み、クエリに最も正確で関連性の高い結果を受け取ることができます。基本的には、情報をより有用なものにするために、リトリーバルプロセスを微調整することができます。
質問をする:これからが最も面白いパートです!
ConversationalRetrievalChainを使用してコードベースに関する質問をすることができます。それは包括的で文脈に即した回答を生成します。Conversational Chainの一部であるLLMは、取得されたコードスニペットと会話履歴を考慮して、詳細で正確な回答を提供します。
このワークフローに従って、LangChainを効果的に使用することで、コードのより深い理解を得ることができます。質問に対して文脈に即した回答を得ることができ、GitHubリポジトリ内でコードスニペットを生成することさえできます。さあ、ステップバイステップで実際の動作を見てみましょう。
ステップバイステップガイド
実際の実装に進んでみましょう。
キーの取得
始めるには、各ウェブサイトで登録し、Activeloop、DeepInfra、およびOpenAIのAPIキーを取得する必要があります。
Indexer.pyファイルの設定
データをインデックスするためのPythonファイル(たとえばindexer.py)を作成します。必要なモジュールをインポートし、環境変数としてAPIキーを設定します:
プレーンな英語で言えば、埋め込みは異なるテキスト文字列の意味と関連性を捉えるテキストの表現です。それらは数値ベクトルまたは数字のリストであり、異なるテキスト入力間の類似性または距離を測定するために使用されます。
埋め込みは、検索、クラスタリング、レコメンデーション、異常検出、多様性の測定、および分類などのさまざまなタスクに一般的に使用されます。検索では、埋め込みは検索結果の関連性をクエリに対してランク付けするのに役立ちます。クラスタリングでは、埋め込みは類似したテキスト文字列をグループ化します。
レコメンデーションは、関連するテキスト文字列を持つアイテムを提案するために埋め込みを活用します。異常検出では、関連性が少ない外れ値を特定するために埋め込みを使用します。多様性の測定では、テキスト文字列間の類似性の分布を分析します。分類では、埋め込みを使用してテキスト文字列を最も類似したラベルに割り当てます。
埋め込みベクトル間の距離は、対応するテキスト文字列の関連性または類似性を示します。距離が小さいほど高い関連性を示し、距離が大きいほど低い関連性を示します。
ターゲットリポジトリのクローンとインデックス作成
次に、Twitterアルゴリズムリポジトリをクローンし、ドキュメントをロード、分割、およびインデックス作成します。アルゴリズムは、このリンクからクローンできます。
このコードはディレクトリとそのサブディレクトリ(os.walk(root_dir))をトラバースします。出会った各ファイル(filenames)に対して次の手順を実行しようとします:
- 現在処理しているファイルのパスを指定してTextLoaderオブジェクトを作成します(
(os.path.join(dirpath、file))
)およびエンコーディングをUTF-8に設定します。 - 次に、TextLoaderオブジェクトの
load_and_split()
メソッドを呼び出します。おそらくファイルの内容を読み取り、いくつかの処理または分割操作を実行し、結果のテキストデータを返します。 - 取得したテキストデータは、
extend()
メソッドを使用して既存のdocsリストに追加されます。 - このプロセス中に例外が発生した場合、try-exceptブロックによってキャッチされ、単に無視されます(`pass`)。
このコードスニペットは、ディレクトリを再帰的にトラバースし、ファイルからテキストデータを読み込み、分割し、結果のデータをdocsというリストに追加しています。
コードスニペットの埋め込み
次に、OpenAIの埋め込みを使用してコードスニペットを埋め込みます。これらの埋め込みは、効率的な類似性検索を実行するためにVectorStoreに保存されます:
このコードはCharacterTextSplitter
クラスをインポートし、1000文字のチャンクサイズとオーバーラップなしでインスタンスを初期化します。次に、提供されたdocsをsplit_documentsメソッドを使用してより小さいテキストチャンクに分割し、それらをtexts変数に格納します。
次に、ユーザー名を設定します(Activeloopにサインアップする際に使用したもの)。指定したユーザー名の下にある “app.activeloop.ai” で公開されているデータセットへのデータセットパスを持つDeepLakeインスタンスであるdbを作成します。埋め込みに必要なembedding_functionを処理します。
最後に、add_documentsメソッドを使用してテキストをdbに追加します。おそらくストレージまたはさらなる処理のためです。
ファイルを実行し、数分待ちます(少し待っているように見えるかもしれません…通常は5分以内)。それでは、次のステップに進みましょう。
ユーザーのクエリを処理して理解するためのdolly-v2-12bの利用
次に、dolly-v2-12bというDeepInfraプラットフォームで利用可能な言語モデルを使用して、ユーザーのクエリを処理し理解するためのPythonファイルquestion.pyを設定します。
リトリーバの構築
以前に作成したVectorStoreを使用して、リトリーバを構築します。
以下は、コードの処理内容の詳細です。
コードは、dbというDeepLakeオブジェクトを初期化します。データセットは、”hub://mikelabs/twitter-algorithm”と指定されたパスから読み込まれます。なお、”mikelabs”は自分自身のユーザー名に置き換える必要があることに注意してください。
次に、dbオブジェクトをas_retriever()メソッドを使用してリトリーバに変換します。このステップにより、VectorStoreに格納されたデータで検索操作を実行することができます。
retriever.search_kwargsというディクショナリを変更することで、いくつかの検索オプションをカスタマイズすることができます。
distance_metricは’cos’に設定されており、テキスト入力間の類似性を測定するためにコサイン類似度が使用されることを示しています。異なるテキストの断片(文やドキュメントなど)を表す2つのベクトルがあると想像してください。コサイン類似度は、これら2つのテキストの類似性や関連性を測定する方法です。
コサイン類似度を計算するために、2つのベクトル間の角度を見ます。ベクトルが同じ方向を指しているか、非常に近い場合、コサイン類似度は1に近くなります。これは、テキストの断片同士が非常に似ていることを意味します。
一方、ベクトルが逆方向を指しているか、遠く離れている場合、コサイン類似度は-1に近くなります。これは、テキストの断片同士が非常に異なるか似ていないことを示します。
コサイン類似度が0の場合、ベクトルは垂直または直角(90度)の角度をなしています。この場合、テキストの断片間に類似性はありません。
上記のコードでは、コサイン類似度はテキスト入力間の類似性を比較するための指標として使用されています。コサイン類似度を使用することで、コードは与えられたクエリに最も類似した上位のマッチをランク付けして取得することができます。
fetch_kパラメータは100に設定されており、リトリーバはコサイン類似度に基づいて上位100件の最も近いマッチを取得します。
maximal_marginal_relevanceはTrueに設定されており、リトリーバは高度に類似したマッチではなく、多様な結果を優先することを示しています。
kパラメータは10に設定されており、リトリーバは各クエリに対して10件の結果を返します。
会話チェーンの構築
ConversationalRetrievalChainを使用して、リトリーバと言語モデルを結び付けます。これにより、システムはユーザーのクエリを処理し、コンテキストに関する認識を持った応答を生成することができます。
ConversationalRetrievalChainは、リトリーバと言語モデルの間の接続役割を果たします。この接続により、システムはコンテキストを認識したユーザーのクエリを処理し、応答を生成することができます。
質問する
Twitterのアルゴリズムコードベースに関する質問をすることができます。ConversationalRetrievalChainが提供する回答は、コードベースに基づいてコンテキストを認識したものです。
以下は、LangChainのドキュメントから抜粋したいくつかの質問の例です:
そして、以下は私が受け取ったサンプルの回答です:
リソース
以下は、役立つ追加リソースです:
- Activeloopのドキュメント
- AIModels.fyi LangChainガイド
- OpenAIの埋め込みのドキュメント
結論
このガイドでは、LangChainを使用してTwitterの推薦アルゴリズムを逆解析しました。AIの機能を活用することで、手動のコード検査を自動化されたクエリの応答に置き換え、貴重な時間と労力を節約することができます。
LangChainは、コードの理解と生成を革新する強力なツールです。VectorStoreやConversationalRetrieverChainなどの高度なモデルを使用し、DeepInfraのようなサービスでホストされたLLMを活用することで、開発者は効率的にコードリポジトリを分析し、コンテキストに関する回答を提供し、新しいコードを生成することができます。
LangChainのワークフローには、コードベースのインデックス作成、コードスニペットの埋め込み、言語モデルを使用したユーザークエリの処理、ConversationalRetrieverChainを利用した関連するコードスニペットの取得などが含まれています。リトリーバのカスタマイズや会話チェーンの構築により、開発者は正確な結果を得るためにリトリーバルプロセスを微調整することができます。
ステップバイステップガイドに従うことで、LangChainを活用してコードの理解を向上させ、文脈に応じた回答を得ることができ、GitHubリポジトリ内でコードスニペットを生成することもできます。LangChainは生産性と理解に新たな可能性を開きます。あなたはそれを使って何を構築しますか?読んでいただきありがとうございます!
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles