例として、かつて検索エンジンのテクニックを学んだように、私たちはまた、AI
とコミュニケーションするためのテクニックも習得する必要がある。合理的な制約条件を与え、効率的に必要な答えを得る方法を学ぶのだ。
もし角度を変えて考えると、現在のAI
は記憶力に優れた小さな子供であり、完璧に暗記し、宿題をコピーできる能力を持っている。私たちがやるべきことは、AI
と正確かつ効果的にコミュニケーションする方法を学び、要求を正確に記述することで、AI
が期待される結果を生み出すのを助けることだ。
科学普及
話題となっているAI
(人工知能)を具体的に言うとGenerative Pre-Training
(生成事前学習)です。これはインターネット上で利用可能なデータを用いてテキスト生成を行う深層学習モデルであり、質問応答、テキスト要約生成、機械翻訳、分類、コード生成、対話型AIなど様々なタスクに用いられます。現在、GPT-1、GPT-2、GPT-3、GPT-4といった異なるバージョンのモデルが存在し、それぞれが前バージョンよりも規模が大きく、性能も向上しています。
到底有没有智能
- 類似度が高ければ高いほど、精度も高くなる
- 基本的な、反復性の仕事は、特定の訓練を受けることで、人工の介入が不要になる 生成式AIとは、既存のテキスト、音声、画像などのデータを活用して新しいコンテンツを作成する技術である。テキスト生成、音声合成、画像生成、対話システムなど、様々なタスクに使用できる。生成式AIの論理性は、その学習データとモデル構造に依存する。一般的に、生成式AIは一定程度、文法、論理、常識に従うことができるが、誤りや偏見、または不真実を含むコンテンツを生成することもある。そのため、生成式AIの出力は人間の判断と検証が必要であり、盲目的に信頼したり使用したりすることはできない。
プロンプトエンジニア
時間は流れの法則を変えない。人は潮流に適応することを学ぶ必要がある。AIを無智能で論理性に欠けるものと捉えがちだが、よく書けば使えないコードを生成することも少なくない。
もし別の角度から考えると、現在のAIは記憶力に優れた幼い子供であり、丸暗記する能力を持っている。つまり、問題をコピーする能力があるのだ。私たちがやるべきことは、AIに対して適切で効果的かつ正確なコミュニケーションを学び、要求を明確に記述し、AIが期待される結果を生み出すのを支援することだ。
対話モデル
2年前、GitHub Copilotの発表は誰も予想していませんでした。その結果、OpenAIが横空に出現し、人類は大規模言語モデルの能力を認識するに至りました。
コメントベースのプログラミングと対話ベースのプログラミングに基づき、インタラクティブなロジックは完全に異なり、対話のパターンは初心者ユーザーにとって親しみやすく、NewBingが各質問の後に提示するフォローアップのヒントは必須です。Microsoftは、AI知識ベースにあるより多くのコンテンツを取得するために、ユーザーを誘導しようとしています。
- データの前処理
- 深層学習
- ニューラルネットワーク
栗子
# 必要なライブラリをインポート
import argparse
import logging
import multiprocessing
import os
from PIL import Image
# 画像をグレースケールに変換し、透明背景を維持して画像を保存し、ファイルサイズを返す関数を定義します。
def convert_and_save(image_file):
# 画像を開く
try:
image = Image.open(image_file)
except Exception as e:
logging.error(f"画像 {image_file} のオープンに失敗しました:{e}")
return None, None
# 画像のモードを取得します。RGBA モードの場合、透明背景があります。
mode = image.mode
if mode == "RGBA":
# 画像と同じサイズの白い背景画像を生成します。
background = Image.new("RGB", image.size, (255, 255, 255))
# 元の画像に背景を貼り付け、透明ピクセルを無視します。
background.paste(image, mask=image.split()[3])
# 合成された画像をグレースケールモードに変換します。
gray_image = background.convert("L")
# グレースケール画像をRGBAモードに戻して透明背景を維持します。
final_image = gray_image.convert("RGBA")
else:
# RGBA モードでない場合は、画像が直接グレースケールモードに変換されます。
final_image = image.convert("L")
# 元の画像のファイル名と拡張子を取得します。
file_name, file_ext = os.path.splitext(image_file)
# 新しい画像のファイル名を定義し、_bw サフィックスを追加して黒白であることを示します。
new_file_name = file_name + "_bw" + file_ext
# 新しい画像を保存し、品質を最適化してファイルサイズを削減します。
try:
final_image.save(new_file_name, optimize=True)
except Exception as e:
logging.error(f"{new_file_name} の保存に失敗しました:{e}")
return None, None
# 元の画像と新しい画像のファイルサイズを取得し、返します。
old_size = os.path.getsize(image_file)
new_size = os.path.getsize(new_file_name)
return file_name, old_size, new_size
# コマンドライン引数を解析し、フォルダパスと拡張名リストを返す関数を定義します。
def parse_args():
# 解析器オブジェクトを作成します。
parser = argparse.ArgumentParser(description="画像を黒白に変換し、品質を最適化します。")
# 位置パラメータを追加してフォルダパスを指定します。
parser.add_argument("folder_path", help="画像が含まれるフォルダーのパスです。")
# オプションパラメータを追加して拡張名リストを指定します。デフォルトは png, jpg, jpeg, gif です。
parser.add_argument("-e", "--extensions", nargs="+", default=[".png", ".jpg", ".jpeg", ".gif"], help="画像ファイルの拡張子です。")
# コマンドライン引数を解析し、結果オブジェクトを返します。
args = parser.parse_args()
return args.folder_path, args.extensions
# 変換前後のファイルサイズの違いを出力する関数を定義します。
def print_result(result):
# 結果が空でない場合、変換と保存が成功したことを示します。
if result:
# 結果をファイル名とファイルサイズのタプルに分解します。
if len(result) == 3:
file, old_size, new_size = result
# コントロールパネルで変換前後のファイルサイズの違いを出力します。
logging.info(f"{file}: {old_size} バイト -> {new_size} バイト")
else:
# 結果を出力します。
logging.info(f"{result}")
# 日志記録器を設定し、ログをコンソールとファイルに出力し、ログレベルを INFO に設定します。
logging.basicConfig(level=logging.INFO,
format="%(asctime)s %(levelname)s %(message)s",
handlers=[logging.StreamHandler(),
logging.FileHandler("log.txt")])
# # 別のプロセスに、パイプを介して渡されたコードを実行するように通知されます。これは、`--multiprocessing-fork` コマンドライン引数を渡すことで行われます。
# `freeze_support()` 関数の実装を見ると、それが実行されているプロセスの確認と、パイプを介して渡されたコードの実行が必要かどうかを確認するタスクを実行します。
# `multiprocessing.freeze_support()`
# コア数に基づいてコンピューターに自動的にプロセスを割り当てるプロセスプールを作成します。
# プロセスプール = multiprocessing.Pool()
# 异步タスクの結果オブジェクトを格納するための空のリストを作成します。
# results = []
# フォルダー内のすべてのファイルに対して反復処理を行います。
# for file in os.listdir(folder_path):
# # ファイルパスを結合します。
# file_path = os.path.join(folder_path, file)
# # 拡張子リストに基づいて画像ファイルを判断します。必要に応じて拡張子リストを変更できます。
# if any(file_path.endswith(ext) for ext in extensions):
# # 関数を呼び出して、画像を変換して保存し、ファイルサイズを取得します。パイプを介したコードの実行は、メインプロセスをブロックすることなく、非同期で行われます。
# result = pool.apply_async(convert_and_save, args=(file_path,), callback=print_result)
# # 結果オブジェクトをリストに追加します。
# results.append((file, result))
# プロセスプールを閉じ、新しいタスクの受け入れをやめます。
# pool.close()
# すべてのタスクが完了するまで待ちます。
# pool.join()
## 終わりに
ローカル開発が `windows` システムであるため、AI が最初に提示した回答には `main` 関数も `multiprocessing.freeze_support` も含まれておらず、エラーが発生しました。質問を重ねることでエラーの原因を特定し、コードを修正しました。
かつて検索エンジンの技術を学ぶように、AI とコミュニケーションする上でも、適切な制約条件を与え、効率的に必要な回答を得るためのスキルを習得する必要があります。
注意:**もしあなたがプログラミング初心者であれば、提示されたコメントと合わせて理解できない点がある場合は、引き続き関連コードについて質問してください。**