Giter Club home page Giter Club logo

llm-book's People

Contributors

ikuyamada avatar kosuke-yamada avatar ryokan0123 avatar singletongue avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

llm-book's Issues

コードの抜け

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

7.3の評価指標のn-gramの説明

7.3の評価指標のn-gramの説明で、以下の説明が何回か繰り返されています。確認したのは電子版なのですが、電子版だけかもしれません。

n=のときはユニグラム(unigram)、n=のときはバイグラム(bigram)、n=のときはトライグラム(trigram)..

第7章の見出し語生成ができない

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の性質上、こうなってしまうようなのですが、何か解決策はありますでしょうか

第7章 llm-book/livedoor-news-corpus がダウンロードできない

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: 

第9章サンプルコードのopenaiパッケージについて

  • 概要

最新のopenaiパッケージを使用すると9章のコードが動かない。コメントでどこか補足してもらうと良いかなと思いました。

  • 原因と対応策

新しいopenaiパッケージはAPIが変更されているため。

既存のコードを試しながら読む場合は意図的に古いバージョンを使用する。0.27で試して実行できることを確認しました(出力エラーを見ると0.28でも動きそう)。

!pip install datasets openai==0.27 tiktoken tqdm

  • 参考

openaiパッケージのバージョン

https://pypi.org/project/openai/#history

Windows環境で llm-book/livedoor-news-corpus を load_dataset()するとUnicodeDecodeError

発生した問題

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:

5.5.2 勾配累積 で説明内容で参照されているコードにgradient_accumulation_stepsがない

興味深く勉強させていただいております。
p125におきまして「5.2節ではTrainingArgumentsにgradient_accumulation_stepsの値を指定して~」との記述がありますが、参照先と思われる5.2節で掲載されているTrainingArgumentsのパラメータにはgradient_accumulation_stepsが含まれていないと思います。
特に実行などに問題がないものですが、念のためご報告させていただきました。

2.2.4 式(2.17) W_o の次元は D x D でなく、 D x MD が正しいのではないでしょうか?

概要

2.2.4 の 式(2.17) の $W_o$ の次元は $D \times D$ でなく $D \times MD$ が正しいのではないでしょうか?
$\left[ \right]$ の記法は厳密には定義されていないですが、 $M$ 個の $D$ 次元ベクトル $o_i^{(j)}$ を縦に並べるものとすると、 $W_o$$MD$ 次元のベクトルを $D$ 次元のベクトルにマッピングする行列になるので $D \times MD$ 次元であるのではないかと思いました。

image

版情報

Kindle 版で読んでいます。巻末に下記の記載がありました。

電子版発行日: 2023年7月29日 初版 第1刷発行
電子版更新日: 2023年8月1日 初版 第2刷発行

組み込み関数anyを使った型ヒントをtyping.Anyを使うように全部置き換えたい

素晴らしい書籍をありがとうございます。
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章となると使用箇所が多いかと思います。
ですが、読者が誤った型ヒントの書き方を学んでしまうのもよいことではないと思いますので、サンプルコードの型ヒントの修正をご検討いただけますと幸いです。

参考までに、上記の動作確認は

  • Python 3.10.9
  • mypy 1.2.0

でしています。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.