1 ポイント 投稿者 GN⁺ 2023-07-10 | 1件のコメント | WhatsAppで共有
  • PDF文書をインデックス化して質問応答するためのツールで、OpenAI embeddingsとFAISSを使い、PDF文書と対話できるRAGシステムを実装
  • PDFフォルダからテキストを抽出し、1000文字のチャンクと200文字のオーバーラップに分割したうえで、OpenAIのtext-embedding-ada-002モデルで埋め込みを生成し、ローカルのFAISS indexに保存
  • 質問段階では、保存済みのFAISSベクトルインデックスを読み込み、質問を埋め込みに変換して最も類似する上位3件の文書チャンクを探し、類似度スコアとテキストスニペットを表示
  • 回答生成は、検索された文脈をもとにGPT-4が一貫した回答を合成する方式
  • 埋め込みをローカルに保存するため、質問のたびに埋め込みを再生成する必要がなく、初期生成後はOpenAIへのインターネット接続なしでデータへの質問が可能で、回答生成にのみAPI呼び出しが必要
  • 基本的な実行フローは、python indexer.pyでPDFを処理してベクトルデータベースを作成し、python chatbot.pyで対話型の質問インターフェースを開始する方式
    • PDFフォルダとインデックス保存先はコマンド引数で指定可能
    • 新しいPDFをコレクションに追加するときだけインデクサーを再実行すればよい
  • 実行要件はPython 3.8以上とOpenAI API keyで、.envファイルのOPENAI_API_KEY値として設定する

1件のコメント

 
GN⁺ 2023-07-10
Hacker Newsのコメント
  • この手のアイデアを真似したアプリのほとんど全部が OpenAI必須 なのが一番もどかしい
    もういい加減やめてほしい
    OpenAIやクラウドが必要なオプションは「技術的には可能だがかなり面倒な上級設定」くらいにして、デフォルトは逆にしたほうが、ユーザーはずっと増えるはず
    こういうアプリは 完全ローカル実行 をデフォルトにして、.toml ファイルの文字列を1つ変えるだけで好きなHugging Faceモデルに差し替えられるようにするほうがよいと思う
    本当にOpenAIが必要なら、Docker secretや pass チェーンのような鍵管理方式と設定変更で対応できるようにすればよい
    デフォルトはローカル優先であるべきで、できる限りローカルで処理したうえで、ユーザーが本当に望むときだけ、集約されたプロンプトのごく少量のトークンをOpenAIに送るべきだ

    • 競争するのは難しい。小規模事業者がチャットボットのリクエスト 1万件 を処理するとしたら、選択肢は月50ドル未満をOpenAIに払うか、クラウドGPUを管理して機械学習エンジニアを雇い、月1000ドル以上を使うか、ローカルの4090を誰かの机の下に置いて、信頼性なしに固定費1500ドルを払うかになる
      より大きな企業はスケーラビリティが必要で、それでもOpenAIの価格と競争するのは難しい
      起業志向の人なら、リクエスト単位課金、微調整、ベクターストアを提供するOpenLLaMAスタートアップを作ることもできるかもしれない
    • 他のLLMで、単なる実験ではなく実際に使い物になる作業をしている人が何をしているのか気になる
      もう目新しさの段階は過ぎていて、今は効率よく仕事を終わらせたい
      これまで試した限りでは、ある程度安定して仕事を処理してくれるモデルは GPT-4 だけだった
      自分が未熟なのか、それとも実務で必要な品質・一貫性・信頼性の面で他のLLMがずっと優れているかのようにHN的な希望的観測をしているだけなのか、よく分からない
    • 実際の製品を出すために作ったのではなく、履歴書に OpenAI経験 を証明する一行を入れたいだけのように見える
      OpenAIに独自の認定プログラムがないことの結果だと推測している
    • https://mudler.pm/posts/smart-slackbot-for-teams/ にLocalAIをつなげればいいのでは?
    • ここで使われているOpenAIの「がらくた」は 埋め込み生成 だけだ
      今のところOpenAIは、個人プロジェクト基準では最良かつ最安クラスの埋め込みの1つを提供している
      ベクターが作られた後は、望むならクラウドから完全に離れられる
      LangChainがその不満点を抽象化しているので、埋め込み生成器もいつでも差し替えられる
      それ以外はすでにHugging Faceを使っており、プロンプトをサポートするGPT-2以外のモデルにも置き換え可能だ
  • データは非公開のまま維持し、第三者に流してはならない。privateGPTのようなものを使えばよい。GitHubスターは3.2万ある
    キーが自分のものでないなら、データも自分のものではない
    「GPTの力で文書と非公開のまま対話、100%非公開、データ漏えいなし」[0]
    [0] https://github.com/imartinez/privateGPT

    • OpenAI製品よりかなり劣るし、こうしたモデルがすでに完全に相互代替可能であるかのように語られるのにはうんざりしている
      まだそんな段階ではない
    • これが、すべてのメールやチャットログを入れて対話できるほど 堅牢 なのか気になる
      最近のログに関する質問を理解するために、文脈を抽出できるのだろうか?
    • Intel Macでどう動くのか気になる。6コアi9を使っている
      まだMシリーズを入手できていないので、GPU付きのクラウドコンピューティング環境で動かすほうがよいのか迷っている
    • Confluenceと一緒に使えたら本当に良さそう
      文書を書いておいて、その内容について質問するだけで済むような形だ
    • 100%非公開という言い方は少し疑わしい
      権力側がローカルLLMに対して見せる偏執的な態度を見ると、Windowsのテレメトリが人々のローカルLLMでの行動を報告しているとしても、まったく驚かないと思う
      そうではないと考える人は、あまりに無邪気すぎる
  • 自分の個人データをOpenAIに送るのか? それは深刻な問題ではないのか?
    データから機密性の高い個人情報をすべて取り除かない限り、賢明には思えない。何か見落としているのだろうか?

  • READMEがかなり分かりにくい
    GPT-2トークナイザーを使い、GPT-2を埋め込みモデルとして使うと書かれているのに、コードを見るとデフォルトのLangChain OpenAIEmbeddings とOpenAI LLMを使っているように見える
    それぞれ text-embedding-ada-002text-davinci-003 ではないのか?
    GPT-2がここでどう関わるのかまったく分からない

    • 使用されている埋め込みモデルは、デフォルトのOpenAI API埋め込みである text-embedding-ada-002
      GPT-2は、トークン化の過程でトークン長を効率的に計算するためにだけ使われている
  • こういうものをホスティング版として提供している会社はあるのかな?
    自分のデータを全部食わせて質問できる小さなAIはかなり欲しい

  • よく分からない。GPT-2はOpenAIの数少ない公開モデルの1つなのでローカルですぐ実行できるのに、なぜこの用途でAPIを使うんだろう?
    https://github.com/openai/gpt-2

    • GPT-2を使っているわけではない。READMEが間違っている
      from langchain.embeddings import OpenAIEmbeddingsを使っていて、これはOpenAIの埋め込みAPIであるtext-embedding-ada-002のこと
      GPT-2が使われている箇所はGPT2TokenizerFast.from_pretrained("gpt2")だけで、LangChainのRecursiveCharacterTextSplitter()ユーティリティでトークン数を数える長さ関数として使っている
      これもあまり筋が通っていない。なぜここでGPT-2トークナイザーを使うのか分からない
      単に文字数を数えるか、.split()ベースで単語数を数えるだけでも十分。ここでは数え方はそれほど重要ではない
    • 使われている埋め込みモデルはデフォルトのOpenAI API埋め込みであるtext-embedding-ada-002
      GPT-2はトークン化の過程でトークン長を効率よく計算するために使われているだけ
      この情報を正確に反映するようREADMEを更新した
    • GPT-4のほうがGPT-2より質問にうまく答えられるだろうと想定している
  • データ全体を検索する必要がない人って自分だけ? ここでのユースケースって何?

    • ユースケースの例はこんな感じ
      職場で複数の投資テーマを議論する集まりがあり、主催者は顔が広くて毎週外部の登壇者を呼ぼうとしている。かなり勉強になる
      各発表の生のノートを持っていて、目標はそのノートを見直して知識をきちんと整理し、Wikiのような形にすることだった
      始めてから3年たつが、まだ時間を取れておらず、現実的には今後もできない可能性が高い
      そのノートから情報を探すにはテキスト検索を使えるが、検索文字列に敏感すぎて欲しいものをよく見つけられない
      情報が複数のファイルに散らばっていると、検索結果を全部開いて見て回る必要がある
      こうした技術を使えば、すべてのノートをベクトルDBに入れ、必要な内容を自然言語で尋ねられる
      ローカルシステムが質問を解釈してDBから最も関連性の高い文書を探し、質問と検索結果をOpenAIに送って質問を解釈し、ノートの中から答えを見つけさせる
      以前LangChainで概念実証を作ってみたところ、実際に動いた。あるとき別々の2つの発表に散らばっていた情報をまとめて答えを返してくれて、「なるほど」と思った瞬間があった
      悩みは、調整できるパラメータが多すぎることと、システム性能を評価する方法や指標をまだ思いつけていないこと。何か助言があればうれしい
      このノートには個人情報がないので、プライバシー上の問題はない
      20年以上分のメールにも似たものを設定したいと思ったが、個人情報のためにやっていない。しかもnotmuchというメールインデクサを使っているので、AIの必要性もそこまで大きくはない
      ただ、個人的でない他のノートなら、このシステムをかなりうまく動くようにできれば本当に救世主になり得る
      何年にもわたってさまざまなテーマのノートを大量に作ってきたし、きちんと整理しなくてよくなることには実際にお金に換算できる価値がある
      ただノートを書いておいて、必要なものはAIに探してきてもらえばいい
    • ときどき、データはあるのにどこにあるのか分からないことがある
      ときどき、データの場所は分かっていても量が多くて、必要なのは特定の何かについての手早い説明だけということもある
      ときどき、複数のソースに大量のデータがあり、最終的に欲しいのは大半または全部が一致している内容の要約や、互いにどう違うのかの要約だったりする
      ユースケースはたくさんあり、私たちはこうした作業を処理する従来のやり方に慣れているので、自分で深く触って可能性を実感するまでは、有用性が「電球が点く」ような瞬間としてやって来ないことが多いと思う
      範囲はかなり広い。個人的に進めているプロジェクトもこのバリエーションで、何年分もの個人ノートや日記を入れて、自己内省と個人の成長のために質問するというもの
      この領域全体には大きな可能性があると思う
  • Milvus、Quickwit、Pinecone がどう比較されるのか知っている人はいますか?
    地域の事業者を対象に、LLM、ファインチューニング/ベクトル検索、チャットボット関連のコンサルティング機会があるか考えています
    ファイルをドラッグ&ドロップするだけで、パーソナライズされた推論を簡単に得られるツールも作りたいです
    最近 LinkedIn のフィードで https://gpt-trainer.com/ を見かけ、文書向けには他にもいくつか見ました
    https://www.explainpaper.com/
    https://www.konjer.xyz/
    価格競争はしたくありません
    3090 でローカルのオープンソース LLM を提供するのも面白そうですが、スケーラビリティはないでしょう
    他の ファインチューニングベクトル検索コンテキスト のスタートアップを見たことはありますか?

    • Pinecone と Milvus は、ベクトル保存と検索コンポーネントで FAISS を使うことの代替になり得ます
      埋め込みの違いは、保存/検索の代替よりも、埋め込み生成に何を使うかのほうで大きく感じられると思います
      たとえば、ここのもの https://news.ycombinator.com/item?id=36649579 を OpenAI Embeddings API の代わりに使うような形です
      埋め込みの保存/検索の代替同士の違いとしては、大規模での性能、コスト、個人の好みや開発者体験以外には特に思い浮かびません
      Quickwit は初めて聞きましたが、サイトをざっと見た感じではベクトルストアには見えず、おそらく関連は薄そうです
      カスタム ChatGPT を作るツールについては、私のリストを見てください: https://llm-utils.org/List+of+tools+for+making+a+%22ChatGPT+...
      ファインチューニングのサービスとしては、企業向けの Lamini AI があります
      他の埋め込み系スタートアップとしては Weaviate があります
    • numpy だけでシンプルなベクトル DB を作っています: https://github.com/sdan/vlite
      Milvus、Quickwit、Pinecone は企業向けに寄りすぎていて、使いにくいと思います
    • 私は qdrant のほうが良いと思います
  • より高速で、より正確なローカル埋め込みモデルがあるのに、なぜ OpenAI 依存 にするのか分かりません

    • どんなモデルですか?
  • 機密性の高い企業データと LLM の間で セキュリティレイヤー の役割を果たす会社で働いています
    モデルが HF、ChatGPT、Bard のどれであっても、媒体が会話データ、PDF、Notion のようなナレッジベースであっても関係ありません
    機密データを隠して危険な利用を防ぎつつ、同時にファクトチェックも行います
    探しているのがこういう方向なら、紹介できます。 tothepoint.tech