3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【オープンなモデルでChatGPT】Google Colab 上で GPT-NEOX-20B + LangChainを用いたChatGPT clone を作成

Posted at

ChatGPTをオープンなモデルで作成したい

どうも、ChatGPT面白いですよね。私もよく遊んでいます。

今回はオープンなモデルであるGPT-NEOX-20Bを用いてChatGPTのクローンを作成していきたいと思います。

簡単に言うとLangChainのCostomLLMでGPT-NEOX-20Bを使えるようにしてやりました。

あと、結構コピペで作成しているので詳しく理解したい方は参考URLを読んでください。非常に参考にしています。

特にColabでのGPT-NEOX-20Bの使い方の部分は一人では難しかったです。ありがとうございました。

colabのリンクだけならこちら
https://colab.research.google.com/drive/1y3Dfv12mmr5O8nwzn4MrvDVKsMQQKwt6?usp=sharing

肝となる部分

class CustomLLM(LLM):
    
    n: int

    @property
    def _llm_type(self) -> str:
        return "custom"
    
    def _call(self, prompt: str, stop: Optional[List[str]] = None) -> str:
        if stop is not None:
            raise ValueError("stop kwargs are not permitted.")
        else:
            # 推論
            input_ids = tokenizer(prompt, return_tensors="pt").input_ids
            input_ids = input_ids.to('cuda')
            output_tokens = model.generate(
                input_ids,
                do_sample=True,
                max_length=500, # 最長の文章長
                min_length=100, # 最短の文章長
                temperature=0.9, # 温度   
                num_return_sequences=1, # 生成する文章の数
            )
            output = tokenizer.batch_decode(output_tokens)[0]
            return output

LangChainのCustomLLMはCall関数があればいいらしいので、そこにGPT-NEOX-20Bの出力できるようにしています。

あと、意味のないnとかも残ってしまってるんでいい感じに直してください。とりあえず動くものを作りました。

注意事項

参考記事にもありますが、GoogleColab pro+とGoogledriveのスタンダード以上の課金が必須です。

逆に言えばそれだけでOpenAIに依存せずにChatGPTに近いことはできます。

GPT-NEOX-20BはOpenAIのモデルと比べるとCurieとDavinciの線形補完ぐらいの精度があり、本家ChatGPTはDavinciなのでそこそこいけるかなと思っていたのですが、あんまりいい結果が返ってきていません……

そもそも一対一対応の返事がこない(かってにChatで一人芝居を始めてしまう)であったりとか、そもそも返答の質もあんまりよくないように感じます。

参考にした記事

余談

ChatGPTの仕組が実際にクローンを作成してみて少しだけ理解出来ました。本当に文章生成しているだけで、あたかもChatしているように見えるのはプロンプトエンジニアリングの成果ということなのですね。プロンプトによっていい感じに返答を生成できるようにコントロールしつつ、過去のChatをメモリーとして記憶することが出来る。

実際にこうやって動かすとわかることも多いのですね。

今後のタスク

  • プロンプトエンジニアリングによって改善するか試す
  • CustomLLMの使い方はわかったので他のOpenModelを試す(OPTとかBLOOMとか)
3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?