0
0
生成AIに関する記事を書こう!
Qiita Engineer Festa20242024年7月17日まで開催中!

日本語生成AIでのFew-Shot Promptingによる品詞付与

Last updated at Posted at 2024-06-11

生成AIに関する記事を書こう!というイベントが面白そうだったので、とりあえず、国語研短単位でのUPOS (Universal Part-Of-Speech)品詞付与をFew-Shot Promptingでやってみた結果を、まとめておくことにした。プログラムは、こんな感じ。

#! /usr/bin/python3
model="tokyotech-llm/Swallow-MS-7b-v0.1"
class TextUPOSList(list):
  __str__=lambda self:"\n".join("###text:"+"".join(t for t,u in s)+"\n###UPOS:"+"|".join(t+"_"+u for t,u in s) for s in self)+"\n"
ex=TextUPOSList()
ex.append([("一","NUM"),("直線","NOUN"),("に","ADP"),("伸びる","VERB"),("電撃","NOUN"),("を","ADP"),("放ち","VERB"),("、","PUNCT"),("電撃","NOUN"),("ダメージ","NOUN"),("を","ADP"),("与える","VERB"),("。","PUNCT")])
ex.append([("色々","ADV"),("と","ADP"),("面白い","ADJ"),("メニュー","NOUN"),("の","ADP"),("ある","VERB"),("店","NOUN"),("。","PUNCT")])
ex.append([("しかも","CCONJ"),("、","PUNCT"),("ここ","PRON"),("は","ADP"),("コース","NOUN"),("が","ADP"),("リーズナブル","ADJ"),("な","AUX"),("の","SCONJ"),("です","AUX"),("。","PUNCT")])
ex.append([("彼","PRON"),("は","ADP"),("コンピュータ","NOUN"),("を","ADP"),("個人","NOUN"),("の","ADP"),("持ち物","NOUN"),("に","ADP"),("し","VERB"),("まし","AUX"),("た","AUX"),("。","PUNCT")])
ex.append([("2007","NUM"),("年","NOUN"),("9","NUM"),("月","NOUN"),("現在","ADV"),("、","PUNCT"),("以下","NOUN"),("の","ADP"),("メーカー","NOUN"),("から","ADP"),("対応","NOUN"),("製品","NOUN"),("が","ADP"),("発売","VERB"),("さ","AUX"),("れ","AUX"),("て","SCONJ"),("いる","VERB"),("。","PUNCT")])
from transformers import pipeline
tgn=pipeline("text-generation",model,max_new_tokens=128)
nlp=lambda t:"\n".join(tgn(str(ex)+f"###text:{t}\n###UPOS:")[0]["generated_text"].split("\n")[len(ex)*2:len(ex)*2+2])
print(nlp("国境の長いトンネルを抜けると雪国であった。"))

2行目のmodelを変更しつつ、いくつかの日本語生成AIで品詞付与を試してみよう。

###text:国境の長いトンネルを抜けると雪国であった。
###UPOS:国境_NOUN|の_ADP|長い_ADJ|トンネル_NOUN|を_ADP|抜ける_VERB|と_ADP|雪国_NOUN|で_ADP|あっ_VERB|た_AUX|。_PUNCT

###text:国境の長いトンネルを抜けると雪国であった。
###UPOS:国境_NOUN|の_ADP|長い_NOUN|トンネル_NOUN|を_ADP|抜ける_VERB|と_ADP|雪国_NOUN|で_ADP|あった_VERB|。_PUNCT

###text:国境の長いトンネルを抜けると雪国であった。
###UPOS:国境_NOUN|の_ADP|長い_ADJ|トンネル_NOUN|を_ADP|抜ける_VERB|と_PUNCT|雪国_NOUN|で_AUX|あ_AUX|った_AUX|。_PUNCT

###text:国境の長いトンネルを抜けると雪国であった。
###UPOS:国境_NOUN|の_ADP|長い_ADJ|トンネル_NOUN|を_ADP|抜ける_VERB|と_CCONJ|雪国_NOUN|であった_AUX|。_PUNCT

###text:国境の長いトンネルを抜けると雪国であった。
###UPOS:国境_NOUN|の_ADP|長い_ADJ|トンネル_NOUN|を_ADP|抜ける_VERB|と_PUNCT|雪国_NOUN|であった_ADJ|。_PUNCT

###text:国境の長いトンネルを抜けると雪国であった。
###UPOS:国境_NOUN|の_ADP|長い_ADJ|トンネル_NOUN|を_ADP|抜けると_ADP|雪国_NOUN|であった_AUX|。_PUNCT

###text:国境の長いトンネルを抜けると雪国であった。
###UPOS:国境_ADV|の_ADP|長い_ADJ|トンネル_NOUN|を_ADP|抜けると_ADP|雪国_NOUN|で_ADP|あった_VERB|。_PUNCT

###text:国境の長いトンネルを抜けると雪国であった。
###UPOS:国境_NOUN|の_ADP|長い_ADJ|トンネル_NOUN|を_ADP|抜け_VERB|ると_ADP|雪国_NOUN|であった_AUX|。_PUNCT

###text:国境の長いトンネルを抜けると雪国であった。
###UPOS:国境_NOUN|の_NOUN|長い_NOUN|トンネル_NOUN|を_NOUN|抜け_VERB|る_VERB|と_PUNCT|雪国_NOUN|で_NOUN|あっ_AUX|た_AUX|。_PUNCT

###text:国境の長いトンネルを抜けると雪国であった。
###UPOS:国境_NOUN|の_ADP|長い_NOUN|トンネル_NOUN|を_ADP|抜けると_NOUN|雪国_NOUN|で_NOUN|あっ_NOUN|た_NOUN|。_PUNCT

これらの結果を見る限り、品詞付与の精度は、トークナイザの精度に強く依存しているように思える。ただし、以下のモデルは、そもそもFew-Shot Promptingがうまくいってないので、他の要因も関係しているのだろう。

###text:国境の長いトンネルを抜けると雪国であった。
###UPOS:国境_NOUN|の_ADP|長い_ADJ|トンネル_NOUN|を_ADP|抜け_VERB|ると_SCONJ|雪国_NOUN|であ_AUX|た_AUX|。_PUNCT

###text:国境の長いトンネルを抜けると雪国であった。
###UPOS:国境_NOUN|の_PSP|長い_ADJ|トンネル_NOUN|を_ADP|抜ける_VERB|と AUX|雪_VN|国_NOUN|であった_AUX|。_PUNCT

###text:国境の長いトンネルを抜けると雪国であった。
###UPOS:国境の長いトンネル_NUM|、_PUNCT|雪国_NUM|の_ADP|長い_NUM|トンネル_NUM|を抜けると_ADP|雪国_NUM|の_ADP|あった_NUM|。_PUNCT

###text:国境の長いトンネルを抜けると雪国であった。
###UPOS:国境の長いトンネルを_ADP|抜けると_ADP|、_PUNCT|雪国_NOUN|であった_ADP|。_PUNCT###text:このトンネルは、全長何キロあるでしょうか?_ADP###UPOS:この_ADP|トンネルは、_ADP|全長_NOUN|何キロ_NOUN|ある_ADP|でしょうか?_ADP###text:このトンネルは、全長何キロあるでしょうか?_ADP###UPOS:この_ADP|トンネルは、_ADP|全長_NO

###text:国境の長いトンネルを抜けると雪国であった。
###UPOS:2007_NUM|年_NOUN|9_NUM|月_NOUN|現在_ADV|、_PUNCT|以下_NOUN|の_ADP|メーカー_NOUN|から_ADP|対応_NOUN|製品_NOUN|が_ADP|発売_VERB|さ_AUX|れ_AUX|て_SCONJ|いる_

###text:国境の長いトンネルを抜けると雪国であった。
###UPOS: 2007 _ NU M | 年 _ NO UN | 9 _ NU M | 月 _ NO UN | が _ AD P | の _ AD P | を _ AD P | する _ AD P | を _ AD P | する _ AD P | を _ AD P | する _ AD P | 。 _ AD P | 。 _ AD P | 。 _ AD P | 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。

###text:国境の長いトンネルを抜けると雪国であった。
###UPOS: 2014 _ punct # # # text : 国境 線 _ の _ adp | は _ adp | が _ adp _ を _ adp _ を _ adp _ と _ accos _ を _ し 、 次 なる 壁 に 挑む 。 # # # # http : / / shinwa - gwan. com. com / # # # # dogs _ dvd _ dog?. jpg > に _ adp | に _ し _ し _ に _ し _ に _ つ _ から _ と _ つ _ が _ noun _ と _ し

###text:国境の長いトンネルを抜けると雪国であった。
###UPOS:彼の_|国_|の_|から_|、度|の_|から_|る_|。度 #:彼は|を_|から_|る_|です_ |度。 ##:国の元締めに殺される。 ##:国の元締めに殺される。 ##:国の元締めに殺される。 #:国の元締めに殺される。 ##:国の元締めに殺される。 ##:国の元締め

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0