Open GENZITSU opened 1 year ago
一つ一つの会話が終わった後に、やり取りの要約を保存して、次の会話のプロンプトに入れることで記憶を再現する方法の紹介。
履歴をそのまま保持すると、トークン数が線形に増えるけど要約すれば、log_nくらいにはなりそう
日本語文章を分かち書きした上で見出し語にし、ローマ字に変換する処理を複数のライブラリで実装し速度比較している記事
比較しているライブラリ
現状はsudachipyとpykakashiの組み合わせが最速の模様
日本語をローマ字にするライブラリがあることを初めて知った
ユーザーの入力に関する情報を適宜webから収集した上で返答を行う対話システムを構築している記事
処理フローは以下
- ユーザーが質問入力を行う
- questionに格納
- 検索クエリーを抽出する (今回はしません)
- ChatGPT APIにquestionを渡し、queryを抽出
- 検索結果を取得
- Google Custom Search APIを使って検索結果を取得
- 検索結果のそれぞれのタイトルを渡し、情報ソースとして良さそうなサイトを選ぶ (今回はしません)
- 単純な実装の場合、上位3サイト等を選べば良いだけです。
- それぞれのサイトをスクレイピングし、contentを抽出する
- 各サイトのcontentを要約する
- それぞれ先頭2500文字抽出して500文字以内に要約します
- 要約文をconcatします
- 結合された要約に対してQAを行う
実際にやってみると、なかなか思うような結果を得られないようで、意外と難易度が高いタスクのようである。
ChatGPTによるアプリケーション実装は非常に自由度が高い一方で、レスポンス速度や効率化などを考えると途端に難しくなる印象がある。
コードレビュー時の心理的安全を高めるために、それぞれのコメントがどういう意図かを示すラベルを導入した取り組みの紹介。
提案されているラベル
コードレビュー時のもの言いを統一することで、コメントの意図がより伝わりやすくなるのは有益そう コメントのテンプレもそれぞれ用意しているのが◎
Prompt Engineeringの基本的なテクニックがまとめられたオンライン教材
GPT系と画像生成系両方カバーしている他、プロンプトハッキングなどの最新の話題までカバーされている
内容の更新も頻繁にされているようななので助かる
ChatGPTの出力文章を人間がいちいち確認しなくて済むように、人間の判断結果の文章と出力文章のembeddingの類似度を利用する方法を試している記事
# from https://qiita.com/kamatari_san/items/ec89b53e408cbaff785a
a_win_em = embedding("Aの意見の方が優れている")
b_win_em = embedding("Bの意見の方が優れている")
hikiwake_em = embedding("どちらの意見が優れているのか判断できない。引き分け")
chatgpt_em = embedding("AとBの意見にはそれぞれ優れた点があると思いますが、私はBの意見が優れていると判定します。Bの意見には、長期的なコスト削減や自由度の高さ、安心感のある点、将来的な投資価値がある点があり、これらが人々に受け入れやすく、論理的に展開されていると感じました。一方、Aの意見は、隣人トラブルへの対策という1点に絞られており、他の面を考慮していないと感じました。また、主張が一方的で、対立するBの意見を全く反論していない点も見受けられました。そのため、Bの意見がより優れたものと考えました。")
結果としては、ギリギリ人間の判断と同じ文章のembeddingあ最も高い類似度となったが、差がかなり小さいので安定的に利用することは難しそう。
# from https://qiita.com/kamatari_san/items/ec89b53e408cbaff785a
>>> sims(a_win_em,b_win_em,hikiwake_em,chatgpt_em)
[0.8978647725177573, 0.9055372542198694, 0.8734859027622555]
自然言語出力をシステムに組み込む場合、それを自動的にチェックする方法が必要だと思っていたが、embeddingを利用して判定するというアイディアではなかなか面白いと思った。
ChatGPTの出力をyes/noに厳しく制限して、その結果をパターンマッチングするという手もあるかもだが、出力制限がどれだけできるものか...
表題の通り
以下のライブラリを検証
nltk==3.8.1
Pattern==3.6
spacy==3.5.1
textblob==0.17.1
比較したところ、とにかく速度だけを求めるのであればpatternだが、精度を求めるならspacyが一番良い様子。
とはいえspacyは300 ~ 400 sentence / secondくらいで捌ける & nlp.pipeのバッチかで3~4倍程度高速するようなので、大抵のケースではこれで問題ない気もしている
こういうライブラリの速度比較はありがたい。
詳説:GPT-3を利用して任意の文書を解析する
手元の文書データを元にした質問応答をGPT-3にやってもらうための手法retrieve-then-readパイプラインを紹介している記事
発想はとても単純で、以下の流れでプロンプトを作成する
ここで重要になるのは、文書集合から適切な文書を抽出してくる部分だが、解答の根拠になるものが文書集合にない場合は素直に追加するしかないことに注意。
コメント
理論上任意のQ&AをGPT-3にやってもらうことができるのすごい (セキュリティとかはおいといて)
出典
詳説:GPT-3を利用して任意の文書を解析する