📚

【AI_18日目】自然言語処理_3冊目

2024/10/19に公開

こんにちは投資ロウトです。

背景

AI開発ができるために自然言語処理について理解を深めていきます。

以下の記事のStep2として、「BERT・GPTモデルについての本を読む」3選が書かれているので、そちらをやっていきたいと思います。

https://nlpillustration.tech/?p=4419#rtoc-7

マルチラベル文章分類

・マルチラベル分類・・・選択肢の中から複数のカテゴリーを選ぶ分類

・シングルラベル分類・・・選択肢を一つのみ選ぶ分類

・Multi-hotベクトル・・・コンピュータで処理しやすいように、文章が属すカテゴリー

text_list = [
    '今日は仕事はうまくいったが、体調があまり良くない。',
    '昨日は楽しかった。'
]

label_list = [
    [1, 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()

# BERTへのデータを入力し、分類スコアを得る
with torch.no_grad():
  output = bert_scml(**encoding)
scores = output.logits

↓エラー

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-9-19c3048c7efa> in <cell line: 23>()
     21 with torch.no_grad():
     22   output = bert_scml(**encoding)
---> 23 scores = output.logits
     24 
     25 # スコアが正ならば、そのカテゴリーを選択する

AttributeError: 'dict' object has no attribute 'logits'

辞書のように以下でアクセスすればOK

scores = output['logits']

固有表現抽出

・固有表現抽出・・・文章から人名・組織名といった固有名詞、日付などの時間表現、金額の数値表現を抽出する自然言語処理の基礎的な技術。

・IREX

↓文字化けしており、何を書いているサイトか不明だった。
https://nlp.cs.nyu.edu/irex/NE/

・拡張固有表現階層・・・米国のMUCで規定された固有表現 [Grishman1996]、 および、それを基に作成されたIREXの固有表現 [Sekine2000]を源流とし、 関根の150種類の拡張固有表現階層定義 [Sekine2002]を経て、 より幅広い固有表現のニーズに答えるべくして作成されたもの

http://ene-project.info/

・文字の正規化・・・コンピュータ上で半角・全角と同じ文字にもかかわらず、異なるものとして認識されるため、どちらかの文字に統一すること。

unicodedata.normalizeの関数で上記を実施する。

IO法・・・トークンが固有表現の一部かどうかで、タグを「I - (TYPE)」とするか、「O」とするか分ける方法
※「日米」が国名で抽出してしまう欠点を持っている

I・・・Inside
O・・・Outside

・固有表現抽出は与えられた文章をトークン化し、それぞれのトークンのラベルを予測する分類問題として扱うことができる。

・固有表現抽出の性能評価の指標
→適合率、再現率、F値

と短いですが、一旦以上で学習を区切りたいと思います。焦らずコツコツ自分のペースで頑張っていきたいと思います。ご精読ありがとうございました。

Discussion