自然言語処理: 大規模言語モデルの概要

自然言語処理 (NLP) の開発により、このテクノロジーはテキストの分類、認識と要約、機械翻訳、情報抽出、質問応答システム、感情分析、音声認識、テキスト生成などのタスクに広く使用されています。
研究者らは、モデルのサイズを拡大するとモデルの機能が向上することを発見し、大規模な事前トレーニング言語モデル (事前トレーニング言語モデル、PLM) を指す「大規模言語モデル (Large Language Model、LLM)」という用語を作成しました。これには通常、数千億 (またはそれ以上) のパラメータが含まれます。大規模言語モデルの最も注目すべき進歩の 1 つは、LLM に基づいて OpenAI によって開発されたチャット ロボット ChatGPT です。このブログでは、大規模言語モデルの歴史的進化、基礎知識、コア技術と将来の展望について紹介し、API を呼び出しますChatGPT がどのように構築されるかを紹介します。

言語モデルの歴史的進化

言語モデル (LM) は、単語シーケンスの生成確率をモデル化し、将来の単語や欠落単語の確率を予測するもので、その開発は主に次の 3 つの段階で行われます。

  • 統計言語モデル (SLM): 統計的学習方法 (マルコフ仮定など) に基づいて単語予測モデルを構築し、最新のコンテキストに基づいて次の単語を予測します。
  • ニューラル言語モデル (NLM): 単語シーケンスを予測する確率は、ニューラル ネットワーク (リカレント ニューラル ネットワーク RNN など) によって記述されます。
  • 大規模言語モデル (LLM): 研究者らは、モデルの規模を拡大することでモデルの能力を向上できることを発見しました。Transformer アーキテクチャを使用して大規模な言語モデルを構築し、「事前トレーニングと微調整」パラダイムを確立しました。つまり、大規模なコーパスで事前トレーニングし、事前トレーニングされた言語モデルを微調整して、さまざまな下流タスクに適応し、LLM のパフォーマンスを向上させます。

大きな言語モデルの基本

事前研修 事前研修

モデルの事前トレーニングには、まず高品質のトレーニング データが必要です。これらのデータは多くの場合、Web ページ、書籍、ダイアログ、科学文献、コードなどから取得されます。これらのデータを収集した後、特にノイズを除去するためにデータを前処理する必要があります。 、冗長性、無関係で有害な可能性のあるデータ。一般的な前処理データ フローは次のとおりです。

  • 品質フィルタリング: 低品質データを削除します。
  • 重複排除: 重複データを削除します。
  • プライバシーの削除: プライバシーに関連するデータを削除します。
  • トークン化: 元のテキストを単語シーケンス (トークン) に分割し、大規模言語モデルへの入力として使用します。

現在、大規模言語モデルの主流のアーキテクチャは、エンコーダ-デコーダ、因果デコーダ、プレフィックス デコーダの 3 つのタイプと、上記 3 つのアーキテクチャを使用して構築されたハイブリッド アーキテクチャに分類できます。

  • エンコーダ-デコーダ アーキテクチャ: 従来の Transformer アーキテクチャを利用し、エンコーダはスタックされたマルチヘッド セルフ アテンション レイヤー (セルフ アテンション) を利用して入力シーケンスをエンコードし、その潜在的な表現を学習します。一方、デコーダはこれらの表現に対してクロス アテンションを実行します ( Cross -attention) を実行し、自己回帰的にターゲット シーケンスを生成します。現在、このアーキテクチャを使用して構築されている LLM は、T5 や BART など少数のみです。
  • コーザル デコーダー アーキテクチャ: 一方向のアテンション マスクを採用して、各入力トークンが過去のトークンとそれ自体にのみ焦点を当てることができるようにします。入力トークンと出力トークンはデコーダーによって同じ方法で処理されます。GPT シリーズ、OPT、BLOOM、Gopher などのモデルは、因果デコーダ アーキテクチャに基づいて開発され、現在広く使用されています。
  • プレフィックス デコーダ アーキテクチャ: 非因果デコーダ アーキテクチャとも呼ばれるプレフィックス デコーダ アーキテクチャは、因果デコーダのマスキング メカニズムを変更して、プレフィックス トークンに対して双方向のアテンションを実行し、生成されたトークンに対してのみ単方向のアテンションを実行できるようにします。エンコーダ/デコーダ アーキテクチャでは、プレフィックス デコーダはプレフィックス シーケンスを双方向にエンコードし、出力トークンを 1 つずつ自己回帰的に予測できます。エンコードとデコードのプロセスでは同じパラメータが共有されます。このアーキテクチャを採用した代表例:GLM-130B、U-PaLMなど
  • ハイブリッド アーキテクチャ: ハイブリッド エキスパート (MoE) 戦略を使用して、スイッチ トランスフォーマや GLaM などの上記 3 つのアーキテクチャを拡張します。

微調整

大規模な言語モデルを特定のタスクに適合させるには、命令チューニングやアライメント チューニングなどの技術的手法を使用できます。大規模な言語モデルには多数のタスクが含まれているため、パラメータ全体の微調整の方が大きな影響を与える場合があります。パラメータのオーバーヘッドで効率的な微調整方法には、アダプター チューニング、プレフィックス チューニング、プロンプト チューニング、および低ランク適応 (LoRA) などがあります。効率的な微調整方法はここでは拡張されません。はじめに、興味のある友人は自分で関連情報を確認できます。 。

命令チューニング 命令チューニング

命令の微調整は、自然言語で記述された混合マルチタスク データセットを使用して教師あり微調整されるため、大規模な言語モデルは下流のタスクをより適切に完了し、より優れた一般化機能を備えることができます。このプロセスにはパラメータの更新が伴います。

アライメントチューニング

調整の微調整は、LLM の動作を人間の価値観や好みに合わせることを目的としています。それには、ヒューマン アノテーター (資格のある教育レベルを持っているか、特定の学術要件を満たす必要がある) から高品質のヒューマン フィードバック データを収集し、このデータを使用してモデルを微調整する必要があります。一般的な微調整手法には次のものがあります。 ヒューマン フィードバックによる強化学習 (RLHF)。

大規模な言語モデルを人間の価値観と一致させるために、学者たちはヒューマン フィードバックに基づく強化学習 (RLHF) を提案しています。つまり、収集された人間のフィードバック データと強化学習を組み合わせて LLM を微調整することで、有用性を向上させることができます。そしてモデルの誠実さ、セックスと無害さ。RLHF は、近接ポリシー最適化 (PPO) などの強化学習 (RL) アルゴリズムを採用し、報酬モデルを学習することで LLM を人間のフィードバックに適応させます。

プロンプト

言語モデルにいくつかの特定のタスクを完了させるには、モデルの入力にヒントを追加するメカニズムを使用して、モデルが期待どおりの結果を取得したり、より良い結果が得られるようにモデルをガイドしたりできます。ヒンティングのプロセスでは、追加のトレーニングやパラメーターの更新は必要ありません。

状況に応じた学習

インコンテキスト学習 (ICL) は、GPT-3 によって正式に導入されました。その重要なアイデアは、クエリの質問をコンテキスト ヒント (いくつかの関連する例) と結び付けて帯を形成するアナロジーから学習することです。ヒント付きの入力が与えられ、予測のために言語モデルに入力されます。

思考の連鎖

思考連鎖 (CoT) は、算術推論、常識推論、記号推論などの複雑な推論タスクにおける LLM のパフォーマンスを向上させることを目的とした、改良されたヒンティング戦略です。これは、モデルが正しい結果を予測するように導く中間推論ステップをヒントに組み込むことによって行われます。関連論文によると、この能力はコードのトレーニングによって獲得できる可能性があります。

迅速な開発 (ChatGPT API の呼び出し)

ChatGPT は、OpenAI によって開発された大規模な言語モデルを使用してチャットする Web サイトです。その本質は、ChatGPT API を呼び出してさまざまなタスクを完了することです。以下は、概要タスクを完了するための ChatGPT API の使用方法を示しています。また、推論、翻訳、質疑応答、校正、拡張などのタスクも完了します。より良い結果を得るには、ICL または CoT を使用する必要がある場合があります ( OpenAI 公式 Web サイトからAPI キーを取得する必要がある場合)。

import openai
import os
fron dotenv import load_dotenv, find_dotenv

_ = load_dotenv(find_dotenv())
openai.api_key = os.getenv("OPENAI_API_KEY")

def get_completion(prompt, temperature=0, model="gpt-3.5-turbo"):
	messages = [{
    
    "role": "user", "content": prompt)]
	response= openai.ChatCompletion.create(
		model=model,
		messages=messages,
		temperature=temperature, # temperature为模型的探索程度或随机性,其值是范围在0~1的浮点数,值越高则随机性越大,说明更有创造力。
	)
	return response.choices[0].message["content"]

text = f"""
XXXXXXXX
"""
prompt = f"""
Summarize the text delimited by triple backticks into a single sentence.
```{
      
      text}```
"""
response = get_completion(prompt)
print(response)

ChatGPT の Web サイトまたはチャットボットには、通常、ユーザー (ユーザー) メッセージ、ChatGPT/チャット ロボット (アシスタント) メッセージ、およびシステム (システム) メッセージを含む 3 つの役割 (役割) メッセージ (メッセージ) が含まれています。例として「注文ロボット」を構築してみましょう。

  • システム メッセージ: ロボットの対話をガイドする高レベルのコマンドとして、ロボットの動作と性格を設定するために使用されます。通常、ユーザーにはこれが見えません。
  • ユーザーメッセージ: ユーザーの入力です。
  • アシスタントメッセージ: ロボットの応答です。

コード例は次のとおりです。

import openai
import os
fron dotenv import load_dotenv, find_dotenv

_ = load_dotenv(find_dotenv())
openai.api_key = os.getenv("OPENAI_API_KEY")

def get_completion_from_messages(messages, temperature=0, model="gpt-3.5-turbo"):
	response= openai.ChatCompletion.create(
		model=model,
		messages=messages,
		temperature=temperature, # temperature为模型的探索程度或随机性,其值是范围在0~1的浮点数,值越高则随机性越大,说明更有创造力。
	)
	return response.choices[0].message["content"]

messages = [
	"role": "system",
	"content": "你现在一个订餐机器人,你需要根据菜单收集用户的订餐需求。菜单:汉堡、薯条、炸鸡、可乐、雪碧。",
	"role": "user",
	"content": "你好,我想要一个汉堡。",
	"role": "assistant",
	"content": "请问还有其他需要的吗?",
	"role": "user",
	"content": "再要一份可乐。",
]

response=get_completion_from_messages(messages)
print(response)
# 输出示例:
# 好的,一份汉堡和可乐,已为您下单。

上記のコード例を利用すると、GUI または Web インターフェイスを設計することで人間とコンピューターの対話を実現でき、システム メッセージを変更することでチャットボットの動作を変更し、さまざまな役割を果たすことができます。

大規模言語モデルの将来の展望

  • スケールの拡大: モデルのサイズは今後も拡大し、モデルの表現力と言語理解が向上する可能性があります。
  • 事前トレーニングの改善: 事前トレーニング戦略を改善して、モデルがセマンティクスとコンテキストをよりよく理解できるようにし、さまざまなタスクでのモデルの転送可能性を向上させます。
  • より良い微調整: 特定のタスクでより良いパフォーマンスを達成するために、より効率的な微調整方法を開発します。
  • マルチモダリティ: 言語モデルを視覚や音声などの他のモダリティと組み合わせて、クロスドメインのマルチモーダル インテリジェント アプリケーションを実現します。
  • ツール: 検索エンジン、計算機、コンパイラなどの外部ツールを使用して、特定のドメインにおける言語モデルのパフォーマンスを向上させます。

参考文献

大規模な言語モデルの調査

おすすめ

転載: blog.csdn.net/weixin_43603658/article/details/132366881