ghmagazine / llm-book

「大規模言語モデル入門」(技術評論社, 2023)のGitHubリポジトリ
https://gihyo.jp/book/2023/978-4-297-13633-8
Apache License 2.0
272 stars 41 forks source link

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

Closed ftnext closed 11 months ago

ftnext commented 11 months ago

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

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

でしています。

Kosuke-Yamada commented 11 months ago

ご指摘いただきありがとうございます。

ご指摘のとおり、anyは使うべきではなくtyping.Anyを使うべきだと考えます。 そのため、github上で提供しているコードはanyをtyping.Anyに変更しました。 また、書籍に関しては、正誤表に掲載し、次のバージョンでは修正したものを発行する予定です。

対応させていただきましたので、こちらはcloseさせていただきます。