Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Tips for LlamaIndex

Tips for LlamaIndex

LLMapp meetup vol.4のLTでお話した内容です。
https://llm-app.connpass.com/event/297732/

About https://twitter.com/imaliveai

Yuuki Kanada

October 12, 2023
Tweet

More Decks by Yuuki Kanada

Other Decks in Programming

Transcript

  1. CONFIDENTIAL INFORMATION Not For Public Distribution - Do Not Copy

    Intro - toC×エンタメ×Techの会社をやってます 株式会社Siremo 代表取締役CEO 金田 悠希 @kanadadada 経歴 ・Mobile Factory - 位置情報ゲーム「駅メモ!」の起ち上げ 👉 eureka - マッチングアプリ「Pairs」の執行役員 VP Product / 事業責任者 👉 Siremo - 2022年1月Siremoを創業 2023年4月からGenAIに関する事業開発 Skill ・Python, React, Unity, Live2D, Blender, PdM, Product Design etc…
  2. CONFIDENTIAL INFORMATION Not For Public Distribution - Do Not Copy

    人類をハッピーにして侵略を夢見る AIシンガー/VTuberグループの「いま」 @imaliveai Introduction - Product
  3. CONFIDENTIAL INFORMATION Not For Public Distribution - Do Not Copy

    現在の「いまちゃん」 できること ・1:nの対話 by GPT-4 ・短期記憶と長期記憶 ・文章ごとの感情生成と音声・表情の変更 ・音声認識 ・ツイート - @imaliveai ・歌を歌う ・マルチモーダル(Vision to Text)
  4. CONFIDENTIAL INFORMATION Not For Public Distribution - Do Not Copy

    Motivation - AI × Entertainment × Global • 人間らしいAITuberをもっと作りたい...... • 作詞作曲をしてライブできる存在にしたい...... • 紅白歌合戦にAI歌手を出したい......
  5. CONFIDENTIAL INFORMATION Not For Public Distribution - Do Not Copy

    VectorStore LlamaIndex “いまちゃん”の超ざっくり全体像(LLM関連のみ) Core Layer GPT-4 Language Model Prompt Base Chara cter Context Store NoSQL + + GPT-3.5 FT Retrieval-augmented Models 今日のテーマ
  6. CONFIDENTIAL INFORMATION Not For Public Distribution - Do Not Copy

    今日のテーマ LlamaIndexをより良く使うためのTips集
  7. CONFIDENTIAL INFORMATION Not For Public Distribution - Do Not Copy

    LlamaIndexとは 外部のデータから検索(Retrieval)し、テキスト生成する “RAG”を導入するためのオープンソースのフレームワーク
  8. CONFIDENTIAL INFORMATION Not For Public Distribution - Do Not Copy

    よくある事例 画像引用:Llamaindex を用いた社内文書の ChatGPT QA ツールをチューニングする GMO Tech blog(Link) LLMが回答できない最新の知識・学習できない社内情報 をインプットし回答可能にする
  9. CONFIDENTIAL INFORMATION Not For Public Distribution - Do Not Copy

    RAGに期待するものは”知識”の同定 コスト的概念 振る舞いを同定する 知識を同定する Prompt Tuning In Context Learning Fine Tuning RAG RLHF 事前学習 引用:最近のLLMの学習法のまとめ - SFT・RLHF・RAG by npakaさん(Link)を元にスライド作成者の解釈を加え編集 合わせて広義の Prompt Engineering
  10. CONFIDENTIAL INFORMATION Not For Public Distribution - Do Not Copy

    “いま”における事例 = AIタレントに求められる要件 ・・・プロフィールや生まれ持った人間関係 先天的知識 学習知識・経験 文脈 振る舞い ・・・SNSやGoogle検索で得た”知識”・”体験” ・・・会話・配信の中のやり取り履歴 ・・・口調、返し方、感情 etc
  11. CONFIDENTIAL INFORMATION Not For Public Distribution - Do Not Copy

    いまにおける事例 先天的知識 学習知識 文脈 振る舞い Prompt Fine Tuning RAG Prompt Engineering 先天的知識 学習知識・経験 文脈 振る舞い
  12. CONFIDENTIAL INFORMATION Not For Public Distribution - Do Not Copy

    今日紹介するTips 1. 対話ログを保持できるようにしたい 2. OpenAI GPT-3.5のFineTuningモデルと1を併用したい 3. ドキュメントが大型化・複雑化しても検索させたい ※LlamaIndex 0.8.12を前提にお話を進めます。  最新が0.8.43(23/10/12時点)ですが有用だと思われます。  逆に0.8.12未満だとGPT3.5のFineTuningに対応していないため今回のケースの2は利用できません。
  13. CONFIDENTIAL INFORMATION Not For Public Distribution - Do Not Copy

    今日紹介するTips 1. 対話ログを保持できるようにしたい 2. OpenAI GPT-3.5のFineTuningモデルと1を併用したい 3. ドキュメントが大型化・複雑化しても検索させたい
  14. CONFIDENTIAL INFORMATION Not For Public Distribution - Do Not Copy

    1-1. 対話ログ保持のモチベーション 学習知識と文脈の保持を両立させたい。 ・・・プロフィールや生まれ持った人間関係 先天的知識 学習知識 文脈 振る舞い ・・・SNSやGoogle検索で得た”知識” ・・・会話・配信の中のやり取り履歴 ・・・口調、返し方、感情 etc 先天的知識 学習知識・経験 文脈 振る舞い
  15. CONFIDENTIAL INFORMATION Not For Public Distribution - Do Not Copy

    ※ここからはある程度LlamaIndexの知識を必要とします
  16. CONFIDENTIAL INFORMATION Not For Public Distribution - Do Not Copy

    1-2. 具体的な手法(概要編) ChatMessageとChat Engine Context Modeの利用 Document読み込み Index作成 message履歴作成 Memoryインスタンス作成 ChatEngine Context Mode SimpleDirectoryReaderなどでドキュメントのLoad VectorStoreIndexなどでindex作成 1.対話履歴の辞書型データ用意(ChatAPIのリスト形式でok) 2.ChatMessageというクラスを用いてLlamaが理解できる対話履歴 の形に変換する ChatMemoryBufferクラスを用いて対話履歴をChatEngineに渡せ るようにする index.as_chat_engineの引数chat_modeに”context”、memory にMemoryインスタンスを渡す。 Service Context作成 Service Contextを作成。llmにはOpenAIのgptモデルを指定
  17. CONFIDENTIAL INFORMATION Not For Public Distribution - Do Not Copy

    1-2. 具体的な手法(詳細編) ポイント1:ChatMessageの利用 メッセージ履歴作成
  18. CONFIDENTIAL INFORMATION Not For Public Distribution - Do Not Copy

    1-2. 具体的な手法(詳細編) ポイント2:ContextモードでChatEngine利用 Memoryインスタンス作成 Context Modeで ChatEngineを利用する
  19. CONFIDENTIAL INFORMATION Not For Public Distribution - Do Not Copy

    1-3.失敗事例 chat_mode = CondenseQuestionModeを利用 対話履歴+Llamaという手法でCondenseQuestionModeを 利用することも可能だが、、 対話生成までの速度がかなり落ちます。 ※Contextを使うとLlamaを使わない場合と変わらない生成速度でした
  20. CONFIDENTIAL INFORMATION Not For Public Distribution - Do Not Copy

    今日紹介するTips 1. 対話ログを保持できるようにしたい 2. OpenAI GPT-3.5のFineTuningモデルと1を併用したい 3. ドキュメントが大型化・複雑化しても検索させたい
  21. CONFIDENTIAL INFORMATION Not For Public Distribution - Do Not Copy

    2-1. 対話ログ保持のモチベーション 学習知識と文脈と振る舞いの保持を両立させたい。 ・・・プロフィールや生まれ持った人間関係 先天的知識 学習知識 文脈 振る舞い ・・・SNSやGoogle検索で得た”知識” ・・・会話・配信の中のやり取り履歴 ・・・口調、返し方、感情 etc 先天的知識 学習知識・経験 文脈 振る舞い
  22. CONFIDENTIAL INFORMATION Not For Public Distribution - Do Not Copy

    さっきのコードを書いた8/12時点のわたし。
  23. CONFIDENTIAL INFORMATION Not For Public Distribution - Do Not Copy

    2-2. 具体的な手法(概要編) 1の手法からの変更点はService Context作成のみ Document読み込み Index作成 message履歴作成 Memoryインスタンス作成 ChatEngine Context Mode SimpleDirectoryReaderなどでドキュメントのLoad VectorStoreIndexなどでindex作成 1.対話履歴の辞書型データ用意(ChatAPIのリスト形式でok) 2.ChatMessageというクラスを用いてLlamaが理解できる対話履歴 の形に変換する(ポイント1) ChatMemoryBufferクラスを用いて対話履歴をChatEngineに渡せ るようにする index.as_chat_engineの引数chat_modeに”context”、memory にMemoryインスタンスを渡す。 Service Context作成 finetuneしたモデル専用のllmインスタンスでservice_context作成
  24. CONFIDENTIAL INFORMATION Not For Public Distribution - Do Not Copy

    2-2. 具体的な手法(詳細編) 地味に分からないチューニング済みのモデル利用法 LlamaIndex公式ドキュメントには既存モデルの利用方法の記載がなく、ソースコードを読みながらなんとか実 行したのが上記のコード。コツはstart_job_idにチューニング済みモデルのidを渡すこと。
  25. CONFIDENTIAL INFORMATION Not For Public Distribution - Do Not Copy

    今日紹介するTips 1. 対話ログを保持できるようにしたい 2. OpenAI GPT-3.5のFineTuningモデルと1を併用したい 3. ドキュメントが大型化・複雑化しても検索させたい
  26. CONFIDENTIAL INFORMATION Not For Public Distribution - Do Not Copy

    3-1.ドキュメント大型化・複雑化対応のモチベ ドキュメントのサイズや複雑性は、 RAGの検索性能と反比例の関係になりがち。
  27. CONFIDENTIAL INFORMATION Not For Public Distribution - Do Not Copy

    3-2. 具体的な手法(概要編) 多岐にわたり、全部話すと時間がないのでまたどこかで。 ・・・読み込むドキュメントの構造整理、Metadata付与 etc. Documentの最適化 Node・Index作成最適化 Queryの最適化 Embeddingの最適化 ・・・chunk size最適化、NodeParserの利用、Index作成方法の変更 etc. ・・・Recursive Retrieverの利用、Auto-Retrievalの利用 etc. ・・・Embedding modelのFineTuning 更新方法の最適化 ・・・Document更新に対して作成済みIndexを正しく更新できてない etc.
  28. CONFIDENTIAL INFORMATION Not For Public Distribution - Do Not Copy

    3-2. 取り組んだ結果の考え方 1. 読み込むドキュメントを減らせるなら減らす 2. 減らせないなら構造(見出し + 行 + Levelの平準化)を最適化する 3. ドキュメントが10ページ以内なら手動でMetaData付与、それを超えるなら Automatic Metadata Extractionを試してみるといいかも。 4. 検索精度と結果取得速度のトレードオフに陥る手法もあるので注意してください。
  29. CONFIDENTIAL INFORMATION Not For Public Distribution - Do Not Copy

    あとはLlama公式ドキュメントで扱っている手法をとにかく試して自分のProductに合う 手法を探すのが一番です......。愛を持って取り組みましょう......。
  30. CONFIDENTIAL INFORMATION Not For Public Distribution - Do Not Copy

    まとめ ・LlamaIndexは”知識”の拡張に有効 ・LlamaIndexはドキュメント + ソースコードも読む ・検索は愛と地道な改善
  31. CONFIDENTIAL INFORMATION Not For Public Distribution - Do Not Copy

    We are Hiring • 中が人なのかAIなのかどうでもいい時代を創りたい! • AIが紅白歌合戦に出る事態をつくってみたい! • 言語以外のメディアも扱う総合格闘技感楽しそう! 一緒にAIアイドルグループを創る仲間を募集してます〜! • エンジニア大募集中です!