stockmarkteam / bert-book Goto Github PK
View Code? Open in Web Editor NEW「BERTによる自然言語処理入門: Transformersを使った実践プログラミング」サポートページ
License: MIT License
「BERTによる自然言語処理入門: Transformersを使った実践プログラミング」サポートページ
License: MIT License
P.25の最後から2行目で、h_i計算する際 -> h_iを計算する際
pytorch_lightningのimport時のエラーについて、最新のGitHubのコードを用いても解決できない場合はPythonまたはpytorchのバージョンが原因でしょうか?
それぞれのバージョン
python 3.7.13
pytorch 1.8.1
大変恐縮ではありますが、ご回答いただけると幸いです。
3.1.2の1段落目の3行目で、Scale -> Scaled
4-2のコードブロック内で、BertJapanese-Tokenizer -> BertJapaneseTokenizer
コードブロック #5-5 コメント内 iput_ids -> input_ids
tokenizer = BertJapaneseTokenizer.from_pretrained(MODEL_NAME)
bert_sc = BertForSequenceClassification.from_pretrained(
MODEL_NAME, num_labels=2
)
bert_sc = bert_sc.cuda()
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.
出力時に
今日は[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']
第1段落: ModelCehckpoint -> ModelCheckpoint
最後のIREXの固有表現のカテゴリーに固有物名がぬけています。
BertForToeknClassification -> BertForTokenClassification と思われます。
同じタイポが3箇所あります。
本文の3行目と4行目、及び図8.2のキャプションです。
コードスニペット内ではtraining_stepとなっていますが、文章中ではtrain_stepとして参照されています。
P.28の一行目にて、図2.6(a)を参照していますが、図2.6の中に(a)が見当たらないように思います。
#6-5 において、分類スコア(scores)を表示しようとしていますが、scoresのsizeを表示しています。また、コードでは"# scores:"を表示していますが、出力結果では"# size:"が出力されています。
本文の、「文脈を考慮した...ベクトルh'_iをSoftMax変換したもの」の部分は「ベクトルh'_i-1」ではないでしょうか?
NER_tokenizer_BIOをmLUKETokenizerやT5Tokenizerを使った日本語言語モデルでも使用したいと思っているのですが、うまく言っていません。どうすれば適切に修正、使用ができるのでしょうか?
お忙しいところ恐縮ですがご教授いただけると幸甚です。
下から3行目: 選択肢ない -> 選択しない
お世話になっております。
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')
と全て同じ値となり,再現性の取り方について疑問を感じたため質問させていただきました。
何卒よろしくお願いいたします。
P.21の最終行で、再起的 -> 再帰的
こんにちは。現在第九章のところは誤変換のエラータイプに対して、fine-tuningを介して修正できるようになっていると存じております。誤字、脱字の場合を対応できるようには、プログラムをどう修正すればよいのでしょうか。
それに関する資料を見つからずこちらで質問させていただきました。
恐縮ですが、ご教授いただければ幸いです。どうぞよろしくお願いいたします。
#4-4 の下: マシーンラーニング -> マシンラーニング
"i"及び"j"という添字について少し混乱してしまったので教えて下さい。
以下の理解で問題ないでしょうか?
①添字"i"は「ある文において登場する単語の順番」に相当する数字。よって、取り得る値の範囲は1≦i≦n(文の長さ)となる。
②添字"j"は「語彙に対して一意に割り当てられた」数字。よって、取り得る値の範囲は1≦j≦N(語彙数)となる。
※但し、「Wj」として表記した場合に取り得るのは、推定対象単語の周辺単語のみ(WjはCiの要素)。一方で、「Sj」と表記した場合に取り得るのは語彙全て。
つまり、例えばですが、i=3の単語Wi(=文の中で3番目に出て来た単語)とj=100の単語Wj(=語彙の中で100番目のIDが割り振られた単語)が、同じ単語を示していることがあり得る、との理解で構わないでしょうか?
「次の損失関数、」とありますが、式自体は尤度関数になっているようです。
論文の該当箇所を確認しましたが、
Our formulation jointly maximizes the log
likelihood of the forward and backward directions:
とありましたので、「損失関数」を「(対数)尤度関数」に変更する、もしくは「損失関数」の表記のままで式にマイナス記号をつけるのが適切ではないかと思いました。
タイポのレポートです。第1版 第1刷です。
p.118 L.3
「Tencent Holdings Limited」 -> 「Tencent Holdings Ltd」
p.128 L.15
〜再現率は下がってしまします。 -> 〜再現率は下がってしまいます。
意味合いが別なのに同じ表記であるため、Tのフォントを変えるか、P34のどこかにAttention の式に現れるTは(ここでのみ)転置行列の意味合いだという注釈があると良いかもしれない。
ソースコードのライセンスの記述が見当たらないのですが、今後追加される予定はありますか?
1段落目の最終行で、本項をを -> 本項を
3行目で、隠れ状態の次元は728 -> 768
p.179の中段、 「アルゴリズムをを」->「アルゴリズムを」。
本文中の num_hidden_layer -> num_hidden_layers, max_position_embedding -> max_position_embeddings
「sim」ではなく「cos」ではないでしょうか?
P.25の説明で、何箇所かある出力y_iはすべてh_iかと思います。
少し細かいですが、P62で定義している関数は「def predict_mask_topk():」ですので、p63の2行目は「predict_topk_maskの関数は、」ではなく「predict_mask_topkの関数は、」が正しいと思われます。
書籍では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"
)
P.6とP.41のBERTの文献内で、NACACL -> NAACL
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の最終行にある、e^S_iですが、e^P_iの誤りではないかと思いご連絡させていただきました。
ご確認いただければと思います。
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(b)のReLUにおいて、x < 0でのyの値が0ではなく0より少し小さな値になっています。
encode_plus_untagged関数では、encode_plus_tagged関数のように固有表現の周りで必ず文章が分割されるような処理をしていないので、P.116で問題として挙げられている、"「みらい事務所」の前の「の」と「み」が誤って連結される"などの問題が生じるように思います。
この点について、推論時は仕方ないものとして諦めるしかないのでしょうか?
(encode_plus_untagged関数実行時は当然位置情報が与えられないので手段はないと思いますが…)
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
第2段落最終行: m_1 -> m
上から2行目
誤:なにかを予測する」というというタスクを用いて、
正:なにかを予測する」というタスクを用いて、
形態素解析のitem: 活用系 -> 活用形
本文の後から2行目: checkpoint.bert_model_path -> checkpoint.best_model_score
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.