JLit トピックビューア 操作マニュアル
Step 8「トピックモデル(LDA / MALLET)」で作るトピックビューアの使い方。 画面の各欄の見出しにある ? を押すと,このマニュアルの該当する節が開く。
1この道具で何をするか
MALLET で学習したトピックモデル(LDA)の結果を,読むための画面である。 トピックは「語の確率分布」なので,上位キーワードの一覧を眺めるだけでは,それが主題なのか, 1つの作品の登場人物名の束なのか,機能語の寄せ集めなのかが分からない。この画面では
- 上位キーワードを品詞・頻度帯で絞り,relevance λ で並べ替えて,トピックの中身を見分ける
- トピックごとに時代別の割合と,そのトピックを担う作品・作家を見る
- 選んだトピックと関連の強いトピックを,語分布の近さや共起から探す
- 学習の条件を変えた複数のモデルを切り替えて比べる
1枚の HTML で,サーバもネットワークも要らない。ブラウザで開くだけで使える。
2マニュアルを横に並べて使う
画面右上の 操作マニュアル ↗ と,各欄の ? は, このマニュアルを別のウィンドウで開く。何度押しても同じウィンドウが使われ,該当する節まで送られる。
- ビューアで 操作マニュアル ↗ を押す(別のウィンドウが開く)
- macOS では,ウィンドウ左上の緑のボタンにポインタを載せ,出てくるメニューから 画面の左半分に並べる項目を選ぶ(macOS の版によって表記が違う)。もう一方のウィンドウを右半分に選ぶ
- 大きなモニターや2台目のモニターがあれば,マニュアルのウィンドウをそちらへ移す
3作り方と開き方
ノートブックから(ふつうはこちら)
- Step 8 で MALLET を実行し(本番と,語を選び直したもの), 「トピックビューアを作る」のセルを実行する
- macOS なら次のセルで既定のブラウザに開く。あるいは
my_work/results/topic_viewer.htmlをブラウザで開く
このマニュアル(topic_viewer_manual.html)は,ビューアと同じフォルダに一緒に書き出される。
ビューアのファイルをほかの場所へ移すときは,マニュアルも一緒に移すこと。
ターミナルから
python3 scripts/19_topic_viewer.py \
--model 名詞・動詞・形容詞=my_work/results/mallet_nva \
--model 内容語すべて=my_work/results/mallet \
--out my_work/results/topic_viewer.html
| 引数 | 働き |
|---|---|
--model 名前=ディレクトリ | MALLET の出力ディレクトリ。何度でも指定でき,画面で切り替えられる |
--lexicon | 語の品詞と頻度帯の表(18_pos_select.py が書く data/tokens/lexicon.tsv) |
--top | 各トピックについて保持する語の数(既定 400)。多いほど λ を下げたときの並びが正確になる |
--min-count | モデル内の頻度がこれ未満の語はビューアに入れない(既定 3) |
--d2v | Step 7 の doc2vec の出力(work_vectors.csv のあるディレクトリ)。作品のネットワークに使う |
--labels | ビューアで書き出したラベル(topic_labels.json)。省くと,--out と同じフォルダにあれば読む |
--rel-mfw | 関連の強いトピックの Delta 系の指標に使う語の数(既定 500) |
4画面の構成
5モデルを切り替える
見出しの モデル で,ビューアに入れたモデルを切り替える。 Step 8 のノートブックからは,「語を選び直したもの」と「本番(内容語すべて)」の2つが入る。 左の欄の下に,いま見ているモデルのトピック数・作品数・トークン数と,MALLET の出力ディレクトリが出る。
切り替えると,絞り込みの設定はそのままで,選んでいたトピックの詳細は閉じる (トピックの番号はモデルごとに別物なので,T05 と T05 は対応しない)。
6品詞で絞る
チェックを外した品詞の語を,カードと詳細の上位キーワードから隠す。語の色は品詞を表す。 右の数字は,そのモデルのトークンのうちその品詞が占める割合である。
| 分類 | 中身(UniDic の品詞) |
|---|---|
| 普通名詞・固有名詞・数詞 | 名詞-普通名詞・名詞-固有名詞・名詞-数詞 |
| 動詞(自立)/動詞(非自立) | 動詞-一般/動詞-非自立可能(いる・する・なる など) |
| 形容詞(自立)/形容詞(非自立) | 形容詞-一般/形容詞-非自立可能(ない・よい など) |
| 形状詞・副詞・代名詞 | それぞれの品詞 |
| その他 | 上のどれにも当たらないもの |
7頻度帯で絞る
5つのつまみで,上位キーワードを頻度や散らばりの性質で絞る。つまみの右に今の値が出る。
| つまみ | 意味 | 使いどころ |
|---|---|---|
| 全体の頻度(最小) | コーパス全体での頻度がこれ未満の語を隠す(対数の目盛り) | 一回きりの語や誤解析を除く |
| 出現作品の割合(最大) | その語が現れる作品の割合がこれを超える語を隠す | どの作品にも出る語(言う・思う・顔)を除き,トピックに特有の語を見る |
| 1作品への集中度(最大) | 語の頻度のうち1作品が占める割合がこれを超える語を隠す | その作品にしか出ない語(登場人物名など)を除く |
| 1作家への集中度(最大) | 語の頻度のうち1作家が占める割合がこれを超える語を隠す | 同じ作家の複数作品に出る人物名(「素子」など)は,作品ではなく作家に集中する |
| 散らばり dp_in(最大) | Gries の DP を,その語の最多区分(相対頻度が最も高い時代区分)の中で測ったもの。1 に近いほど少数の作品に固まる(bursty) | 時代への偏りは不利に扱わずに,特定の作品に固まる語だけを除く |
頻度・割合・集中度・dp_in は 18_pos_select.py が書く語の表(lexicon)から来る。
語にポインタを載せると,UniDic の語彙素(外来語は原綴つき)と品詞が出る。
8並べ方(relevance λ)
上位キーワードの並べ方を relevance(Sievert & Shirley 2014)で決める。
relevance = λ log p(w|t) + (1−λ) log(p(w|t) / p(w))
- λ = 1:トピックの中での確率 p(w|t) の順。どのトピックにも出る高頻度語が上に来やすい
- λ を下げるほど,コーパス全体に比べてそのトピックに特有の語が上に来る。0.6 前後が目安
- λ を 0 近くまで下げると,ごくまれな語ばかりになる(全体の頻度のつまみと組み合わせる)
表示する語数(5〜50)で,カードに出す語の数を変える。
9語で探す
語を入れると,その語を上位(表示する語数以内)に持つトピックだけが濃く残り,ほかは薄くなる。 一致した語には色の帯が付く。見出しの行に,当たったトピックの数が出る。
語彙素(例:汽車)でも,外来語の片仮名だけ(例:テーブル)でも当たる。
絞り込みや λ で上位から外れた語は当たらない。
10トピックのカードと並べ替え
1枚のカードが1つのトピックである。
| 表示 | 意味 |
|---|---|
| T00, T01, … | トピックの番号(MALLET の番号) |
| 割合(例 3.2%)と細い棒 | コーパス全体でそのトピックが占める割合(チャンクの平均) |
| 残存(例 残存 64%) | ビューアが持っている上位キーワードの確率のうち,いまの絞り込みの後に残った割合。 低いトピックは,隠した語でできている |
| 上位キーワード | 絞り込みの後に残った語を λ の順に並べたもの。色は品詞 |
左の欄の 並べ替え で,トピック番号・割合の大きい順・ 絞り込み後に残る確率の大きい順(残存の順)に並べ替える。カードを押すと,下に詳細が出る。
11トピックの詳細
- 上位キーワード:λ の順に30語。棒の長さは p(w|t)。下に,MALLET が出した上位キーワード(絞り込み前)も出る
- 時代別の割合:時代区分ごとに,チャンクの中でこのトピックが占める割合の平均
- このトピックが多い作品:「作品内の割合」の大きい順に12作品
- このトピックを担う作家:「トピックに占める割合」の大きい順に8人
2つの割合を区別する
| 列 | 意味 | 向き |
|---|---|---|
| 作品内の割合 | その作品の中でこのトピックが占める割合 | P(トピック|作品) |
| トピックに占める割合 | このトピックの重みのうち,その作品(作家)から来る割合 | P(作品|トピック) |
「A 高校の生徒の半分が野球部」と「野球部員の9割が A 高校」が両立するのと同じで, 向きが逆なので値は一致しない。どちらも語の絞り込みでは変わらない。
12関連の強いトピック
詳細のいちばん下に,選んだトピックと関連の強いトピックが並ぶ。 行を押すと,そのトピックに移る。各行の上位キーワードは,いまの絞り込みと λ で並べたもの。
| 指標 | 何を測るか | 近いのは |
|---|---|---|
| Jensen–Shannon divergence(既定) | 2つの語分布 p(w|t) の隔たり(底 2,0〜1)。LDAvis のトピック間距離と同じ考え方(Lin 1991; Sievert & Shirley 2014) | 小さいほど |
| 語分布のコサイン類似度 | p(w|t) を並べたベクトルの向き。頻度の大きい語に引きずられやすい | 大きいほど |
| Burrows's Delta(zスコア) | 最頻語(既定 500 語)の p(w|t) をトピックをまたいで zスコアにし,差の絶対値を平均したもの | 小さいほど |
| Cosine Delta | 同じ zスコアのベクトルの 1 − コサイン類似度(Smith & Aldridge 2011) | 小さいほど |
| チャンク上の相関(CLR 変換後) | チャンクごとのトピックの割合を CLR(centred log-ratio; Aitchison 1986)で変換し,チャンクをまたいで取った Pearson の相関係数 | 大きいほど |
上の4つは語分布の近さ(同じ語でできているか),相関は文書の中での共起 (同じチャンクに一緒に現れるか)を測る。語がほとんど重ならなくても, 同じ場面に続けて現れる2つのトピックは相関が高くなる。件数 で並べる数を変える。
13ネットワーク(トピック・作品)
画面上部の トピック一覧/トピックのネットワーク/作品のネットワーク/ 作品とトピックのネットワーク で表示を切り替える。ネットワークでは,近いものどうしをエッジ(辺)(エッジ)で結び, レイアウトで選んだ方法で配置する(既定は力学モデル。つながりの強いものが近くに集まる)。
画面を広く使う(ラップトップなど)
グラフの高さは,画面の残りの高さに合わせて自動で決まる(ウィンドウの大きさを変えると追従する)。 説明・凡例・操作の案内はグラフの上に重ねてあり,場所を取らない。
| 場所 | 働き |
|---|---|
| グラフの左上の帯 | ノードと線の数(作品とトピックのネットワークでは作品・トピック・線の本数,ほかは内側のエッジ(辺)・境界のエッジの本数)。 ⓘ 説明 でグラフの作り方(指標・線の選び方)を,操作 でマウスの操作を小窓に出す。 小窓はもう一度押すか,外を押すか,Esc で閉じる |
| グラフの右上 | ⊡ 全体を表示:拡大・移動を解き,全体を枠に収める(配置はそのまま)。 ⤢ 全画面:グラフを画面いっぱいに広げる。ノードを押したときの一覧は右に出る。⤡ 元に戻す か Esc で戻る |
| グラフの左下 | 凡例。凡例 ▾ で畳む・広げる |
| タブの右端の 設定 ▴ | 設定の欄を畳み,指標・文書ベクトル表現・色・レイアウト・配置し直す・書き出しだけを1行に残す。 設定 ▾ で元に戻す |
| タブの左端の ◀ サイドパネル | 左のサイドパネル(品詞・頻度帯など)を畳み,グラフの幅を広げる。 ネットワークの3つのタブでだけ働き,トピック一覧などに移るとサイドパネルは戻る。▶ サイドパネル で広げる |
畳んだかどうかは覚えておかない。ビューアを開き直すと,いつもすべて広げた状態から始まる。 図の書き出し(SVG・PDF)には,畳んだかどうかにかかわらず凡例が付く。
操作
| 操作 | 働き |
|---|---|
| ノードをドラッグ | 動かす。放した位置に留まる。Fruchterman–Reingold では周りも動き,作品はダブルクリックで固定を解く。 ほかのレイアウトでは,そのノードだけが動く |
| ホイール/背景のドラッグ | 拡大縮小/全体の移動。⊡ 全体を表示 で拡大・移動だけを解き,配置し直す で初めの配置と大きさに戻す |
| ノードにポインタを載せる | トピックは割合と上位キーワード,作品は作家・題・初出年・時代区分・ジャンル・文体が出る |
| ノードを押す | つながる相手を強調し,グラフの下(全画面では右)に近い順の一覧(上位10)を出す。一覧の行を押すとその相手に移る。背景を押すと強調を解く |
| トピックをダブルクリック | 一覧の画面に戻り,そのトピックの詳細を開く |
見やすくする
| 操作欄 | 働き |
|---|---|
| 線の色 | 既定は「ノードの分類の色」。両端のノードが同じ分類(同じ作家・同じコミュニティ・同じ時代区分など)なら, 線をその色にする(内側のエッジ(辺))。分類の違うノードを結ぶ線(境界のエッジ)は灰色の破線にする。 「すべて灰色」で色分けを外す。説明の行に内側と境界のエッジの本数と,境界の割合が出る |
| 線の形 | 曲線(初期値)か 直線。曲線は,どの線も同じ側へ弧を描く(線の長さの 18% ふくらむ)。重なった線や,往復するように見える線を見分けやすくなる。SVG・PDF の書き出しにもそのまま写る |
| ラベル | ノードの名前(トピックの番号とラベル,作品の題)を出すかどうか。字の色はノードの色と同じ |
| 文字の大きさ | ラベルの字の大きさ(5〜22px)。拡大縮小とは別に変えられる |
| 大きさ:ノード | 円と四角の大きさの倍率(30〜150%)。配置は変わらない。ノードが込み合うときは下げる |
| トピックの色 | 作品とトピックのネットワークだけ。灰色(初期値)は作品と区別しやすい。作品の色分けに合わせる では,コミュニティならトピック自身のコミュニティの色,時代区分・作家などなら,線でつながる作品の分類のうち割合の合計が最も大きいものの色にする。線の無いトピックは灰色のまま |
| 大きさ:トピック | 作品とトピックのネットワークだけ。トピック(四角)の大きさを作品(丸)に対して変える(20〜150%,初期値 60%) |
| 不透過度:ノード | 円の塗りの不透過度(15〜100%)。下げると,重なったノードや,その下を通る線が透けて見える |
| 不透過度:線 | エッジの不透過度(10〜100%)。線が込み入っているときに下げると,ノードとラベルが読みやすくなる。 近さによる太さと不透過度の違いはそのまま残る |
これらは配置を計算し直さずに変わる。色分けや指標を切り替えても,設定はそのまま残る。
エッジ(辺)の張り方
- 近い順に k 本:各ノードから,近い順に k 本(1〜5)のエッジを張る。k を増やすとつながりが密になる
- エッジを残す:近さの上位 N%:すべての組の近さを順位にし,上位 N% に入らないエッジを消す。 弱いつながりを消して,強いコミュニティだけを見るときに下げる。エッジの無いノードの数は説明の行に出る
- 線が太く濃いほど近い。太さは,その組の近さの順位(全組の中での位置)を,いま表示しているエッジの中で 細い〜太いに割り当てたもの。指標によって値の尺度が違うので,値そのものではなく順位にそろえてある。 線にポインタを載せると,2つのノードと指標の値,全組の中での位置が出る
レイアウト
操作欄の レイアウト で配置の方法を選ぶ。Fruchterman–Reingold は動きながら落ち着き, ほかは一度に計算して置く(ノードが千を超えると数秒かかる。計算にかかった時間が横に出る)。 乱数シードを固定してあるので,同じ条件なら同じ配置になる。
| レイアウト | しくみ | 向くとき |
|---|---|---|
| Fruchterman–Reingold(従来の配置) | エッジ(辺)をばね,ノードどうしを斥力で結ぶ力学モデル(Fruchterman & Reingold 1991 の考え方)。既定 | 小さなネットワークをドラッグで動かしながら見る |
| ForceAtlas2(Gephi 標準の力学モデル。次数の高いノードほど強く反発) | 斥力を(次数+1)の積に比例させ,エッジの多いノードの周りに余白を作る(Jacomy et al. 2014)。 LinLog は引力を距離の対数にして,コミュニティどうしをより離す(Noack 2007)。 Gravity は中心へ引く強さ(上げると外れたノードが寄る)。この2つは ForceAtlas2 を選んだときだけ効く(ほかのレイアウトでは薄く表示され,押せない) | コミュニティを見る。LinLog と組み合わせるとコミュニティの境目が見やすい |
| Yifan Hu(粗い配置から多段階で詰める力学モデル) | エッジでつながるノードを組にして縮めた粗いグラフを何段か作り,いちばん粗いものから配置して細かく戻す(Hu 2005) | 作品数が多いネットワークで,全体の形を安定して見る |
| MDS(全組の距離を平面上で再現する配置。stress majorisation) | エッジではなく,すべての組の距離(指標の値。大きいほど近い指標は 1 − 値)を平面上の距離にできるだけ近づける (Gansner, Koren & North 2005)。作品とトピックのネットワークでは,エッジをたどる最短経路の長さを距離にする | 力学モデルの図と見比べる。エッジを張らなかった組の近さも配置に効く |
| Circular(分類ごとに円周上に並べる) | 色 で選んだ分類(時代区分・作家・コミュニティなど)ごとにまとめて円周上に並べ,分類の切れ目を1つあける。 作品とトピックのネットワークでは,外側に作品,内側にトピック(つながる作品の向きの順)を置く | 境界のエッジ(灰色の破線)がどの分類をまたぐかを見る |
ForceAtlas2 と Yifan Hu は,つながっていない部分(連結成分)を別々に配置し,エッジの平均の長さをそろえてから大きい順に並べる。 Gephi の Scaling に当たる操作は,画面に合わせて自動で拡大縮小するため,下の Expansion/Contraction で代える。
| 補助の操作 | 働き |
|---|---|
| Expansion/Contraction | 形を保って全体を広げる/縮める(1.2 倍/1/1.2 倍)。ノードとラベルの大きさは変わらないので,重なりが減る/増える |
| Noverlap | ノードの重なりを解消(重なったノードだけを押し分ける) |
| Label Adjust | ラベルの重なりを解消(ラベルとノードを合わせた枠が重ならないように押し分ける)。 ラベルを出していないときは Noverlap と同じ。文字を大きくしたあとは,もう一度押す |
| Rotate(角度 °) | 形を保って全体を回す。横の欄に角度(度)を入れて押す。正は時計回り,負は反時計回り (例:90 → −90 で元に戻る)。ラベルは水平のまま。回しても配置の意味は変わらない(向きには意味が無い) |
補助の操作は,いまの配置に重ねて効く(レイアウトを選び直すか 配置し直す を押すと元に戻る)。
図を書き出す(SVG・PDF)
操作欄の 書き出し で,いま画面にある図をファイルにする。拡大縮小や移動の状態にかかわらず, ノードとラベルの全体が入るように切り出し,下に凡例を付ける。背景は白(画面が暗い配色でも白地の色にする)。 配置・色分け・線の色・文字の大きさ・不透過度・ノードを押したときの強調は,画面のとおりに写る。
| ボタン | 働き |
|---|---|
| SVG | SVG ファイルを保存する(ファイル名は jlit_network_種類_モデル_レイアウト.svg)。
線と文字はベクトルのままなので,Inkscape や Illustrator で手直しでき,論文やスライドに入れても粗くならない |
| PDF(印刷) | 図だけを A4 横 1 ページに収めた印刷の画面を開く。印刷先(送信先)に「PDF に保存」を選ぶ。 これもベクトルのまま保存される |
条件を添える(再現のための注記)
条件を添える(初期値でオン)にしておくと,書き出した図の下縁(凡例の下)に,図を作った条件を小さな字で添える。 論文やスライドに図を載せたあとでも,同じ図を作り直せるようにするためである。
| 行 | 中身 |
|---|---|
| モデル | モデル名と置き場所(末尾2階層)・指紋,K,α(合計とトピックごとの幅),β,反復回数,optimize-interval と burn-in, random-seed,threads,ストップリスト(語数と sha1),学習日時,チャンク数・作品数・トークン数・語彙数 |
| グラフ | 近さの指標(Delta はその語数,doc2vec は次元と置き場所),k,残す割合(2 部グラフでは k と割合の下限),ノード数・エッジ(辺)数(内側・境界) |
| 表示 | 色分けの基準,トピックの色,線の色と形,線の太さの意味,ノードの大きさの基準と倍率,不透過度,ラベルの字の大きさ |
| 配置 | レイアウトとその設定(LinLog・Gravity・Scaling),補助の操作をした順(例:Label Adjust → Rotate 30°), 手で動かしたノードの数,強調しているノード |
| 作成 | JLit トピックビューア © Tomoji Tabata (DH UOsaka),ビューアを作った日時と設定(上位キーワードの数・最小頻度),書き出した日時 |
α と β は MALLET の topic-state.gz の先頭から読む(無ければ topic-keys.txt の α)。
反復回数・seed・ストップリストは MALLET の出力に残らないので,10_mallet.py train が学習のたびに
train_params.json に書く。これより前に学習したモデルでは「記録なし」と出る(学習し直すと入る)。
欧文 で,書き出す図の英数字(ラベル・凡例・注記の中の数字,英字,欧文の記号)の書体を選ぶ。 初期値は Gill Sans(無ければ Gill Sans MT・Gill Sans Nova)で,和文はいつも和文の書体で書く。 「和文と同じ書体」にすると,英数字も和文の書体で書く。画面の表示は変わらない。
英数字の部分は,文字列を和文と欧文の連なりに分け,欧文の連なりだけに書体を指定している(SVG の <tspan>)。
書体を並べて指定するだけでは,最初の書体しか見ないソフト(Illustrator など)で和文が化けるためである。
トピックのネットワーク
指標は 12 関連の強いトピック の5つから選ぶ。円の大きさはトピックの割合。 色は「いちばん割合の高い時代区分」か「コミュニティ」。
作品のネットワーク
| 文書ベクトル表現 | 中身 |
|---|---|
| doc2vec の作品ベクトル(コサイン類似度) | Step 7(09_doc2vec.py)のチャンクの document vector の平均。
Step 7 を実行したあとにビューアを作ると入る |
| トピック構成の近さ(Jensen–Shannon divergence) | いま選んでいるモデルで,作品のチャンクの θ(トピックの割合)を平均したものどうしの隔たり |
| Burrows's Delta(最頻語の zスコア) | Step 4(07_descriptive_stats.py)の最頻語の相対頻度(freq_matrix_mfw.csv)の先頭
最頻語 語(100・200・300。初期値 100)を,作品をまたいで zスコアにし,差の絶対値を平均したもの(Burrows 2002)。小さいほど近い |
| Cosine Delta(最頻語の zスコア) | 同じ zスコアのベクトルの 1 − コサイン類似度(Smith & Aldridge 2011)。作家の判定では Burrows's Delta より安定するとされる(Evert et al. 2017) |
Delta は Step 4 の出力を --delta で渡すと入る(ノートブックは descriptive/freq_matrix_mfw.csv があれば自動で渡す)。
zスコアは,ビューアに入る作品の集合(Step 4 で数えた作品すべて)の平均と標準偏差(ddof=0)で作る。作品の集合を変えれば値も変わる。
色は時代区分・作家・ジャンル・文体・コミュニティから選ぶ。作家は作品の多い順に8人まで色を付け, 残りは灰色(凡例の「その他」にポインタを載せると名前が出る)。円の大きさは作品のチャンク数。 作品を押すと,近い作品の一覧に加えて,その作品で割合の高いトピックが出る(押すとトピックの詳細へ)。
作品とトピックのネットワーク
作品(丸)とトピック(濃い灰色の四角)を1枚に描き,作品のトピック構成(その作品のチャンクの θ の平均)で結ぶ。 どの作品がどのトピックでできているか,どのトピックがどの作品群に担われているか,複数のトピックにまたがる作品はどれかが見える。
| 操作欄 | 働き |
|---|---|
| 各作品から割合の高い順に k 個のトピック | 作品ごとに,作品内の割合の高いトピックへ k 本(1〜5)の線を張る |
| 作品内の割合が m% 以上 | 割合がこれに満たない線は消す(0〜30%,既定 5%)。弱い結び付きを消して骨組みを見るときに上げる |
| 色 | 作品の色分け(時代区分・作家・ジャンル・文体・コミュニティ)。線は作品の色になる。トピックはいつも濃い灰色 |
線の太さは作品内の割合。四角の大きさはトピックの割合,丸の大きさは作品のチャンク数。トピックの四角は初めは作品に対して 60% の大きさで描く(大きさ:トピック で変えられる)。 トピックを押すと,そのトピックの割合が高い作品の一覧が出る。作品を押すと,その作品で割合の高いトピック(ラベルつき)の一覧が出る。 一覧の行を押すとその作品・トピックに移り,トピックをダブルクリックすると詳細へ移る。
コミュニティ
いま張られているエッジ(辺)から,互いに密につながるコミュニティを Louvain 法(Blondel et al. 2008)で求めて色分けする。 番号は大きいコミュニティから順に振る。
14ラベルづけ
トピックに名前を付けるのは,LDA でいちばん難しい作業の1つである(Lau et al. 2011)。 上位キーワードだけでは,それが主題なのか,1つの作品の登場人物名の束なのか,文体の偏りなのかが分からない。 上部の ラベルづけ のタブで,次の2通りのラベルを扱う。
| ラベル | 作り方 | 表示 |
|---|---|---|
| 仮ラベル | ビューアが機械的に付ける。λ=0.6 の上位2語に,割合の目立って高い時代区分を[ ]で添える(例:汽車・停車場[明治後期])。 1作品・1作家から重みの半分より多くが来ていれば,時代区分の代わりに[作品][作家]を添える(作家名・作品名は入れない) | 灰色の字 |
| ラベル | 診断資料を生成 AI に渡して付けさせたもの,または手で付けたもの | 色の付いた字 |
ラベルはカードの見出し・詳細の上・トピックのネットワークのノードに出る。 ラベルには作家名・作品名を入れない。どの作品や作家に偏っているかは,ネットワークの図と詳細を見れば分かる。 名前を入れると,ネットワークの図のラベルが長くなって読みにくくなる。作品指標・作家指標であることは種類(作品指標・作家指標)で示し, 作家名・作品名は根拠に書く。取り込んだラベルに作家名・作品名が入っていると,一覧に ⚠ が出るので手で直す。 ラベルは短いほどよい(図にそのまま載る)。プロンプトでは2〜8字を目安に10字以内を求めており,10字を超えると一覧に ⚠ が出る。
手順
- 対象(すべて/ラベルの無いものだけ)と 1回に含めるトピック(5・10・20・すべて)を選ぶ。 無料プランでは長いプロンプトが途中で切れることがあるので,10 前後がよい。← 前・次 → で残りの回に進む
- プロンプトをコピー を押し,生成 AI の入力欄に貼り付けて送る。 Claude・ChatGPT・Gemini・Copilot などの無料プランでよい(アカウントの登録は要る。API キーは要らない)
- 返ってきた回答の JSON を「2.」の欄に貼り付け,使った AI を選んで 取り込む を押す。
説明文や
```jsonの囲みが付いていても,JSON の部分を探して読む - 「3.」の一覧で結果を確かめる。ラベル・種類・信頼度は手で直せる(直すと出典に「手で修正」と残る)
- ラベルを書き出す で
topic_labels.jsonを保存し,ビューアと同じフォルダ(my_work/results/)に置く。 次にビューアを作るとき自動で読み込まれる
診断資料(プロンプト)の中身
- 上位キーワード(トピック内の確率の順)と特有の語(λ=0.6 の順)を15語ずつ。品詞つき
- このトピックの割合が高い作品と,このトピックを担う作品(作家・初出年・時代区分・ジャンル・文体・2つの割合)
- 担う作家・時代区分ごとの割合・偏りの警告・語分布の近いトピック
プロンプトには,主題か指標か文体の偏りかを診断してから名前を付けること,根拠は資料の語と作品から挙げること (一般に知られた知識を使ったときはそう明記すること),ラベルに作家名・作品名を入れず内容で表すこと,回答の形(JSON)が書いてある。 本文そのものは送らない(上位キーワードと書誌だけ)。
| 回答の項目 | 中身 |
|---|---|
| label | ラベル(名詞句で2〜8字が目安。10字以内) |
| type | 主題/作品指標/作家指標/文体・機能語/混成 |
| confidence | 高/中/低 |
| evidence・caution | 根拠(資料の語・作品)と注意点 |
15トピック表を書き出す
タブの トピック表 で,トピックと上位キーワードの表(主表)と,トピック診断表を書き出す。 論文に載せることを考えて,キャプションにコーパス名・テクストチャンク数・作品数・トークン数・語彙数・K・α・β・反復回数・optimize-interval・random-seed・上位キーワードの選び方を入れる。 論文の誌面では,主表を本文に,診断表を付録に置くとよい。
主表(トピックと上位キーワード)
| 列 | 中身 |
|---|---|
| トピック | 番号(00, 01, …。K が 100 以上なら 3 桁) |
| 平均割合(Mean θ) | テクストチャンクにおけるトピックの割合 θ の平均(列 で外せる) |
| α | トピックごとの α(MALLET が最適化した値。topic-state.gz か topic-keys.txt から読む) |
| ラベル | ラベルづけ で付けたラベル。無いトピックは仮ラベルを出し,*(日本語では*の注)を付ける |
| 上位キーワード | 上位の語と,その直後に値を括弧で添える。語数は 上位キーワード(初期値 20,最大 50)で変える |
| 操作欄 | 働き |
|---|---|
| 選び方 | 絞り込みなし(初期値):モデルそのものの p(w|t) の順。 いまの表示設定に従う:画面の λ・品詞・頻度帯の絞り込みで並べた語(カードと同じ語)。このときは λ と絞り込みの条件がキャプションに入る |
| 語の後の値 | p(w|t)(その語がトピックに割り当てられた数 ÷ トピックの総数)か,頻度(割り当てられた数) |
| 小数の桁 | p(w|t) の小数の桁数(初期値 3) |
| 並べ方 | トピック番号の順か,平均割合の大きい順 |
| 見出しとキャプション | 日本語か English。上位キーワードとラベルは日本語のまま |
| コーパス名 | キャプションに入る名前(初期値 JLit Corpus 2026)。空にするとキャプションから省く |
トピック診断表
トピックごとに,ラベル・α・平均割合・トークン数(そのトピックに割り当てられたトークンの数)・coherence・exclusivity
(MALLET の diagnostics.xml から。Mimno et al. 2011)・最多区分(平均割合が最も高い時代区分)・ラベルの種類・信頼度を並べる。
diagnostics.xml が無いモデルでは coherence と exclusivity の列を出さない。
| 日本語 | English |
|---|---|
| 平均割合 | Mean θ |
| 主題/作品指標/作家指標/文体・機能語/混成 | Theme / Work indicator / Author indicator / Style/function words / Mixed |
| 仮ラベル | provisional |
| 信頼度 高・中・低 | Confidence high / medium / low |
書き出しの形式
| 形式 | 中身と使い方 |
|---|---|
| LaTeX | booktabs と xltabular を使う表(ページをまたぐと見出しを繰り返し,「(続き)」を付ける)。
\caption[短い題]{キャプション} と \label{tab:topics}(診断表は tab:topic-diagnostics)が入るので,
本文から \ref{tab:topics} で参照できる。値は \wt{…}(小さい字の括弧書き)で書き,プリアンブルで定義し直せば見た目を変えられる。
日本語を含むので LuaLaTeX + luatexja(または upLaTeX)で組む。LaTeX を単独で組める文書にする にすると,
プリアンブル付きの 1 ファイルになり,lualatex でそのまま PDF になる。
長い表なので 2 回組む(lualatex を 2 回,または latexmk -lualatex)。
1 回目は列の幅・ページの送り・\ref の番号が確定しないことがある |
| Markdown | パイプの表と,pandoc の書き方のキャプション(: … {#tab:topics})。pandoc で Word や LaTeX に変換できる |
| CSV | 1 行目が # で始まるキャプションと出典,2 行目が見出し。上位キーワードは 1 語 1 列(語と値が交互)。UTF-8(BOM 付き)なので Excel でそのまま開ける |
| JSON | キャプション・モデルの情報(学習条件を含む)・トピックごとの値と上位キーワードをまとめたもの。R や Python で読み直すとき用 |
| HTML(Word 用) | 罫線つきの表。Word や Pages で開くか,下の表示 を HTML にして コピー し,Word に貼り付けると表になる |
どの形式にも,ビューアの名前・モデルの指紋・書き出した日時をコメントとして入れる(どのモデルから作った表かを後で確かめるため)。 下の表示 で選んだ形式が下の欄に出るので,コピー して論文のファイルに貼ってもよい。
10_mallet.py train が書く train_params.json から読む。
それより前に学習したモデルではキャプションに「学習条件の記録なし」と出る。ビューアに入っていない語(モデル内の頻度が --min-count(初期値 3)未満の語)は表にも出ない。16語を隠すことと,除いて学習し直すこと
ビューアで語を隠すことと,その語を除いて学習し直すことは違う。 隠した語もトピックの形成には寄与している。固有名詞が作ったトピックは, 固有名詞を隠しても「その作品のトピック」のままである。カードの「残存」が低いのはそのためである。
本当に除くには,18_pos_select.py で語を選び直して学習し直し,
両方のモデルをビューアに入れて 切り替えて 比べる。
17困ったとき
| 症状 | 原因と対処 |
|---|---|
| 品詞がすべて「その他」になる/頻度帯のつまみが効かない | 語の表(lexicon)が無いまま作った。
Step 8 で 18_pos_select.py を実行してから,ビューアを作り直す |
| カードに「表示できる語が無い」と出る | 絞り込みが強すぎる。つまみを戻すか,品詞のチェックを入れ直す |
| 操作マニュアルが開かない | ビューアのファイルだけをほかの場所へ移した。topic_viewer_manual.html を同じフォルダに置くか,ビューアを作り直す |
| MALLET をやり直したのに結果が変わらない | ビューアは作った時点の写しである。「トピックビューアを作る」のセルを実行し直し,ブラウザで再読み込みする |
| 「JSON として読めない」と出る | 回答が途中で切れているか,JSON 以外の文が混ざっている。
1回に含めるトピックを減らして依頼し直すか,回答の { から } までだけを貼り付ける |
| 「別のモデルへの回答である」と出る | 別のモデル(学習し直す前など)のプロンプトへの回答を貼り付けた。いまのモデルでプロンプトを作り直す |
| ビューアを作り直したらラベルが消えた | topic_labels.json を書き出して,ビューアと同じフォルダに置いていない。
または MALLET を学習し直した(モデルの指紋が変わった) |
| 作品のネットワークで doc2vec が選べない | ビューアに doc2vec の結果が入っていない。Step 7 の 09_doc2vec.py を実行してから
ビューアを作り直す(ターミナルからは --d2v my_work/results/d2v を付ける) |
| ネットワークが団子になって読めない | エッジ(辺)が多すぎる。k を下げるか,「エッジを残す」の割合を下げる。拡大して読む |
| 開くのが遅い・ファイルが大きい | --top を小さくする(既定 400)。λ を下げたときの並びは少し粗くなる |
JLit_Corpus_2026 — トピックビューア操作マニュアル。
ビューアは scripts/19_topic_viewer.py が作り,このマニュアルは scripts/topic_viewer_manual.html から
ビューアと同じフォルダに書き出される。用語の説明は docs/glossary.md の Step 8 にある。
JLit トピックビューア © Tomoji Tabata (DH UOsaka)