Slide 1

Slide 1 text

LangChainのDocument機能を使って 文書処理を柔軟にする 2023/10/28 第28回勉強会

Slide 2

Slide 2 text

自己紹介 ● 名前: 西岡 賢一郎 ○ Twitter: @ken_nishi ○ note: 西岡賢一郎@研究者から経営者へ (https://note.com/kenichiro) ○ YouTube: 【経営xデータサイエンスx開発】西岡 賢一郎のチャンネル (https://www.youtube.com/channel/UCpiskjqLv1AJg64jFCQIyBg) ● 経歴 ○ 東京大学で位置予測アルゴリズムを研究し博士 (学術) を取得 ○ 東京大学の博士課程在学中にデータサイエンスをもとにしたサービスを提供する株式会社ト ライディアを設立 ○ トライディアを別のIT会社に売却し、CTOとして3年半務め、2021年10月末にCTOを退職 ○ CDPのスタートアップ (Sr. PdM)・株式会社データインフォームド (CEO)・株式会社ディース タッツ (CTO) ○ 自社および他社のプロダクト開発チーム・データサイエンスチームの立ち上げ経験

Slide 3

Slide 3 text

本日のお話 ● LangChainを使った分散処理 ● LangChainのDocument Loader ● デモ

Slide 4

Slide 4 text

LangChainを使った分散処理

Slide 5

Slide 5 text

ChatGPTのToken制限 ● GPT-3.5 Turboでは4Kまたは16Kのtoken、GPT-4 では8Kまたは32Kのtokenを渡すことが可能 ● 英語であれば1単語1tokenだが、日本語のtokenは文 字によるので、token数の推定が困難 ● token数を確認するしたい場合はこちら → https://platform.openai.com/tokenizer ● ticktokenというライブラリを使うことでtoken数を 調べることもできる ○ ChatGPTでは「cl100k_base」という tokenizerを使用 ○ 日本語のtoken数は英語に比べて多くなる傾 向にある ● 長文を処理したい場合、Token数の制限にひっか かってしまう

Slide 6

Slide 6 text

長文の分散処理 ● ChatGPTのtoken数制限を超える文書を処理したい場合、長文を分割して短い文章 単位で分散処理することが有効 ● LangChainでは長文の分散処理方法として、Map Reduce, Refine, Map Rerankなど が用意されている。 ● 分散処理を利用することで、長文の要約や長文のQAができるようになる。

Slide 7

Slide 7 text

Map Reduce ● 分割された文章をそれぞれ処理し (Map)、それぞれの結果をまとめて (Reduce)、まとめられた結果から最終的な回答を出す。 ● Mapフェーズは独立した処理となるため、並列処理をすることが可能。 ● 分散された分、ChatGPTの呼び出し回数が増える (コストがかかる)。

Slide 8

Slide 8 text

Refine ● 分割された文書を順番にChatGPTに処理させる。 ● 直前の結果を入力に含めるのが特徴。 ● 処理が独立していないため、Map Reduceより文脈の把握が得意。 ● 逐次処理のため並列化はできない。また、文書の順番に影響を受ける。

Slide 9

Slide 9 text

Map Rerank ● 分割された文書から、回答と回答に対する自信をスコアで出し、最高スコア となったものを回答として出す。 ● 独立した処理となるため、並列処理が可能。Map ReduceよりもAPI呼び出し が少なくなる。 ● 文書間の情報を組み合わせることができない。

Slide 10

Slide 10 text

LangChainのDocument Loader

Slide 11

Slide 11 text

Document Loader ● そもそもChatGPTに処理させる文書が、ウェブペー ジやPDFなど単純なテキスト形式ではない場合は、 LangChainのDocument Loader (https://python.langchain.com/docs/integration s/document_loaders) を利用する。 ● 100種以上のDocument Loaderが用意されている。 ○ ArxivLoader: arXivから論文を取得する。 ○ ConfluenceLoader: Conflunceのページを取 得する。 ○ GitHubIssuesLoader: GitHubのIssueやPull Requestを取得する。 ○ WikipediaLoader: Wikipediaの検索結果を取 得する。 ○ YoutubeLoader: YouTubeの文字起こしを取 得する。

Slide 12

Slide 12 text

デモ ● デモの内容 ○ Token数をカウントする方法 ○ Document Loader ○ 長文の要約 ○ 長文のQA ● ソースコード https://github.com/knishioka/machine-learning-workshop/blob/main/l angchain/question_and_summarize.ipynb