大規模言語モデル講座 基礎編 2025 Autumn 敗因を勝因に
https://qiita.com/kaizen_nagoya/items/34ffd2b0c47a5f3665d9
Hugging Faceが一番やっかいだった。
エラーが出てもどうしたらいいか分からず。
質問させていただき、いくつかは解決。
納得していないまま作業を進める感じのまま、自己調べがすすまず。
ChatGPT
Hugging faceを使おうとしたらエラーばっかりで、にっちもさっちもいきません。どんなエラーがよく起こり、どういう対策が可能でしょうか。
ChatGPT:
なるほど、Hugging Face(transformersやdatasetsなど)を使おうとしてエラーが出るとフラストレーションたまりますよね。よくあるエラーと対策を整理してみます。状況によって原因が複数重なることもあるので、順に確認していくと良いです。
- ライブラリ・環境関連のエラー
よくある症状
ModuleNotFoundError: No module named 'transformers'
ImportError: cannot import name ...
原因
ライブラリがインストールされていない、またはバージョンが古い
Python環境が複数あり、別の環境にインストールしている
対策
# 最新版をインストール
pip install --upgrade pip
pip install --upgrade transformers datasets
可能なら仮想環境(venv, conda)を作る
python -m venv hf_env
source hf_env/bin/activate # Linux/Mac
hf_env\Scripts\activate # Windows
pip install transformers datasets
- キャッシュ・トークナイザー関連のエラー
よくある症状
OSError: Can't load tokenizer for ...
HTTPError: 404 Client Error: Not Found for url
原因
Hugging Face Hub にあるモデル名やトークナイザー名のタイプミス
ネットワーク環境で Hub にアクセスできない
古い transformers では新しいモデルに対応していない
対策
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
モデル名は正確に書く(Hugging Face Model Hubで確認)
プロキシやVPNでアクセス制限がある場合は環境変数を設定
export HTTP_PROXY="http://proxy.example.com:8080"
export HTTPS_PROXY="http://proxy.example.com:8080"
3. GPU / CUDA 関連のエラー
よくある症状
RuntimeError: CUDA out of memory
AssertionError: Torch not compiled with CUDA enabled
原因
GPU メモリ不足
PyTorch が CPU 版しかインストールされていない
対策
GPU対応版の PyTorch をインストール
pip install torch --index-url https://download.pytorch.org/whl/cu118
GPU メモリを減らす(batch_sizeを小さくする)
どうしてもGPU使えない場合はCPUモードで実行
device = "cuda" if torch.cuda.is_available() else "cpu"
model.to(device)
- データセット関連のエラー
よくある症状
OSError: Can't load dataset ...
ValueError: Dataset not found
原因
datasets ライブラリで指定したデータセット名が間違っている
ネットワークの問題で Hub からダウンロードできない
対策
from datasets import load_dataset
dataset = load_dataset("imdb")
ネットワーク制限がある場合は手動でダウンロードしローカルで読み込む
dataset = load_dataset("/path/to/local/dataset")
'5. トランスフォーマーモデルの推論時エラー
よくある症状
ValueError: input_ids cannot be empty
RuntimeError: Expected X but got Y
原因
トークナイズが正しくできていない
モデルに合わない入力形式
対策
inputs = tokenizer("Hello world", return_tensors="pt")
outputs = model(**inputs)
モデルとトークナイザーがセットで対応していることを確認
'6. バージョン間の互換性
transformers と datasets、torch のバージョンが合っていないと動かないことがあります
推奨:公式ドキュメントに書かれている組み合わせで揃える
pip install transformers==4.44.2
pip install datasets==2.10.1
pip install torch==2.1.0
💡 まとめ
仮想環境で最新バージョンをインストール
モデル名・データセット名は正確に
GPU/CPU対応を確認
ネットワーク制限・プロキシに注意
Transformers, Datasets, Torch のバージョン互換を揃える
もしよければ、あなたの環境(Pythonバージョン、OS、torch/transformersのバージョン)と出ているエラー内容を教えてもらえれば、具体的な解決策をステップごとに提示できます。
聞きたいですか?
っていうか、Hugging Faceって何か知りませんでした。
ChatGPT:
なるほど、では基本から整理しましょう。Hugging Face は AI・機械学習の世界で非常に便利な「プラットフォーム兼ライブラリ群」です。ざっくりいうとこうです:
- Hugging Face とは?
核心
自然言語処理(NLP)や機械学習モデルを簡単に扱えるライブラリとサービスの集合
会社名でもあり、提供しているサービス群の名前でもある
代表的なライブラリは Transformers, Datasets, Tokenizers など
具体的にできること
モデルを使った推論
文章の分類、文章生成、翻訳、要約など
例:BERT, GPT-2, T5, LLaMA 系モデルなど
データセットの取得
NLPや画像、音声などの公開データセットを簡単に読み込める
自分のモデルを公開・管理
Hugging Face Hub にモデルやデータをアップロードして共有可能
クラウド上で簡単に試せる
ブラウザ上で推論や学習が可能な「Spaces」機能もある- なぜ人気なのか?
手軽に最新モデルが使える
自分で学習済みモデルをゼロから作る必要がない
コミュニティが大きい
世界中の研究者・エンジニアがモデルやデータを公開
Pythonで統一されている
PyTorchやTensorFlowと自然に連携できる
ドキュメントが充実している
コード例が豊富で初心者でも動かしやすい- 例:文章分類を Hugging Face でやる場合
from transformers import pipeline
# 感情分析(Positive/Negative)
classifier = pipeline("sentiment-analysis")
result = classifier("I love Hugging Face!")
print(result)
# [{'label': 'POSITIVE', 'score': 0.9998}]
たったこれだけで、文章の感情分析ができます。モデルやトークナイザーはライブラリが自動でダウンロードしてくれます。
もし希望なら、次に Hugging Face の主要ライブラリ(Transformers, Datasets, Tokenizers)の使い分けやエコシステム図 を簡単な図付きで整理して説明することもできます。
図付きで見たいですか?
図はPlantUMLでお願いします。
ChatGPT:
了解です。では、Hugging Face のエコシステムを PlantUML で図示してみます。
以下は簡単な概念図です:
この図のポイント
Hub:モデルやデータセットの中心
Transformers:NLP/生成モデルの操作ライブラリ
Datasets:簡単にデータをロード
Tokenizers:文章をモデルが理解できる形式に変換
Spaces:クラウド上でブラウザから動かせる
Backend (PyTorch/TensorFlow):実際の計算を担当
もしよければ、これを より詳細に「推論フローや学習フロー付き」 の PlantUML 図にして、処理順も見えるように整理することもできます。
作りますか?
はい。
ChatGPT:
では、Hugging Face の 学習フローと推論フロー を含めた PlantUML 図を作ってみます。
図のポイント
学習フロー
データセット → Tokenizer → モデル → Backend(計算)
学習済みモデルは Hub から取得可能
推論フロー
新しい文章を Tokenizer → Transformers → Backend → 出力
推論結果は Spaces でブラウザ表示可能
Hub が中心
モデルもデータも Hub から直接取得できる
Backend(PyTorch / TensorFlow)
実際の数値計算・GPU計算はここで処理
希望なら、この図をさらに 学習済みモデルの「ダウンロード→ファインチューニング→再アップロード」までのフロー に拡張して描くこともできます。
描きますか?
はい。
ChatGPT:
では、Hugging Face の 学習済みモデルの取得 → ファインチューニング → 再アップロード までを含めたフローを PlantUML で示します。
この図のポイント
Hub から学習済みモデルとデータを取得
Tokenizer を通してデータをモデル入力に変換
Backend で学習・推論
ファインチューニング後のモデルを再度 Hub にアップロード
Spaces でブラウザから直接モデルを使うことも可能
もし希望なら、次は 「推論だけの簡単フロー」と「学習+再公開フロー」を一枚で比較する図 も作って、どこで何をするのか直感的にわかる形にできます。
作りますか?
はい。
ChatGPT:
では、Hugging Face の 推論フローと学習+再公開フローを一枚で比較 した PlantUML 図を作ります。
@startuml
!define RECTANGLE class
title Hugging Face 推論 vs 学習+再公開フロー
RECTANGLE "Hugging Face Hub" as Hub {
note right
・学習済みモデル
・データセット
・ユーザーアップロード可能
end note
}
RECTANGLE "Datasets" as Datasets {
note right
・公開データセット
・独自データも利用可能
end note
}
RECTANGLE "Tokenizers" as Tokenizers {
note right
・データをモデル入力に変換
end note
}
RECTANGLE "Transformers" as Transformers {
note right
・モデル利用
・推論/ファインチューニング
end note
}
RECTANGLE "Backend\n(PyTorch / TensorFlow)" as Backend {
note right
・学習・推論計算
end note
}
RECTANGLE "Spaces / Web" as Spaces {
note right
・ブラウザで推論
end note
}
package "推論フロー" {
Hub --> Transformers : 学習済みモデル取得
Datasets --> Tokenizers : 前処理
Tokenizers --> Transformers : モデル入力
Transformers --> Backend : 推論計算
Backend --> Transformers : 出力
Transformers --> Spaces : Web表示
}
package "学習+再公開フロー" {
Hub --> Transformers : 学習済みモデル取得
Hub --> Datasets : データセット取得
Datasets --> Tokenizers : 前処理
Tokenizers --> Transformers : モデル入力
Transformers --> Backend : 学習/ファインチューニング
Backend --> Transformers : 出力結果
Transformers --> Hub : ファインチューニング済みモデルをアップロード
}
@enduml
この図のポイント
左側が 推論だけのシンプルフロー
右側が 学習+ファインチューニング後の再公開フロー
Hub を中心に「取得」「アップロード」、Spaces で「ブラウザ利用」、Backend で「計算」を整理
推論フローは軽く、学習フローはやや複雑だと一目でわかる
希望なら次に、エラーがよく起きる箇所をこの図に追加して注意点付きのフロー にして、Hugging Face を使うときに「どこでつまずきやすいか」を可視化できます。
作りますか?
はい。
ChatGPT:
では、先ほどの「推論フロー / 学習+再公開フロー」に よく起きるエラー箇所と注意点 を追加した PlantUML 図を作ります。
この図のポイント
各コンポーネントに「よくあるエラーと注意点」を付加
Hub:ネットワーク、名前間違い
Datasets:形式・ダウンロード
Tokenizers:モデル非対応
Transformers:バージョン・入力不一致
Backend:CUDA・GPUメモリ
Spaces:モデル未ロード、データ未対応
推論フローと学習フローの両方に注意点を示している
これを見るだけで「どこでつまずきやすいか」が直感的にわかる
希望であれば、次に 「対策や解決策」まで一枚で示すフロー図 に拡張して、エラー → 対策までセットで確認できる形にできます。
作りますか?
はい。
ChatGPT:
では、先ほどの図に 「よくあるエラー」と「対応策」 を追加して、一枚で見えるようにします。
この図のポイント
推論フロー / 学習フローを両方表示
各ステップに「よくあるエラー」と「対応策」を明示
この図だけで
「どこでエラーが出やすいか」
「どう対処すればよいか」
が一目でわかる
希望であれば、次に 「Hugging Face を始めるための最小セットの Python コード」 もこのフローに沿って作成して、図を見ながら手を動かせる形にできます。
作りますか?
はい。
ChatGPT:
では、先ほどのフロー図に沿って Hugging Face を始める最小限の Python コード例 を作ります。
- 環境準備(仮想環境推奨)
# 仮想環境作成(Linux/Mac)
python -m venv hf_env
source hf_env/bin/activate
# 仮想環境作成(Windows)
python -m venv hf_env
hf_env\Scripts\activate
# ライブラリインストール
pip install --upgrade pip
pip install transformers datasets torch
'2. 推論の最小コード例(文章分類)
from transformers import pipeline
# 学習済みモデルをHubから取得(推論用)
classifier = pipeline("sentiment-analysis")
# 推論
result = classifier("Hugging Face は便利です!")
print(result)
# [{'label': 'POSITIVE', 'score': 0.999}]
Hub から自動でモデルとトークナイザーがダウンロードされます。
'3. データセットを使った簡単な確認
from datasets import load_dataset
# データセット取得(IMDB映画レビュー)
dataset = load_dataset("imdb")
print(dataset['train'][0])
- ファインチューニングの最小例(文章分類)
from transformers import AutoModelForSequenceClassification, Trainer, TrainingArguments, AutoTokenizer
# モデルとTokenizer取得
model_name = "distilbert-base-uncased"
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)
tokenizer = AutoTokenizer.from_pretrained(model_name)
# データセット前処理
def preprocess(example):
return tokenizer(example['text'], truncation=True, padding='max_length')
dataset = load_dataset("imdb")
tokenized_dataset = dataset.map(preprocess, batched=True)
# 学習設定
training_args = TrainingArguments(
output_dir="./results",
evaluation_strategy="epoch",
learning_rate=2e-5,
per_device_train_batch_size=8,
num_train_epochs=1,
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_dataset["train"].shuffle().select(range(1000)), # サンプル数制限
eval_dataset=tokenized_dataset["test"].shuffle().select(range(200)),
)
# 学習
trainer.train()
# ファインチューニング済みモデルをHubにアップロード可能
# trainer.push_to_hub("my-finetuned-imdb")
このコードのポイント
推論は pipeline だけで簡単に利用可能
データセットのロードも一行で可能
ファインチューニングは Trainer + TrainingArguments を使うと簡単
Hub に再アップロードも一行で可能
このコードは 先ほどの図のフロー に完全対応しています:
Hub から取得 → Tokenizer → Transformers → Backend → 推論 / 学習 → 再アップロード
希望であれば、次に このコードとフロー図を組み合わせて「ステップごとに注意点をコメント」した完全版テンプレート を作って、初心者でも安全に始められる形にできます。
作りますか?
はい。
ChatGPT:
では、先ほどの フロー図+コード を統合して、ステップごとに注意点・よくあるエラー・対策をコメント付き にした「初心者向け安全テンプレート」を作ります。
# ============================================
# Hugging Face 安全テンプレート
# 推論 + 学習 + 再公開フロー対応
# ============================================
# 1. 環境準備(仮想環境推奨)
# ------------------------------------------------
# 推奨:Python 3.9+, 仮想環境(vnev, conda)
# 注意:ライブラリバージョン不一致でエラーになりやすい
# 対策:pip install で最新版 transformers, datasets, torch を使用
# ------------------------------------------------
# pip install --upgrade pip
# pip install transformers datasets torch
# ============================================
# 2. Hub から学習済みモデルを取得(推論)
# ============================================
from transformers import pipeline
# エラー注意:モデル名間違い、ネットワーク制限
# 対策:正しいモデル名確認、プロキシ/VPN設定
classifier = pipeline("sentiment-analysis")
# 推論サンプル
result = classifier("Hugging Face は便利です!")
print("推論結果:", result)
# [{'label': 'POSITIVE', 'score': 0.999}]
# ============================================
# 3. データセット取得と確認
# ============================================
from datasets import load_dataset
# エラー注意:形式不一致、ダウンロード失敗
# 対策:ローカル保存も可能
dataset = load_dataset("imdb")
print("サンプルデータ:", dataset['train'][0])
# ============================================
# 4. Tokenizer による前処理
# ============================================
from transformers import AutoModelForSequenceClassification, AutoTokenizer
model_name = "distilbert-base-uncased"
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)
tokenizer = AutoTokenizer.from_pretrained(model_name)
# エラー注意:Tokenizerがモデル非対応
# 対策:モデルに対応したTokenizerを使用
def preprocess(example):
return tokenizer(example['text'], truncation=True, padding='max_length')
tokenized_dataset = dataset.map(preprocess, batched=True)
# ============================================
# 5. 学習 / ファインチューニング
# ============================================
from transformers import Trainer, TrainingArguments
# エラー注意:GPU未対応, CUDA問題, メモリ不足
# 対策:GPU版PyTorch/TensorFlow導入、batch_size調整
training_args = TrainingArguments(
output_dir="./results",
evaluation_strategy="epoch",
learning_rate=2e-5,
per_device_train_batch_size=8, # メモリが足りなければ小さく
num_train_epochs=1,
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_dataset["train"].shuffle().select(range(1000)), # サンプル制限
eval_dataset=tokenized_dataset["test"].shuffle().select(range(200)),
)
# 学習実行
trainer.train()
# ============================================
# 6. 学習済みモデルをHubにアップロード
# ============================================
# エラー注意:Hub認証, モデル名重複
# 対策:Hugging Faceアカウントでログイン, ユニークなモデル名
# trainer.push_to_hub("my-finetuned-imdb")
# ============================================
# 7. 推論結果をSpaces / Webで表示
# ============================================
# エラー注意:モデル未ロード、データ未対応
# 対策:事前にモデルをロード、データ形式を確認
# Spaces上では pipeline() で簡単に推論可能
このテンプレートのポイント
フロー図の順番通りにコードを配置
Hub → Datasets → Tokenizer → Transformers → Backend → Spaces
各ステップにエラー注意と対策コメント付き
最小限で動くコードをベースに拡張可能
初心者が安全に Hugging Face を始められる
希望であれば、このテンプレートを PlantUML 図と並列表示して「図+コードで学べる」学習資料形式 に整形することもできます。
作りますか?
はい。
ChatGPT:
では、先ほどの フロー図+コードテンプレート を組み合わせて、「図+コードで学ぶ Hugging Face 学習資料」 にします。
この図+コード資料の特徴
フロー図の各ステップに「コード例+注意点」付き
推論・学習・再公開・Web表示まで 一目で理解可能
初心者が 図を見ながら安全に Hugging Face を操作できる
図は PlantUML で生成でき、PDF化やドキュメント化も容易
もし希望なら、次に この資料を Jupyter Notebook に落とし込んで「セルごとに図+コード」を動かせる形 にすることもできます。
作りますか?
はい。
ChatGPT:
では、この 図+コード学習資料 を Jupyter Notebook 用に変換し、セルごとに図+コードを動かせる形式 に整形します。
# ============================================
# Hugging Face 学習用 Notebook
# 図+コードで学べるフロー
# ============================================
# 必要ライブラリインストール(最初のセル)
# !pip install --upgrade pip
# !pip install transformers datasets torch plantuml
# ============================================
# 1. PlantUML 図の表示
# ============================================
from IPython.display import Image, display
import os
# PlantUML で生成したPNGを表示する場合
# 事前にplantumlコマンドで生成した図を保存しておく
if os.path.exists("huggingface_flow.png"):
display(Image("huggingface_flow.png"))
else:
print("PlantUMLで図を生成して hugingface_flow.png を用意してください")
# ============================================
# 2. 推論の最小例
# ============================================
from transformers import pipeline
# Hub から学習済みモデルを取得
classifier = pipeline("sentiment-analysis")
result = classifier("Hugging Face は便利です!")
print("推論結果:", result)
# ============================================
# 3. データセット取得と確認
# ============================================
from datasets import load_dataset
dataset = load_dataset("imdb")
print("サンプルデータ:", dataset['train'][0])
# ============================================
# 4. Tokenizer による前処理
# ============================================
from transformers import AutoModelForSequenceClassification, AutoTokenizer
model_name = "distilbert-base-uncased"
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)
tokenizer = AutoTokenizer.from_pretrained(model_name)
def preprocess(example):
return tokenizer(example['text'], truncation=True, padding='max_length')
tokenized_dataset = dataset.map(preprocess, batched=True)
# ============================================
# 5. 学習 / ファインチューニング
# ============================================
from transformers import Trainer, TrainingArguments
training_args = TrainingArguments(
output_dir="./results",
evaluation_strategy="epoch",
learning_rate=2e-5,
per_device_train_batch_size=8,
num_train_epochs=1,
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_dataset["train"].shuffle().select(range(1000)),
eval_dataset=tokenized_dataset["test"].shuffle().select(range(200)),
)
# 学習実行
trainer.train()
# ============================================
# 6. ファインチューニング済みモデルをHubにアップロード
# ============================================
# trainer.push_to_hub("my-finetuned-imdb")
# ============================================
# 7. 推論結果をSpaces / Webで確認
# ============================================
result2 = classifier("ファインチューニング後のモデルで推論")
print("推論結果:", result2)
この Notebook の特徴
セルごとにフローに対応
図 → 推論 → データ → Tokenizer → 学習 → アップロード → Web確認
注意点コメント付き
エラー予防、GPU対応、モデル・データ形式など
図とコードを同時に確認可能
初心者でも「どこで何をするか」が直感的に理解できる
拡張可能
別のモデル・データセット・Spaces で実行して学習フローを体験可能
希望であれば、次に この Notebook 用に「各セルに注意点+対策リスト」をMarkdownセルで整理して、完全に図+コード+チェックリスト形式」に整備 することもできます。
作りますか?
はい。
ChatGPT:
では、先ほどの Notebook を 完全に「図+コード+注意点チェックリスト」形式 に整備した例を作ります。
これにより、各ステップで「何をするか」「エラー注意点」「対策」 が一目でわかります。
# ============================================
# Hugging Face 図+コード+チェックリスト Notebook
# ============================================
# 必要ライブラリ(最初のセル)
# !pip install --upgrade pip
# !pip install transformers datasets torch plantuml
# ============================================
# 1. PlantUML 図の表示
# ============================================
from IPython.display import Image, display
import os
# PlantUML で生成したPNGを表示
if os.path.exists("huggingface_flow.png"):
display(Image("huggingface_flow.png"))
else:
print("PlantUMLで図を生成して huggingface_flow.png を用意してください")
# ============================================
# 2. 推論(Pipeline) + 注意点チェックリスト
# ============================================
from transformers import pipeline
# 推論用 pipeline 作成
# Hub から学習済みモデルを自動取得
classifier = pipeline("sentiment-analysis")
# 注意点チェックリスト
# [ ] モデル名が正しいか
# [ ] ネットワーク接続は問題ないか
# [ ] Python / transformers バージョン互換性
# 推論実行
result = classifier("Hugging Face は便利です!")
print("推論結果:", result)
# ============================================
# 3. データセット取得 + 注意点
# ============================================
from datasets import load_dataset
dataset = load_dataset("imdb")
# 注意点チェックリスト
# [ ] データ形式は正しいか
# [ ] ダウンロード失敗時はローカルに保存
# [ ] 学習に必要な量を確保
print("サンプルデータ:", dataset['train'][0])
# ============================================
# 4. Tokenizer 前処理 + 注意点
# ============================================
from transformers import AutoModelForSequenceClassification, AutoTokenizer
model_name = "distilbert-base-uncased"
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)
tokenizer = AutoTokenizer.from_pretrained(model_name)
def preprocess(example):
return tokenizer(example['text'], truncation=True, padding='max_length')
tokenized_dataset = dataset.map(preprocess, batched=True)
# 注意点チェックリスト
# [ ] モデルに対応したTokenizerを使用
# [ ] truncation/padding の設定確認
# ============================================
# 5. 学習 / ファインチューニング + 注意点
# ============================================
from transformers import Trainer, TrainingArguments
training_args = TrainingArguments(
output_dir="./results",
evaluation_strategy="epoch",
learning_rate=2e-5,
per_device_train_batch_size=8, # GPUメモリに合わせて調整
num_train_epochs=1,
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_dataset["train"].shuffle().select(range(1000)), # サンプル制限
eval_dataset=tokenized_dataset["test"].shuffle().select(range(200)),
)
# 注意点チェックリスト
# [ ] GPUが利用可能か
# [ ] batch_sizeを調整してメモリ不足回避
# [ ] transformers/torch のバージョン互換性
trainer.train()
# ============================================
# 6. ファインチューニング済みモデルを Hub にアップロード + 注意点
# ============================================
# 注意点チェックリスト
# [ ] Hugging Faceアカウントでログイン済みか
# [ ] モデル名はユニークか
# [ ] アップロード前に学習結果を確認済みか
# trainer.push_to_hub("my-finetuned-imdb")
# ============================================
# 7. 推論結果をSpaces / Webで確認 + 注意点
# ============================================
result2 = classifier("ファインチューニング後のモデルで推論")
print("推論結果:", result2)
# 注意点チェックリスト
# [ ] モデルは事前ロード済みか
# [ ] データ形式はSpaces上でも対応しているか
この形式の特徴
図+コード+チェックリスト を全ステップに統合
初心者でも順番に実行 すれば安全に Hugging Face を体験可能
各ステップのエラーと対策 がすぐに確認できる
推論・学習・再公開・Web表示 まで完全カバー
希望であれば、次に この Notebook をさらに「ステップごとに図とコードを同じセル内で表示」する形式 にして、学習フローが視覚的に理解できる 完全一体型教材 に進化させることもできます。
作りますか?
はい。
ChatGPT:
では、先ほどの Notebook をさらに進化させて、「ステップごとに図+コード+注意点チェックリストを同一セル内で表示」する完全一体型教材 に整形します。
こうすることで、学習フローが視覚的に直感的に理解できます。
# ============================================
# Hugging Face 完全一体型教材 Notebook
# 図+コード+チェックリスト
# ============================================
# 必要ライブラリ
# !pip install --upgrade pip
# !pip install transformers datasets torch plantuml IPython
from IPython.display import Image, display
from transformers import pipeline, AutoModelForSequenceClassification, AutoTokenizer, Trainer, TrainingArguments
from datasets import load_dataset
import os
# --------------------------------------------
# 0. PlantUML 図の表示
# --------------------------------------------
if os.path.exists("huggingface_flow.png"):
display(Image("huggingface_flow.png"))
else:
print("PlantUMLで図を生成して huggingface_flow.png を用意してください")
# ============================================
# 1. 推論(Pipeline) + 注意点チェックリスト
# ============================================
print("\n=== 推論ステップ ===")
# 推論用 pipeline 作成
classifier = pipeline("sentiment-analysis")
result = classifier("Hugging Face は便利です!")
print("推論結果:", result)
# チェックリスト
print("\n[注意点チェックリスト]")
print("[ ] モデル名が正しいか")
print("[ ] ネットワーク接続は問題ないか")
print("[ ] Python / transformers バージョン互換性")
# ============================================
# 2. データセット取得 + 注意点
# ============================================
print("\n=== データセット取得ステップ ===")
dataset = load_dataset("imdb")
print("サンプルデータ:", dataset['train'][0])
print("\n[注意点チェックリスト]")
print("[ ] データ形式は正しいか")
print("[ ] ダウンロード失敗時はローカルに保存")
print("[ ] 学習に必要な量を確保")
# ============================================
# 3. Tokenizer 前処理 + 注意点
# ============================================
print("\n=== Tokenizer 前処理ステップ ===")
model_name = "distilbert-base-uncased"
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)
tokenizer = AutoTokenizer.from_pretrained(model_name)
def preprocess(example):
return tokenizer(example['text'], truncation=True, padding='max_length')
tokenized_dataset = dataset.map(preprocess, batched=True)
print("Tokenizedサンプル:", tokenized_dataset['train'][0])
print("\n[注意点チェックリスト]")
print("[ ] モデルに対応したTokenizer使用")
print("[ ] truncation/padding の設定確認")
# ============================================
# 4. 学習 / ファインチューニング + 注意点
# ============================================
print("\n=== 学習 / ファインチューニングステップ ===")
training_args = TrainingArguments(
output_dir="./results",
evaluation_strategy="epoch",
learning_rate=2e-5,
per_device_train_batch_size=8,
num_train_epochs=1,
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_dataset["train"].shuffle().select(range(1000)),
eval_dataset=tokenized_dataset["test"].shuffle().select(range(200)),
)
trainer.train()
print("\n[注意点チェックリスト]")
print("[ ] GPUが利用可能か")
print("[ ] batch_sizeを調整してメモリ不足回避")
print("[ ] transformers/torch のバージョン互換性")
# ============================================
# 5. ファインチューニング済みモデルを Hub にアップロード + 注意点
# ============================================
print("\n=== モデルアップロードステップ ===")
# trainer.push_to_hub("my-finetuned-imdb") # 実行する場合アンコメント
print("\n[注意点チェックリスト]")
print("[ ] Hugging Faceアカウントでログイン済みか")
print("[ ] モデル名はユニークか")
print("[ ] アップロード前に学習結果を確認済みか")
# ============================================
# 6. 推論結果をSpaces / Webで確認 + 注意点
# ============================================
print("\n=== Web/Spaces 推論ステップ ===")
result2 = classifier("ファインチューニング後のモデルで推論")
print("推論結果:", result2)
print("\n[注意点チェックリスト]")
print("[ ] モデルは事前ロード済みか")
print("[ ] データ形式はSpaces上でも対応しているか")
この一体型教材の特徴
図 + コード + チェックリスト を一つのセルで確認可能
推論 → データ → Tokenizer → 学習 → Hub → Web の 全ステップを直感的に理解
初心者が安全に実行可能、エラー箇所と対策がすぐわかる
Notebook 上で順番に実行すれば、Hugging Face の全体像を体験できる
必要であれば、次に この Notebook 用に「ステップごとに図内に矢印で注意点アイコンを追加した PlantUML」 を作って、より視覚的にエラー箇所がわかる教材に進化させることもできます。
作りますか?
はい。
ChatGPT:
では、先ほどの一体型 Notebook に対応して、PlantUML 図上に「注意点アイコン/マーク」を追加して、各ステップでよく起きるエラーや注意点を直感的にわかるようにした教材用図 を作ります。
この図の特徴
各ステップに注意マーク ⚠ と対応策 ✅ を追加
推論・学習・再公開・Web表示までの全フローを網羅
図だけで「どこでエラーが起きやすいか」と「どう対処すればよいか」が直感的にわかる
先ほどの Notebook とセットで使えば、図+コード+チェックリスト の完全教材になる
希望であれば、この図を Notebook 内で直接表示 できるように PlantUML を Python からレンダリングして、図とコードを同時に学べる形式 にすることも可能です。
作りますか?
はい。
ChatGPT:
では、先ほどの 注意点付き PlantUML 図 を Python から Notebook 内で直接レンダリングし、図+コード+チェックリストを同時に学べる形式 にします。
# ============================================
# Hugging Face 完全教材:Notebook内で図+コード表示
# ============================================
# 必要ライブラリ
# !pip install plantuml transformers datasets torch IPython
from IPython.display import Image, display
import subprocess
import os
# ============================================
# 1. PlantUML コード作成
# ============================================
plantuml_code = """
@startuml
!define RECTANGLE class
title Hugging Face 完全フロー(注意点付き)
RECTANGLE "Hugging Face Hub" as Hub {
note right
⚠ ネットワーク制限、モデル名タイプミス
✅ 対策: モデル名確認、VPN/プロキシ設定
end note
}
RECTANGLE "Datasets" as Datasets {
note right
⚠ データ形式不一致、ダウンロード失敗
✅ 対策: データ形式確認、ローカル保存
end note
}
RECTANGLE "Tokenizers" as Tokenizers {
note right
⚠ モデル非対応、トークナイズ失敗
✅ 対策: モデルに対応したTokenizer使用
end note
}
RECTANGLE "Transformers" as Transformers {
note right
⚠ バージョン不一致、入力形式ミス
✅ 対策: 推奨バージョン確認、入力形式チェック
end note
}
RECTANGLE "Backend\\n(PyTorch / TensorFlow)" as Backend {
note right
⚠ CUDA未対応、GPUメモリ不足
✅ 対策: GPU版導入、batch_size調整
end note
}
RECTANGLE "Spaces / Web" as Spaces {
note right
⚠ モデル未ロード、データ未対応
✅ 対策: 事前ロード、データ形式確認
end note
}
' フロー
Hub --> Transformers : 学習済みモデル取得
Hub --> Datasets : データセット取得
Datasets --> Tokenizers : 前処理
Tokenizers --> Transformers : モデル入力
Transformers --> Backend : 学習/推論
Backend --> Transformers : 出力
Transformers --> Hub : ファインチューニング済みモデルアップロード
Transformers --> Spaces : Web表示
Datasets --> Spaces : データ表示
@enduml
"""
# PlantUML ファイルに保存
with open("hf_flow.puml", "w", encoding="utf-8") as f:
f.write(plantuml_code)
# ============================================
# 2. PlantUML を PNG に変換
# ============================================
# plantuml コマンドが PATH にあることが前提
subprocess.run(["plantuml", "hf_flow.puml"])
# ============================================
# 3. Notebook 内で図を表示
# ============================================
if os.path.exists("hf_flow.png"):
display(Image("hf_flow.png"))
else:
print("PlantUML で図の生成に失敗しました。plantuml コマンドを確認してください。")
この形式の特徴
Notebook 内で図を生成して表示可能
図+コード+注意点チェックリスト が同じ Notebook で確認できる
推論・学習・再公開・Web表示の全フロー を直感的に理解できる
PlantUML コードをそのまま更新すれば図も即反映
希望であれば、次に この Notebook を完全に「ステップごとに図とコードとチェックリストを一つのセル内で連動」するインタラクティブ教材 にすることもできます。
作りますか?
はい。
ChatGPT:
では、最終ステップとして、ステップごとに「図+コード+注意点チェックリスト」を一体化して連動表示するインタラクティブ教材形式 を作ります。
こうすることで、各ステップを順番に実行しながら、どこで何をするか、注意点や対策も同時に確認できます。
# ============================================
# Hugging Face インタラクティブ教材
# 図 + コード + 注意点チェックリスト連動表示
# ============================================
# 必要ライブラリ
# !pip install transformers datasets torch IPython plantuml
from IPython.display import Image, display, Markdown
from transformers import pipeline, AutoModelForSequenceClassification, AutoTokenizer, Trainer, TrainingArguments
from datasets import load_dataset
import subprocess
import os
# ============================================
# PlantUML 図作成関数
# ============================================
def generate_uml_diagram(uml_path="hf_flow.puml", png_path="hf_flow.png"):
plantuml_code = """
@startuml
!define RECTANGLE class
title Hugging Face 完全フロー(注意点付き)
RECTANGLE "Hub" as Hub {
note right
⚠ ネットワーク制限、モデル名タイプミス
✅ モデル名確認、VPN/プロキシ設定
end note
}
RECTANGLE "Datasets" as Datasets {
note right
⚠ データ形式不一致、ダウンロード失敗
✅ データ形式確認、ローカル保存
end note
}
RECTANGLE "Tokenizers" as Tokenizers {
note right
⚠ モデル非対応、トークナイズ失敗
✅ モデルに対応したTokenizer使用
end note
}
RECTANGLE "Transformers" as Transformers {
note right
⚠ バージョン不一致、入力形式ミス
✅ 推奨バージョン確認、入力形式チェック
end note
}
RECTANGLE "Backend\\n(PyTorch / TensorFlow)" as Backend {
note right
⚠ CUDA未対応、GPUメモリ不足
✅ GPU版導入、batch_size調整
end note
}
RECTANGLE "Spaces / Web" as Spaces {
note right
⚠ モデル未ロード、データ未対応
✅ 事前ロード、データ形式確認
end note
}
Hub --> Transformers : 学習済みモデル取得
Hub --> Datasets : データセット取得
Datasets --> Tokenizers : 前処理
Tokenizers --> Transformers : モデル入力
Transformers --> Backend : 学習/推論
Backend --> Transformers : 出力
Transformers --> Hub : アップロード
Transformers --> Spaces : Web表示
Datasets --> Spaces : データ表示
@enduml
"""
with open(uml_path, "w", encoding="utf-8") as f:
f.write(plantuml_code)
subprocess.run(["plantuml", uml_path])
if os.path.exists(png_path):
display(Image(png_path))
else:
print("PlantUML 図の生成に失敗しました。")
# ============================================
# 1. 図を表示
# ============================================
display(Markdown("## Step 1: Hugging Face フロー図"))
generate_uml_diagram()
# ============================================
# 2. 推論(Pipeline) + 注意点
# ============================================
display(Markdown("## Step 2: 推論(Pipeline)"))
classifier = pipeline("sentiment-analysis")
result = classifier("Hugging Face は便利です!")
print("推論結果:", result)
display(Markdown("""
**注意点チェックリスト**
- [ ] モデル名が正しいか
- [ ] ネットワーク接続は問題ないか
- [ ] Python / transformers バージョン互換性
"""))
# ============================================
# 3. データセット取得 + 注意点
# ============================================
display(Markdown("## Step 3: データセット取得"))
dataset = load_dataset("imdb")
print("サンプルデータ:", dataset['train'][0])
display(Markdown("""
**注意点チェックリスト**
- [ ] データ形式は正しいか
- [ ] ダウンロード失敗時はローカル保存
- [ ] 学習に必要な量を確保
"""))
# ============================================
# 4. Tokenizer 前処理 + 注意点
# ============================================
display(Markdown("## Step 4: Tokenizer 前処理"))
model_name = "distilbert-base-uncased"
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)
tokenizer = AutoTokenizer.from_pretrained(model_name)
def preprocess(example):
return tokenizer(example['text'], truncation=True, padding='max_length')
tokenized_dataset = dataset.map(preprocess, batched=True)
print("Tokenizedサンプル:", tokenized_dataset['train'][0])
display(Markdown("""
**注意点チェックリスト**
- [ ] モデルに対応したTokenizer使用
- [ ] truncation/padding の設定確認
"""))
# ============================================
# 5. 学習 / ファインチューニング + 注意点
# ============================================
display(Markdown("## Step 5: 学習 / ファインチューニング"))
training_args = TrainingArguments(
output_dir="./results",
evaluation_strategy="epoch",
learning_rate=2e-5,
per_device_train_batch_size=8,
num_train_epochs=1,
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_dataset["train"].shuffle().select(range(1000)),
eval_dataset=tokenized_dataset["test"].shuffle().select(range(200)),
)
trainer.train()
display(Markdown("""
**注意点チェックリスト**
- [ ] GPUが利用可能か
- [ ] batch_sizeを調整してメモリ不足回避
- [ ] transformers/torch バージョン互換性
"""))
# ============================================
# 6. Hub アップロード + 注意点
# ============================================
display(Markdown("## Step 6: Hub アップロード"))
# trainer.push_to_hub("my-finetuned-imdb") # 実行する場合アンコメント
display(Markdown("""
**注意点チェックリスト**
- [ ] Hugging Faceアカウントでログイン済みか
- [ ] モデル名はユニークか
- [ ] アップロード前に学習結果を確認済みか
"""))
# ============================================
# 7. Web / Spaces 推論 + 注意点
# ============================================
display(Markdown("## Step 7: Web/Spaces 推論"))
result2 = classifier("ファインチューニング後のモデルで推論")
print("推論結果:", result2)
display(Markdown("""
**注意点チェックリスト**
- [ ] モデルは事前ロード済みか
- [ ] データ形式はSpaces上でも対応しているか
"""))
この形式の特徴
図+コード+注意点をセルごとに連動表示
インタラクティブに順番に実行可能
各ステップでつまずきやすい箇所と対策が即確認できる
初心者が Hugging Face の推論・学習・再公開・Web表示を一目で理解できる
これで、完全に図+コード+チェックリストを統合したインタラクティブ教材 が完成します。
Hugging FaceとGoogle Colabの関係をご紹介ください。
ChatGPT:
もちろんです。Hugging Face と Google Colab の関係を整理すると、「クラウド上で手軽に Hugging Face のモデルを使える環境を提供する」という観点で非常に親和性が高い」 という点に集約されます。以下、ポイントごとに詳しく説明します。
- Hugging Face と Google Colab の基本関係
項目 説明
Hugging Face AIモデル(Transformers、Datasets、Tokenizers など)や学習済みモデルの Hub を提供するプラットフォーム
Google Colab 無料で GPU/TPU が利用できるクラウド Jupyter Notebook 環境
関係性 Colab 上で Hugging Face のライブラリをインストールし、Hub からモデルをロード、推論・学習・ファインチューニングを実行可能
Colab では Python 環境が即利用できるため、Hugging Face のセットアップも簡単です。
GPU/TPU が使えるので、Transformer モデルの推論・学習もローカルより高速。- 実際の利用イメージ
# Colab で Hugging Face を使う例
!pip install transformers datasets torch
from transformers import pipeline
# 推論
classifier = pipeline("sentiment-analysis")
result = classifier("Google Colab で Hugging Face を試しています!")
print(result)
上記のコードを Colab 上でそのまま実行可能
GPU を有効化すると推論速度が大幅に向上
Hugging Face Hub のモデルを ダウンロード・ロード してすぐ利用可能
3. Google Colab のメリット
無料で GPU/TPU が利用可能
Transformer 系モデルの推論・学習が高速化
環境構築不要
Hugging Face の Python ライブラリを Colab ノートブックで簡単にインストール
クラウド上で共有可能
学習コードや結果をリンクで共有できる
Hugging Face Hub と連携しやすい
モデルのアップロード、ダウンロード、Datasets の利用も容易
4. Hugging Face Hub と Colab の連携例
フロー Colab での操作
モデル取得 from transformers import AutoModelForSequenceClassification などで Hub からロード
データセット取得 from datasets import load_dataset で Colab 上で直接利用
ファインチューニング Trainer + TrainingArguments で Colab 上で学習
再公開 trainer.push_to_hub("my-model") で Colab から直接アップロード
推論結果表示 Colab 上で即座に可視化(Markdown, print, matplotlib など)
5. 補足
Colab Pro/Pro+ を利用すると、長時間学習や大きな GPU メモリが必要なモデルにも対応可能
Hugging Face の Spaces で作った Web アプリも、Colab 上で動作確認可能
Colab は一時的な環境なので、学習済みモデルやデータは Hub か Google Drive に保存するのが一般的
まとめると、Hugging Face は AI モデルやデータのプラットフォーム、Colab はそれをクラウド上で手軽に動かす環境 という関係で、両者の組み合わせにより「環境構築不要で GPU 推論・学習がすぐに体験できる」という利点があります。
希望であれば、この関係を PlantUML で図にしてフロー表示 し、Hugging Face の Hub 〜 Colab 〜 推論・学習・再公開までの流れを視覚化することもできます。
作りますか?
はい。
ChatGPT:
では、Hugging Face と Google Colab の関係を PlantUML で図解したフロー図 を作ります。
これにより、「Hub → Colab → 推論・学習 → 再公開」の流れが視覚的に理解できます。
図の特徴
Hub → Colab → 推論・学習 → 再公開 の流れを明示
各ステップに 注意点 ⚠ と対策 ✅ を表示
Colab が Hub からモデルを取得して実行する環境 であることが直感的に理解可能
ファインチューニング済みモデルの再公開も Hub 経由で行えることを視覚化
希望であれば、この図を Notebook 上で直接レンダリングし、図+コード+注意点チェックリストを連動表示する形式 に統合することもできます。
作りますか?
はい。
ChatGPT:
では、先ほどの Hugging Face × Google Colab フロー図 を Notebook 上で 直接レンダリングし、図+コード+注意点チェックリストを連動表示 する形式に統合します。
こうすることで、各ステップで何をするか、注意点・対策も同時に確認できるインタラクティブ教材になります。
# ============================================
# Hugging Face × Google Colab インタラクティブ教材
# 図 + コード + 注意点チェックリスト
# ============================================
# 必要ライブラリ
# !pip install transformers datasets torch IPython plantuml
from IPython.display import Image, display, Markdown
import subprocess
import os
from transformers import pipeline, AutoModelForSequenceClassification, AutoTokenizer, Trainer, TrainingArguments
from datasets import load_dataset
# ============================================
# 1. PlantUML 図作成関数
# ============================================
def generate_uml_diagram(uml_path="hf_colab_flow.puml", png_path="hf_colab_flow.png"):
plantuml_code = """
@startuml
!define RECTANGLE class
title Hugging Face × Google Colab フロー
RECTANGLE "Hugging Face Hub" as Hub {
note right
⚠ モデル名やバージョン間違いに注意
✅ Colab から簡単にモデル取得可能
end note
}
RECTANGLE "Google Colab" as Colab {
note right
⚠ 環境は一時的
✅ GPU/TPU で高速推論・学習可能
end note
}
RECTANGLE "推論 / 学習" as Train {
note right
⚠ GPUメモリ不足、バージョン不一致
✅ batch_size調整、推奨バージョン使用
end note
}
RECTANGLE "再公開 / Spaces" as Publish {
note right
⚠ モデル名重複、認証忘れ
✅ Hub に直接アップロード可能
end note
}
' フロー
Hub --> Colab : モデル・データセット取得
Colab --> Train : 推論・学習
Train --> Publish : ファインチューニング済みモデルアップロード
Publish --> Hub : Hub 上で共有・再利用可能
@enduml
"""
with open(uml_path, "w", encoding="utf-8") as f:
f.write(plantuml_code)
subprocess.run(["plantuml", uml_path])
if os.path.exists(png_path):
display(Image(png_path))
else:
print("PlantUML 図の生成に失敗しました。")
# ============================================
# 2. 図を表示
# ============================================
display(Markdown("## Step 1: Hugging Face × Colab フロー図"))
generate_uml_diagram()
# ============================================
# 3. 推論(Pipeline) + 注意点チェックリスト
# ============================================
display(Markdown("## Step 2: 推論(Pipeline)"))
classifier = pipeline("sentiment-analysis")
result = classifier("Google Colab 上で Hugging Face を試しています!")
print("推論結果:", result)
display(Markdown("""
**注意点チェックリスト**
- [ ] モデル名やバージョンを確認
- [ ] Colab の GPU/TPU を活用
- [ ] ネットワーク接続を確認
"""))
# ============================================
# 4. データセット取得 + 注意点
# ============================================
display(Markdown("## Step 3: データセット取得"))
dataset = load_dataset("imdb")
print("サンプルデータ:", dataset['train'][0])
display(Markdown("""
**注意点チェックリスト**
- [ ] データ形式確認
- [ ] ダウンロード失敗時はローカル保存
- [ ] 学習に必要な量を確保
"""))
# ============================================
# 5. Tokenizer 前処理 + 注意点
# ============================================
display(Markdown("## Step 4: Tokenizer 前処理"))
model_name = "distilbert-base-uncased"
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)
tokenizer = AutoTokenizer.from_pretrained(model_name)
def preprocess(example):
return tokenizer(example['text'], truncation=True, padding='max_length')
tokenized_dataset = dataset.map(preprocess, batched=True)
print("Tokenizedサンプル:", tokenized_dataset['train'][0])
display(Markdown("""
**注意点チェックリスト**
- [ ] モデルに対応したTokenizer使用
- [ ] truncation/padding 設定確認
"""))
# ============================================
# 6. 学習 / ファインチューニング + 注意点
# ============================================
display(Markdown("## Step 5: 学習 / ファインチューニング"))
training_args = TrainingArguments(
output_dir="./results",
evaluation_strategy="epoch",
learning_rate=2e-5,
per_device_train_batch_size=8,
num_train_epochs=1,
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_dataset["train"].shuffle().select(range(1000)),
eval_dataset=tokenized_dataset["test"].shuffle().select(range(200)),
)
trainer.train()
display(Markdown("""
**注意点チェックリスト**
- [ ] GPUメモリとbatch_sizeを確認
- [ ] transformers/torch バージョン互換性
"""))
# ============================================
# 7. Hub アップロード + 注意点
# ============================================
display(Markdown("## Step 6: Hub アップロード"))
# trainer.push_to_hub("my-finetuned-imdb") # 実行する場合アンコメント
display(Markdown("""
**注意点チェックリスト**
- [ ] Hugging Faceアカウントでログイン済みか
- [ ] モデル名はユニークか
- [ ] アップロード前に学習結果を確認
"""))
# ============================================
# 8. Web / Spaces 推論 + 注意点
# ============================================
display(Markdown("## Step 7: Web/Spaces 推論"))
result2 = classifier("Colab 上で再公開済みモデルを推論")
print("推論結果:", result2)
display(Markdown("""
**注意点チェックリスト**
- [ ] モデルは事前ロード済みか
- [ ] データ形式はSpaces上でも対応
"""))
この Notebook の特徴
図+コード+注意点チェックリストを連動表示
Hub → Colab → 推論・学習 → Hub/Spaces 再公開 のフローを一目で理解
各ステップで よくあるエラーと対策 を即確認可能
Colab 上で順番に実行すれば インタラクティブ教材としてそのまま学習可能
この形式により、Hugging Face と Google Colab の関係だけでなく、実践的な推論・学習・再公開フロー も同時に理解できます。
ChatGPT の回答は必ずしも正しいとは限りません。重要な情報は確認するようにしてください。
<この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。>
This article is an individual impression based on my individual experience. It has nothing to do with the organization or business to which I currently belong.
Este artículo es una impresión personal basada en mi experiencia personal. No tiene nada que ver con la organización o empresa a la que pertenezco actualmente.
文書履歴(document history)
ver. 0.01 初稿 20251001
最後までおよみいただきありがとうございました。
いいね 💚、フォローをお願いします。
Thank you very much for reading to the last sentence.
Please press the like icon 💚 and follow me for your happy life.
Muchas gracias por leer hasta la última oración.
Por favor, haz clic en el ícono Me gusta 💚 y sígueme para tener una vida feliz.