TextSplitter
大きすぎると言語モデルに食わせられない
例えば、GPT-3だと4000tokenが限界
ので、でかい文章を小さいchunkに分ける
Scrapboxのインデント形式に対応したTextSplitterを作ると役に立ちそうblu3mo.icon
例えばすごい長いページがあったとする
既存のTextSplitterは、単純に分割しようとする
単純に文字数で分割したり、意味のまとまりで分割したり、色々ある
けど、どれも文の順番は保ったまま一部を切り出してチャンクを生成している
箇条書きであれば、「長い文章のうちの3段目のインデントまでの内容を切り出す」みたいな感じで小さいチャンクを取り出すことが可能blu3mo.icon
インデントの深さで意味を表しているからこそ、簡単な文字処理で、異なる粒度のチャンク抽出ができるblu3mo.icon
これ、ScrapboxのChat Botが他のもの(Bing AI, Mem, etc)と比べてめっちゃ良いものになるポテンシャルがあるのではblu3mo.icon*3 文章の構造が、インデント箇条書き = 木構造で表現されていると言えるblu3mo.icon*2
例えば長いページがあったとして、
https://kakeru.app/82bea3221deb085819feea6026df93fe https://i.kakeru.app/82bea3221deb085819feea6026df93fe.svg
従来の手法(上)だと、切り刻んでチャンクを作るしかない
チャンク1: 上半分
チャンク2: 下半分
Scrapboxのような箇条書き前提の手法(下)なら、箇条書きの意味を元に色々な解像度のチャンクが作れる
チャンク1: インデント浅い文だけ持ってきた、全体像がわかるチャンク
チャンク2, 3: インデント深い文も持ってきた、一部についてより深くわかるチャンク
なので、全体を要約するようなタスクにも、一部について深く聞くタスクにも、少ないチャンク数で対応できるようになるはず
LLMが「流し読み」をできるようになった、みたいな表現が合っていそう
既に取り上げられてるとおり、空行区切りよりもインデントの深さで識別しないとダメそう
実はこういう分割が正しいかもしれないnishio.icon
https://gyazo.com/7959f1b16296f2a9a6cd9b4e51c952d5