第4回:作家とモデルを比べる

2026年10月27日(火)

第3回のclass3-preparedフォルダー、宿題のCSV、保存したワークシートdh-b-movement.jsonを手元に置いてください。1節の表から作家を一人選んでください。同じ作家を二人で選んでもかまいません。

使うもの 第3回まで 今回
本文 「蜘蛛の糸」と芥川龍之介103作品 13作家の選択作品のうち、担当作家1名分
検索 class3.lx class4.lx(第3回と同じ語彙素の集合に、品詞別の集計を追加)
記録 CSVの1–10行目 CSVの11–12行目を追加し、担当作家の集計値をauthors.csvと照合

1. 担当作家の準備済みコーパスを用意する

まだ提出していない場合は、第2回のワークシートdh-b-movement.jsonを提出ページで提出してください。提出ページは5・6節で使うため、開いたままにしてください。

dh-b-movement.jsonが手元にない場合は、配布例のワークシートを保存し、第2回2節のワークシートの「保存したワークシートを開く」で読み込んでください。7行すべての根拠を自分の言葉で書き直し、判断が違う行はラベルも変えてから、保存して提出してください。根拠が配布例のままのファイルは提出しないでください。

下の表から担当作家のZIPを第2回の作業フォルダーdh-b-2026に保存してください。ZIPを展開すると、担当作家のフォルダー(例:class4-akutagawa)が作られ、その中にakutagawa.lingcorpusなどのファイルが入ります。lingがインストールされていないPCでは、先にlingを使えるようにするの手順を行ってください。

ターミナルでは、dh-b-2026が入っているフォルダーから次のコマンドを実行してください。ファイル管理アプリでZIPを展開済みの場合は、unzipの行を省いてください。

cd dh-b-2026
unzip class4-akutagawa.zip
cd class4-akutagawa
ling corpus inspect akutagawa.lingcorpus

class4-akutagawa.zipとclass4-akutagawaは、下の表の担当作家のZIP名とフォルダー名に置き換えてください。akutagawa.lingcorpusは、そのフォルダー内の準備済みコーパスのファイル名に置き換えてください。inspectが下の表と同じ作品数を表示し、最後にcomplete:を表示すれば、次の節に進めます。

作家 フォルダー名 作品数 ZIP
森鴎外 class4-mori 31 13 MB
泉鏡花 class4-izumi 31 15 MB
国木田独歩 class4-kunikida 19 3 MB
夏目漱石 class4-natsume 14 29 MB
岡本綺堂 class4-okamoto-kido 43 10 MB
谷崎潤一郎 class4-tanizaki 22 13 MB
室生犀星 class4-murou 15 3 MB
芥川龍之介 class4-akutagawa 70 10 MB
梶井基次郎 class4-kajii 13 2 MB
堀辰雄 class4-hori 16 5 MB
夢野久作 class4-yumeno 25 12 MB
岡本かの子 class4-okamoto-kanoko 25 7 MB
太宰治 class4-dazai 56 13 MB

授業では、Soranohaから選んだ380作品を13人の作家ごとに分けて使います。この選択には国木田独歩の翻訳「糸くず」と森鴎外の翻訳「冬の王」「みれん」も含まれ、works.csvに原作者と担当作家の役割を記録しています。本文と書誌情報は、ZIPのREADME.txtに示したSoranohaのリリースに基づきます。芥川龍之介は、第3回の103作品から選んだ70作品です。

first_publishedには、Soranohaに記録された初出情報をそのまま残しています。yearはそこから取り出した西暦で、記録がなければ空欄です。発表時期を比べるときは、Soranohaの作品情報も確認してください。

ZIPの中身 内容
<作家>.lingcorpus 担当作家の選択作品を近現代口語小説UniDicで解析した準備済みコーパス
works.csv 作品の一覧。著者・翻訳者の役割、初出情報、作品情報のsource、本文のreaderを含む
class4.lx 今回のパターンファイル
README.txt 使ったツール・辞書の版と作品の選定条件
ターミナルを使わずに進めるには?

下の表から、配布したコーパスとパターンファイルを使った検索・集計結果を開いてください。パターンは変更できませんが、作家どうしを比べ、本文と照合できます。使ったコマンドと版はREADMEにあります。13作家の集計表はauthors.csvです。

作家 保存済みの出力
森鴎外 集計・作品ごとの件数・落ちるの一致箇所・来る・行くの箇所
泉鏡花 集計・作品ごとの件数・落ちるの一致箇所・来る・行くの箇所
国木田独歩 集計・作品ごとの件数・落ちるの一致箇所・来る・行くの箇所
夏目漱石 集計・作品ごとの件数・落ちるの一致箇所・来る・行くの箇所
岡本綺堂 集計・作品ごとの件数・落ちるの一致箇所・来る・行くの箇所
谷崎潤一郎 集計・作品ごとの件数・落ちるの一致箇所・来る・行くの箇所
室生犀星 集計・作品ごとの件数・落ちるの一致箇所・来る・行くの箇所
芥川龍之介 集計・作品ごとの件数・落ちるの一致箇所・来る・行くの箇所
梶井基次郎 集計・作品ごとの件数・落ちるの一致箇所・来る・行くの箇所
堀辰雄 集計・作品ごとの件数・落ちるの一致箇所・来る・行くの箇所
夢野久作 集計・作品ごとの件数・落ちるの一致箇所・来る・行くの箇所
岡本かの子 集計・作品ごとの件数・落ちるの一致箇所・来る・行くの箇所
太宰治 集計・作品ごとの件数・落ちるの一致箇所・来る・行くの箇所

2. 担当作家の上下の移動の語彙素を数える

class4.lxは、第3回のverticalとdeixisに、品詞ごとのトークン数を数えるposを加えたものです。[...]一つが一つのトークンで、並べた[...]は連続するトークンに一致します。各定義の上のkey:行が、summarizeで数える単位を決めます。

class4.lxの定義 一致するもの 数える単位
pos := []. すべてのトークン upos(品詞)
verbs := [upos=VERB]. 品詞がVERBのトークン lemma(語彙素)
vertical := [lemma in {上る, …}]. 語彙素が集合の12語のいずれかであるトークン lemma
deixis := (?<verb> [upos=VERB]) [lemma=て] (?<deictic> [lemma in {来る, 行く}]). 動詞、て、来るまたは行くの順に並ぶ三つのトークン 動詞の語彙素と来る・行くの語彙素
verticalの定義:開始、語彙素が指定した集合に含まれるトークン一つ、終了

(?<名前> ...)は、一致した部分に名前を付けて後で参照する「名前付きキャプチャ」です。deixisでは、次の二つの部分に名前を付けています。

名前と一致する部分 key:で使う語彙素
verb:最初の動詞トークン $verb.lemma
deictic:最後の来る・行くのトークン $deictic.lemma

key: [$verb.lemma, $deictic.lemma]は、この二つの語彙素の組み合わせごとに件数をまとめます。

deixisの定義:verbと名付けた動詞トークン、てのトークン、deicticと名付けた来る・行くのトークンの順
「走り行く」のように「て」がない複合動詞は数えますか?

deixisは、動詞・て・来る/行くの三つのトークンだけを数えます。走り行くや帰り来るのような複合動詞は、コーパスの解析では一つのトークンになり、語彙素も走り行くのように一語です。そのため、deixisにも[lemma=行く]にも一致しません。

次のパターンは、語彙素が来るまたは行くで終わる一語の動詞を数えます。出来ると心行くは移動を表さないため除いています。

key: [lemma]
deixis_compound := [upos=VERB & lemma ~ /(来る|行く)$/ & lemma not in {来る, 行く, 出来る, 心行く}].

このパターンは完全ではありません。除く語彙素は、この二つで足りるとは限りません。解析が複合動詞を二つのトークンに分けた場合は、一致しません。

配布したコーパスでは、芥川龍之介で4件、国木田独歩で37件(deixisは188件)、泉鏡花で47件(同525件)が一致します。件数を報告するときは、どのパターンで数えたかを書き添えてください。

authors.csvは、13作家分の集計結果をまとめた表です。作家間で比較できるように、すべての集計にclass4.lxを使っています。検索する語彙素の集合も、割合を計算するときの動詞の総数の数え方も、どの作家でも同じです。

配布したclass4.lxは変更せずに使ってください。第3回に修正した語彙素の集合で検索する場合は、class4.lxをclass4-mine.lxという名前でコピーし、そのファイルを編集してください。このファイルで集計した件数には、class4-mine.lxを使ったことを書き添えてください。

ling check --patterns class4.lx
ling summarize --corpus akutagawa.lingcorpus --patterns class4.lx --top all > summary.txt
grep -w pos summary.txt | grep VERB
grep -w vertical summary.txt
grep -w vertical summary.txt | awk '{s+=$1} END {print s}'

awkのコマンドは、verticalの各語彙素の件数(1列目)を合計して表示します。

verticalの件数は、語彙素が集合に含まれるトークンの数で、移動の数ではありません。芥川龍之介の「文章」(Akutagawa_R_Bunshou.md)の「肉の落ちた」は落ちるに一致しますが、誰も移動しません。次のコマンドは、落ちるの一致箇所を最初の40件まで、ファイル名、作品内の文番号、前後の本文の順に表示します。

ling matches --corpus akutagawa.lingcorpus --tsv --context 8 --limit 40 --pattern '[lemma=落ちる].' | cut -f3,5,9-

作家ごとに作品の長さが違うため、件数は動詞1万語あたりの割合に直して比べます。割合は、verticalの合計をVERBの件数で割り、10000を掛けた値です。芥川龍之介の70作品では、verticalの合計406、VERB30878で、割合は131.5です。

  1. verticalの合計、VERBの件数、割合を計算し、メモに残してください。
  2. verticalの上位3語彙素を書き出してください。
  3. 担当作家の落ちるの一致箇所から、何も移動していないものを一つ見つけ、表現とファイル名を書き出してください。
  4. 三つの値をauthors.csvの担当作家の行(verbs、vertical、vertical_per_10k_verbs列)と照合してください。値が違う場合は、どのコマンドの件数が違ったかを書き出してください。
自分の値 authors.csvの列
VERBの件数 verbs
verticalの合計 vertical
割合(小数第1位まで) vertical_per_10k_verbs
落ちて来る・落ちて行く(3節) 落ちる_来る・落ちる_行く
上って来る・上って行く(3節) 上る_来る・上る_行く

3. 来る・行くの偏りを確かめる

grep -w deixis summary.txt | grep -E '上る|落ちる|下りる'

芥川龍之介の70作品では、落ちると来るの組み合わせが10件、行くとの組み合わせが1件あります。上るでは、それぞれ10件と13件です。出力に現れない組み合わせの件数は0です。

  1. 担当作家の四つの件数を、2節の表にあるauthors.csvの列と照合してください。
  2. 落ちるが来るに偏る傾向は、担当作家でも同じですか?一文で書いてください。

4. 作品を選んで二箇所を読む

ling matches --corpus akutagawa.lingcorpus --tsv --pattern '[lemma in {上る, 落ちる, 下りる}] [lemma=て] [lemma in {来る, 行く}].' | cut -f3 | sort | uniq -c | sort -rn | head
ling matches --corpus akutagawa.lingcorpus --where '@document.title = 杜子春' --tsv --context 12 --pattern '[lemma in {上る, 落ちる, 下りる}] [lemma=て] [lemma in {来る, 行く}].' | cut -f3,5,9-

1行目は、上る・落ちる・下りるにて来るまたはて行くが続く箇所、つまり図3の三つの連続するトークンをファイルごとに数えます。

4節のパターン:語彙素が上る・落ちる・下りるのいずれかであるトークン、てのトークン、来る・行くのトークンの順

2行目のコマンドは、一作品の一致箇所を、ファイル名、作品内の文番号、前後の本文の順に表示します。akutagawa.lingcorpusは担当作家のコーパスのファイル名に、杜子春は選んだ作品の作品名(works.csvのtitle列)に置き換えてください。

「杜子春」には該当箇所が四つあります。国木田独歩のコーパスで該当箇所が二つ以上ある作品は「少年の悲哀」(Kunikida_D_Kodomonokanashi.md)だけです。該当箇所が二つ以上ある作品がないときは、2行目を--where '@document.title = 杜子春'なしで実行し、別々の作品から箇所を選んでください。ターミナルを使わない場合は、保存済み出力の「来る・行くの箇所」に同じ出力があります。

  1. 該当箇所の多い作品を一つ選んでください。二箇所を選び、それぞれを含む段落全体を読んでください。works.csvのreader列から本文を開き、lingが表示した表現を検索してください。上の作例のリンクからは、該当する段落を直接開けます。
  2. 第2回と同じ三つの判断で分類し、CSVの11–12行目に追加してください。partには作品名、expressionにはlingが表示した表現を書きます。ほかの列の値は第3回の宿題の表のとおりです。
  3. 各箇所のファイル名と文番号、誰が移動し、語り手がどこから見ているかをメモに残してください。

5. 全員の結果を比べる

authors.csvに、2・3節の値が13作家分あります。

提出ページは、2–7行目について方向と「移動は起きる?」に分けて、全員のラベルの分布、保留の数、一致率を表示します。自分のラベルが多数と異なる箇所には枠が付きます。

  1. 動詞1万語あたりの割合が最も高い作家と最も低い作家を書き出し、作品の種類や年代から考えられる理由を一つ書いてください。

  2. 落ちるが来るに偏らない作家があれば書き出してください。

  3. 一致率が最も低い行を一つ選んでください。「提出された基準」の一覧に、その行の判断を揃える基準があるか探してください。なければ、ワークシートの「修正した基準」に自分の基準を書いてください。

    保存したファイルを提出ページで再提出すると、一覧は1分以内に更新されます。提出ページを開けない場合や、一覧に提出がまだない場合は、ワークシートの4節で相手の保存ファイルか配布例のワークシートと比べ、判断が分かれた行の基準をメモに書いてください。配布例との比較は一人分の一致で、全員の一致率の代わりにはなりません。

この割合は、語彙素の一致件数をもとに計算しています。集計には、2節で書き出したような、移動を表さない箇所も含まれます。解析に使う辞書と、verticalに含める語彙素の選び方によっても結果は変わります。

作家による違いを説明するときは、選択作品に童話・児童文学と翻訳3作品が含まれること、初出情報に欠けている箇所があることを明記してください。

6. モデルの抽出を自分のラベルと比べる

ワークシートの7箇所について、「方向」「移動は起きる?」「主体」の分類結果を、規則、LLM(Qwen3.5-4B)、Perplexity Deciderの結果と比べます。段落から移動表現を抽出する課題では、規則、GLiNER2.5、Qwen3.5-4Bの結果を比べます。ノートブックは保存済みの実行結果を表示するため、モデルの取得は不要です。次のコマンドは、marimoだけを取得します。

抽出の比較ノートブック(ZIP)を展開し、notebook-theme.cssと隠しファイル.marimo.tomlを含むすべてのファイルを同じフォルダーに置いてください。そのフォルダーで次のコマンドを実行し、表示されたURLをブラウザーで開いてください。ノートブックはブラウザーの画面に開きます。提出ページは別のタブか別のウィンドウで開いたままにし、次の手順で画面を切り替えてください。

uvx --python 3.14 marimo==0.25.0 edit --no-sandbox movement-extraction.py

uvxが認識されない場合は、先に授業のノートブックを実行するの手順でuvをインストールしてください。

  1. 提出ページの「規則」「Qwen」「Decider」の列で、波線の付いた箇所を一つ選んでください。波線は、その方法のラベルがいちばん多く選ばれたラベルと違う箇所に付きます。提出ページを開けない場合や、波線の箇所がない場合は、2行目どこまでものぼって行けばか5行目下りろを選んでください。保存済みの結果では、この2行の「移動は起きる?」でQwenのラベルが配布例と異なります。
  2. ノートブックの画面に切り替え、「第2回のワークシートを開く」でdh-b-movement.jsonを読み込んでください。開かない場合は、配布例が基準になります。
  3. ノートブックの「同じ箇所を分類する」で、選んだ箇所について各方法の「方向」「移動は起きる?」「主体」と根拠の表現を自分のラベルと比べ、食い違いを記録してください。
  4. 「段落から探す」で、各方法がワークシートの表現を見つけたか、ほかに何を抜き出したかを記録してください。

ノートブックは、自分のラベルと各方法の出力を比べ、一致した数を計算します。一致は判断の一貫性を示し、正しさは示しません。比較するのは7箇所だけで、規則もその箇所に合わせて書かれています。この結果から、ほかの箇所での抽出・分類の精度は判断できません。

食い違った箇所を一つ選んで段落を読み、次の表のどれに当たるかを記録してください。

QwenとDeciderには、語り手の立場で判断すること、否定や不能の表現では移動そのものが起きるかを判断すること、命令や条件だけでは移動が起きたとは言えないことを指示しています。規則は動詞の語尾で決めます。各方法の要約は、ノートブック末尾の「方法の違い」にあります。

ノートブックは第2回で修正した基準を表示しないため、ワークシートのファイルかメモを並べて開いてください。

場合 記録すること
自分の基準とモデルの基準が異なる 二つの基準と、それぞれが当てはまる本文の表現
段落からは判断が決まらない 判断が決まらない理由になる本文の表現
どちらかが段落を読み違えた 判断を決める本文の表現と、それが支持するラベル
モデルを自分で実行するには?

「選んだ段落で実行」には、モデル用のライブラリを含む環境が必要です。ノートブックをいったん閉じ、同じフォルダーで次のコマンドで開き直してください。--no-sandboxで開いたままでは、「実行する」はライブラリがないためエラーになります。

uvx --python 3.14 marimo==0.25.0 edit --sandbox movement-extraction.py

このコマンドは、初回に数百MBのライブラリを取得します。「選んだ段落で実行」に切り替えて「実行する」を押すと、ノートブックはモデルを取得して実行します。初回は数GBの取得が必要です。LinuxのNVIDIA・AMD GPUを使う手順は固有表現抽出の比較と同じで、ner-comparison.pyをmovement-extraction.pyに読み替えてください。

終了時のメモ

次の四つをメモ(.txtまたは.md)に記録し、メモを提出ページで提出してください。

記録する項目 内容
担当作家の値 三つの値と四つの件数、authors.csvと一致したか(2・3節)
二つの箇所 CSVの11–12行目(4節)
作家間の違い 割合か偏りの違いを一つと、考えられる理由(5節)
モデルとの食い違い 一箇所と、三つの場合のどれに当たるか、根拠の表現(6節)

宿題:第5回の調査の問いを決める

所要時間は20–30分です。第5回の前に提出ページで提出してください。

第5回では、エージェントにも同じ問いを調べさせ、その主張を自分のコマンドおよび本文と照合します。先に自分の調査を記録します。

  1. 担当作家について、コーパスの件数で答えられる問いを一つと、予想を調査の記録の「問い」「予想」の欄に書いてください。提出ページは、提出された記録の問いと予想を一覧にします。例:「この作家の選択作品では、落ちるは行くより来ると結び付くことが多いか」。
  2. 問いに答えるコマンドを二つ実行し、コマンド、出力の件数、数えた単位(トークン、作品、動詞1万語あたり)を記録してください。
  3. 出力から一箇所を選び、その箇所を含む段落全体を読んで、件数が示すことと示さないことを一文ずつ書いてください。
  4. CSV(11–12行目を含む)と調査の記録を、第5回の前に提出ページで提出してください。

授業ページを検索