GENZITSU / UsefulMaterials

34 stars 0 forks source link

almost weekly useful materials - 03/15 - #128

Open GENZITSU opened 1 year ago

GENZITSU commented 1 year ago

詳説:GPT-3を利用して任意の文書を解析する

手元の文書データを元にした質問応答をGPT-3にやってもらうための手法retrieve-then-readパイプラインを紹介している記事

発想はとても単純で、以下の流れでプロンプトを作成する

  1. ユーザーから質問を受け取る。
  2. 質問と意味的に最も類似した文章を文書のコレクションから取得する。
  3. 質問と取得した文章を含むプロンプトを作成する。
  4. GPT-3にプロンプトを送信する。

スクリーンショット 2023-03-03 18 59 34

ここで重要になるのは、文書集合から適切な文書を抽出してくる部分だが、解答の根拠になるものが文書集合にない場合は素直に追加するしかないことに注意。

コメント

理論上任意のQ&AをGPT-3にやってもらうことができるのすごい (セキュリティとかはおいといて)

出典

詳説:GPT-3を利用して任意の文書を解析する

GENZITSU commented 1 year ago

ChatGPTのAPIを使って記憶(過去の会話をある程度覚えている)のあるAIキャラクターを作ってみる

一つ一つの会話が終わった後に、やり取りの要約を保存して、次の会話のプロンプトに入れることで記憶を再現する方法の紹介。

コメント

履歴をそのまま保持すると、トークン数が線形に増えるけど要約すれば、log_nくらいにはなりそう

出典

ChatGPTのAPIを使って記憶(過去の会話をある程度覚えている)のあるAIキャラクターを作ってみる

GENZITSU commented 1 year ago

日本語の tokenize, lemmatize, romanize の速度比較

日本語文章を分かち書きした上で見出し語にし、ローマ字に変換する処理を複数のライブラリで実装し速度比較している記事

比較しているライブラリ

現状はsudachipyとpykakashiの組み合わせが最速の模様

コメント

日本語をローマ字にするライブラリがあることを初めて知った

出典

日本語の tokenize, lemmatize, romanize の速度比較

GENZITSU commented 1 year ago

ChatGPT APIと検索APIを使ってBingGPTに似たシステムを作ってみる

ユーザーの入力に関する情報を適宜webから収集した上で返答を行う対話システムを構築している記事

処理フローは以下

  • ユーザーが質問入力を行う
  • questionに格納
    • 検索クエリーを抽出する (今回はしません)
    • ChatGPT APIにquestionを渡し、queryを抽出
  • 検索結果を取得
    • Google Custom Search APIを使って検索結果を取得
    • 検索結果のそれぞれのタイトルを渡し、情報ソースとして良さそうなサイトを選ぶ (今回はしません)
    • 単純な実装の場合、上位3サイト等を選べば良いだけです。
  • それぞれのサイトをスクレイピングし、contentを抽出する
    • 各サイトのcontentを要約する
    • それぞれ先頭2500文字抽出して500文字以内に要約します
  • 要約文をconcatします
  • 結合された要約に対してQAを行う

実際にやってみると、なかなか思うような結果を得られないようで、意外と難易度が高いタスクのようである。

コメント

ChatGPTによるアプリケーション実装は非常に自由度が高い一方で、レスポンス速度や効率化などを考えると途端に難しくなる印象がある。

出典

ChatGPT APIと検索APIを使ってBingGPTに似たシステムを作ってみる

GENZITSU commented 1 year ago

コードレビューにラベルを付けるだけでチームの心理的安全性を高めた話

コードレビュー時の心理的安全を高めるために、それぞれのコメントがどういう意図かを示すラベルを導入した取り組みの紹介。

提案されているラベル

スクリーンショット 2023-03-09 23 35 36

コメント

コードレビュー時のもの言いを統一することで、コメントの意図がより伝わりやすくなるのは有益そう コメントのテンプレもそれぞれ用意しているのが◎

出典

コードレビューにラベルを付けるだけでチームの心理的安全性を高めた話

GENZITSU commented 1 year ago

Learn Prompting

Prompt Engineeringの基本的なテクニックがまとめられたオンライン教材

GPT系と画像生成系両方カバーしている他、プロンプトハッキングなどの最新の話題までカバーされている

コメント

内容の更新も頻繁にされているようななので助かる

出典

GENZITSU commented 1 year ago

ChatGPT-APIの出力をプログラムに落としこむ(Text-Embeddings)

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に厳しく制限して、その結果をパターンマッチングするという手もあるかもだが、出力制限がどれだけできるものか...

出典

ChatGPT-APIの出力をプログラムに落としこむ(Text-Embeddings)

GENZITSU commented 1 year ago

英語の tokenize, lemmatize の速度比較

表題の通り

以下のライブラリを検証

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倍程度高速するようなので、大抵のケースではこれで問題ない気もしている

スクリーンショット 2023-03-14 22 09 53

コメント

こういうライブラリの速度比較はありがたい。

出典