ghmagazine / llm-book Goto Github PK
View Code? Open in Web Editor NEW「大規模言語モデル入門」(2023)と「大規模言語モデル入門Ⅱ〜生成型LLMの実装と評価」(2024)のGitHubリポジトリ
License: Apache License 2.0
「大規模言語モデル入門」(2023)と「大規模言語モデル入門Ⅱ〜生成型LLMの実装と評価」(2024)のGitHubリポジトリ
License: Apache License 2.0
いつも参考にさせていただいております。
表題の件ですが、非常に細かいところなので本筋には影響がないと思いつつ念のため質問させていただきます。
ここではmodelとして"llm-book/bert-base-japanese-v3-jnli"を指定しているのですが、コメントでは# JSTSでファインチューニングしたモデルをpipelineで読み込む とあります。
これはJNLIではないでしょうか?
もし私の理解不足でしたら申し訳ございません。
7.3の評価指標のn-gramの説明で、以下の説明が何回か繰り返されています。確認したのは電子版なのですが、電子版だけかもしれません。
n=のときはユニグラム(unigram)、n=のときはバイグラム(bigram)、n=のときはトライグラム(trigram)..
素晴らしい書籍をありがとうございます。
6章でBERT-CRFまで触れて非常に学びとなりましたし、他の章を読むのも楽しみにしています。
6章で見かけた型ヒントなのですが、組み込み関数のanyを型ヒントに使っています。
https://github.com/ghmagazine/llm-book/blob/ca62baeda2f47af23ba79e7db84b76d6fb8abc1a/chapter6/6-named-entity-recognition.ipynb
def convert_results_to_labels(
results: list[dict[str, any]]
) -> tuple[list[list[str]], list[list[str]]]:
この部分をmypyで型チェックすると、以下のエラーが出力されます。
error: Function "builtins.any" is not valid as a type [valid-type]
組み込み関数anyは型ヒントに使えない(=現状の型ヒントが誤り)からで、typing.Any
を使うべきと考えます。
ref: https://docs.python.org/ja/3/library/typing.html#the-any-type
from typing import Any
def convert_results_to_labels(
results: list[dict[str, Any]]
) -> tuple[list[list[str]], list[list[str]]]:
組み込み関数anyを型ヒントに使っている箇所は6章のnotebookでは複数箇所見られました。
全9章となると使用箇所が多いかと思います。
ですが、読者が誤った型ヒントの書き方を学んでしまうのもよいことではないと思いますので、サンプルコードの型ヒントの修正をご検討いただけますと幸いです。
参考までに、上記の動作確認は
でしています。
2.2.4 の 式(2.17) の
Kindle 版で読んでいます。巻末に下記の記載がありました。
電子版発行日: 2023年7月29日 初版 第1刷発行
電子版更新日: 2023年8月1日 初版 第2刷発行
from datasets import load_dataset
dataset = load_dataset("llm-book/livedoor-news-corpus")
を実行しデータセットをHugging faceからダウンロードしようとしましたが、以下のようなエラーが発生しました。
Kaggle Notebookを利用しています。
File /opt/conda/lib/python3.10/site-packages/datasets/builder.py:480, in DatasetBuilder._info(self)
470 @abc.abstractmethod
471 def _info(self) -> DatasetInfo:
472 """Construct the DatasetInfo object. See `DatasetInfo` for details.
473
474 Warning: This function is only called once and the result is cached for all
(...)
478 info: (DatasetInfo) The dataset information
479 """
--> 480 raise NotImplementedError
NotImplementedError:
参考文献の[131]以降で、日本語の姓名が逆になっています。
from datasets import load_dataset
dataset = load_dataset("llm-book/livedoor-news-corpus")
を実行すると以下のエラーが発生します
File ~\.cache\huggingface\modules\datasets_modules\datasets\llm-book--livedoor-news-corpus\xxxx\livedoor-news-corpus.py:91 in (.0)
89 continue
90 with open(file_name, "r") as f:
---> 91 d = [line.strip() for line in f]
92 data.append(
93 {
94 "url": d[0],
(...)
99 }
100 )
102 if self.config.shuffle == True:
UnicodeDecodeError: 'cp932' codec can't decode byte 0x83 in position 96: illegal multibyte sequence
livedoor-news-corpus.pyの90行目を下記に修正したところ、解決しました
with open(file_name, "r", encoding="utf-8") as f:
最新のopenaiパッケージを使用すると9章のコードが動かない。コメントでどこか補足してもらうと良いかなと思いました。
新しいopenaiパッケージはAPIが変更されているため。
既存のコードを試しながら読む場合は意図的に古いバージョンを使用する。0.27で試して実行できることを確認しました(出力エラーを見ると0.28でも動きそう)。
!pip install datasets openai==0.27 tiktoken tqdm
openaiパッケージのバージョン
興味深く勉強させていただいております。
p125におきまして「5.2節ではTrainingArgumentsにgradient_accumulation_stepsの値を指定して~」との記述がありますが、参照先と思われる5.2節で掲載されているTrainingArgumentsのパラメータにはgradient_accumulation_stepsが含まれていないと思います。
特に実行などに問題がないものですが、念のためご報告させていただきました。
7.4.2でファインチューニングを行った後に以下のコードを実行するとその下のようなエラーが発生しました。
from torch.utils.data import DataLoader
from transformers import PreTrainedModel
def convert_list_dict_to_dict_list(list_dict: dict[str, list]) -> list[dict[str, list]]:
"""ミニバッチのデータを事例単位のlistに変換"""
dict_list = []
#dictのキーのリストを取得する
keys = list(list_dict.keys())
for idx in range(len(list_dict[keys[0]])): #各事例で処理する
#dictの各キーからデータを取り出してlistに追加する
dict_list.append({key: list_dict[key][idx] for key in keys})
return dict_list
def run_generation(dataloader: DataLoader, model: PreTrainedModel) -> list[dict[str, Any]]:
"""見出しを生成"""
generations = []
for batch in tqdm(dataloader): #各ミニバッチを処理する
#for k, v in batch.items():print(f"batch {batch}¥n key {k}¥n item{v}¥n¥n")
batch = {k: v.to(model.device) for k, v in batch.items()}
#見出しのトークンIDを生成する
batch["generated_title_ids"] = model.generate(**batch)
batch = {k: v.cpu().tolist() for k, v in batch.items()}
#ミニバッチのデータ事例単位のlistに変換する
generations += convert_list_dict_to_dict_list(batch)
return generations
#テストセットに対して前処理を行う
test_dataset = dataset["test"].map(
preprocess_data,
fn_kwargs={"tokenizer": tokenizer},
remove_columns=dataset["test"].column_names,
)
test_dataset = test_dataset.remove_columns(["labels"])
#ミニバッチの作成にDataLoaderを用いる
test_dataloader = DataLoader(
test_dataset,
batch_size=8,
shuffle=False,
collate_fn=data_collator,
)
#見出しを生成する
generations = run_generation(test_dataloader, model)
AttributeError Traceback (most recent call last)
[<ipython-input-19-2945c01206a3>](https://localhost:8080/#) in <cell line: 45>()
43 )
44 # 見出しを生成する
---> 45 generations = run_generation(test_dataloader, model)
1 frames
[<ipython-input-19-2945c01206a3>](https://localhost:8080/#) in <dictcomp>(.0)
20 generations = []
21 for batch in tqdm(dataloader): # 各ミニバッチを処理する
---> 22 batch = {k: v.to(model.device) for k, v in batch.items()}
23 # 見出しのトークンのIDを生成する
24 batch["generated_title_ids"] = model.generate(**batch)
AttributeError: 'NoneType' object has no attribute 'to'
DataLoaderの性質上、こうなってしまうようなのですが、何か解決策はありますでしょうか
2023/7/28 現在、MARC-ja のデータセットの配布元のリンクが切れてしまっています。
https://s3.amazonaws.com/amazon-reviews-pds/tsv/amazon_reviews_multilingual_JP_v1_00.tsv.gz
MARC-ja を使用するノートブックで、データセット読み込みの箇所でエラーが出る状態です。
問い合わせのメールを送り、復旧待機中です。
p158のIn[27]:ですが、最後の箇所で以下の記述が抜けてないでしょうか?
if best_score < scores["f1-score"]:
best_score = scores["f1-score"] #<--(抜け)
best_model = model
同様に、p172のIn[40]:の最後の箇所ですが、
if best_score < scores["f1-score"]:
best_score = scores["f1-score"] #<--(抜け)
best_model_crf = model_crf
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.