generated at
TextSplitter
LangChainの要素の一つ
大きすぎると言語モデルに食わせられない
例えば、GPT-3だと4000tokenが限界
ので、でかい文章を小さいchunkに分ける


Scrapboxのインデント形式に対応したTextSplitterを作ると役に立ちそうblu3mo
例えばすごい長いページがあったとする
既存のTextSplitterは、単純に分割しようとする
単純に文字数で分割したり、意味のまとまりで分割したり、色々ある
けど、どれも文の順番は保ったまま一部を切り出してチャンクを生成している
箇条書きであれば、「長い文章のうちの3段目のインデントまでの内容を切り出す」みたいな感じで小さいチャンクを取り出すことが可能blu3mo
インデントの深さで意味を表しているからこそ、簡単な文字処理で、異なる粒度のチャンク抽出ができるblu3mo
これ、ScrapboxのChat Botが他のもの(Bing AI, Mem, etc)と比べてめっちゃ良いものになるポテンシャルがあるのではblu3moblu3moblu3mo
文章の構造が、インデント箇条書き = 木構造で表現されていると言えるblu3moblu3mo
例えば長いページがあったとして、
従来の手法(上)だと、切り刻んでチャンクを作るしかない
チャンク1: 上半分
チャンク2: 下半分
Scrapboxのような箇条書き前提の手法(下)なら、箇条書きの意味を元に色々な解像度のチャンクが作れる
チャンク1: インデント浅い文だけ持ってきた、全体像がわかるチャンク
チャンク2, 3: インデント深い文も持ってきた、一部についてより深くわかるチャンク
なので、全体を要約するようなタスクにも、一部について深く聞くタスクにも、少ないチャンク数で対応できるようになるはず
LLMが「流し読み」をできるようになった、みたいな表現が合っていそう
その結果、MemとかNotionを読むLLMより、Scrapboxを読むLLMの方が理解力(?)が強くなりうる気がしているblu3mo

Cluster Of Lineの単位で切る、とかも使えるかもしれないstaいや気のせいsta
既に取り上げられてるとおり、空行区切りよりもインデントの深さで識別しないとダメそう

実はこういう分割が正しいかもしれないnishio


「こうすると良い」は2023/2/21 Scrapboxの内容を元にしたチャットbotを実装するで実装された後にためしてわかる?基素