Scribble at 2023-05-09 10:34:11 Last modified: 2023-05-09 10:52:22

添付画像

Chat completions

ChatGPT のベースである GPT-4 は NLP(自然言語解析機)と言語モデルであるから、入力された文章を NLP で構文解析してから、インデックスされている莫大な検索データを分類したモデルとの「距離」を測って、可能な限り入力した文章の単語を全て含む集合から作ったモデルと同型になるようなモデルを探す(数学的には初等的な線形代数でやる多次元の行列計算=ベクトル計算である)。何か合致するモデルがあれば、その理論、つまり公理系と呼ばれる言明の一式を使って、最も関連性が高いと想定されている(それも事前確率を設定した一つのベイズ的な仮説であるから、関連性についても競合がありえるし、学習によって幾らでも関連性の強さなり評価が変わる)単語を使って一種の応用を始める。この関連性をどのていどまで許容するかによって、ChatGPT の出力として "professional" であるか "funny" であるかといった区別も調整できる。

ただし、PHILSCI.INFO で実際に出力してみた結果を紹介しているように、"professional" の出力を指定したからといって、使える単語の範囲が狭くなる(或る程度は関連性の高い単語つまり概念の範囲でしか文章を出力しない)のは確かだと思うが、文章のバリエーションがなくなるわけでもない。実際、同一の入力で何度か文章を出力させてみると、出力した文章もフィードバックされて参考にしているからなのか、次々と新しい文章を生成するようだ。実際、Microsoft Edge のサイド・バーには実装されていないが、OpenAI の ChatGPT フロント・エンド・サービスでは、regenerate した文章について better か worse かをフィードバックする機能がある。

Chat の機能は、上記のページで紹介されているように GPT-4 の chat completion という実装を利用している。"completion" という言葉が表しているように、これはいまのところあくまでも「補完」であって、「代行(substitution or representation)」ではない。そして、このサービスで API を使って GPT-4 へアクセスするには、Python でコードを書くわけである。いま年寄りの手習いとして(大多数の若造をはるかに超える実装技術はあると思うが)Python のおさらいをやっているのは、こういう事情もある。

冒頭で書いた「距離」と言えば、PHP で文字列を比較する方法の一つとして Levenshtein 関数というのがある。20年近く前に、僕も0系新幹線のさよならサイトでキャンペーンに使ったブログ・パーツのバックエンドを開発したときに、同じブログの異なる記事 URL で多重応募されていないかどうかを確かめるのに、この関数を使ったことがある。だが、この関数は編集距離と呼ばれる文字の置き換えを基準にした評価をもとに単語どうしの類似性を割り出すものであり、ここで紹介しているキーワードどうしに割り当てられているスコアの比較とは基準が全く異なる。Levenshtein 関数だと、levenshtein( 'cat', 'mad' ) === levenshtein( 'cat', 'pet' ) つまり、どちらも2を出力するが、文字の置き換え回数として両方が2回の置き換えで済むからといって、意味論としても「同じ距離」にあると評価することはできない。

  1. もっと新しいノート <<
  2. >> もっと古いノート

冒頭に戻る


※ 以下の SNS 共有ボタンは JavaScript を使っておらず、ボタンを押すまでは SNS サイトと全く通信しません。

Twitter Facebook