Praat TextGrid の往復による ToBI 韻律ラベリング
Potato 2.13.1 で ToBI の音調と切れ目指標を点ティアとしてラベル付けします。Praat の TextGrid から始め、Praat が読み戻せる TextGrid をエクスポートします。
録音と Praat の TextGrid を持つ音声学者や韻律研究者は、このチュートリアルに従うことで、Potato 2.13.1 で ToBI ラベリングを行い、ラベルを TextGrid として取り戻せます。ToBI(Tones and Break Indices)は、イントネーションと韻律的なフレージングを書き起こすための規約の集まりです。Silverman et al. (1992) が、アメリカ英語向けに ToBI を導入しました。このページのタスクは、録音の波形と、その下に4つのティアを表示します。音調ティアと切れ目指標ティアは時間上の点を保持し、単語ティアはインターバルを保持し、その他(misc)ティアは非流暢性とノイズを記録します。点ティアは Potato 2.13.1 で導入され、インポーターと textgrid エクスポーターは、どちらも Praat の点ティアを読み書きします。1台のサーバーで、複数の書き起こし担当者が同じ発話にラベルを付けられ、各担当者の作業は別々の TextGrid としてエクスポートされます。
ToBI の4つのティア
ToBI の書き起こしは、音声と F0 の記録を4つのティアと組み合わせます。Beckman, Hirschberg, and Shattuck-Hufnagel (2005) は、元の主流アメリカ英語のシステム(MAE_ToBI)のティアを次のように挙げています。
- 音調(Tones)。 ピッチアクセント、句アクセント、境界音調で、それぞれ時間上の1点に置かれます。
- 単語(Words)。 正書法による書き起こしで、各単語の終わりが時間上に印されます。
- 切れ目指標(Break indices)。 各単語のあとの連接の程度を表す、0から4の数字です。
- その他(Misc)。 非流暢性、コメント、その他の事象です。
Praat の TextGrid では、音調と切れ目指標は通常、点ティア(TextTier)で、単語とその他はインターバルティアです。次の設定のラベル一覧は、同じ章の MAE_ToBI の表に従っています。
| ラベルの種類 | ラベル |
|---|---|
| ピッチアクセント | H*、L*、L+H*、L*+H、H+!H*、およびダウンステップした !H*、L+!H*、L*+!H |
| 句アクセント | L-、H-、!H-(切れ目指標が3または4のすべての位置) |
| 境界音調 | L%、H%(切れ目指標が4のすべての位置)、および周辺的な語頭の %H |
| 不確実性 | 音調が生じたかどうかについての *?、-?、%?、およびどの音調かについての X*?、X-?、X%? |
| 切れ目指標 | 0、1、2、3、4。不確実性は - で(3-、4-)、ためらいは p で(1p、2p、3p)表します |
ティア表示と、ない F0 トラック
Potato の tiered_annotation スキームは、録音全体の波形、現在のウィンドウを拡大した波形、ティアごとの1行を描画します。点ティアでは、書き起こし担当者がクリックして、選択中のラベルで点を置き、ドラッグして点を動かします。点を選択して別のラベルボタンをクリックすると、その点のラベルを付け替えられ、選択した点は Delete キーで削除できます。インターバルティアでは、クリックしてドラッグします。
Potato 2.13.1 のティア表示には、F0 トラックもスペクトログラムもありません。書き起こし担当者は、F0 の曲線を見てピッチアクセントを判断します。ピッチのトラックを見るために、同じ WAV ファイルを Praat で開いたままにしてください。また、各ティアで選べるのは、設定に列挙されたラベルだけで、ラベルを入力するボックスはありません。そのため、単語は書き起こし担当者からではなく、TextGrid から取り込まれます。
TextGrid を準備する
発話ごとに1つの TextGrid と1つの WAV ファイルをフォルダーに入れ、utt01.TextGrid と utt01.wav のように名前を対応させます。ティアには tones、words、breaks、misc と名前を付け、tones と breaks を点ティアにします。単語ティアは強制アライナーで作れ、Montreal Forced Aligner は、デフォルトで long 形式の TextGrid を書き出します。アライナーの出力に足りない3つのティアは、Praat の Insert point tier と Insert interval tier のコマンドで追加します。後述の設定が名前を挙げているのは4つの ToBI ティアだけなので、インポートの前に、アライナーの音素ティアは削除してください。すでにラベルが入っているティアは、事前アノテーションとして Potato に取り込まれます。したがって、別の書き起こし担当者による最初のパスは、事前アノテーションとして届きます。
TextGrid をインポートする
インポートコマンドは、フォルダーを、TextGrid ごとに1項目の Potato プロジェクトに変換します。
potato import -i textgrids -o tobi_projectテスト用のフォルダーには発話が3つあり、1つはすでにラベル付けされ、2つは単語だけでした。インポーターは次のように報告しました。
Imported 3 item(s), 1 question(s), 0 answer(s) from 0 annotator(s), and 3 model suggestion(s) on 3 item(s) from Praat TextGrid files (with their audio) as tiered annotations.
wrote tobi_project/data/textgrids.jsonl
wrote tobi_project/media/utt01.wav
wrote tobi_project/media/utt02.wav
wrote tobi_project/media/utt03.wav
wrote tobi_project/config.yaml
wrote tobi_project/README.md各 TextGrid ティアは、tiers という名前の1つの tiered_annotation スキームのティアになり、各点ティアは点ティアのままです。異なる値が30個以下のティアは、その値をティアのラベルとして持ちます。このフォルダーでは、音調ティアには、ラベル付けされた発話が使った5つの音調だけが入り、切れ目指標ティアには 0、1、3、4 が入りました。異なる値がそれより多いティアは、ティアの名前を付けた単一のラベルを持ち、各インターバルのテキストをセグメントの value フィールドに保持します。実際のコーパスの単語ティアは、そうしたティアです。インポートされたすべての点とインターバルは、事前アノテーションです。各書き起こし担当者には、インポートされたラベルが出発点として見え、Potato は、その担当者が保存したときにだけラベルを保存します。
波形の上に単語を表示する
単語ティアは、すべてのインターバルにラベル words を表示し、単語自体は value フィールドに残ります。インポーターは、各項目のテキストを TextGrid のファイル名に設定します。tobi_project で次のスクリプトを実行すると、そのテキストが、発話の単語を順に並べたものに置き換わります。
import json
path = "data/textgrids.jsonl"
items = [json.loads(line) for line in open(path)]
for item in items:
words = item["predictions"]["tiers"]["annotations"].get("words", [])
item["text"] = " ".join(w["value"] for w in sorted(words, key=lambda w: w["start_time"]))
with open(path, "w") as f:
f.writelines(json.dumps(item) + "\n" for item in items)すると Potato は、最初の発話について、ティアの上に「Marianna made the marmalade before the guests arrived at noon」と表示します。
設定
次の設定は、生成された config.yaml を置き換えます。新しい設定は、生成されたデータと事前アノテーションの設定を保持し、各ティアに完全なラベル一覧を与えます。
annotation_task_name: ToBI labeling
task_dir: .
port: 8000
data_files:
- data/textgrids.jsonl
item_properties:
id_key: id
text_key: text
output_annotation_dir: annotation_output/
user_config:
allow_all_users: true
users: []
pre_annotation:
enabled: true
field: predictions
allow_modification: true
annotation_schemes:
- annotation_type: tiered_annotation
name: tiers
description: Label tones and break indices; correct the word boundaries if needed.
source_field: audio_url
media_type: audio
tiers:
- name: tones
point: true
labels: ["H*", "!H*", "L*", "L+H*", "L+!H*", "L*+H", "L*+!H", "H+!H*",
"L-", "H-", "!H-", "L-L%", "L-H%", "H-L%", "H-H%", "!H-L%", "%H",
"*?", "X*?", "-?", "X-?", "%?", "X%?", "%r"]
- name: words
labels: [words]
- name: breaks
point: true
labels: ["0", "1", "2", "3", "4", "3-", "4-", "1p", "2p", "3p"]
- name: misc
labels: [disfl, laugh, breath, cough, noise, interrupt]この設定では、次の選択をしています。
- 完全なラベル一覧。 インポーターが列挙するのはファイルにあったラベルだけで、書き起こし担当者は、設定にない音調を置けません。
- 結合した境界の音調。 MAE_ToBI では、切れ目指標4における句アクセントと境界音調は、その切れ目の時刻に置かれます。したがって、L-L% というラベルの1つの点が、句アクセントと境界音調をまとめて表します。単独の L% と H% は、同じ理由で除外しています。
- ティア名と順序。 名前が TextGrid のティアと一致すると、事前アノテーションは正しい行に置かれます。エクスポートは、設定の順序でティアを書き出します。
- 固定の misc リスト。 Potato のティアは、入力したラベルを受け付けません。そのため misc ティアは6つの事象ラベルを提供し、自由記述のコメントは Praat に残ります。
- 音調ティアの
%r。 MAE_ToBI は、曲線の再開を音調ティアに、非流暢性そのものを misc ティアに記します。 wordsを単語の唯一のラベルにする。 このラベルは、インポーターが書いたものと一致します。したがって、単語ティアは単語の境界を動かすためのものであり、単語ティアに新しく描いたインターバルは、テキストwordsとしてエクスポートされます。
バリデーターは、すべてのキーを Potato 自身の一覧と照合し、この設定と、インポーターが生成した設定の両方について OK — no issues found. を出力しました。
python -m potato.validate_cli config.yaml --strictブラウザでラベル付けする
起動コマンドは、ポート 8000 でタスクを提供します。
potato start config.yaml -p 8000各書き起こし担当者はサインインして、波形の上に単語が表示されているのを確認し、点を置く前にティアメニューからティアを選びます。実用的な順序の1つは、まず各単語の終わりに切れ目指標を置き、次にピッチアクセント、最後に、切れ目指標が3または4の各位置に境界音調を置く方法です。一致度を測るために、すべての発話に2人の書き起こし担当者を付けたい場合は、設定で num_annotators_per_item: 2 を設定してください。
Praat へエクスポートする
エクスポートコマンドは、書き起こし担当者ごと、保存済みの発話ごとに、1つの TextGrid を書き出します。
python -m potato.export -c config.yaml -f textgrid -o textgrid_outテストでは、2人の模擬の書き起こし担当者が最初の発話を保存し、エクスポートは次のファイルを書き出しました。
Files written:
textgrid_out/utt01_annotator1_tiers.TextGrid
textgrid_out/utt01_annotator2_tiers.TextGrid書き起こし担当者が1人のプロジェクトでは、utt01_tiers.TextGrid のように、ユーザー名のないファイル名になります。Praat 6.1.38 は、Parselmouth 0.4.6 を通じて両方のファイルを読み込みました。Praat は、音調と切れ目指標を点ティアとして、10個の単語を、そして misc ティアの息継ぎを見つけました。2人目の書き起こし担当者のファイルが元の TextGrid と異なっていたのは、その担当者が 0.35 秒から 0.36 秒へ動かした1つの音調と、0 が 0.0 と書かれていた点だけでした。
往復で保たれる TextGrid のフィールドと失われるもの
Potato を通した往復では、TextGrid の次の部分が保たれます。
- ティア。 ティア名と、点かインターバルかの種類は、インポートしたとおりに戻り、設定が元の順序を保っていれば、ティアの順序も一致します。
- 時刻。 Potato は、点の時刻とインターバルの境界を、小数点以下3桁のミリ秒で保存します。そのため、すべての時刻がマイクロ秒の精度を保ちます。
- ラベル。 音調ラベル、切れ目指標のラベル、すべての単語インターバルのテキストが戻り、ラベル内の引用符は、Praat が書くとおりに二重になります。
- グリッドの長さ。 グリッドは、アノテーションページが測定した音声の長さ、または元の
xmaxで終わります。
往復で、次の部分は失われます。
- 開始時刻。 エクスポートは、元の
xminにかかわらず、グリッドとすべてのティアを 0 から始めます。 - 未保存の発話。 誰も保存しなかった発話には、TextGrid がまったく作られません。
- ファイル名。 エクスポートは、ファイルに
<item>_<scheme>.TextGridと名前を付け、書き起こし担当者が複数いる場合は<item>_<user>_<scheme>.TextGridとします。 - 文字エンコーディング。 Praat は UTF-16 で保存することが多く、エクスポートは UTF-8 で書き出します。Praat はどちらのエンコーディングも読み込めます。
- 重なり。 Praat は、1つのティア上の重なったインターバルを拒否し、エクスポートは、重なりごとに警告を出します。
2人の書き起こし担当者間の一致度
/admin/iaa にある Potato の一致度レポートは、tiered_annotation スキームごとに1つの平均一致度を出し、4つのティアをまとめて扱います。Potato は、2人の書き起こし担当者の点とインターバルを時間的な重なりで対応づけ、対応づけた組でラベルが異なる場合は、半分の得点になります。2つの点が対応するのは、時刻がまったく同じ場合だけです。このテストでは、最初の発話に対する2つの回答が、10ミリ秒ずれた位置に置かれた1つの音調だけで異なる場合、スコアは 1.0 ではなく 0.93 になりました。すべての音調と切れ目指標が1ミリ秒ずれた2つの回答は、10個の単語インターバルしか対応しなかったため、0.24 になりました。
Potato 2.13.1 は、時間の許容幅を持つ音調ラベルの一致度、ティアごとの一致度、切れ目指標のカッパや順序統計量を計算しません。時間にわたる一致度の許容幅のスイープは、ロボットのエピソードの切り替え点のためのもので、tiered_annotation は対象外です。ToBI の信頼性の数値が必要な場合は、両方の書き起こし担当者の TextGrid をエクスポートし、Praat または自作のスクリプトで、選んだウィンドウ内で2人の音調を対にしてください。
このページの裏にあるテスト実行
このページの TextGrid と WAV ファイルは、スクリプトで書き出しました。WAV ファイルには、音声ではなく合成音が入っています。スクリプトは各単語の長さに応じて時刻を決め、音調と切れ目指標の時刻は、私たちが手作業で選びました。インポート、バリデーター、サーバー、エクスポートは、Potato 2.13.1 で実行しました。2人の模擬の書き起こし担当者は、アノテーションページが送るのと同じ /updateinstance リクエストで保存しました。一致度の数値は、保存された2つの回答に対して、/admin/iaa の背後にある関数を実行して得たものです。
次に読むもの
- プロジェクトのインポート:TextGrid と ELAN のインポーターのすべてのオプション
- 言語学のアノテーションツールの比較:Potato と並べた Praat、ELAN、FLEx、EMU-SDMS、および強制アライメントされた音素境界の確認
- 時間にわたる一致度:Potato が時間上でセグメントを対応づける方法
- Potato での言語学:グロス付け、ティアの修正、方言タスクをまとめて紹介
参考文献
- Beckman, M. E., Hirschberg, J., & Shattuck-Hufnagel, S. (2005). The original ToBI system and the evolution of the ToBI framework. In S.-A. Jun (Ed.), Prosodic Typology: The Phonology of Intonation and Phrasing (pp. 9-54). Oxford University Press. https://doi.org/10.1093/acprof:oso/9780199249633.003.0002
- Silverman, K., Beckman, M., Pitrelli, J., Ostendorf, M., Wightman, C., Price, P., Pierrehumbert, J., & Hirschberg, J. (1992). ToBI: A standard for labeling English prosody. Proceedings of the 2nd International Conference on Spoken Language Processing (ICSLP 1992), 867-870. https://doi.org/10.21437/ICSLP.1992-260