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. View Slide

  2. 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…

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  6. 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
    今日のテーマ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  10. 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

    View Slide

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

    View Slide

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

    View Slide

  13. 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は利用できません。

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  17. 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モデルを指定

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  24. 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作成

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  28. 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.

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide