見出し画像

【LangChain】英語解説を日本語で読む【2023年5月11日|@Sam Witteveen】

LangChainと一緒に使う4つの異なるモデル(FLAN-T5 XL、FastChat-T5、StableVicuna、WizardLM)の結果と利点、欠点について説明します。
公開日:2023年5月11日
※動画を再生してから、インタビューを読むのがオススメです。


Okay.

OK。

In the last video, we looked at adding instructor embeddings to our multi-doc retriever with ChromaDB.

前回のビデオでは、ChromaDBを使ったマルチドックレトリバーにインストラクターのエンベッディングを追加することを見ました。

This meant that we were now using a local model to do all the embeddings for this, but we were still using OpenAI.

これは、埋め込みをローカルモデルで行うことを意味しますが、OpenAIはまだ使っています。

In this video, we're going to look at getting rid of OpenAI totally.

このビデオでは、OpenAIを完全に削除することを検討します。

So, if you haven't been following along with the videos, here's the channel where I'm posting them.

というわけで、まだ動画を見ていない方は、私が投稿しているチャンネルをご紹介します。

Please subscribe if you want to see them regularly.

定期的に見たい方はぜひご登録ください。

We've been doing a lot of LangChain videos, a lot of large language model videos.

LangChainのビデオ、大規模言語モデルのビデオをたくさんやっています。

Okay.

なるほど。

So, the first thing we're going to do is go through four different models in this and show you the results of using these.

ではまず、この中で4種類のモデルを使って、これらを使った結果をお見せします。

We'll also talk a little bit about some of the advantages and disadvantages that you'll see when you're using these kinds of models with something like LangChain to do retrieval QA.

また、LangChainなどのリトリビューションQAでこれらのタイプのモデルを使用するときに、目にする利点と欠点についても少しお話します。

The first one that we chose, and I haven't done an exhaustive list.

最初に選んだのは、網羅的にリストアップしているわけではありません。

We may do another video where we benchmark some other ones.

他のモデルをベンチマークするビデオをまた作るかもしれません。

So, the first one up is the FLAN-T5 XL model.

最初に紹介するのはFLAN-T5 XLというモデルです。

This is a 3 billion parameter model.

これは30億のパラメータを持つモデルです。

It's a Seq2Seq model.

Seq2Seqモデルです。

So, it's one of the T5 models.

T5モデルの1つです。

It's got, basically, an encoder and a decoder in here.

基本的にはエンコーダーとデコーダーが搭載されています。

Therefore, when we bring this in, we need to make sure that we bring it in for Seq2Seq language modeling.

ですから、これを導入するときは、Seq2Seq言語モデリング用に導入する必要があります。

Another thing, when we set this down here, with the pipeline, we always need to do text to text generation with the Seq2Seq model.

もう1つ、パイプラインでこれをセットした場合、Seq2Seqモデルでテキストからテキストへの生成を必ず行う必要があります。

So, first off, I'm just bringing in this model.

そこで、まず、このモデルを持ってきます。

It's obvious that I'm bringing in the papers that we, the PDF files that we went through, but first up, just bringing in the model, setting up a pipeline for the model, and setting up the Hugging Face pipeline for LangChain to use that model.

論文やPDFファイルを持ち込むのは当然ですが、まずはモデルを持ち込んで、そのモデル用のパイプラインをセットアップし、LangChainのHugging Faceパイプラインをセットアップして、そのモデルを使用するようにします。

Then, just testing whether it worked right.

そして、それが正しく機能するかどうかをテストしています。

So this is just taking the local LLM that we've defined here, running a raw prompt through it, and seeing what we get out of that.

つまり、ここで定義したローカルLLMを使って、生のプロンプトを実行し、そこから何が得られるかを見るだけです。

The rest of this then becomes quite simple compared to what we did in the previous video.

あとは、前のビデオでやったことと比べると、非常にシンプルになります。

We basically just bring everything in, bring in the documents with the PDFs.

基本的には、すべてを取り込み、PDFを含むドキュメントを取り込むだけです。

So if you're watching this video for the first time, please go back and watch the other one.

このビデオを初めてご覧になる方は、他のビデオもご覧になってみてください。

You'll see me talk a lot about these parts of it.

こういう部分について、私がたくさん話しているのがわかると思います。

We do the various text splitting for this, and then we set up the instructor embeddings in here.

このために様々なテキスト分割を行い、そしてここにインストラクターのエンベッディングをセットアップしています。

We're now running actually two models on the GPU.

これで、GPU上で2つのモデルを実行することになりました。

This can raise some issues as well that you want to make sure that you've got enough GPU RAM to run both the embeddings model, which is not that big, and then your language model, which is going to be a lot bigger.

これらの問題が発生する可能性もあります。つまり、埋め込みモデル(それほど大きくはありません)と言語モデル(はるかに大きくなります)の両方を実行するのに十分なGPU RAMがあることを確認する必要があります。

We create the database here for these ones.

これらのデータベースは、ここで作成します。

I'm not bothering to delete the database and bring it back or anything.

データベースを削除して復活させるとか、そんな面倒なことはしません。

If you're interested in that, go and have a look at the previous videos.

興味がある方は、以前のビデオを見てください。

We send out the retriever.

レトリーバーを送り出す。

This is where you have to start thinking about how to deal with the local LLMs as opposed to something like OpenAI.

ここで、OpenAIのようなものとは異なり、ローカルのLLMとの付き合い方について考えなければなりません。

In an OpenAI, you've got 4,000 tokens.

OpenAIでは、4,000のトークンがあります。

For the basic FLAN model, we've just got 512 tokens.

FLANの基本モデルでは、512個のトークンがあるだけです。

You'll see that even if I was to try and set this to be longer, it's going to come back to me and tell me that, okay, you can only go to 512, which is what it's been trained on.

長く設定しようとしたとしても、512にしか設定できないことを教えてくれます。これは、トレーニングされたものです。

Okay.

なるほど。

So, once we've basically got the database set up, we need a retriever.

さて、基本的にデータベースをセットアップしたら、次はレトリーバーが必要です。

Then, this is where this part becomes important.

そして、ここが重要なポイントになります。

The number of tokens is how many context do you want to pass into it?

トークンの数とは、どれだけのコンテキストを渡すか、ということです。

In this case, I'm going for three.

今回は3つにしています。

However, there might be times, as you will see - hopefully I've got an example of this in here - where it's just not going to fit in.

しかし、おわかりのように、この中に例があればいいのですが、どうしてもうまくいかない場合があります。

It's going to be too many tokens for this.

この場合、トークンの数が多くなりすぎてしまうのです。

So, you would then want to think about, okay, do I just go for two or what's going to be my strategy with this?

そこで、2枚にするか、それともどういう戦略をとるか、考えたいところです。

This is something we didn't really need to think about with the OpenAI, because we had 4,000 tokens that we could play with.

OpenAIの場合は、4,000個のトークンで遊べたので、このようなことを考える必要はありませんでした。

We then make our chain.

次に、チェーンを作ります。

We set up the chain, and we've got our little wrapper functions.

鎖を作り、小さなラッパー関数を用意します。

We try this out, and you can see that when we ask it, What is flash attention?

フラッシュアテンションとは何ですか」と尋ねると、答えが返ってきます。

we're getting answers back, but we're not getting very verbose answers.

と尋ねると、答えが返ってきますが、あまり冗長な答えは返ってきません。

We're not getting very detailed answers.

しかし、あまり饒舌な答えは返ってきませんし、あまり詳細な答えは返ってきません。

We're not maybe getting the most useful answers back here.

最も有用な回答は得られていないかもしれません。

When we ask it, You know, what does I/O aware mean?

I/Oアウェアとはどういう意味か」と尋ねると、「そうですね。

it's getting to the point with some of these the answer is not that great for what it brings back.

と聞くと、返ってくる答えがあまり良くないものもあります。

Some of them will be okay.

でも、中には大丈夫なものもあります。

So here, What is to format a model trained to decide which API is to call, when to call them, what arguments to pass, and how to best incorporate the results in future token prediction?

では、どのAPIを呼び出すか、いつ呼び出すか、どんな引数を渡すか、そしてその結果を将来のトークン予測にどう反映させるかを決定するために学習したモデルをフォーマットすることとは?

So that's technically true.

ということで、技術的にはその通りです。

It doesn't give us a lot of information like you'll see with some of the other ones.

他のものに見られるような多くの情報を与えてくれるわけではありません。

What tools can be used here?

ここではどのようなツールを使うことができるのでしょうか?

Again, it goes for a very succinct answer and to the point.

ここでも、非常に簡潔な答えと要点が求められています。

Now, and extremely succinct answer that we've got there.

さて、非常に簡潔な答えが返ってきましたね。

You'll see with some of them that occasionally you will get an answer where it will say this is not a good answer at all.

このツールの中には、「これは全く良い答えではない」という答えが返ってくるものもあるようです。

Where if your context goes beyond the 512, it will just give you an error, right?

文脈が512の範囲を超えている場合、エラーになりますよね。

It will tell you that, Oh, okay, you've got too many tokens for passing into this.

この中に渡すには、トークンが多すぎるよ」と教えてくれるのです。

So, this is FLAN-T5, right?

これがFLAN-T5ですね。

That's the sort of basic one at 3 billion.

これは30億の基本的なものです。

Now, there's another model that's basically a fine-tuned version of this made by the same people who did the GPT-4-all.

GPT-4-allを作った人たちが作った、基本的にこれの微調整版と言えるモデルがもう一つあります。

This is the FastChat T5.

これが「FastChat T5」です。

So, we can basically use this in a similar way and bring this in.

ですから、基本的にはこれを同じような方法で使って、これを持ち込むことができます。

And you'll find that the code is basically the same for all of this.

そして、コードは基本的にすべて同じであることがわかると思います。

The answers here, in some ways, are a little bit better, but we've got this weird sort of padding token going on at the start here.

回答は、ある意味では少し良くなっていますが、冒頭で奇妙なパディングトークンが発生しています。

There are definitely some issues with spacing.

スペーシングに問題があるのは確かです。

It's got some really weird double spacing going on in here as well when we look through this.

ここでも奇妙なダブルスペースが発生しています。

Definitely, there's really weird sort of spacing and I'm not sure why that is.

確かに、奇妙な間隔があり、その理由はよくわかりません。

I can probably go through and work out what's causing it and change it.

なぜそうなっているのかはよくわかりません。

Just showing you that this model, because of its fine-tuning, is probably a little bit better at being able to extract the information from the retrieved context there.

このモデルは、微調整されているため、取得されたコンテキストから情報を抽出する点で、おそらく少し優れていることを示しています。

The next one I'll look at is if we go really big.

次に紹介するのは、もっと大きくした場合です。

So if we go up to something like a StableVicuña model, so this is a 13 billion model.

StableVicuñaモデルのようなもので、130億個のモデルです。

We bring this in.

これを持ち込むのです。

Here, we face a different issue with this.

ここで、これとは別の問題に直面します。

In that here, we can actually go to a much longer context.

というのも、ここではもっと長いコンテクストが可能なのです。

We can go right up to like 2048 context with this.

2048年までの文脈に対応することができるのです。

I think it could, we could even go to the 4,000, with this one.

4,000までいけるかもしれませんね。

However, you'll see that as soon as we just do our raw check, it's kind of built to handle the prompts in a certain way.

しかし、生のチェックをするとすぐに、プロンプトを特定の方法で処理するように作られていることがわかります。

That's going to mean it's going to cause us a little bit of grief when we do this.

つまり、これを実行すると、ちょっと困ったことになるのです。

So, you can see here, it wants to have this prompt be like, hash, hash, hash human that kind of thing as it goes through this.

つまり、このプロンプトは、ハッシュ、ハッシュ、ハッシュのような人間的なものを表示させたいと考えていることがわかります。

So, it's giving us the right information, but it's maybe not giving it to us in a good way.

つまり、正しい情報を与えてくれているのですが、良い方法で与えてくれていないのかもしれません。

If we go through and look at the outputs, for this one, you'll see that here we get a good output.

出力を見てみると、ここでは良い出力が得られていることがわかると思います。

Flash Attention, Flash Attention is a new attention algorithm that computes exact attention.

フラッシュ・アテンションは、正確な注意を計算する新しい注意アルゴリズムです。

We're getting decent outputs.

ちゃんとした出力が得られています。

I'm not sure exactly how great, but they're certainly, you know, it's certainly paying attention to the context that it's getting in here.

どの程度なのかは分かりませんが、確かに、ここで得た文脈に注意を払っていることは確かです。

Then, it goes on to ask itself questions like, how does Flash Attention work?

そして、「フラッシュ・アテンションはどのように機能するのか」と自問していきます。

And then it answers now these may be really useful to you in that it's questions that you were also thinking about, or that can be the case as well.

そして、それはあなたにとって本当に役立つかもしれません。なぜなら、それはあなたが考えていた質問であるか、またはその場合もあるからです。

Sometimes it will do it.

時には、それが実現することもあります。

Sometimes it won't do it.

そうでない場合もあります。

So you can see here we've got a really nice answer out.

このように、本当に素敵な答えが返ってきましたね。

Here, we've again, we've got a pretty good answer out, but then it goes into the, asking itself a question for this, again.

ここでも、かなり良い答えが出ましたが、その後、また、自分自身に質問するようになります。

ToolFormer: Again, we're getting good quality answers.

ToolFormerです: ここでも、質の高い回答が得られています。

I would say on the whole, out of this.

全体として、このような結果になったと思います。

The challenge that we have is, are we going to basically just write some regex to take this out?

私たちの課題は、基本的に正規表現を書いてこれを取り除くかどうかということです。

And then we can do that pre-processing and post-processing of the prompt.

そして、プロンプトの前処理と後処理を行うことができます。

One of the challenges then becomes, okay.

そうすると、課題の1つは、「なるほど」となります。

Can we just rewrite the prompt to do this?

プロンプトを書き換えるだけで、このようなことができるのでしょうか。

So you'll see here where I look at the prompt and I actually try it, rewriting it.

そこで、プロンプトを見ながら、実際に書き換えてみることにします。

And you can see here that, by trying to rewrite it into some format like this, we can then run it through and see, okay.

このように、プロンプトを何らかの形式に書き換えることで、実際に動かしてみて、「よし。

Does it work now?

これでうまくいくか?

Actually, a lot of the times, it won't.

実は、多くの場合、うまくいきません。

If you mess with it too much, you're just going to get, like, I do not have enough context to provide an informed answer.

あまりにいじりすぎると、「十分な情報を提供できるほどの文脈がありません」と言われるだけです。

Please provide more information.

もっと情報を提供してください。

Now in this case, it's interesting because we know that it's getting, you know, some context for these.

この場合、興味深いのは、この質問に対して、何らかのコンテキストが得られるということがわかるからです。

Probably for this particular question, this would have been the best paper for it to get from.

おそらく、この特定の質問に対しては、この論文から得るのがベストだったのでしょう。

So maybe it's not getting the best context, but it's, it's kind of interesting that these models seem to, you know, the other ones seem to be able to get something from this.

だから、最高の文脈を得ることはできないかもしれませんが、これらのモデルが、他のモデルも、ここから何かを得ることができるように見えるのは、ちょっと面白いことです。

So I don't think it's the retrieval part that we're having a problem with.

ですから、私たちが問題にしているのは、検索部分ではないと思います。

It's more like this part.

どちらかというと、この部分に問題があるような気がします。

So you would want to play around with rewriting this prompt until you get the right prompt for your particular model that you choose to go for.

ですから、このプロンプトを書き換えて、自分の選んだ特定のモデルに適したプロンプトができるまで、いろいろと遊んでみたいものです。

So I've looked at a few small ones.

というわけで、小さなものをいくつか見てきました。

I've looked at a big one.

大きなものも見てきました。

I saved the last one, which is kind of the sweet spot, I think.

最後に保存したのは、スイートスポットのようなものだと思います。

And this is the WizardLM.

これがWizardLMです。

So here you can see, we're just bringing this in like normal.

このように、普通に持ち込むだけなのですが、これがLLaMです。

So this is a LLaMa model.

これはLLaMaモデルです。

You can see we've got the LLaMa tokenize there.

LLaMaのトークン化をしているのがわかりますね。

We've got the Lama for causal language modeling going on there.

因果関係言語モデリング用のLamaもあります。

And we set this up, I've set this up to be 1024 tokens in this case.

そして、今回は1024トークンになるように設定しました。

Give it a raw test.

生テストをしてみてください。

Yes.

はい。

The output is actually quite good here.

出力は実に良好です。

So this is looking good.

これはいい感じです。

Set up everything else, just like normal.

その他の設定も、通常と同じように行います。

Go through it.

それを通過してください。

And then start asking questions.

そして質問を始めてください。

And you see that here we're getting kind of the best of both worlds.

両者のいいとこ取りをしているのがお分かりいただけると思います。

We're getting very thorough answers, but we're not getting any of the problems that we had with the StableLM prompt, getting in the way here.

非常に徹底的な回答を得ていますが、StableLMプロンプトの問題は発生していません。



この記事が気に入ったらサポートをしてみませんか?