-
超簡単javascriptのaccordion実装
まずjQueryをlinkでつける <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> 上記をheadタグに置いておくそして、以下のような構成のhtmlを書く <div class="accordion-item"> <h2 class="accordion-header"> <button class="accordion-button">ボタンだよ</button> </h2> <div class="accordion-collapse"> <ul> <li>aaa</li> </ul></div></div> そして以下のようなstyleを入れる。 <style> .accordion-header { position: relative; cursor: pointer; transition: all .5s ease; } .accordion-header::before, .accordion-header::after{ position: absolute; } .accordion-collapse { display: none; }</style> あとはjavascriptのコードを入れるだけ <script> $(document).ready(function() { $('.accordion-button').on('mouseover', function() { var findElm = $(this).parent().next(".accordion-collapse"); $(findElm).slideToggle(); }); }); $(document).ready(function() { $('.accordion-item').on('mouseleave', function() { $(".accordion-collapse").slideUp(500); }); });</script> cssに関してはChatGPTなどで肉付けしてもらうと良いでしょう。
-
誰でもできる簡単ChatGPTのfine-tuning!!
ChatGPTのファインチューニング、やっぱ難しいんじゃないのお?と思ったそこのあなた!実はとっても簡単なんです!!ではまず手順について説明していきます手順モデルの決定(chatモデルではない)プロンプトの作成キャッシュDBの割り当てデータの収集jsonlファイルの作成・正例と負例の分類ファインチューニングたったの6ステップ!しかもファインチューニングだけなら無料でできますそれでは詳しく説明していきます手順1まず最初に適当なモデルの決定を行なってください。ここではchatモデルは使いません。理由としましては、手順3のキャッシュDBを使えないからです。今回、このキャッシュDBを使うことでデータの整形がさらに簡単になることを説明していきたいので、キャッシュDBを使うことを想定して説明を続けていきます。chatモデルではないモデルの例) text-davinci-003,text-davinci-002手順2プロンプトの作成を行います。好きなプロンプトを書いてください。後々整形したい場合も出てくる可能性もあるので、最初は短めで書いてみるといいかもしれません。(json形式にするとちょっと崩れる)手順3キャッシュDBの割り当てを行います。と言っても既存のLLMモデルを扱うコードに以下の数行を書き加えるだけです。from langchain.cache import SQLiteCache langchain.llm_cache = SQLiteCache(database_path="langchain_cache.db")また、この際、VSCodeで実行している方は、SQLite Viewerという拡張機能を追加することで、簡単に中身を見ることができます。そこで何となく、どんな感じで入るかを確認しておいてください。手順4データの収集を行います。これはただ何度も実行していただくだけで結構です。正例と負例を大体それぞれ50個ずつくらいになるように集めると良いでしょう。手順5続いてjsonlファイルの作成・正例と負例の分類を行なっていきます。簡単に言うとfine-tuningに用いる学習データのためのデータの整形です。まず、sqlitedatastore.pyというファイルを作り、以下のコードを貼り付けますこちらはキャッシュDBを操作するためのSQLのコードを集めておくためのファイルになりますimport json import sqlite3 conn = None def connect(db_name="langchain_cache.db"): global conn conn = sqlite3.connect(db_name) def close(): conn.close() def get(id, fl): row_ls = conn.execute("SELECT {} FROM full_llm_cache WHERE rowid = ?".format(",".join(fl)), (id,)).fetchone() row_dict = {} if row_ls is None: return None for key, value in zip(fl, row_ls): row_dict[key] = value return row_dict def get_all_ids(limit, offset=0): return [record[0] for record in conn.execute("SELECT rowid FROM full_llm_cache LIMIT ? OFFSET ?", (limit, offset))]続いて、sqlitedatastore.pyのコードを使ってキャッシュDBを扱うためのファイルを作ります。ファイル名は何でもいいですが、ここではcache_db.pyとしておきます。そしてcache_db.pyに以下のコードを貼り付けてください。import sqlitedatastore as datastore import json class Cache_db: def connect(self): datastore.connect() def close(self): datastore.close() def get(self, id): return datastore.get(id, fl=["prompt", "response"]) def get_all(self): json_data_list = [] for ID in datastore.get_all_ids(limit=-1): json_data = self.get(ID) json_data_format = { "prompt": json_data.get("prompt"), "completion": json_data.get("response") } json_data_list.append(json_data_format) return json_data_list if __name__=="__main__": dc = Cache_db() dc.connect() jsonl_data = dc.get_all() with open('training_data.jsonl', 'w') as f: f.writelines([json.dumps(l, ensure_ascii=False)+"\n" for l in jsonl_data]) dc.close()上記のcache_db.pyを実行することで、jsonlファイルの作成は完了です。続いて正例と負例の分類ですが、こちらは自身が持つ正解を元に、training_data.jsonlをsuccessful.jsonlとfailed.jsonlに仕分けてもらえれば大丈夫です。コードでできる場合は、コードで。難しそうであれば手作業でも問題ないです。手順6最後にfine-tuningを行なっていきます。こちらはOpenAIのサイトに行って、successful.jsonlとfailed.jsonlをアップするだけで終わりますいかがだったでしょうか!以上でfine-tuningは完了です。手順は6つと少ないステップで簡単にできてしまうのがChatGPTのすごいところです。しかし、fine-tuningには少し時間がかかってしまうので、時間がある時にやっておくと良いでしょう。また、ローカルで今回fine-tuningをしたモデルを使いたい方、そしてローカルからfine-tuningをしたい方は以下のサイトを参考にすると良いかもしれませんurl: https://qiita.com/ksonoda/items/b9fd3e709aeae79629ff