PdfGptIndexer - OpenAI embeddingsとFAISSでPDF文書をインデックス化・質問応答
(github.com/raghavan)- 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件のコメント
Hacker Newsのコメント
この手のアイデアを真似したアプリのほとんど全部が OpenAI必須 なのが一番もどかしい
もういい加減やめてほしい
OpenAIやクラウドが必要なオプションは「技術的には可能だがかなり面倒な上級設定」くらいにして、デフォルトは逆にしたほうが、ユーザーはずっと増えるはず
こういうアプリは 完全ローカル実行 をデフォルトにして、
.tomlファイルの文字列を1つ変えるだけで好きなHugging Faceモデルに差し替えられるようにするほうがよいと思う本当にOpenAIが必要なら、Docker secretや
passチェーンのような鍵管理方式と設定変更で対応できるようにすればよいデフォルトはローカル優先であるべきで、できる限りローカルで処理したうえで、ユーザーが本当に望むときだけ、集約されたプロンプトのごく少量のトークンをOpenAIに送るべきだ
より大きな企業はスケーラビリティが必要で、それでもOpenAIの価格と競争するのは難しい
起業志向の人なら、リクエスト単位課金、微調整、ベクターストアを提供するOpenLLaMAスタートアップを作ることもできるかもしれない
もう目新しさの段階は過ぎていて、今は効率よく仕事を終わらせたい
これまで試した限りでは、ある程度安定して仕事を処理してくれるモデルは GPT-4 だけだった
自分が未熟なのか、それとも実務で必要な品質・一貫性・信頼性の面で他のLLMがずっと優れているかのようにHN的な希望的観測をしているだけなのか、よく分からない
OpenAIに独自の認定プログラムがないことの結果だと推測している
今のところOpenAIは、個人プロジェクト基準では最良かつ最安クラスの埋め込みの1つを提供している
ベクターが作られた後は、望むならクラウドから完全に離れられる
LangChainがその不満点を抽象化しているので、埋め込み生成器もいつでも差し替えられる
それ以外はすでにHugging Faceを使っており、プロンプトをサポートするGPT-2以外のモデルにも置き換え可能だ
データは非公開のまま維持し、第三者に流してはならない。privateGPTのようなものを使えばよい。GitHubスターは3.2万ある
キーが自分のものでないなら、データも自分のものではない
「GPTの力で文書と非公開のまま対話、100%非公開、データ漏えいなし」[0]
[0] https://github.com/imartinez/privateGPT
まだそんな段階ではない
最近のログに関する質問を理解するために、文脈を抽出できるのだろうか?
まだMシリーズを入手できていないので、GPU付きのクラウドコンピューティング環境で動かすほうがよいのか迷っている
文書を書いておいて、その内容について質問するだけで済むような形だ
権力側がローカルLLMに対して見せる偏執的な態度を見ると、Windowsのテレメトリが人々のローカルLLMでの行動を報告しているとしても、まったく驚かないと思う
そうではないと考える人は、あまりに無邪気すぎる
自分の個人データをOpenAIに送るのか? それは深刻な問題ではないのか?
データから機密性の高い個人情報をすべて取り除かない限り、賢明には思えない。何か見落としているのだろうか?
データ利用ポリシー: https://openai.com/policies/api-data-usage-policies
モデル別データ利用ポリシー: https://platform.openai.com/docs/models/how-we-use-your-data
OpenAIキーが必要かどうかを確認する以上に、個人データがどう使われるのかをもっと細かく知る方法はあるのだろうか?
READMEがかなり分かりにくい
GPT-2トークナイザーを使い、GPT-2を埋め込みモデルとして使うと書かれているのに、コードを見るとデフォルトのLangChain
OpenAIEmbeddingsとOpenAI LLMを使っているように見えるそれぞれ text-embedding-ada-002 と text-davinci-003 ではないのか?
GPT-2がここでどう関わるのかまったく分からない
GPT-2は、トークン化の過程でトークン長を効率的に計算するためにだけ使われている
こういうものをホスティング版として提供している会社はあるのかな?
自分のデータを全部食わせて質問できる小さなAIはかなり欲しい
Google DriveやYouTube動画などとの統合といった便利な機能もある
1日のアクティブユーザーは5万人以上
よく分からない。GPT-2はOpenAIの数少ない公開モデルの1つなのでローカルですぐ実行できるのに、なぜこの用途でAPIを使うんだろう?
https://github.com/openai/gpt-2
from langchain.embeddings import OpenAIEmbeddingsを使っていて、これはOpenAIの埋め込みAPIであるtext-embedding-ada-002のことGPT-2が使われている箇所は
GPT2TokenizerFast.from_pretrained("gpt2")だけで、LangChainのRecursiveCharacterTextSplitter()ユーティリティでトークン数を数える長さ関数として使っているこれもあまり筋が通っていない。なぜここでGPT-2トークナイザーを使うのか分からない
単に文字数を数えるか、
.split()ベースで単語数を数えるだけでも十分。ここでは数え方はそれほど重要ではないGPT-2はトークン化の過程でトークン長を効率よく計算するために使われているだけ
この情報を正確に反映するようREADMEを更新した
データ全体を検索する必要がない人って自分だけ? ここでのユースケースって何?
職場で複数の投資テーマを議論する集まりがあり、主催者は顔が広くて毎週外部の登壇者を呼ぼうとしている。かなり勉強になる
各発表の生のノートを持っていて、目標はそのノートを見直して知識をきちんと整理し、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 を提供するのも面白そうですが、スケーラビリティはないでしょう
他の ファインチューニング や ベクトル検索コンテキスト のスタートアップを見たことはありますか?
埋め込みの違いは、保存/検索の代替よりも、埋め込み生成に何を使うかのほうで大きく感じられると思います
たとえば、ここのもの 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 があります
Milvus、Quickwit、Pinecone は企業向けに寄りすぎていて、使いにくいと思います
より高速で、より正確なローカル埋め込みモデルがあるのに、なぜ OpenAI 依存 にするのか分かりません
機密性の高い企業データと LLM の間で セキュリティレイヤー の役割を果たす会社で働いています
モデルが HF、ChatGPT、Bard のどれであっても、媒体が会話データ、PDF、Notion のようなナレッジベースであっても関係ありません
機密データを隠して危険な利用を防ぎつつ、同時にファクトチェックも行います
探しているのがこういう方向なら、紹介できます。 tothepoint.tech