Giter VIP home page Giter VIP logo

bert-book's Issues

P.25 タイポ

P.25の最後から2行目で、h_i計算する際 -> h_i計算する際

pytorch_lightningのimport時のエラーについて

pytorch_lightningのimport時のエラーについて、最新のGitHubのコードを用いても解決できない場合はPythonまたはpytorchのバージョンが原因でしょうか?

それぞれのバージョン
python 3.7.13
pytorch 1.8.1

大変恐縮ではありますが、ご回答いただけると幸いです。

P34 タイポ

3.1.2の1段落目の3行目で、Scale -> Scaled

P46 タイポ

4-2のコードブロック内で、BertJapanese-Tokenizer -> BertJapaneseTokenizer

p.59 タイポ

コードブロック #5-5 コメント内 iput_ids -> input_ids

p36 タイポ

  1. Feedforward Networkの2行目で、
    Layer Normalizationであるべきところが「Layer Normalizatin」になっています。

6章 BERTによる文章分類 について

6-4

tokenizer = BertJapaneseTokenizer.from_pretrained(MODEL_NAME)
bert_sc = BertForSequenceClassification.from_pretrained(
MODEL_NAME, num_labels=2
)
bert_sc = bert_sc.cuda()

を実行すると、以下のようなエラーが出ます。(#7-5でも同じです)
コードを改訂して頂くことは可能でしょうか?

OSError Traceback (most recent call last)
in <cell line: 2>()
1 # 7-5
----> 2 tokenizer = BertJapaneseTokenizer.from_pretrained(MODEL_NAME)
3 bert_scml = BertForSequenceClassificationMultiLabel(
4 MODEL_NAME, num_labels=2
5 )

2 frames
/usr/local/lib/python3.10/dist-packages/transformers/utils/hub.py in get_from_cache(url, cache_dir, force_download, proxies, etag_timeout, resume_download, user_agent, use_auth_token, local_files_only)
490 # If we don't have any of those, raise an error.
491 if etag is None:
--> 492 raise OSError(
493 "Distant resource does not have an ETag, we won't be able to reliably ensure reproducibility."
494 )

OSError: Distant resource does not have an ETag, we won't be able to reliably ensure reproducibility.

#5-8 2つ以上の[MASK]を含む文章のときに起きている問題

出力時に
今日は[MASK]へ行く。
という文章になってしまい、
[MASK]が残る原因がわからない状況です。

またトークナイザとモデルをロードしたときに
Some weights of the model checkpoint at cl-tohoku/bert-base-japanese-whole-word-masking were not used when initializing BertForMaskedLM: ['cls.seq_relationship.bias', 'cls.seq_relationship.weight']

  • This IS expected if you are initializing BertForMaskedLM from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).
  • This IS NOT expected if you are initializing BertForMaskedLM from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).
    という警告文が表示されており、原因がわからないです。
    解決できる方がいましたら、助けていただきたいです。

P.121 タイポ BertForToeknClassification

BertForToeknClassification -> BertForTokenClassification と思われます。

同じタイポが3箇所あります。
本文の3行目と4行目、及び図8.2のキャプションです。

p.83 training_step と train_step

コードスニペット内ではtraining_stepとなっていますが、文章中ではtrain_stepとして参照されています。

P.28 図2.6(a)がない

P.28の一行目にて、図2.6(a)を参照していますが、図2.6の中に(a)が見当たらないように思います。

p.72 scoresの表示

#6-5 において、分類スコア(scores)を表示しようとしていますが、scoresのsizeを表示しています。また、コードでは"# scores:"を表示していますが、出力結果では"# size:"が出力されています。

第8章 BERTjapaneseTokenizer以外を使う場合について

NER_tokenizer_BIOをmLUKETokenizerやT5Tokenizerを使った日本語言語モデルでも使用したいと思っているのですが、うまく言っていません。どうすれば適切に修正、使用ができるのでしょうか?

お忙しいところ恐縮ですがご教授いただけると幸甚です。

再現性の担保(Chapter6)に関して

お世話になっております。
Chapter 6に関してご質問がございます。

p73に関して,ランダムな値が分類期に割り当てられているため,結果が異なるとありますが,こちらはどのように再現性を担保したら良いかご教授頂けると幸いです。

以下私が取り組んだものになりますが,

from transformers.trainer_utils import set_seed

# 6-4
seed=0
set_seed(seed)
torch.cuda.manual_seed_all(seed)
tokenizer = BertJapaneseTokenizer.from_pretrained(MODEL_NAME)
bert_sc = BertForSequenceClassification.from_pretrained(
    MODEL_NAME, num_labels=2
)
bert_sc = bert_sc.cuda()

%%time
# 6-5
text_list = [
    "この映画は面白かった。",
    "この映画の最後にはがっかりさせられた。",
    "この映画を見て幸せな気持ちになった。"
]
label_list = [1,0,1]

# データの符号化
encoding = tokenizer(
    text_list, 
    padding = 'longest',
    return_tensors='pt'
)
encoding = { k: v.cuda() for k, v in encoding.items() }
labels = torch.tensor(label_list).cuda()

# 推論
with torch.no_grad():
    output = bert_sc.forward(**encoding)
scores = output.logits # 分類スコア
labels_predicted = scores.argmax(-1) # スコアが最も高いラベル
num_correct = (labels_predicted==labels).sum().item() # 正解数
accuracy = num_correct/labels.size(0) # 精度

print("# scores:")
print(scores.size())
print("# predicted labels:")
print(labels_predicted)
print("# accuracy:")
print(accuracy)

としたところ再現性は担保できるようになりましたが,seedの値を変えても

# predicted labels:
tensor([1, 1, 1], device='cuda:0')

と全て同じ値となり,再現性の取り方について疑問を感じたため質問させていただきました。
何卒よろしくお願いいたします。

[第9章] 誤字訂正のやり方について

こんにちは。現在第九章のところは誤変換のエラータイプに対して、fine-tuningを介して修正できるようになっていると存じております。誤字、脱字の場合を対応できるようには、プログラムをどう修正すればよいのでしょうか。
それに関する資料を見つからずこちらで質問させていただきました。
恐縮ですが、ご教授いただければ幸いです。どうぞよろしくお願いいたします。

p.48 タイポ

#4-4 の下: マシーンラーニング -> マシンラーニング

【第二章】CBOWについて(p.19〜20)

"i"及び"j"という添字について少し混乱してしまったので教えて下さい。
以下の理解で問題ないでしょうか? 

①添字"i"は「ある文において登場する単語の順番」に相当する数字。よって、取り得る値の範囲は1≦i≦n(文の長さ)となる。
②添字"j"は「語彙に対して一意に割り当てられた」数字。よって、取り得る値の範囲は1≦j≦N(語彙数)となる。
※但し、「Wj」として表記した場合に取り得るのは、推定対象単語の周辺単語のみ(WjはCiの要素)。一方で、「Sj」と表記した場合に取り得るのは語彙全て。

つまり、例えばですが、i=3の単語Wi(=文の中で3番目に出て来た単語)とj=100の単語Wj(=語彙の中で100番目のIDが割り振られた単語)が、同じ単語を示していることがあり得る、との理解で構わないでしょうか?

p27 損失関数

「次の損失関数、」とありますが、式自体は尤度関数になっているようです。

論文の該当箇所を確認しましたが、

Our formulation jointly maximizes the log
likelihood of the forward and backward directions:

とありましたので、「損失関数」を「(対数)尤度関数」に変更する、もしくは「損失関数」の表記のままで式にマイナス記号をつけるのが適切ではないかと思いました。

typo p.118/p.128

タイポのレポートです。第1版 第1刷です。

1箇所目

p.118 L.3
「Tencent Holdings Limited」 -> 「Tencent Holdings Ltd」

2箇所目

p.128 L.15
〜再現率は下がってしまします。 -> 〜再現率は下がってしまいます。

[改善]P34 の $K^T$ と P37 の $E^T$ のフォントを変更するか、注釈がほしい

  • P34 では $^T$ が(おそらく)転置行列の意味で使われている
  • P37 では $^T$ が 単に記号として使われている

意味合いが別なのに同じ表記であるため、Tのフォントを変えるか、P34のどこかにAttention の式に現れるTは(ここでのみ)転置行列の意味合いだという注釈があると良いかもしれない。

P.78 タイポ

1段落目の最終行で、本項をを -> 本項を

p.179 タイポ

p.179の中段、 「アルゴリズムをを」->「アルゴリズムを」。

p.53 タイポ

本文中の num_hidden_layer -> num_hidden_layers, max_position_embedding -> max_position_embeddings

P.25 h_i -> y_i

P.25の説明で、何箇所かある出力y_iはすべてh_iかと思います。

第7章のマルチラベル分類のBERTモデルについて

書籍ではBertModelを利用した自作モデルを実装していますが、2023年現在ではBertForSequenceClassificationにてproblem_type="multi_label_classification"を指定するとマルチラベル分類ができるようです。

self.bert_scml = BertForSequenceClassification.from_pretrained(
    model_name, num_labels=num_labels, problem_type="multi_label_classification"
)

【第8章】encode_plus_untagged関数のtorch.Tensor変換について

encode_plus_untagged関数で、最後にtorch.Tensorに変換する部分ですが、以下のように修正すべきではありませんか?

encoding = { k: torch.tensor([v]) for k, v in encoding.items() }

↓修正後

encoding = { k: torch.tensor(v) for k, v in encoding.items() }

torch.Tensorに変換する前にリスト化することで、encode_plus_untagged関数の返り値の要素であるinput_idsなどの値は「2次元Tensor」になっています。
その一方、encode_plus_tagged関数の返り値の要素であるinput_idsなどは値が「1次元Tensor」になっています。
性能評価もバッチ処理にて行うべくコードを書いている中で、encode_plus_untagged関数の返り値を使用してデータローダを作ろうとした際、input_idsなどの値が3次元のTensorになってしまい、BERTへ入力できないという問題が生じました。encode_plus_untagged関数のほうだけ、input_idsなどの値を2次元Tensorにしなくてはならない特別な理由がない限り、バッチ処理も想定して1次元Tensorにすべきと考えます。

タイポ

P36 3.2.1「トークン化」の第一段落の5行目

受け入れるられる

受け入れられる

同じく3.2.1「トークン化」第二段落3行目

末尾にに

末尾に

が正しいかと思います.

P.37最終行

とてもわかりやすい書籍の出版ありがとうございます。
P.37の最終行にある、e^S_iですが、e^P_iの誤りではないかと思いご連絡させていただきました。
ご確認いただければと思います。

【第6章】Pytorch Lightningの関数定義について(p.82〜83)

p.82〜83で実装している3つの関数training_step、validation_step、test_stepはそれぞれ引数として「batch」と「batch_index」の2つを受け取るようになっています。

その一方で、今回の学習において与えるデータは、データローダから取り出した段階では「batch_index」に相当するものが無いように思います。

「batch」に相当するデータのみを使ってtraining_step関数を実行してしまうと、普通は"missing 1 required positional argument"のような、必要な位置引数が不足していることを示すエラーを吐くと思うのですが、Pytorch Lightningではこの点をどのように扱っているのでしょうか?

trainer.fit()の実行時に「batch_index」に相当するデータが作られ、training_step関数に渡される?など色々考えて自分でも調べてみたのですが答えが見つからず、ご教示頂ければ助かります。

P.12 図2.1のReLU

P.12の図2.1(b)のReLUにおいて、x < 0でのyの値が0ではなく0より少し小さな値になっています。

【第8章】encode_plus_untagged関数の分割箇所について

encode_plus_untagged関数では、encode_plus_tagged関数のように固有表現の周りで必ず文章が分割されるような処理をしていないので、P.116で問題として挙げられている、"「みらい事務所」の前の「の」と「み」が誤って連結される"などの問題が生じるように思います。
この点について、推論時は仕方ないものとして諦めるしかないのでしょうか?
(encode_plus_untagged関数実行時は当然位置情報が与えられないので手段はないと思いますが…)

torchmetricsのバージョンアップに関連する動作不良

9/2に6章のipynbを動かしたところ、6-3でエラーが発生しました。
torchmetricsのバージョンが上がったことによる不具合のようです。6-2でtorchmetricsのバージョンを固定することでエラーが出なくなりました。

# 6-2
!pip install transformers==4.5.0 fugashi==1.1.0 ipadic==1.0.0 pytorch-lightning==1.2.7 torchmetrics==0.5.0

p.58

上から2行目
誤:なにかを予測する」というというタスクを用いて、
正:なにかを予測する」というタスクを用いて、

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.