From a4f38bd2a9cbb76e8bd56c944c66a8fccf0a7c04 Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Tue, 5 Nov 2024 09:31:52 -0500 Subject: [PATCH 01/61] add tokenizer_interface --- benchmarks/DASB/model/tokenizer_interface.py | 164 +++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 benchmarks/DASB/model/tokenizer_interface.py diff --git a/benchmarks/DASB/model/tokenizer_interface.py b/benchmarks/DASB/model/tokenizer_interface.py new file mode 100644 index 000000000..892bef6b3 --- /dev/null +++ b/benchmarks/DASB/model/tokenizer_interface.py @@ -0,0 +1,164 @@ + +""" +Unified interface for tokenizers, standardizing the output shape of encode and decode functions. + +This class reshapes the outputs of various tokenizers to ensure consistency, simplifying integration with recipes and workflows. + +Authors +--------- +* Pooneh Mousavi, 2024 +""" + +import torch + +from speechbrain.lobes.models.huggingface_transformers.encodec import Encodec +from speechbrain.lobes.models.huggingface_transformers.discrete_ssl import DiscreteSSL +from speechbrain.lobes.models.discrete.dac import DAC +from speechbrain.lobes.models.discrete.speechtokenizer_interface import SpeechTokenizer_interface + + +class Tokenizer_Encodec(Encodec): + @torch.no_grad() + def sig_to_toks(self, sig, lens,**kwargs): + # sig: [B, T] + self.eval() + toks, _ = self.encode(sig, lens) # [B, N, K] + return toks + + @torch.no_grad() + def toks_to_sig(self, toks,**kwargs): + # toks: [B, N, K] + self.eval() + sig = self.decode(toks)[:, 0] # [B, T] + return sig + +class Tokenizer_DAC(DAC): + @torch.no_grad() + def sig_to_toks(self, sig, lens,**kwargs): + # sig: [B, T] + self.eval() + toks, _ = self( + sig[:, None], n_quantizers=kwargs['num_codebooks'] + ) # [B, K, N] + toks = toks.movedim(-1, -2) # [B, N, K] + return toks + + @torch.no_grad() + def toks_to_sig(self, toks,**kwargs): + # toks: [B, N, K] + self.eval() + qfeats, _, _ = self.quantizer.from_codes( + toks.movedim(-1, -2) # [B, K, N] + ) + sig = self.decode(qfeats)[:, 0] # [B, T] + return sig + +class Tokenizer_SpeechTokenizer(SpeechTokenizer_interface): + @torch.no_grad() + def sig_to_toks(self, sig, lens,**kwargs): + # sig: [B, T] + self.eval() + toks = self(sig)[ + : kwargs['num_codebooks'] + ] # [K, B, N] + toks = toks.movedim(-3, -1) # [B, N, K] + return toks + + @torch.no_grad() + def toks_to_sig(self, toks,**kwargs): + # toks: [B, N, K] + self.eval() + toks = toks.movedim(-1, -3) # [K, B, N] + sig = self.decode(toks) # [B, T] + return sig + +class Tokenizer_DiscreteSSL(DiscreteSSL): + @torch.no_grad() + def sig_to_toks(self, sig, lens): + # sig: [B, T] + self.hparams.codec_quantizer.to(self.device).eval() + toks, _, _ = self.hparams.codec_quantizer( + sig, + lens, + SSL_layers=self.hparams.SSL_layers, + deduplicates=[False] * len(self.hparams.SSL_layers), + bpe_tokenizers=[None] * len(self.hparams.SSL_layers), + ) # [B, N, K] + return toks + + @torch.no_grad() + def toks_to_sig(self, toks): + # toks: [B, N, K] + self.hparams.codec_vocoder.device = self.device + self.hparams.codec_vocoder.to(self.device).eval() + + # Add offset for embedding layer + all_layer_ids = self.hparams.codec_quantizer.ssl_layer_ids + # TODO: remove after testing + assert tuple(all_layer_ids) == (1, 3, 7, 12, 18, 23) + offsets = torch.arange( + 0, + len(all_layer_ids) * self.hparams.vocab_size, + self.hparams.vocab_size, + device=self.device, + ) + offset_idxes = [all_layer_ids.index(x) for x in self.hparams.SSL_layers] + offsets = offsets[offset_idxes] + toks = toks + offsets + 1 + + # Handle missing codebooks + if len(self.hparams.SSL_layers) < len(all_layer_ids): + full_toks = torch.zeros( + *toks.shape[:2], + len(all_layer_ids), + dtype=toks.dtype, + device=self.device, + ) + for i, idx in enumerate(offset_idxes): + full_toks[..., idx] = toks[..., i] + toks = full_toks + + self.hparams.codec_vocoder.tokenize = False + sig = self.hparams.codec_vocoder(toks)[:, 0] # [B, T] + return sig + +class Tokenizer: + def __init__(self, tokenizer): + self.tokenizer = tokenizer + + @torch.no_grad() + def encode(self,sig, lens,**kwargs): + toks = self.tokenizer.sig_to_toks(sig, lens,**kwargs) + return toks + + @torch.no_grad() + def decode(self,sig,**kwargs): + sig = self.tokenizer.toks_to_sig(sig,**kwargs) + return sig + + +# model_hub = "facebook/encodec_24khz" +# save_path = "savedir" +# model = Tokenizer_Encodec(model_hub, save_path) +# from speechbrain.lobes.models.huggingface_transformers.hubert import (HuBERT) +# inputs = torch.rand([3, 2000]) +# model_hub = "facebook/hubert-large-ll60k" +# save_path = "savedir" +# ssl_layer_num = [7,23] +# deduplicate =[False, True] +# bpe_tokenizers=[None, None] +# kmeans_repo_id = "speechbrain/SSL_Quantization" +# kmeans_dataset = "LJSpeech" +# num_clusters = 1000 +# ssl_model = HuBERT(model_hub, save_path,output_all_hiddens=True) +# model = DiscreteSSL(save_path, ssl_model, kmeans_repo_id=kmeans_repo_id, kmeans_dataset=kmeans_dataset,num_clusters=num_clusters) +model_hub = "fnlp/SpeechTokenizer" +save_path = "savedir" +model =Tokenizer_SpeechTokenizer(model_hub, save_path) # doctest: +SKIP +tokenizer= Tokenizer(model) +audio = torch.randn(4, 1000) +length = torch.tensor([1.0, .5, .75, 1.0]) +tokens = tokenizer.encode(audio, length,num_codebooks=2) +print(tokens.shape) +rec = tokenizer.decode(tokens) +print(rec.shape) \ No newline at end of file From 0c2b751c595c9a63a2bd66b14f32e2faa13478d8 Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Wed, 6 Nov 2024 17:53:55 -0500 Subject: [PATCH 02/61] add reactored version of ASR --- .../ASR-refactor/hparams/LSTM/dac.yaml | 232 +++++++++ .../ASR-refactor/hparams/LSTM/encodec.yaml | 232 +++++++++ .../hparams/LSTM/speech_tokenizer.yaml | 222 +++++++++ .../ASR-refactor/hparams/contextnet/dac.yaml | 225 +++++++++ .../hparams/contextnet/encodec.yaml | 223 +++++++++ .../hparams/contextnet/speech_tokenizer.yaml | 213 +++++++++ .../ASR-refactor/librispeech_prepare.py | 1 + .../DASB/LibriSpeech/ASR-refactor/train.py | 447 ++++++++++++++++++ benchmarks/DASB/model/ __init__.py | 1 + benchmarks/DASB/model/custom_model.py | 17 +- benchmarks/DASB/model/tokenizer_interface.py | 231 ++++----- 11 files changed, 1933 insertions(+), 111 deletions(-) create mode 100644 benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/dac.yaml create mode 100644 benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/encodec.yaml create mode 100644 benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/speech_tokenizer.yaml create mode 100644 benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/contextnet/dac.yaml create mode 100644 benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/contextnet/encodec.yaml create mode 100644 benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/contextnet/speech_tokenizer.yaml create mode 120000 benchmarks/DASB/LibriSpeech/ASR-refactor/librispeech_prepare.py create mode 100644 benchmarks/DASB/LibriSpeech/ASR-refactor/train.py create mode 100644 benchmarks/DASB/model/ __init__.py diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/dac.yaml b/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/dac.yaml new file mode 100644 index 000000000..4accc2241 --- /dev/null +++ b/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/dac.yaml @@ -0,0 +1,232 @@ +# ############################################################################ +# Model: E2E ASR with CTC +# Auido Tokenizer: DAC +# Encoder: LSTM Encoder +# Decoder: CTC beam searcher and greedy searcher +# Tokens: character +# Training: Librispeech 960h +# Authors: Pooneh Mousavi 2024 +# ############################################################################ +# Seed needs to be set at top of yaml, before objects with parameters are made + +seed: 1986 +__set_seed: !apply:torch.manual_seed [!ref ] +output_folder: !ref results/dac/LSTM/ +output_wer_folder: !ref /wer.txt +save_folder: !ref /save +train_log: !ref /train_log.txt + + +# Data files +data_folder: !PLACEHOLDER # e.g., /path/to/LibriSpeech +# If RIRS_NOISES dir exists in /localscratch/xxx_corpus/RIRS_NOISES +# then data_folder_rirs should be /localscratch/xxx_corpus +# otherwise the dataset will automatically be downloaded +# data_folder_rirs: !ref +train_splits: ["train-clean-100", "train-clean-360", "train-other-500"] +dev_splits: ["dev-clean"] +test_splits: ["dev-clean", "test-clean", "test-other"] +skip_prep: False +train_csv: !ref /train.csv +valid_csv: !ref /dev-clean.csv +test_csv: + - !ref /dev-clean.csv + - !ref /test-clean.csv + + +####################### Training Parameters #################################### +number_of_epochs: 20 +batch_size: 4 # This works for 2x GPUs with 32GB +test_batch_size: 1 +grad_accumulation_factor: 2 +max_grad_norm: 5.0 +sorting: descending #random +num_workers: 8 +loss_reduction: batchmean +precision: fp32 # bf16, fp16 or fp32loss_reduction: batchmean +valid_search_interval: 1 +avg_checkpoints: 10 # Number of checkpoints to average for evaluation +cache_size: 1.e+10 + +lr_model: 0.001 +weight_decay: 0.0005 + + +# Training parameters +# To make Transformers converge, the global bath size should be large enough. +# The global batch size is max_batch_len * n_gpus * gradient_accumulation. +# Empirically, we used 850 * 8 A40 45G GPUs * 2 or 1700 * 4 A100 80G * 2. +# Please, set your parameters accordingly. +dynamic_batching: True +max_batch_length_train: 850 +max_batch_len_val: 100 +num_bucket: 200 +shuffle: False # if true re-creates batches at each epoch shuffling examples. +max_batch_ex: 128 +batch_ordering: random + +dynamic_batch_sampler_train: + max_batch_length: !ref + num_buckets: !ref + shuffle: !ref + batch_ordering: !ref + max_batch_ex: !ref + +dynamic_batch_sampler_val: + max_batch_length: !ref + num_buckets: !ref + shuffle: !ref + batch_ordering: !ref + max_batch_ex: !ref + +# Dataloader options +train_dataloader_opts: + batch_size: !ref + shuffle: True + num_workers: !ref + +valid_dataloader_opts: + batch_size: !ref + +test_dataloader_opts: + batch_size: !ref + + +####################### Model parameters ########################### +# Tokenizer parameters +# DAC parameters +# model_type: [16khz, 24khz, 44khz, 44khz] +# vocab_size: [1024, 1024, 1024, 1024] +# model_bitrate: [8kbps, 8kbps, 8kbps, 16kbps] +# max_num_codebooks: [12, 32, 9, 18] +# embedding_dim: [1024, 1024, 1024, 128] +model_type: 24khz +vocab_size: 1024 +model_bitrate: 8kbps +num_codebooks: 2 +sample_rate: 24000 +# Feature parameters +encoder_dim: 1024 +# If set to True, the encoder_dim should be set to the dim of the tokenizer. For encodec it is 128. +pretrain_embeddings: False +freeze_embedding: False + + +# LSTM +activation: !name:torch.nn.Sigmoid +dnn_layers: 2 +dnn_neurons: 1024 +dropout: 0.2 +output_neurons: 31 + +# BPE parameters +# BPE parameters +token_type: char # ["unigram", "bpe", "char"] +character_coverage: 1.0 +blank_index: 0 +bos_index: 1 +eos_index: 2 + +# Decoding parameters +beam_size: 100 +beam_prune_logp: -12.0 +token_prune_min_logp: -1.2 +prune_history: False + +############################## models ################################ +# EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) +tokenizer: !new:model.tokenizer_interface.DACTokenizer + model_type: !ref + model_bitrate: !ref + load_pretrained: True + tag: latest + +discrete_embedding_layer: !new:model.custom_model.Discrete_EmbeddingLayer + num_codebooks: !ref + vocab_size: !ref + emb_dim: !ref + # hidden_dim: !ref + freeze: !ref + init: !ref + +attention_mlp: !new:model.custom_model.AttentionMLP + input_dim: !ref + hidden_dim: !ref + +encoder: !new:speechbrain.nnet.RNN.LSTM + input_shape: [Null, Null, !ref ] + num_layers: !ref + bidirectional: True + dropout: !ref + hidden_size: !ref + +ctc_lin: !new:speechbrain.nnet.linear.Linear + input_size: 2048 + n_neurons: !ref + +modules: + encoder: !ref + ctc_lin: !ref + attention_mlp: !ref + tokenizer: !ref + discrete_embedding_layer: !ref + + +model: !new:torch.nn.ModuleList + - [!ref , !ref , !ref , !ref ] + +####################### Decoding & optimiser ########################### +# Decoding parameters +test_beam_search: + blank_index: !ref + beam_size: !ref + beam_prune_logp: !ref + token_prune_min_logp: !ref + prune_history: !ref + alpha: 0.8 + beta: 1.2 + +ctc_cost: !name:speechbrain.nnet.losses.ctc_loss + blank_index: !ref + + +log_softmax: !new:speechbrain.nnet.activations.Softmax + apply_log: True + +scheduler: !new:speechbrain.nnet.schedulers.NewBobScheduler + initial_value: !ref + improvement_threshold: 0.0025 + annealing_factor: 0.8 + patient: 0 +# scheduler: !new:speechbrain.nnet.schedulers.LinearNoamScheduler +# lr_initial: !ref +# n_warmup_steps: 7500 +# n_keep_steps: 36000 + +model_opt_class: !name:torch.optim.AdamW + lr: !ref + betas: (0.9, 0.98) + eps: 0.000000001 + weight_decay: !ref + +############################## Logging and Pretrainer ########################## +checkpointer: !new:speechbrain.utils.checkpoints.Checkpointer + checkpoints_dir: !ref + recoverables: + model: !ref + scheduler: !ref + counter: !ref + + +# Functions and classes +epoch_counter: !new:speechbrain.utils.epoch_loop.EpochCounter + limit: !ref + +train_logger: !new:speechbrain.utils.train_logger.FileTrainLogger + save_file: !ref + +error_rate_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats + +cer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats + split_tokens: True +wer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/encodec.yaml b/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/encodec.yaml new file mode 100644 index 000000000..03c29ddbb --- /dev/null +++ b/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/encodec.yaml @@ -0,0 +1,232 @@ +# ############################################################################ +# Model: E2E ASR with CTC +# Auido Tokenizer: Encodec +# Encoder: LSTM Encoder +# Decoder: CTC beam searcher and greedy searcher +# Tokens: character +# Training: Librispeech 960h +# Authors: Pooneh Mousavi 2024 +# ############################################################################ +# Seed needs to be set at top of yaml, before objects with parameters are made + +seed: 1986 +__set_seed: !apply:torch.manual_seed [!ref ] +output_folder: !ref results/enocdec/LSTM/ +output_wer_folder: !ref /wer.txt +save_folder: !ref /save +train_log: !ref /train_log.txt + + +# Data files +data_folder: !PLACEHOLDER # e.g., /path/to/LibriSpeech +# If RIRS_NOISES dir exists in /localscratch/xxx_corpus/RIRS_NOISES +# then data_folder_rirs should be /localscratch/xxx_corpus +# otherwise the dataset will automatically be downloaded +# data_folder_rirs: !ref +train_splits: ["train-clean-100", "train-clean-360", "train-other-500"] +dev_splits: ["dev-clean"] +test_splits: ["dev-clean", "test-clean", "test-other"] +skip_prep: False +train_csv: !ref /train.csv +valid_csv: !ref /dev-clean.csv +test_csv: + - !ref /dev-clean.csv + - !ref /test-clean.csv + + +####################### Training Parameters #################################### +number_of_epochs: 20 +batch_size: 4 # This works for 2x GPUs with 32GB +test_batch_size: 1 +grad_accumulation_factor: 2 +max_grad_norm: 5.0 +sorting: descending #random +num_workers: 8 +loss_reduction: batchmean +precision: fp32 # bf16, fp16 or fp32loss_reduction: batchmean +valid_search_interval: 1 +avg_checkpoints: 10 # Number of checkpoints to average for evaluation +cache_size: 1.e+10 + +lr_model: 0.001 +weight_decay: 0.0005 + + +# Training parameters +# To make Transformers converge, the global bath size should be large enough. +# The global batch size is max_batch_len * n_gpus * gradient_accumulation. +# Empirically, we used 850 * 8 A40 45G GPUs * 2 or 1700 * 4 A100 80G * 2. +# Please, set your parameters accordingly. +dynamic_batching: True +max_batch_length_train: 850 +max_batch_len_val: 100 +num_bucket: 200 +shuffle: False # if true re-creates batches at each epoch shuffling examples. +max_batch_ex: 128 +batch_ordering: random + +dynamic_batch_sampler_train: + max_batch_length: !ref + num_buckets: !ref + shuffle: !ref + batch_ordering: !ref + max_batch_ex: !ref + +dynamic_batch_sampler_val: + max_batch_length: !ref + num_buckets: !ref + shuffle: !ref + batch_ordering: !ref + max_batch_ex: !ref + +# Dataloader options +train_dataloader_opts: + batch_size: !ref + shuffle: True + num_workers: !ref + +valid_dataloader_opts: + batch_size: !ref + +test_dataloader_opts: + batch_size: !ref + + +####################### Model parameters ########################### +# Tokenizer parameters +# sample_rate: [24000, 24000, 24000, 24000] +# vocab_size: [1024, 1024, 1024, 1024] +# bandwidth: [1.5, 3.0, 6.0, 12.0, 24.0] +# num_codebooks: [2, 4, 8, 16, 32] +vocab_size: 1024 +bandwidth: 1.5 +num_codebooks: 2 +sample_rate: 24000 +# Feature parameters +encoder_dim: 1024 +# If set to True, the encoder_dim should be set to the dim of the tokenizer. For encodec it is 128. +pretrain_embeddings: False +freeze_embedding: False + + +# LSTM +activation: !name:torch.nn.Sigmoid +dnn_layers: 2 +dnn_neurons: 1024 +dropout: 0.2 +output_neurons: 31 + +# BPE parameters +# BPE parameters +token_type: char # ["unigram", "bpe", "char"] +character_coverage: 1.0 +blank_index: 0 +bos_index: 1 +eos_index: 2 + +# Decoding parameters +beam_size: 100 +beam_prune_logp: -12.0 +token_prune_min_logp: -1.2 +prune_history: False + +############################## models ################################ +# EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) +tokenizer: !new:model.tokenizer_interface.EncodecTokenizer + source: facebook/encodec_24khz # Only the 24kHz version supports mono audio + save_path: !ref + sample_rate: !ref + bandwidth: !ref + flat_embeddings: False + freeze: True + renorm_embeddings: False + +discrete_embedding_layer: !new:model.custom_model.Discrete_EmbeddingLayer + num_codebooks: !ref + vocab_size: !ref + emb_dim: !ref + # hidden_dim: !ref + freeze: !ref + init: !ref + +attention_mlp: !new:model.custom_model.AttentionMLP + input_dim: !ref + hidden_dim: !ref + +encoder: !new:speechbrain.nnet.RNN.LSTM + input_shape: [Null, Null, !ref ] + num_layers: !ref + bidirectional: True + dropout: !ref + hidden_size: !ref + +ctc_lin: !new:speechbrain.nnet.linear.Linear + input_size: 2048 + n_neurons: !ref + +modules: + encoder: !ref + ctc_lin: !ref + attention_mlp: !ref + tokenizer: !ref + discrete_embedding_layer: !ref + + +model: !new:torch.nn.ModuleList + - [!ref , !ref , !ref , !ref ] + +####################### Decoding & optimiser ########################### +# Decoding parameters +test_beam_search: + blank_index: !ref + beam_size: !ref + beam_prune_logp: !ref + token_prune_min_logp: !ref + prune_history: !ref + alpha: 0.8 + beta: 1.2 + +ctc_cost: !name:speechbrain.nnet.losses.ctc_loss + blank_index: !ref + + +log_softmax: !new:speechbrain.nnet.activations.Softmax + apply_log: True + +scheduler: !new:speechbrain.nnet.schedulers.NewBobScheduler + initial_value: !ref + improvement_threshold: 0.0025 + annealing_factor: 0.8 + patient: 0 +# scheduler: !new:speechbrain.nnet.schedulers.LinearNoamScheduler +# lr_initial: !ref +# n_warmup_steps: 7500 +# n_keep_steps: 36000 + +model_opt_class: !name:torch.optim.AdamW + lr: !ref + betas: (0.9, 0.98) + eps: 0.000000001 + weight_decay: !ref + +############################## Logging and Pretrainer ########################## +checkpointer: !new:speechbrain.utils.checkpoints.Checkpointer + checkpoints_dir: !ref + recoverables: + model: !ref + scheduler: !ref + counter: !ref + + +# Functions and classes +epoch_counter: !new:speechbrain.utils.epoch_loop.EpochCounter + limit: !ref + +train_logger: !new:speechbrain.utils.train_logger.FileTrainLogger + save_file: !ref + +error_rate_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats + +cer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats + split_tokens: True +wer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/speech_tokenizer.yaml b/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/speech_tokenizer.yaml new file mode 100644 index 000000000..8105204a5 --- /dev/null +++ b/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/speech_tokenizer.yaml @@ -0,0 +1,222 @@ +# ############################################################################ +# Model: E2E ASR with CTC +# Auido Tokenizer: SpeechTokenizer +# Encoder: LSTM Encoder +# Decoder: CTC beam searcher and greedy searcher +# Tokens: character +# Training: Librispeech 960h +# Authors: Pooneh Mousavi 2024 +# ############################################################################ +# Seed needs to be set at top of yaml, before objects with parameters are made + +seed: 1986 +__set_seed: !apply:torch.manual_seed [!ref ] +output_folder: !ref results/speechtokenizer/LSTM/ +output_wer_folder: !ref /wer.txt +save_folder: !ref /save +train_log: !ref /train_log.txt + + +# Data files +data_folder: !PLACEHOLDER # e.g., /path/to/LibriSpeech +# If RIRS_NOISES dir exists in /localscratch/xxx_corpus/RIRS_NOISES +# then data_folder_rirs should be /localscratch/xxx_corpus +# otherwise the dataset will automatically be downloaded +# data_folder_rirs: !ref +train_splits: ["train-clean-100", "train-clean-360", "train-other-500"] +dev_splits: ["dev-clean"] +test_splits: ["dev-clean", "test-clean", "test-other"] +skip_prep: False +train_csv: !ref /train.csv +valid_csv: !ref /dev-clean.csv +test_csv: + - !ref /dev-clean.csv + - !ref /test-clean.csv + + +####################### Training Parameters #################################### +number_of_epochs: 20 +batch_size: 4 # This works for 2x GPUs with 32GB +test_batch_size: 1 +grad_accumulation_factor: 2 +max_grad_norm: 5.0 +sorting: descending #random +num_workers: 8 +loss_reduction: batchmean +precision: fp32 # bf16, fp16 or fp32loss_reduction: batchmean +valid_search_interval: 1 +avg_checkpoints: 10 # Number of checkpoints to average for evaluation +cache_size: 1.e+10 + +lr_model: 0.001 +weight_decay: 0.0005 + + +# Training parameters +# To make Transformers converge, the global bath size should be large enough. +# The global batch size is max_batch_len * n_gpus * gradient_accumulation. +# Empirically, we used 850 * 8 A40 45G GPUs * 2 or 1700 * 4 A100 80G * 2. +# Please, set your parameters accordingly. +dynamic_batching: True +max_batch_length_train: 850 +max_batch_len_val: 100 +num_bucket: 200 +shuffle: False # if true re-creates batches at each epoch shuffling examples. +max_batch_ex: 128 +batch_ordering: random + +dynamic_batch_sampler_train: + max_batch_length: !ref + num_buckets: !ref + shuffle: !ref + batch_ordering: !ref + max_batch_ex: !ref + +dynamic_batch_sampler_val: + max_batch_length: !ref + num_buckets: !ref + shuffle: !ref + batch_ordering: !ref + max_batch_ex: !ref + +# Dataloader options +train_dataloader_opts: + batch_size: !ref + shuffle: True + num_workers: !ref + +valid_dataloader_opts: + batch_size: !ref + +test_dataloader_opts: + batch_size: !ref + + +####################### Model parameters ########################### +# Tokenizer parameters +vocab_size: 1024 +num_codebooks: 2 +sample_rate: 16000 +# Feature parameters +encoder_dim: 1024 +# If set to True, the encoder_dim should be set to the dim of the tokenizer. For encodec it is 128. +pretrain_embeddings: False +freeze_embedding: False + + +# LSTM +activation: !name:torch.nn.Sigmoid +dnn_layers: 2 +dnn_neurons: 1024 +dropout: 0.2 +output_neurons: 31 + +# BPE parameters +# BPE parameters +token_type: char # ["unigram", "bpe", "char"] +character_coverage: 1.0 +blank_index: 0 +bos_index: 1 +eos_index: 2 + +# Decoding parameters +beam_size: 100 +beam_prune_logp: -12.0 +token_prune_min_logp: -1.2 +prune_history: False + +############################## models ################################ +# EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) +tokenizer: !new:model.tokenizer_interface.SpeechTokenizer + source: fnlp/SpeechTokenizer # Only the 24kHz version supports mono audio + save_path: !ref + +discrete_embedding_layer: !new:model.custom_model.Discrete_EmbeddingLayer + num_codebooks: !ref + vocab_size: !ref + emb_dim: !ref + # hidden_dim: !ref + freeze: !ref + init: !ref + +attention_mlp: !new:model.custom_model.AttentionMLP + input_dim: !ref + hidden_dim: !ref + +encoder: !new:speechbrain.nnet.RNN.LSTM + input_shape: [Null, Null, !ref ] + num_layers: !ref + bidirectional: True + dropout: !ref + hidden_size: !ref + +ctc_lin: !new:speechbrain.nnet.linear.Linear + input_size: 2048 + n_neurons: !ref + +modules: + encoder: !ref + ctc_lin: !ref + attention_mlp: !ref + tokenizer: !ref + discrete_embedding_layer: !ref + + +model: !new:torch.nn.ModuleList + - [!ref , !ref , !ref , !ref ] + +####################### Decoding & optimiser ########################### +# Decoding parameters +test_beam_search: + blank_index: !ref + beam_size: !ref + beam_prune_logp: !ref + token_prune_min_logp: !ref + prune_history: !ref + alpha: 0.8 + beta: 1.2 + +ctc_cost: !name:speechbrain.nnet.losses.ctc_loss + blank_index: !ref + + +log_softmax: !new:speechbrain.nnet.activations.Softmax + apply_log: True + +scheduler: !new:speechbrain.nnet.schedulers.NewBobScheduler + initial_value: !ref + improvement_threshold: 0.0025 + annealing_factor: 0.8 + patient: 0 +# scheduler: !new:speechbrain.nnet.schedulers.LinearNoamScheduler +# lr_initial: !ref +# n_warmup_steps: 7500 +# n_keep_steps: 36000 + +model_opt_class: !name:torch.optim.AdamW + lr: !ref + betas: (0.9, 0.98) + eps: 0.000000001 + weight_decay: !ref + +############################## Logging and Pretrainer ########################## +checkpointer: !new:speechbrain.utils.checkpoints.Checkpointer + checkpoints_dir: !ref + recoverables: + model: !ref + scheduler: !ref + counter: !ref + + +# Functions and classes +epoch_counter: !new:speechbrain.utils.epoch_loop.EpochCounter + limit: !ref + +train_logger: !new:speechbrain.utils.train_logger.FileTrainLogger + save_file: !ref + +error_rate_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats + +cer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats + split_tokens: True +wer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/contextnet/dac.yaml b/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/contextnet/dac.yaml new file mode 100644 index 000000000..eabeef113 --- /dev/null +++ b/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/contextnet/dac.yaml @@ -0,0 +1,225 @@ +# ############################################################################ +# Model: E2E ASR with CTC +# Auido Tokenizer: DAC +# Encoder: Contextnet Encoder +# Decoder: CTC beam searcher and greedy searcher +# Tokens: character +# Training: Librispeech 960h +# Authors: Pooneh Mousavi 2024 +# ############################################################################ +# Seed needs to be set at top of yaml, before objects with parameters are made + +seed: 1986 +__set_seed: !apply:torch.manual_seed [!ref ] +output_folder: !ref results/dac/contextnet/ +output_wer_folder: !ref /wer.txt +save_folder: !ref /save +train_log: !ref /train_log.txt + + +# Data files +data_folder: !PLACEHOLDER # e.g., /path/to/LibriSpeech +# If RIRS_NOISES dir exists in /localscratch/xxx_corpus/RIRS_NOISES +# then data_folder_rirs should be /localscratch/xxx_corpus +# otherwise the dataset will automatically be downloaded +# data_folder_rirs: !ref +train_splits: ["train-clean-100", "train-clean-360", "train-other-500"] +dev_splits: ["dev-clean"] +test_splits: ["dev-clean", "test-clean", "test-other"] +skip_prep: False +train_csv: !ref /train.csv +valid_csv: !ref /dev-clean.csv +test_csv: + - !ref /dev-clean.csv + - !ref /test-clean.csv + + +####################### Training Parameters #################################### +number_of_epochs: 20 +batch_size: 4 # This works for 2x GPUs with 32GB +test_batch_size: 1 +grad_accumulation_factor: 2 +max_grad_norm: 5.0 +sorting: descending #random +num_workers: 8 +loss_reduction: batchmean +precision: fp32 # bf16, fp16 or fp32loss_reduction: batchmean +valid_search_interval: 1 +avg_checkpoints: 10 # Number of checkpoints to average for evaluation +cache_size: 1.e+10 + +lr_model: 0.001 +weight_decay: 0.0005 + + +# Training parameters +# To make Transformers converge, the global bath size should be large enough. +# The global batch size is max_batch_len * n_gpus * gradient_accumulation. +# Empirically, we used 850 * 8 A40 45G GPUs * 2 or 1700 * 4 A100 80G * 2. +# Please, set your parameters accordingly. +dynamic_batching: True +max_batch_length_train: 850 +max_batch_len_val: 100 +num_bucket: 200 +shuffle: False # if true re-creates batches at each epoch shuffling examples. +max_batch_ex: 128 +batch_ordering: random + +dynamic_batch_sampler_train: + max_batch_length: !ref + num_buckets: !ref + shuffle: !ref + batch_ordering: !ref + max_batch_ex: !ref + +dynamic_batch_sampler_val: + max_batch_length: !ref + num_buckets: !ref + shuffle: !ref + batch_ordering: !ref + max_batch_ex: !ref + +# Dataloader options +train_dataloader_opts: + batch_size: !ref + shuffle: True + num_workers: !ref + +valid_dataloader_opts: + batch_size: !ref + +test_dataloader_opts: + batch_size: !ref + + +####################### Model parameters ########################### +# Tokenizer parameters +# DAC parameters +# model_type: [16khz, 24khz, 44khz, 44khz] +# vocab_size: [1024, 1024, 1024, 1024] +# model_bitrate: [8kbps, 8kbps, 8kbps, 16kbps] +# max_num_codebooks: [12, 32, 9, 18] +# embedding_dim: [1024, 1024, 1024, 128] +model_type: 24khz +vocab_size: 1024 +model_bitrate: 8kbps +num_codebooks: 2 +sample_rate: 24000 +# Feature parameters +encoder_dim: 1024 +# If set to True, the encoder_dim should be set to the dim of the tokenizer. For encodec it is 128. +pretrain_embeddings: False +freeze_embedding: False + + +# LSTM +output_neurons: 31 + +# BPE parameters +# BPE parameters +token_type: char # ["unigram", "bpe", "char"] +character_coverage: 1.0 +blank_index: 0 +bos_index: 1 +eos_index: 2 + +# Decoding parameters +beam_size: 100 +beam_prune_logp: -12.0 +token_prune_min_logp: -1.2 +prune_history: False + +############################## models ################################ +# EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) +tokenizer: !new:model.tokenizer_interface.DACTokenizer + model_type: !ref + model_bitrate: !ref + load_pretrained: True + tag: latest + +discrete_embedding_layer: !new:model.custom_model.Discrete_EmbeddingLayer + num_codebooks: !ref + vocab_size: !ref + emb_dim: !ref + # hidden_dim: !ref + freeze: !ref + init: !ref + +attention_mlp: !new:model.custom_model.AttentionMLP + input_dim: !ref + hidden_dim: !ref + +encoder: !new:speechbrain.lobes.models.ContextNet.ContextNet + input_shape: [null, null, !ref ] + strides: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] + +ctc_lin: !new:speechbrain.nnet.linear.Linear + input_size: 640 + n_neurons: !ref + +modules: + encoder: !ref + ctc_lin: !ref + attention_mlp: !ref + tokenizer: !ref + discrete_embedding_layer: !ref + + +model: !new:torch.nn.ModuleList + - [!ref , !ref , !ref , !ref ] + +####################### Decoding & optimiser ########################### +# Decoding parameters +test_beam_search: + blank_index: !ref + beam_size: !ref + beam_prune_logp: !ref + token_prune_min_logp: !ref + prune_history: !ref + alpha: 0.8 + beta: 1.2 + +ctc_cost: !name:speechbrain.nnet.losses.ctc_loss + blank_index: !ref + + +log_softmax: !new:speechbrain.nnet.activations.Softmax + apply_log: True + +scheduler: !new:speechbrain.nnet.schedulers.NewBobScheduler + initial_value: !ref + improvement_threshold: 0.0025 + annealing_factor: 0.8 + patient: 0 +# scheduler: !new:speechbrain.nnet.schedulers.LinearNoamScheduler +# lr_initial: !ref +# n_warmup_steps: 7500 +# n_keep_steps: 36000 + +model_opt_class: !name:torch.optim.AdamW + lr: !ref + betas: (0.9, 0.98) + eps: 0.000000001 + weight_decay: !ref + +############################## Logging and Pretrainer ########################## +checkpointer: !new:speechbrain.utils.checkpoints.Checkpointer + checkpoints_dir: !ref + recoverables: + model: !ref + scheduler: !ref + counter: !ref + + +# Functions and classes +epoch_counter: !new:speechbrain.utils.epoch_loop.EpochCounter + limit: !ref + +train_logger: !new:speechbrain.utils.train_logger.FileTrainLogger + save_file: !ref + +error_rate_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats + +cer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats + split_tokens: True +wer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/contextnet/encodec.yaml b/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/contextnet/encodec.yaml new file mode 100644 index 000000000..c0411bd76 --- /dev/null +++ b/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/contextnet/encodec.yaml @@ -0,0 +1,223 @@ +# ############################################################################ +# Model: E2E ASR with CTC +# Encoder: Contextnet Encoder +# Decoder: CTC beam searcher and greedy searcher +# Tokens: character +# Training: Librispeech 960h +# Authors: Pooneh Mousavi 2024 +# ############################################################################ +# Seed needs to be set at top of yaml, before objects with parameters are made + +seed: 1986 +__set_seed: !apply:torch.manual_seed [!ref ] +output_folder: !ref results/enocdec/Contexnet/ +output_wer_folder: !ref /wer.txt +save_folder: !ref /save +train_log: !ref /train_log.txt + + +# Data files +data_folder: !PLACEHOLDER # e.g., /path/to/LibriSpeech +# If RIRS_NOISES dir exists in /localscratch/xxx_corpus/RIRS_NOISES +# then data_folder_rirs should be /localscratch/xxx_corpus +# otherwise the dataset will automatically be downloaded +# data_folder_rirs: !ref +train_splits: ["train-clean-100", "train-clean-360", "train-other-500"] +dev_splits: ["dev-clean"] +test_splits: ["dev-clean", "test-clean", "test-other"] +skip_prep: False +train_csv: !ref /train.csv +valid_csv: !ref /dev-clean.csv +test_csv: + - !ref /dev-clean.csv + - !ref /test-clean.csv + + +####################### Training Parameters #################################### +number_of_epochs: 20 +batch_size: 4 # This works for 2x GPUs with 32GB +test_batch_size: 1 +grad_accumulation_factor: 2 +max_grad_norm: 5.0 +sorting: descending #random +num_workers: 8 +loss_reduction: batchmean +precision: fp32 # bf16, fp16 or fp32loss_reduction: batchmean +valid_search_interval: 1 +avg_checkpoints: 10 # Number of checkpoints to average for evaluation +cache_size: 1.e+10 + +lr_model: 0.001 +weight_decay: 0.0005 + + +# Training parameters +# To make Transformers converge, the global bath size should be large enough. +# The global batch size is max_batch_len * n_gpus * gradient_accumulation. +# Empirically, we used 850 * 8 A40 45G GPUs * 2 or 1700 * 4 A100 80G * 2. +# Please, set your parameters accordingly. +dynamic_batching: True +max_batch_length_train: 850 +max_batch_len_val: 100 +num_bucket: 200 +shuffle: False # if true re-creates batches at each epoch shuffling examples. +max_batch_ex: 128 +batch_ordering: random + +dynamic_batch_sampler_train: + max_batch_length: !ref + num_buckets: !ref + shuffle: !ref + batch_ordering: !ref + max_batch_ex: !ref + +dynamic_batch_sampler_val: + max_batch_length: !ref + num_buckets: !ref + shuffle: !ref + batch_ordering: !ref + max_batch_ex: !ref + +# Dataloader options +train_dataloader_opts: + batch_size: !ref + shuffle: True + num_workers: !ref + +valid_dataloader_opts: + batch_size: !ref + +test_dataloader_opts: + batch_size: !ref + + +####################### Model parameters ########################### +# Tokenizer parameters +# sample_rate: [24000, 24000, 24000, 24000] +# vocab_size: [1024, 1024, 1024, 1024] +# bandwidth: [1.5, 3.0, 6.0, 12.0, 24.0] +# num_codebooks: [2, 4, 8, 16, 32] +vocab_size: 1024 +bandwidth: 1.5 +num_codebooks: 2 +sample_rate: 24000 +# Feature parameters +encoder_dim: 1024 +# If set to True, the encoder_dim should be set to the dim of the tokenizer. For encodec it is 128. +pretrain_embeddings: False +freeze_embedding: False + + +output_neurons: 31 + +# BPE parameters +# BPE parameters +token_type: char # ["unigram", "bpe", "char"] +character_coverage: 1.0 +blank_index: 0 +bos_index: 1 +eos_index: 2 + +# Decoding parameters +beam_size: 100 +beam_prune_logp: -12.0 +token_prune_min_logp: -1.2 +prune_history: False + +############################## models ################################ +# EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) +tokenizer: !new:model.tokenizer_interface.EncodecTokenizer + source: facebook/encodec_24khz # Only the 24kHz version supports mono audio + save_path: !ref + sample_rate: !ref + bandwidth: !ref + flat_embeddings: False + freeze: True + renorm_embeddings: False + +discrete_embedding_layer: !new:model.custom_model.Discrete_EmbeddingLayer + num_codebooks: !ref + vocab_size: !ref + emb_dim: !ref + # hidden_dim: !ref + freeze: !ref + init: !ref + +attention_mlp: !new:model.custom_model.AttentionMLP + input_dim: !ref + hidden_dim: !ref + +encoder: !new:speechbrain.lobes.models.ContextNet.ContextNet + input_shape: [null, null, !ref ] + strides: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] + +ctc_lin: !new:speechbrain.nnet.linear.Linear + input_size: 640 + n_neurons: !ref + +modules: + encoder: !ref + ctc_lin: !ref + attention_mlp: !ref + tokenizer: !ref + discrete_embedding_layer: !ref + + +model: !new:torch.nn.ModuleList + - [!ref , !ref , !ref , !ref ] + +####################### Decoding & optimiser ########################### +# Decoding parameters +test_beam_search: + blank_index: !ref + beam_size: !ref + beam_prune_logp: !ref + token_prune_min_logp: !ref + prune_history: !ref + alpha: 0.8 + beta: 1.2 + +ctc_cost: !name:speechbrain.nnet.losses.ctc_loss + blank_index: !ref + + +log_softmax: !new:speechbrain.nnet.activations.Softmax + apply_log: True + +scheduler: !new:speechbrain.nnet.schedulers.NewBobScheduler + initial_value: !ref + improvement_threshold: 0.0025 + annealing_factor: 0.8 + patient: 0 +# scheduler: !new:speechbrain.nnet.schedulers.LinearNoamScheduler +# lr_initial: !ref +# n_warmup_steps: 7500 +# n_keep_steps: 36000 + +model_opt_class: !name:torch.optim.AdamW + lr: !ref + betas: (0.9, 0.98) + eps: 0.000000001 + weight_decay: !ref + +############################## Logging and Pretrainer ########################## +checkpointer: !new:speechbrain.utils.checkpoints.Checkpointer + checkpoints_dir: !ref + recoverables: + model: !ref + scheduler: !ref + counter: !ref + + +# Functions and classes +epoch_counter: !new:speechbrain.utils.epoch_loop.EpochCounter + limit: !ref + +train_logger: !new:speechbrain.utils.train_logger.FileTrainLogger + save_file: !ref + +error_rate_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats + +cer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats + split_tokens: True +wer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/contextnet/speech_tokenizer.yaml b/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/contextnet/speech_tokenizer.yaml new file mode 100644 index 000000000..77ef2c540 --- /dev/null +++ b/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/contextnet/speech_tokenizer.yaml @@ -0,0 +1,213 @@ +# ############################################################################ +# Model: E2E ASR with CTC +# Auido Tokenizer: SpeechTokenizer +# Encoder: Contextnet Encoder +# Decoder: CTC beam searcher and greedy searcher +# Tokens: character +# Training: Librispeech 960h +# Authors: Pooneh Mousavi 2024 +# ############################################################################ +# Seed needs to be set at top of yaml, before objects with parameters are made + +seed: 1986 +__set_seed: !apply:torch.manual_seed [!ref ] +output_folder: !ref results/speechtokenizer/contextnet/ +output_wer_folder: !ref /wer.txt +save_folder: !ref /save +train_log: !ref /train_log.txt + + +# Data files +data_folder: !PLACEHOLDER # e.g., /path/to/LibriSpeech +# If RIRS_NOISES dir exists in /localscratch/xxx_corpus/RIRS_NOISES +# then data_folder_rirs should be /localscratch/xxx_corpus +# otherwise the dataset will automatically be downloaded +# data_folder_rirs: !ref +train_splits: ["train-clean-100", "train-clean-360", "train-other-500"] +dev_splits: ["dev-clean"] +test_splits: ["dev-clean", "test-clean", "test-other"] +skip_prep: False +train_csv: !ref /train.csv +valid_csv: !ref /dev-clean.csv +test_csv: + - !ref /dev-clean.csv + - !ref /test-clean.csv + + +####################### Training Parameters #################################### +number_of_epochs: 20 +batch_size: 4 # This works for 2x GPUs with 32GB +test_batch_size: 1 +grad_accumulation_factor: 2 +max_grad_norm: 5.0 +sorting: descending #random +num_workers: 8 +loss_reduction: batchmean +precision: fp32 # bf16, fp16 or fp32loss_reduction: batchmean +valid_search_interval: 1 +avg_checkpoints: 10 # Number of checkpoints to average for evaluation +cache_size: 1.e+10 + +lr_model: 0.001 +weight_decay: 0.0005 + + +# Training parameters +# To make Transformers converge, the global bath size should be large enough. +# The global batch size is max_batch_len * n_gpus * gradient_accumulation. +# Empirically, we used 850 * 8 A40 45G GPUs * 2 or 1700 * 4 A100 80G * 2. +# Please, set your parameters accordingly. +dynamic_batching: True +max_batch_length_train: 850 +max_batch_len_val: 100 +num_bucket: 200 +shuffle: False # if true re-creates batches at each epoch shuffling examples. +max_batch_ex: 128 +batch_ordering: random + +dynamic_batch_sampler_train: + max_batch_length: !ref + num_buckets: !ref + shuffle: !ref + batch_ordering: !ref + max_batch_ex: !ref + +dynamic_batch_sampler_val: + max_batch_length: !ref + num_buckets: !ref + shuffle: !ref + batch_ordering: !ref + max_batch_ex: !ref + +# Dataloader options +train_dataloader_opts: + batch_size: !ref + shuffle: True + num_workers: !ref + +valid_dataloader_opts: + batch_size: !ref + +test_dataloader_opts: + batch_size: !ref + + +####################### Model parameters ########################### +# Tokenizer parameters +vocab_size: 1024 +num_codebooks: 2 +sample_rate: 16000 +# Feature parameters +encoder_dim: 1024 +# If set to True, the encoder_dim should be set to the dim of the tokenizer. For encodec it is 128. +pretrain_embeddings: False +freeze_embedding: False + +output_neurons: 31 + +# BPE parameters +# BPE parameters +token_type: char # ["unigram", "bpe", "char"] +character_coverage: 1.0 +blank_index: 0 +bos_index: 1 +eos_index: 2 + +# Decoding parameters +beam_size: 100 +beam_prune_logp: -12.0 +token_prune_min_logp: -1.2 +prune_history: False + +############################## models ################################ +# EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) +tokenizer: !new:model.tokenizer_interface.SpeechTokenizer + source: fnlp/SpeechTokenizer # Only the 24kHz version supports mono audio + save_path: !ref + +discrete_embedding_layer: !new:model.custom_model.Discrete_EmbeddingLayer + num_codebooks: !ref + vocab_size: !ref + emb_dim: !ref + # hidden_dim: !ref + freeze: !ref + init: !ref + +attention_mlp: !new:model.custom_model.AttentionMLP + input_dim: !ref + hidden_dim: !ref + +encoder: !new:speechbrain.lobes.models.ContextNet.ContextNet + input_shape: [null, null, !ref ] + strides: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] + +ctc_lin: !new:speechbrain.nnet.linear.Linear + input_size: 640 + n_neurons: !ref + +modules: + encoder: !ref + ctc_lin: !ref + attention_mlp: !ref + tokenizer: !ref + discrete_embedding_layer: !ref + + +model: !new:torch.nn.ModuleList + - [!ref , !ref , !ref , !ref ] + +####################### Decoding & optimiser ########################### +# Decoding parameters +test_beam_search: + blank_index: !ref + beam_size: !ref + beam_prune_logp: !ref + token_prune_min_logp: !ref + prune_history: !ref + alpha: 0.8 + beta: 1.2 + +ctc_cost: !name:speechbrain.nnet.losses.ctc_loss + blank_index: !ref + + +log_softmax: !new:speechbrain.nnet.activations.Softmax + apply_log: True + +scheduler: !new:speechbrain.nnet.schedulers.NewBobScheduler + initial_value: !ref + improvement_threshold: 0.0025 + annealing_factor: 0.8 + patient: 0 +# scheduler: !new:speechbrain.nnet.schedulers.LinearNoamScheduler +# lr_initial: !ref +# n_warmup_steps: 7500 +# n_keep_steps: 36000 + +model_opt_class: !name:torch.optim.AdamW + lr: !ref + betas: (0.9, 0.98) + eps: 0.000000001 + weight_decay: !ref + +############################## Logging and Pretrainer ########################## +checkpointer: !new:speechbrain.utils.checkpoints.Checkpointer + checkpoints_dir: !ref + recoverables: + model: !ref + scheduler: !ref + counter: !ref + + +# Functions and classes +epoch_counter: !new:speechbrain.utils.epoch_loop.EpochCounter + limit: !ref + +train_logger: !new:speechbrain.utils.train_logger.FileTrainLogger + save_file: !ref + +error_rate_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats + +cer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats + split_tokens: True +wer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor/librispeech_prepare.py b/benchmarks/DASB/LibriSpeech/ASR-refactor/librispeech_prepare.py new file mode 120000 index 000000000..a3126ec94 --- /dev/null +++ b/benchmarks/DASB/LibriSpeech/ASR-refactor/librispeech_prepare.py @@ -0,0 +1 @@ +../librispeech_prepare.py \ No newline at end of file diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor/train.py b/benchmarks/DASB/LibriSpeech/ASR-refactor/train.py new file mode 100644 index 000000000..61b6c56f4 --- /dev/null +++ b/benchmarks/DASB/LibriSpeech/ASR-refactor/train.py @@ -0,0 +1,447 @@ +#!/usr/bin/env/python3 +"""Recipe for training an discrete tokens ctc ASR system with librispeech. + +Decoding is performed with greedy decoding at validation time. +At test time, beamsearch is used with an optional external language model. + +Authors + * Pooneh Mousavi 2024 +""" + +import os +import sys +import torch +import torchaudio +import logging +import speechbrain as sb +from speechbrain.utils.distributed import run_on_main, if_main_process +from speechbrain.tokenizers.SentencePiece import SentencePiece +from hyperpyyaml import load_hyperpyyaml +from pathlib import Path +base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../")) +sys.path.append(base_dir) + + +logger = logging.getLogger(__name__) + +_CACHE = {"size": 0} + +# Define training procedure +class ASR(sb.Brain): + def compute_forward(self, batch, stage): + """Forward computations from the waveform batches to the output probabilities.""" + batch = batch.to(self.device) + wavs, wav_lens = batch.sig + + + # Add waveform augmentation if specified. + if stage == sb.Stage.TRAIN and hasattr(self.hparams, "wav_augment"): + wavs, wav_lens = self.hparams.wav_augment(wavs, wav_lens) # [B, T] + + current_epoch = self.hparams.epoch_counter.current + + # compute features + # Extract tokens (cache them at first epoch if augmentation is disabled) + key = tuple(sorted(batch.id)) + try: + in_toks = _CACHE[key] + in_toks = in_toks.to(self.device) + except KeyError: + with torch.no_grad(): + self.hparams.tokenizer.eval().to(self.device) + in_toks = self.hparams.tokenizer.sig_to_tokens(wavs, wav_lens,num_codebooks=hparams['num_codebooks']) #[B, T, N-Q] + if stage != sb.Stage.TRAIN or ( + stage == sb.Stage.TRAIN and (not hasattr(self.hparams, "wav_augment")) + ): + if _CACHE["size"] < self.hparams.cache_size: + _CACHE[key] = in_toks.cpu() + _CACHE["size"] += in_toks.numel() + + # Extract embeddings + in_embs = self.modules.discrete_embedding_layer(in_toks) #[B, T, N-Q, D] + + # Attention-Pooling + att_w = self.modules.attention_mlp(in_embs) #[B, T, N-Q, 1] + in_embs = torch.matmul(att_w.transpose(2, -1), in_embs).squeeze(-2) #[B, T, D] + + # forward modules + if type(self.modules.encoder).__name__ == "ContextNet": + enc_out = self.modules.encoder(in_embs) + + elif type(self.modules.encoder).__name__ == "LSTM": + enc_out, _ = self.modules.encoder( + in_embs + ) + + else: + raise NotImplementedError + + # output layer for ctc log-probabilities + logits = self.modules.ctc_lin(enc_out) + p_ctc = self.hparams.log_softmax(logits) + + p_tokens = None + if stage == sb.Stage.VALID: + p_tokens = sb.decoders.ctc_greedy_decode( + p_ctc, wav_lens, blank_id=self.hparams.blank_index + ) + elif stage == sb.Stage.TEST: + p_tokens = test_searcher(p_ctc, wav_lens) + + return p_ctc, wav_lens, p_tokens + + + def compute_objectives(self, predictions, batch, stage): + """Computes the loss (CTC+NLL) given predictions and targets.""" + + p_ctc, wav_lens, predicted_tokens = predictions + ids = batch.id + tokens, tokens_lens = batch.tokens + + + # Label Augmentation + if stage == sb.Stage.TRAIN and hasattr(self.hparams, "wav_augment"): + tokens = self.hparams.wav_augment.replicate_labels(tokens) + tokens_lens = self.hparams.wav_augment.replicate_labels(tokens_lens) + + loss = self.hparams.ctc_cost(p_ctc, tokens, wav_lens, tokens_lens) + + if stage == sb.Stage.VALID: + # Decode token terms to words + predicted_words = self.tokenizer( + predicted_tokens, task="decode_from_list" + ) + elif stage == sb.Stage.TEST: + predicted_words = [ + hyp[0].text.split(" ") for hyp in predicted_tokens + ] + + if stage != sb.Stage.TRAIN: + target_words = [wrd.split(" ") for wrd in batch.wrd] + self.wer_metric.append(ids, predicted_words, target_words) + self.cer_metric.append(ids, predicted_words, target_words) + + return loss + + def on_stage_start(self, stage, epoch): + """Gets called at the beginning of each epoch""" + if stage != sb.Stage.TRAIN: + self.cer_metric = self.hparams.cer_computer() + self.wer_metric = self.hparams.wer_computer() + + def on_stage_end(self, stage, stage_loss, epoch): + """Gets called at the end of a epoch.""" + # Compute/store important stats + stage_stats = {"loss": stage_loss} + if stage == sb.Stage.TRAIN: + self.train_stats = stage_stats + else: + stage_stats["CER"] = self.cer_metric.summarize("error_rate") + stage_stats["WER"] = self.wer_metric.summarize("error_rate") + current_epoch = self.hparams.epoch_counter.current + valid_search_interval = self.hparams.valid_search_interval + if ( + current_epoch % valid_search_interval == 0 + or stage == sb.Stage.TEST + ): + stage_stats["WER"] = self.wer_metric.summarize("error_rate") + + # log stats and save checkpoint at end-of-epoch + if stage == sb.Stage.VALID: + if type(self.hparams.scheduler).__name__ == "NewBobScheduler": + lr, new_lr = self.hparams.scheduler( + stage_stats["loss"] + ) + sb.nnet.schedulers.update_learning_rate( + self.optimizer, new_lr + ) + elif type(self.hparams.scheduler).__name__ == "LinearNoamScheduler": + lr = self.hparams.scheduler.current_lr + steps = self.optimizer_step + + else: + raise NotImplementedError + + optimizer = self.optimizer.__class__.__name__ + epoch_stats = { + "epoch": epoch, + "lr": lr, + "optimizer": optimizer, + } + self.hparams.train_logger.log_stats( + stats_meta=epoch_stats, + train_stats=self.train_stats, + valid_stats=stage_stats, + ) + self.checkpointer.save_and_keep_only( + meta={"WER": stage_stats["WER"], "epoch": epoch}, + min_keys=["WER"], + num_to_keep=self.hparams.avg_checkpoints, + ) + + elif stage == sb.Stage.TEST: + self.hparams.train_logger.log_stats( + stats_meta={"Epoch loaded": self.hparams.epoch_counter.current}, + test_stats=stage_stats, + ) + if if_main_process(): + with open(self.hparams.output_wer_folder, "w", encoding="utf-8") as w: + self.wer_metric.write_stats(w) + + def on_fit_batch_end(self, batch, outputs, loss, should_step): + if should_step and type(self.hparams.scheduler).__name__ == "LinearNoamScheduler": + self.hparams.scheduler(self.optimizer) + + + +def dataio_prepare(hparams, tokenizer): + """This function prepares the datasets to be used in the brain class. + It also defines the data processing pipeline through user-defined functions.""" + data_folder = hparams["data_folder"] + + train_data = sb.dataio.dataset.DynamicItemDataset.from_csv( + csv_path=hparams["train_csv"], replacements={"data_root": data_folder}, + ) + + if hparams["sorting"] == "ascending": + # we sort training data to speed up training and get better results. + train_data = train_data.filtered_sorted(sort_key="duration") + # when sorting do not shuffle in dataloader ! otherwise is pointless + hparams["train_dataloader_opts"]["shuffle"] = False + + elif hparams["sorting"] == "descending": + train_data = train_data.filtered_sorted( + sort_key="duration", reverse=True + ) + # when sorting do not shuffle in dataloader ! otherwise is pointless + hparams["train_dataloader_opts"]["shuffle"] = False + + elif hparams["sorting"] == "random": + pass + + else: + raise NotImplementedError( + "sorting must be random, ascending or descending" + ) + + valid_data = sb.dataio.dataset.DynamicItemDataset.from_csv( + csv_path=hparams["valid_csv"], replacements={"data_root": data_folder}, + ) + valid_data = valid_data.filtered_sorted(sort_key="duration") + + # test is separate + test_datasets = {} + for csv_file in hparams["test_csv"]: + name = Path(csv_file).stem + test_datasets[name] = sb.dataio.dataset.DynamicItemDataset.from_csv( + csv_path=csv_file, replacements={"data_root": data_folder} + ) + test_datasets[name] = test_datasets[name].filtered_sorted( + sort_key="duration" + ) + + datasets = [train_data, valid_data] + [i for k, i in test_datasets.items()] + + # 2. Define audio pipeline: + @sb.utils.data_pipeline.takes("wav") + @sb.utils.data_pipeline.provides("sig") + def audio_pipeline(wav): + sig = sb.dataio.dataio.read_audio(wav) + info = torchaudio.info(wav) + resampled = torchaudio.transforms.Resample( + info.sample_rate, hparams["sample_rate"], + )(sig) + #resampled = resampled.unsqueeze(0) + return resampled + + sb.dataio.dataset.add_dynamic_item(datasets, audio_pipeline) + + # 3. Define text pipeline: + @sb.utils.data_pipeline.takes("wrd") + @sb.utils.data_pipeline.provides( + "wrd", "char_list", "tokens_list", "tokens" + ) + def text_pipeline(wrd): + yield wrd + char_list = list(wrd) + yield char_list + tokens_list = tokenizer.sp.encode_as_ids(wrd) + yield tokens_list + tokens = torch.LongTensor(tokens_list) + yield tokens + + sb.dataio.dataset.add_dynamic_item(datasets, text_pipeline) + + + # 4. Set output: + sb.dataio.dataset.set_output_keys( + datasets, ["id", "sig", "wrd", "char_list", "tokens"], + ) + + # 5. If Dynamic Batching is used, we instantiate the needed samplers. + train_batch_sampler = None + valid_batch_sampler = None + if hparams["dynamic_batching"]: + from speechbrain.dataio.sampler import DynamicBatchSampler # noqa + + dynamic_hparams_train = hparams["dynamic_batch_sampler_train"] + dynamic_hparams_val = hparams["dynamic_batch_sampler_val"] + + train_batch_sampler = DynamicBatchSampler( + train_data, + length_func=lambda x: x["duration"], + **dynamic_hparams_train, + ) + + valid_batch_sampler = DynamicBatchSampler( + valid_data, + length_func=lambda x: x["duration"], + **dynamic_hparams_val, + ) + + return ( + train_data, + valid_data, + test_datasets, + train_batch_sampler, + valid_batch_sampler, + ) + + +if __name__ == "__main__": + + # CLI: + hparams_file, run_opts, overrides = sb.parse_arguments(sys.argv[1:]) + with open(hparams_file) as fin: + hparams = load_hyperpyyaml(fin, overrides) + + # If distributed_launch=True then + # create ddp_group with the right communication protocol + sb.utils.distributed.ddp_init_group(run_opts) + + + # Create experiment directory + sb.create_experiment_directory( + experiment_directory=hparams["output_folder"], + hyperparams_to_save=hparams_file, + overrides=overrides, + ) + + + # Dataset prep (parsing Librispeech) + from librispeech_prepare import prepare_librispeech # noqa + + # multi-gpu (ddp) save data preparation + run_on_main( + prepare_librispeech, + kwargs={ + "data_folder": hparams["data_folder"], + "tr_splits": hparams["train_splits"], + "dev_splits": hparams["dev_splits"], + "te_splits": hparams["test_splits"], + "save_folder": hparams["output_folder"], + "merge_lst": hparams["train_splits"], + "merge_name": "train.csv", + "skip_prep": hparams["skip_prep"], + }, + ) + + # Defining tokenizer and loading it + tokenizer = SentencePiece( + model_dir=hparams["save_folder"], + vocab_size=hparams["output_neurons"], + annotation_train=hparams["train_csv"], + annotation_read="wrd", + model_type=hparams["token_type"], + character_coverage=hparams["character_coverage"], + bos_id=hparams["bos_index"], + eos_id=hparams["eos_index"], + ) + + # here we create the datasets objects as well as tokenization and encoding + ( + train_data, + valid_data, + test_datasets, + train_bsampler, + valid_bsampler, + ) = dataio_prepare(hparams, tokenizer) + + # Use pretrained embeddings + if hparams["pretrain_embeddings"]: + embs= hparams["tokenizer"].get_pretrained_embeddings(device=run_opts["device"],num_codebooks=hparams['num_codebooks'], vocab_size=hparams["vocab_size"]) + hparams["discrete_embedding_layer"].init_embedding(embs) + + + # Log number of parameters/buffers + codec_params = sum([x.numel() for x in hparams["tokenizer"].state_dict().values()]) + model_params = sum( + [ + x.numel() + for module in hparams["modules"].values() + for x in module.state_dict().values() + ] + ) + hparams["train_logger"].log_stats( + stats_meta={ + f"Codec parameters/buffers (M)": f"{codec_params / 1e6:.2f}", + "Model parameters/buffers (M)": f"{model_params / 1e6:.2f}", + }, + ) + + # Trainer initialization + asr_brain = ASR( + modules=hparams["modules"], + opt_class=hparams["model_opt_class"], + hparams=hparams, + run_opts=run_opts, + checkpointer=hparams["checkpointer"], + ) + + # Adding objects to trainer. + asr_brain.tokenizer = tokenizer + vocab_list = [ + tokenizer.sp.id_to_piece(i) for i in range(tokenizer.sp.vocab_size()) + ] + + from speechbrain.decoders.ctc import CTCBeamSearcher + + test_searcher = CTCBeamSearcher( + **hparams["test_beam_search"], + vocab_list=vocab_list, + ) + + train_dataloader_opts = hparams["train_dataloader_opts"] + valid_dataloader_opts = hparams["valid_dataloader_opts"] + + if train_bsampler is not None: + train_dataloader_opts = { + "batch_sampler": train_bsampler, + "num_workers": hparams["num_workers"], + } + + if valid_bsampler is not None: + valid_dataloader_opts = {"batch_sampler": valid_bsampler} + + # Training + asr_brain.fit( + asr_brain.hparams.epoch_counter, + train_data, + valid_data, + train_loader_kwargs=hparams["train_dataloader_opts"], + valid_loader_kwargs=hparams["valid_dataloader_opts"], + ) + + # Testing + if not os.path.exists(hparams["output_wer_folder"]): + os.makedirs(hparams["output_wer_folder"]) + + for k in test_datasets.keys(): # keys are test_clean, test_other etc + asr_brain.hparams.output_wer_folder = os.path.join( + hparams["output_wer_folder"], f"wer_{k}.txt" + ) + asr_brain.evaluate( + test_datasets[k], + test_loader_kwargs=hparams["test_dataloader_opts"], + min_key="WER", + ) diff --git a/benchmarks/DASB/model/ __init__.py b/benchmarks/DASB/model/ __init__.py new file mode 100644 index 000000000..e7db8766a --- /dev/null +++ b/benchmarks/DASB/model/ __init__.py @@ -0,0 +1 @@ +from model.tokenizer_interface import EncodecTokenizer \ No newline at end of file diff --git a/benchmarks/DASB/model/custom_model.py b/benchmarks/DASB/model/custom_model.py index b6e11a0d2..d3bf3cc9f 100644 --- a/benchmarks/DASB/model/custom_model.py +++ b/benchmarks/DASB/model/custom_model.py @@ -57,9 +57,9 @@ def __init__( num_codebooks, vocab_size, emb_dim, - pad_index=0, init=False, freeze=False, + hidden_dim =None, ): super(Discrete_EmbeddingLayer, self).__init__() self.vocab_size = vocab_size @@ -70,10 +70,17 @@ def __init__( ).requires_grad_(not self.freeze) self.init = init - def init_embedding(self, weights): - with torch.no_grad(): - self.embedding.weight = torch.nn.Parameter(weights) + # Add a linear layer to match dimensions if necessary + if hidden_dim is not None and hidden_dim != emb_dim: + self.proj_layer = torch.nn.Linear(emb_dim, hidden_dim) + else: + self.proj_layer = None + + def init_embedding(self, weights): + self.embedding.weight.data.copy_(weights) + + def forward(self, in_tokens): """Computes the embedding for discrete tokens. a sample. @@ -97,4 +104,6 @@ def forward(self, in_tokens): ) # Forward Pass to embedding and in_embs = self.embedding(in_tokens) + if self.proj_layer is not None: + in_embs = self.proj_layer(in_embs) return in_embs diff --git a/benchmarks/DASB/model/tokenizer_interface.py b/benchmarks/DASB/model/tokenizer_interface.py index 892bef6b3..351652a57 100644 --- a/benchmarks/DASB/model/tokenizer_interface.py +++ b/benchmarks/DASB/model/tokenizer_interface.py @@ -10,92 +10,152 @@ """ import torch +from abc import ABC, abstractmethod +from speechbrain.lobes.models.huggingface_transformers.encodec import Encodec +from speechbrain.lobes.models.huggingface_transformers.discrete_ssl import DiscreteSSL +from speechbrain.lobes.models.discrete.dac import DAC +from speechbrain.lobes.models.discrete.speechtokenizer_interface import SpeechTokenizer_interface -from speechbrain.lobes.models.huggingface_transformers.encodec import Encodec -from speechbrain.lobes.models.huggingface_transformers.discrete_ssl import DiscreteSSL -from speechbrain.lobes.models.discrete.dac import DAC -from speechbrain.lobes.models.discrete.speechtokenizer_interface import SpeechTokenizer_interface +class BaseTokenizer(ABC): + @abstractmethod + @torch.no_grad() + def sig_to_tokens(self, signal, lengths, **kwargs): + """Abstract method to encode a signal into tokens.""" + pass + + @abstractmethod + @torch.no_grad() + def tokens_to_sig(self, tokens, **kwargs): + """Abstract method to decode tokens into a signal.""" + pass + + @abstractmethod + @torch.no_grad() + def get_pretrained_embeddings(self, **kwargs): + """Return pretrained codebook embedding.""" + pass -class Tokenizer_Encodec(Encodec): +class EncodecTokenizer(Encodec, BaseTokenizer): @torch.no_grad() - def sig_to_toks(self, sig, lens,**kwargs): - # sig: [B, T] + def sig_to_tokens(self, signal, lengths, **kwargs): + # signal: [B, T] self.eval() - toks, _ = self.encode(sig, lens) # [B, N, K] - return toks + tokens, _ = self.encode(signal, lengths) # [B, T, N_Q] + return tokens @torch.no_grad() - def toks_to_sig(self, toks,**kwargs): - # toks: [B, N, K] + def tokens_to_sig(self, tokens, **kwargs): + # tokens: [B, T, N_Q] self.eval() - sig = self.decode(toks)[:, 0] # [B, T] - return sig - -class Tokenizer_DAC(DAC): + signal = self.decode(tokens)[:, 0] # [B, T] + return signal + @torch.no_grad() - def sig_to_toks(self, sig, lens,**kwargs): - # sig: [B, T] + def get_pretrained_embeddings(self, **kwargs): + """Return pretrained codebook embedding.""" + embeddings = self.vocabulary + return embeddings.reshape(-1, embeddings.shape[-1]) + +class DACTokenizer(DAC, BaseTokenizer): + @torch.no_grad() + def sig_to_tokens(self, signal, lengths, **kwargs): + # signal: [B, T] self.eval() - toks, _ = self( - sig[:, None], n_quantizers=kwargs['num_codebooks'] - ) # [B, K, N] - toks = toks.movedim(-1, -2) # [B, N, K] - return toks + tokens, _ = self( + signal[:, None], n_quantizers=kwargs['num_codebooks'] + ) # [B, N_Q, T] + return tokens.movedim(-1, -2) # [B, T, N_Q] @torch.no_grad() - def toks_to_sig(self, toks,**kwargs): - # toks: [B, N, K] + def tokens_to_sig(self, tokens, **kwargs): + # tokens: [B, T, N_Q] self.eval() - qfeats, _, _ = self.quantizer.from_codes( - toks.movedim(-1, -2) # [B, K, N] + quantized_feats, _, _ = self.quantizer.from_codes( + tokens.movedim(-1, -2) # [B, N_Q, T] ) - sig = self.decode(qfeats)[:, 0] # [B, T] - return sig - -class Tokenizer_SpeechTokenizer(SpeechTokenizer_interface): + signal = self.decode(quantized_feats)[:, 0] # [B, T] + return signal + + @torch.no_grad() + def get_pretrained_embeddings(self, **kwargs): + """Return pretrained codebook embedding.""" + # See https://github.com/descriptinc/descript-audio-codec/blob/c7cfc5d2647e26471dc394f95846a0830e7bec34/dac/nn/quantize.py#L200 + toks = torch.arange(kwargs["vocab_size"], device=kwargs["device"]) + toks = ( + toks[:, None, None].expand(-1, kwargs["num_codebooks"], -1).clone() + ) # [C, K, 1] + self.to(kwargs["device"]).eval() + with torch.no_grad(): + z_q, z_p, _ = self.quantizer.from_codes(toks) + z_ps = z_p.split(z_p.shape[1] // toks.shape[1], dim=1) # [C, D, 1] * K + z_qs = [] + for i, z_p_i in enumerate(z_ps): + with torch.no_grad(): + z_q_i = ( + self.quantizer.quantizers[i].out_proj(z_p_i) + ) # [C, H, 1] + z_qs.append(z_q_i) + assert (z_q == sum(z_qs)).all() + embeddings = torch.cat(z_qs)[:, :, 0] # [CK, H] + return embeddings + +class SpeechTokenizer(SpeechTokenizer_interface, BaseTokenizer): @torch.no_grad() - def sig_to_toks(self, sig, lens,**kwargs): - # sig: [B, T] + def sig_to_tokens(self, signal, lengths, **kwargs): + # signal: [B, T] self.eval() - toks = self(sig)[ - : kwargs['num_codebooks'] - ] # [K, B, N] - toks = toks.movedim(-3, -1) # [B, N, K] - return toks + tokens = self(signal)[: kwargs['num_codebooks']] # [N_Q, B, T] + return tokens.movedim(-3, -1) # [B, T, N_Q] @torch.no_grad() - def toks_to_sig(self, toks,**kwargs): - # toks: [B, N, K] + def tokens_to_sig(self, tokens, **kwargs): + # tokens: [B, T, N_Q] self.eval() - toks = toks.movedim(-1, -3) # [K, B, N] - sig = self.decode(toks) # [B, T] - return sig - -class Tokenizer_DiscreteSSL(DiscreteSSL): + tokens = tokens.movedim(-1, -3) # [N_Q, B, T] + return self.decode(tokens) # [B, T] + + @torch.no_grad() + def get_pretrained_embeddings(self, **kwargs): + """Return pretrained codebook embedding.""" + # See https://github.com/ZhangXInFD/SpeechTokenizer/blob/a9f88dc72642b600654a62861e34342babae6c71/speechtokenizer/quantization/core_vq.py#L360 + toks = torch.arange(kwargs["vocab_size"], device=kwargs["device"]) + toks = ( + toks[None, :, None].expand(kwargs["num_codebooks"], -1, -1).clone() + ) # [K, C, 1] + self.to(kwargs["device"]).eval() + embs = [] + for i, indices in enumerate(toks): + layer = self.model.quantizer.vq.layers[i] + with torch.no_grad(): + quantized = layer.decode(indices) # [C, H, 1] + embs.append(quantized) + assert ( + self.model.quantizer.decode(toks) == sum(embs) + ).all() + embeddings = torch.cat(embs)[:, :, 0] # [CK, H] + return embeddings + +class DiscreteSSLTokenizer(DiscreteSSL, BaseTokenizer): @torch.no_grad() - def sig_to_toks(self, sig, lens): - # sig: [B, T] + def sig_to_tokens(self, signal, lengths): + # signal: [B, T] self.hparams.codec_quantizer.to(self.device).eval() - toks, _, _ = self.hparams.codec_quantizer( - sig, - lens, + tokens, _, _ = self.hparams.codec_quantizer( + signal, + lengths, SSL_layers=self.hparams.SSL_layers, deduplicates=[False] * len(self.hparams.SSL_layers), bpe_tokenizers=[None] * len(self.hparams.SSL_layers), - ) # [B, N, K] - return toks + ) # [B, T, N_Q] + return tokens @torch.no_grad() - def toks_to_sig(self, toks): - # toks: [B, N, K] - self.hparams.codec_vocoder.device = self.device + def tokens_to_sig(self, tokens): + # tokens: [B, T, N_Q] self.hparams.codec_vocoder.to(self.device).eval() - # Add offset for embedding layer all_layer_ids = self.hparams.codec_quantizer.ssl_layer_ids - # TODO: remove after testing - assert tuple(all_layer_ids) == (1, 3, 7, 12, 18, 23) offsets = torch.arange( 0, len(all_layer_ids) * self.hparams.vocab_size, @@ -104,61 +164,18 @@ def toks_to_sig(self, toks): ) offset_idxes = [all_layer_ids.index(x) for x in self.hparams.SSL_layers] offsets = offsets[offset_idxes] - toks = toks + offsets + 1 + tokens += offsets + 1 - # Handle missing codebooks if len(self.hparams.SSL_layers) < len(all_layer_ids): - full_toks = torch.zeros( - *toks.shape[:2], + full_tokens = torch.zeros( + *tokens.shape[:2], len(all_layer_ids), - dtype=toks.dtype, + dtype=tokens.dtype, device=self.device, ) for i, idx in enumerate(offset_idxes): - full_toks[..., idx] = toks[..., i] - toks = full_toks + full_tokens[..., idx] = tokens[..., i] + tokens = full_tokens self.hparams.codec_vocoder.tokenize = False - sig = self.hparams.codec_vocoder(toks)[:, 0] # [B, T] - return sig - -class Tokenizer: - def __init__(self, tokenizer): - self.tokenizer = tokenizer - - @torch.no_grad() - def encode(self,sig, lens,**kwargs): - toks = self.tokenizer.sig_to_toks(sig, lens,**kwargs) - return toks - - @torch.no_grad() - def decode(self,sig,**kwargs): - sig = self.tokenizer.toks_to_sig(sig,**kwargs) - return sig - - -# model_hub = "facebook/encodec_24khz" -# save_path = "savedir" -# model = Tokenizer_Encodec(model_hub, save_path) -# from speechbrain.lobes.models.huggingface_transformers.hubert import (HuBERT) -# inputs = torch.rand([3, 2000]) -# model_hub = "facebook/hubert-large-ll60k" -# save_path = "savedir" -# ssl_layer_num = [7,23] -# deduplicate =[False, True] -# bpe_tokenizers=[None, None] -# kmeans_repo_id = "speechbrain/SSL_Quantization" -# kmeans_dataset = "LJSpeech" -# num_clusters = 1000 -# ssl_model = HuBERT(model_hub, save_path,output_all_hiddens=True) -# model = DiscreteSSL(save_path, ssl_model, kmeans_repo_id=kmeans_repo_id, kmeans_dataset=kmeans_dataset,num_clusters=num_clusters) -model_hub = "fnlp/SpeechTokenizer" -save_path = "savedir" -model =Tokenizer_SpeechTokenizer(model_hub, save_path) # doctest: +SKIP -tokenizer= Tokenizer(model) -audio = torch.randn(4, 1000) -length = torch.tensor([1.0, .5, .75, 1.0]) -tokens = tokenizer.encode(audio, length,num_codebooks=2) -print(tokens.shape) -rec = tokenizer.decode(tokens) -print(rec.shape) \ No newline at end of file + return self.hparams.codec_vocoder(tokens)[:, 0] # [B, T] From 17898c3472ec45ae2173b5894f7c7e550918d9d4 Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Fri, 8 Nov 2024 09:40:14 -0500 Subject: [PATCH 03/61] fix precommit --- .../ASR-refactor/hparams/LSTM/dac.yaml | 4 +- .../ASR-refactor/hparams/LSTM/encodec.yaml | 4 +- .../hparams/LSTM/speech_tokenizer.yaml | 2 +- .../ASR-refactor/hparams/contextnet/dac.yaml | 4 +- .../hparams/contextnet/encodec.yaml | 5 +- .../hparams/contextnet/speech_tokenizer.yaml | 4 +- .../DASB/LibriSpeech/ASR-refactor/train.py | 78 +++++++++-------- benchmarks/DASB/model/ __init__.py | 2 +- benchmarks/DASB/model/custom_model.py | 6 +- benchmarks/DASB/model/tokenizer_interface.py | 84 +++++++------------ 10 files changed, 84 insertions(+), 109 deletions(-) diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/dac.yaml b/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/dac.yaml index 4accc2241..806305774 100644 --- a/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/dac.yaml +++ b/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/dac.yaml @@ -182,7 +182,7 @@ test_beam_search: beam_size: !ref beam_prune_logp: !ref token_prune_min_logp: !ref - prune_history: !ref + prune_history: !ref alpha: 0.8 beta: 1.2 @@ -193,7 +193,7 @@ ctc_cost: !name:speechbrain.nnet.losses.ctc_loss log_softmax: !new:speechbrain.nnet.activations.Softmax apply_log: True -scheduler: !new:speechbrain.nnet.schedulers.NewBobScheduler +scheduler: !new:speechbrain.nnet.schedulers.NewBobScheduler initial_value: !ref improvement_threshold: 0.0025 annealing_factor: 0.8 diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/encodec.yaml b/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/encodec.yaml index 03c29ddbb..18d967244 100644 --- a/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/encodec.yaml +++ b/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/encodec.yaml @@ -182,7 +182,7 @@ test_beam_search: beam_size: !ref beam_prune_logp: !ref token_prune_min_logp: !ref - prune_history: !ref + prune_history: !ref alpha: 0.8 beta: 1.2 @@ -193,7 +193,7 @@ ctc_cost: !name:speechbrain.nnet.losses.ctc_loss log_softmax: !new:speechbrain.nnet.activations.Softmax apply_log: True -scheduler: !new:speechbrain.nnet.schedulers.NewBobScheduler +scheduler: !new:speechbrain.nnet.schedulers.NewBobScheduler initial_value: !ref improvement_threshold: 0.0025 annealing_factor: 0.8 diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/speech_tokenizer.yaml b/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/speech_tokenizer.yaml index 8105204a5..55d7c3c91 100644 --- a/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/speech_tokenizer.yaml +++ b/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/speech_tokenizer.yaml @@ -172,7 +172,7 @@ test_beam_search: beam_size: !ref beam_prune_logp: !ref token_prune_min_logp: !ref - prune_history: !ref + prune_history: !ref alpha: 0.8 beta: 1.2 diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/contextnet/dac.yaml b/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/contextnet/dac.yaml index eabeef113..aa7d2e141 100644 --- a/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/contextnet/dac.yaml +++ b/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/contextnet/dac.yaml @@ -175,7 +175,7 @@ test_beam_search: beam_size: !ref beam_prune_logp: !ref token_prune_min_logp: !ref - prune_history: !ref + prune_history: !ref alpha: 0.8 beta: 1.2 @@ -186,7 +186,7 @@ ctc_cost: !name:speechbrain.nnet.losses.ctc_loss log_softmax: !new:speechbrain.nnet.activations.Softmax apply_log: True -scheduler: !new:speechbrain.nnet.schedulers.NewBobScheduler +scheduler: !new:speechbrain.nnet.schedulers.NewBobScheduler initial_value: !ref improvement_threshold: 0.0025 annealing_factor: 0.8 diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/contextnet/encodec.yaml b/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/contextnet/encodec.yaml index c0411bd76..a1b5262d3 100644 --- a/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/contextnet/encodec.yaml +++ b/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/contextnet/encodec.yaml @@ -107,7 +107,6 @@ encoder_dim: 1024 pretrain_embeddings: False freeze_embedding: False - output_neurons: 31 # BPE parameters @@ -173,7 +172,7 @@ test_beam_search: beam_size: !ref beam_prune_logp: !ref token_prune_min_logp: !ref - prune_history: !ref + prune_history: !ref alpha: 0.8 beta: 1.2 @@ -184,7 +183,7 @@ ctc_cost: !name:speechbrain.nnet.losses.ctc_loss log_softmax: !new:speechbrain.nnet.activations.Softmax apply_log: True -scheduler: !new:speechbrain.nnet.schedulers.NewBobScheduler +scheduler: !new:speechbrain.nnet.schedulers.NewBobScheduler initial_value: !ref improvement_threshold: 0.0025 annealing_factor: 0.8 diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/contextnet/speech_tokenizer.yaml b/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/contextnet/speech_tokenizer.yaml index 77ef2c540..c12d6f79f 100644 --- a/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/contextnet/speech_tokenizer.yaml +++ b/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/contextnet/speech_tokenizer.yaml @@ -163,7 +163,7 @@ test_beam_search: beam_size: !ref beam_prune_logp: !ref token_prune_min_logp: !ref - prune_history: !ref + prune_history: !ref alpha: 0.8 beta: 1.2 @@ -174,7 +174,7 @@ ctc_cost: !name:speechbrain.nnet.losses.ctc_loss log_softmax: !new:speechbrain.nnet.activations.Softmax apply_log: True -scheduler: !new:speechbrain.nnet.schedulers.NewBobScheduler +scheduler: !new:speechbrain.nnet.schedulers.NewBobScheduler initial_value: !ref improvement_threshold: 0.0025 annealing_factor: 0.8 diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor/train.py b/benchmarks/DASB/LibriSpeech/ASR-refactor/train.py index 61b6c56f4..baa80c80e 100644 --- a/benchmarks/DASB/LibriSpeech/ASR-refactor/train.py +++ b/benchmarks/DASB/LibriSpeech/ASR-refactor/train.py @@ -18,6 +18,7 @@ from speechbrain.tokenizers.SentencePiece import SentencePiece from hyperpyyaml import load_hyperpyyaml from pathlib import Path + base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../")) sys.path.append(base_dir) @@ -32,11 +33,10 @@ def compute_forward(self, batch, stage): """Forward computations from the waveform batches to the output probabilities.""" batch = batch.to(self.device) wavs, wav_lens = batch.sig - # Add waveform augmentation if specified. if stage == sb.Stage.TRAIN and hasattr(self.hparams, "wav_augment"): - wavs, wav_lens = self.hparams.wav_augment(wavs, wav_lens) # [B, T] + wavs, wav_lens = self.hparams.wav_augment(wavs, wav_lens) # [B, T] current_epoch = self.hparams.epoch_counter.current @@ -49,33 +49,38 @@ def compute_forward(self, batch, stage): except KeyError: with torch.no_grad(): self.hparams.tokenizer.eval().to(self.device) - in_toks = self.hparams.tokenizer.sig_to_tokens(wavs, wav_lens,num_codebooks=hparams['num_codebooks']) #[B, T, N-Q] + in_toks = self.hparams.tokenizer.sig_to_tokens( + wavs, wav_lens, num_codebooks=hparams["num_codebooks"] + ) # [B, T, N-Q] if stage != sb.Stage.TRAIN or ( - stage == sb.Stage.TRAIN and (not hasattr(self.hparams, "wav_augment")) + stage == sb.Stage.TRAIN + and (not hasattr(self.hparams, "wav_augment")) ): if _CACHE["size"] < self.hparams.cache_size: _CACHE[key] = in_toks.cpu() _CACHE["size"] += in_toks.numel() # Extract embeddings - in_embs = self.modules.discrete_embedding_layer(in_toks) #[B, T, N-Q, D] + in_embs = self.modules.discrete_embedding_layer( + in_toks + ) # [B, T, N-Q, D] - # Attention-Pooling - att_w = self.modules.attention_mlp(in_embs) #[B, T, N-Q, 1] - in_embs = torch.matmul(att_w.transpose(2, -1), in_embs).squeeze(-2) #[B, T, D] + # Attention-Pooling + att_w = self.modules.attention_mlp(in_embs) # [B, T, N-Q, 1] + in_embs = torch.matmul(att_w.transpose(2, -1), in_embs).squeeze( + -2 + ) # [B, T, D] # forward modules if type(self.modules.encoder).__name__ == "ContextNet": enc_out = self.modules.encoder(in_embs) elif type(self.modules.encoder).__name__ == "LSTM": - enc_out, _ = self.modules.encoder( - in_embs - ) + enc_out, _ = self.modules.encoder(in_embs) else: raise NotImplementedError - + # output layer for ctc log-probabilities logits = self.modules.ctc_lin(enc_out) p_ctc = self.hparams.log_softmax(logits) @@ -89,7 +94,6 @@ def compute_forward(self, batch, stage): p_tokens = test_searcher(p_ctc, wav_lens) return p_ctc, wav_lens, p_tokens - def compute_objectives(self, predictions, batch, stage): """Computes the loss (CTC+NLL) given predictions and targets.""" @@ -98,14 +102,13 @@ def compute_objectives(self, predictions, batch, stage): ids = batch.id tokens, tokens_lens = batch.tokens - # Label Augmentation if stage == sb.Stage.TRAIN and hasattr(self.hparams, "wav_augment"): tokens = self.hparams.wav_augment.replicate_labels(tokens) tokens_lens = self.hparams.wav_augment.replicate_labels(tokens_lens) - + loss = self.hparams.ctc_cost(p_ctc, tokens, wav_lens, tokens_lens) - + if stage == sb.Stage.VALID: # Decode token terms to words predicted_words = self.tokenizer( @@ -149,19 +152,15 @@ def on_stage_end(self, stage, stage_loss, epoch): # log stats and save checkpoint at end-of-epoch if stage == sb.Stage.VALID: if type(self.hparams.scheduler).__name__ == "NewBobScheduler": - lr, new_lr = self.hparams.scheduler( - stage_stats["loss"] - ) - sb.nnet.schedulers.update_learning_rate( - self.optimizer, new_lr - ) - elif type(self.hparams.scheduler).__name__ == "LinearNoamScheduler": + lr, new_lr = self.hparams.scheduler(stage_stats["loss"]) + sb.nnet.schedulers.update_learning_rate(self.optimizer, new_lr) + elif type(self.hparams.scheduler).__name__ == "LinearNoamScheduler": lr = self.hparams.scheduler.current_lr steps = self.optimizer_step - + else: raise NotImplementedError - + optimizer = self.optimizer.__class__.__name__ epoch_stats = { "epoch": epoch, @@ -185,15 +184,19 @@ def on_stage_end(self, stage, stage_loss, epoch): test_stats=stage_stats, ) if if_main_process(): - with open(self.hparams.output_wer_folder, "w", encoding="utf-8") as w: + with open( + self.hparams.output_wer_folder, "w", encoding="utf-8" + ) as w: self.wer_metric.write_stats(w) def on_fit_batch_end(self, batch, outputs, loss, should_step): - if should_step and type(self.hparams.scheduler).__name__ == "LinearNoamScheduler": + if ( + should_step + and type(self.hparams.scheduler).__name__ == "LinearNoamScheduler" + ): self.hparams.scheduler(self.optimizer) - def dataio_prepare(hparams, tokenizer): """This function prepares the datasets to be used in the brain class. It also defines the data processing pipeline through user-defined functions.""" @@ -251,7 +254,7 @@ def audio_pipeline(wav): resampled = torchaudio.transforms.Resample( info.sample_rate, hparams["sample_rate"], )(sig) - #resampled = resampled.unsqueeze(0) + # resampled = resampled.unsqueeze(0) return resampled sb.dataio.dataset.add_dynamic_item(datasets, audio_pipeline) @@ -272,7 +275,6 @@ def text_pipeline(wrd): sb.dataio.dataset.add_dynamic_item(datasets, text_pipeline) - # 4. Set output: sb.dataio.dataset.set_output_keys( datasets, ["id", "sig", "wrd", "char_list", "tokens"], @@ -319,7 +321,6 @@ def text_pipeline(wrd): # create ddp_group with the right communication protocol sb.utils.distributed.ddp_init_group(run_opts) - # Create experiment directory sb.create_experiment_directory( experiment_directory=hparams["output_folder"], @@ -327,7 +328,6 @@ def text_pipeline(wrd): overrides=overrides, ) - # Dataset prep (parsing Librispeech) from librispeech_prepare import prepare_librispeech # noqa @@ -369,12 +369,17 @@ def text_pipeline(wrd): # Use pretrained embeddings if hparams["pretrain_embeddings"]: - embs= hparams["tokenizer"].get_pretrained_embeddings(device=run_opts["device"],num_codebooks=hparams['num_codebooks'], vocab_size=hparams["vocab_size"]) + embs = hparams["tokenizer"].get_pretrained_embeddings( + device=run_opts["device"], + num_codebooks=hparams["num_codebooks"], + vocab_size=hparams["vocab_size"], + ) hparams["discrete_embedding_layer"].init_embedding(embs) - # Log number of parameters/buffers - codec_params = sum([x.numel() for x in hparams["tokenizer"].state_dict().values()]) + codec_params = sum( + [x.numel() for x in hparams["tokenizer"].state_dict().values()] + ) model_params = sum( [ x.numel() @@ -407,8 +412,7 @@ def text_pipeline(wrd): from speechbrain.decoders.ctc import CTCBeamSearcher test_searcher = CTCBeamSearcher( - **hparams["test_beam_search"], - vocab_list=vocab_list, + **hparams["test_beam_search"], vocab_list=vocab_list, ) train_dataloader_opts = hparams["train_dataloader_opts"] diff --git a/benchmarks/DASB/model/ __init__.py b/benchmarks/DASB/model/ __init__.py index e7db8766a..b59bcdfa5 100644 --- a/benchmarks/DASB/model/ __init__.py +++ b/benchmarks/DASB/model/ __init__.py @@ -1 +1 @@ -from model.tokenizer_interface import EncodecTokenizer \ No newline at end of file +from model.tokenizer_interface import EncodecTokenizer diff --git a/benchmarks/DASB/model/custom_model.py b/benchmarks/DASB/model/custom_model.py index d3bf3cc9f..1c655fc65 100644 --- a/benchmarks/DASB/model/custom_model.py +++ b/benchmarks/DASB/model/custom_model.py @@ -59,7 +59,7 @@ def __init__( emb_dim, init=False, freeze=False, - hidden_dim =None, + hidden_dim=None, ): super(Discrete_EmbeddingLayer, self).__init__() self.vocab_size = vocab_size @@ -76,11 +76,9 @@ def __init__( else: self.proj_layer = None - def init_embedding(self, weights): self.embedding.weight.data.copy_(weights) - - + def forward(self, in_tokens): """Computes the embedding for discrete tokens. a sample. diff --git a/benchmarks/DASB/model/tokenizer_interface.py b/benchmarks/DASB/model/tokenizer_interface.py index 351652a57..604e3a403 100644 --- a/benchmarks/DASB/model/tokenizer_interface.py +++ b/benchmarks/DASB/model/tokenizer_interface.py @@ -1,4 +1,3 @@ - """ Unified interface for tokenizers, standardizing the output shape of encode and decode functions. @@ -12,9 +11,13 @@ import torch from abc import ABC, abstractmethod from speechbrain.lobes.models.huggingface_transformers.encodec import Encodec -from speechbrain.lobes.models.huggingface_transformers.discrete_ssl import DiscreteSSL +from speechbrain.lobes.models.huggingface_transformers.discrete_ssl import ( + DiscreteSSL, +) from speechbrain.lobes.models.discrete.dac import DAC -from speechbrain.lobes.models.discrete.speechtokenizer_interface import SpeechTokenizer_interface +from speechbrain.lobes.models.discrete.speechtokenizer_interface import ( + SpeechTokenizer_interface, +) class BaseTokenizer(ABC): @@ -29,13 +32,14 @@ def sig_to_tokens(self, signal, lengths, **kwargs): def tokens_to_sig(self, tokens, **kwargs): """Abstract method to decode tokens into a signal.""" pass - + @abstractmethod @torch.no_grad() def get_pretrained_embeddings(self, **kwargs): """Return pretrained codebook embedding.""" pass + class EncodecTokenizer(Encodec, BaseTokenizer): @torch.no_grad() def sig_to_tokens(self, signal, lengths, **kwargs): @@ -50,20 +54,21 @@ def tokens_to_sig(self, tokens, **kwargs): self.eval() signal = self.decode(tokens)[:, 0] # [B, T] return signal - + @torch.no_grad() def get_pretrained_embeddings(self, **kwargs): """Return pretrained codebook embedding.""" embeddings = self.vocabulary return embeddings.reshape(-1, embeddings.shape[-1]) + class DACTokenizer(DAC, BaseTokenizer): @torch.no_grad() def sig_to_tokens(self, signal, lengths, **kwargs): # signal: [B, T] self.eval() tokens, _ = self( - signal[:, None], n_quantizers=kwargs['num_codebooks'] + signal[:, None], n_quantizers=kwargs["num_codebooks"] ) # [B, N_Q, T] return tokens.movedim(-1, -2) # [B, T, N_Q] @@ -76,7 +81,7 @@ def tokens_to_sig(self, tokens, **kwargs): ) signal = self.decode(quantized_feats)[:, 0] # [B, T] return signal - + @torch.no_grad() def get_pretrained_embeddings(self, **kwargs): """Return pretrained codebook embedding.""" @@ -88,24 +93,25 @@ def get_pretrained_embeddings(self, **kwargs): self.to(kwargs["device"]).eval() with torch.no_grad(): z_q, z_p, _ = self.quantizer.from_codes(toks) - z_ps = z_p.split(z_p.shape[1] // toks.shape[1], dim=1) # [C, D, 1] * K + z_ps = z_p.split(z_p.shape[1] // toks.shape[1], dim=1) z_qs = [] for i, z_p_i in enumerate(z_ps): with torch.no_grad(): - z_q_i = ( - self.quantizer.quantizers[i].out_proj(z_p_i) + z_q_i = self.quantizer.quantizers[i].out_proj( + z_p_i ) # [C, H, 1] z_qs.append(z_q_i) assert (z_q == sum(z_qs)).all() - embeddings = torch.cat(z_qs)[:, :, 0] # [CK, H] + embeddings = torch.cat(z_qs)[:, :, 0] return embeddings + class SpeechTokenizer(SpeechTokenizer_interface, BaseTokenizer): @torch.no_grad() def sig_to_tokens(self, signal, lengths, **kwargs): # signal: [B, T] self.eval() - tokens = self(signal)[: kwargs['num_codebooks']] # [N_Q, B, T] + tokens = self(signal)[: kwargs["num_codebooks"]] # [N_Q, B, T] return tokens.movedim(-3, -1) # [B, T, N_Q] @torch.no_grad() @@ -114,7 +120,7 @@ def tokens_to_sig(self, tokens, **kwargs): self.eval() tokens = tokens.movedim(-1, -3) # [N_Q, B, T] return self.decode(tokens) # [B, T] - + @torch.no_grad() def get_pretrained_embeddings(self, **kwargs): """Return pretrained codebook embedding.""" @@ -128,54 +134,22 @@ def get_pretrained_embeddings(self, **kwargs): for i, indices in enumerate(toks): layer = self.model.quantizer.vq.layers[i] with torch.no_grad(): - quantized = layer.decode(indices) # [C, H, 1] + quantized = layer.decode(indices) embs.append(quantized) - assert ( - self.model.quantizer.decode(toks) == sum(embs) - ).all() - embeddings = torch.cat(embs)[:, :, 0] # [CK, H] + assert (self.model.quantizer.decode(toks) == sum(embs)).all() + embeddings = torch.cat(embs)[:, :, 0] return embeddings + class DiscreteSSLTokenizer(DiscreteSSL, BaseTokenizer): @torch.no_grad() def sig_to_tokens(self, signal, lengths): - # signal: [B, T] - self.hparams.codec_quantizer.to(self.device).eval() - tokens, _, _ = self.hparams.codec_quantizer( - signal, - lengths, - SSL_layers=self.hparams.SSL_layers, - deduplicates=[False] * len(self.hparams.SSL_layers), - bpe_tokenizers=[None] * len(self.hparams.SSL_layers), - ) # [B, T, N_Q] - return tokens + pass @torch.no_grad() def tokens_to_sig(self, tokens): - # tokens: [B, T, N_Q] - self.hparams.codec_vocoder.to(self.device).eval() - - all_layer_ids = self.hparams.codec_quantizer.ssl_layer_ids - offsets = torch.arange( - 0, - len(all_layer_ids) * self.hparams.vocab_size, - self.hparams.vocab_size, - device=self.device, - ) - offset_idxes = [all_layer_ids.index(x) for x in self.hparams.SSL_layers] - offsets = offsets[offset_idxes] - tokens += offsets + 1 - - if len(self.hparams.SSL_layers) < len(all_layer_ids): - full_tokens = torch.zeros( - *tokens.shape[:2], - len(all_layer_ids), - dtype=tokens.dtype, - device=self.device, - ) - for i, idx in enumerate(offset_idxes): - full_tokens[..., idx] = tokens[..., i] - tokens = full_tokens - - self.hparams.codec_vocoder.tokenize = False - return self.hparams.codec_vocoder(tokens)[:, 0] # [B, T] + pass + + @torch.no_grad() + def get_pretrained_embeddings(self, **kwargs): + pass From db1590ee346dab0896723cf8184ba8b1e12355b8 Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Fri, 8 Nov 2024 09:54:09 -0500 Subject: [PATCH 04/61] fix flake --- benchmarks/DASB/LibriSpeech/ASR-refactor/train.py | 5 +---- benchmarks/DASB/model/ __init__.py | 1 - 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor/train.py b/benchmarks/DASB/LibriSpeech/ASR-refactor/train.py index baa80c80e..99eeb81fe 100644 --- a/benchmarks/DASB/LibriSpeech/ASR-refactor/train.py +++ b/benchmarks/DASB/LibriSpeech/ASR-refactor/train.py @@ -27,6 +27,7 @@ _CACHE = {"size": 0} + # Define training procedure class ASR(sb.Brain): def compute_forward(self, batch, stage): @@ -38,8 +39,6 @@ def compute_forward(self, batch, stage): if stage == sb.Stage.TRAIN and hasattr(self.hparams, "wav_augment"): wavs, wav_lens = self.hparams.wav_augment(wavs, wav_lens) # [B, T] - current_epoch = self.hparams.epoch_counter.current - # compute features # Extract tokens (cache them at first epoch if augmentation is disabled) key = tuple(sorted(batch.id)) @@ -156,8 +155,6 @@ def on_stage_end(self, stage, stage_loss, epoch): sb.nnet.schedulers.update_learning_rate(self.optimizer, new_lr) elif type(self.hparams.scheduler).__name__ == "LinearNoamScheduler": lr = self.hparams.scheduler.current_lr - steps = self.optimizer_step - else: raise NotImplementedError diff --git a/benchmarks/DASB/model/ __init__.py b/benchmarks/DASB/model/ __init__.py index b59bcdfa5..e69de29bb 100644 --- a/benchmarks/DASB/model/ __init__.py +++ b/benchmarks/DASB/model/ __init__.py @@ -1 +0,0 @@ -from model.tokenizer_interface import EncodecTokenizer From 3361ac6e9c21e94d2957d76347c7c19bfeab88ad Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Fri, 8 Nov 2024 09:56:08 -0500 Subject: [PATCH 05/61] fix blank index --- .../LibriSpeech/ASR-refactor/hparams/LSTM/speech_tokenizer.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/speech_tokenizer.yaml b/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/speech_tokenizer.yaml index 55d7c3c91..99d423b87 100644 --- a/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/speech_tokenizer.yaml +++ b/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/speech_tokenizer.yaml @@ -183,7 +183,7 @@ ctc_cost: !name:speechbrain.nnet.losses.ctc_loss log_softmax: !new:speechbrain.nnet.activations.Softmax apply_log: True -scheduler: !new:speechbrain.nnet.schedulers.NewBobScheduler +scheduler: !new:speechbrain.nnet.schedulers.NewBobScheduler initial_value: !ref improvement_threshold: 0.0025 annealing_factor: 0.8 From 2678a24761d92ba71745574a006b76c10113b828 Mon Sep 17 00:00:00 2001 From: Chaanks Date: Sat, 9 Nov 2024 14:36:05 +0100 Subject: [PATCH 06/61] add tokens extraction / loading --- benchmarks/DASB/utils/tokens.py | 249 ++++++++++++++++++++++++++++++++ 1 file changed, 249 insertions(+) create mode 100644 benchmarks/DASB/utils/tokens.py diff --git a/benchmarks/DASB/utils/tokens.py b/benchmarks/DASB/utils/tokens.py new file mode 100644 index 000000000..b334106f1 --- /dev/null +++ b/benchmarks/DASB/utils/tokens.py @@ -0,0 +1,249 @@ +import math +import logging +import pathlib as pl +import kaldiio +import torch +import numpy as np +from tqdm.auto import tqdm +import speechbrain as sb +from speechbrain.dataio.dataloader import make_dataloader +from speechbrain.dataio.dataset import DynamicItemDataset + + +logger = logging.getLogger(__name__) + + +def get_device(use_cuda): + logger.info("=" * 30) + logger.info(f"USE_CUDA SET TO: {use_cuda}") + logger.info(f"CUDA AVAILABLE?: {torch.cuda.is_available()}") + logger.info("=" * 30) + use_cuda = use_cuda and torch.cuda.is_available() + return torch.device("cuda" if use_cuda else "cpu") + + +class TokensExtractor: + """ + Extracts tokens from audio data using a tokenizer and saves them to a specified format. + + Arguments + --------- + tokenizer : torch.nn.Module + The tokenizer model to use for token extraction. + save_path : str + The directory where the tokens will be saved. + src_key : str, optional + The key in the dataset that contains the audio data (default: "wav"). + id_key : str, optional + The key in the dataset that contains unique identifiers (default: "id"). + save_format : str, optional + The format to save the tokens ('numpy', 'pickle', 'soundfile_flac') (default: "numpy"). + use_cuda : bool, optional + Whether to use CUDA for computation (default: True). + dataloader_opts : dict, optional + Options for the data loader (default: None). + pipelines : list, optional + List of data processing pipelines to apply (default: None). + save_name : str, optional + Base name for the saved token files (default: "tokens"). + """ + + def __init__( + self, + tokenizer, + save_path, + src_key="wav", + id_key="id", + save_format="numpy", + use_cuda=True, + dataloader_opts=None, + pipelines=None, + save_name="tokens", + ): + """ + Initializes the TokensExtractor. + + Arguments + --------- + tokenizer : torch.nn.Module + The tokenizer model to use for token extraction. + save_path : str + The directory where the tokens will be saved. + src_key : str, optional + The key in the dataset that contains the audio data (default: "wav"). + id_key : str, optional + The key in the dataset that contains unique identifiers (default: "id"). + save_format : str, optional + The format to save the tokens ('numpy', 'pickle', 'soundfile_flac') (default: "numpy"). + use_cuda : bool, optional + Whether to use CUDA for computation (default: True). + dataloader_opts : dict, optional + Options for the data loader (default: None). + pipelines : list, optional + List of data processing pipelines to apply (default: None). + save_name : str, optional + Base name for the saved token files (default: "tokens"). + + Raises + ------ + ValueError + If an unsupported save_format is provided. + """ + self.save_path = pl.Path(save_path).absolute() + self.save_path.mkdir(parents=True, exist_ok=True) + self.save_name = save_name + + self.id_key = id_key + self.src_key = src_key + + self.device = get_device(use_cuda) + self.tokenizer = tokenizer.to(self.device) + + if save_format not in ["numpy", "pickle", "soundfile_flac"]: + raise ValueError(f"Unsupported save_format: {save_format}") + self.save_format = save_format + + if not dataloader_opts: + dataloader_opts = {} + self.dataloader_opts = dataloader_opts + self.pipelines = pipelines if pipelines is not None else [] + + self.wspecifier = f"ark,scp,t:{self.save_path}/{self.save_name}.ark,{self.save_path}/{self.save_name}.scp" + self.writer = kaldiio.WriteHelper( + self.wspecifier, write_function="numpy" + ) + + def extract(self, dataset): + """ + Extracts tokens from the dataset and saves them to the specified format. + + Arguments + --------- + dataset : speechbrain.dataio.dataset.DynamicItemDataset or dict + The dataset from which to extract tokens. Can be a DynamicItemDataset or a dictionary. + """ + if isinstance(dataset, dict): + dataset = DynamicItemDataset(dataset) + dataset.set_output_keys([self.src_key, self.id_key]) + for pipeline in self.pipelines: + dataset.add_dynamic_item(pipeline) + + dataloader = make_dataloader(dataset, **self.dataloader_opts) + batch_size = self.dataloader_opts.get("batch_size", 1) + batch_count = int(math.ceil(len(dataset) / batch_size)) + for batch in tqdm(dataloader, total=batch_count): + batch = batch.to(self.device) + x, x_lengths = batch[self.src_key] + ids = batch[self.id_key] + batch_tokens = self.tokenizer.sig_to_tokens(x, x_lengths) + batch_tokens = sb.utils.data_utils.undo_padding( + batch_tokens, x_lengths + ) + self.process_batch(batch_tokens, ids) + + def process_batch(self, batch, ids): + """ + Processes a batch of tokens and writes them to the output files. + + Arguments + --------- + batch : list + A list of tokens for each item in the batch. + ids : list + A list of unique identifiers corresponding to each item in the batch. + """ + for tokens, utt_id in zip(batch, ids): + tokens = np.array(tokens) + self.writer(utt_id, tokens) + + def __del__(self): + """ + Close the writer. + """ + self.writer.close() + + +class TokensLoader: + """ + A loader class for retrieving tokens corresponding to utterance IDs. + + Arguments + --------- + data_path: str + The path to the data directory containing the token files. + save_name: str, optional + The base name of the tokens files (default: "tokens"). + """ + + def __init__( + self, + data_path, + save_name="tokens", + ): + """ + Initializes the TokensLoader. + + Arguments + --------- + data_path: str + The path to the data directory containing the token files. + save_name: str, optional + The base name of the tokens files (default: "tokens"). + """ + self.data_path = pl.Path(data_path) + if not self.data_path.exists(): + raise ValueError( + f"Data folder not found: {self.data_path.as_posix()}" + ) + self.tokens = self._load(data_path, save_name) + + def tokens_by_uttid(self, utt_id): + """ + Retrieves the tokens corresponding to a given utterance ID. + + Arguments + --------- + utt_id: str + The utterance ID to retrieve tokens for. + + Returns + ------- + result: torch.LongTensor [T, N_Q] + The tokens associated with the utterance ID. + + Raises + ------ + KeyError + If the utterance ID is not found in the tokens. + """ + if utt_id not in self.tokens: + raise KeyError(f"Utterance ID '{utt_id}' not found in tokens.") + tokens_path = self.tokens[utt_id] + tokens = kaldiio.load_mat(tokens_path) + tokens = torch.from_numpy(tokens).long() + return tokens + + def _load(self, data_path, save_name): + """ + Loads the mapping from utterance IDs to token file paths. + + Arguments + --------- + data_path: str + The path to the data directory containing the token files. + save_name: str + The base name of the tokens files. + + Returns + ------- + utt2toks: dict + A dictionary mapping utterance IDs to their corresponding token file paths. + """ + scp_path = f"{data_path}/{save_name}.scp" + with open(scp_path, "r") as f: + utt2toks = { + line.strip().split(None, 1)[0]: line.strip().split(None, 1)[1] + for line in f + if line.strip() + } + return utt2toks From 0694249f678572e455305f790fa751859d750193 Mon Sep 17 00:00:00 2001 From: Chaanks Date: Sat, 9 Nov 2024 18:57:21 +0100 Subject: [PATCH 07/61] update tokens extraction script --- benchmarks/DASB/utils/tokens.py | 192 +++++++++++++++++++++++--------- 1 file changed, 137 insertions(+), 55 deletions(-) diff --git a/benchmarks/DASB/utils/tokens.py b/benchmarks/DASB/utils/tokens.py index b334106f1..3762457ec 100644 --- a/benchmarks/DASB/utils/tokens.py +++ b/benchmarks/DASB/utils/tokens.py @@ -3,14 +3,17 @@ import pathlib as pl import kaldiio import torch +import torchaudio import numpy as np from tqdm.auto import tqdm import speechbrain as sb from speechbrain.dataio.dataloader import make_dataloader from speechbrain.dataio.dataset import DynamicItemDataset +from speechbrain.dataio.dataio import load_pkl, save_pkl logger = logging.getLogger(__name__) +OPT_FILE = "opt_extract.pkl" def get_device(use_cuda): @@ -30,8 +33,8 @@ class TokensExtractor: --------- tokenizer : torch.nn.Module The tokenizer model to use for token extraction. - save_path : str - The directory where the tokens will be saved. + sample_rate : int + The sample rate of the audio data. src_key : str, optional The key in the dataset that contains the audio data (default: "wav"). id_key : str, optional @@ -42,62 +45,36 @@ class TokensExtractor: Whether to use CUDA for computation (default: True). dataloader_opts : dict, optional Options for the data loader (default: None). - pipelines : list, optional - List of data processing pipelines to apply (default: None). - save_name : str, optional - Base name for the saved token files (default: "tokens"). + + Raises + ------ + ValueError + If an unsupported save_format is provided. + ValueError + If the tokenizer's sample rate does not match the provided sample_rate. """ def __init__( self, tokenizer, - save_path, + sample_rate, src_key="wav", id_key="id", save_format="numpy", use_cuda=True, dataloader_opts=None, - pipelines=None, - save_name="tokens", ): - """ - Initializes the TokensExtractor. - - Arguments - --------- - tokenizer : torch.nn.Module - The tokenizer model to use for token extraction. - save_path : str - The directory where the tokens will be saved. - src_key : str, optional - The key in the dataset that contains the audio data (default: "wav"). - id_key : str, optional - The key in the dataset that contains unique identifiers (default: "id"). - save_format : str, optional - The format to save the tokens ('numpy', 'pickle', 'soundfile_flac') (default: "numpy"). - use_cuda : bool, optional - Whether to use CUDA for computation (default: True). - dataloader_opts : dict, optional - Options for the data loader (default: None). - pipelines : list, optional - List of data processing pipelines to apply (default: None). - save_name : str, optional - Base name for the saved token files (default: "tokens"). - - Raises - ------ - ValueError - If an unsupported save_format is provided. - """ - self.save_path = pl.Path(save_path).absolute() - self.save_path.mkdir(parents=True, exist_ok=True) - self.save_name = save_name - self.id_key = id_key self.src_key = src_key self.device = get_device(use_cuda) self.tokenizer = tokenizer.to(self.device) + self.sample_rate = sample_rate + + if tokenizer.sample_rate != self.sample_rate: + raise ValueError( + f"Sample rate mismatch: {self.sample_rate} != {tokenizer.sample_rate}" + ) if save_format not in ["numpy", "pickle", "soundfile_flac"]: raise ValueError(f"Unsupported save_format: {save_format}") @@ -106,14 +83,9 @@ def __init__( if not dataloader_opts: dataloader_opts = {} self.dataloader_opts = dataloader_opts - self.pipelines = pipelines if pipelines is not None else [] - - self.wspecifier = f"ark,scp,t:{self.save_path}/{self.save_name}.ark,{self.save_path}/{self.save_name}.scp" - self.writer = kaldiio.WriteHelper( - self.wspecifier, write_function="numpy" - ) + self.pipelines = self._make_pipelines() - def extract(self, dataset): + def extract_tokens(self, dataset, save_path, save_name="tokens"): """ Extracts tokens from the dataset and saves them to the specified format. @@ -122,9 +94,30 @@ def extract(self, dataset): dataset : speechbrain.dataio.dataset.DynamicItemDataset or dict The dataset from which to extract tokens. Can be a DynamicItemDataset or a dictionary. """ + conf = { + "sample_rate": self.sample_rate, + "save_folder": save_path, + "dataset_length": len(dataset), + } + + save_path = pl.Path(save_path).absolute() + save_path.mkdir(parents=True, exist_ok=True) + + # Check if the extraction is already done (if so, skip it) + if _skip(save_path, save_name, conf): + logger.info("Skipping preparation, completed in previous run.") + return + + self.wspecifier = ( + f"ark,scp,t:{save_path}/{save_name}.ark,{save_path}/{save_name}.scp" + ) + self.writer = kaldiio.WriteHelper( + self.wspecifier, write_function="numpy" + ) + if isinstance(dataset, dict): dataset = DynamicItemDataset(dataset) - dataset.set_output_keys([self.src_key, self.id_key]) + dataset.set_output_keys([self.src_key, self.id_key, "sig"]) for pipeline in self.pipelines: dataset.add_dynamic_item(pipeline) @@ -133,7 +126,7 @@ def extract(self, dataset): batch_count = int(math.ceil(len(dataset) / batch_size)) for batch in tqdm(dataloader, total=batch_count): batch = batch.to(self.device) - x, x_lengths = batch[self.src_key] + x, x_lengths = batch["sig"] ids = batch[self.id_key] batch_tokens = self.tokenizer.sig_to_tokens(x, x_lengths) batch_tokens = sb.utils.data_utils.undo_padding( @@ -141,6 +134,11 @@ def extract(self, dataset): ) self.process_batch(batch_tokens, ids) + logger.info("Extraction completed.") + + save_opt = save_path / OPT_FILE + save_pkl(conf, save_opt.as_posix()) + def process_batch(self, batch, ids): """ Processes a batch of tokens and writes them to the output files. @@ -156,6 +154,32 @@ def process_batch(self, batch, ids): tokens = np.array(tokens) self.writer(utt_id, tokens) + def _make_pipelines(self): + """ + Creates the data processing pipeline for audio data. + + The pipeline reads audio files, resamples them to the desired sample rate, and provides + the processed signal under the key "sig". + + Returns + ------- + pipeline : list + A list containing the audio processing pipeline function. + """ + + @sb.utils.data_pipeline.takes(self.src_key) + @sb.utils.data_pipeline.provides("sig") + def audio_pipeline(wav): + info = torchaudio.info(wav) + sig = sb.dataio.dataio.read_audio(wav) + sig = torchaudio.transforms.Resample( + info.sample_rate, + self.sample_rate, + )(sig) + return sig + + return [audio_pipeline] + def __del__(self): """ Close the writer. @@ -163,6 +187,46 @@ def __del__(self): self.writer.close() +def _skip(save_path, save_name, conf): + """ + Detects if the dataset extraction has been already done. + If the extraction has been done, we can skip it. + + Arguments + --------- + save_path : str + The path to the directory containing extracted tokens. + conf : dict + Configuration to match against saved config. + + Returns + ------- + bool + if True, the preparation phase can be skipped. + if False, it must be done. + """ + skip = True + + # Checking ark,scp files + for ext in [".ark", ".scp"]: + save_file = save_path / f"{save_name}{ext}" + if not save_file.exists: + skip = False + + # Checking saved options + save_opt = save_path / OPT_FILE + if skip is True: + if save_opt.exists(): + opts_old = load_pkl(save_opt.as_posix()) + if opts_old == conf: + skip = True + else: + skip = False + else: + skip = False + return skip + + class TokensLoader: """ A loader class for retrieving tokens corresponding to utterance IDs. @@ -197,30 +261,48 @@ def __init__( ) self.tokens = self._load(data_path, save_name) - def tokens_by_uttid(self, utt_id): + def tokens_by_uttid(self, utt_id, num_codebooks=None): """ Retrieves the tokens corresponding to a given utterance ID. Arguments --------- - utt_id: str + utt_id : str The utterance ID to retrieve tokens for. + num_codebooks : int, optional + The number of codebooks to retrieve from the tokens. If specified, the tokens will be truncated + to include only the first `num_codebooks` codebooks. If not specified, all codebooks are returned. Returns ------- - result: torch.LongTensor [T, N_Q] - The tokens associated with the utterance ID. + result : torch.LongTensor [T, N_Q] + The tokens associated with the utterance ID, possibly truncated to `num_codebooks` codebooks. Raises ------ KeyError If the utterance ID is not found in the tokens. + ValueError + If `num_codebooks` is invalid or exceeds the number of available codebooks. """ if utt_id not in self.tokens: raise KeyError(f"Utterance ID '{utt_id}' not found in tokens.") tokens_path = self.tokens[utt_id] tokens = kaldiio.load_mat(tokens_path) tokens = torch.from_numpy(tokens).long() + + if num_codebooks is not None: + if not isinstance(num_codebooks, int) or num_codebooks <= 0: + raise ValueError( + f"Invalid num_codebooks value: {num_codebooks}. It must be a positive integer." + ) + if num_codebooks > tokens.size(-1): + raise ValueError( + f"Invalid number of codebooks: {num_codebooks}. " + f"Available codebooks: {tokens.size(-1)}." + ) + tokens = tokens[:, :num_codebooks] + return tokens def _load(self, data_path, save_name): From 2c30adeec940b80b988b01fdfef0fd65148faa73 Mon Sep 17 00:00:00 2001 From: Chaanks Date: Mon, 11 Nov 2024 01:04:36 +0100 Subject: [PATCH 08/61] update tokens extraction script --- .../DASB/LibriSpeech/extraction/extract.py | 96 +++++++++++++++++++ .../extraction/hparams/encodec.yaml | 57 +++++++++++ .../extraction/librispeech_prepare.py | 1 + benchmarks/DASB/utils/tokens.py | 73 +++++++++++--- 4 files changed, 216 insertions(+), 11 deletions(-) create mode 100644 benchmarks/DASB/LibriSpeech/extraction/extract.py create mode 100644 benchmarks/DASB/LibriSpeech/extraction/hparams/encodec.yaml create mode 120000 benchmarks/DASB/LibriSpeech/extraction/librispeech_prepare.py diff --git a/benchmarks/DASB/LibriSpeech/extraction/extract.py b/benchmarks/DASB/LibriSpeech/extraction/extract.py new file mode 100644 index 000000000..935c013bd --- /dev/null +++ b/benchmarks/DASB/LibriSpeech/extraction/extract.py @@ -0,0 +1,96 @@ +#!/usr/bin/env/python3 +"""Recipe for extracting a discrete tokens with librispeech. + +Authors + * Jarod Duret 2024 +""" + +import os +import sys +import torch +import torchaudio +import logging +import pathlib as pl +import speechbrain as sb +from speechbrain.dataio.dataset import DynamicItemDataset +from speechbrain.utils.distributed import run_on_main +from hyperpyyaml import load_hyperpyyaml + +base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../")) +sys.path.append(base_dir) + +print(base_dir) + +logger = logging.getLogger(__name__) + + +if __name__ == "__main__": + # CLI: + hparams_file, run_opts, overrides = sb.parse_arguments(sys.argv[1:]) + with open(hparams_file) as fin: + hparams = load_hyperpyyaml(fin, overrides) + + # Create experiment directory + sb.create_experiment_directory( + experiment_directory=hparams["output_folder"], + hyperparams_to_save=hparams_file, + overrides=overrides, + ) + + # Dataset prep (parsing Librispeech) + from librispeech_prepare import prepare_librispeech # noqa + + # multi-gpu (ddp) save data preparation + run_on_main( + prepare_librispeech, + kwargs={ + "data_folder": hparams["data_folder"], + "tr_splits": hparams["train_splits"], + "dev_splits": hparams["dev_splits"], + "te_splits": hparams["test_splits"], + "save_folder": hparams["output_folder"], + "merge_lst": hparams["train_splits"], + "merge_name": "train.csv", + "skip_prep": hparams["skip_prep"], + }, + ) + + tokens_extractor = hparams["tokens_extractor"] + data_folder = hparams["data_folder"] + datasets = [] + for split in ["train", "valid"]: + csv_path = hparams[f"{split}_csv"] + name = pl.Path(csv_path).stem + dataset = sb.dataio.dataset.DynamicItemDataset.from_csv( + csv_path=csv_path, + replacements={"data_root": data_folder}, + ) + datasets.append(dataset) + + for split in hparams["test_csv"]: + name = pl.Path(split).stem + dataset = sb.dataio.dataset.DynamicItemDataset.from_csv( + csv_path=split, + replacements={"data_root": data_folder}, + ) + datasets.append(dataset) + + merged_data = { + key: value + for dataset in datasets + for key, value in dataset.data.items() + } + merged_dataset = DynamicItemDataset(merged_data) + + save_folder = pl.Path(hparams["save_folder"]) + logger.info("Extracting dataset tokens ...") + tokens_extractor.extract_tokens( + merged_dataset, (save_folder / "librispeech").as_posix() + ) + + if hparams["save_embedding"]: + save_folder = pl.Path(hparams["save_folder"]) + logger.info(f"Saving embeddings ...") + tokens_extractor.save_pretrained_embeddings( + (save_folder / "embeddings").as_posix() + ) diff --git a/benchmarks/DASB/LibriSpeech/extraction/hparams/encodec.yaml b/benchmarks/DASB/LibriSpeech/extraction/hparams/encodec.yaml new file mode 100644 index 000000000..815b8aae6 --- /dev/null +++ b/benchmarks/DASB/LibriSpeech/extraction/hparams/encodec.yaml @@ -0,0 +1,57 @@ +# ############################################################################ +# Auido Tokenizer: Encodec +# Extraction: Librispeech 960h +# Authors: Jarod Duret 2024 +# ############################################################################ +# Seed needs to be set at top of yaml, before objects with parameters are made + +seed: 1986 +__set_seed: !apply:torch.manual_seed [!ref ] +output_folder: !ref results/encodec +save_folder: !ref /save +train_log: !ref /extraction_log.txt + +# Data files +data_folder: !PLACEHOLDER # e.g., /path/to/LibriSpeech +train_splits: ["train-clean-100"] #, "train-clean-360", "train-other-500" +dev_splits: ["dev-clean"] +test_splits: ["dev-clean", "test-clean", "test-other"] +skip_prep: False +train_csv: !ref /train.csv +valid_csv: !ref /dev-clean.csv +test_csv: + - !ref /test-clean.csv + - !ref /test-other.csv + +batch_size: 32 +num_workers: 8 +src_key: wav +id_key: id + +# Dataloader options +dataloader_opts: + batch_size: !ref + shuffle: True + num_workers: !ref + +bandwidth: 1.5 +num_codebooks: 2 +sample_rate: 24000 +save_embedding: True + +# EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) +tokenizer: !new:model.tokenizer_interface.EncodecTokenizer + source: facebook/encodec_24khz # Only the 24kHz version supports mono audio + save_path: !ref + sample_rate: !ref + bandwidth: !ref + flat_embeddings: False + freeze: True + renorm_embeddings: False + +tokens_extractor: !new:utils.tokens.TokensExtractor + tokenizer: !ref + sample_rate: !ref + src_key: !ref + id_key: !ref + dataloader_opts: !ref \ No newline at end of file diff --git a/benchmarks/DASB/LibriSpeech/extraction/librispeech_prepare.py b/benchmarks/DASB/LibriSpeech/extraction/librispeech_prepare.py new file mode 120000 index 000000000..a3126ec94 --- /dev/null +++ b/benchmarks/DASB/LibriSpeech/extraction/librispeech_prepare.py @@ -0,0 +1 @@ +../librispeech_prepare.py \ No newline at end of file diff --git a/benchmarks/DASB/utils/tokens.py b/benchmarks/DASB/utils/tokens.py index 3762457ec..493a0598a 100644 --- a/benchmarks/DASB/utils/tokens.py +++ b/benchmarks/DASB/utils/tokens.py @@ -1,3 +1,11 @@ +""" +Unified interface for token extraction and pretrained embeddings handling for speech tokenizers. + +Authors +--------- +* Jarod Duret, 2024 +""" + import math import logging import pathlib as pl @@ -105,7 +113,7 @@ def extract_tokens(self, dataset, save_path, save_name="tokens"): # Check if the extraction is already done (if so, skip it) if _skip(save_path, save_name, conf): - logger.info("Skipping preparation, completed in previous run.") + logger.info("Skipping extraction, completed in previous run.") return self.wspecifier = ( @@ -180,6 +188,29 @@ def audio_pipeline(wav): return [audio_pipeline] + def save_pretrained_embeddings(self, save_path, save_name="embeddings"): + """ + Saves the pretrained embeddings of the tokenizer to a specified directory. + + This method retrieves the pretrained embeddings from the tokenizer, + converts them to a NumPy array, and saves them as a `.npy` file. + + Parameters + ---------- + save_path : str or pathlib.Path + The directory where the pretrained embeddings will be saved. + If the directory does not exist, it will be created. + save_name : str, optional + The base name of the saved embeddings file (default is "embeddings"). + The embeddings will be saved as `.npy` in the specified directory. + """ + save_path = pl.Path(save_path).absolute() + save_path.mkdir(parents=True, exist_ok=True) + + embeddings = self.tokenizer.get_pretrained_embeddings() + embeddings = embeddings.cpu().numpy() + np.save(save_path / save_name, embeddings) + def __del__(self): """ Close the writer. @@ -196,6 +227,8 @@ def _skip(save_path, save_name, conf): --------- save_path : str The path to the directory containing extracted tokens. + save_name : str + The base name of the saved tokens file. conf : dict Configuration to match against saved config. @@ -244,16 +277,6 @@ def __init__( data_path, save_name="tokens", ): - """ - Initializes the TokensLoader. - - Arguments - --------- - data_path: str - The path to the data directory containing the token files. - save_name: str, optional - The base name of the tokens files (default: "tokens"). - """ self.data_path = pl.Path(data_path) if not self.data_path.exists(): raise ValueError( @@ -329,3 +352,31 @@ def _load(self, data_path, save_name): if line.strip() } return utt2toks + + def load_pretrained_embeddings(self, data_path, save_name="embeddings"): + """ + Loads pretrained embeddings from a specified path. + + Arguments + --------- + data_path : str + The directory where the embeddings are saved. + save_name : str, optional + The name of the embeddings file (default: "embeddings"). + + Returns + ------- + embeddings : torch.Tensor + The loaded embeddings as a PyTorch tensor. + + Raises + ------ + FileNotFoundError + If the embeddings file does not exist at the specified path. + """ + data_path = pl.Path(data_path).absolute() + if not self.data_path.exists(): + raise ValueError(f"Data folder not found: {data_path.as_posix()}") + embeddings = np.load(data_path / save_name) + embeddings = torch.from_numpy(embeddings) + return embeddings From 336dd64f561d3174fc1cc31ab7fdd9253df9cabd Mon Sep 17 00:00:00 2001 From: Chaanks Date: Tue, 12 Nov 2024 16:48:10 +0100 Subject: [PATCH 09/61] update LibriSpeech ASR recipe --- .../hparams/LSTM/train.yaml | 239 ++++++++++ .../hparams/contextnet/train.yaml | 232 ++++++++++ .../librispeech_prepare.py | 1 + .../LibriSpeech/ASR-refactor-tokens/train.py | 438 ++++++++++++++++++ .../extraction/hparams/encodec.yaml | 2 +- benchmarks/DASB/utils/tokens.py | 2 +- 6 files changed, 912 insertions(+), 2 deletions(-) create mode 100644 benchmarks/DASB/LibriSpeech/ASR-refactor-tokens/hparams/LSTM/train.yaml create mode 100644 benchmarks/DASB/LibriSpeech/ASR-refactor-tokens/hparams/contextnet/train.yaml create mode 120000 benchmarks/DASB/LibriSpeech/ASR-refactor-tokens/librispeech_prepare.py create mode 100644 benchmarks/DASB/LibriSpeech/ASR-refactor-tokens/train.py diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor-tokens/hparams/LSTM/train.yaml b/benchmarks/DASB/LibriSpeech/ASR-refactor-tokens/hparams/LSTM/train.yaml new file mode 100644 index 000000000..7ae90ad4e --- /dev/null +++ b/benchmarks/DASB/LibriSpeech/ASR-refactor-tokens/hparams/LSTM/train.yaml @@ -0,0 +1,239 @@ +# ############################################################################ +# Model: E2E ASR with CTC +# Auido Tokenizer: Encodec +# Encoder: LSTM Encoder +# Decoder: CTC beam searcher and greedy searcher +# Tokens: character +# Training: Librispeech 960h +# Authors: Pooneh Mousavi 2024 +# ############################################################################ +# Seed needs to be set at top of yaml, before objects with parameters are made + +seed: 1986 +__set_seed: !apply:torch.manual_seed [!ref ] +output_folder: !ref results/enocdec/LSTM/ +output_wer_folder: !ref /wer.txt +save_folder: !ref /save +train_log: !ref /train_log.txt + + +# Data files +data_folder: !PLACEHOLDER # e.g., /path/to/LibriSpeech +# If RIRS_NOISES dir exists in /localscratch/xxx_corpus/RIRS_NOISES +# then data_folder_rirs should be /localscratch/xxx_corpus +# otherwise the dataset will automatically be downloaded +# data_folder_rirs: !ref +train_splits: ["train-clean-100"] #["train-clean-100", "train-clean-360", "train-other-500"] +dev_splits: ["dev-clean"] +test_splits: ["dev-clean", "test-clean", "test-other"] +skip_prep: False +train_csv: !ref /train.csv +valid_csv: !ref /dev-clean.csv +test_csv: + - !ref /dev-clean.csv + - !ref /test-clean.csv + +tokens_folder: !PLACEHOLDER +pretain_embeddings_folder: !PLACEHOLDER # Optional + + +####################### Training Parameters #################################### +number_of_epochs: 20 +batch_size: 4 # This works for 2x GPUs with 32GB +test_batch_size: 1 +grad_accumulation_factor: 2 +max_grad_norm: 5.0 +sorting: descending #random +num_workers: 8 +loss_reduction: batchmean +precision: fp32 # bf16, fp16 or fp32loss_reduction: batchmean +valid_search_interval: 1 +avg_checkpoints: 10 # Number of checkpoints to average for evaluation +cache_size: 1.e+10 + +lr_model: 0.001 +weight_decay: 0.0005 + + +# Training parameters +# To make Transformers converge, the global bath size should be large enough. +# The global batch size is max_batch_len * n_gpus * gradient_accumulation. +# Empirically, we used 850 * 8 A40 45G GPUs * 2 or 1700 * 4 A100 80G * 2. +# Please, set your parameters accordingly. +dynamic_batching: True +max_batch_length_train: 850 +max_batch_len_val: 100 +num_bucket: 200 +shuffle: False # if true re-creates batches at each epoch shuffling examples. +max_batch_ex: 128 +batch_ordering: random + +dynamic_batch_sampler_train: + max_batch_length: !ref + num_buckets: !ref + shuffle: !ref + batch_ordering: !ref + max_batch_ex: !ref + +dynamic_batch_sampler_val: + max_batch_length: !ref + num_buckets: !ref + shuffle: !ref + batch_ordering: !ref + max_batch_ex: !ref + +# Dataloader options +train_dataloader_opts: + batch_size: !ref + shuffle: True + num_workers: !ref + +valid_dataloader_opts: + batch_size: !ref + +test_dataloader_opts: + batch_size: !ref + + +####################### Model parameters ########################### +# Tokenizer parameters +# sample_rate: [24000, 24000, 24000, 24000] +# vocab_size: [1024, 1024, 1024, 1024] +# bandwidth: [1.5, 3.0, 6.0, 12.0, 24.0] +# num_codebooks: [2, 4, 8, 16, 32] +vocab_size: 1024 +# bandwidth: 1.5 +num_codebooks: 2 +sample_rate: 24000 +# Feature parameters +encoder_dim: 1024 +# If set to True, the encoder_dim should be set to the dim of the tokenizer. For encodec it is 128. +pretrain_embeddings: False +freeze_embedding: False + + +# LSTM +activation: !name:torch.nn.Sigmoid +dnn_layers: 2 +dnn_neurons: 1024 +dropout: 0.2 +output_neurons: 31 + +# BPE parameters +# BPE parameters +token_type: char # ["unigram", "bpe", "char"] +character_coverage: 1.0 +blank_index: 0 +bos_index: 1 +eos_index: 2 + +# Decoding parameters +beam_size: 100 +beam_prune_logp: -12.0 +token_prune_min_logp: -1.2 +prune_history: False + +############################## models ################################ +# EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) +# tokenizer: !new:model.tokenizer_interface.EncodecTokenizer +# source: facebook/encodec_24khz # Only the 24kHz version supports mono audio +# save_path: !ref +# sample_rate: !ref +# bandwidth: !ref +# flat_embeddings: False +# freeze: True +# renorm_embeddings: False + +tokens_loader: !new:utils.tokens.TokensLoader + data_path: !ref + + +discrete_embedding_layer: !new:model.custom_model.Discrete_EmbeddingLayer + num_codebooks: !ref + vocab_size: !ref + emb_dim: !ref + # hidden_dim: !ref + freeze: !ref + init: !ref + +attention_mlp: !new:model.custom_model.AttentionMLP + input_dim: !ref + hidden_dim: !ref + +encoder: !new:speechbrain.nnet.RNN.LSTM + input_shape: [Null, Null, !ref ] + num_layers: !ref + bidirectional: True + dropout: !ref + hidden_size: !ref + +ctc_lin: !new:speechbrain.nnet.linear.Linear + input_size: 2048 + n_neurons: !ref + +modules: + encoder: !ref + ctc_lin: !ref + attention_mlp: !ref + # tokenizer: !ref + discrete_embedding_layer: !ref + + +model: !new:torch.nn.ModuleList + - [!ref , !ref , !ref , !ref ] + +####################### Decoding & optimiser ########################### +# Decoding parameters +test_beam_search: + blank_index: !ref + beam_size: !ref + beam_prune_logp: !ref + token_prune_min_logp: !ref + prune_history: !ref + alpha: 0.8 + beta: 1.2 + +ctc_cost: !name:speechbrain.nnet.losses.ctc_loss + blank_index: !ref + + +log_softmax: !new:speechbrain.nnet.activations.Softmax + apply_log: True + +scheduler: !new:speechbrain.nnet.schedulers.NewBobScheduler + initial_value: !ref + improvement_threshold: 0.0025 + annealing_factor: 0.8 + patient: 0 +# scheduler: !new:speechbrain.nnet.schedulers.LinearNoamScheduler +# lr_initial: !ref +# n_warmup_steps: 7500 +# n_keep_steps: 36000 + +model_opt_class: !name:torch.optim.AdamW + lr: !ref + betas: (0.9, 0.98) + eps: 0.000000001 + weight_decay: !ref + +############################## Logging and Pretrainer ########################## +checkpointer: !new:speechbrain.utils.checkpoints.Checkpointer + checkpoints_dir: !ref + recoverables: + model: !ref + scheduler: !ref + counter: !ref + + +# Functions and classes +epoch_counter: !new:speechbrain.utils.epoch_loop.EpochCounter + limit: !ref + +train_logger: !new:speechbrain.utils.train_logger.FileTrainLogger + save_file: !ref + +error_rate_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats + +cer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats + split_tokens: True +wer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor-tokens/hparams/contextnet/train.yaml b/benchmarks/DASB/LibriSpeech/ASR-refactor-tokens/hparams/contextnet/train.yaml new file mode 100644 index 000000000..c28fdead0 --- /dev/null +++ b/benchmarks/DASB/LibriSpeech/ASR-refactor-tokens/hparams/contextnet/train.yaml @@ -0,0 +1,232 @@ +# ############################################################################ +# Model: E2E ASR with CTC +# Auido Tokenizer: Encodec +# Encoder: LSTM Encoder +# Decoder: CTC beam searcher and greedy searcher +# Tokens: character +# Training: Librispeech 960h +# Authors: Pooneh Mousavi 2024 +# ############################################################################ +# Seed needs to be set at top of yaml, before objects with parameters are made + +seed: 1986 +__set_seed: !apply:torch.manual_seed [!ref ] +output_folder: !ref results/enocdec/LSTM/ +output_wer_folder: !ref /wer.txt +save_folder: !ref /save +train_log: !ref /train_log.txt + + +# Data files +data_folder: !PLACEHOLDER # e.g., /path/to/LibriSpeech +# If RIRS_NOISES dir exists in /localscratch/xxx_corpus/RIRS_NOISES +# then data_folder_rirs should be /localscratch/xxx_corpus +# otherwise the dataset will automatically be downloaded +# data_folder_rirs: !ref +train_splits: ["train-clean-100", "train-clean-360", "train-other-500"] +dev_splits: ["dev-clean"] +test_splits: ["dev-clean", "test-clean", "test-other"] +skip_prep: False +train_csv: !ref /train.csv +valid_csv: !ref /dev-clean.csv +test_csv: + - !ref /dev-clean.csv + - !ref /test-clean.csv + + +####################### Training Parameters #################################### +number_of_epochs: 20 +batch_size: 4 # This works for 2x GPUs with 32GB +test_batch_size: 1 +grad_accumulation_factor: 2 +max_grad_norm: 5.0 +sorting: descending #random +num_workers: 8 +loss_reduction: batchmean +precision: fp32 # bf16, fp16 or fp32loss_reduction: batchmean +valid_search_interval: 1 +avg_checkpoints: 10 # Number of checkpoints to average for evaluation +cache_size: 1.e+10 + +lr_model: 0.001 +weight_decay: 0.0005 + + +# Training parameters +# To make Transformers converge, the global bath size should be large enough. +# The global batch size is max_batch_len * n_gpus * gradient_accumulation. +# Empirically, we used 850 * 8 A40 45G GPUs * 2 or 1700 * 4 A100 80G * 2. +# Please, set your parameters accordingly. +dynamic_batching: True +max_batch_length_train: 850 +max_batch_len_val: 100 +num_bucket: 200 +shuffle: False # if true re-creates batches at each epoch shuffling examples. +max_batch_ex: 128 +batch_ordering: random + +dynamic_batch_sampler_train: + max_batch_length: !ref + num_buckets: !ref + shuffle: !ref + batch_ordering: !ref + max_batch_ex: !ref + +dynamic_batch_sampler_val: + max_batch_length: !ref + num_buckets: !ref + shuffle: !ref + batch_ordering: !ref + max_batch_ex: !ref + +# Dataloader options +train_dataloader_opts: + batch_size: !ref + shuffle: True + num_workers: !ref + +valid_dataloader_opts: + batch_size: !ref + +test_dataloader_opts: + batch_size: !ref + + +####################### Model parameters ########################### +# Tokenizer parameters +# sample_rate: [24000, 24000, 24000, 24000] +# vocab_size: [1024, 1024, 1024, 1024] +# bandwidth: [1.5, 3.0, 6.0, 12.0, 24.0] +# num_codebooks: [2, 4, 8, 16, 32] +vocab_size: 1024 +# bandwidth: 1.5 +num_codebooks: 2 +sample_rate: 24000 +# Feature parameters +encoder_dim: 1024 +# If set to True, the encoder_dim should be set to the dim of the tokenizer. For encodec it is 128. +pretrain_embeddings: False +freeze_embedding: False + + +# LSTM +activation: !name:torch.nn.Sigmoid +dnn_layers: 2 +dnn_neurons: 1024 +dropout: 0.2 +output_neurons: 31 + +# BPE parameters +# BPE parameters +token_type: char # ["unigram", "bpe", "char"] +character_coverage: 1.0 +blank_index: 0 +bos_index: 1 +eos_index: 2 + +# Decoding parameters +beam_size: 100 +beam_prune_logp: -12.0 +token_prune_min_logp: -1.2 +prune_history: False + +############################## models ################################ +# EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) +# tokenizer: !new:model.tokenizer_interface.EncodecTokenizer +# source: facebook/encodec_24khz # Only the 24kHz version supports mono audio +# save_path: !ref +# sample_rate: !ref +# bandwidth: !ref +# flat_embeddings: False +# freeze: True +# renorm_embeddings: False + +discrete_embedding_layer: !new:model.custom_model.Discrete_EmbeddingLayer + num_codebooks: !ref + vocab_size: !ref + emb_dim: !ref + # hidden_dim: !ref + freeze: !ref + init: !ref + +attention_mlp: !new:model.custom_model.AttentionMLP + input_dim: !ref + hidden_dim: !ref + +encoder: !new:speechbrain.nnet.RNN.LSTM + input_shape: [Null, Null, !ref ] + num_layers: !ref + bidirectional: True + dropout: !ref + hidden_size: !ref + +ctc_lin: !new:speechbrain.nnet.linear.Linear + input_size: 2048 + n_neurons: !ref + +modules: + encoder: !ref + ctc_lin: !ref + attention_mlp: !ref + # tokenizer: !ref + discrete_embedding_layer: !ref + + +model: !new:torch.nn.ModuleList + - [!ref , !ref , !ref , !ref ] + +####################### Decoding & optimiser ########################### +# Decoding parameters +test_beam_search: + blank_index: !ref + beam_size: !ref + beam_prune_logp: !ref + token_prune_min_logp: !ref + prune_history: !ref + alpha: 0.8 + beta: 1.2 + +ctc_cost: !name:speechbrain.nnet.losses.ctc_loss + blank_index: !ref + + +log_softmax: !new:speechbrain.nnet.activations.Softmax + apply_log: True + +scheduler: !new:speechbrain.nnet.schedulers.NewBobScheduler + initial_value: !ref + improvement_threshold: 0.0025 + annealing_factor: 0.8 + patient: 0 +# scheduler: !new:speechbrain.nnet.schedulers.LinearNoamScheduler +# lr_initial: !ref +# n_warmup_steps: 7500 +# n_keep_steps: 36000 + +model_opt_class: !name:torch.optim.AdamW + lr: !ref + betas: (0.9, 0.98) + eps: 0.000000001 + weight_decay: !ref + +############################## Logging and Pretrainer ########################## +checkpointer: !new:speechbrain.utils.checkpoints.Checkpointer + checkpoints_dir: !ref + recoverables: + model: !ref + scheduler: !ref + counter: !ref + + +# Functions and classes +epoch_counter: !new:speechbrain.utils.epoch_loop.EpochCounter + limit: !ref + +train_logger: !new:speechbrain.utils.train_logger.FileTrainLogger + save_file: !ref + +error_rate_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats + +cer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats + split_tokens: True +wer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor-tokens/librispeech_prepare.py b/benchmarks/DASB/LibriSpeech/ASR-refactor-tokens/librispeech_prepare.py new file mode 120000 index 000000000..a3126ec94 --- /dev/null +++ b/benchmarks/DASB/LibriSpeech/ASR-refactor-tokens/librispeech_prepare.py @@ -0,0 +1 @@ +../librispeech_prepare.py \ No newline at end of file diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor-tokens/train.py b/benchmarks/DASB/LibriSpeech/ASR-refactor-tokens/train.py new file mode 100644 index 000000000..927d7ea84 --- /dev/null +++ b/benchmarks/DASB/LibriSpeech/ASR-refactor-tokens/train.py @@ -0,0 +1,438 @@ +#!/usr/bin/env/python3 +"""Recipe for training an discrete tokens ctc ASR system with librispeech. + +Decoding is performed with greedy decoding at validation time. +At test time, beamsearch is used with an optional external language model. + +Authors + * Pooneh Mousavi 2024 +""" + +import os +import sys +import torch +import torchaudio +import logging +import speechbrain as sb +from speechbrain.utils.distributed import run_on_main, if_main_process +from speechbrain.tokenizers.SentencePiece import SentencePiece +from hyperpyyaml import load_hyperpyyaml +from pathlib import Path + +base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../")) +sys.path.append(base_dir) + + +logger = logging.getLogger(__name__) + +_CACHE = {"size": 0} + + +# Define training procedure +class ASR(sb.Brain): + def compute_forward(self, batch, stage): + """Forward computations from the waveform batches to the output probabilities.""" + batch = batch.to(self.device) + wavs, wav_lens = batch.sig + in_toks, _ = batch.speech_tokens + + # Extract embeddings + in_embs = self.modules.discrete_embedding_layer( + in_toks + ) # [B, T, N-Q, D] + + # Attention-Pooling + att_w = self.modules.attention_mlp(in_embs) # [B, T, N-Q, 1] + in_embs = torch.matmul(att_w.transpose(2, -1), in_embs).squeeze( + -2 + ) # [B, T, D] + + # forward modules + if type(self.modules.encoder).__name__ == "ContextNet": + enc_out = self.modules.encoder(in_embs) + + elif type(self.modules.encoder).__name__ == "LSTM": + enc_out, _ = self.modules.encoder(in_embs) + + else: + raise NotImplementedError + + # output layer for ctc log-probabilities + logits = self.modules.ctc_lin(enc_out) + p_ctc = self.hparams.log_softmax(logits) + + p_tokens = None + if stage == sb.Stage.VALID: + p_tokens = sb.decoders.ctc_greedy_decode( + p_ctc, wav_lens, blank_id=self.hparams.blank_index + ) + elif stage == sb.Stage.TEST: + p_tokens = test_searcher(p_ctc, wav_lens) + + return p_ctc, wav_lens, p_tokens + + def compute_objectives(self, predictions, batch, stage): + """Computes the loss (CTC+NLL) given predictions and targets.""" + + p_ctc, wav_lens, predicted_tokens = predictions + ids = batch.id + tokens, tokens_lens = batch.tokens + + # Label Augmentation + if stage == sb.Stage.TRAIN and hasattr(self.hparams, "wav_augment"): + tokens = self.hparams.wav_augment.replicate_labels(tokens) + tokens_lens = self.hparams.wav_augment.replicate_labels(tokens_lens) + + loss = self.hparams.ctc_cost(p_ctc, tokens, wav_lens, tokens_lens) + + if stage == sb.Stage.VALID: + # Decode token terms to words + predicted_words = self.tokenizer( + predicted_tokens, task="decode_from_list" + ) + elif stage == sb.Stage.TEST: + predicted_words = [ + hyp[0].text.split(" ") for hyp in predicted_tokens + ] + + if stage != sb.Stage.TRAIN: + target_words = [wrd.split(" ") for wrd in batch.wrd] + self.wer_metric.append(ids, predicted_words, target_words) + self.cer_metric.append(ids, predicted_words, target_words) + + return loss + + def on_stage_start(self, stage, epoch): + """Gets called at the beginning of each epoch""" + if stage != sb.Stage.TRAIN: + self.cer_metric = self.hparams.cer_computer() + self.wer_metric = self.hparams.wer_computer() + + def on_stage_end(self, stage, stage_loss, epoch): + """Gets called at the end of a epoch.""" + # Compute/store important stats + stage_stats = {"loss": stage_loss} + if stage == sb.Stage.TRAIN: + self.train_stats = stage_stats + else: + stage_stats["CER"] = self.cer_metric.summarize("error_rate") + stage_stats["WER"] = self.wer_metric.summarize("error_rate") + current_epoch = self.hparams.epoch_counter.current + valid_search_interval = self.hparams.valid_search_interval + if ( + current_epoch % valid_search_interval == 0 + or stage == sb.Stage.TEST + ): + stage_stats["WER"] = self.wer_metric.summarize("error_rate") + + # log stats and save checkpoint at end-of-epoch + if stage == sb.Stage.VALID: + if type(self.hparams.scheduler).__name__ == "NewBobScheduler": + lr, new_lr = self.hparams.scheduler(stage_stats["loss"]) + sb.nnet.schedulers.update_learning_rate(self.optimizer, new_lr) + elif type(self.hparams.scheduler).__name__ == "LinearNoamScheduler": + lr = self.hparams.scheduler.current_lr + else: + raise NotImplementedError + + optimizer = self.optimizer.__class__.__name__ + epoch_stats = { + "epoch": epoch, + "lr": lr, + "optimizer": optimizer, + } + self.hparams.train_logger.log_stats( + stats_meta=epoch_stats, + train_stats=self.train_stats, + valid_stats=stage_stats, + ) + self.checkpointer.save_and_keep_only( + meta={"WER": stage_stats["WER"], "epoch": epoch}, + min_keys=["WER"], + num_to_keep=self.hparams.avg_checkpoints, + ) + + elif stage == sb.Stage.TEST: + self.hparams.train_logger.log_stats( + stats_meta={"Epoch loaded": self.hparams.epoch_counter.current}, + test_stats=stage_stats, + ) + if if_main_process(): + with open( + self.hparams.output_wer_folder, "w", encoding="utf-8" + ) as w: + self.wer_metric.write_stats(w) + + def on_fit_batch_end(self, batch, outputs, loss, should_step): + if ( + should_step + and type(self.hparams.scheduler).__name__ == "LinearNoamScheduler" + ): + self.hparams.scheduler(self.optimizer) + + +def dataio_prepare(hparams, tokenizer): + """This function prepares the datasets to be used in the brain class. + It also defines the data processing pipeline through user-defined functions. + """ + data_folder = hparams["data_folder"] + + train_data = sb.dataio.dataset.DynamicItemDataset.from_csv( + csv_path=hparams["train_csv"], + replacements={"data_root": data_folder}, + ) + + if hparams["sorting"] == "ascending": + # we sort training data to speed up training and get better results. + train_data = train_data.filtered_sorted(sort_key="duration") + # when sorting do not shuffle in dataloader ! otherwise is pointless + hparams["train_dataloader_opts"]["shuffle"] = False + + elif hparams["sorting"] == "descending": + train_data = train_data.filtered_sorted( + sort_key="duration", reverse=True + ) + # when sorting do not shuffle in dataloader ! otherwise is pointless + hparams["train_dataloader_opts"]["shuffle"] = False + + elif hparams["sorting"] == "random": + pass + + else: + raise NotImplementedError( + "sorting must be random, ascending or descending" + ) + + valid_data = sb.dataio.dataset.DynamicItemDataset.from_csv( + csv_path=hparams["valid_csv"], + replacements={"data_root": data_folder}, + ) + valid_data = valid_data.filtered_sorted(sort_key="duration") + + # test is separate + test_datasets = {} + for csv_file in hparams["test_csv"]: + name = Path(csv_file).stem + test_datasets[name] = sb.dataio.dataset.DynamicItemDataset.from_csv( + csv_path=csv_file, replacements={"data_root": data_folder} + ) + test_datasets[name] = test_datasets[name].filtered_sorted( + sort_key="duration" + ) + + datasets = [train_data, valid_data] + [i for k, i in test_datasets.items()] + + # 1. Define tokens pipeline: + tokens_loader = hparams["tokens_loader"] + num_codebooks = hparams["num_codebooks"] + + @sb.utils.data_pipeline.takes("id") + @sb.utils.data_pipeline.provides("speech_tokens") + def tokens_pipeline(id): + tokens = tokens_loader.tokens_by_uttid(id, num_codebooks=num_codebooks) + return tokens + + sb.dataio.dataset.add_dynamic_item(datasets, tokens_pipeline) + + # 2. Define audio pipeline: + @sb.utils.data_pipeline.takes("wav") + @sb.utils.data_pipeline.provides("sig") + def audio_pipeline(wav): + sig = sb.dataio.dataio.read_audio(wav) + info = torchaudio.info(wav) + resampled = torchaudio.transforms.Resample( + info.sample_rate, + hparams["sample_rate"], + )(sig) + # resampled = resampled.unsqueeze(0) + return resampled + + sb.dataio.dataset.add_dynamic_item(datasets, audio_pipeline) + + # 3. Define text pipeline: + @sb.utils.data_pipeline.takes("wrd") + @sb.utils.data_pipeline.provides( + "wrd", "char_list", "tokens_list", "tokens" + ) + def text_pipeline(wrd): + yield wrd + char_list = list(wrd) + yield char_list + tokens_list = tokenizer.sp.encode_as_ids(wrd) + yield tokens_list + tokens = torch.LongTensor(tokens_list) + yield tokens + + sb.dataio.dataset.add_dynamic_item(datasets, text_pipeline) + + # 4. Set output: + sb.dataio.dataset.set_output_keys( + datasets, + ["id", "sig", "wrd", "char_list", "tokens", "speech_tokens"], + ) + + # 5. If Dynamic Batching is used, we instantiate the needed samplers. + train_batch_sampler = None + valid_batch_sampler = None + if hparams["dynamic_batching"]: + from speechbrain.dataio.sampler import DynamicBatchSampler # noqa + + dynamic_hparams_train = hparams["dynamic_batch_sampler_train"] + dynamic_hparams_val = hparams["dynamic_batch_sampler_val"] + + train_batch_sampler = DynamicBatchSampler( + train_data, + length_func=lambda x: x["duration"], + **dynamic_hparams_train, + ) + + valid_batch_sampler = DynamicBatchSampler( + valid_data, + length_func=lambda x: x["duration"], + **dynamic_hparams_val, + ) + + return ( + train_data, + valid_data, + test_datasets, + train_batch_sampler, + valid_batch_sampler, + ) + + +if __name__ == "__main__": + + # CLI: + hparams_file, run_opts, overrides = sb.parse_arguments(sys.argv[1:]) + with open(hparams_file) as fin: + hparams = load_hyperpyyaml(fin, overrides) + + # If distributed_launch=True then + # create ddp_group with the right communication protocol + sb.utils.distributed.ddp_init_group(run_opts) + + # Create experiment directory + sb.create_experiment_directory( + experiment_directory=hparams["output_folder"], + hyperparams_to_save=hparams_file, + overrides=overrides, + ) + + # Dataset prep (parsing Librispeech) + from librispeech_prepare import prepare_librispeech # noqa + + # multi-gpu (ddp) save data preparation + run_on_main( + prepare_librispeech, + kwargs={ + "data_folder": hparams["data_folder"], + "tr_splits": hparams["train_splits"], + "dev_splits": hparams["dev_splits"], + "te_splits": hparams["test_splits"], + "save_folder": hparams["output_folder"], + "merge_lst": hparams["train_splits"], + "merge_name": "train.csv", + "skip_prep": hparams["skip_prep"], + }, + ) + + # Defining tokenizer and loading it + tokenizer = SentencePiece( + model_dir=hparams["save_folder"], + vocab_size=hparams["output_neurons"], + annotation_train=hparams["train_csv"], + annotation_read="wrd", + model_type=hparams["token_type"], + character_coverage=hparams["character_coverage"], + bos_id=hparams["bos_index"], + eos_id=hparams["eos_index"], + ) + + # here we create the datasets objects as well as tokenization and encoding + ( + train_data, + valid_data, + test_datasets, + train_bsampler, + valid_bsampler, + ) = dataio_prepare(hparams, tokenizer) + + # Use pretrained embeddings + if hparams["pretrain_embeddings"]: + tokens_loader = hparams["tokens_loader"] + embs = tokens_loader.load_pretrained_embeddings( + hparams["pretain_embeddings_folder"] + ) + hparams["discrete_embedding_layer"].init_embedding(embs) + + # Log number of parameters/buffers + model_params = sum( + [ + x.numel() + for module in hparams["modules"].values() + for x in module.state_dict().values() + ] + ) + hparams["train_logger"].log_stats( + stats_meta={ + "Model parameters/buffers (M)": f"{model_params / 1e6:.2f}", + }, + ) + + # Trainer initialization + asr_brain = ASR( + modules=hparams["modules"], + opt_class=hparams["model_opt_class"], + hparams=hparams, + run_opts=run_opts, + checkpointer=hparams["checkpointer"], + ) + + # Adding objects to trainer. + asr_brain.tokenizer = tokenizer + vocab_list = [ + tokenizer.sp.id_to_piece(i) for i in range(tokenizer.sp.vocab_size()) + ] + + from speechbrain.decoders.ctc import CTCBeamSearcher + + test_searcher = CTCBeamSearcher( + **hparams["test_beam_search"], + vocab_list=vocab_list, + ) + + train_dataloader_opts = hparams["train_dataloader_opts"] + valid_dataloader_opts = hparams["valid_dataloader_opts"] + + if train_bsampler is not None: + train_dataloader_opts = { + "batch_sampler": train_bsampler, + "num_workers": hparams["num_workers"], + } + + if valid_bsampler is not None: + valid_dataloader_opts = {"batch_sampler": valid_bsampler} + + # Training + asr_brain.fit( + asr_brain.hparams.epoch_counter, + train_data, + valid_data, + train_loader_kwargs=hparams["train_dataloader_opts"], + valid_loader_kwargs=hparams["valid_dataloader_opts"], + ) + + # Testing + if not os.path.exists(hparams["output_wer_folder"]): + os.makedirs(hparams["output_wer_folder"]) + + for k in test_datasets.keys(): # keys are test_clean, test_other etc + asr_brain.hparams.output_wer_folder = os.path.join( + hparams["output_wer_folder"], f"wer_{k}.txt" + ) + asr_brain.evaluate( + test_datasets[k], + test_loader_kwargs=hparams["test_dataloader_opts"], + min_key="WER", + ) diff --git a/benchmarks/DASB/LibriSpeech/extraction/hparams/encodec.yaml b/benchmarks/DASB/LibriSpeech/extraction/hparams/encodec.yaml index 815b8aae6..f68ab9b37 100644 --- a/benchmarks/DASB/LibriSpeech/extraction/hparams/encodec.yaml +++ b/benchmarks/DASB/LibriSpeech/extraction/hparams/encodec.yaml @@ -23,7 +23,7 @@ test_csv: - !ref /test-clean.csv - !ref /test-other.csv -batch_size: 32 +batch_size: 8 num_workers: 8 src_key: wav id_key: id diff --git a/benchmarks/DASB/utils/tokens.py b/benchmarks/DASB/utils/tokens.py index 493a0598a..272e01ebe 100644 --- a/benchmarks/DASB/utils/tokens.py +++ b/benchmarks/DASB/utils/tokens.py @@ -377,6 +377,6 @@ def load_pretrained_embeddings(self, data_path, save_name="embeddings"): data_path = pl.Path(data_path).absolute() if not self.data_path.exists(): raise ValueError(f"Data folder not found: {data_path.as_posix()}") - embeddings = np.load(data_path / save_name) + embeddings = np.load(data_path / f"{save_name}.npy") embeddings = torch.from_numpy(embeddings) return embeddings From cf4041207ff844c75f714b0dd1950c7baf7d69ff Mon Sep 17 00:00:00 2001 From: Chaanks Date: Tue, 3 Dec 2024 00:29:49 +0100 Subject: [PATCH 10/61] update LibriSpeech ASR recipe --- .../hparams/LSTM/train.yaml | 20 +-- .../LibriSpeech/ASR-refactor-tokens/train.py | 3 - .../DASB/LibriSpeech/extraction/extract.py | 4 +- .../LibriSpeech/extraction/hparams/dac.yaml | 65 +++++++ .../hparams/discrete_ssl_wavlm.yaml | 83 +++++++++ .../extraction/hparams/encodec.yaml | 2 +- .../extraction/hparams/speech_tokenizer.yaml | 54 ++++++ benchmarks/DASB/model/tokenizer_interface.py | 170 ++++++++++-------- benchmarks/DASB/utils/tokens.py | 14 +- 9 files changed, 319 insertions(+), 96 deletions(-) create mode 100644 benchmarks/DASB/LibriSpeech/extraction/hparams/dac.yaml create mode 100644 benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl_wavlm.yaml create mode 100644 benchmarks/DASB/LibriSpeech/extraction/hparams/speech_tokenizer.yaml diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor-tokens/hparams/LSTM/train.yaml b/benchmarks/DASB/LibriSpeech/ASR-refactor-tokens/hparams/LSTM/train.yaml index 7ae90ad4e..89d347862 100644 --- a/benchmarks/DASB/LibriSpeech/ASR-refactor-tokens/hparams/LSTM/train.yaml +++ b/benchmarks/DASB/LibriSpeech/ASR-refactor-tokens/hparams/LSTM/train.yaml @@ -11,7 +11,8 @@ seed: 1986 __set_seed: !apply:torch.manual_seed [!ref ] -output_folder: !ref results/enocdec/LSTM/ +run_name: !PLACEHOLDER +output_folder: !ref results/LSTM// output_wer_folder: !ref /wer.txt save_folder: !ref /save train_log: !ref /train_log.txt @@ -39,7 +40,7 @@ pretain_embeddings_folder: !PLACEHOLDER # Optional ####################### Training Parameters #################################### number_of_epochs: 20 -batch_size: 4 # This works for 2x GPUs with 32GB +batch_size: 4 test_batch_size: 1 grad_accumulation_factor: 2 max_grad_norm: 5.0 @@ -56,10 +57,6 @@ weight_decay: 0.0005 # Training parameters -# To make Transformers converge, the global bath size should be large enough. -# The global batch size is max_batch_len * n_gpus * gradient_accumulation. -# Empirically, we used 850 * 8 A40 45G GPUs * 2 or 1700 * 4 A100 80G * 2. -# Please, set your parameters accordingly. dynamic_batching: True max_batch_length_train: 850 max_batch_len_val: 100 @@ -134,20 +131,9 @@ token_prune_min_logp: -1.2 prune_history: False ############################## models ################################ -# EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) -# tokenizer: !new:model.tokenizer_interface.EncodecTokenizer -# source: facebook/encodec_24khz # Only the 24kHz version supports mono audio -# save_path: !ref -# sample_rate: !ref -# bandwidth: !ref -# flat_embeddings: False -# freeze: True -# renorm_embeddings: False - tokens_loader: !new:utils.tokens.TokensLoader data_path: !ref - discrete_embedding_layer: !new:model.custom_model.Discrete_EmbeddingLayer num_codebooks: !ref vocab_size: !ref diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor-tokens/train.py b/benchmarks/DASB/LibriSpeech/ASR-refactor-tokens/train.py index 927d7ea84..746a068e1 100644 --- a/benchmarks/DASB/LibriSpeech/ASR-refactor-tokens/train.py +++ b/benchmarks/DASB/LibriSpeech/ASR-refactor-tokens/train.py @@ -25,8 +25,6 @@ logger = logging.getLogger(__name__) -_CACHE = {"size": 0} - # Define training procedure class ASR(sb.Brain): @@ -36,7 +34,6 @@ def compute_forward(self, batch, stage): wavs, wav_lens = batch.sig in_toks, _ = batch.speech_tokens - # Extract embeddings in_embs = self.modules.discrete_embedding_layer( in_toks ) # [B, T, N-Q, D] diff --git a/benchmarks/DASB/LibriSpeech/extraction/extract.py b/benchmarks/DASB/LibriSpeech/extraction/extract.py index 935c013bd..ef3e677b5 100644 --- a/benchmarks/DASB/LibriSpeech/extraction/extract.py +++ b/benchmarks/DASB/LibriSpeech/extraction/extract.py @@ -85,7 +85,9 @@ save_folder = pl.Path(hparams["save_folder"]) logger.info("Extracting dataset tokens ...") tokens_extractor.extract_tokens( - merged_dataset, (save_folder / "librispeech").as_posix() + merged_dataset, + hparams["num_codebooks"], + (save_folder / "librispeech").as_posix(), ) if hparams["save_embedding"]: diff --git a/benchmarks/DASB/LibriSpeech/extraction/hparams/dac.yaml b/benchmarks/DASB/LibriSpeech/extraction/hparams/dac.yaml new file mode 100644 index 000000000..c380f0478 --- /dev/null +++ b/benchmarks/DASB/LibriSpeech/extraction/hparams/dac.yaml @@ -0,0 +1,65 @@ +# ############################################################################ +# Auido Tokenizer: DAC +# Extraction: Librispeech 960h +# Authors: Jarod Duret 2024 +# ############################################################################ +# Seed needs to be set at top of yaml, before objects with parameters are made + +seed: 1986 +__set_seed: !apply:torch.manual_seed [!ref ] +output_folder: !ref results/dac +save_folder: !ref /save +train_log: !ref /extraction_log.txt + +# Data files +data_folder: !PLACEHOLDER # e.g., /path/to/LibriSpeech +train_splits: ["train-clean-100"] #, "train-clean-360", "train-other-500" +dev_splits: ["dev-clean"] +test_splits: ["dev-clean", "test-clean", "test-other"] +skip_prep: False +train_csv: !ref /train.csv +valid_csv: !ref /dev-clean.csv +test_csv: + - !ref /test-clean.csv + - !ref /test-other.csv + +batch_size: 8 +num_workers: 8 +src_key: wav +id_key: id + +# Dataloader options +dataloader_opts: + batch_size: !ref + shuffle: True + num_workers: !ref + +####################### Model parameters ########################### +# Tokenizer parameters +# DAC parameters +# model_type: [16khz, 24khz, 44khz, 44khz] +# vocab_size: [1024, 1024, 1024, 1024] +# model_bitrate: [8kbps, 8kbps, 8kbps, 16kbps] +# max_num_codebooks: [12, 32, 9, 18] +# embedding_dim: [1024, 1024, 1024, 128] +model_type: 24khz +vocab_size: 1024 +model_bitrate: 8kbps +num_codebooks: 2 +sample_rate: 24000 +# Feature parameters +encoder_dim: 1024 +save_embedding: False + +tokenizer: !new:model.tokenizer_interface.DACTokenizer + model_type: !ref + model_bitrate: !ref + load_pretrained: True + tag: latest + +tokens_extractor: !new:utils.tokens.TokensExtractor + tokenizer: !ref + sample_rate: !ref + src_key: !ref + id_key: !ref + dataloader_opts: !ref \ No newline at end of file diff --git a/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl_wavlm.yaml b/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl_wavlm.yaml new file mode 100644 index 000000000..2263547c5 --- /dev/null +++ b/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl_wavlm.yaml @@ -0,0 +1,83 @@ +# ############################################################################ +# Auido Tokenizer: WavLM +# Extraction: Librispeech 960h +# Authors: Jarod Duret 2024 +# ############################################################################ +# Seed needs to be set at top of yaml, before objects with parameters are made + +seed: 1986 +__set_seed: !apply:torch.manual_seed [!ref ] +output_folder: !ref results/wavlm +save_folder: !ref /save +train_log: !ref /extraction_log.txt + +# Data files +data_folder: !PLACEHOLDER # e.g., /path/to/LibriSpeech +train_splits: ["train-clean-100"] #, "train-clean-360", "train-other-500" +dev_splits: ["dev-clean"] +test_splits: ["dev-clean", "test-clean", "test-other"] +skip_prep: False +train_csv: !ref /train.csv +valid_csv: !ref /dev-clean.csv +test_csv: + - !ref /test-clean.csv + - !ref /test-other.csv + +batch_size: 8 +num_workers: 8 +src_key: wav +id_key: id + +# Dataloader options +dataloader_opts: + batch_size: !ref + shuffle: True + num_workers: !ref + +### Configuration for discrete SSL model +# ssl_model_type: hubert, wavlm, wav2vec2 +# ssl_hub: facebook/hubert-large-ll60k, microsoft/wavlm-large, facebook/wav2vec2-large +ssl_model_type: wavml +ssl_hub: microsoft/wavlm-large +ssl_folder: !ref /ssl_checkpoint +kmeans_cache_dir: !ref /kmeans_checkpoint +kmeans_dataset: LibriSpeech +vocoder_repo_id: speechbrain/hifigan-wavlm-k1000-LibriTTS +freeze_ssl: True +freeze_feature_extractor: True +num_clusters: 1000 +save_embedding: False + +### Config for Tokenizer +# Layer number should be among the supported layers for discrete SSL models(kmenas model should be available for that layer) +# ssl_layer_num: [3, 7, 12, 23] +# deduplicate: [False, False, False, False] +# bpe_tokenizer_path: [null , null, null, null] +ssl_layer_num: [1, 3, 7, 12, 18, 23] +num_codebooks: 6 +deduplicate: [False, False, False, False, False, False] +bpe_tokenizer_path: [null, null, null, null, null, null] +sample_rate: 16000 +encoder_dim: 1024 + +ssl_model: !new:speechbrain.lobes.models.huggingface_transformers.wavlm.WavLM + source: !ref + output_norm: False + freeze: !ref + freeze_feature_extractor: !ref + output_all_hiddens: True + save_path: !ref + +tokenizer: !new:model.tokenizer_interface.DiscreteSSLTokenizer + save_path: !ref + ssl_model: !ref + vocoder_repo_id: !ref + kmeans_dataset: !ref + num_clusters: !ref + +tokens_extractor: !new:utils.tokens.TokensExtractor + tokenizer: !ref + sample_rate: !ref + src_key: !ref + id_key: !ref + dataloader_opts: !ref \ No newline at end of file diff --git a/benchmarks/DASB/LibriSpeech/extraction/hparams/encodec.yaml b/benchmarks/DASB/LibriSpeech/extraction/hparams/encodec.yaml index f68ab9b37..81cbd0fb2 100644 --- a/benchmarks/DASB/LibriSpeech/extraction/hparams/encodec.yaml +++ b/benchmarks/DASB/LibriSpeech/extraction/hparams/encodec.yaml @@ -37,7 +37,7 @@ dataloader_opts: bandwidth: 1.5 num_codebooks: 2 sample_rate: 24000 -save_embedding: True +save_embedding: False # EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) tokenizer: !new:model.tokenizer_interface.EncodecTokenizer diff --git a/benchmarks/DASB/LibriSpeech/extraction/hparams/speech_tokenizer.yaml b/benchmarks/DASB/LibriSpeech/extraction/hparams/speech_tokenizer.yaml new file mode 100644 index 000000000..176768d5e --- /dev/null +++ b/benchmarks/DASB/LibriSpeech/extraction/hparams/speech_tokenizer.yaml @@ -0,0 +1,54 @@ +# ############################################################################ +# Auido Tokenizer: Speech Tokenizer +# Extraction: Librispeech 960h +# Authors: Jarod Duret 2024 +# ############################################################################ +# Seed needs to be set at top of yaml, before objects with parameters are made + +seed: 1986 +__set_seed: !apply:torch.manual_seed [!ref ] +output_folder: !ref results/speech_tokenizer +save_folder: !ref /save +train_log: !ref /extraction_log.txt + +# Data files +data_folder: !PLACEHOLDER # e.g., /path/to/LibriSpeech +train_splits: ["train-clean-100"] #, "train-clean-360", "train-other-500" +dev_splits: ["dev-clean"] +test_splits: ["dev-clean", "test-clean", "test-other"] +skip_prep: False +train_csv: !ref /train.csv +valid_csv: !ref /dev-clean.csv +test_csv: + - !ref /test-clean.csv + - !ref /test-other.csv + +batch_size: 8 +num_workers: 8 +src_key: wav +id_key: id + +# Dataloader options +dataloader_opts: + batch_size: !ref + shuffle: True + num_workers: !ref + +vocab_size: 1024 +num_codebooks: 2 +sample_rate: 16000 +encoder_dim: 1024 +freeze_embedding: False +save_embedding: False + +# EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) +tokenizer: !new:model.tokenizer_interface.SpeechTokenizer + source: fnlp/SpeechTokenizer # Only the 24kHz version supports mono audio + save_path: !ref + +tokens_extractor: !new:utils.tokens.TokensExtractor + tokenizer: !ref + sample_rate: !ref + src_key: !ref + id_key: !ref + dataloader_opts: !ref \ No newline at end of file diff --git a/benchmarks/DASB/model/tokenizer_interface.py b/benchmarks/DASB/model/tokenizer_interface.py index 604e3a403..652fa53e1 100644 --- a/benchmarks/DASB/model/tokenizer_interface.py +++ b/benchmarks/DASB/model/tokenizer_interface.py @@ -21,135 +21,161 @@ class BaseTokenizer(ABC): + def __init__(self): + super().__init__() + @abstractmethod @torch.no_grad() - def sig_to_tokens(self, signal, lengths, **kwargs): - """Abstract method to encode a signal into tokens.""" + def sig_to_tokens(self, signal, lengths, num_codebooks=None, **kwargs): + """Encode signal into tokens.""" pass @abstractmethod @torch.no_grad() def tokens_to_sig(self, tokens, **kwargs): - """Abstract method to decode tokens into a signal.""" + """Decode tokens to signal.""" pass @abstractmethod @torch.no_grad() - def get_pretrained_embeddings(self, **kwargs): - """Return pretrained codebook embedding.""" + def get_pretrained_embeddings( + self, vocab_size, num_codebooks, device="cpu", **kwargs + ): + """Get codebook embeddings.""" pass class EncodecTokenizer(Encodec, BaseTokenizer): + def __init__(self, source, **kwargs): + Encodec.__init__(self, source=source, **kwargs) + BaseTokenizer.__init__(self) + @torch.no_grad() - def sig_to_tokens(self, signal, lengths, **kwargs): - # signal: [B, T] + def sig_to_tokens(self, signal, lengths, num_codebooks=None, **kwargs): self.eval() - tokens, _ = self.encode(signal, lengths) # [B, T, N_Q] + tokens, _ = self.encode(signal, lengths) + if num_codebooks: + if tokens.shape[-1] < num_codebooks: + raise ValueError( + f"Model only outputs {tokens.shape[-1]} codebooks, but {num_codebooks} requested" + ) + tokens = tokens[..., :num_codebooks] return tokens @torch.no_grad() def tokens_to_sig(self, tokens, **kwargs): - # tokens: [B, T, N_Q] self.eval() - signal = self.decode(tokens)[:, 0] # [B, T] + signal = self.decode(tokens)[:, 0] return signal @torch.no_grad() - def get_pretrained_embeddings(self, **kwargs): - """Return pretrained codebook embedding.""" + def get_pretrained_embeddings( + self, vocab_size=None, num_codebooks=None, device=None, **kwargs + ): embeddings = self.vocabulary return embeddings.reshape(-1, embeddings.shape[-1]) class DACTokenizer(DAC, BaseTokenizer): + def __init__(self, *args, **kwargs): + DAC.__init__(self, *args, **kwargs) + BaseTokenizer.__init__(self) + @torch.no_grad() - def sig_to_tokens(self, signal, lengths, **kwargs): - # signal: [B, T] + def sig_to_tokens(self, signal, lengths, num_codebooks=None, **kwargs): self.eval() - tokens, _ = self( - signal[:, None], n_quantizers=kwargs["num_codebooks"] - ) # [B, N_Q, T] - return tokens.movedim(-1, -2) # [B, T, N_Q] + tokens, _ = self(signal[:, None], n_quantizers=num_codebooks) + return tokens.movedim(-1, -2) @torch.no_grad() def tokens_to_sig(self, tokens, **kwargs): - # tokens: [B, T, N_Q] self.eval() quantized_feats, _, _ = self.quantizer.from_codes( - tokens.movedim(-1, -2) # [B, N_Q, T] + tokens.movedim(-1, -2) ) - signal = self.decode(quantized_feats)[:, 0] # [B, T] - return signal + return self.decode(quantized_feats)[:, 0] @torch.no_grad() - def get_pretrained_embeddings(self, **kwargs): - """Return pretrained codebook embedding.""" - # See https://github.com/descriptinc/descript-audio-codec/blob/c7cfc5d2647e26471dc394f95846a0830e7bec34/dac/nn/quantize.py#L200 - toks = torch.arange(kwargs["vocab_size"], device=kwargs["device"]) - toks = ( - toks[:, None, None].expand(-1, kwargs["num_codebooks"], -1).clone() - ) # [C, K, 1] - self.to(kwargs["device"]).eval() - with torch.no_grad(): - z_q, z_p, _ = self.quantizer.from_codes(toks) + def get_pretrained_embeddings( + self, vocab_size, num_codebooks, device="cpu", **kwargs + ): + toks = torch.arange(vocab_size, device=device) + toks = toks[:, None, None].expand(-1, num_codebooks, -1).clone() + self.to(device).eval() + z_q, z_p, _ = self.quantizer.from_codes(toks) z_ps = z_p.split(z_p.shape[1] // toks.shape[1], dim=1) - z_qs = [] - for i, z_p_i in enumerate(z_ps): - with torch.no_grad(): - z_q_i = self.quantizer.quantizers[i].out_proj( - z_p_i - ) # [C, H, 1] - z_qs.append(z_q_i) - assert (z_q == sum(z_qs)).all() - embeddings = torch.cat(z_qs)[:, :, 0] - return embeddings + z_qs = [ + self.quantizer.quantizers[i].out_proj(z_p_i) + for i, z_p_i in enumerate(z_ps) + ] + return torch.cat(z_qs)[:, :, 0] class SpeechTokenizer(SpeechTokenizer_interface, BaseTokenizer): + def __init__(self, *args, **kwargs): + SpeechTokenizer_interface.__init__(self, *args, **kwargs) + BaseTokenizer.__init__(self) + @torch.no_grad() - def sig_to_tokens(self, signal, lengths, **kwargs): - # signal: [B, T] + def sig_to_tokens(self, signal, lengths, num_codebooks=None, **kwargs): self.eval() - tokens = self(signal)[: kwargs["num_codebooks"]] # [N_Q, B, T] - return tokens.movedim(-3, -1) # [B, T, N_Q] + tokens = self(signal) + if num_codebooks: + if len(tokens) < num_codebooks: + raise ValueError( + f"Model only outputs {len(tokens)} codebooks, but {num_codebooks} requested" + ) + tokens = tokens[:num_codebooks] + return tokens.movedim(-3, -1) @torch.no_grad() def tokens_to_sig(self, tokens, **kwargs): - # tokens: [B, T, N_Q] self.eval() - tokens = tokens.movedim(-1, -3) # [N_Q, B, T] - return self.decode(tokens) # [B, T] + return self.decode(tokens.movedim(-1, -3)) @torch.no_grad() - def get_pretrained_embeddings(self, **kwargs): - """Return pretrained codebook embedding.""" - # See https://github.com/ZhangXInFD/SpeechTokenizer/blob/a9f88dc72642b600654a62861e34342babae6c71/speechtokenizer/quantization/core_vq.py#L360 - toks = torch.arange(kwargs["vocab_size"], device=kwargs["device"]) - toks = ( - toks[None, :, None].expand(kwargs["num_codebooks"], -1, -1).clone() - ) # [K, C, 1] - self.to(kwargs["device"]).eval() - embs = [] - for i, indices in enumerate(toks): - layer = self.model.quantizer.vq.layers[i] - with torch.no_grad(): - quantized = layer.decode(indices) - embs.append(quantized) - assert (self.model.quantizer.decode(toks) == sum(embs)).all() - embeddings = torch.cat(embs)[:, :, 0] - return embeddings + def get_pretrained_embeddings( + self, vocab_size, num_codebooks, device="cpu", **kwargs + ): + toks = torch.arange(vocab_size, device=device) + toks = toks[None, :, None].expand(num_codebooks, -1, -1).clone() + self.to(device).eval() + embs = [ + self.model.quantizer.vq.layers[i].decode(indices) + for i, indices in enumerate(toks) + ] + return torch.cat(embs)[:, :, 0] class DiscreteSSLTokenizer(DiscreteSSL, BaseTokenizer): + def __init__(self, *args, **kwargs): + DiscreteSSL.__init__(self, *args, **kwargs) + BaseTokenizer.__init__(self) + @torch.no_grad() - def sig_to_tokens(self, signal, lengths): - pass + def sig_to_tokens(self, signal, lengths, num_codebooks=None, **kwargs): + self.eval() + tokens, _, _ = self.encode(signal, lengths) + if num_codebooks: + if tokens.shape[-1] < num_codebooks: + raise ValueError( + f"Model only outputs {tokens.shape[-1]} codebooks, but {num_codebooks} requested" + ) + tokens = tokens[..., :num_codebooks] + return tokens @torch.no_grad() - def tokens_to_sig(self, tokens): - pass + def tokens_to_sig(self, tokens, **kwargs): + self.eval() + return self.decode(tokens) @torch.no_grad() - def get_pretrained_embeddings(self, **kwargs): - pass + def get_pretrained_embeddings( + self, vocab_size, num_codebooks, device="cpu", **kwargs + ): + toks = torch.arange(vocab_size, device=device) + toks = toks[None, :, None].expand(num_codebooks, -1, -1).clone() + self.to(device).eval() + return torch.cat( + [self.quantizer.codebooks[i] for i in range(num_codebooks)] + ) diff --git a/benchmarks/DASB/utils/tokens.py b/benchmarks/DASB/utils/tokens.py index 272e01ebe..705184d80 100644 --- a/benchmarks/DASB/utils/tokens.py +++ b/benchmarks/DASB/utils/tokens.py @@ -93,7 +93,9 @@ def __init__( self.dataloader_opts = dataloader_opts self.pipelines = self._make_pipelines() - def extract_tokens(self, dataset, save_path, save_name="tokens"): + def extract_tokens( + self, dataset, num_codebooks, save_path, save_name="tokens" + ): """ Extracts tokens from the dataset and saves them to the specified format. @@ -101,6 +103,12 @@ def extract_tokens(self, dataset, save_path, save_name="tokens"): --------- dataset : speechbrain.dataio.dataset.DynamicItemDataset or dict The dataset from which to extract tokens. Can be a DynamicItemDataset or a dictionary. + num_codebooks: int + The number of codebooks to retrieve from the tokens. + save_path: str + The path where tokens will be saved. + save_name: str + The name of the .scp and .ark files. """ conf = { "sample_rate": self.sample_rate, @@ -136,7 +144,9 @@ def extract_tokens(self, dataset, save_path, save_name="tokens"): batch = batch.to(self.device) x, x_lengths = batch["sig"] ids = batch[self.id_key] - batch_tokens = self.tokenizer.sig_to_tokens(x, x_lengths) + batch_tokens = self.tokenizer.sig_to_tokens( + x, x_lengths, num_codebooks=num_codebooks + ) batch_tokens = sb.utils.data_utils.undo_padding( batch_tokens, x_lengths ) From 973e12b97a502af4dd04c8f2738c82d1462d6939 Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Fri, 20 Dec 2024 13:34:46 -0500 Subject: [PATCH 11/61] change name --- .../{ASR-refactor => ASR-on-the-fly}/hparams/LSTM/dac.yaml | 0 .../{ASR-refactor => ASR-on-the-fly}/hparams/LSTM/encodec.yaml | 0 .../hparams/LSTM/speech_tokenizer.yaml | 0 .../{ASR-refactor => ASR-on-the-fly}/hparams/contextnet/dac.yaml | 0 .../hparams/contextnet/encodec.yaml | 0 .../hparams/contextnet/speech_tokenizer.yaml | 0 .../{ASR-refactor => ASR-on-the-fly}/librispeech_prepare.py | 0 .../DASB/LibriSpeech/{ASR-refactor => ASR-on-the-fly}/train.py | 0 8 files changed, 0 insertions(+), 0 deletions(-) rename benchmarks/DASB/LibriSpeech/{ASR-refactor => ASR-on-the-fly}/hparams/LSTM/dac.yaml (100%) rename benchmarks/DASB/LibriSpeech/{ASR-refactor => ASR-on-the-fly}/hparams/LSTM/encodec.yaml (100%) rename benchmarks/DASB/LibriSpeech/{ASR-refactor => ASR-on-the-fly}/hparams/LSTM/speech_tokenizer.yaml (100%) rename benchmarks/DASB/LibriSpeech/{ASR-refactor => ASR-on-the-fly}/hparams/contextnet/dac.yaml (100%) rename benchmarks/DASB/LibriSpeech/{ASR-refactor => ASR-on-the-fly}/hparams/contextnet/encodec.yaml (100%) rename benchmarks/DASB/LibriSpeech/{ASR-refactor => ASR-on-the-fly}/hparams/contextnet/speech_tokenizer.yaml (100%) rename benchmarks/DASB/LibriSpeech/{ASR-refactor => ASR-on-the-fly}/librispeech_prepare.py (100%) rename benchmarks/DASB/LibriSpeech/{ASR-refactor => ASR-on-the-fly}/train.py (100%) diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/dac.yaml b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/LSTM/dac.yaml similarity index 100% rename from benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/dac.yaml rename to benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/LSTM/dac.yaml diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/encodec.yaml b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/LSTM/encodec.yaml similarity index 100% rename from benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/encodec.yaml rename to benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/LSTM/encodec.yaml diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/speech_tokenizer.yaml b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/LSTM/speech_tokenizer.yaml similarity index 100% rename from benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/LSTM/speech_tokenizer.yaml rename to benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/LSTM/speech_tokenizer.yaml diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/contextnet/dac.yaml b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/contextnet/dac.yaml similarity index 100% rename from benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/contextnet/dac.yaml rename to benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/contextnet/dac.yaml diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/contextnet/encodec.yaml b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/contextnet/encodec.yaml similarity index 100% rename from benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/contextnet/encodec.yaml rename to benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/contextnet/encodec.yaml diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/contextnet/speech_tokenizer.yaml b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/contextnet/speech_tokenizer.yaml similarity index 100% rename from benchmarks/DASB/LibriSpeech/ASR-refactor/hparams/contextnet/speech_tokenizer.yaml rename to benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/contextnet/speech_tokenizer.yaml diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor/librispeech_prepare.py b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/librispeech_prepare.py similarity index 100% rename from benchmarks/DASB/LibriSpeech/ASR-refactor/librispeech_prepare.py rename to benchmarks/DASB/LibriSpeech/ASR-on-the-fly/librispeech_prepare.py diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor/train.py b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/train.py similarity index 100% rename from benchmarks/DASB/LibriSpeech/ASR-refactor/train.py rename to benchmarks/DASB/LibriSpeech/ASR-on-the-fly/train.py From 8dca49daf10eb89a86922287e6d8a016f15cb249 Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Mon, 23 Dec 2024 12:09:28 -0500 Subject: [PATCH 12/61] add discrete_ssl, reorgnaize folder --- .../DASB/LibriSpeech/ASR/LSTM/custom_model.py | 1 - .../ASR/LSTM/hparams/train_dac.yaml | 178 --------- .../ASR/LSTM/hparams/train_discrete_ssl.yaml | 216 ----------- .../ASR/LSTM/hparams/train_encodec.yaml | 183 ---------- .../LSTM/hparams/train_speech_tokenizer.yaml | 169 --------- .../ASR/LSTM/hparams/train_weighted_ssl.yaml | 162 --------- .../ASR/LSTM/librispeech_prepare.py | 1 - .../DASB/LibriSpeech/ASR/LSTM/train_dac.py | 335 ----------------- .../ASR/LSTM/train_discrete_ssl.py | 333 ----------------- .../LibriSpeech/ASR/LSTM/train_encodec.py | 340 ------------------ .../ASR/LSTM/train_speech_tokenizer.py | 335 ----------------- .../ASR/LSTM/train_weighted_ssl.py | 322 ----------------- .../ASR/contextnet/custom_model.py | 1 - .../ASR/contextnet/hparams/train_dac.yaml | 172 --------- .../hparams/train_discrete_ssl.yaml | 214 ----------- .../ASR/contextnet/hparams/train_encodec.yaml | 178 --------- .../hparams/train_speech_tokenizer.yaml | 160 --------- .../hparams/train_weighted_ssl.yaml | 157 -------- .../ASR/contextnet/librispeech_prepare.py | 1 - .../LibriSpeech/ASR/contextnet/train_dac.py | 321 ----------------- .../ASR/contextnet/train_discrete_ssl.py | 319 ---------------- .../ASR/contextnet/train_encodec.py | 316 ---------------- .../ASR/contextnet/train_speech_tokenizer.py | 319 ---------------- .../ASR/contextnet/train_weighted_ssl.py | 318 ---------------- .../hparams/LSTM/train.yaml | 0 .../hparams/contextnet/train.yaml | 0 .../librispeech_prepare.py | 0 .../{ASR-refactor-tokens => ASR}/train.py | 0 .../DASB/LibriSpeech/extraction/extract.py | 6 +- benchmarks/DASB/model/tokenizer_interface.py | 50 +-- benchmarks/DASB/utils/tokens.py | 7 +- 31 files changed, 30 insertions(+), 5084 deletions(-) delete mode 120000 benchmarks/DASB/LibriSpeech/ASR/LSTM/custom_model.py delete mode 100644 benchmarks/DASB/LibriSpeech/ASR/LSTM/hparams/train_dac.yaml delete mode 100644 benchmarks/DASB/LibriSpeech/ASR/LSTM/hparams/train_discrete_ssl.yaml delete mode 100644 benchmarks/DASB/LibriSpeech/ASR/LSTM/hparams/train_encodec.yaml delete mode 100644 benchmarks/DASB/LibriSpeech/ASR/LSTM/hparams/train_speech_tokenizer.yaml delete mode 100644 benchmarks/DASB/LibriSpeech/ASR/LSTM/hparams/train_weighted_ssl.yaml delete mode 120000 benchmarks/DASB/LibriSpeech/ASR/LSTM/librispeech_prepare.py delete mode 100644 benchmarks/DASB/LibriSpeech/ASR/LSTM/train_dac.py delete mode 100644 benchmarks/DASB/LibriSpeech/ASR/LSTM/train_discrete_ssl.py delete mode 100644 benchmarks/DASB/LibriSpeech/ASR/LSTM/train_encodec.py delete mode 100644 benchmarks/DASB/LibriSpeech/ASR/LSTM/train_speech_tokenizer.py delete mode 100644 benchmarks/DASB/LibriSpeech/ASR/LSTM/train_weighted_ssl.py delete mode 120000 benchmarks/DASB/LibriSpeech/ASR/contextnet/custom_model.py delete mode 100644 benchmarks/DASB/LibriSpeech/ASR/contextnet/hparams/train_dac.yaml delete mode 100644 benchmarks/DASB/LibriSpeech/ASR/contextnet/hparams/train_discrete_ssl.yaml delete mode 100644 benchmarks/DASB/LibriSpeech/ASR/contextnet/hparams/train_encodec.yaml delete mode 100644 benchmarks/DASB/LibriSpeech/ASR/contextnet/hparams/train_speech_tokenizer.yaml delete mode 100644 benchmarks/DASB/LibriSpeech/ASR/contextnet/hparams/train_weighted_ssl.yaml delete mode 120000 benchmarks/DASB/LibriSpeech/ASR/contextnet/librispeech_prepare.py delete mode 100644 benchmarks/DASB/LibriSpeech/ASR/contextnet/train_dac.py delete mode 100644 benchmarks/DASB/LibriSpeech/ASR/contextnet/train_discrete_ssl.py delete mode 100644 benchmarks/DASB/LibriSpeech/ASR/contextnet/train_encodec.py delete mode 100644 benchmarks/DASB/LibriSpeech/ASR/contextnet/train_speech_tokenizer.py delete mode 100644 benchmarks/DASB/LibriSpeech/ASR/contextnet/train_weighted_ssl.py rename benchmarks/DASB/LibriSpeech/{ASR-refactor-tokens => ASR}/hparams/LSTM/train.yaml (100%) rename benchmarks/DASB/LibriSpeech/{ASR-refactor-tokens => ASR}/hparams/contextnet/train.yaml (100%) rename benchmarks/DASB/LibriSpeech/{ASR-refactor-tokens => ASR}/librispeech_prepare.py (100%) rename benchmarks/DASB/LibriSpeech/{ASR-refactor-tokens => ASR}/train.py (100%) diff --git a/benchmarks/DASB/LibriSpeech/ASR/LSTM/custom_model.py b/benchmarks/DASB/LibriSpeech/ASR/LSTM/custom_model.py deleted file mode 120000 index 4b3f08ebb..000000000 --- a/benchmarks/DASB/LibriSpeech/ASR/LSTM/custom_model.py +++ /dev/null @@ -1 +0,0 @@ -../../../model/custom_model.py \ No newline at end of file diff --git a/benchmarks/DASB/LibriSpeech/ASR/LSTM/hparams/train_dac.yaml b/benchmarks/DASB/LibriSpeech/ASR/LSTM/hparams/train_dac.yaml deleted file mode 100644 index 0b00db1f7..000000000 --- a/benchmarks/DASB/LibriSpeech/ASR/LSTM/hparams/train_dac.yaml +++ /dev/null @@ -1,178 +0,0 @@ -# ################################ -# Recipe for training an discrete-input ctc ASR system with librispeech. -# Decoding is performed with ctc greedy or LM-rescored decoder. -# -# Authors -# * Pooneh Mousavi 2024 -# ################################ - -# Seed needs to be set at top of yaml, before objects with parameters are made -seed: 1986 -__set_seed: !apply:torch.manual_seed [!ref ] -output_folder: !ref results/MP3S-LSTM/dac/ -output_wer_folder: !ref / -save_folder: !ref /save -train_log: !ref /train_log.txt - - -# Data files -data_folder: !PLACEHOLDER # e,g./path/to/LibriSpeech -# noise/ris dataset will automatically be downloaded -# data_folder_rirs: !ref -train_splits: ["train-clean-100"] -dev_splits: ["dev-clean"] -test_splits: ["test-clean", "test-other"] - -skip_prep: False -ckpt_interval_minutes: 25 # save checkpoint every N min -train_csv: !ref /train-clean-100.csv -valid_csv: !ref /dev-clean.csv -test_csv: - - !ref /test-clean.csv - - !ref /test-other.csv - - -# Training parameters -number_of_epochs: 20 -lr: 0.0002 -sorting: ascending -precision: fp32 - -# With data_parallel batch_size is split into N jobs -# With DDP batch_size is multiplied by N jobs -# Must be 3 per GPU to fit 32GB of VRAM -batch_size: 4 -test_batch_size: 1 - - -### Config for Tokenizer -# DAC parameters -# model_type: [16khz, 24khz, 44khz, 44khz] -# vocab_size: [1024, 1024, 1024, 1024] -# model_bitrate: [8kbps, 8kbps, 8kbps, 16kbps] -# max_num_codebooks: [12, 32, 9, 18] -# embedding_dim: [1024, 1024, 1024, 128] -model_type: 24khz -vocab_size: 1024 -model_bitrate: 8kbps -num_codebooks: 2 # NOTE: must be smaller or equal to the maximum number of codebooks for the given model type -sample_rate: 24000 -encoder_dim: 1024 - - -# Dataloader options -train_dataloader_opts: - batch_size: !ref - -valid_dataloader_opts: - batch_size: !ref - -test_dataloader_opts: - batch_size: !ref - -# Model parameters -activation: !name:torch.nn.Sigmoid -dnn_layers: 1 -dnn_neurons: 768 -freeze_encoder: True - -# Outputs -output_neurons: 30 # BPE size, index(blank/eos/bos) = 0 - -# Decoding parameters -blank_index: 0 -unk_index: 1 - -test_beam_search: - beam_size: 143 - topk: 1 - blank_index: !ref - space_token: ' ' # make sure this is the same as the one used in the tokenizer - beam_prune_logp: -12.0 - token_prune_min_logp: -1.2 - prune_history: True - alpha: 0.8 - beta: 1.2 - # can be downloaded from here https://www.openslr.org/11/ or trained with kenLM - # It can either be a .bin or .arpa ; note: .arpa is much slower at loading - # If you don't want to use an LM, comment it out or set it to null - kenlm_model_path: null - -# Functions and classes -# -epoch_counter: !new:speechbrain.utils.epoch_loop.EpochCounter - limit: !ref - -# Modules -# DAC model (see https://github.com/descriptinc/descript-audio-codec) -codec: !new:speechbrain.lobes.models.discrete.dac.DAC - model_type: !ref - model_bitrate: !ref - load_pretrained: True - tag: latest - -discrete_embedding_layer: !new:custom_model.Discrete_EmbeddingLayer - num_codebooks: !ref - vocab_size: !ref - emb_dim: !ref - -attention_mlp: !new:custom_model.AttentionMLP - input_dim: !ref - hidden_dim: !ref - -enc: !new:speechbrain.nnet.RNN.LSTM - input_shape: [Null, Null, !ref ] - num_layers: 2 - bidirectional: True - dropout: 0.2 - hidden_size: 1024 - -ctc_lin: !new:speechbrain.nnet.linear.Linear - input_size: 2048 - n_neurons: !ref - -log_softmax: !new:speechbrain.nnet.activations.Softmax - apply_log: True - -ctc_cost: !name:speechbrain.nnet.losses.ctc_loss - blank_index: !ref - -modules: - enc: !ref - ctc_lin: !ref - attention_mlp: !ref - codec: !ref - discrete_embedding_layer: !ref - -model: !new:torch.nn.ModuleList - - [!ref , !ref , !ref , !ref ] - -model_opt_class: !name:torch.optim.Adam - lr: !ref - -lr_annealing_model: !new:speechbrain.nnet.schedulers.NewBobScheduler - initial_value: !ref - improvement_threshold: 0.0025 - annealing_factor: 0.8 - patient: 0 - -label_encoder: !new:speechbrain.dataio.encoder.CTCTextEncoder - -checkpointer: !new:speechbrain.utils.checkpoints.Checkpointer - checkpoints_dir: !ref - recoverables: - model: !ref - scheduler_model: !ref - attention_mlp: !ref - codec: !ref - discrete_embedding_layer: !ref - counter: !ref - tokenizer: !ref - -train_logger: !new:speechbrain.utils.train_logger.FileTrainLogger - save_file: !ref - -error_rate_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats - -cer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats - split_tokens: True diff --git a/benchmarks/DASB/LibriSpeech/ASR/LSTM/hparams/train_discrete_ssl.yaml b/benchmarks/DASB/LibriSpeech/ASR/LSTM/hparams/train_discrete_ssl.yaml deleted file mode 100644 index c5a920693..000000000 --- a/benchmarks/DASB/LibriSpeech/ASR/LSTM/hparams/train_discrete_ssl.yaml +++ /dev/null @@ -1,216 +0,0 @@ -# ################################ -# Recipe for training an discrete-input ctc ASR system with librispeech. -# Decoding is performed with ctc greedy or LM-rescored decoder. -# -# Authors -# * Pooneh Mousavi 2024 -# ################################ - -# Seed needs to be set at top of yaml, before objects with parameters are made -seed: 1986 -__set_seed: !apply:torch.manual_seed [!ref ] -output_folder: !ref results/MP3S-LSTM/discrete_ssl/ -output_wer_folder: !ref / -save_folder: !ref /save -train_log: !ref /train_log.txt - - -# Data files -data_folder: !PLACEHOLDER # e,g./path/to/LibriSpeech -# noise/ris dataset will automatically be downloaded -# data_folder_rirs: !ref -train_splits: ["train-clean-100"] -dev_splits: ["dev-clean"] -test_splits: ["test-clean", "test-other"] - -skip_prep: False -ckpt_interval_minutes: 25 # save checkpoint every N min -train_csv: !ref /train-clean-100.csv -valid_csv: !ref /dev-clean.csv -test_csv: - - !ref /test-clean.csv - - !ref /test-other.csv - -# Training parameters -number_of_epochs: 20 -lr: 0.0002 -sorting: ascending -precision: fp32 - -# With data_parallel batch_size is split into N jobs -# With DDP batch_size is multiplied by N jobs -# Must be 3 per GPU to fit 32GB of VRAM -batch_size: 4 -test_batch_size: 1 - -### Configuration for discrete SSL model -# ssl_model_type: hubert, wavlm, wav2vec2 -# ssl_hub: facebook/hubert-large-ll60k, microsoft/wavlm-large, facebook/wav2vec2-large -ssl_model_type: hubert # hubert, wavml or wav2vec2 -ssl_hub: facebook/hubert-large-ll60k -ssl_folder: !ref /ssl_checkpoint -kmeans_repo_id: speechbrain/SSL_Quantization -kmeans_cache_dir: !ref /kmeans_checkpoint -kmeans_dataset: LibriSpeech-100-360-500 -freeze_ssl: True -freeze_feature_extractor: True -num_clusters: 1000 - -### Config for Tokenizer -# Layer number should be among the supported layers for discrete SSL models(kmenas model should be available for that layer) -# ssl_layer_num: [3, 7, 12, 23] -# deduplicate: [False, False, False, False] -# bpe_tokenizer_path: [null , null, null, null] -ssl_layer_num: [1, 3, 7, 12, 18, 23] -num_codebooks: 6 -deduplicate: [False, False, False, False, False, False] -bpe_tokenizer_path: [null, null, null, null, null, null] -sample_rate: 16000 -encoder_dim: 1024 - -# Dataloader options -train_dataloader_opts: - batch_size: !ref - -valid_dataloader_opts: - batch_size: !ref - -test_dataloader_opts: - batch_size: !ref - -# Model parameters -activation: !name:torch.nn.Sigmoid -dnn_layers: 1 -dnn_neurons: 1024 -freeze_encoder: True - -# Outputs -output_neurons: 30 # BPE size, index(blank/eos/bos) = 0 - -# Decoding parameters -blank_index: 0 -unk_index: 1 - -test_beam_search: - beam_size: 143 - topk: 1 - blank_index: !ref - space_token: ' ' # make sure this is the same as the one used in the tokenizer - beam_prune_logp: -12.0 - token_prune_min_logp: -1.2 - prune_history: True - alpha: 0.8 - beta: 1.2 - # can be downloaded from here https://www.openslr.org/11/ or trained with kenLM - # It can either be a .bin or .arpa ; note: .arpa is much slower at loading - # If you don't want to use an LM, comment it out or set it to null - kenlm_model_path: null - -# Functions and classes -# -epoch_counter: !new:speechbrain.utils.epoch_loop.EpochCounter - limit: !ref - -# EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) -tokenizer_config: - SSL_layers: !ref - deduplicates: !ref - bpe_tokenizers: !ref - -ssl_model: !apply:speechbrain.utils.hparams.choice - value: !ref - choices: - wavlm: !new:speechbrain.lobes.models.huggingface_transformers.wavlm.WavLM - source: !ref - output_norm: False - freeze: !ref - freeze_feature_extractor: !ref - output_all_hiddens: True - save_path: !ref - hubert: !new:speechbrain.lobes.models.huggingface_transformers.hubert.HuBERT - source: !ref - output_norm: False - freeze: !ref - freeze_feature_extractor: !ref - output_all_hiddens: True - save_path: !ref - wav2vec2: !new:speechbrain.lobes.models.huggingface_transformers.wav2vec2.Wav2Vec2 - source: !ref - output_norm: False - freeze: !ref - freeze_feature_extractor: !ref - output_all_hiddens: True - save_path: !ref - -codec: !new:speechbrain.lobes.models.huggingface_transformers.discrete_ssl.DiscreteSSL - save_path: !ref - ssl_model: !ref - kmeans_dataset: !ref - kmeans_repo_id: !ref - num_clusters: !ref - -discrete_embedding_layer: !new:custom_model.Discrete_EmbeddingLayer - num_codebooks: !ref - vocab_size: !ref - emb_dim: !ref - -attention_mlp: !new:custom_model.AttentionMLP - input_dim: !ref - hidden_dim: !ref - -enc: !new:speechbrain.nnet.RNN.LSTM - input_shape: [Null, Null, !ref ] - num_layers: 2 - bidirectional: True - dropout: 0.2 - hidden_size: 1024 - -ctc_lin: !new:speechbrain.nnet.linear.Linear - input_size: 2048 - n_neurons: !ref - -log_softmax: !new:speechbrain.nnet.activations.Softmax - apply_log: True - -ctc_cost: !name:speechbrain.nnet.losses.ctc_loss - blank_index: !ref - -modules: - enc: !ref - ctc_lin: !ref - attention_mlp: !ref - codec: !ref - discrete_embedding_layer: !ref - -model: !new:torch.nn.ModuleList - - [!ref , !ref , !ref , !ref ] - -model_opt_class: !name:torch.optim.Adam - lr: !ref - -lr_annealing_model: !new:speechbrain.nnet.schedulers.NewBobScheduler - initial_value: !ref - improvement_threshold: 0.0025 - annealing_factor: 0.8 - patient: 0 - -label_encoder: !new:speechbrain.dataio.encoder.CTCTextEncoder - -checkpointer: !new:speechbrain.utils.checkpoints.Checkpointer - checkpoints_dir: !ref - recoverables: - model: !ref - scheduler_model: !ref - attention_mlp: !ref - codec: !ref - discrete_embedding_layer: !ref - counter: !ref - tokenizer: !ref - -train_logger: !new:speechbrain.utils.train_logger.FileTrainLogger - save_file: !ref - -error_rate_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats - -cer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats - split_tokens: True diff --git a/benchmarks/DASB/LibriSpeech/ASR/LSTM/hparams/train_encodec.yaml b/benchmarks/DASB/LibriSpeech/ASR/LSTM/hparams/train_encodec.yaml deleted file mode 100644 index e2477819a..000000000 --- a/benchmarks/DASB/LibriSpeech/ASR/LSTM/hparams/train_encodec.yaml +++ /dev/null @@ -1,183 +0,0 @@ -# ################################ -# Recipe for training an discrete-input ctc ASR system with librispeech. -# Decoding is performed with ctc greedy or LM-rescored decoder. -# -# Authors -# * Pooneh Mousavi 2024 -# ################################ - -# Seed needs to be set at top of yaml, before objects with parameters are made -seed: 1986 -__set_seed: !apply:torch.manual_seed [!ref ] -output_folder: !ref results/MP3S-LSTM/encodec/ -output_wer_folder: !ref / -save_folder: !ref /save -train_log: !ref /train_log.txt - - -# Data files -data_folder: data # e,g./path/to/LibriSpeech -# noise/ris dataset will automatically be downloaded -# data_folder_rirs: !ref -train_splits: ["train-clean-100"] -dev_splits: ["dev-clean"] -test_splits: ["test-clean", "test-other"] - -skip_prep: False -ckpt_interval_minutes: 25 # save checkpoint every N min -train_csv: !ref /train-clean-100.csv -valid_csv: !ref /dev-clean.csv -test_csv: - - !ref /test-clean.csv - - !ref /test-other.csv - - -# Training parameters -number_of_epochs: 20 -lr: 0.0002 -sorting: ascending -precision: fp32 - -# With data_parallel batch_size is split into N jobs -# With DDP batch_size is multiplied by N jobs -# Must be 3 per GPU to fit 32GB of VRAM -batch_size: 4 -test_batch_size: 1 - - -### Config for Tokenizer -# EnCodec parameters -# sample_rate: [24000, 24000, 24000, 24000] -# vocab_size: [1024, 1024, 1024, 1024] -# bandwidth: [1.5, 3.0, 6.0, 12.0, 24.0] -# num_codebooks: [2, 4, 8, 16, 32] -vocab_size: 1024 -bandwidth: 1.5 -num_codebooks: 2 -sample_rate: 24000 -# Feature parameters -encoder_dim: 1024 -# If set to True, the encoder_dim should be set to the dim of the tokenizer. For encodec it is 128. -init_embedding: False -freeze_embedding: False - -# Dataloader options -train_dataloader_opts: - batch_size: !ref - -valid_dataloader_opts: - batch_size: !ref - -test_dataloader_opts: - batch_size: !ref - -# Model parameters -activation: !name:torch.nn.Sigmoid -dnn_layers: 1 -dnn_neurons: 1024 -freeze_encoder: True - -# Outputs -output_neurons: 30 # BPE size, index(blank/eos/bos) = 0 - -# Decoding parameters -blank_index: 0 -unk_index: 1 - -test_beam_search: - beam_size: 143 - topk: 1 - blank_index: !ref - space_token: ' ' # make sure this is the same as the one used in the tokenizer - beam_prune_logp: -12.0 - token_prune_min_logp: -1.2 - prune_history: True - alpha: 0.8 - beta: 1.2 - # can be downloaded from here https://www.openslr.org/11/ or trained with kenLM - # It can either be a .bin or .arpa ; note: .arpa is much slower at loading - # If you don't want to use an LM, comment it out or set it to null - kenlm_model_path: null - -# Functions and classes -# -epoch_counter: !new:speechbrain.utils.epoch_loop.EpochCounter - limit: !ref - -# EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) -codec: !new:speechbrain.lobes.models.huggingface_transformers.encodec.Encodec - source: facebook/encodec_24khz # Only the 24kHz version supports mono audio - save_path: !ref - sample_rate: !ref - bandwidth: !ref - flat_embeddings: False - freeze: True - renorm_embeddings: False - -discrete_embedding_layer: !new:custom_model.Discrete_EmbeddingLayer - num_codebooks: !ref - vocab_size: !ref - emb_dim: !ref - freeze: !ref - init: !ref - -attention_mlp: !new:custom_model.AttentionMLP - input_dim: !ref - hidden_dim: !ref - -enc: !new:speechbrain.nnet.RNN.LSTM - input_shape: [Null, Null, !ref ] - num_layers: 2 - bidirectional: True - dropout: 0.2 - hidden_size: 1024 - -ctc_lin: !new:speechbrain.nnet.linear.Linear - input_size: 2048 - n_neurons: !ref - -log_softmax: !new:speechbrain.nnet.activations.Softmax - apply_log: True - -ctc_cost: !name:speechbrain.nnet.losses.ctc_loss - blank_index: !ref - -modules: - enc: !ref - ctc_lin: !ref - attention_mlp: !ref - codec: !ref - discrete_embedding_layer: !ref - -model: !new:torch.nn.ModuleList - - [!ref , !ref , !ref , !ref ] - -model_opt_class: !name:torch.optim.Adam - lr: !ref - -lr_annealing_model: !new:speechbrain.nnet.schedulers.NewBobScheduler - initial_value: !ref - improvement_threshold: 0.0025 - annealing_factor: 0.8 - patient: 0 - -label_encoder: !new:speechbrain.dataio.encoder.CTCTextEncoder - -checkpointer: !new:speechbrain.utils.checkpoints.Checkpointer - checkpoints_dir: !ref - recoverables: - model: !ref - scheduler_model: !ref - attention_mlp: !ref - codec: !ref - discrete_embedding_layer: !ref - counter: !ref - tokenizer: !ref - -train_logger: !new:speechbrain.utils.train_logger.FileTrainLogger - save_file: !ref - -error_rate_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats - -cer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats - split_tokens: True diff --git a/benchmarks/DASB/LibriSpeech/ASR/LSTM/hparams/train_speech_tokenizer.yaml b/benchmarks/DASB/LibriSpeech/ASR/LSTM/hparams/train_speech_tokenizer.yaml deleted file mode 100644 index eda9a2bad..000000000 --- a/benchmarks/DASB/LibriSpeech/ASR/LSTM/hparams/train_speech_tokenizer.yaml +++ /dev/null @@ -1,169 +0,0 @@ -# ################################ -# Recipe for training an discrete-input ctc ASR system with librispeech. -# Decoding is performed with ctc greedy or LM-rescored decoder. -# -# Authors -# * Pooneh Mousavi 2024 -# ################################ - -# Seed needs to be set at top of yaml, before objects with parameters are made -seed: 1986 -__set_seed: !apply:torch.manual_seed [!ref ] -output_folder: !ref results/MP3S-LSTM/speech_tokenizer/ -output_wer_folder: !ref / -save_folder: !ref /save -train_log: !ref /train_log.txt - - -# Data files -data_folder: !PLACEHOLDER # e,g./path/to/LibriSpeech -# noise/ris dataset will automatically be downloaded -# data_folder_rirs: !ref -train_splits: ["train-clean-100"] -dev_splits: ["dev-clean"] -test_splits: ["test-clean", "test-other"] - -skip_prep: False -ckpt_interval_minutes: 25 # save checkpoint every N min -train_csv: !ref /train-clean-100.csv -valid_csv: !ref /dev-clean.csv -test_csv: - - !ref /test-clean.csv - - !ref /test-other.csv - - -# Training parameters -number_of_epochs: 20 -lr: 0.0002 -sorting: ascending -precision: fp32 - -# With data_parallel batch_size is split into N jobs -# With DDP batch_size is multiplied by N jobs -# Must be 3 per GPU to fit 32GB of VRAM -batch_size: 4 -test_batch_size: 1 - - -### Config for Tokenizer -vocab_size: 1024 -num_codebooks: 2 -sample_rate: 16000 - -# Feature parameters - -encoder_dim: 1024 - -# Dataloader options -train_dataloader_opts: - batch_size: !ref - -valid_dataloader_opts: - batch_size: !ref - -test_dataloader_opts: - batch_size: !ref - -# Model parameters -activation: !name:torch.nn.Sigmoid -dnn_layers: 1 -dnn_neurons: 1024 -freeze_encoder: True - -# Outputs -output_neurons: 30 # BPE size, index(blank/eos/bos) = 0 - -# Decoding parameters -blank_index: 0 -unk_index: 1 - -test_beam_search: - beam_size: 143 - topk: 1 - blank_index: !ref - space_token: ' ' # make sure this is the same as the one used in the tokenizer - beam_prune_logp: -12.0 - token_prune_min_logp: -1.2 - prune_history: True - alpha: 0.8 - beta: 1.2 - # can be downloaded from here https://www.openslr.org/11/ or trained with kenLM - # It can either be a .bin or .arpa ; note: .arpa is much slower at loading - # If you don't want to use an LM, comment it out or set it to null - kenlm_model_path: null - -# Functions and classes -# -epoch_counter: !new:speechbrain.utils.epoch_loop.EpochCounter - limit: !ref - -# EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) -# EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) -codec: !new:speechbrain.lobes.models.discrete.speechtokenizer_interface.SpeechTokenizer_interface - source: fnlp/SpeechTokenizer # Only the 24kHz version supports mono audio - save_path: !ref -discrete_embedding_layer: !new:custom_model.Discrete_EmbeddingLayer - num_codebooks: !ref - vocab_size: !ref - emb_dim: !ref - -attention_mlp: !new:custom_model.AttentionMLP - input_dim: !ref - hidden_dim: !ref - -enc: !new:speechbrain.nnet.RNN.LSTM - input_shape: [Null, Null, !ref ] - num_layers: 2 - bidirectional: True - dropout: 0.2 - hidden_size: 1024 - -ctc_lin: !new:speechbrain.nnet.linear.Linear - input_size: 2048 - n_neurons: !ref - -log_softmax: !new:speechbrain.nnet.activations.Softmax - apply_log: True - -ctc_cost: !name:speechbrain.nnet.losses.ctc_loss - blank_index: !ref - -modules: - enc: !ref - ctc_lin: !ref - attention_mlp: !ref - codec: !ref - discrete_embedding_layer: !ref - -model: !new:torch.nn.ModuleList - - [!ref , !ref , !ref , !ref ] - -model_opt_class: !name:torch.optim.Adam - lr: !ref - -lr_annealing_model: !new:speechbrain.nnet.schedulers.NewBobScheduler - initial_value: !ref - improvement_threshold: 0.0025 - annealing_factor: 0.8 - patient: 0 - -label_encoder: !new:speechbrain.dataio.encoder.CTCTextEncoder - -checkpointer: !new:speechbrain.utils.checkpoints.Checkpointer - checkpoints_dir: !ref - recoverables: - model: !ref - scheduler_model: !ref - attention_mlp: !ref - codec: !ref - discrete_embedding_layer: !ref - counter: !ref - tokenizer: !ref - -train_logger: !new:speechbrain.utils.train_logger.FileTrainLogger - save_file: !ref - -error_rate_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats - -cer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats - split_tokens: True diff --git a/benchmarks/DASB/LibriSpeech/ASR/LSTM/hparams/train_weighted_ssl.yaml b/benchmarks/DASB/LibriSpeech/ASR/LSTM/hparams/train_weighted_ssl.yaml deleted file mode 100644 index bcfbe8d50..000000000 --- a/benchmarks/DASB/LibriSpeech/ASR/LSTM/hparams/train_weighted_ssl.yaml +++ /dev/null @@ -1,162 +0,0 @@ -# ################################ -# Recipe for training an SSL-based ctc ASR system with librispeech. -# Decoding is performed with ctc greedy or LM-rescored decoder. -# -# Authors -# * Salah Zaiem 2023 -# * Youcef Kemiche 2023 -# * Pooneh Mousavi 2024 -# ################################ - -# Seed needs to be set at top of yaml, before objects with parameters are made -seed: 1986 -__set_seed: !apply:torch.manual_seed [!ref ] -output_folder: !ref results/MP3S-LSTM/weighted_ssl/ -output_wer_folder: !ref / -save_folder: !ref /save -train_log: !ref /train_log.txt - - -# Data files -data_folder: !PLACEHOLDER # e,g./path/to/LibriSpeech -# noise/ris dataset will automatically be downloaded -# data_folder_rirs: !ref -train_splits: ["train-clean-100"] -dev_splits: ["dev-clean"] -test_splits: ["test-clean", "test-other"] - -skip_prep: False -ckpt_interval_minutes: 25 # save checkpoint every N min -train_csv: !ref /train-clean-100.csv -valid_csv: !ref /dev-clean.csv -test_csv: - - !ref /test-clean.csv - - !ref /test-other.csv - -ssl_hub: microsoft/wavlm-large -ssl_folder: !ref /ssl_checkpoints -encoder_dim: 1024 - -# Training parameters -number_of_epochs: 20 -lr: 0.0002 -lr_weights: 0.01 -sorting: ascending -precision: fp32 -sample_rate: 16000 - -# With data_parallel batch_size is split into N jobs -# With DDP batch_size is multiplied by N jobs -# Must be 3 per GPU to fit 32GB of VRAM -batch_size: 4 -test_batch_size: 1 - -# Dataloader options -train_dataloader_opts: - batch_size: !ref - -valid_dataloader_opts: - batch_size: !ref - -test_dataloader_opts: - batch_size: !ref - -# Model parameters -activation: !name:torch.nn.Sigmoid -dnn_layers: 1 -dnn_neurons: 768 -freeze_encoder: True - -# Outputs -output_neurons: 30 # BPE size, index(blank/eos/bos) = 0 - -# Decoding parameters -blank_index: 0 -unk_index: 1 - -test_beam_search: - beam_size: 143 - topk: 1 - blank_index: !ref - space_token: ' ' # make sure this is the same as the one used in the tokenizer - beam_prune_logp: -12.0 - token_prune_min_logp: -1.2 - prune_history: True - alpha: 0.8 - beta: 1.2 - # can be downloaded from here https://www.openslr.org/11/ or trained with kenLM - # It can either be a .bin or .arpa ; note: .arpa is much slower at loading - # If you don't want to use an LM, comment it out or set it to null - kenlm_model_path: null - -# Functions and classes -# -epoch_counter: !new:speechbrain.utils.epoch_loop.EpochCounter - limit: !ref - -weighted_ssl_model: !new:speechbrain.lobes.models.huggingface_transformers.WeightedSSLModel # yamllint disable-line rule:line-length - hub: !ref - save_path: !ref - -enc: !new:speechbrain.nnet.RNN.LSTM - input_shape: [Null, Null, !ref ] - num_layers: 2 - bidirectional: True - dropout: 0.2 - hidden_size: 1024 - -ctc_lin: !new:speechbrain.nnet.linear.Linear - input_size: 2048 - n_neurons: !ref - -log_softmax: !new:speechbrain.nnet.activations.Softmax - apply_log: True - -ctc_cost: !name:speechbrain.nnet.losses.ctc_loss - blank_index: !ref - -modules: - enc: !ref - ctc_lin: !ref - weighted_ssl_model: !ref - -model: !new:torch.nn.ModuleList - - [!ref , !ref ] - -model_opt_class: !name:torch.optim.Adam - lr: !ref - -weights_opt_class: !name:torch.optim.Adam - lr: !ref - -lr_annealing_model: !new:speechbrain.nnet.schedulers.NewBobScheduler - initial_value: !ref - improvement_threshold: 0.0025 - annealing_factor: 0.8 - patient: 0 - -lr_annealing_weights: !new:speechbrain.nnet.schedulers.NewBobScheduler - initial_value: !ref - improvement_threshold: 0.0025 - annealing_factor: 0.9 - patient: 0 - -label_encoder: !new:speechbrain.dataio.encoder.CTCTextEncoder - -checkpointer: !new:speechbrain.utils.checkpoints.Checkpointer - checkpoints_dir: !ref - recoverables: - model: !ref - ssl_model: !ref - scheduler_model: !ref - scheduler_encoder: !ref - counter: !ref - tokenizer: !ref - -train_logger: !new:speechbrain.utils.train_logger.FileTrainLogger - save_file: !ref - -error_rate_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats - -cer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats - split_tokens: True diff --git a/benchmarks/DASB/LibriSpeech/ASR/LSTM/librispeech_prepare.py b/benchmarks/DASB/LibriSpeech/ASR/LSTM/librispeech_prepare.py deleted file mode 120000 index cf4adfd79..000000000 --- a/benchmarks/DASB/LibriSpeech/ASR/LSTM/librispeech_prepare.py +++ /dev/null @@ -1 +0,0 @@ -../../librispeech_prepare.py \ No newline at end of file diff --git a/benchmarks/DASB/LibriSpeech/ASR/LSTM/train_dac.py b/benchmarks/DASB/LibriSpeech/ASR/LSTM/train_dac.py deleted file mode 100644 index 479d6719b..000000000 --- a/benchmarks/DASB/LibriSpeech/ASR/LSTM/train_dac.py +++ /dev/null @@ -1,335 +0,0 @@ -#!/usr/bin/env/python3 -"""Recipe for training an discrete tokens ctc ASR system with librispeech. - -Decoding is performed with greedy decoding at validation time. -At test time, beamsearch is used with an optional external language model. - -Authors - * Pooneh Mousavi 2024 -""" - -import os -import sys -import torch -import torchaudio -import logging -import speechbrain as sb -from speechbrain.utils.distributed import run_on_main, if_main_process -from hyperpyyaml import load_hyperpyyaml -from pathlib import Path - -logger = logging.getLogger(__name__) - - -# Define training procedure -class ASR(sb.Brain): - def compute_forward(self, batch, stage): - """Forward computations from the waveform batches to the output probabilities.""" - batch = batch.to(self.device) - wavs, wav_lens = batch.sig - - # Forward pass - # Feature extraction and attention pooling - with torch.no_grad(): - self.hparams.codec.to(self.device).eval() - tokens, _ = self.hparams.codec( - wavs.unsqueeze(1), n_quantizers=self.hparams.num_codebooks - ) - embeddings = self.modules.discrete_embedding_layer( - tokens.movedim(-2, -1) - ) - att_w = self.modules.attention_mlp(embeddings) - feats = torch.matmul(att_w.transpose(2, -1), embeddings).squeeze(-2) - y = self.modules.enc(feats) - y = y[0] # As it is an RNN output - # Compute outputs - p_tokens = None - logits = self.modules.ctc_lin(y) - p_ctc = self.hparams.log_softmax(logits) - if stage == sb.Stage.VALID: - p_tokens = sb.decoders.ctc_greedy_decode( - p_ctc, wav_lens, blank_id=self.hparams.blank_index - ) - elif stage == sb.Stage.TEST: - p_tokens = test_searcher(p_ctc, wav_lens) - - return p_ctc, wav_lens, p_tokens - - def compute_objectives(self, predictions, batch, stage): - """Computes the loss (CTC+NLL) given predictions and targets.""" - - p_ctc, wav_lens, predicted_tokens = predictions - ids = batch.id - tokens, tokens_lens = batch.tokens - loss = self.hparams.ctc_cost(p_ctc, tokens, wav_lens, tokens_lens) - - if stage == sb.Stage.VALID: - # Decode token terms to words - predicted_words = [ - "".join(self.tokenizer.decode_ndim(utt_seq)).split(" ") - for utt_seq in predicted_tokens - ] - elif stage == sb.Stage.TEST: - predicted_words = [ - hyp[0].text.split(" ") for hyp in predicted_tokens - ] - - if stage != sb.Stage.TRAIN: - target_words = [wrd.split(" ") for wrd in batch.wrd] - self.wer_metric.append(ids, predicted_words, target_words) - self.cer_metric.append(ids, predicted_words, target_words) - - return loss - - def on_stage_start(self, stage, epoch): - """Gets called at the beginning of each epoch""" - if stage != sb.Stage.TRAIN: - self.cer_metric = self.hparams.cer_computer() - self.wer_metric = self.hparams.error_rate_computer() - - def on_stage_end(self, stage, stage_loss, epoch): - """Gets called at the end of an epoch.""" - # Compute/store important stats - stage_stats = {"loss": stage_loss} - if stage == sb.Stage.TRAIN: - self.train_stats = stage_stats - else: - stage_stats["CER"] = self.cer_metric.summarize("error_rate") - stage_stats["WER"] = self.wer_metric.summarize("error_rate") - - # Perform end-of-iteration things, like annealing, logging, etc. - if stage == sb.Stage.VALID: - old_lr_model, new_lr_model = self.hparams.lr_annealing_model( - stage_stats["loss"] - ) - # old_lr_weights, new_lr_weights = self.hparams.lr_annealing_weights( - # stage_stats["loss"] - # ) - sb.nnet.schedulers.update_learning_rate( - self.model_optimizer, new_lr_model - ) - # sb.nnet.schedulers.update_learning_rate( - # self.weights_optimizer, new_lr_weights - # ) - - self.hparams.train_logger.log_stats( - stats_meta={"epoch": epoch, "lr_model": old_lr_model}, - train_stats=self.train_stats, - valid_stats=stage_stats, - ) - self.checkpointer.save_and_keep_only( - meta={"WER": stage_stats["WER"]}, min_keys=["WER"], - ) - elif stage == sb.Stage.TEST: - self.hparams.train_logger.log_stats( - stats_meta={"Epoch loaded": self.hparams.epoch_counter.current}, - test_stats=stage_stats, - ) - if if_main_process(): - with open(self.hparams.test_wer_file, "w") as w: - self.wer_metric.write_stats(w) - - def init_optimizers(self): - # "Initializes the weights optimizer and model optimizer" - # self.weights_optimizer = self.hparams.weights_opt_class( - # self.hparams.attention_mlp.parameters() - # ) - self.model_optimizer = self.hparams.model_opt_class( - self.hparams.model.parameters() - ) - self.optimizers_dict = { - # "weights_optimizer": self.weights_optimizer, - "model_optimizer": self.model_optimizer, - } - # Initializing the weights - if self.checkpointer is not None: - self.checkpointer.add_recoverable("modelopt", self.model_optimizer) - # self.checkpointer.add_recoverable( - # "weights_opt", self.weights_optimizer - # ) - - -def dataio_prepare(hparams): - """This function prepares the datasets to be used in the brain class. - It also defines the data processing pipeline through user-defined functions.""" - data_folder = hparams["data_folder"] - - train_data = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=hparams["train_csv"], replacements={"data_root": data_folder}, - ) - - if hparams["sorting"] == "ascending": - # we sort training data to speed up training and get better results. - train_data = train_data.filtered_sorted(sort_key="duration") - # when sorting do not shuffle in dataloader ! otherwise is pointless - hparams["train_dataloader_opts"]["shuffle"] = False - - elif hparams["sorting"] == "descending": - train_data = train_data.filtered_sorted( - sort_key="duration", reverse=True - ) - # when sorting do not shuffle in dataloader ! otherwise is pointless - hparams["train_dataloader_opts"]["shuffle"] = False - - elif hparams["sorting"] == "random": - pass - - else: - raise NotImplementedError( - "sorting must be random, ascending or descending" - ) - - valid_data = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=hparams["valid_csv"], replacements={"data_root": data_folder}, - ) - valid_data = valid_data.filtered_sorted(sort_key="duration") - - # test is separate - test_datasets = {} - for csv_file in hparams["test_csv"]: - name = Path(csv_file).stem - test_datasets[name] = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=csv_file, replacements={"data_root": data_folder} - ) - test_datasets[name] = test_datasets[name].filtered_sorted( - sort_key="duration" - ) - - datasets = [train_data, valid_data] + [i for k, i in test_datasets.items()] - - # 2. Define audio pipeline: - @sb.utils.data_pipeline.takes("wav") - @sb.utils.data_pipeline.provides("sig") - def audio_pipeline(wav): - sig = sb.dataio.dataio.read_audio(wav) - info = torchaudio.info(wav) - resampled = torchaudio.transforms.Resample( - info.sample_rate, hparams["sample_rate"], - )(sig) - # resampled = resampled.unsqueeze(0) - return resampled - - sb.dataio.dataset.add_dynamic_item(datasets, audio_pipeline) - label_encoder = sb.dataio.encoder.CTCTextEncoder() - - # 3. Define text pipeline: - @sb.utils.data_pipeline.takes("wrd") - @sb.utils.data_pipeline.provides( - "wrd", "char_list", "tokens_list", "tokens" - ) - def text_pipeline(wrd): - yield wrd - char_list = list(wrd) - yield char_list - tokens_list = label_encoder.encode_sequence(char_list) - yield tokens_list - tokens = torch.LongTensor(tokens_list) - yield tokens - - sb.dataio.dataset.add_dynamic_item(datasets, text_pipeline) - - lab_enc_file = os.path.join(hparams["save_folder"], "label_encoder.txt") - special_labels = { - "blank_label": hparams["blank_index"], - "unk_label": hparams["unk_index"], - } - label_encoder.load_or_create( - path=lab_enc_file, - from_didatasets=[train_data], - output_key="char_list", - special_labels=special_labels, - sequence_input=True, - ) - - # 4. Set output: - sb.dataio.dataset.set_output_keys( - datasets, ["id", "sig", "wrd", "char_list", "tokens"], - ) - return train_data, valid_data, test_datasets, label_encoder - - -if __name__ == "__main__": - - # CLI: - hparams_file, run_opts, overrides = sb.parse_arguments(sys.argv[1:]) - - # If distributed_launch=True then - # create ddp_group with the right communication protocol - sb.utils.distributed.ddp_init_group(run_opts) - - with open(hparams_file) as fin: - hparams = load_hyperpyyaml(fin, overrides) - - # Create experiment directory - sb.create_experiment_directory( - experiment_directory=hparams["output_folder"], - hyperparams_to_save=hparams_file, - overrides=overrides, - ) - - # Dataset prep (parsing Librispeech) - from librispeech_prepare import prepare_librispeech # noqa - - # multi-gpu (ddp) save data preparation - run_on_main( - prepare_librispeech, - kwargs={ - "data_folder": hparams["data_folder"], - "tr_splits": hparams["train_splits"], - "dev_splits": hparams["dev_splits"], - "te_splits": hparams["test_splits"], - "save_folder": hparams["output_folder"], - "merge_lst": hparams["train_splits"], - "merge_name": "train.csv", - "skip_prep": hparams["skip_prep"], - }, - ) - - # here we create the datasets objects as well as tokenization and encoding - train_data, valid_data, test_datasets, label_encoder = dataio_prepare( - hparams - ) - - # Trainer initialization - asr_brain = ASR( - modules=hparams["modules"], - hparams=hparams, - run_opts=run_opts, - checkpointer=hparams["checkpointer"], - ) - - # Loading the SSL model - # We dynamicaly add the tokenizer to our brain class. - asr_brain.tokenizer = label_encoder - - ind2lab = label_encoder.ind2lab - vocab_list = [ind2lab[x] for x in range(len(ind2lab))] - - from speechbrain.decoders.ctc import CTCBeamSearcher - - test_searcher = CTCBeamSearcher( - **hparams["test_beam_search"], vocab_list=vocab_list, - ) - - # Training - asr_brain.fit( - asr_brain.hparams.epoch_counter, - train_data, - valid_data, - train_loader_kwargs=hparams["train_dataloader_opts"], - valid_loader_kwargs=hparams["valid_dataloader_opts"], - ) - - # Testing - if not os.path.exists(hparams["output_wer_folder"]): - os.makedirs(hparams["output_wer_folder"]) - - for k in test_datasets.keys(): # keys are test_clean, test_other etc - asr_brain.hparams.test_wer_file = os.path.join( - hparams["output_wer_folder"], f"wer_{k}.txt" - ) - asr_brain.evaluate( - test_datasets[k], - test_loader_kwargs=hparams["test_dataloader_opts"], - min_key="WER", - ) diff --git a/benchmarks/DASB/LibriSpeech/ASR/LSTM/train_discrete_ssl.py b/benchmarks/DASB/LibriSpeech/ASR/LSTM/train_discrete_ssl.py deleted file mode 100644 index 2aac19193..000000000 --- a/benchmarks/DASB/LibriSpeech/ASR/LSTM/train_discrete_ssl.py +++ /dev/null @@ -1,333 +0,0 @@ -#!/usr/bin/env/python3 -"""Recipe for training an discrete tokens ctc ASR system with librispeech. - -Decoding is performed with greedy decoding at validation time. -At test time, beamsearch is used with an optional external language model. - -Authors - * Pooneh Mousavi 2024 -""" - -import os -import sys -import torch -import torchaudio -import logging -import speechbrain as sb -from speechbrain.utils.distributed import run_on_main, if_main_process -from hyperpyyaml import load_hyperpyyaml -from pathlib import Path - -logger = logging.getLogger(__name__) - - -# Define training procedure -class ASR(sb.Brain): - def compute_forward(self, batch, stage): - """Forward computations from the waveform batches to the output probabilities.""" - batch = batch.to(self.device) - wavs, wav_lens = batch.sig - - # Forward pass - # Feature extraction and attention pooling - with torch.no_grad(): - self.hparams.codec.to(self.device).eval() - tokens, _, _ = self.hparams.codec( - wavs, wav_lens, **self.hparams.tokenizer_config - ) - embeddings = self.modules.discrete_embedding_layer(tokens) - att_w = self.modules.attention_mlp(embeddings) - feats = torch.matmul(att_w.transpose(2, -1), embeddings).squeeze(-2) - y = self.modules.enc(feats) - y = y[0] # As it is an RNN output - # Compute outputs - p_tokens = None - logits = self.modules.ctc_lin(y) - p_ctc = self.hparams.log_softmax(logits) - if stage == sb.Stage.VALID: - p_tokens = sb.decoders.ctc_greedy_decode( - p_ctc, wav_lens, blank_id=self.hparams.blank_index - ) - elif stage == sb.Stage.TEST: - p_tokens = test_searcher(p_ctc, wav_lens) - - return p_ctc, wav_lens, p_tokens - - def compute_objectives(self, predictions, batch, stage): - """Computes the loss (CTC+NLL) given predictions and targets.""" - - p_ctc, wav_lens, predicted_tokens = predictions - ids = batch.id - tokens, tokens_lens = batch.tokens - loss = self.hparams.ctc_cost(p_ctc, tokens, wav_lens, tokens_lens) - - if stage == sb.Stage.VALID: - # Decode token terms to words - predicted_words = [ - "".join(self.tokenizer.decode_ndim(utt_seq)).split(" ") - for utt_seq in predicted_tokens - ] - elif stage == sb.Stage.TEST: - predicted_words = [ - hyp[0].text.split(" ") for hyp in predicted_tokens - ] - - if stage != sb.Stage.TRAIN: - target_words = [wrd.split(" ") for wrd in batch.wrd] - self.wer_metric.append(ids, predicted_words, target_words) - self.cer_metric.append(ids, predicted_words, target_words) - - return loss - - def on_stage_start(self, stage, epoch): - """Gets called at the beginning of each epoch""" - if stage != sb.Stage.TRAIN: - self.cer_metric = self.hparams.cer_computer() - self.wer_metric = self.hparams.error_rate_computer() - - def on_stage_end(self, stage, stage_loss, epoch): - """Gets called at the end of an epoch.""" - # Compute/store important stats - stage_stats = {"loss": stage_loss} - if stage == sb.Stage.TRAIN: - self.train_stats = stage_stats - else: - stage_stats["CER"] = self.cer_metric.summarize("error_rate") - stage_stats["WER"] = self.wer_metric.summarize("error_rate") - - # Perform end-of-iteration things, like annealing, logging, etc. - if stage == sb.Stage.VALID: - old_lr_model, new_lr_model = self.hparams.lr_annealing_model( - stage_stats["loss"] - ) - # old_lr_weights, new_lr_weights = self.hparams.lr_annealing_weights( - # stage_stats["loss"] - # ) - sb.nnet.schedulers.update_learning_rate( - self.model_optimizer, new_lr_model - ) - # sb.nnet.schedulers.update_learning_rate( - # self.weights_optimizer, new_lr_weights - # ) - - self.hparams.train_logger.log_stats( - stats_meta={"epoch": epoch, "lr_model": old_lr_model}, - train_stats=self.train_stats, - valid_stats=stage_stats, - ) - self.checkpointer.save_and_keep_only( - meta={"WER": stage_stats["WER"]}, min_keys=["WER"], - ) - elif stage == sb.Stage.TEST: - self.hparams.train_logger.log_stats( - stats_meta={"Epoch loaded": self.hparams.epoch_counter.current}, - test_stats=stage_stats, - ) - if if_main_process(): - with open(self.hparams.test_wer_file, "w") as w: - self.wer_metric.write_stats(w) - - def init_optimizers(self): - # "Initializes the weights optimizer and model optimizer" - # self.weights_optimizer = self.hparams.weights_opt_class( - # self.hparams.attention_mlp.parameters() - # ) - self.model_optimizer = self.hparams.model_opt_class( - self.hparams.model.parameters() - ) - self.optimizers_dict = { - # "weights_optimizer": self.weights_optimizer, - "model_optimizer": self.model_optimizer, - } - # Initializing the weights - if self.checkpointer is not None: - self.checkpointer.add_recoverable("modelopt", self.model_optimizer) - # self.checkpointer.add_recoverable( - # "weights_opt", self.weights_optimizer - # ) - - -def dataio_prepare(hparams): - """This function prepares the datasets to be used in the brain class. - It also defines the data processing pipeline through user-defined functions.""" - data_folder = hparams["data_folder"] - - train_data = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=hparams["train_csv"], replacements={"data_root": data_folder}, - ) - - if hparams["sorting"] == "ascending": - # we sort training data to speed up training and get better results. - train_data = train_data.filtered_sorted(sort_key="duration") - # when sorting do not shuffle in dataloader ! otherwise is pointless - hparams["train_dataloader_opts"]["shuffle"] = False - - elif hparams["sorting"] == "descending": - train_data = train_data.filtered_sorted( - sort_key="duration", reverse=True - ) - # when sorting do not shuffle in dataloader ! otherwise is pointless - hparams["train_dataloader_opts"]["shuffle"] = False - - elif hparams["sorting"] == "random": - pass - - else: - raise NotImplementedError( - "sorting must be random, ascending or descending" - ) - - valid_data = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=hparams["valid_csv"], replacements={"data_root": data_folder}, - ) - valid_data = valid_data.filtered_sorted(sort_key="duration") - - # test is separate - test_datasets = {} - for csv_file in hparams["test_csv"]: - name = Path(csv_file).stem - test_datasets[name] = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=csv_file, replacements={"data_root": data_folder} - ) - test_datasets[name] = test_datasets[name].filtered_sorted( - sort_key="duration" - ) - - datasets = [train_data, valid_data] + [i for k, i in test_datasets.items()] - - # 2. Define audio pipeline: - @sb.utils.data_pipeline.takes("wav") - @sb.utils.data_pipeline.provides("sig") - def audio_pipeline(wav): - sig = sb.dataio.dataio.read_audio(wav) - info = torchaudio.info(wav) - resampled = torchaudio.transforms.Resample( - info.sample_rate, hparams["sample_rate"], - )(sig) - # resampled = resampled.unsqueeze(0) - return resampled - - sb.dataio.dataset.add_dynamic_item(datasets, audio_pipeline) - label_encoder = sb.dataio.encoder.CTCTextEncoder() - - # 3. Define text pipeline: - @sb.utils.data_pipeline.takes("wrd") - @sb.utils.data_pipeline.provides( - "wrd", "char_list", "tokens_list", "tokens" - ) - def text_pipeline(wrd): - yield wrd - char_list = list(wrd) - yield char_list - tokens_list = label_encoder.encode_sequence(char_list) - yield tokens_list - tokens = torch.LongTensor(tokens_list) - yield tokens - - sb.dataio.dataset.add_dynamic_item(datasets, text_pipeline) - - lab_enc_file = os.path.join(hparams["save_folder"], "label_encoder.txt") - special_labels = { - "blank_label": hparams["blank_index"], - "unk_label": hparams["unk_index"], - } - label_encoder.load_or_create( - path=lab_enc_file, - from_didatasets=[train_data], - output_key="char_list", - special_labels=special_labels, - sequence_input=True, - ) - - # 4. Set output: - sb.dataio.dataset.set_output_keys( - datasets, ["id", "sig", "wrd", "char_list", "tokens"], - ) - return train_data, valid_data, test_datasets, label_encoder - - -if __name__ == "__main__": - - # CLI: - hparams_file, run_opts, overrides = sb.parse_arguments(sys.argv[1:]) - - # If distributed_launch=True then - # create ddp_group with the right communication protocol - sb.utils.distributed.ddp_init_group(run_opts) - - with open(hparams_file) as fin: - hparams = load_hyperpyyaml(fin, overrides) - - # Create experiment directory - sb.create_experiment_directory( - experiment_directory=hparams["output_folder"], - hyperparams_to_save=hparams_file, - overrides=overrides, - ) - - # Dataset prep (parsing Librispeech) - from librispeech_prepare import prepare_librispeech # noqa - - # multi-gpu (ddp) save data preparation - run_on_main( - prepare_librispeech, - kwargs={ - "data_folder": hparams["data_folder"], - "tr_splits": hparams["train_splits"], - "dev_splits": hparams["dev_splits"], - "te_splits": hparams["test_splits"], - "save_folder": hparams["output_folder"], - "merge_lst": hparams["train_splits"], - "merge_name": "train.csv", - "skip_prep": hparams["skip_prep"], - }, - ) - - # here we create the datasets objects as well as tokenization and encoding - train_data, valid_data, test_datasets, label_encoder = dataio_prepare( - hparams - ) - - # Trainer initialization - asr_brain = ASR( - modules=hparams["modules"], - hparams=hparams, - run_opts=run_opts, - checkpointer=hparams["checkpointer"], - ) - - # Loading the SSL model - # We dynamicaly add the tokenizer to our brain class. - asr_brain.tokenizer = label_encoder - - ind2lab = label_encoder.ind2lab - vocab_list = [ind2lab[x] for x in range(len(ind2lab))] - - from speechbrain.decoders.ctc import CTCBeamSearcher - - test_searcher = CTCBeamSearcher( - **hparams["test_beam_search"], vocab_list=vocab_list, - ) - - # Training - asr_brain.fit( - asr_brain.hparams.epoch_counter, - train_data, - valid_data, - train_loader_kwargs=hparams["train_dataloader_opts"], - valid_loader_kwargs=hparams["valid_dataloader_opts"], - ) - - # Testing - if not os.path.exists(hparams["output_wer_folder"]): - os.makedirs(hparams["output_wer_folder"]) - - for k in test_datasets.keys(): # keys are test_clean, test_other etc - asr_brain.hparams.test_wer_file = os.path.join( - hparams["output_wer_folder"], f"wer_{k}.txt" - ) - asr_brain.evaluate( - test_datasets[k], - test_loader_kwargs=hparams["test_dataloader_opts"], - min_key="WER", - ) diff --git a/benchmarks/DASB/LibriSpeech/ASR/LSTM/train_encodec.py b/benchmarks/DASB/LibriSpeech/ASR/LSTM/train_encodec.py deleted file mode 100644 index d2215ce45..000000000 --- a/benchmarks/DASB/LibriSpeech/ASR/LSTM/train_encodec.py +++ /dev/null @@ -1,340 +0,0 @@ -#!/usr/bin/env/python3 -"""Recipe for training an SSL-based ctc ASR system with librispeech. - -Decoding is performed with greedy decoding at validation time. -At test time, beamsearch is used with an optional external language model. - -Authors - * Adel Moumen 2024 - * Salah Zaiem 2023 - * Youcef Kemiche 2023 -""" - -import os -import sys -import torch -import torchaudio -import logging -import speechbrain as sb -from speechbrain.utils.distributed import run_on_main, if_main_process -from hyperpyyaml import load_hyperpyyaml -from pathlib import Path - -logger = logging.getLogger(__name__) - - -# Define training procedure -class ASR(sb.Brain): - def compute_forward(self, batch, stage): - """Forward computations from the waveform batches to the output probabilities.""" - batch = batch.to(self.device) - wavs, wav_lens = batch.sig - - # Forward pass - # Feature extraction and attention pooling - with torch.no_grad(): - self.hparams.codec.to(self.device).eval() - tokens, _ = self.hparams.codec.encode(wavs, wav_lens) - embeddings = self.modules.discrete_embedding_layer(tokens) - att_w = self.modules.attention_mlp(embeddings) - feats = torch.matmul(att_w.transpose(2, -1), embeddings).squeeze(-2) - y = self.modules.enc(feats) - y = y[0] # As it is an RNN output - # Compute outputs - p_tokens = None - logits = self.modules.ctc_lin(y) - p_ctc = self.hparams.log_softmax(logits) - if stage == sb.Stage.VALID: - p_tokens = sb.decoders.ctc_greedy_decode( - p_ctc, wav_lens, blank_id=self.hparams.blank_index - ) - elif stage == sb.Stage.TEST: - p_tokens = test_searcher(p_ctc, wav_lens) - - return p_ctc, wav_lens, p_tokens - - def compute_objectives(self, predictions, batch, stage): - """Computes the loss (CTC+NLL) given predictions and targets.""" - - p_ctc, wav_lens, predicted_tokens = predictions - ids = batch.id - tokens, tokens_lens = batch.tokens - loss = self.hparams.ctc_cost(p_ctc, tokens, wav_lens, tokens_lens) - - if stage == sb.Stage.VALID: - # Decode token terms to words - predicted_words = [ - "".join(self.tokenizer.decode_ndim(utt_seq)).split(" ") - for utt_seq in predicted_tokens - ] - elif stage == sb.Stage.TEST: - predicted_words = [ - hyp[0].text.split(" ") for hyp in predicted_tokens - ] - - if stage != sb.Stage.TRAIN: - target_words = [wrd.split(" ") for wrd in batch.wrd] - self.wer_metric.append(ids, predicted_words, target_words) - self.cer_metric.append(ids, predicted_words, target_words) - - return loss - - def on_stage_start(self, stage, epoch): - """Gets called at the beginning of each epoch""" - if stage != sb.Stage.TRAIN: - self.cer_metric = self.hparams.cer_computer() - self.wer_metric = self.hparams.error_rate_computer() - - def on_stage_end(self, stage, stage_loss, epoch): - """Gets called at the end of an epoch.""" - # Compute/store important stats - stage_stats = {"loss": stage_loss} - if stage == sb.Stage.TRAIN: - self.train_stats = stage_stats - else: - stage_stats["CER"] = self.cer_metric.summarize("error_rate") - stage_stats["WER"] = self.wer_metric.summarize("error_rate") - - # Perform end-of-iteration things, like annealing, logging, etc. - if stage == sb.Stage.VALID: - old_lr_model, new_lr_model = self.hparams.lr_annealing_model( - stage_stats["loss"] - ) - # old_lr_weights, new_lr_weights = self.hparams.lr_annealing_weights( - # stage_stats["loss"] - # ) - sb.nnet.schedulers.update_learning_rate( - self.model_optimizer, new_lr_model - ) - # sb.nnet.schedulers.update_learning_rate( - # self.weights_optimizer, new_lr_weights - # ) - - self.hparams.train_logger.log_stats( - stats_meta={"epoch": epoch, "lr_model": old_lr_model}, - train_stats=self.train_stats, - valid_stats=stage_stats, - ) - self.checkpointer.save_and_keep_only( - meta={"WER": stage_stats["WER"]}, min_keys=["WER"], - ) - elif stage == sb.Stage.TEST: - self.hparams.train_logger.log_stats( - stats_meta={"Epoch loaded": self.hparams.epoch_counter.current}, - test_stats=stage_stats, - ) - if if_main_process(): - with open(self.hparams.test_wer_file, "w") as w: - self.wer_metric.write_stats(w) - - def init_optimizers(self): - "Initializes the weights optimizer and model optimizer" - # self.weights_optimizer = self.hparams.weights_opt_class( - # self.hparams.attention_mlp.parameters() - # ) - self.model_optimizer = self.hparams.model_opt_class( - self.hparams.model.parameters() - ) - self.optimizers_dict = { - # "weights_optimizer": self.weights_optimizer, - "model_optimizer": self.model_optimizer, - } - # Initializing the weights - if self.checkpointer is not None: - self.checkpointer.add_recoverable("modelopt", self.model_optimizer) - # self.checkpointer.add_recoverable( - # "weights_opt", self.weights_optimizer - # ) - - -def dataio_prepare(hparams): - """This function prepares the datasets to be used in the brain class. - It also defines the data processing pipeline through user-defined functions.""" - data_folder = hparams["data_folder"] - - train_data = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=hparams["train_csv"], replacements={"data_root": data_folder}, - ) - - if hparams["sorting"] == "ascending": - # we sort training data to speed up training and get better results. - train_data = train_data.filtered_sorted(sort_key="duration") - # when sorting do not shuffle in dataloader ! otherwise is pointless - hparams["train_dataloader_opts"]["shuffle"] = False - - elif hparams["sorting"] == "descending": - train_data = train_data.filtered_sorted( - sort_key="duration", reverse=True - ) - # when sorting do not shuffle in dataloader ! otherwise is pointless - hparams["train_dataloader_opts"]["shuffle"] = False - - elif hparams["sorting"] == "random": - pass - - else: - raise NotImplementedError( - "sorting must be random, ascending or descending" - ) - - valid_data = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=hparams["valid_csv"], replacements={"data_root": data_folder}, - ) - valid_data = valid_data.filtered_sorted(sort_key="duration") - - # test is separate - test_datasets = {} - for csv_file in hparams["test_csv"]: - name = Path(csv_file).stem - test_datasets[name] = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=csv_file, replacements={"data_root": data_folder} - ) - test_datasets[name] = test_datasets[name].filtered_sorted( - sort_key="duration" - ) - - datasets = [train_data, valid_data] + [i for k, i in test_datasets.items()] - - # 2. Define audio pipeline: - @sb.utils.data_pipeline.takes("wav") - @sb.utils.data_pipeline.provides("sig") - def audio_pipeline(wav): - sig = sb.dataio.dataio.read_audio(wav) - info = torchaudio.info(wav) - resampled = torchaudio.transforms.Resample( - info.sample_rate, hparams["sample_rate"], - )(sig) - # resampled = resampled.unsqueeze(0) - return resampled - - sb.dataio.dataset.add_dynamic_item(datasets, audio_pipeline) - label_encoder = sb.dataio.encoder.CTCTextEncoder() - - # 3. Define text pipeline: - @sb.utils.data_pipeline.takes("wrd") - @sb.utils.data_pipeline.provides( - "wrd", "char_list", "tokens_list", "tokens" - ) - def text_pipeline(wrd): - yield wrd - char_list = list(wrd) - yield char_list - tokens_list = label_encoder.encode_sequence(char_list) - yield tokens_list - tokens = torch.LongTensor(tokens_list) - yield tokens - - sb.dataio.dataset.add_dynamic_item(datasets, text_pipeline) - - lab_enc_file = os.path.join(hparams["save_folder"], "label_encoder.txt") - special_labels = { - "blank_label": hparams["blank_index"], - "unk_label": hparams["unk_index"], - } - label_encoder.load_or_create( - path=lab_enc_file, - from_didatasets=[train_data], - output_key="char_list", - special_labels=special_labels, - sequence_input=True, - ) - - # 4. Set output: - sb.dataio.dataset.set_output_keys( - datasets, ["id", "sig", "wrd", "char_list", "tokens"], - ) - return train_data, valid_data, test_datasets, label_encoder - - -if __name__ == "__main__": - - # CLI: - hparams_file, run_opts, overrides = sb.parse_arguments(sys.argv[1:]) - - # If distributed_launch=True then - # create ddp_group with the right communication protocol - sb.utils.distributed.ddp_init_group(run_opts) - - with open(hparams_file) as fin: - hparams = load_hyperpyyaml(fin, overrides) - - # Create experiment directory - sb.create_experiment_directory( - experiment_directory=hparams["output_folder"], - hyperparams_to_save=hparams_file, - overrides=overrides, - ) - - if hparams["discrete_embedding_layer"].init: - hparams["discrete_embedding_layer"].init_embedding( - hparams["codec"] - .vocabulary[: hparams["num_codebooks"], :, :] - .flatten(0, 1) - ) - - # Dataset prep (parsing Librispeech) - from librispeech_prepare import prepare_librispeech # noqa - - # multi-gpu (ddp) save data preparation - run_on_main( - prepare_librispeech, - kwargs={ - "data_folder": hparams["data_folder"], - "tr_splits": hparams["train_splits"], - "dev_splits": hparams["dev_splits"], - "te_splits": hparams["test_splits"], - "save_folder": hparams["output_folder"], - "merge_lst": hparams["train_splits"], - "merge_name": "train.csv", - "skip_prep": hparams["skip_prep"], - }, - ) - - # here we create the datasets objects as well as tokenization and encoding - train_data, valid_data, test_datasets, label_encoder = dataio_prepare( - hparams - ) - - # Trainer initialization - asr_brain = ASR( - modules=hparams["modules"], - hparams=hparams, - run_opts=run_opts, - checkpointer=hparams["checkpointer"], - ) - - # Loading the SSL model - # We dynamicaly add the tokenizer to our brain class. - asr_brain.tokenizer = label_encoder - - ind2lab = label_encoder.ind2lab - vocab_list = [ind2lab[x] for x in range(len(ind2lab))] - - from speechbrain.decoders.ctc import CTCBeamSearcher - - test_searcher = CTCBeamSearcher( - **hparams["test_beam_search"], vocab_list=vocab_list, - ) - - # Training - asr_brain.fit( - asr_brain.hparams.epoch_counter, - train_data, - valid_data, - train_loader_kwargs=hparams["train_dataloader_opts"], - valid_loader_kwargs=hparams["valid_dataloader_opts"], - ) - - # Testing - if not os.path.exists(hparams["output_wer_folder"]): - os.makedirs(hparams["output_wer_folder"]) - - for k in test_datasets.keys(): # keys are test_clean, test_other etc - asr_brain.hparams.test_wer_file = os.path.join( - hparams["output_wer_folder"], f"wer_{k}.txt" - ) - asr_brain.evaluate( - test_datasets[k], - test_loader_kwargs=hparams["test_dataloader_opts"], - min_key="WER", - ) diff --git a/benchmarks/DASB/LibriSpeech/ASR/LSTM/train_speech_tokenizer.py b/benchmarks/DASB/LibriSpeech/ASR/LSTM/train_speech_tokenizer.py deleted file mode 100644 index 1493b5972..000000000 --- a/benchmarks/DASB/LibriSpeech/ASR/LSTM/train_speech_tokenizer.py +++ /dev/null @@ -1,335 +0,0 @@ -#!/usr/bin/env/python3 -"""Recipe for training an SSL-based ctc ASR system with librispeech. - -Decoding is performed with greedy decoding at validation time. -At test time, beamsearch is used with an optional external language model. - -Authors - * Adel Moumen 2024 - * Salah Zaiem 2023 - * Youcef Kemiche 2023 -""" - -import os -import sys -import torch -import torchaudio -import logging -import speechbrain as sb -from speechbrain.utils.distributed import run_on_main, if_main_process -from hyperpyyaml import load_hyperpyyaml -from pathlib import Path - -logger = logging.getLogger(__name__) - - -# Define training procedure -class ASR(sb.Brain): - def compute_forward(self, batch, stage): - """Forward computations from the waveform batches to the output probabilities.""" - batch = batch.to(self.device) - wavs, wav_lens = batch.sig - - # Forward pass - # Feature extraction and attention pooling - with torch.no_grad(): - self.hparams.codec.to(self.device).eval() - tokens = self.hparams.codec(wavs).permute(1, 2, 0)[ - :, :, : self.hparams.num_codebooks - ] - embeddings = self.modules.discrete_embedding_layer(tokens) - att_w = self.modules.attention_mlp(embeddings) - feats = torch.matmul(att_w.transpose(2, -1), embeddings).squeeze(-2) - y = self.modules.enc(feats) - y = y[0] # As it is an RNN output - # Compute outputs - p_tokens = None - logits = self.modules.ctc_lin(y) - p_ctc = self.hparams.log_softmax(logits) - if stage == sb.Stage.VALID: - p_tokens = sb.decoders.ctc_greedy_decode( - p_ctc, wav_lens, blank_id=self.hparams.blank_index - ) - elif stage == sb.Stage.TEST: - p_tokens = test_searcher(p_ctc, wav_lens) - - return p_ctc, wav_lens, p_tokens - - def compute_objectives(self, predictions, batch, stage): - """Computes the loss (CTC+NLL) given predictions and targets.""" - - p_ctc, wav_lens, predicted_tokens = predictions - ids = batch.id - tokens, tokens_lens = batch.tokens - loss = self.hparams.ctc_cost(p_ctc, tokens, wav_lens, tokens_lens) - - if stage == sb.Stage.VALID: - # Decode token terms to words - predicted_words = [ - "".join(self.tokenizer.decode_ndim(utt_seq)).split(" ") - for utt_seq in predicted_tokens - ] - elif stage == sb.Stage.TEST: - predicted_words = [ - hyp[0].text.split(" ") for hyp in predicted_tokens - ] - - if stage != sb.Stage.TRAIN: - target_words = [wrd.split(" ") for wrd in batch.wrd] - self.wer_metric.append(ids, predicted_words, target_words) - self.cer_metric.append(ids, predicted_words, target_words) - - return loss - - def on_stage_start(self, stage, epoch): - """Gets called at the beginning of each epoch""" - if stage != sb.Stage.TRAIN: - self.cer_metric = self.hparams.cer_computer() - self.wer_metric = self.hparams.error_rate_computer() - - def on_stage_end(self, stage, stage_loss, epoch): - """Gets called at the end of an epoch.""" - # Compute/store important stats - stage_stats = {"loss": stage_loss} - if stage == sb.Stage.TRAIN: - self.train_stats = stage_stats - else: - stage_stats["CER"] = self.cer_metric.summarize("error_rate") - stage_stats["WER"] = self.wer_metric.summarize("error_rate") - - # Perform end-of-iteration things, like annealing, logging, etc. - if stage == sb.Stage.VALID: - old_lr_model, new_lr_model = self.hparams.lr_annealing_model( - stage_stats["loss"] - ) - # old_lr_weights, new_lr_weights = self.hparams.lr_annealing_weights( - # stage_stats["loss"] - # ) - sb.nnet.schedulers.update_learning_rate( - self.model_optimizer, new_lr_model - ) - # sb.nnet.schedulers.update_learning_rate( - # self.weights_optimizer, new_lr_weights - # ) - - self.hparams.train_logger.log_stats( - stats_meta={"epoch": epoch, "lr_model": old_lr_model}, - train_stats=self.train_stats, - valid_stats=stage_stats, - ) - self.checkpointer.save_and_keep_only( - meta={"WER": stage_stats["WER"]}, min_keys=["WER"], - ) - elif stage == sb.Stage.TEST: - self.hparams.train_logger.log_stats( - stats_meta={"Epoch loaded": self.hparams.epoch_counter.current}, - test_stats=stage_stats, - ) - if if_main_process(): - with open(self.hparams.test_wer_file, "w") as w: - self.wer_metric.write_stats(w) - - def init_optimizers(self): - "Initializes the weights optimizer and model optimizer" - # self.weights_optimizer = self.hparams.weights_opt_class( - # self.hparams.attention_mlp.parameters() - # ) - self.model_optimizer = self.hparams.model_opt_class( - self.hparams.model.parameters() - ) - self.optimizers_dict = { - # "weights_optimizer": self.weights_optimizer, - "model_optimizer": self.model_optimizer, - } - # Initializing the weights - if self.checkpointer is not None: - self.checkpointer.add_recoverable("modelopt", self.model_optimizer) - # self.checkpointer.add_recoverable( - # "weights_opt", self.weights_optimizer - # ) - - -def dataio_prepare(hparams): - """This function prepares the datasets to be used in the brain class. - It also defines the data processing pipeline through user-defined functions.""" - data_folder = hparams["data_folder"] - - train_data = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=hparams["train_csv"], replacements={"data_root": data_folder}, - ) - - if hparams["sorting"] == "ascending": - # we sort training data to speed up training and get better results. - train_data = train_data.filtered_sorted(sort_key="duration") - # when sorting do not shuffle in dataloader ! otherwise is pointless - hparams["train_dataloader_opts"]["shuffle"] = False - - elif hparams["sorting"] == "descending": - train_data = train_data.filtered_sorted( - sort_key="duration", reverse=True - ) - # when sorting do not shuffle in dataloader ! otherwise is pointless - hparams["train_dataloader_opts"]["shuffle"] = False - - elif hparams["sorting"] == "random": - pass - - else: - raise NotImplementedError( - "sorting must be random, ascending or descending" - ) - - valid_data = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=hparams["valid_csv"], replacements={"data_root": data_folder}, - ) - valid_data = valid_data.filtered_sorted(sort_key="duration") - - # test is separate - test_datasets = {} - for csv_file in hparams["test_csv"]: - name = Path(csv_file).stem - test_datasets[name] = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=csv_file, replacements={"data_root": data_folder} - ) - test_datasets[name] = test_datasets[name].filtered_sorted( - sort_key="duration" - ) - - datasets = [train_data, valid_data] + [i for k, i in test_datasets.items()] - - # 2. Define audio pipeline: - @sb.utils.data_pipeline.takes("wav") - @sb.utils.data_pipeline.provides("sig") - def audio_pipeline(wav): - sig = sb.dataio.dataio.read_audio(wav) - info = torchaudio.info(wav) - resampled = torchaudio.transforms.Resample( - info.sample_rate, hparams["sample_rate"], - )(sig) - # resampled = resampled.unsqueeze(0) - return resampled - - sb.dataio.dataset.add_dynamic_item(datasets, audio_pipeline) - label_encoder = sb.dataio.encoder.CTCTextEncoder() - - # 3. Define text pipeline: - @sb.utils.data_pipeline.takes("wrd") - @sb.utils.data_pipeline.provides( - "wrd", "char_list", "tokens_list", "tokens" - ) - def text_pipeline(wrd): - yield wrd - char_list = list(wrd) - yield char_list - tokens_list = label_encoder.encode_sequence(char_list) - yield tokens_list - tokens = torch.LongTensor(tokens_list) - yield tokens - - sb.dataio.dataset.add_dynamic_item(datasets, text_pipeline) - - lab_enc_file = os.path.join(hparams["save_folder"], "label_encoder.txt") - special_labels = { - "blank_label": hparams["blank_index"], - "unk_label": hparams["unk_index"], - } - label_encoder.load_or_create( - path=lab_enc_file, - from_didatasets=[train_data], - output_key="char_list", - special_labels=special_labels, - sequence_input=True, - ) - - # 4. Set output: - sb.dataio.dataset.set_output_keys( - datasets, ["id", "sig", "wrd", "char_list", "tokens"], - ) - return train_data, valid_data, test_datasets, label_encoder - - -if __name__ == "__main__": - - # CLI: - hparams_file, run_opts, overrides = sb.parse_arguments(sys.argv[1:]) - - # If distributed_launch=True then - # create ddp_group with the right communication protocol - sb.utils.distributed.ddp_init_group(run_opts) - - with open(hparams_file) as fin: - hparams = load_hyperpyyaml(fin, overrides) - - # Create experiment directory - sb.create_experiment_directory( - experiment_directory=hparams["output_folder"], - hyperparams_to_save=hparams_file, - overrides=overrides, - ) - - # Dataset prep (parsing Librispeech) - from librispeech_prepare import prepare_librispeech # noqa - - # multi-gpu (ddp) save data preparation - run_on_main( - prepare_librispeech, - kwargs={ - "data_folder": hparams["data_folder"], - "tr_splits": hparams["train_splits"], - "dev_splits": hparams["dev_splits"], - "te_splits": hparams["test_splits"], - "save_folder": hparams["output_folder"], - "merge_lst": hparams["train_splits"], - "merge_name": "train.csv", - "skip_prep": hparams["skip_prep"], - }, - ) - - # here we create the datasets objects as well as tokenization and encoding - train_data, valid_data, test_datasets, label_encoder = dataio_prepare( - hparams - ) - - # Trainer initialization - asr_brain = ASR( - modules=hparams["modules"], - hparams=hparams, - run_opts=run_opts, - checkpointer=hparams["checkpointer"], - ) - - # Loading the SSL model - # We dynamicaly add the tokenizer to our brain class. - asr_brain.tokenizer = label_encoder - - ind2lab = label_encoder.ind2lab - vocab_list = [ind2lab[x] for x in range(len(ind2lab))] - - from speechbrain.decoders.ctc import CTCBeamSearcher - - test_searcher = CTCBeamSearcher( - **hparams["test_beam_search"], vocab_list=vocab_list, - ) - - # Training - asr_brain.fit( - asr_brain.hparams.epoch_counter, - train_data, - valid_data, - train_loader_kwargs=hparams["train_dataloader_opts"], - valid_loader_kwargs=hparams["valid_dataloader_opts"], - ) - - # Testing - if not os.path.exists(hparams["output_wer_folder"]): - os.makedirs(hparams["output_wer_folder"]) - - for k in test_datasets.keys(): # keys are test_clean, test_other etc - asr_brain.hparams.test_wer_file = os.path.join( - hparams["output_wer_folder"], f"wer_{k}.txt" - ) - asr_brain.evaluate( - test_datasets[k], - test_loader_kwargs=hparams["test_dataloader_opts"], - min_key="WER", - ) diff --git a/benchmarks/DASB/LibriSpeech/ASR/LSTM/train_weighted_ssl.py b/benchmarks/DASB/LibriSpeech/ASR/LSTM/train_weighted_ssl.py deleted file mode 100644 index 4a7aed382..000000000 --- a/benchmarks/DASB/LibriSpeech/ASR/LSTM/train_weighted_ssl.py +++ /dev/null @@ -1,322 +0,0 @@ -#!/usr/bin/env/python3 -"""Recipe for training an SSL-based ctc ASR system with librispeech. - -Decoding is performed with greedy decoding at validation time. -At test time, beamsearch is used with an optional external language model. - -Authors - * Adel Moumen 2024 - * Salah Zaiem 2023 - * Youcef Kemiche 2023 - * Pooneh Mousavi 2024 -""" - -import os -import sys -import torch -import logging -import speechbrain as sb -from speechbrain.utils.distributed import run_on_main, if_main_process -from hyperpyyaml import load_hyperpyyaml -from pathlib import Path - -logger = logging.getLogger(__name__) - - -# Define training procedure -class ASR(sb.Brain): - def compute_forward(self, batch, stage): - """Forward computations from the waveform batches to the output probabilities.""" - batch = batch.to(self.device) - wavs, wav_lens = batch.sig - - # Forward pass - feats = self.modules.weighted_ssl_model(wavs) - y = self.modules.enc(feats) - y = y[0] # As it is an RNN output - # Compute outputs - p_tokens = None - logits = self.modules.ctc_lin(y) - p_ctc = self.hparams.log_softmax(logits) - if stage == sb.Stage.VALID: - p_tokens = sb.decoders.ctc_greedy_decode( - p_ctc, wav_lens, blank_id=self.hparams.blank_index - ) - elif stage == sb.Stage.TEST: - p_tokens = test_searcher(p_ctc, wav_lens) - - return p_ctc, wav_lens, p_tokens - - def compute_objectives(self, predictions, batch, stage): - """Computes the loss (CTC+NLL) given predictions and targets.""" - - p_ctc, wav_lens, predicted_tokens = predictions - ids = batch.id - tokens, tokens_lens = batch.tokens - loss = self.hparams.ctc_cost(p_ctc, tokens, wav_lens, tokens_lens) - - if stage == sb.Stage.VALID: - # Decode token terms to words - predicted_words = [ - "".join(self.tokenizer.decode_ndim(utt_seq)).split(" ") - for utt_seq in predicted_tokens - ] - elif stage == sb.Stage.TEST: - predicted_words = [ - hyp[0].text.split(" ") for hyp in predicted_tokens - ] - - if stage != sb.Stage.TRAIN: - target_words = [wrd.split(" ") for wrd in batch.wrd] - self.wer_metric.append(ids, predicted_words, target_words) - self.cer_metric.append(ids, predicted_words, target_words) - - return loss - - def on_stage_start(self, stage, epoch): - """Gets called at the beginning of each epoch""" - if stage != sb.Stage.TRAIN: - self.cer_metric = self.hparams.cer_computer() - self.wer_metric = self.hparams.error_rate_computer() - - def on_stage_end(self, stage, stage_loss, epoch): - """Gets called at the end of an epoch.""" - # Compute/store important stats - stage_stats = {"loss": stage_loss} - if stage == sb.Stage.TRAIN: - self.train_stats = stage_stats - else: - stage_stats["CER"] = self.cer_metric.summarize("error_rate") - stage_stats["WER"] = self.wer_metric.summarize("error_rate") - - # Perform end-of-iteration things, like annealing, logging, etc. - if stage == sb.Stage.VALID: - old_lr_model, new_lr_model = self.hparams.lr_annealing_model( - stage_stats["loss"] - ) - old_lr_weights, new_lr_weights = self.hparams.lr_annealing_weights( - stage_stats["loss"] - ) - sb.nnet.schedulers.update_learning_rate( - self.model_optimizer, new_lr_model - ) - sb.nnet.schedulers.update_learning_rate( - self.weights_optimizer, new_lr_weights - ) - - self.hparams.train_logger.log_stats( - stats_meta={"epoch": epoch, "lr_model": old_lr_model}, - train_stats=self.train_stats, - valid_stats=stage_stats, - ) - self.checkpointer.save_and_keep_only( - meta={"WER": stage_stats["WER"]}, min_keys=["WER"], - ) - elif stage == sb.Stage.TEST: - self.hparams.train_logger.log_stats( - stats_meta={"Epoch loaded": self.hparams.epoch_counter.current}, - test_stats=stage_stats, - ) - if if_main_process(): - with open(self.hparams.test_wer_file, "w") as w: - self.wer_metric.write_stats(w) - - def init_optimizers(self): - "Initializes the weights optimizer and model optimizer" - self.weights_optimizer = self.hparams.weights_opt_class( - [self.modules.weighted_ssl_model.weights] - ) - self.model_optimizer = self.hparams.model_opt_class( - self.hparams.model.parameters() - ) - self.optimizers_dict = { - "weights_optimizer": self.weights_optimizer, - "model_optimizer": self.model_optimizer, - } - # Initializing the weights - if self.checkpointer is not None: - self.checkpointer.add_recoverable("modelopt", self.model_optimizer) - self.checkpointer.add_recoverable( - "weights_opt", self.weights_optimizer - ) - - -def dataio_prepare(hparams): - """This function prepares the datasets to be used in the brain class. - It also defines the data processing pipeline through user-defined functions.""" - data_folder = hparams["data_folder"] - - train_data = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=hparams["train_csv"], replacements={"data_root": data_folder}, - ) - - if hparams["sorting"] == "ascending": - # we sort training data to speed up training and get better results. - train_data = train_data.filtered_sorted(sort_key="duration") - # when sorting do not shuffle in dataloader ! otherwise is pointless - hparams["train_dataloader_opts"]["shuffle"] = False - - elif hparams["sorting"] == "descending": - train_data = train_data.filtered_sorted( - sort_key="duration", reverse=True - ) - # when sorting do not shuffle in dataloader ! otherwise is pointless - hparams["train_dataloader_opts"]["shuffle"] = False - - elif hparams["sorting"] == "random": - pass - - else: - raise NotImplementedError( - "sorting must be random, ascending or descending" - ) - - valid_data = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=hparams["valid_csv"], replacements={"data_root": data_folder}, - ) - valid_data = valid_data.filtered_sorted(sort_key="duration") - - # test is separate - test_datasets = {} - for csv_file in hparams["test_csv"]: - name = Path(csv_file).stem - test_datasets[name] = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=csv_file, replacements={"data_root": data_folder} - ) - test_datasets[name] = test_datasets[name].filtered_sorted( - sort_key="duration" - ) - - datasets = [train_data, valid_data] + [i for k, i in test_datasets.items()] - - # 2. Define audio pipeline: - @sb.utils.data_pipeline.takes("wav") - @sb.utils.data_pipeline.provides("sig") - def audio_pipeline(wav): - sig = sb.dataio.dataio.read_audio(wav) - return sig - - sb.dataio.dataset.add_dynamic_item(datasets, audio_pipeline) - label_encoder = sb.dataio.encoder.CTCTextEncoder() - - # 3. Define text pipeline: - @sb.utils.data_pipeline.takes("wrd") - @sb.utils.data_pipeline.provides( - "wrd", "char_list", "tokens_list", "tokens" - ) - def text_pipeline(wrd): - yield wrd - char_list = list(wrd) - yield char_list - tokens_list = label_encoder.encode_sequence(char_list) - yield tokens_list - tokens = torch.LongTensor(tokens_list) - yield tokens - - sb.dataio.dataset.add_dynamic_item(datasets, text_pipeline) - - lab_enc_file = os.path.join(hparams["save_folder"], "label_encoder.txt") - special_labels = { - "blank_label": hparams["blank_index"], - "unk_label": hparams["unk_index"], - } - label_encoder.load_or_create( - path=lab_enc_file, - from_didatasets=[train_data], - output_key="char_list", - special_labels=special_labels, - sequence_input=True, - ) - - # 4. Set output: - sb.dataio.dataset.set_output_keys( - datasets, ["id", "sig", "wrd", "char_list", "tokens"], - ) - return train_data, valid_data, test_datasets, label_encoder - - -if __name__ == "__main__": - - # CLI: - hparams_file, run_opts, overrides = sb.parse_arguments(sys.argv[1:]) - - # If distributed_launch=True then - # create ddp_group with the right communication protocol - sb.utils.distributed.ddp_init_group(run_opts) - - with open(hparams_file) as fin: - hparams = load_hyperpyyaml(fin, overrides) - - # Create experiment directory - sb.create_experiment_directory( - experiment_directory=hparams["output_folder"], - hyperparams_to_save=hparams_file, - overrides=overrides, - ) - - # Dataset prep (parsing Librispeech) - from librispeech_prepare import prepare_librispeech # noqa - - # multi-gpu (ddp) save data preparation - run_on_main( - prepare_librispeech, - kwargs={ - "data_folder": hparams["data_folder"], - "tr_splits": hparams["train_splits"], - "dev_splits": hparams["dev_splits"], - "te_splits": hparams["test_splits"], - "save_folder": hparams["output_folder"], - "merge_lst": hparams["train_splits"], - "merge_name": "train.csv", - "skip_prep": hparams["skip_prep"], - }, - ) - - # here we create the datasets objects as well as tokenization and encoding - train_data, valid_data, test_datasets, label_encoder = dataio_prepare( - hparams - ) - - # Trainer initialization - asr_brain = ASR( - modules=hparams["modules"], - hparams=hparams, - run_opts=run_opts, - checkpointer=hparams["checkpointer"], - ) - - # Loading the SSL model - # We dynamicaly add the tokenizer to our brain class. - asr_brain.tokenizer = label_encoder - - ind2lab = label_encoder.ind2lab - vocab_list = [ind2lab[x] for x in range(len(ind2lab))] - - from speechbrain.decoders.ctc import CTCBeamSearcher - - test_searcher = CTCBeamSearcher( - **hparams["test_beam_search"], vocab_list=vocab_list, - ) - - # Training - asr_brain.fit( - asr_brain.hparams.epoch_counter, - train_data, - valid_data, - train_loader_kwargs=hparams["train_dataloader_opts"], - valid_loader_kwargs=hparams["valid_dataloader_opts"], - ) - - # Testing - if not os.path.exists(hparams["output_wer_folder"]): - os.makedirs(hparams["output_wer_folder"]) - - for k in test_datasets.keys(): # keys are test_clean, test_other etc - asr_brain.hparams.test_wer_file = os.path.join( - hparams["output_wer_folder"], f"wer_{k}.txt" - ) - asr_brain.evaluate( - test_datasets[k], - test_loader_kwargs=hparams["test_dataloader_opts"], - min_key="WER", - ) diff --git a/benchmarks/DASB/LibriSpeech/ASR/contextnet/custom_model.py b/benchmarks/DASB/LibriSpeech/ASR/contextnet/custom_model.py deleted file mode 120000 index 4b3f08ebb..000000000 --- a/benchmarks/DASB/LibriSpeech/ASR/contextnet/custom_model.py +++ /dev/null @@ -1 +0,0 @@ -../../../model/custom_model.py \ No newline at end of file diff --git a/benchmarks/DASB/LibriSpeech/ASR/contextnet/hparams/train_dac.yaml b/benchmarks/DASB/LibriSpeech/ASR/contextnet/hparams/train_dac.yaml deleted file mode 100644 index 4533e2e8d..000000000 --- a/benchmarks/DASB/LibriSpeech/ASR/contextnet/hparams/train_dac.yaml +++ /dev/null @@ -1,172 +0,0 @@ -# ################################ -# Recipe for training an dac-based ctc ASR system with librispeech. -# Decoding is performed with ctc greedy or LM-rescored decoder. -# -# Authors -# * pooneh Mousavi 2024 -# ################################ - -# Seed needs to be set at top of yaml, before objects with parameters are made -seed: 1986 -__set_seed: !apply:torch.manual_seed [!ref ] -output_folder: !ref results/MP3S-contextnet/dac/ -output_wer_folder: !ref / -save_folder: !ref /save -train_log: !ref /train_log.txt - -# Data files -data_folder: !PLACEHOLDER # e,g./path/to/LibriSpeech -# noise/ris dataset will automatically be downloaded -# data_folder_rirs: !ref -train_splits: ["train-clean-100"] -dev_splits: ["dev-clean"] -test_splits: ["test-clean", "test-other"] -skip_prep: False -ckpt_interval_minutes: 25 # save checkpoint every N min -train_csv: !ref /train-clean-100.csv -valid_csv: !ref /dev-clean.csv -test_csv: - - !ref /test-clean.csv - - !ref /test-other.csv - -num_layers_ssl: 25 #Number of layers in the SSL model (should be 25 for large) -### Config for Tokenizer -# DAC parameters -# model_type: [16khz, 24khz, 44khz, 44khz] -# vocab_size: [1024, 1024, 1024, 1024] -# model_bitrate: [8kbps, 8kbps, 8kbps, 16kbps] -# max_num_codebooks: [12, 32, 9, 18] -# embedding_dim: [1024, 1024, 1024, 128] -model_type: 24khz -vocab_size: 1024 -model_bitrate: 8kbps -num_codebooks: 2 # NOTE: must be smaller or equal to the maximum number of codebooks for the given model type -sample_rate: 24000 -encoder_dim: 1024 - - -# Training parameters -number_of_epochs: 20 -lr: 0.0002 -sorting: ascending -precision: fp32 - -# With data_parallel batch_size is split into N jobs -# With DDP batch_size is multiplied by N jobs -# Must be 3 per GPU to fit 32GB of VRAM -batch_size: 4 -test_batch_size: 1 - -# Dataloader options -train_dataloader_opts: - batch_size: !ref - -valid_dataloader_opts: - batch_size: !ref - -test_dataloader_opts: - batch_size: !ref - -# Model parameters -activation: !name:torch.nn.Sigmoid -dnn_layers: 1 -dnn_neurons: 640 -freeze_encoder: True - -# Outputs -output_neurons: 30 - -# Decoding parameters -blank_index: 0 -unk_index: 1 - -test_beam_search: - beam_size: 143 - topk: 1 - blank_index: !ref - space_token: ' ' # make sure this is the same as the one used in the tokenizer - beam_prune_logp: -12.0 - token_prune_min_logp: -1.2 - prune_history: True - alpha: 0.8 - beta: 1.2 - # can be downloaded from here https://www.openslr.org/11/ or trained with kenLM - # It can either be a .bin or .arpa ; note: .arpa is much slower at loading - # If you don't want to use an LM, comment it out or set it to null - kenlm_model_path: null - -# Functions and classes -epoch_counter: !new:speechbrain.utils.epoch_loop.EpochCounter - limit: !ref - -# EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) -codec: !new:speechbrain.lobes.models.discrete.dac.DAC - model_type: !ref - model_bitrate: !ref - load_pretrained: True - tag: latest - -discrete_embedding_layer: !new:custom_model.Discrete_EmbeddingLayer - num_codebooks: !ref - vocab_size: !ref - emb_dim: !ref - -attention_mlp: !new:custom_model.AttentionMLP - input_dim: !ref - hidden_dim: !ref - -enc: !new:speechbrain.lobes.models.ContextNet.ContextNet - input_shape: [null, null, !ref ] - strides: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] - -# only unitary strides to keep the frame rate - - -ctc_lin: !new:speechbrain.nnet.linear.Linear - input_size: 640 - n_neurons: !ref - -log_softmax: !new:speechbrain.nnet.activations.Softmax - apply_log: True - -ctc_cost: !name:speechbrain.nnet.losses.ctc_loss - blank_index: !ref - -modules: - enc: !ref - ctc_lin: !ref - attention_mlp: !ref - codec: !ref - discrete_embedding_layer: !ref - -model: !new:torch.nn.ModuleList - - [!ref , !ref , !ref , !ref ] - -model_opt_class: !name:torch.optim.Adam - lr: !ref - -lr_annealing_model: !new:speechbrain.nnet.schedulers.NewBobScheduler - initial_value: !ref - improvement_threshold: 0.0025 - annealing_factor: 0.8 - patient: 0 - -label_encoder: !new:speechbrain.dataio.encoder.CTCTextEncoder -checkpointer: !new:speechbrain.utils.checkpoints.Checkpointer - checkpoints_dir: !ref - recoverables: - model: !ref - attention_mlp: !ref - codec: !ref - discrete_embedding_layer: !ref - scheduler_model: !ref - counter: !ref - tokenizer: !ref - -train_logger: !new:speechbrain.utils.train_logger.FileTrainLogger - save_file: !ref - -error_rate_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats - -cer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats - split_tokens: True diff --git a/benchmarks/DASB/LibriSpeech/ASR/contextnet/hparams/train_discrete_ssl.yaml b/benchmarks/DASB/LibriSpeech/ASR/contextnet/hparams/train_discrete_ssl.yaml deleted file mode 100644 index c394c73c1..000000000 --- a/benchmarks/DASB/LibriSpeech/ASR/contextnet/hparams/train_discrete_ssl.yaml +++ /dev/null @@ -1,214 +0,0 @@ -# ################################ -# Recipe for training an discrete_ssl-based ctc ASR system with librispeech. -# Decoding is performed with ctc greedy or LM-rescored decoder. -# -# Authors -# * pooneh Mousavi 2024 -# ################################ - -# Seed needs to be set at top of yaml, before objects with parameters are made -seed: 1986 -__set_seed: !apply:torch.manual_seed [!ref ] -output_folder: !ref results/MP3S-contextnet/encodec/ -output_wer_folder: !ref / -save_folder: !ref /save -train_log: !ref /train_log.txt - -# Data files -data_folder: !PLACEHOLDER # e,g./path/to/LibriSpeech -# noise/ris dataset will automatically be downloaded -# data_folder_rirs: !ref -train_splits: ["train-clean-100"] -dev_splits: ["dev-clean"] -test_splits: ["test-clean", "test-other"] -skip_prep: False -ckpt_interval_minutes: 25 # save checkpoint every N min -train_csv: !ref /train-clean-100.csv -valid_csv: !ref /dev-clean.csv -test_csv: - - !ref /test-clean.csv - - !ref /test-other.csv - -num_layers_ssl: 25 #Number of layers in the SSL model (should be 25 for large) - -### Configuration for discrete SSL model -# ssl_model_type: hubert, wavlm, wav2vec2 -# ssl_hub: facebook/hubert-large-ll60k, microsoft/wavlm-large, facebook/wav2vec2-large -ssl_model_type: hubert # hubert, wavml or wav2vec2 -ssl_hub: facebook/hubert-large-ll60k -ssl_folder: !ref /ssl_checkpoint -kmeans_repo_id: speechbrain/SSL_Quantization -kmeans_cache_dir: !ref /kmeans_checkpoint -kmeans_dataset: LibriSpeech-100-360-500 -freeze_ssl: True -freeze_feature_extractor: True -num_clusters: 1000 - -### Config for Tokenizer -# Layer number should be among the supported layers for discrete SSL models(kmenas model should be available for that layer) -# ssl_layer_num: [3, 7, 12, 23] -# deduplicate: [False, False, False, False] -# bpe_tokenizer_path: [null , null, null, null] -ssl_layer_num: [1, 3, 7, 12, 18, 23] -num_codebooks: 6 -deduplicate: [False, False, False, False, False, False] -bpe_tokenizer_path: [null, null, null, null, null, null] -sample_rate: 16000 -encoder_dim: 1024 - -# Training parameters -number_of_epochs: 20 -lr: 0.0002 -sorting: ascending -precision: fp32 - -# With data_parallel batch_size is split into N jobs -# With DDP batch_size is multiplied by N jobs -# Must be 3 per GPU to fit 32GB of VRAM -batch_size: 4 -test_batch_size: 1 - -# Dataloader options -train_dataloader_opts: - batch_size: !ref - -valid_dataloader_opts: - batch_size: !ref - -test_dataloader_opts: - batch_size: !ref - -# Model parameters -activation: !name:torch.nn.Sigmoid -dnn_layers: 1 -dnn_neurons: 640 -freeze_encoder: True - -# Outputs -output_neurons: 30 - -# Decoding parameters -blank_index: 0 -unk_index: 1 - -test_beam_search: - beam_size: 143 - topk: 1 - blank_index: !ref - space_token: ' ' # make sure this is the same as the one used in the tokenizer - beam_prune_logp: -12.0 - token_prune_min_logp: -1.2 - prune_history: True - alpha: 0.8 - beta: 1.2 - # can be downloaded from here https://www.openslr.org/11/ or trained with kenLM - # It can either be a .bin or .arpa ; note: .arpa is much slower at loading - # If you don't want to use an LM, comment it out or set it to null - kenlm_model_path: null - -# Functions and classes -epoch_counter: !new:speechbrain.utils.epoch_loop.EpochCounter - limit: !ref - -# EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) -tokenizer_config: - SSL_layers: !ref - deduplicates: !ref - bpe_tokenizers: !ref - -ssl_model: !apply:speechbrain.utils.hparams.choice - value: !ref - choices: - wavlm: !new:speechbrain.lobes.models.huggingface_transformers.wavlm.WavLM - source: !ref - output_norm: False - freeze: !ref - freeze_feature_extractor: !ref - output_all_hiddens: True - save_path: !ref - hubert: !new:speechbrain.lobes.models.huggingface_transformers.hubert.HuBERT - source: !ref - output_norm: False - freeze: !ref - freeze_feature_extractor: !ref - output_all_hiddens: True - save_path: !ref - wav2vec2: !new:speechbrain.lobes.models.huggingface_transformers.wav2vec2.Wav2Vec2 - source: !ref - output_norm: False - freeze: !ref - freeze_feature_extractor: !ref - output_all_hiddens: True - save_path: !ref - -codec: !new:speechbrain.lobes.models.huggingface_transformers.discrete_ssl.DiscreteSSL - save_path: !ref - ssl_model: !ref - kmeans_dataset: !ref - kmeans_repo_id: !ref - num_clusters: !ref - -discrete_embedding_layer: !new:custom_model.Discrete_EmbeddingLayer - num_codebooks: !ref - vocab_size: !ref - emb_dim: !ref - -attention_mlp: !new:custom_model.AttentionMLP - input_dim: !ref - hidden_dim: !ref - -enc: !new:speechbrain.lobes.models.ContextNet.ContextNet - input_shape: [null, null, !ref ] - strides: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] - -# only unitary strides to keep the frame rate - - -ctc_lin: !new:speechbrain.nnet.linear.Linear - input_size: 640 - n_neurons: !ref - -log_softmax: !new:speechbrain.nnet.activations.Softmax - apply_log: True - -ctc_cost: !name:speechbrain.nnet.losses.ctc_loss - blank_index: !ref - -modules: - enc: !ref - ctc_lin: !ref - attention_mlp: !ref - codec: !ref - discrete_embedding_layer: !ref - -model: !new:torch.nn.ModuleList - - [!ref , !ref , !ref , !ref ] - -model_opt_class: !name:torch.optim.Adam - lr: !ref - -lr_annealing_model: !new:speechbrain.nnet.schedulers.NewBobScheduler - initial_value: !ref - improvement_threshold: 0.0025 - annealing_factor: 0.8 - patient: 0 - -label_encoder: !new:speechbrain.dataio.encoder.CTCTextEncoder -checkpointer: !new:speechbrain.utils.checkpoints.Checkpointer - checkpoints_dir: !ref - recoverables: - model: !ref - attention_mlp: !ref - codec: !ref - discrete_embedding_layer: !ref - scheduler_model: !ref - counter: !ref - tokenizer: !ref - -train_logger: !new:speechbrain.utils.train_logger.FileTrainLogger - save_file: !ref - -error_rate_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats - -cer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats - split_tokens: True diff --git a/benchmarks/DASB/LibriSpeech/ASR/contextnet/hparams/train_encodec.yaml b/benchmarks/DASB/LibriSpeech/ASR/contextnet/hparams/train_encodec.yaml deleted file mode 100644 index 6163550e9..000000000 --- a/benchmarks/DASB/LibriSpeech/ASR/contextnet/hparams/train_encodec.yaml +++ /dev/null @@ -1,178 +0,0 @@ -# ################################ -# Recipe for training an encodec-based ctc ASR system with librispeech. -# Decoding is performed with ctc greedy or LM-rescored decoder. -# -# Authors -# * pooneh Mousavi 2024 -# ################################ - -# Seed needs to be set at top of yaml, before objects with parameters are made -seed: 1986 -__set_seed: !apply:torch.manual_seed [!ref ] -output_folder: !ref results/MP3S-contextnet/encodec/ -output_wer_folder: !ref / -save_folder: !ref /save -train_log: !ref /train_log.txt - -# Data files -data_folder: !PLACEHOLDER # e,g./path/to/LibriSpeech -# noise/ris dataset will automatically be downloaded -# data_folder_rirs: !ref -train_splits: ["train-clean-100"] -dev_splits: ["dev-clean"] -test_splits: ["test-clean", "test-other"] -skip_prep: False -ckpt_interval_minutes: 25 # save checkpoint every N min -train_csv: !ref /train-clean-100.csv -valid_csv: !ref /dev-clean.csv -test_csv: - - !ref /test-clean.csv - - !ref /test-other.csv - -num_layers_ssl: 25 #Number of layers in the SSL model (should be 25 for large) -### Config for Tokenizer -# EnCodec parameters -# sample_rate: [24000, 24000, 24000, 24000] -# vocab_size: [1024, 1024, 1024, 1024] -# bandwidth: [1.5, 3.0, 6.0, 12.0, 24.0] -# num_codebooks: [2, 4, 8, 16, 32] -vocab_size: 1024 -bandwidth: 1.5 -num_codebooks: 2 -sample_rate: 24000 -# Feature parameters -encoder_dim: 1024 -# If set to True, the encoder_dim should be set to the dim of the tokenizer. For encodec it is 128. -init_embedding: False -freeze_embedding: False - -# Training parameters -number_of_epochs: 20 -lr: 0.0002 -sorting: ascending -precision: fp32 - -# With data_parallel batch_size is split into N jobs -# With DDP batch_size is multiplied by N jobs -# Must be 3 per GPU to fit 32GB of VRAM -batch_size: 4 -test_batch_size: 1 - -# Dataloader options -train_dataloader_opts: - batch_size: !ref - -valid_dataloader_opts: - batch_size: !ref - -test_dataloader_opts: - batch_size: !ref - -# Model parameters -activation: !name:torch.nn.Sigmoid -dnn_layers: 1 -dnn_neurons: 640 -freeze_encoder: True - -# Outputs -output_neurons: 30 - -# Decoding parameters -blank_index: 0 -unk_index: 1 - -test_beam_search: - beam_size: 143 - topk: 1 - blank_index: !ref - space_token: ' ' # make sure this is the same as the one used in the tokenizer - beam_prune_logp: -12.0 - token_prune_min_logp: -1.2 - prune_history: True - alpha: 0.8 - beta: 1.2 - # can be downloaded from here https://www.openslr.org/11/ or trained with kenLM - # It can either be a .bin or .arpa ; note: .arpa is much slower at loading - # If you don't want to use an LM, comment it out or set it to null - kenlm_model_path: null - -# Functions and classes -epoch_counter: !new:speechbrain.utils.epoch_loop.EpochCounter - limit: !ref - -# EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) -codec: !new:speechbrain.lobes.models.huggingface_transformers.encodec.Encodec - source: facebook/encodec_24khz # Only the 24kHz version supports mono audio - save_path: !ref - sample_rate: !ref - bandwidth: !ref - flat_embeddings: False - freeze: True - renorm_embeddings: False - -discrete_embedding_layer: !new:custom_model.Discrete_EmbeddingLayer - num_codebooks: !ref - vocab_size: !ref - emb_dim: !ref - freeze: !ref - init: !ref - -attention_mlp: !new:custom_model.AttentionMLP - input_dim: !ref - hidden_dim: !ref - -enc: !new:speechbrain.lobes.models.ContextNet.ContextNet - input_shape: [null, null, !ref ] - strides: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] - -# only unitary strides to keep the frame rate - - -ctc_lin: !new:speechbrain.nnet.linear.Linear - input_size: 640 - n_neurons: !ref - -log_softmax: !new:speechbrain.nnet.activations.Softmax - apply_log: True - -ctc_cost: !name:speechbrain.nnet.losses.ctc_loss - blank_index: !ref - -modules: - enc: !ref - ctc_lin: !ref - attention_mlp: !ref - codec: !ref - discrete_embedding_layer: !ref - -model: !new:torch.nn.ModuleList - - [!ref , !ref , !ref , !ref ] - -model_opt_class: !name:torch.optim.Adam - lr: !ref - -lr_annealing_model: !new:speechbrain.nnet.schedulers.NewBobScheduler - initial_value: !ref - improvement_threshold: 0.0025 - annealing_factor: 0.8 - patient: 0 - -label_encoder: !new:speechbrain.dataio.encoder.CTCTextEncoder -checkpointer: !new:speechbrain.utils.checkpoints.Checkpointer - checkpoints_dir: !ref - recoverables: - model: !ref - attention_mlp: !ref - codec: !ref - discrete_embedding_layer: !ref - scheduler_model: !ref - counter: !ref - tokenizer: !ref - -train_logger: !new:speechbrain.utils.train_logger.FileTrainLogger - save_file: !ref - -error_rate_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats - -cer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats - split_tokens: True diff --git a/benchmarks/DASB/LibriSpeech/ASR/contextnet/hparams/train_speech_tokenizer.yaml b/benchmarks/DASB/LibriSpeech/ASR/contextnet/hparams/train_speech_tokenizer.yaml deleted file mode 100644 index aef1307ec..000000000 --- a/benchmarks/DASB/LibriSpeech/ASR/contextnet/hparams/train_speech_tokenizer.yaml +++ /dev/null @@ -1,160 +0,0 @@ -# ################################ -# Recipe for training an speech_tokenizer-based ctc ASR system with librispeech. -# Decoding is performed with ctc greedy or LM-rescored decoder. -# -# Authors -# * pooneh Mousavi 2024 -# ################################ - -# Seed needs to be set at top of yaml, before objects with parameters are made -seed: 1986 -__set_seed: !apply:torch.manual_seed [!ref ] -output_folder: !ref results/MP3S-contextnet/speech_tokenizer/ -output_wer_folder: !ref / -save_folder: !ref /save -train_log: !ref /train_log.txt - -# Data files -data_folder: !PLACEHOLDER # e,g./path/to/LibriSpeech -# noise/ris dataset will automatically be downloaded -# data_folder_rirs: !ref -train_splits: ["train-clean-100"] -dev_splits: ["dev-clean"] -test_splits: ["test-clean", "test-other"] -skip_prep: False -ckpt_interval_minutes: 25 # save checkpoint every N min -train_csv: !ref /train-clean-100.csv -valid_csv: !ref /dev-clean.csv -test_csv: - - !ref /test-clean.csv - - !ref /test-other.csv - -num_layers_ssl: 25 #Number of layers in the SSL model (should be 25 for large) -### Config for Tokenizer -vocab_size: 1024 -num_codebooks: 2 -sample_rate: 16000 - -encoder_dim: 1024 -# Training parameters -number_of_epochs: 20 -lr: 0.0002 -sorting: ascending -precision: fp32 - -# With data_parallel batch_size is split into N jobs -# With DDP batch_size is multiplied by N jobs -# Must be 3 per GPU to fit 32GB of VRAM -batch_size: 4 -test_batch_size: 1 - -# Dataloader options -train_dataloader_opts: - batch_size: !ref - -valid_dataloader_opts: - batch_size: !ref - -test_dataloader_opts: - batch_size: !ref - -# Model parameters -activation: !name:torch.nn.Sigmoid -dnn_layers: 1 -dnn_neurons: 640 -freeze_encoder: True - -# Outputs -output_neurons: 30 - -# Decoding parameters -blank_index: 0 -unk_index: 1 - -test_beam_search: - beam_size: 143 - topk: 1 - blank_index: !ref - space_token: ' ' # make sure this is the same as the one used in the tokenizer - beam_prune_logp: -12.0 - token_prune_min_logp: -1.2 - prune_history: True - alpha: 0.8 - beta: 1.2 - # can be downloaded from here https://www.openslr.org/11/ or trained with kenLM - # It can either be a .bin or .arpa ; note: .arpa is much slower at loading - # If you don't want to use an LM, comment it out or set it to null - kenlm_model_path: null - -# Functions and classes -epoch_counter: !new:speechbrain.utils.epoch_loop.EpochCounter - limit: !ref - -# EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) -codec: !new:speechbrain.lobes.models.discrete.speechtokenizer_interface.SpeechTokenizer_interface - source: fnlp/SpeechTokenizer # Only the 24kHz version supports mono audio - save_path: !ref -discrete_embedding_layer: !new:custom_model.Discrete_EmbeddingLayer - num_codebooks: !ref - vocab_size: !ref - emb_dim: !ref - -attention_mlp: !new:custom_model.AttentionMLP - input_dim: !ref - hidden_dim: !ref - -enc: !new:speechbrain.lobes.models.ContextNet.ContextNet - input_shape: [null, null, !ref ] - strides: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] - -# only unitary strides to keep the frame rate - - -ctc_lin: !new:speechbrain.nnet.linear.Linear - input_size: 640 - n_neurons: !ref - -log_softmax: !new:speechbrain.nnet.activations.Softmax - apply_log: True - -ctc_cost: !name:speechbrain.nnet.losses.ctc_loss - blank_index: !ref - -modules: - enc: !ref - ctc_lin: !ref - attention_mlp: !ref - codec: !ref - discrete_embedding_layer: !ref - -model: !new:torch.nn.ModuleList - - [!ref , !ref , !ref , !ref ] - -model_opt_class: !name:torch.optim.Adam - lr: !ref - -lr_annealing_model: !new:speechbrain.nnet.schedulers.NewBobScheduler - initial_value: !ref - improvement_threshold: 0.0025 - annealing_factor: 0.8 - patient: 0 - -label_encoder: !new:speechbrain.dataio.encoder.CTCTextEncoder -checkpointer: !new:speechbrain.utils.checkpoints.Checkpointer - checkpoints_dir: !ref - recoverables: - model: !ref - attention_mlp: !ref - codec: !ref - discrete_embedding_layer: !ref - scheduler_model: !ref - counter: !ref - tokenizer: !ref - -train_logger: !new:speechbrain.utils.train_logger.FileTrainLogger - save_file: !ref - -error_rate_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats - -cer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats - split_tokens: True diff --git a/benchmarks/DASB/LibriSpeech/ASR/contextnet/hparams/train_weighted_ssl.yaml b/benchmarks/DASB/LibriSpeech/ASR/contextnet/hparams/train_weighted_ssl.yaml deleted file mode 100644 index 6d806f0a5..000000000 --- a/benchmarks/DASB/LibriSpeech/ASR/contextnet/hparams/train_weighted_ssl.yaml +++ /dev/null @@ -1,157 +0,0 @@ -# ################################ -# Recipe for training an encodec-based ctc ASR system with librispeech. -# Decoding is performed with ctc greedy or LM-rescored decoder. -# -# Authors -# * pooneh Mousavi 2024 -# ################################ - -# Seed needs to be set at top of yaml, before objects with parameters are made -seed: 1986 -__set_seed: !apply:torch.manual_seed [!ref ] -output_folder: !ref results/MP3S-contextnet/encodec/ -output_wer_folder: !ref / -save_folder: !ref /save -train_log: !ref /train_log.txt - -# Data files -data_folder: !PLACEHOLDER # e,g./path/to/LibriSpeech -# noise/ris dataset will automatically be downloaded -# data_folder_rirs: !ref -train_splits: ["train-clean-100"] -dev_splits: ["dev-clean"] -test_splits: ["test-clean", "test-other"] -skip_prep: False -ckpt_interval_minutes: 25 # save checkpoint every N min -train_csv: !ref /train-clean-100.csv -valid_csv: !ref /dev-clean.csv -test_csv: - - !ref /test-clean.csv - - !ref /test-other.csv - -num_layers_ssl: 25 #Number of layers in the SSL model (should be 25 for large) -ssl_hub: microsoft/wavlm-large -ssl_folder: !ref /ssl_checkpoints -encoder_dim: 1024 - -# Training parameters -number_of_epochs: 2 -lr: 0.0002 -lr_weights: 0.01 -sorting: ascending -precision: fp32 -sample_rate: 16000 - -# With data_parallel batch_size is split into N jobs -# With DDP batch_size is multiplied by N jobs -# Must be 3 per GPU to fit 32GB of VRAM -batch_size: 4 -test_batch_size: 1 - -# Dataloader options -train_dataloader_opts: - batch_size: !ref - -valid_dataloader_opts: - batch_size: !ref - -test_dataloader_opts: - batch_size: !ref - -# Model parameters -activation: !name:torch.nn.Sigmoid -dnn_layers: 1 -dnn_neurons: 640 -freeze_encoder: True - -# Outputs -output_neurons: 30 - -# Decoding parameters -blank_index: 0 -unk_index: 1 - -test_beam_search: - beam_size: 143 - topk: 1 - blank_index: !ref - space_token: ' ' # make sure this is the same as the one used in the tokenizer - beam_prune_logp: -12.0 - token_prune_min_logp: -1.2 - prune_history: True - alpha: 0.8 - beta: 1.2 - # can be downloaded from here https://www.openslr.org/11/ or trained with kenLM - # It can either be a .bin or .arpa ; note: .arpa is much slower at loading - # If you don't want to use an LM, comment it out or set it to null - kenlm_model_path: null - -# Functions and classes -epoch_counter: !new:speechbrain.utils.epoch_loop.EpochCounter - limit: !ref - -weighted_ssl_model: !new:speechbrain.lobes.models.huggingface_transformers.WeightedSSLModel # yamllint disable-line rule:line-length - hub: !ref - save_path: !ref - -enc: !new:speechbrain.lobes.models.ContextNet.ContextNet - input_shape: [null, null, !ref ] - strides: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] - -# only unitary strides to keep the frame rate - - -ctc_lin: !new:speechbrain.nnet.linear.Linear - input_size: 640 - n_neurons: !ref - -log_softmax: !new:speechbrain.nnet.activations.Softmax - apply_log: True - -ctc_cost: !name:speechbrain.nnet.losses.ctc_loss - blank_index: !ref - -modules: - enc: !ref - ctc_lin: !ref - weighted_ssl_model: !ref - -model: !new:torch.nn.ModuleList - - [!ref , !ref ] - -model_opt_class: !name:torch.optim.Adam - lr: !ref - -weights_opt_class: !name:torch.optim.Adam - lr: !ref - -lr_annealing_model: !new:speechbrain.nnet.schedulers.NewBobScheduler - initial_value: !ref - improvement_threshold: 0.0025 - annealing_factor: 0.8 - patient: 0 - -lr_annealing_weights: !new:speechbrain.nnet.schedulers.NewBobScheduler - initial_value: !ref - improvement_threshold: 0.0025 - annealing_factor: 0.9 - patient: 0 - -label_encoder: !new:speechbrain.dataio.encoder.CTCTextEncoder -checkpointer: !new:speechbrain.utils.checkpoints.Checkpointer - checkpoints_dir: !ref - recoverables: - model: !ref - ssl_model: !ref - scheduler_model: !ref - scheduler_encoder: !ref - counter: !ref - tokenizer: !ref - -train_logger: !new:speechbrain.utils.train_logger.FileTrainLogger - save_file: !ref - -error_rate_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats - -cer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats - split_tokens: True diff --git a/benchmarks/DASB/LibriSpeech/ASR/contextnet/librispeech_prepare.py b/benchmarks/DASB/LibriSpeech/ASR/contextnet/librispeech_prepare.py deleted file mode 120000 index cf4adfd79..000000000 --- a/benchmarks/DASB/LibriSpeech/ASR/contextnet/librispeech_prepare.py +++ /dev/null @@ -1 +0,0 @@ -../../librispeech_prepare.py \ No newline at end of file diff --git a/benchmarks/DASB/LibriSpeech/ASR/contextnet/train_dac.py b/benchmarks/DASB/LibriSpeech/ASR/contextnet/train_dac.py deleted file mode 100644 index a177e48a5..000000000 --- a/benchmarks/DASB/LibriSpeech/ASR/contextnet/train_dac.py +++ /dev/null @@ -1,321 +0,0 @@ -#!/usr/bin/env/python3 -"""Recipe for training an discrete tokens + ctc ASR system with librispeech. -Decoding is performed with greedy decoding at validation time. -At test time, beamsearch is used with an optional external language model. - -Authors - * Pooneh Mousavi 2024 -""" - -import os -import sys -import torch -import logging -import speechbrain as sb -from speechbrain.utils.distributed import run_on_main, if_main_process -from hyperpyyaml import load_hyperpyyaml -from pathlib import Path -import torchaudio - -logger = logging.getLogger(__name__) - - -# Define training procedure -class ASR(sb.Brain): - def compute_forward(self, batch, stage): - """Forward computations from the waveform batches to the output probabilities.""" - batch = batch.to(self.device) - wavs, wav_lens = batch.sig - - # Forward pass - # Feature extraction and attention pooling - with torch.no_grad(): - self.hparams.codec.to(self.device).eval() - tokens, _ = self.hparams.codec( - wavs.unsqueeze(1), n_quantizers=self.hparams.num_codebooks - ) - embeddings = self.modules.discrete_embedding_layer( - tokens.movedim(-2, -1) - ) - att_w = self.modules.attention_mlp(embeddings) - feats = torch.matmul(att_w.transpose(2, -1), embeddings).squeeze(-2) - y = self.modules.enc(feats) - - # Compute outputs - p_tokens = None - logits = self.modules.ctc_lin(y) - p_ctc = self.hparams.log_softmax(logits) - - if stage == sb.Stage.VALID: - p_tokens = sb.decoders.ctc_greedy_decode( - p_ctc, wav_lens, blank_id=self.hparams.blank_index - ) - elif stage == sb.Stage.TEST: - p_tokens = test_searcher(p_ctc, wav_lens) - - return p_ctc, wav_lens, p_tokens - - def compute_objectives(self, predictions, batch, stage): - """Computes the loss (CTC+NLL) given predictions and targets.""" - - p_ctc, wav_lens, predicted_tokens = predictions - ids = batch.id - tokens, tokens_lens = batch.tokens - loss = self.hparams.ctc_cost(p_ctc, tokens, wav_lens, tokens_lens) - - if stage == sb.Stage.VALID: - # Decode token terms to words - predicted_words = [ - "".join(self.tokenizer.decode_ndim(utt_seq)).split(" ") - for utt_seq in predicted_tokens - ] - elif stage == sb.Stage.TEST: - predicted_words = [ - hyp[0].text.split(" ") for hyp in predicted_tokens - ] - - if stage != sb.Stage.TRAIN: - target_words = [wrd.split(" ") for wrd in batch.wrd] - self.wer_metric.append(ids, predicted_words, target_words) - self.cer_metric.append(ids, predicted_words, target_words) - - return loss - - def on_stage_start(self, stage, epoch): - """Gets called at the beginning of each epoch""" - if stage != sb.Stage.TRAIN: - self.cer_metric = self.hparams.cer_computer() - self.wer_metric = self.hparams.error_rate_computer() - - def on_stage_end(self, stage, stage_loss, epoch): - """Gets called at the end of an epoch.""" - # Compute/store important stats - stage_stats = {"loss": stage_loss} - if stage == sb.Stage.TRAIN: - self.train_stats = stage_stats - else: - stage_stats["CER"] = self.cer_metric.summarize("error_rate") - stage_stats["WER"] = self.wer_metric.summarize("error_rate") - - # Perform end-of-iteration things, like annealing, logging, etc. - if stage == sb.Stage.VALID: - old_lr_model, new_lr_model = self.hparams.lr_annealing_model( - stage_stats["loss"] - ) - sb.nnet.schedulers.update_learning_rate( - self.model_optimizer, new_lr_model - ) - - self.hparams.train_logger.log_stats( - stats_meta={"epoch": epoch, "lr_model": old_lr_model}, - train_stats=self.train_stats, - valid_stats=stage_stats, - ) - self.checkpointer.save_and_keep_only( - meta={"WER": stage_stats["WER"]}, min_keys=["WER"], - ) - elif stage == sb.Stage.TEST: - self.hparams.train_logger.log_stats( - stats_meta={"Epoch loaded": self.hparams.epoch_counter.current}, - test_stats=stage_stats, - ) - if if_main_process(): - with open(self.hparams.test_wer_file, "w") as w: - self.wer_metric.write_stats(w) - - def init_optimizers(self): - "Initializes the model optimizer" - self.model_optimizer = self.hparams.model_opt_class( - self.hparams.model.parameters() - ) - self.optimizers_dict = { - "model_optimizer": self.model_optimizer, - } - # Initializing the weights - if self.checkpointer is not None: - self.checkpointer.add_recoverable("modelopt", self.model_optimizer) - - -def dataio_prepare(hparams): - """This function prepares the datasets to be used in the brain class. - It also defines the data processing pipeline through user-defined functions.""" - data_folder = hparams["data_folder"] - - train_data = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=hparams["train_csv"], replacements={"data_root": data_folder}, - ) - - if hparams["sorting"] == "ascending": - # we sort training data to speed up training and get better results. - train_data = train_data.filtered_sorted(sort_key="duration") - # when sorting do not shuffle in dataloader ! otherwise is pointless - hparams["train_dataloader_opts"]["shuffle"] = False - - elif hparams["sorting"] == "descending": - train_data = train_data.filtered_sorted( - sort_key="duration", reverse=True - ) - # when sorting do not shuffle in dataloader ! otherwise is pointless - hparams["train_dataloader_opts"]["shuffle"] = False - - elif hparams["sorting"] == "random": - pass - - else: - raise NotImplementedError( - "sorting must be random, ascending or descending" - ) - - valid_data = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=hparams["valid_csv"], replacements={"data_root": data_folder}, - ) - valid_data = valid_data.filtered_sorted(sort_key="duration") - - # test is separate - test_datasets = {} - for csv_file in hparams["test_csv"]: - name = Path(csv_file).stem - test_datasets[name] = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=csv_file, replacements={"data_root": data_folder} - ) - test_datasets[name] = test_datasets[name].filtered_sorted( - sort_key="duration" - ) - - datasets = [train_data, valid_data] + [i for k, i in test_datasets.items()] - - # 2. Define audio pipeline: - @sb.utils.data_pipeline.takes("wav") - @sb.utils.data_pipeline.provides("sig") - def audio_pipeline(wav): - sig = sb.dataio.dataio.read_audio(wav) - info = torchaudio.info(wav) - resampled = torchaudio.transforms.Resample( - info.sample_rate, hparams["sample_rate"], - )(sig) - # resampled = resampled.unsqueeze(0) - return resampled - - sb.dataio.dataset.add_dynamic_item(datasets, audio_pipeline) - label_encoder = sb.dataio.encoder.CTCTextEncoder() - - # 3. Define text pipeline: - @sb.utils.data_pipeline.takes("wrd") - @sb.utils.data_pipeline.provides( - "wrd", "char_list", "tokens_list", "tokens" - ) - def text_pipeline(wrd): - yield wrd - char_list = list(wrd) - yield char_list - tokens_list = label_encoder.encode_sequence(char_list) - yield tokens_list - tokens = torch.LongTensor(tokens_list) - yield tokens - - sb.dataio.dataset.add_dynamic_item(datasets, text_pipeline) - - lab_enc_file = os.path.join(hparams["save_folder"], "label_encoder.txt") - special_labels = { - "blank_label": hparams["blank_index"], - "unk_label": hparams["unk_index"], - } - label_encoder.load_or_create( - path=lab_enc_file, - from_didatasets=[train_data], - output_key="char_list", - special_labels=special_labels, - sequence_input=True, - ) - - # 4. Set output: - sb.dataio.dataset.set_output_keys( - datasets, ["id", "sig", "wrd", "char_list", "tokens"], - ) - return train_data, valid_data, test_datasets, label_encoder - - -if __name__ == "__main__": - - # CLI: - hparams_file, run_opts, overrides = sb.parse_arguments(sys.argv[1:]) - - # If distributed_launch=True then - # create ddp_group with the right communication protocol - sb.utils.distributed.ddp_init_group(run_opts) - - with open(hparams_file) as fin: - hparams = load_hyperpyyaml(fin, overrides) - - # Create experiment directory - sb.create_experiment_directory( - experiment_directory=hparams["output_folder"], - hyperparams_to_save=hparams_file, - overrides=overrides, - ) - - # Dataset prep (parsing Librispeech) - from librispeech_prepare import prepare_librispeech # noqa - - # multi-gpu (ddp) save data preparation - run_on_main( - prepare_librispeech, - kwargs={ - "data_folder": hparams["data_folder"], - "tr_splits": hparams["train_splits"], - "dev_splits": hparams["dev_splits"], - "te_splits": hparams["test_splits"], - "save_folder": hparams["output_folder"], - "merge_lst": hparams["train_splits"], - "merge_name": "train.csv", - "skip_prep": hparams["skip_prep"], - }, - ) - - # here we create the datasets objects as well as tokenization and encoding - train_data, valid_data, test_datasets, label_encoder = dataio_prepare( - hparams - ) - - # Trainer initialization - asr_brain = ASR( - modules=hparams["modules"], - hparams=hparams, - run_opts=run_opts, - checkpointer=hparams["checkpointer"], - ) - - # We dynamicaly add the tokenizer to our brain class. - asr_brain.tokenizer = label_encoder - - ind2lab = label_encoder.ind2lab - vocab_list = [ind2lab[x] for x in range(len(ind2lab))] - - from speechbrain.decoders.ctc import CTCBeamSearcher - - test_searcher = CTCBeamSearcher( - **hparams["test_beam_search"], vocab_list=vocab_list, - ) - - # Training - asr_brain.fit( - asr_brain.hparams.epoch_counter, - train_data, - valid_data, - train_loader_kwargs=hparams["train_dataloader_opts"], - valid_loader_kwargs=hparams["valid_dataloader_opts"], - ) - - # Testing - if not os.path.exists(hparams["output_wer_folder"]): - os.makedirs(hparams["output_wer_folder"]) - - for k in test_datasets.keys(): # keys are test_clean, test_other etc - asr_brain.hparams.test_wer_file = os.path.join( - hparams["output_wer_folder"], f"wer_{k}.txt" - ) - asr_brain.evaluate( - test_datasets[k], - test_loader_kwargs=hparams["test_dataloader_opts"], - min_key="WER", - ) diff --git a/benchmarks/DASB/LibriSpeech/ASR/contextnet/train_discrete_ssl.py b/benchmarks/DASB/LibriSpeech/ASR/contextnet/train_discrete_ssl.py deleted file mode 100644 index 640f6a220..000000000 --- a/benchmarks/DASB/LibriSpeech/ASR/contextnet/train_discrete_ssl.py +++ /dev/null @@ -1,319 +0,0 @@ -#!/usr/bin/env/python3 -"""Recipe for training an discrete tokens + ctc ASR system with librispeech. -Decoding is performed with greedy decoding at validation time. -At test time, beamsearch is used with an optional external language model. - -Authors - * Pooneh Mousavi 2024 -""" - -import os -import sys -import torch -import logging -import speechbrain as sb -from speechbrain.utils.distributed import run_on_main, if_main_process -from hyperpyyaml import load_hyperpyyaml -from pathlib import Path -import torchaudio - -logger = logging.getLogger(__name__) - - -# Define training procedure -class ASR(sb.Brain): - def compute_forward(self, batch, stage): - """Forward computations from the waveform batches to the output probabilities.""" - batch = batch.to(self.device) - wavs, wav_lens = batch.sig - - # Forward pass - # Feature extraction and attention pooling - with torch.no_grad(): - self.hparams.codec.to(self.device).eval() - tokens, _, _ = self.hparams.codec( - wavs, wav_lens, **self.hparams.tokenizer_config - ) - embeddings = self.modules.discrete_embedding_layer(tokens) - att_w = self.modules.attention_mlp(embeddings) - feats = torch.matmul(att_w.transpose(2, -1), embeddings).squeeze(-2) - y = self.modules.enc(feats) - - # Compute outputs - p_tokens = None - logits = self.modules.ctc_lin(y) - p_ctc = self.hparams.log_softmax(logits) - - if stage == sb.Stage.VALID: - p_tokens = sb.decoders.ctc_greedy_decode( - p_ctc, wav_lens, blank_id=self.hparams.blank_index - ) - elif stage == sb.Stage.TEST: - p_tokens = test_searcher(p_ctc, wav_lens) - - return p_ctc, wav_lens, p_tokens - - def compute_objectives(self, predictions, batch, stage): - """Computes the loss (CTC+NLL) given predictions and targets.""" - - p_ctc, wav_lens, predicted_tokens = predictions - ids = batch.id - tokens, tokens_lens = batch.tokens - loss = self.hparams.ctc_cost(p_ctc, tokens, wav_lens, tokens_lens) - - if stage == sb.Stage.VALID: - # Decode token terms to words - predicted_words = [ - "".join(self.tokenizer.decode_ndim(utt_seq)).split(" ") - for utt_seq in predicted_tokens - ] - elif stage == sb.Stage.TEST: - predicted_words = [ - hyp[0].text.split(" ") for hyp in predicted_tokens - ] - - if stage != sb.Stage.TRAIN: - target_words = [wrd.split(" ") for wrd in batch.wrd] - self.wer_metric.append(ids, predicted_words, target_words) - self.cer_metric.append(ids, predicted_words, target_words) - - return loss - - def on_stage_start(self, stage, epoch): - """Gets called at the beginning of each epoch""" - if stage != sb.Stage.TRAIN: - self.cer_metric = self.hparams.cer_computer() - self.wer_metric = self.hparams.error_rate_computer() - - def on_stage_end(self, stage, stage_loss, epoch): - """Gets called at the end of an epoch.""" - # Compute/store important stats - stage_stats = {"loss": stage_loss} - if stage == sb.Stage.TRAIN: - self.train_stats = stage_stats - else: - stage_stats["CER"] = self.cer_metric.summarize("error_rate") - stage_stats["WER"] = self.wer_metric.summarize("error_rate") - - # Perform end-of-iteration things, like annealing, logging, etc. - if stage == sb.Stage.VALID: - old_lr_model, new_lr_model = self.hparams.lr_annealing_model( - stage_stats["loss"] - ) - sb.nnet.schedulers.update_learning_rate( - self.model_optimizer, new_lr_model - ) - - self.hparams.train_logger.log_stats( - stats_meta={"epoch": epoch, "lr_model": old_lr_model}, - train_stats=self.train_stats, - valid_stats=stage_stats, - ) - self.checkpointer.save_and_keep_only( - meta={"WER": stage_stats["WER"]}, min_keys=["WER"], - ) - elif stage == sb.Stage.TEST: - self.hparams.train_logger.log_stats( - stats_meta={"Epoch loaded": self.hparams.epoch_counter.current}, - test_stats=stage_stats, - ) - if if_main_process(): - with open(self.hparams.test_wer_file, "w") as w: - self.wer_metric.write_stats(w) - - def init_optimizers(self): - "Initializes the model optimizer" - self.model_optimizer = self.hparams.model_opt_class( - self.hparams.model.parameters() - ) - self.optimizers_dict = { - "model_optimizer": self.model_optimizer, - } - # Initializing the weights - if self.checkpointer is not None: - self.checkpointer.add_recoverable("modelopt", self.model_optimizer) - - -def dataio_prepare(hparams): - """This function prepares the datasets to be used in the brain class. - It also defines the data processing pipeline through user-defined functions.""" - data_folder = hparams["data_folder"] - - train_data = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=hparams["train_csv"], replacements={"data_root": data_folder}, - ) - - if hparams["sorting"] == "ascending": - # we sort training data to speed up training and get better results. - train_data = train_data.filtered_sorted(sort_key="duration") - # when sorting do not shuffle in dataloader ! otherwise is pointless - hparams["train_dataloader_opts"]["shuffle"] = False - - elif hparams["sorting"] == "descending": - train_data = train_data.filtered_sorted( - sort_key="duration", reverse=True - ) - # when sorting do not shuffle in dataloader ! otherwise is pointless - hparams["train_dataloader_opts"]["shuffle"] = False - - elif hparams["sorting"] == "random": - pass - - else: - raise NotImplementedError( - "sorting must be random, ascending or descending" - ) - - valid_data = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=hparams["valid_csv"], replacements={"data_root": data_folder}, - ) - valid_data = valid_data.filtered_sorted(sort_key="duration") - - # test is separate - test_datasets = {} - for csv_file in hparams["test_csv"]: - name = Path(csv_file).stem - test_datasets[name] = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=csv_file, replacements={"data_root": data_folder} - ) - test_datasets[name] = test_datasets[name].filtered_sorted( - sort_key="duration" - ) - - datasets = [train_data, valid_data] + [i for k, i in test_datasets.items()] - - # 2. Define audio pipeline: - @sb.utils.data_pipeline.takes("wav") - @sb.utils.data_pipeline.provides("sig") - def audio_pipeline(wav): - sig = sb.dataio.dataio.read_audio(wav) - info = torchaudio.info(wav) - resampled = torchaudio.transforms.Resample( - info.sample_rate, hparams["sample_rate"], - )(sig) - # resampled = resampled.unsqueeze(0) - return resampled - - sb.dataio.dataset.add_dynamic_item(datasets, audio_pipeline) - label_encoder = sb.dataio.encoder.CTCTextEncoder() - - # 3. Define text pipeline: - @sb.utils.data_pipeline.takes("wrd") - @sb.utils.data_pipeline.provides( - "wrd", "char_list", "tokens_list", "tokens" - ) - def text_pipeline(wrd): - yield wrd - char_list = list(wrd) - yield char_list - tokens_list = label_encoder.encode_sequence(char_list) - yield tokens_list - tokens = torch.LongTensor(tokens_list) - yield tokens - - sb.dataio.dataset.add_dynamic_item(datasets, text_pipeline) - - lab_enc_file = os.path.join(hparams["save_folder"], "label_encoder.txt") - special_labels = { - "blank_label": hparams["blank_index"], - "unk_label": hparams["unk_index"], - } - label_encoder.load_or_create( - path=lab_enc_file, - from_didatasets=[train_data], - output_key="char_list", - special_labels=special_labels, - sequence_input=True, - ) - - # 4. Set output: - sb.dataio.dataset.set_output_keys( - datasets, ["id", "sig", "wrd", "char_list", "tokens"], - ) - return train_data, valid_data, test_datasets, label_encoder - - -if __name__ == "__main__": - - # CLI: - hparams_file, run_opts, overrides = sb.parse_arguments(sys.argv[1:]) - - # If distributed_launch=True then - # create ddp_group with the right communication protocol - sb.utils.distributed.ddp_init_group(run_opts) - - with open(hparams_file) as fin: - hparams = load_hyperpyyaml(fin, overrides) - - # Create experiment directory - sb.create_experiment_directory( - experiment_directory=hparams["output_folder"], - hyperparams_to_save=hparams_file, - overrides=overrides, - ) - - # Dataset prep (parsing Librispeech) - from librispeech_prepare import prepare_librispeech # noqa - - # multi-gpu (ddp) save data preparation - run_on_main( - prepare_librispeech, - kwargs={ - "data_folder": hparams["data_folder"], - "tr_splits": hparams["train_splits"], - "dev_splits": hparams["dev_splits"], - "te_splits": hparams["test_splits"], - "save_folder": hparams["output_folder"], - "merge_lst": hparams["train_splits"], - "merge_name": "train.csv", - "skip_prep": hparams["skip_prep"], - }, - ) - - # here we create the datasets objects as well as tokenization and encoding - train_data, valid_data, test_datasets, label_encoder = dataio_prepare( - hparams - ) - - # Trainer initialization - asr_brain = ASR( - modules=hparams["modules"], - hparams=hparams, - run_opts=run_opts, - checkpointer=hparams["checkpointer"], - ) - - # We dynamicaly add the tokenizer to our brain class. - asr_brain.tokenizer = label_encoder - - ind2lab = label_encoder.ind2lab - vocab_list = [ind2lab[x] for x in range(len(ind2lab))] - - from speechbrain.decoders.ctc import CTCBeamSearcher - - test_searcher = CTCBeamSearcher( - **hparams["test_beam_search"], vocab_list=vocab_list, - ) - - # Training - asr_brain.fit( - asr_brain.hparams.epoch_counter, - train_data, - valid_data, - train_loader_kwargs=hparams["train_dataloader_opts"], - valid_loader_kwargs=hparams["valid_dataloader_opts"], - ) - - # Testing - if not os.path.exists(hparams["output_wer_folder"]): - os.makedirs(hparams["output_wer_folder"]) - - for k in test_datasets.keys(): # keys are test_clean, test_other etc - asr_brain.hparams.test_wer_file = os.path.join( - hparams["output_wer_folder"], f"wer_{k}.txt" - ) - asr_brain.evaluate( - test_datasets[k], - test_loader_kwargs=hparams["test_dataloader_opts"], - min_key="WER", - ) diff --git a/benchmarks/DASB/LibriSpeech/ASR/contextnet/train_encodec.py b/benchmarks/DASB/LibriSpeech/ASR/contextnet/train_encodec.py deleted file mode 100644 index eb7232303..000000000 --- a/benchmarks/DASB/LibriSpeech/ASR/contextnet/train_encodec.py +++ /dev/null @@ -1,316 +0,0 @@ -#!/usr/bin/env/python3 -"""Recipe for training an discrete tokens + ctc ASR system with librispeech. -Decoding is performed with greedy decoding at validation time. -At test time, beamsearch is used with an optional external language model. - -Authors - * Pooneh Mousavi 2024 -""" - -import os -import sys -import torch -import logging -import speechbrain as sb -from speechbrain.utils.distributed import run_on_main, if_main_process -from hyperpyyaml import load_hyperpyyaml -from pathlib import Path -import torchaudio - -logger = logging.getLogger(__name__) - - -# Define training procedure -class ASR(sb.Brain): - def compute_forward(self, batch, stage): - """Forward computations from the waveform batches to the output probabilities.""" - batch = batch.to(self.device) - wavs, wav_lens = batch.sig - - # Forward pass - with torch.no_grad(): - self.hparams.codec.to(self.device).eval() - tokens, _ = self.hparams.codec.encode(wavs, wav_lens) - embeddings = self.modules.discrete_embedding_layer(tokens) - att_w = self.modules.attention_mlp(embeddings) - feats = torch.matmul(att_w.transpose(2, -1), embeddings).squeeze(-2) - y = self.modules.enc(feats) - - # Compute outputs - p_tokens = None - logits = self.modules.ctc_lin(y) - p_ctc = self.hparams.log_softmax(logits) - - if stage == sb.Stage.VALID: - p_tokens = sb.decoders.ctc_greedy_decode( - p_ctc, wav_lens, blank_id=self.hparams.blank_index - ) - elif stage == sb.Stage.TEST: - p_tokens = test_searcher(p_ctc, wav_lens) - - return p_ctc, wav_lens, p_tokens - - def compute_objectives(self, predictions, batch, stage): - """Computes the loss (CTC+NLL) given predictions and targets.""" - - p_ctc, wav_lens, predicted_tokens = predictions - ids = batch.id - tokens, tokens_lens = batch.tokens - loss = self.hparams.ctc_cost(p_ctc, tokens, wav_lens, tokens_lens) - - if stage == sb.Stage.VALID: - # Decode token terms to words - predicted_words = [ - "".join(self.tokenizer.decode_ndim(utt_seq)).split(" ") - for utt_seq in predicted_tokens - ] - elif stage == sb.Stage.TEST: - predicted_words = [ - hyp[0].text.split(" ") for hyp in predicted_tokens - ] - - if stage != sb.Stage.TRAIN: - target_words = [wrd.split(" ") for wrd in batch.wrd] - self.wer_metric.append(ids, predicted_words, target_words) - self.cer_metric.append(ids, predicted_words, target_words) - - return loss - - def on_stage_start(self, stage, epoch): - """Gets called at the beginning of each epoch""" - if stage != sb.Stage.TRAIN: - self.cer_metric = self.hparams.cer_computer() - self.wer_metric = self.hparams.error_rate_computer() - - def on_stage_end(self, stage, stage_loss, epoch): - """Gets called at the end of an epoch.""" - # Compute/store important stats - stage_stats = {"loss": stage_loss} - if stage == sb.Stage.TRAIN: - self.train_stats = stage_stats - else: - stage_stats["CER"] = self.cer_metric.summarize("error_rate") - stage_stats["WER"] = self.wer_metric.summarize("error_rate") - - # Perform end-of-iteration things, like annealing, logging, etc. - if stage == sb.Stage.VALID: - old_lr_model, new_lr_model = self.hparams.lr_annealing_model( - stage_stats["loss"] - ) - sb.nnet.schedulers.update_learning_rate( - self.model_optimizer, new_lr_model - ) - - self.hparams.train_logger.log_stats( - stats_meta={"epoch": epoch, "lr_model": old_lr_model}, - train_stats=self.train_stats, - valid_stats=stage_stats, - ) - self.checkpointer.save_and_keep_only( - meta={"WER": stage_stats["WER"]}, min_keys=["WER"], - ) - elif stage == sb.Stage.TEST: - self.hparams.train_logger.log_stats( - stats_meta={"Epoch loaded": self.hparams.epoch_counter.current}, - test_stats=stage_stats, - ) - if if_main_process(): - with open(self.hparams.test_wer_file, "w") as w: - self.wer_metric.write_stats(w) - - def init_optimizers(self): - "Initializes the model optimizer" - self.model_optimizer = self.hparams.model_opt_class( - self.hparams.model.parameters() - ) - self.optimizers_dict = { - "model_optimizer": self.model_optimizer, - } - # Initializing the weights - if self.checkpointer is not None: - self.checkpointer.add_recoverable("modelopt", self.model_optimizer) - - -def dataio_prepare(hparams): - """This function prepares the datasets to be used in the brain class. - It also defines the data processing pipeline through user-defined functions.""" - data_folder = hparams["data_folder"] - - train_data = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=hparams["train_csv"], replacements={"data_root": data_folder}, - ) - - if hparams["sorting"] == "ascending": - # we sort training data to speed up training and get better results. - train_data = train_data.filtered_sorted(sort_key="duration") - # when sorting do not shuffle in dataloader ! otherwise is pointless - hparams["train_dataloader_opts"]["shuffle"] = False - - elif hparams["sorting"] == "descending": - train_data = train_data.filtered_sorted( - sort_key="duration", reverse=True - ) - # when sorting do not shuffle in dataloader ! otherwise is pointless - hparams["train_dataloader_opts"]["shuffle"] = False - - elif hparams["sorting"] == "random": - pass - - else: - raise NotImplementedError( - "sorting must be random, ascending or descending" - ) - - valid_data = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=hparams["valid_csv"], replacements={"data_root": data_folder}, - ) - valid_data = valid_data.filtered_sorted(sort_key="duration") - - # test is separate - test_datasets = {} - for csv_file in hparams["test_csv"]: - name = Path(csv_file).stem - test_datasets[name] = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=csv_file, replacements={"data_root": data_folder} - ) - test_datasets[name] = test_datasets[name].filtered_sorted( - sort_key="duration" - ) - - datasets = [train_data, valid_data] + [i for k, i in test_datasets.items()] - - # 2. Define audio pipeline: - @sb.utils.data_pipeline.takes("wav") - @sb.utils.data_pipeline.provides("sig") - def audio_pipeline(wav): - sig = sb.dataio.dataio.read_audio(wav) - info = torchaudio.info(wav) - resampled = torchaudio.transforms.Resample( - info.sample_rate, hparams["sample_rate"], - )(sig) - # resampled = resampled.unsqueeze(0) - return resampled - - sb.dataio.dataset.add_dynamic_item(datasets, audio_pipeline) - label_encoder = sb.dataio.encoder.CTCTextEncoder() - - # 3. Define text pipeline: - @sb.utils.data_pipeline.takes("wrd") - @sb.utils.data_pipeline.provides( - "wrd", "char_list", "tokens_list", "tokens" - ) - def text_pipeline(wrd): - yield wrd - char_list = list(wrd) - yield char_list - tokens_list = label_encoder.encode_sequence(char_list) - yield tokens_list - tokens = torch.LongTensor(tokens_list) - yield tokens - - sb.dataio.dataset.add_dynamic_item(datasets, text_pipeline) - - lab_enc_file = os.path.join(hparams["save_folder"], "label_encoder.txt") - special_labels = { - "blank_label": hparams["blank_index"], - "unk_label": hparams["unk_index"], - } - label_encoder.load_or_create( - path=lab_enc_file, - from_didatasets=[train_data], - output_key="char_list", - special_labels=special_labels, - sequence_input=True, - ) - - # 4. Set output: - sb.dataio.dataset.set_output_keys( - datasets, ["id", "sig", "wrd", "char_list", "tokens"], - ) - return train_data, valid_data, test_datasets, label_encoder - - -if __name__ == "__main__": - - # CLI: - hparams_file, run_opts, overrides = sb.parse_arguments(sys.argv[1:]) - - # If distributed_launch=True then - # create ddp_group with the right communication protocol - sb.utils.distributed.ddp_init_group(run_opts) - - with open(hparams_file) as fin: - hparams = load_hyperpyyaml(fin, overrides) - - # Create experiment directory - sb.create_experiment_directory( - experiment_directory=hparams["output_folder"], - hyperparams_to_save=hparams_file, - overrides=overrides, - ) - - # Dataset prep (parsing Librispeech) - from librispeech_prepare import prepare_librispeech # noqa - - # multi-gpu (ddp) save data preparation - run_on_main( - prepare_librispeech, - kwargs={ - "data_folder": hparams["data_folder"], - "tr_splits": hparams["train_splits"], - "dev_splits": hparams["dev_splits"], - "te_splits": hparams["test_splits"], - "save_folder": hparams["output_folder"], - "merge_lst": hparams["train_splits"], - "merge_name": "train.csv", - "skip_prep": hparams["skip_prep"], - }, - ) - - # here we create the datasets objects as well as tokenization and encoding - train_data, valid_data, test_datasets, label_encoder = dataio_prepare( - hparams - ) - - # Trainer initialization - asr_brain = ASR( - modules=hparams["modules"], - hparams=hparams, - run_opts=run_opts, - checkpointer=hparams["checkpointer"], - ) - - # We dynamicaly add the tokenizer to our brain class. - asr_brain.tokenizer = label_encoder - - ind2lab = label_encoder.ind2lab - vocab_list = [ind2lab[x] for x in range(len(ind2lab))] - - from speechbrain.decoders.ctc import CTCBeamSearcher - - test_searcher = CTCBeamSearcher( - **hparams["test_beam_search"], vocab_list=vocab_list, - ) - - # Training - asr_brain.fit( - asr_brain.hparams.epoch_counter, - train_data, - valid_data, - train_loader_kwargs=hparams["train_dataloader_opts"], - valid_loader_kwargs=hparams["valid_dataloader_opts"], - ) - - # Testing - if not os.path.exists(hparams["output_wer_folder"]): - os.makedirs(hparams["output_wer_folder"]) - - for k in test_datasets.keys(): # keys are test_clean, test_other etc - asr_brain.hparams.test_wer_file = os.path.join( - hparams["output_wer_folder"], f"wer_{k}.txt" - ) - asr_brain.evaluate( - test_datasets[k], - test_loader_kwargs=hparams["test_dataloader_opts"], - min_key="WER", - ) diff --git a/benchmarks/DASB/LibriSpeech/ASR/contextnet/train_speech_tokenizer.py b/benchmarks/DASB/LibriSpeech/ASR/contextnet/train_speech_tokenizer.py deleted file mode 100644 index cd784c80c..000000000 --- a/benchmarks/DASB/LibriSpeech/ASR/contextnet/train_speech_tokenizer.py +++ /dev/null @@ -1,319 +0,0 @@ -#!/usr/bin/env/python3 -"""Recipe for training an discrete tokens + ctc ASR system with librispeech. -Decoding is performed with greedy decoding at validation time. -At test time, beamsearch is used with an optional external language model. - -Authors - * Pooneh Mousavi 2024 -""" - -import os -import sys -import torch -import logging -import speechbrain as sb -from speechbrain.utils.distributed import run_on_main, if_main_process -from hyperpyyaml import load_hyperpyyaml -from pathlib import Path -import torchaudio - -logger = logging.getLogger(__name__) - - -# Define training procedure -class ASR(sb.Brain): - def compute_forward(self, batch, stage): - """Forward computations from the waveform batches to the output probabilities.""" - batch = batch.to(self.device) - wavs, wav_lens = batch.sig - - # Forward pass - # Feature extraction and attention pooling - with torch.no_grad(): - self.hparams.codec.to(self.device).eval() - tokens = self.hparams.codec(wavs).permute(1, 2, 0)[ - :, :, : self.hparams.num_codebooks - ] - embeddings = self.modules.discrete_embedding_layer(tokens) - att_w = self.modules.attention_mlp(embeddings) - feats = torch.matmul(att_w.transpose(2, -1), embeddings).squeeze(-2) - y = self.modules.enc(feats) - - # Compute outputs - p_tokens = None - logits = self.modules.ctc_lin(y) - p_ctc = self.hparams.log_softmax(logits) - - if stage == sb.Stage.VALID: - p_tokens = sb.decoders.ctc_greedy_decode( - p_ctc, wav_lens, blank_id=self.hparams.blank_index - ) - elif stage == sb.Stage.TEST: - p_tokens = test_searcher(p_ctc, wav_lens) - - return p_ctc, wav_lens, p_tokens - - def compute_objectives(self, predictions, batch, stage): - """Computes the loss (CTC+NLL) given predictions and targets.""" - - p_ctc, wav_lens, predicted_tokens = predictions - ids = batch.id - tokens, tokens_lens = batch.tokens - loss = self.hparams.ctc_cost(p_ctc, tokens, wav_lens, tokens_lens) - - if stage == sb.Stage.VALID: - # Decode token terms to words - predicted_words = [ - "".join(self.tokenizer.decode_ndim(utt_seq)).split(" ") - for utt_seq in predicted_tokens - ] - elif stage == sb.Stage.TEST: - predicted_words = [ - hyp[0].text.split(" ") for hyp in predicted_tokens - ] - - if stage != sb.Stage.TRAIN: - target_words = [wrd.split(" ") for wrd in batch.wrd] - self.wer_metric.append(ids, predicted_words, target_words) - self.cer_metric.append(ids, predicted_words, target_words) - - return loss - - def on_stage_start(self, stage, epoch): - """Gets called at the beginning of each epoch""" - if stage != sb.Stage.TRAIN: - self.cer_metric = self.hparams.cer_computer() - self.wer_metric = self.hparams.error_rate_computer() - - def on_stage_end(self, stage, stage_loss, epoch): - """Gets called at the end of an epoch.""" - # Compute/store important stats - stage_stats = {"loss": stage_loss} - if stage == sb.Stage.TRAIN: - self.train_stats = stage_stats - else: - stage_stats["CER"] = self.cer_metric.summarize("error_rate") - stage_stats["WER"] = self.wer_metric.summarize("error_rate") - - # Perform end-of-iteration things, like annealing, logging, etc. - if stage == sb.Stage.VALID: - old_lr_model, new_lr_model = self.hparams.lr_annealing_model( - stage_stats["loss"] - ) - sb.nnet.schedulers.update_learning_rate( - self.model_optimizer, new_lr_model - ) - - self.hparams.train_logger.log_stats( - stats_meta={"epoch": epoch, "lr_model": old_lr_model}, - train_stats=self.train_stats, - valid_stats=stage_stats, - ) - self.checkpointer.save_and_keep_only( - meta={"WER": stage_stats["WER"]}, min_keys=["WER"], - ) - elif stage == sb.Stage.TEST: - self.hparams.train_logger.log_stats( - stats_meta={"Epoch loaded": self.hparams.epoch_counter.current}, - test_stats=stage_stats, - ) - if if_main_process(): - with open(self.hparams.test_wer_file, "w") as w: - self.wer_metric.write_stats(w) - - def init_optimizers(self): - "Initializes the model optimizer" - self.model_optimizer = self.hparams.model_opt_class( - self.hparams.model.parameters() - ) - self.optimizers_dict = { - "model_optimizer": self.model_optimizer, - } - # Initializing the weights - if self.checkpointer is not None: - self.checkpointer.add_recoverable("modelopt", self.model_optimizer) - - -def dataio_prepare(hparams): - """This function prepares the datasets to be used in the brain class. - It also defines the data processing pipeline through user-defined functions.""" - data_folder = hparams["data_folder"] - - train_data = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=hparams["train_csv"], replacements={"data_root": data_folder}, - ) - - if hparams["sorting"] == "ascending": - # we sort training data to speed up training and get better results. - train_data = train_data.filtered_sorted(sort_key="duration") - # when sorting do not shuffle in dataloader ! otherwise is pointless - hparams["train_dataloader_opts"]["shuffle"] = False - - elif hparams["sorting"] == "descending": - train_data = train_data.filtered_sorted( - sort_key="duration", reverse=True - ) - # when sorting do not shuffle in dataloader ! otherwise is pointless - hparams["train_dataloader_opts"]["shuffle"] = False - - elif hparams["sorting"] == "random": - pass - - else: - raise NotImplementedError( - "sorting must be random, ascending or descending" - ) - - valid_data = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=hparams["valid_csv"], replacements={"data_root": data_folder}, - ) - valid_data = valid_data.filtered_sorted(sort_key="duration") - - # test is separate - test_datasets = {} - for csv_file in hparams["test_csv"]: - name = Path(csv_file).stem - test_datasets[name] = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=csv_file, replacements={"data_root": data_folder} - ) - test_datasets[name] = test_datasets[name].filtered_sorted( - sort_key="duration" - ) - - datasets = [train_data, valid_data] + [i for k, i in test_datasets.items()] - - # 2. Define audio pipeline: - @sb.utils.data_pipeline.takes("wav") - @sb.utils.data_pipeline.provides("sig") - def audio_pipeline(wav): - sig = sb.dataio.dataio.read_audio(wav) - info = torchaudio.info(wav) - resampled = torchaudio.transforms.Resample( - info.sample_rate, hparams["sample_rate"], - )(sig) - # resampled = resampled.unsqueeze(0) - return resampled - - sb.dataio.dataset.add_dynamic_item(datasets, audio_pipeline) - label_encoder = sb.dataio.encoder.CTCTextEncoder() - - # 3. Define text pipeline: - @sb.utils.data_pipeline.takes("wrd") - @sb.utils.data_pipeline.provides( - "wrd", "char_list", "tokens_list", "tokens" - ) - def text_pipeline(wrd): - yield wrd - char_list = list(wrd) - yield char_list - tokens_list = label_encoder.encode_sequence(char_list) - yield tokens_list - tokens = torch.LongTensor(tokens_list) - yield tokens - - sb.dataio.dataset.add_dynamic_item(datasets, text_pipeline) - - lab_enc_file = os.path.join(hparams["save_folder"], "label_encoder.txt") - special_labels = { - "blank_label": hparams["blank_index"], - "unk_label": hparams["unk_index"], - } - label_encoder.load_or_create( - path=lab_enc_file, - from_didatasets=[train_data], - output_key="char_list", - special_labels=special_labels, - sequence_input=True, - ) - - # 4. Set output: - sb.dataio.dataset.set_output_keys( - datasets, ["id", "sig", "wrd", "char_list", "tokens"], - ) - return train_data, valid_data, test_datasets, label_encoder - - -if __name__ == "__main__": - - # CLI: - hparams_file, run_opts, overrides = sb.parse_arguments(sys.argv[1:]) - - # If distributed_launch=True then - # create ddp_group with the right communication protocol - sb.utils.distributed.ddp_init_group(run_opts) - - with open(hparams_file) as fin: - hparams = load_hyperpyyaml(fin, overrides) - - # Create experiment directory - sb.create_experiment_directory( - experiment_directory=hparams["output_folder"], - hyperparams_to_save=hparams_file, - overrides=overrides, - ) - - # Dataset prep (parsing Librispeech) - from librispeech_prepare import prepare_librispeech # noqa - - # multi-gpu (ddp) save data preparation - run_on_main( - prepare_librispeech, - kwargs={ - "data_folder": hparams["data_folder"], - "tr_splits": hparams["train_splits"], - "dev_splits": hparams["dev_splits"], - "te_splits": hparams["test_splits"], - "save_folder": hparams["output_folder"], - "merge_lst": hparams["train_splits"], - "merge_name": "train.csv", - "skip_prep": hparams["skip_prep"], - }, - ) - - # here we create the datasets objects as well as tokenization and encoding - train_data, valid_data, test_datasets, label_encoder = dataio_prepare( - hparams - ) - - # Trainer initialization - asr_brain = ASR( - modules=hparams["modules"], - hparams=hparams, - run_opts=run_opts, - checkpointer=hparams["checkpointer"], - ) - - # We dynamicaly add the tokenizer to our brain class. - asr_brain.tokenizer = label_encoder - - ind2lab = label_encoder.ind2lab - vocab_list = [ind2lab[x] for x in range(len(ind2lab))] - - from speechbrain.decoders.ctc import CTCBeamSearcher - - test_searcher = CTCBeamSearcher( - **hparams["test_beam_search"], vocab_list=vocab_list, - ) - - # Training - asr_brain.fit( - asr_brain.hparams.epoch_counter, - train_data, - valid_data, - train_loader_kwargs=hparams["train_dataloader_opts"], - valid_loader_kwargs=hparams["valid_dataloader_opts"], - ) - - # Testing - if not os.path.exists(hparams["output_wer_folder"]): - os.makedirs(hparams["output_wer_folder"]) - - for k in test_datasets.keys(): # keys are test_clean, test_other etc - asr_brain.hparams.test_wer_file = os.path.join( - hparams["output_wer_folder"], f"wer_{k}.txt" - ) - asr_brain.evaluate( - test_datasets[k], - test_loader_kwargs=hparams["test_dataloader_opts"], - min_key="WER", - ) diff --git a/benchmarks/DASB/LibriSpeech/ASR/contextnet/train_weighted_ssl.py b/benchmarks/DASB/LibriSpeech/ASR/contextnet/train_weighted_ssl.py deleted file mode 100644 index 6d053fceb..000000000 --- a/benchmarks/DASB/LibriSpeech/ASR/contextnet/train_weighted_ssl.py +++ /dev/null @@ -1,318 +0,0 @@ -#!/usr/bin/env/python3 -"""Recipe for training an SSL-based ctc ASR system with librispeech. -Decoding is performed with greedy decoding at validation time. -At test time, beamsearch is used with an optional external language model. - -Authors - * Pooneh Mousavi 2024 -""" - -import os -import sys -import torch -import logging -import speechbrain as sb -from speechbrain.utils.distributed import run_on_main, if_main_process -from hyperpyyaml import load_hyperpyyaml -from pathlib import Path - -logger = logging.getLogger(__name__) - - -# Define training procedure -class ASR(sb.Brain): - def compute_forward(self, batch, stage): - """Forward computations from the waveform batches to the output probabilities.""" - batch = batch.to(self.device) - wavs, wav_lens = batch.sig - - # Forward pass - feats = self.modules.weighted_ssl_model(wavs) - y = self.modules.enc(feats) - - # Compute outputs - p_tokens = None - logits = self.modules.ctc_lin(y) - p_ctc = self.hparams.log_softmax(logits) - - if stage == sb.Stage.VALID: - p_tokens = sb.decoders.ctc_greedy_decode( - p_ctc, wav_lens, blank_id=self.hparams.blank_index - ) - elif stage == sb.Stage.TEST: - p_tokens = test_searcher(p_ctc, wav_lens) - - return p_ctc, wav_lens, p_tokens - - def compute_objectives(self, predictions, batch, stage): - """Computes the loss (CTC+NLL) given predictions and targets.""" - - p_ctc, wav_lens, predicted_tokens = predictions - ids = batch.id - tokens, tokens_lens = batch.tokens - loss = self.hparams.ctc_cost(p_ctc, tokens, wav_lens, tokens_lens) - - if stage == sb.Stage.VALID: - # Decode token terms to words - predicted_words = [ - "".join(self.tokenizer.decode_ndim(utt_seq)).split(" ") - for utt_seq in predicted_tokens - ] - elif stage == sb.Stage.TEST: - predicted_words = [ - hyp[0].text.split(" ") for hyp in predicted_tokens - ] - - if stage != sb.Stage.TRAIN: - target_words = [wrd.split(" ") for wrd in batch.wrd] - self.wer_metric.append(ids, predicted_words, target_words) - self.cer_metric.append(ids, predicted_words, target_words) - - return loss - - def on_stage_start(self, stage, epoch): - """Gets called at the beginning of each epoch""" - if stage != sb.Stage.TRAIN: - self.cer_metric = self.hparams.cer_computer() - self.wer_metric = self.hparams.error_rate_computer() - - def on_stage_end(self, stage, stage_loss, epoch): - """Gets called at the end of an epoch.""" - # Compute/store important stats - stage_stats = {"loss": stage_loss} - if stage == sb.Stage.TRAIN: - self.train_stats = stage_stats - else: - stage_stats["CER"] = self.cer_metric.summarize("error_rate") - stage_stats["WER"] = self.wer_metric.summarize("error_rate") - - # Perform end-of-iteration things, like annealing, logging, etc. - if stage == sb.Stage.VALID: - old_lr_model, new_lr_model = self.hparams.lr_annealing_model( - stage_stats["loss"] - ) - old_lr_weights, new_lr_weights = self.hparams.lr_annealing_weights( - stage_stats["loss"] - ) - sb.nnet.schedulers.update_learning_rate( - self.model_optimizer, new_lr_model - ) - sb.nnet.schedulers.update_learning_rate( - self.weights_optimizer, new_lr_weights - ) - - self.hparams.train_logger.log_stats( - stats_meta={"epoch": epoch, "lr_model": old_lr_model}, - train_stats=self.train_stats, - valid_stats=stage_stats, - ) - self.checkpointer.save_and_keep_only( - meta={"WER": stage_stats["WER"]}, min_keys=["WER"], - ) - elif stage == sb.Stage.TEST: - self.hparams.train_logger.log_stats( - stats_meta={"Epoch loaded": self.hparams.epoch_counter.current}, - test_stats=stage_stats, - ) - if if_main_process(): - with open(self.hparams.test_wer_file, "w") as w: - self.wer_metric.write_stats(w) - - def init_optimizers(self): - "Initializes the weights optimizer and model optimizer" - self.weights_optimizer = self.hparams.weights_opt_class( - [self.modules.weighted_ssl_model.weights] - ) - self.model_optimizer = self.hparams.model_opt_class( - self.hparams.model.parameters() - ) - self.optimizers_dict = { - "weights_optimizer": self.weights_optimizer, - "model_optimizer": self.model_optimizer, - } - # Initializing the weights - if self.checkpointer is not None: - self.checkpointer.add_recoverable("modelopt", self.model_optimizer) - self.checkpointer.add_recoverable( - "weights_opt", self.weights_optimizer - ) - - -def dataio_prepare(hparams): - """This function prepares the datasets to be used in the brain class. - It also defines the data processing pipeline through user-defined functions.""" - data_folder = hparams["data_folder"] - - train_data = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=hparams["train_csv"], replacements={"data_root": data_folder}, - ) - - if hparams["sorting"] == "ascending": - # we sort training data to speed up training and get better results. - train_data = train_data.filtered_sorted(sort_key="duration") - # when sorting do not shuffle in dataloader ! otherwise is pointless - hparams["train_dataloader_opts"]["shuffle"] = False - - elif hparams["sorting"] == "descending": - train_data = train_data.filtered_sorted( - sort_key="duration", reverse=True - ) - # when sorting do not shuffle in dataloader ! otherwise is pointless - hparams["train_dataloader_opts"]["shuffle"] = False - - elif hparams["sorting"] == "random": - pass - - else: - raise NotImplementedError( - "sorting must be random, ascending or descending" - ) - - valid_data = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=hparams["valid_csv"], replacements={"data_root": data_folder}, - ) - valid_data = valid_data.filtered_sorted(sort_key="duration") - - # test is separate - test_datasets = {} - for csv_file in hparams["test_csv"]: - name = Path(csv_file).stem - test_datasets[name] = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=csv_file, replacements={"data_root": data_folder} - ) - test_datasets[name] = test_datasets[name].filtered_sorted( - sort_key="duration" - ) - - datasets = [train_data, valid_data] + [i for k, i in test_datasets.items()] - - # 2. Define audio pipeline: - @sb.utils.data_pipeline.takes("wav") - @sb.utils.data_pipeline.provides("sig") - def audio_pipeline(wav): - sig = sb.dataio.dataio.read_audio(wav) - return sig - - sb.dataio.dataset.add_dynamic_item(datasets, audio_pipeline) - label_encoder = sb.dataio.encoder.CTCTextEncoder() - - # 3. Define text pipeline: - @sb.utils.data_pipeline.takes("wrd") - @sb.utils.data_pipeline.provides( - "wrd", "char_list", "tokens_list", "tokens" - ) - def text_pipeline(wrd): - yield wrd - char_list = list(wrd) - yield char_list - tokens_list = label_encoder.encode_sequence(char_list) - yield tokens_list - tokens = torch.LongTensor(tokens_list) - yield tokens - - sb.dataio.dataset.add_dynamic_item(datasets, text_pipeline) - - lab_enc_file = os.path.join(hparams["save_folder"], "label_encoder.txt") - special_labels = { - "blank_label": hparams["blank_index"], - "unk_label": hparams["unk_index"], - } - label_encoder.load_or_create( - path=lab_enc_file, - from_didatasets=[train_data], - output_key="char_list", - special_labels=special_labels, - sequence_input=True, - ) - - # 4. Set output: - sb.dataio.dataset.set_output_keys( - datasets, ["id", "sig", "wrd", "char_list", "tokens"], - ) - return train_data, valid_data, test_datasets, label_encoder - - -if __name__ == "__main__": - - # CLI: - hparams_file, run_opts, overrides = sb.parse_arguments(sys.argv[1:]) - - # If distributed_launch=True then - # create ddp_group with the right communication protocol - sb.utils.distributed.ddp_init_group(run_opts) - - with open(hparams_file) as fin: - hparams = load_hyperpyyaml(fin, overrides) - - # Create experiment directory - sb.create_experiment_directory( - experiment_directory=hparams["output_folder"], - hyperparams_to_save=hparams_file, - overrides=overrides, - ) - - # Dataset prep (parsing Librispeech) - from librispeech_prepare import prepare_librispeech # noqa - - # multi-gpu (ddp) save data preparation - run_on_main( - prepare_librispeech, - kwargs={ - "data_folder": hparams["data_folder"], - "tr_splits": hparams["train_splits"], - "dev_splits": hparams["dev_splits"], - "te_splits": hparams["test_splits"], - "save_folder": hparams["output_folder"], - "merge_lst": hparams["train_splits"], - "merge_name": "train.csv", - "skip_prep": hparams["skip_prep"], - }, - ) - - # here we create the datasets objects as well as tokenization and encoding - train_data, valid_data, test_datasets, label_encoder = dataio_prepare( - hparams - ) - - # Trainer initialization - asr_brain = ASR( - modules=hparams["modules"], - hparams=hparams, - run_opts=run_opts, - checkpointer=hparams["checkpointer"], - ) - - # We dynamicaly add the tokenizer to our brain class. - asr_brain.tokenizer = label_encoder - - ind2lab = label_encoder.ind2lab - vocab_list = [ind2lab[x] for x in range(len(ind2lab))] - - from speechbrain.decoders.ctc import CTCBeamSearcher - - test_searcher = CTCBeamSearcher( - **hparams["test_beam_search"], vocab_list=vocab_list, - ) - - # Training - asr_brain.fit( - asr_brain.hparams.epoch_counter, - train_data, - valid_data, - train_loader_kwargs=hparams["train_dataloader_opts"], - valid_loader_kwargs=hparams["valid_dataloader_opts"], - ) - - # Testing - if not os.path.exists(hparams["output_wer_folder"]): - os.makedirs(hparams["output_wer_folder"]) - - for k in test_datasets.keys(): # keys are test_clean, test_other etc - asr_brain.hparams.test_wer_file = os.path.join( - hparams["output_wer_folder"], f"wer_{k}.txt" - ) - asr_brain.evaluate( - test_datasets[k], - test_loader_kwargs=hparams["test_dataloader_opts"], - min_key="WER", - ) diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor-tokens/hparams/LSTM/train.yaml b/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml similarity index 100% rename from benchmarks/DASB/LibriSpeech/ASR-refactor-tokens/hparams/LSTM/train.yaml rename to benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor-tokens/hparams/contextnet/train.yaml b/benchmarks/DASB/LibriSpeech/ASR/hparams/contextnet/train.yaml similarity index 100% rename from benchmarks/DASB/LibriSpeech/ASR-refactor-tokens/hparams/contextnet/train.yaml rename to benchmarks/DASB/LibriSpeech/ASR/hparams/contextnet/train.yaml diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor-tokens/librispeech_prepare.py b/benchmarks/DASB/LibriSpeech/ASR/librispeech_prepare.py similarity index 100% rename from benchmarks/DASB/LibriSpeech/ASR-refactor-tokens/librispeech_prepare.py rename to benchmarks/DASB/LibriSpeech/ASR/librispeech_prepare.py diff --git a/benchmarks/DASB/LibriSpeech/ASR-refactor-tokens/train.py b/benchmarks/DASB/LibriSpeech/ASR/train.py similarity index 100% rename from benchmarks/DASB/LibriSpeech/ASR-refactor-tokens/train.py rename to benchmarks/DASB/LibriSpeech/ASR/train.py diff --git a/benchmarks/DASB/LibriSpeech/extraction/extract.py b/benchmarks/DASB/LibriSpeech/extraction/extract.py index ef3e677b5..62d45cfec 100644 --- a/benchmarks/DASB/LibriSpeech/extraction/extract.py +++ b/benchmarks/DASB/LibriSpeech/extraction/extract.py @@ -62,16 +62,14 @@ csv_path = hparams[f"{split}_csv"] name = pl.Path(csv_path).stem dataset = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=csv_path, - replacements={"data_root": data_folder}, + csv_path=csv_path, replacements={"data_root": data_folder}, ) datasets.append(dataset) for split in hparams["test_csv"]: name = pl.Path(split).stem dataset = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=split, - replacements={"data_root": data_folder}, + csv_path=split, replacements={"data_root": data_folder}, ) datasets.append(dataset) diff --git a/benchmarks/DASB/model/tokenizer_interface.py b/benchmarks/DASB/model/tokenizer_interface.py index 652fa53e1..3499bba9e 100644 --- a/benchmarks/DASB/model/tokenizer_interface.py +++ b/benchmarks/DASB/model/tokenizer_interface.py @@ -39,15 +39,15 @@ def tokens_to_sig(self, tokens, **kwargs): @abstractmethod @torch.no_grad() def get_pretrained_embeddings( - self, vocab_size, num_codebooks, device="cpu", **kwargs + self, vocab_size, num_codebooks, **kwargs ): """Get codebook embeddings.""" pass class EncodecTokenizer(Encodec, BaseTokenizer): - def __init__(self, source, **kwargs): - Encodec.__init__(self, source=source, **kwargs) + def __init__(self, *args, **kwargs): + Encodec.__init__(self, *args, **kwargs) BaseTokenizer.__init__(self) @torch.no_grad() @@ -70,7 +70,7 @@ def tokens_to_sig(self, tokens, **kwargs): @torch.no_grad() def get_pretrained_embeddings( - self, vocab_size=None, num_codebooks=None, device=None, **kwargs + self, vocab_size=None, num_codebooks=None, **kwargs ): embeddings = self.vocabulary return embeddings.reshape(-1, embeddings.shape[-1]) @@ -97,7 +97,7 @@ def tokens_to_sig(self, tokens, **kwargs): @torch.no_grad() def get_pretrained_embeddings( - self, vocab_size, num_codebooks, device="cpu", **kwargs + self, vocab_size=None, num_codebooks=None , **kwargs ): toks = torch.arange(vocab_size, device=device) toks = toks[:, None, None].expand(-1, num_codebooks, -1).clone() @@ -135,11 +135,11 @@ def tokens_to_sig(self, tokens, **kwargs): @torch.no_grad() def get_pretrained_embeddings( - self, vocab_size, num_codebooks, device="cpu", **kwargs + self, vocab_size=None, num_codebooks=None , **kwargs ): - toks = torch.arange(vocab_size, device=device) + toks = torch.arange(vocab_size) toks = toks[None, :, None].expand(num_codebooks, -1, -1).clone() - self.to(device).eval() + self.eval() embs = [ self.model.quantizer.vq.layers[i].decode(indices) for i, indices in enumerate(toks) @@ -153,29 +153,31 @@ def __init__(self, *args, **kwargs): BaseTokenizer.__init__(self) @torch.no_grad() - def sig_to_tokens(self, signal, lengths, num_codebooks=None, **kwargs): + def sig_to_tokens(self, signal, lengths, num_codebooks=None,**kwargs): self.eval() - tokens, _, _ = self.encode(signal, lengths) - if num_codebooks: - if tokens.shape[-1] < num_codebooks: - raise ValueError( - f"Model only outputs {tokens.shape[-1]} codebooks, but {num_codebooks} requested" - ) - tokens = tokens[..., :num_codebooks] + tokens, _, _ = self.encode(signal, lengths, SSL_layers=num_codebooks,**kwargs) return tokens @torch.no_grad() def tokens_to_sig(self, tokens, **kwargs): self.eval() - return self.decode(tokens) + return self.decode(tokens, **kwargs) @torch.no_grad() def get_pretrained_embeddings( - self, vocab_size, num_codebooks, device="cpu", **kwargs + self, vocab_size=None, num_codebooks=None, **kwargs ): - toks = torch.arange(vocab_size, device=device) - toks = toks[None, :, None].expand(num_codebooks, -1, -1).clone() - self.to(device).eval() - return torch.cat( - [self.quantizer.codebooks[i] for i in range(num_codebooks)] - ) + embs = [] + for layer_num, vocabulary in zip( + self.ssl_layer_ids, + self.vocabularies, + ): + if layer_num not in num_codebooks: + continue + embs.append( + torch.as_tensor( + vocabulary, dtype=torch.float32 + ) + ) + embs = torch.cat(embs) + return embs diff --git a/benchmarks/DASB/utils/tokens.py b/benchmarks/DASB/utils/tokens.py index 705184d80..7090325db 100644 --- a/benchmarks/DASB/utils/tokens.py +++ b/benchmarks/DASB/utils/tokens.py @@ -191,8 +191,7 @@ def audio_pipeline(wav): info = torchaudio.info(wav) sig = sb.dataio.dataio.read_audio(wav) sig = torchaudio.transforms.Resample( - info.sample_rate, - self.sample_rate, + info.sample_rate, self.sample_rate, )(sig) return sig @@ -283,9 +282,7 @@ class TokensLoader: """ def __init__( - self, - data_path, - save_name="tokens", + self, data_path, save_name="tokens", ): self.data_path = pl.Path(data_path) if not self.data_path.exists(): From e317d3a95e1839e86503799269f458abce62794a Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Mon, 23 Dec 2024 13:25:00 -0500 Subject: [PATCH 13/61] clean code and fix speechtokenzier bug --- .../extraction/hparams/discrete_ssl.yaml | 100 ++++++++++++++++++ benchmarks/DASB/extra_requirements.txt | 1 + benchmarks/DASB/model/tokenizer_interface.py | 1 + 3 files changed, 102 insertions(+) create mode 100644 benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl.yaml diff --git a/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl.yaml b/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl.yaml new file mode 100644 index 000000000..6a58b0135 --- /dev/null +++ b/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl.yaml @@ -0,0 +1,100 @@ +# ############################################################################ +# Auido Tokenizer: WavLM +# Extraction: Librispeech 960h +# Authors: Jarod Duret 2024 +# ############################################################################ +# Seed needs to be set at top of yaml, before objects with parameters are made + +seed: 1986 +__set_seed: !apply:torch.manual_seed [!ref ] +output_folder: !ref results/wavlm +save_folder: !ref /save +train_log: !ref /extraction_log.txt + +# Data files +data_folder: !PLACEHOLDER # e.g., /path/to/LibriSpeech +train_splits: ["train-clean-100"] #, "train-clean-360", "train-other-500" +dev_splits: ["dev-clean"] +test_splits: ["dev-clean", "test-clean", "test-other"] +skip_prep: False +train_csv: !ref /train.csv +valid_csv: !ref /dev-clean.csv +test_csv: + - !ref /test-clean.csv + - !ref /test-other.csv + +batch_size: 8 +num_workers: 8 +src_key: wav +id_key: id + +# Dataloader options +dataloader_opts: + batch_size: !ref + shuffle: True + num_workers: !ref + +### Configuration for discrete SSL model +# ssl_model_type: hubert, wavlm, wav2vec2 +# ssl_hub: facebook/hubert-large-ll60k, microsoft/wavlm-large, facebook/wav2vec2-large +ssl_model_type: wavml +ssl_hub: microsoft/wavlm-large +ssl_folder: !ref /ssl_checkpoint +kmeans_cache_dir: !ref /kmeans_checkpoint +kmeans_dataset: LibriSpeech +vocoder_repo_id: speechbrain/hifigan-wavlm-k1000-LibriTTS +freeze_ssl: True +freeze_feature_extractor: True +num_clusters: 1000 +save_embedding: False + +### Config for Tokenizer +# Layer number should be among the supported layers for discrete SSL models(kmenas model should be available for that layer) +# ssl_layer_num: [3, 7, 12, 23] +# deduplicate: [False, False, False, False] +# bpe_tokenizer_path: [null , null, null, null] +ssl_layer_num: [1, 3, 7, 12, 18, 23] +num_codebooks: 6 +deduplicate: [False, False, False, False, False, False] +bpe_tokenizer_path: [null, null, null, null, null, null] +sample_rate: 16000 +encoder_dim: 1024 + +ssl_model: !apply:speechbrain.utils.hparams.choice + value: !ref + choices: + wavlm: !new:speechbrain.lobes.models.huggingface_transformers.wavlm.WavLM + source: !ref + output_norm: False + freeze: !ref + freeze_feature_extractor: !ref + output_all_hiddens: True + save_path: !ref + hubert: !new:speechbrain.lobes.models.huggingface_transformers.hubert.HuBERT + source: !ref + output_norm: False + freeze: !ref + freeze_feature_extractor: !ref + output_all_hiddens: True + save_path: !ref + wav2vec2: !new:speechbrain.lobes.models.huggingface_transformers.wav2vec2.Wav2Vec2 + source: !ref + output_norm: False + freeze: !ref + freeze_feature_extractor: !ref + output_all_hiddens: True + save_path: !ref + +tokenizer: !new:model.tokenizer_interface.DiscreteSSLTokenizer + save_path: !ref + ssl_model: !ref + vocoder_repo_id: !ref + kmeans_dataset: !ref + num_clusters: !ref + +tokens_extractor: !new:utils.tokens.TokensExtractor + tokenizer: !ref + sample_rate: !ref + src_key: !ref + id_key: !ref + dataloader_opts: !ref \ No newline at end of file diff --git a/benchmarks/DASB/extra_requirements.txt b/benchmarks/DASB/extra_requirements.txt index 4d1d241c3..db9ae4376 100644 --- a/benchmarks/DASB/extra_requirements.txt +++ b/benchmarks/DASB/extra_requirements.txt @@ -8,3 +8,4 @@ speechtokenizer>=0.1.2 tensorboard tgt unidecode +kaldiio diff --git a/benchmarks/DASB/model/tokenizer_interface.py b/benchmarks/DASB/model/tokenizer_interface.py index 3499bba9e..68fdf4221 100644 --- a/benchmarks/DASB/model/tokenizer_interface.py +++ b/benchmarks/DASB/model/tokenizer_interface.py @@ -115,6 +115,7 @@ class SpeechTokenizer(SpeechTokenizer_interface, BaseTokenizer): def __init__(self, *args, **kwargs): SpeechTokenizer_interface.__init__(self, *args, **kwargs) BaseTokenizer.__init__(self) + self.sample_rate = 16000 @torch.no_grad() def sig_to_tokens(self, signal, lengths, num_codebooks=None, **kwargs): From fcb5209e80ae7f4588ec4c205884f4d14a06bbc0 Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Mon, 23 Dec 2024 14:29:59 -0500 Subject: [PATCH 14/61] fix discrete_ssl bug --- .../extraction/hparams/discrete_ssl.yaml | 2 +- .../hparams/discrete_ssl_wavlm.yaml | 83 ------------------- 2 files changed, 1 insertion(+), 84 deletions(-) delete mode 100644 benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl_wavlm.yaml diff --git a/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl.yaml b/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl.yaml index 6a58b0135..d6715c54e 100644 --- a/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl.yaml +++ b/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl.yaml @@ -54,7 +54,7 @@ save_embedding: False # deduplicate: [False, False, False, False] # bpe_tokenizer_path: [null , null, null, null] ssl_layer_num: [1, 3, 7, 12, 18, 23] -num_codebooks: 6 +num_codebooks: [1, 3, 7, 12, 18, 23] deduplicate: [False, False, False, False, False, False] bpe_tokenizer_path: [null, null, null, null, null, null] sample_rate: 16000 diff --git a/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl_wavlm.yaml b/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl_wavlm.yaml deleted file mode 100644 index 2263547c5..000000000 --- a/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl_wavlm.yaml +++ /dev/null @@ -1,83 +0,0 @@ -# ############################################################################ -# Auido Tokenizer: WavLM -# Extraction: Librispeech 960h -# Authors: Jarod Duret 2024 -# ############################################################################ -# Seed needs to be set at top of yaml, before objects with parameters are made - -seed: 1986 -__set_seed: !apply:torch.manual_seed [!ref ] -output_folder: !ref results/wavlm -save_folder: !ref /save -train_log: !ref /extraction_log.txt - -# Data files -data_folder: !PLACEHOLDER # e.g., /path/to/LibriSpeech -train_splits: ["train-clean-100"] #, "train-clean-360", "train-other-500" -dev_splits: ["dev-clean"] -test_splits: ["dev-clean", "test-clean", "test-other"] -skip_prep: False -train_csv: !ref /train.csv -valid_csv: !ref /dev-clean.csv -test_csv: - - !ref /test-clean.csv - - !ref /test-other.csv - -batch_size: 8 -num_workers: 8 -src_key: wav -id_key: id - -# Dataloader options -dataloader_opts: - batch_size: !ref - shuffle: True - num_workers: !ref - -### Configuration for discrete SSL model -# ssl_model_type: hubert, wavlm, wav2vec2 -# ssl_hub: facebook/hubert-large-ll60k, microsoft/wavlm-large, facebook/wav2vec2-large -ssl_model_type: wavml -ssl_hub: microsoft/wavlm-large -ssl_folder: !ref /ssl_checkpoint -kmeans_cache_dir: !ref /kmeans_checkpoint -kmeans_dataset: LibriSpeech -vocoder_repo_id: speechbrain/hifigan-wavlm-k1000-LibriTTS -freeze_ssl: True -freeze_feature_extractor: True -num_clusters: 1000 -save_embedding: False - -### Config for Tokenizer -# Layer number should be among the supported layers for discrete SSL models(kmenas model should be available for that layer) -# ssl_layer_num: [3, 7, 12, 23] -# deduplicate: [False, False, False, False] -# bpe_tokenizer_path: [null , null, null, null] -ssl_layer_num: [1, 3, 7, 12, 18, 23] -num_codebooks: 6 -deduplicate: [False, False, False, False, False, False] -bpe_tokenizer_path: [null, null, null, null, null, null] -sample_rate: 16000 -encoder_dim: 1024 - -ssl_model: !new:speechbrain.lobes.models.huggingface_transformers.wavlm.WavLM - source: !ref - output_norm: False - freeze: !ref - freeze_feature_extractor: !ref - output_all_hiddens: True - save_path: !ref - -tokenizer: !new:model.tokenizer_interface.DiscreteSSLTokenizer - save_path: !ref - ssl_model: !ref - vocoder_repo_id: !ref - kmeans_dataset: !ref - num_clusters: !ref - -tokens_extractor: !new:utils.tokens.TokensExtractor - tokenizer: !ref - sample_rate: !ref - src_key: !ref - id_key: !ref - dataloader_opts: !ref \ No newline at end of file From 0d575d43cb4e818d5bf01d90906d9844e21d8a05 Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Mon, 23 Dec 2024 17:55:16 -0500 Subject: [PATCH 15/61] fix bug --- .../DASB/LibriSpeech/extraction/hparams/discrete_ssl.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl.yaml b/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl.yaml index d6715c54e..9ce170b66 100644 --- a/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl.yaml +++ b/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl.yaml @@ -37,7 +37,7 @@ dataloader_opts: ### Configuration for discrete SSL model # ssl_model_type: hubert, wavlm, wav2vec2 # ssl_hub: facebook/hubert-large-ll60k, microsoft/wavlm-large, facebook/wav2vec2-large -ssl_model_type: wavml +ssl_model_type: wavlm ssl_hub: microsoft/wavlm-large ssl_folder: !ref /ssl_checkpoint kmeans_cache_dir: !ref /kmeans_checkpoint From 447844c3fcb5ff22e9bc5212725afad02d648d76 Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Mon, 23 Dec 2024 20:52:21 -0500 Subject: [PATCH 16/61] fix bug --- benchmarks/DASB/model/tokenizer_interface.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks/DASB/model/tokenizer_interface.py b/benchmarks/DASB/model/tokenizer_interface.py index 68fdf4221..6c5ab5acd 100644 --- a/benchmarks/DASB/model/tokenizer_interface.py +++ b/benchmarks/DASB/model/tokenizer_interface.py @@ -99,9 +99,9 @@ def tokens_to_sig(self, tokens, **kwargs): def get_pretrained_embeddings( self, vocab_size=None, num_codebooks=None , **kwargs ): - toks = torch.arange(vocab_size, device=device) + toks = torch.arange(vocab_size) toks = toks[:, None, None].expand(-1, num_codebooks, -1).clone() - self.to(device).eval() + self.eval() z_q, z_p, _ = self.quantizer.from_codes(toks) z_ps = z_p.split(z_p.shape[1] // toks.shape[1], dim=1) z_qs = [ From 8aeaeb92a8238cece88e619cb0674809368409d9 Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Mon, 23 Dec 2024 21:04:39 -0500 Subject: [PATCH 17/61] fix discrete_ssl train.py for specifiying which layer to use --- benchmarks/DASB/utils/tokens.py | 37 +++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/benchmarks/DASB/utils/tokens.py b/benchmarks/DASB/utils/tokens.py index 7090325db..994490958 100644 --- a/benchmarks/DASB/utils/tokens.py +++ b/benchmarks/DASB/utils/tokens.py @@ -299,9 +299,10 @@ def tokens_by_uttid(self, utt_id, num_codebooks=None): --------- utt_id : str The utterance ID to retrieve tokens for. - num_codebooks : int, optional - The number of codebooks to retrieve from the tokens. If specified, the tokens will be truncated - to include only the first `num_codebooks` codebooks. If not specified, all codebooks are returned. + num_codebooks : int or list, optional + The number of codebooks to retrieve from the tokens. If specified as an int, the tokens + will be truncated to include only the first `num_codebooks` codebooks. If specified as a list, + the tokens will include only the codebooks at the specified indices. If not specified, all codebooks are returned. Returns ------- @@ -322,16 +323,26 @@ def tokens_by_uttid(self, utt_id, num_codebooks=None): tokens = torch.from_numpy(tokens).long() if num_codebooks is not None: - if not isinstance(num_codebooks, int) or num_codebooks <= 0: - raise ValueError( - f"Invalid num_codebooks value: {num_codebooks}. It must be a positive integer." - ) - if num_codebooks > tokens.size(-1): - raise ValueError( - f"Invalid number of codebooks: {num_codebooks}. " - f"Available codebooks: {tokens.size(-1)}." - ) - tokens = tokens[:, :num_codebooks] + if isinstance(num_codebooks, int): + if num_codebooks <= 0: + raise ValueError( + f"Invalid num_codebooks value: {num_codebooks}. It must be a positive integer." + ) + if num_codebooks > tokens.size(-1): + raise ValueError( + f"Invalid number of codebooks: {num_codebooks}. " + f"Available codebooks: {tokens.size(-1)}." + ) + tokens = tokens[:, :num_codebooks] + elif isinstance(num_codebooks, list): + if not all(isinstance(idx, int) and 0 <= idx < tokens.size(-1) for idx in num_codebooks): + raise ValueError( + f"Invalid indices in num_codebooks list: {num_codebooks}. " + f"All indices must be integers within the range [0, {tokens.size(-1) - 1}]." + ) + tokens = tokens[:, num_codebooks] + else: + raise ValueError("num_codebooks must be an int or a list.") return tokens From c831e609dc78d251089433a01baf39ec2beccc24 Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Mon, 23 Dec 2024 21:18:05 -0500 Subject: [PATCH 18/61] fix discrete_ssl --- benchmarks/DASB/model/custom_model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/DASB/model/custom_model.py b/benchmarks/DASB/model/custom_model.py index 1c655fc65..3ad6830c6 100644 --- a/benchmarks/DASB/model/custom_model.py +++ b/benchmarks/DASB/model/custom_model.py @@ -63,7 +63,7 @@ def __init__( ): super(Discrete_EmbeddingLayer, self).__init__() self.vocab_size = vocab_size - self.num_codebooks = num_codebooks + self.num_codebooks = len(num_codebooks) if isinstance(num_codebooks, list) else num_codebooks self.freeze = freeze self.embedding = torch.nn.Embedding( num_codebooks * vocab_size, emb_dim From ecf761a99e2593a5fa9d28a97339864dc9247878 Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Mon, 23 Dec 2024 21:19:46 -0500 Subject: [PATCH 19/61] fix bug introduced in last commit --- benchmarks/DASB/model/custom_model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/DASB/model/custom_model.py b/benchmarks/DASB/model/custom_model.py index 3ad6830c6..01ff586df 100644 --- a/benchmarks/DASB/model/custom_model.py +++ b/benchmarks/DASB/model/custom_model.py @@ -66,7 +66,7 @@ def __init__( self.num_codebooks = len(num_codebooks) if isinstance(num_codebooks, list) else num_codebooks self.freeze = freeze self.embedding = torch.nn.Embedding( - num_codebooks * vocab_size, emb_dim + self.num_codebooks * vocab_size, emb_dim ).requires_grad_(not self.freeze) self.init = init From 0d2e30989e772e44faeb94e2bdb841b7fa26c9cf Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Mon, 23 Dec 2024 22:40:51 -0500 Subject: [PATCH 20/61] fix bug in saving pretrained embedding --- benchmarks/DASB/LibriSpeech/extraction/extract.py | 4 +++- benchmarks/DASB/utils/tokens.py | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/benchmarks/DASB/LibriSpeech/extraction/extract.py b/benchmarks/DASB/LibriSpeech/extraction/extract.py index 62d45cfec..93b309ff5 100644 --- a/benchmarks/DASB/LibriSpeech/extraction/extract.py +++ b/benchmarks/DASB/LibriSpeech/extraction/extract.py @@ -92,5 +92,7 @@ save_folder = pl.Path(hparams["save_folder"]) logger.info(f"Saving embeddings ...") tokens_extractor.save_pretrained_embeddings( - (save_folder / "embeddings").as_posix() + (save_folder / "embeddings").as_posix(), + hparams["num_codebooks"], + hparams["vocab_size"] ) diff --git a/benchmarks/DASB/utils/tokens.py b/benchmarks/DASB/utils/tokens.py index 994490958..474ec496f 100644 --- a/benchmarks/DASB/utils/tokens.py +++ b/benchmarks/DASB/utils/tokens.py @@ -197,7 +197,7 @@ def audio_pipeline(wav): return [audio_pipeline] - def save_pretrained_embeddings(self, save_path, save_name="embeddings"): + def save_pretrained_embeddings(self, save_path, save_name="embeddings",num_codebooks=None, vocab_size=None): """ Saves the pretrained embeddings of the tokenizer to a specified directory. @@ -216,7 +216,7 @@ def save_pretrained_embeddings(self, save_path, save_name="embeddings"): save_path = pl.Path(save_path).absolute() save_path.mkdir(parents=True, exist_ok=True) - embeddings = self.tokenizer.get_pretrained_embeddings() + embeddings = self.tokenizer.get_pretrained_embeddings(num_codebooks,vocab_size) embeddings = embeddings.cpu().numpy() np.save(save_path / save_name, embeddings) From 4729007d099d3d474c4a47f89602ed64a18214f0 Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Mon, 23 Dec 2024 22:44:08 -0500 Subject: [PATCH 21/61] fix --- benchmarks/DASB/LibriSpeech/extraction/extract.py | 3 ++- benchmarks/DASB/utils/tokens.py | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/benchmarks/DASB/LibriSpeech/extraction/extract.py b/benchmarks/DASB/LibriSpeech/extraction/extract.py index 93b309ff5..5ee2bbbba 100644 --- a/benchmarks/DASB/LibriSpeech/extraction/extract.py +++ b/benchmarks/DASB/LibriSpeech/extraction/extract.py @@ -93,6 +93,7 @@ logger.info(f"Saving embeddings ...") tokens_extractor.save_pretrained_embeddings( (save_folder / "embeddings").as_posix(), + hparams["vocab_size"], hparams["num_codebooks"], - hparams["vocab_size"] + ) diff --git a/benchmarks/DASB/utils/tokens.py b/benchmarks/DASB/utils/tokens.py index 474ec496f..930b10253 100644 --- a/benchmarks/DASB/utils/tokens.py +++ b/benchmarks/DASB/utils/tokens.py @@ -197,7 +197,7 @@ def audio_pipeline(wav): return [audio_pipeline] - def save_pretrained_embeddings(self, save_path, save_name="embeddings",num_codebooks=None, vocab_size=None): + def save_pretrained_embeddings(self, save_path, save_name="embeddings",vocab_size=None,num_codebooks=None): """ Saves the pretrained embeddings of the tokenizer to a specified directory. @@ -216,7 +216,7 @@ def save_pretrained_embeddings(self, save_path, save_name="embeddings",num_codeb save_path = pl.Path(save_path).absolute() save_path.mkdir(parents=True, exist_ok=True) - embeddings = self.tokenizer.get_pretrained_embeddings(num_codebooks,vocab_size) + embeddings = self.tokenizer.get_pretrained_embeddings(vocab_size,num_codebooks) embeddings = embeddings.cpu().numpy() np.save(save_path / save_name, embeddings) From 7a0ecc2875db91f06301c11adc5ef080a2b3647c Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Mon, 23 Dec 2024 23:00:46 -0500 Subject: [PATCH 22/61] fix bug intriduced in prev commit --- benchmarks/DASB/LibriSpeech/extraction/extract.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks/DASB/LibriSpeech/extraction/extract.py b/benchmarks/DASB/LibriSpeech/extraction/extract.py index 5ee2bbbba..7310a1469 100644 --- a/benchmarks/DASB/LibriSpeech/extraction/extract.py +++ b/benchmarks/DASB/LibriSpeech/extraction/extract.py @@ -93,7 +93,7 @@ logger.info(f"Saving embeddings ...") tokens_extractor.save_pretrained_embeddings( (save_folder / "embeddings").as_posix(), - hparams["vocab_size"], - hparams["num_codebooks"], + vocab_size=hparams["vocab_size"], + num_codebooks=hparams["num_codebooks"], ) From 73dfa4d32429dc64f18be78201779c39771d2c44 Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Mon, 23 Dec 2024 23:30:09 -0500 Subject: [PATCH 23/61] fix bug for saveing embeedng --- .../DASB/LibriSpeech/extraction/hparams/discrete_ssl.yaml | 4 ++-- benchmarks/DASB/model/tokenizer_interface.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl.yaml b/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl.yaml index 9ce170b66..6d38e285c 100644 --- a/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl.yaml +++ b/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl.yaml @@ -45,7 +45,7 @@ kmeans_dataset: LibriSpeech vocoder_repo_id: speechbrain/hifigan-wavlm-k1000-LibriTTS freeze_ssl: True freeze_feature_extractor: True -num_clusters: 1000 +vocab_size: 1000 save_embedding: False ### Config for Tokenizer @@ -90,7 +90,7 @@ tokenizer: !new:model.tokenizer_interface.DiscreteSSLTokenizer ssl_model: !ref vocoder_repo_id: !ref kmeans_dataset: !ref - num_clusters: !ref + num_clusters: !ref tokens_extractor: !new:utils.tokens.TokensExtractor tokenizer: !ref diff --git a/benchmarks/DASB/model/tokenizer_interface.py b/benchmarks/DASB/model/tokenizer_interface.py index 6c5ab5acd..a4d3ae111 100644 --- a/benchmarks/DASB/model/tokenizer_interface.py +++ b/benchmarks/DASB/model/tokenizer_interface.py @@ -138,7 +138,7 @@ def tokens_to_sig(self, tokens, **kwargs): def get_pretrained_embeddings( self, vocab_size=None, num_codebooks=None , **kwargs ): - toks = torch.arange(vocab_size) + toks = torch.arange(vocab_size).to(next(self.parameters()).device) toks = toks[None, :, None].expand(num_codebooks, -1, -1).clone() self.eval() embs = [ @@ -181,4 +181,4 @@ def get_pretrained_embeddings( ) ) embs = torch.cat(embs) - return embs + return embs \ No newline at end of file From a9e8f3b8b2e76831c7c460fde426479b95b2c769 Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Mon, 23 Dec 2024 23:35:46 -0500 Subject: [PATCH 24/61] add vocab_size to encodec --- benchmarks/DASB/LibriSpeech/extraction/hparams/encodec.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/benchmarks/DASB/LibriSpeech/extraction/hparams/encodec.yaml b/benchmarks/DASB/LibriSpeech/extraction/hparams/encodec.yaml index 81cbd0fb2..255914c86 100644 --- a/benchmarks/DASB/LibriSpeech/extraction/hparams/encodec.yaml +++ b/benchmarks/DASB/LibriSpeech/extraction/hparams/encodec.yaml @@ -36,6 +36,7 @@ dataloader_opts: bandwidth: 1.5 num_codebooks: 2 +vocab_size: 1024 sample_rate: 24000 save_embedding: False From 4237bacf10713ffa5281447909fb6e6a51230af7 Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Mon, 23 Dec 2024 23:48:45 -0500 Subject: [PATCH 25/61] fix bug --- benchmarks/DASB/model/tokenizer_interface.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/DASB/model/tokenizer_interface.py b/benchmarks/DASB/model/tokenizer_interface.py index a4d3ae111..91dea8042 100644 --- a/benchmarks/DASB/model/tokenizer_interface.py +++ b/benchmarks/DASB/model/tokenizer_interface.py @@ -99,7 +99,7 @@ def tokens_to_sig(self, tokens, **kwargs): def get_pretrained_embeddings( self, vocab_size=None, num_codebooks=None , **kwargs ): - toks = torch.arange(vocab_size) + toks = torch.arange(vocab_size).to(next(self.parameters()).device) toks = toks[:, None, None].expand(-1, num_codebooks, -1).clone() self.eval() z_q, z_p, _ = self.quantizer.from_codes(toks) From 867228ebcb1ca586944315c91ecea312650cf7ac Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Tue, 24 Dec 2024 00:24:15 -0500 Subject: [PATCH 26/61] fix embedding loading for train.py --- benchmarks/DASB/LibriSpeech/ASR/train.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/benchmarks/DASB/LibriSpeech/ASR/train.py b/benchmarks/DASB/LibriSpeech/ASR/train.py index 746a068e1..b6a9f712e 100644 --- a/benchmarks/DASB/LibriSpeech/ASR/train.py +++ b/benchmarks/DASB/LibriSpeech/ASR/train.py @@ -361,6 +361,12 @@ def text_pipeline(wrd): embs = tokens_loader.load_pretrained_embeddings( hparams["pretain_embeddings_folder"] ) + if isinstance(hparams['num_codebooks'], int): + embs= embs[:hparams['num_codebooks']*hparams['vocab_size'],] + elif isinstance(hparams['num_codebooks'], list): + indices = [i for codebook_idx in hparams['num_codebooks'] for i in range(codebook_idx * hparams['vocab_size'], (codebook_idx + 1) * hparams['vocab_size'])] + indices = torch.tensor(indices, dtype=torch.long) + embs = embs[indices] hparams["discrete_embedding_layer"].init_embedding(embs) # Log number of parameters/buffers From 3570b636309becb4318371f546deefece4599d6d Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Tue, 24 Dec 2024 10:45:25 -0500 Subject: [PATCH 27/61] fix precommit --- .../LibriSpeech/ASR/hparams/LSTM/train.yaml | 2 +- benchmarks/DASB/LibriSpeech/ASR/train.py | 32 ++++++---- .../DASB/LibriSpeech/extraction/extract.py | 3 - .../LibriSpeech/extraction/hparams/dac.yaml | 16 ++--- .../extraction/hparams/discrete_ssl.yaml | 64 +++++++++---------- .../extraction/hparams/encodec.yaml | 22 +++---- .../extraction/hparams/speech_tokenizer.yaml | 12 ++-- benchmarks/DASB/extra_requirements.txt | 2 +- benchmarks/DASB/model/custom_model.py | 6 +- benchmarks/DASB/model/tokenizer_interface.py | 25 +++----- benchmarks/DASB/utils/tokens.py | 17 ++++- 11 files changed, 106 insertions(+), 95 deletions(-) diff --git a/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml b/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml index 89d347862..0f807c937 100644 --- a/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml +++ b/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml @@ -132,7 +132,7 @@ prune_history: False ############################## models ################################ tokens_loader: !new:utils.tokens.TokensLoader - data_path: !ref + data_path: !ref discrete_embedding_layer: !new:model.custom_model.Discrete_EmbeddingLayer num_codebooks: !ref diff --git a/benchmarks/DASB/LibriSpeech/ASR/train.py b/benchmarks/DASB/LibriSpeech/ASR/train.py index b6a9f712e..d7b86f659 100644 --- a/benchmarks/DASB/LibriSpeech/ASR/train.py +++ b/benchmarks/DASB/LibriSpeech/ASR/train.py @@ -175,8 +175,7 @@ def dataio_prepare(hparams, tokenizer): data_folder = hparams["data_folder"] train_data = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=hparams["train_csv"], - replacements={"data_root": data_folder}, + csv_path=hparams["train_csv"], replacements={"data_root": data_folder}, ) if hparams["sorting"] == "ascending": @@ -201,8 +200,7 @@ def dataio_prepare(hparams, tokenizer): ) valid_data = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=hparams["valid_csv"], - replacements={"data_root": data_folder}, + csv_path=hparams["valid_csv"], replacements={"data_root": data_folder}, ) valid_data = valid_data.filtered_sorted(sort_key="duration") @@ -238,8 +236,7 @@ def audio_pipeline(wav): sig = sb.dataio.dataio.read_audio(wav) info = torchaudio.info(wav) resampled = torchaudio.transforms.Resample( - info.sample_rate, - hparams["sample_rate"], + info.sample_rate, hparams["sample_rate"], )(sig) # resampled = resampled.unsqueeze(0) return resampled @@ -264,8 +261,7 @@ def text_pipeline(wrd): # 4. Set output: sb.dataio.dataset.set_output_keys( - datasets, - ["id", "sig", "wrd", "char_list", "tokens", "speech_tokens"], + datasets, ["id", "sig", "wrd", "char_list", "tokens", "speech_tokens"], ) # 5. If Dynamic Batching is used, we instantiate the needed samplers. @@ -361,10 +357,19 @@ def text_pipeline(wrd): embs = tokens_loader.load_pretrained_embeddings( hparams["pretain_embeddings_folder"] ) - if isinstance(hparams['num_codebooks'], int): - embs= embs[:hparams['num_codebooks']*hparams['vocab_size'],] - elif isinstance(hparams['num_codebooks'], list): - indices = [i for codebook_idx in hparams['num_codebooks'] for i in range(codebook_idx * hparams['vocab_size'], (codebook_idx + 1) * hparams['vocab_size'])] + if isinstance(hparams["num_codebooks"], int): + embs = embs[ + : hparams["num_codebooks"] * hparams["vocab_size"], + ] + elif isinstance(hparams["num_codebooks"], list): + indices = [ + i + for codebook_idx in hparams["num_codebooks"] + for i in range( + codebook_idx * hparams["vocab_size"], + (codebook_idx + 1) * hparams["vocab_size"], + ) + ] indices = torch.tensor(indices, dtype=torch.long) embs = embs[indices] hparams["discrete_embedding_layer"].init_embedding(embs) @@ -401,8 +406,7 @@ def text_pipeline(wrd): from speechbrain.decoders.ctc import CTCBeamSearcher test_searcher = CTCBeamSearcher( - **hparams["test_beam_search"], - vocab_list=vocab_list, + **hparams["test_beam_search"], vocab_list=vocab_list, ) train_dataloader_opts = hparams["train_dataloader_opts"] diff --git a/benchmarks/DASB/LibriSpeech/extraction/extract.py b/benchmarks/DASB/LibriSpeech/extraction/extract.py index 7310a1469..3979ba731 100644 --- a/benchmarks/DASB/LibriSpeech/extraction/extract.py +++ b/benchmarks/DASB/LibriSpeech/extraction/extract.py @@ -7,8 +7,6 @@ import os import sys -import torch -import torchaudio import logging import pathlib as pl import speechbrain as sb @@ -95,5 +93,4 @@ (save_folder / "embeddings").as_posix(), vocab_size=hparams["vocab_size"], num_codebooks=hparams["num_codebooks"], - ) diff --git a/benchmarks/DASB/LibriSpeech/extraction/hparams/dac.yaml b/benchmarks/DASB/LibriSpeech/extraction/hparams/dac.yaml index c380f0478..13356cf63 100644 --- a/benchmarks/DASB/LibriSpeech/extraction/hparams/dac.yaml +++ b/benchmarks/DASB/LibriSpeech/extraction/hparams/dac.yaml @@ -30,9 +30,9 @@ id_key: id # Dataloader options dataloader_opts: - batch_size: !ref - shuffle: True - num_workers: !ref + batch_size: !ref + shuffle: True + num_workers: !ref ####################### Model parameters ########################### # Tokenizer parameters @@ -52,14 +52,14 @@ encoder_dim: 1024 save_embedding: False tokenizer: !new:model.tokenizer_interface.DACTokenizer - model_type: !ref - model_bitrate: !ref - load_pretrained: True - tag: latest + model_type: !ref + model_bitrate: !ref + load_pretrained: True + tag: latest tokens_extractor: !new:utils.tokens.TokensExtractor tokenizer: !ref sample_rate: !ref src_key: !ref id_key: !ref - dataloader_opts: !ref \ No newline at end of file + dataloader_opts: !ref diff --git a/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl.yaml b/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl.yaml index 6d38e285c..847038dd2 100644 --- a/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl.yaml +++ b/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl.yaml @@ -30,9 +30,9 @@ id_key: id # Dataloader options dataloader_opts: - batch_size: !ref - shuffle: True - num_workers: !ref + batch_size: !ref + shuffle: True + num_workers: !ref ### Configuration for discrete SSL model # ssl_model_type: hubert, wavlm, wav2vec2 @@ -61,40 +61,40 @@ sample_rate: 16000 encoder_dim: 1024 ssl_model: !apply:speechbrain.utils.hparams.choice - value: !ref - choices: - wavlm: !new:speechbrain.lobes.models.huggingface_transformers.wavlm.WavLM - source: !ref - output_norm: False - freeze: !ref - freeze_feature_extractor: !ref - output_all_hiddens: True - save_path: !ref - hubert: !new:speechbrain.lobes.models.huggingface_transformers.hubert.HuBERT - source: !ref - output_norm: False - freeze: !ref - freeze_feature_extractor: !ref - output_all_hiddens: True - save_path: !ref - wav2vec2: !new:speechbrain.lobes.models.huggingface_transformers.wav2vec2.Wav2Vec2 - source: !ref - output_norm: False - freeze: !ref - freeze_feature_extractor: !ref - output_all_hiddens: True - save_path: !ref + value: !ref + choices: + wavlm: !new:speechbrain.lobes.models.huggingface_transformers.wavlm.WavLM + source: !ref + output_norm: False + freeze: !ref + freeze_feature_extractor: !ref + output_all_hiddens: True + save_path: !ref + hubert: !new:speechbrain.lobes.models.huggingface_transformers.hubert.HuBERT + source: !ref + output_norm: False + freeze: !ref + freeze_feature_extractor: !ref + output_all_hiddens: True + save_path: !ref + wav2vec2: !new:speechbrain.lobes.models.huggingface_transformers.wav2vec2.Wav2Vec2 + source: !ref + output_norm: False + freeze: !ref + freeze_feature_extractor: !ref + output_all_hiddens: True + save_path: !ref tokenizer: !new:model.tokenizer_interface.DiscreteSSLTokenizer - save_path: !ref - ssl_model: !ref - vocoder_repo_id: !ref - kmeans_dataset: !ref - num_clusters: !ref + save_path: !ref + ssl_model: !ref + vocoder_repo_id: !ref + kmeans_dataset: !ref + num_clusters: !ref tokens_extractor: !new:utils.tokens.TokensExtractor tokenizer: !ref sample_rate: !ref src_key: !ref id_key: !ref - dataloader_opts: !ref \ No newline at end of file + dataloader_opts: !ref diff --git a/benchmarks/DASB/LibriSpeech/extraction/hparams/encodec.yaml b/benchmarks/DASB/LibriSpeech/extraction/hparams/encodec.yaml index 255914c86..3cd3b691a 100644 --- a/benchmarks/DASB/LibriSpeech/extraction/hparams/encodec.yaml +++ b/benchmarks/DASB/LibriSpeech/extraction/hparams/encodec.yaml @@ -30,9 +30,9 @@ id_key: id # Dataloader options dataloader_opts: - batch_size: !ref - shuffle: True - num_workers: !ref + batch_size: !ref + shuffle: True + num_workers: !ref bandwidth: 1.5 num_codebooks: 2 @@ -42,17 +42,17 @@ save_embedding: False # EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) tokenizer: !new:model.tokenizer_interface.EncodecTokenizer - source: facebook/encodec_24khz # Only the 24kHz version supports mono audio - save_path: !ref - sample_rate: !ref - bandwidth: !ref - flat_embeddings: False - freeze: True - renorm_embeddings: False + source: facebook/encodec_24khz # Only the 24kHz version supports mono audio + save_path: !ref + sample_rate: !ref + bandwidth: !ref + flat_embeddings: False + freeze: True + renorm_embeddings: False tokens_extractor: !new:utils.tokens.TokensExtractor tokenizer: !ref sample_rate: !ref src_key: !ref id_key: !ref - dataloader_opts: !ref \ No newline at end of file + dataloader_opts: !ref diff --git a/benchmarks/DASB/LibriSpeech/extraction/hparams/speech_tokenizer.yaml b/benchmarks/DASB/LibriSpeech/extraction/hparams/speech_tokenizer.yaml index 176768d5e..7726422f3 100644 --- a/benchmarks/DASB/LibriSpeech/extraction/hparams/speech_tokenizer.yaml +++ b/benchmarks/DASB/LibriSpeech/extraction/hparams/speech_tokenizer.yaml @@ -30,9 +30,9 @@ id_key: id # Dataloader options dataloader_opts: - batch_size: !ref - shuffle: True - num_workers: !ref + batch_size: !ref + shuffle: True + num_workers: !ref vocab_size: 1024 num_codebooks: 2 @@ -43,12 +43,12 @@ save_embedding: False # EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) tokenizer: !new:model.tokenizer_interface.SpeechTokenizer - source: fnlp/SpeechTokenizer # Only the 24kHz version supports mono audio - save_path: !ref + source: fnlp/SpeechTokenizer # Only the 24kHz version supports mono audio + save_path: !ref tokens_extractor: !new:utils.tokens.TokensExtractor tokenizer: !ref sample_rate: !ref src_key: !ref id_key: !ref - dataloader_opts: !ref \ No newline at end of file + dataloader_opts: !ref diff --git a/benchmarks/DASB/extra_requirements.txt b/benchmarks/DASB/extra_requirements.txt index db9ae4376..e04ccf781 100644 --- a/benchmarks/DASB/extra_requirements.txt +++ b/benchmarks/DASB/extra_requirements.txt @@ -1,5 +1,6 @@ beartype jsonlines +kaldiio librosa>=0.9.2 onnxruntime>=1.16.3 scikit-learn @@ -8,4 +9,3 @@ speechtokenizer>=0.1.2 tensorboard tgt unidecode -kaldiio diff --git a/benchmarks/DASB/model/custom_model.py b/benchmarks/DASB/model/custom_model.py index 01ff586df..972d35c66 100644 --- a/benchmarks/DASB/model/custom_model.py +++ b/benchmarks/DASB/model/custom_model.py @@ -63,7 +63,11 @@ def __init__( ): super(Discrete_EmbeddingLayer, self).__init__() self.vocab_size = vocab_size - self.num_codebooks = len(num_codebooks) if isinstance(num_codebooks, list) else num_codebooks + self.num_codebooks = ( + len(num_codebooks) + if isinstance(num_codebooks, list) + else num_codebooks + ) self.freeze = freeze self.embedding = torch.nn.Embedding( self.num_codebooks * vocab_size, emb_dim diff --git a/benchmarks/DASB/model/tokenizer_interface.py b/benchmarks/DASB/model/tokenizer_interface.py index 91dea8042..f63ddd6aa 100644 --- a/benchmarks/DASB/model/tokenizer_interface.py +++ b/benchmarks/DASB/model/tokenizer_interface.py @@ -38,9 +38,7 @@ def tokens_to_sig(self, tokens, **kwargs): @abstractmethod @torch.no_grad() - def get_pretrained_embeddings( - self, vocab_size, num_codebooks, **kwargs - ): + def get_pretrained_embeddings(self, vocab_size, num_codebooks, **kwargs): """Get codebook embeddings.""" pass @@ -97,7 +95,7 @@ def tokens_to_sig(self, tokens, **kwargs): @torch.no_grad() def get_pretrained_embeddings( - self, vocab_size=None, num_codebooks=None , **kwargs + self, vocab_size=None, num_codebooks=None, **kwargs ): toks = torch.arange(vocab_size).to(next(self.parameters()).device) toks = toks[:, None, None].expand(-1, num_codebooks, -1).clone() @@ -136,7 +134,7 @@ def tokens_to_sig(self, tokens, **kwargs): @torch.no_grad() def get_pretrained_embeddings( - self, vocab_size=None, num_codebooks=None , **kwargs + self, vocab_size=None, num_codebooks=None, **kwargs ): toks = torch.arange(vocab_size).to(next(self.parameters()).device) toks = toks[None, :, None].expand(num_codebooks, -1, -1).clone() @@ -154,9 +152,11 @@ def __init__(self, *args, **kwargs): BaseTokenizer.__init__(self) @torch.no_grad() - def sig_to_tokens(self, signal, lengths, num_codebooks=None,**kwargs): + def sig_to_tokens(self, signal, lengths, num_codebooks=None, **kwargs): self.eval() - tokens, _, _ = self.encode(signal, lengths, SSL_layers=num_codebooks,**kwargs) + tokens, _, _ = self.encode( + signal, lengths, SSL_layers=num_codebooks, **kwargs + ) return tokens @torch.no_grad() @@ -170,15 +170,10 @@ def get_pretrained_embeddings( ): embs = [] for layer_num, vocabulary in zip( - self.ssl_layer_ids, - self.vocabularies, + self.ssl_layer_ids, self.vocabularies, ): if layer_num not in num_codebooks: continue - embs.append( - torch.as_tensor( - vocabulary, dtype=torch.float32 - ) - ) + embs.append(torch.as_tensor(vocabulary, dtype=torch.float32)) embs = torch.cat(embs) - return embs \ No newline at end of file + return embs diff --git a/benchmarks/DASB/utils/tokens.py b/benchmarks/DASB/utils/tokens.py index 930b10253..03ea5049c 100644 --- a/benchmarks/DASB/utils/tokens.py +++ b/benchmarks/DASB/utils/tokens.py @@ -197,7 +197,13 @@ def audio_pipeline(wav): return [audio_pipeline] - def save_pretrained_embeddings(self, save_path, save_name="embeddings",vocab_size=None,num_codebooks=None): + def save_pretrained_embeddings( + self, + save_path, + save_name="embeddings", + vocab_size=None, + num_codebooks=None, + ): """ Saves the pretrained embeddings of the tokenizer to a specified directory. @@ -216,7 +222,9 @@ def save_pretrained_embeddings(self, save_path, save_name="embeddings",vocab_siz save_path = pl.Path(save_path).absolute() save_path.mkdir(parents=True, exist_ok=True) - embeddings = self.tokenizer.get_pretrained_embeddings(vocab_size,num_codebooks) + embeddings = self.tokenizer.get_pretrained_embeddings( + vocab_size, num_codebooks + ) embeddings = embeddings.cpu().numpy() np.save(save_path / save_name, embeddings) @@ -335,7 +343,10 @@ def tokens_by_uttid(self, utt_id, num_codebooks=None): ) tokens = tokens[:, :num_codebooks] elif isinstance(num_codebooks, list): - if not all(isinstance(idx, int) and 0 <= idx < tokens.size(-1) for idx in num_codebooks): + if not all( + isinstance(idx, int) and 0 <= idx < tokens.size(-1) + for idx in num_codebooks + ): raise ValueError( f"Invalid indices in num_codebooks list: {num_codebooks}. " f"All indices must be integers within the range [0, {tokens.size(-1) - 1}]." From 3ef996451bd4c189bb2b9d0032068f89824a58c1 Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Tue, 24 Dec 2024 10:51:32 -0500 Subject: [PATCH 28/61] move tokenizer_interface to util --- .../DASB/LibriSpeech/ASR-on-the-fly/hparams/LSTM/dac.yaml | 2 +- .../DASB/LibriSpeech/ASR-on-the-fly/hparams/LSTM/encodec.yaml | 2 +- .../ASR-on-the-fly/hparams/LSTM/speech_tokenizer.yaml | 2 +- .../DASB/LibriSpeech/ASR-on-the-fly/hparams/contextnet/dac.yaml | 2 +- .../LibriSpeech/ASR-on-the-fly/hparams/contextnet/encodec.yaml | 2 +- .../ASR-on-the-fly/hparams/contextnet/speech_tokenizer.yaml | 2 +- benchmarks/DASB/LibriSpeech/extraction/hparams/dac.yaml | 2 +- .../DASB/LibriSpeech/extraction/hparams/discrete_ssl.yaml | 2 +- benchmarks/DASB/LibriSpeech/extraction/hparams/encodec.yaml | 2 +- .../DASB/LibriSpeech/extraction/hparams/speech_tokenizer.yaml | 2 +- benchmarks/DASB/{model => utils}/tokenizer_interface.py | 0 11 files changed, 10 insertions(+), 10 deletions(-) rename benchmarks/DASB/{model => utils}/tokenizer_interface.py (100%) diff --git a/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/LSTM/dac.yaml b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/LSTM/dac.yaml index 806305774..ff1749fab 100644 --- a/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/LSTM/dac.yaml +++ b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/LSTM/dac.yaml @@ -135,7 +135,7 @@ prune_history: False ############################## models ################################ # EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) -tokenizer: !new:model.tokenizer_interface.DACTokenizer +tokenizer: !new:utils.tokenizer_interface.DACTokenizer model_type: !ref model_bitrate: !ref load_pretrained: True diff --git a/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/LSTM/encodec.yaml b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/LSTM/encodec.yaml index 18d967244..dd4f62bf4 100644 --- a/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/LSTM/encodec.yaml +++ b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/LSTM/encodec.yaml @@ -132,7 +132,7 @@ prune_history: False ############################## models ################################ # EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) -tokenizer: !new:model.tokenizer_interface.EncodecTokenizer +tokenizer: !new:utils.tokenizer_interface.EncodecTokenizer source: facebook/encodec_24khz # Only the 24kHz version supports mono audio save_path: !ref sample_rate: !ref diff --git a/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/LSTM/speech_tokenizer.yaml b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/LSTM/speech_tokenizer.yaml index 99d423b87..bb0b32a43 100644 --- a/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/LSTM/speech_tokenizer.yaml +++ b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/LSTM/speech_tokenizer.yaml @@ -127,7 +127,7 @@ prune_history: False ############################## models ################################ # EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) -tokenizer: !new:model.tokenizer_interface.SpeechTokenizer +tokenizer: !new:utils.tokenizer_interface.SpeechTokenizer source: fnlp/SpeechTokenizer # Only the 24kHz version supports mono audio save_path: !ref diff --git a/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/contextnet/dac.yaml b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/contextnet/dac.yaml index aa7d2e141..b60b32604 100644 --- a/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/contextnet/dac.yaml +++ b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/contextnet/dac.yaml @@ -131,7 +131,7 @@ prune_history: False ############################## models ################################ # EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) -tokenizer: !new:model.tokenizer_interface.DACTokenizer +tokenizer: !new:utils.tokenizer_interface.DACTokenizer model_type: !ref model_bitrate: !ref load_pretrained: True diff --git a/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/contextnet/encodec.yaml b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/contextnet/encodec.yaml index a1b5262d3..7c0dcfc45 100644 --- a/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/contextnet/encodec.yaml +++ b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/contextnet/encodec.yaml @@ -125,7 +125,7 @@ prune_history: False ############################## models ################################ # EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) -tokenizer: !new:model.tokenizer_interface.EncodecTokenizer +tokenizer: !new:utils.tokenizer_interface.EncodecTokenizer source: facebook/encodec_24khz # Only the 24kHz version supports mono audio save_path: !ref sample_rate: !ref diff --git a/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/contextnet/speech_tokenizer.yaml b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/contextnet/speech_tokenizer.yaml index c12d6f79f..3dcd7eea7 100644 --- a/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/contextnet/speech_tokenizer.yaml +++ b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/contextnet/speech_tokenizer.yaml @@ -121,7 +121,7 @@ prune_history: False ############################## models ################################ # EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) -tokenizer: !new:model.tokenizer_interface.SpeechTokenizer +tokenizer: !new:utils.tokenizer_interface.SpeechTokenizer source: fnlp/SpeechTokenizer # Only the 24kHz version supports mono audio save_path: !ref diff --git a/benchmarks/DASB/LibriSpeech/extraction/hparams/dac.yaml b/benchmarks/DASB/LibriSpeech/extraction/hparams/dac.yaml index 13356cf63..3f3d7e92f 100644 --- a/benchmarks/DASB/LibriSpeech/extraction/hparams/dac.yaml +++ b/benchmarks/DASB/LibriSpeech/extraction/hparams/dac.yaml @@ -51,7 +51,7 @@ sample_rate: 24000 encoder_dim: 1024 save_embedding: False -tokenizer: !new:model.tokenizer_interface.DACTokenizer +tokenizer: !new:utils.tokenizer_interface.DACTokenizer model_type: !ref model_bitrate: !ref load_pretrained: True diff --git a/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl.yaml b/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl.yaml index 847038dd2..12b738bfd 100644 --- a/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl.yaml +++ b/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl.yaml @@ -85,7 +85,7 @@ ssl_model: !apply:speechbrain.utils.hparams.choice output_all_hiddens: True save_path: !ref -tokenizer: !new:model.tokenizer_interface.DiscreteSSLTokenizer +tokenizer: !new:utils.tokenizer_interface.DiscreteSSLTokenizer save_path: !ref ssl_model: !ref vocoder_repo_id: !ref diff --git a/benchmarks/DASB/LibriSpeech/extraction/hparams/encodec.yaml b/benchmarks/DASB/LibriSpeech/extraction/hparams/encodec.yaml index 3cd3b691a..1e226c45b 100644 --- a/benchmarks/DASB/LibriSpeech/extraction/hparams/encodec.yaml +++ b/benchmarks/DASB/LibriSpeech/extraction/hparams/encodec.yaml @@ -41,7 +41,7 @@ sample_rate: 24000 save_embedding: False # EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) -tokenizer: !new:model.tokenizer_interface.EncodecTokenizer +tokenizer: !new:utils.tokenizer_interface.EncodecTokenizer source: facebook/encodec_24khz # Only the 24kHz version supports mono audio save_path: !ref sample_rate: !ref diff --git a/benchmarks/DASB/LibriSpeech/extraction/hparams/speech_tokenizer.yaml b/benchmarks/DASB/LibriSpeech/extraction/hparams/speech_tokenizer.yaml index 7726422f3..acd292a19 100644 --- a/benchmarks/DASB/LibriSpeech/extraction/hparams/speech_tokenizer.yaml +++ b/benchmarks/DASB/LibriSpeech/extraction/hparams/speech_tokenizer.yaml @@ -42,7 +42,7 @@ freeze_embedding: False save_embedding: False # EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) -tokenizer: !new:model.tokenizer_interface.SpeechTokenizer +tokenizer: !new:utils.tokenizer_interface.SpeechTokenizer source: fnlp/SpeechTokenizer # Only the 24kHz version supports mono audio save_path: !ref diff --git a/benchmarks/DASB/model/tokenizer_interface.py b/benchmarks/DASB/utils/tokenizer_interface.py similarity index 100% rename from benchmarks/DASB/model/tokenizer_interface.py rename to benchmarks/DASB/utils/tokenizer_interface.py From ca05ac6189d9c77ee6c3272328c235e4f5b42c39 Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Tue, 24 Dec 2024 11:13:24 -0500 Subject: [PATCH 29/61] update extract doc and comments and set to highest bitrate --- .../LibriSpeech/extraction/hparams/dac.yaml | 2 +- .../extraction/hparams/discrete_ssl.yaml | 18 ++++++++++-------- .../extraction/hparams/encodec.yaml | 9 +++++++-- .../extraction/hparams/speech_tokenizer.yaml | 2 +- 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/benchmarks/DASB/LibriSpeech/extraction/hparams/dac.yaml b/benchmarks/DASB/LibriSpeech/extraction/hparams/dac.yaml index 3f3d7e92f..d2d935ed0 100644 --- a/benchmarks/DASB/LibriSpeech/extraction/hparams/dac.yaml +++ b/benchmarks/DASB/LibriSpeech/extraction/hparams/dac.yaml @@ -45,7 +45,7 @@ dataloader_opts: model_type: 24khz vocab_size: 1024 model_bitrate: 8kbps -num_codebooks: 2 +num_codebooks: 32 sample_rate: 24000 # Feature parameters encoder_dim: 1024 diff --git a/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl.yaml b/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl.yaml index 12b738bfd..7d4938625 100644 --- a/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl.yaml +++ b/benchmarks/DASB/LibriSpeech/extraction/hparams/discrete_ssl.yaml @@ -35,9 +35,15 @@ dataloader_opts: num_workers: !ref ### Configuration for discrete SSL model +# | SSL Model | HF Encoder | K-Means Dataset | K-Means Size | SSL Layers | Vocoder Model | +# |------------|----------------------------------------|-----------------|--------------|----------------------|------------------------------------------| +# | WavLM | microsoft/wavlm-large | LibriSpeech960 | 1000 | 1, 3, 7, 12, 18, 23 | speechbrain/hifigan-wavlm-k1000-LibriTTS | +# | HuBERT | facebook/hubert-large-ll60k | LibriSpeech960 | 1000 | 1, 3, 7, 12, 18, 23 | WIP | +# | Wav2Vec2 | facebook/wav2vec2-large-960h-lv60-self | LibriSpeech960 | 1000 | 1, 3, 7, 12, 18, 23 | WIP | + # ssl_model_type: hubert, wavlm, wav2vec2 # ssl_hub: facebook/hubert-large-ll60k, microsoft/wavlm-large, facebook/wav2vec2-large -ssl_model_type: wavlm +ssl_model_type: WavLM ssl_hub: microsoft/wavlm-large ssl_folder: !ref /ssl_checkpoint kmeans_cache_dir: !ref /kmeans_checkpoint @@ -50,10 +56,6 @@ save_embedding: False ### Config for Tokenizer # Layer number should be among the supported layers for discrete SSL models(kmenas model should be available for that layer) -# ssl_layer_num: [3, 7, 12, 23] -# deduplicate: [False, False, False, False] -# bpe_tokenizer_path: [null , null, null, null] -ssl_layer_num: [1, 3, 7, 12, 18, 23] num_codebooks: [1, 3, 7, 12, 18, 23] deduplicate: [False, False, False, False, False, False] bpe_tokenizer_path: [null, null, null, null, null, null] @@ -63,21 +65,21 @@ encoder_dim: 1024 ssl_model: !apply:speechbrain.utils.hparams.choice value: !ref choices: - wavlm: !new:speechbrain.lobes.models.huggingface_transformers.wavlm.WavLM + WavLM: !new:speechbrain.lobes.models.huggingface_transformers.wavlm.WavLM source: !ref output_norm: False freeze: !ref freeze_feature_extractor: !ref output_all_hiddens: True save_path: !ref - hubert: !new:speechbrain.lobes.models.huggingface_transformers.hubert.HuBERT + HuBERT: !new:speechbrain.lobes.models.huggingface_transformers.hubert.HuBERT source: !ref output_norm: False freeze: !ref freeze_feature_extractor: !ref output_all_hiddens: True save_path: !ref - wav2vec2: !new:speechbrain.lobes.models.huggingface_transformers.wav2vec2.Wav2Vec2 + Wav2Vec2: !new:speechbrain.lobes.models.huggingface_transformers.wav2vec2.Wav2Vec2 source: !ref output_norm: False freeze: !ref diff --git a/benchmarks/DASB/LibriSpeech/extraction/hparams/encodec.yaml b/benchmarks/DASB/LibriSpeech/extraction/hparams/encodec.yaml index 1e226c45b..ee0a7e910 100644 --- a/benchmarks/DASB/LibriSpeech/extraction/hparams/encodec.yaml +++ b/benchmarks/DASB/LibriSpeech/extraction/hparams/encodec.yaml @@ -34,8 +34,13 @@ dataloader_opts: shuffle: True num_workers: !ref -bandwidth: 1.5 -num_codebooks: 2 +# EnCodec parameters +# sample_rate: [24000, 24000, 24000, 24000] +# vocab_size: [1024, 1024, 1024, 1024] +# bandwidth: [1.5, 3.0, 6.0, 12.0, 24.0] +# num_codebooks: [2, 4, 8, 16, 32] +bandwidth: 24.0 +num_codebooks: 32 vocab_size: 1024 sample_rate: 24000 save_embedding: False diff --git a/benchmarks/DASB/LibriSpeech/extraction/hparams/speech_tokenizer.yaml b/benchmarks/DASB/LibriSpeech/extraction/hparams/speech_tokenizer.yaml index acd292a19..5d897a782 100644 --- a/benchmarks/DASB/LibriSpeech/extraction/hparams/speech_tokenizer.yaml +++ b/benchmarks/DASB/LibriSpeech/extraction/hparams/speech_tokenizer.yaml @@ -35,7 +35,7 @@ dataloader_opts: num_workers: !ref vocab_size: 1024 -num_codebooks: 2 +num_codebooks: 8 sample_rate: 16000 encoder_dim: 1024 freeze_embedding: False From a08891eb9647e14ede66844c46cd8c0231b6363d Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Tue, 24 Dec 2024 13:52:11 -0500 Subject: [PATCH 30/61] add run_script.sh --- .../LibriSpeech/ASR/hparams/LSTM/train.yaml | 32 ++- .../ASR/hparams/contextnet/train.yaml | 62 ++---- benchmarks/DASB/LibriSpeech/ASR/train.py | 3 + benchmarks/DASB/run_experiment.sh | 203 ++++++++++++++++++ benchmarks/DASB/utils/aggregate_results.py | 147 +++++++++++++ 5 files changed, 389 insertions(+), 58 deletions(-) create mode 100644 benchmarks/DASB/run_experiment.sh create mode 100644 benchmarks/DASB/utils/aggregate_results.py diff --git a/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml b/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml index 0f807c937..69e74ca54 100644 --- a/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml +++ b/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml @@ -5,7 +5,9 @@ # Decoder: CTC beam searcher and greedy searcher # Tokens: character # Training: Librispeech 960h -# Authors: Pooneh Mousavi 2024 +# Authors: +# - Pooneh Mousavi 2024 +# - Jarod Duret 2024 # ############################################################################ # Seed needs to be set at top of yaml, before objects with parameters are made @@ -20,6 +22,7 @@ train_log: !ref /train_log.txt # Data files data_folder: !PLACEHOLDER # e.g., /path/to/LibriSpeech +cached_data_folder: !PLACEHOLDER # e.g., path/to/cache # If RIRS_NOISES dir exists in /localscratch/xxx_corpus/RIRS_NOISES # then data_folder_rirs should be /localscratch/xxx_corpus # otherwise the dataset will automatically be downloaded @@ -28,15 +31,14 @@ train_splits: ["train-clean-100"] #["train-clean-100", "train-clean-360", "train dev_splits: ["dev-clean"] test_splits: ["dev-clean", "test-clean", "test-other"] skip_prep: False -train_csv: !ref /train.csv -valid_csv: !ref /dev-clean.csv +train_csv: !ref /train.csv +valid_csv: !ref /dev-clean.csv test_csv: - - !ref /dev-clean.csv - - !ref /test-clean.csv - -tokens_folder: !PLACEHOLDER -pretain_embeddings_folder: !PLACEHOLDER # Optional + - !ref /dev-clean.csv + - !ref /test-clean.csv +tokens_folder: !PLACEHOLDER # Path to the folder where extracted tokens are saved. +pretrain_embeddings_folder: none # Optional: If pretrain_embeddings is True, this should be set to the path where the pretrained embeddings are saved. ####################### Training Parameters #################################### number_of_epochs: 20 @@ -94,21 +96,17 @@ test_dataloader_opts: ####################### Model parameters ########################### # Tokenizer parameters -# sample_rate: [24000, 24000, 24000, 24000] -# vocab_size: [1024, 1024, 1024, 1024] -# bandwidth: [1.5, 3.0, 6.0, 12.0, 24.0] -# num_codebooks: [2, 4, 8, 16, 32] +# These parameters should be set according to the tokenizer used to extract tokens saved in . vocab_size: 1024 -# bandwidth: 1.5 num_codebooks: 2 sample_rate: 24000 + # Feature parameters encoder_dim: 1024 -# If set to True, the encoder_dim should be set to the dim of the tokenizer. For encodec it is 128. +# If set to True, encoder_dim should match the dimension of the tokenizer. For Encodec, it is 128. pretrain_embeddings: False freeze_embedding: False - # LSTM activation: !name:torch.nn.Sigmoid dnn_layers: 2 @@ -191,10 +189,6 @@ scheduler: !new:speechbrain.nnet.schedulers.NewBobScheduler improvement_threshold: 0.0025 annealing_factor: 0.8 patient: 0 -# scheduler: !new:speechbrain.nnet.schedulers.LinearNoamScheduler -# lr_initial: !ref -# n_warmup_steps: 7500 -# n_keep_steps: 36000 model_opt_class: !name:torch.optim.AdamW lr: !ref diff --git a/benchmarks/DASB/LibriSpeech/ASR/hparams/contextnet/train.yaml b/benchmarks/DASB/LibriSpeech/ASR/hparams/contextnet/train.yaml index c28fdead0..dcedc415d 100644 --- a/benchmarks/DASB/LibriSpeech/ASR/hparams/contextnet/train.yaml +++ b/benchmarks/DASB/LibriSpeech/ASR/hparams/contextnet/train.yaml @@ -5,13 +5,16 @@ # Decoder: CTC beam searcher and greedy searcher # Tokens: character # Training: Librispeech 960h -# Authors: Pooneh Mousavi 2024 +# Authors: +# - Pooneh Mousavi 2024 +# - Jarod Duret 2024 # ############################################################################ # Seed needs to be set at top of yaml, before objects with parameters are made seed: 1986 __set_seed: !apply:torch.manual_seed [!ref ] -output_folder: !ref results/enocdec/LSTM/ +run_name: !PLACEHOLDER +output_folder: !ref results/LSTM// output_wer_folder: !ref /wer.txt save_folder: !ref /save train_log: !ref /train_log.txt @@ -19,24 +22,27 @@ train_log: !ref /train_log.txt # Data files data_folder: !PLACEHOLDER # e.g., /path/to/LibriSpeech +cached_data_folder: !PLACEHOLDER # e.g., path/to/cache # If RIRS_NOISES dir exists in /localscratch/xxx_corpus/RIRS_NOISES # then data_folder_rirs should be /localscratch/xxx_corpus # otherwise the dataset will automatically be downloaded # data_folder_rirs: !ref -train_splits: ["train-clean-100", "train-clean-360", "train-other-500"] +train_splits: ["train-clean-100"] #["train-clean-100", "train-clean-360", "train-other-500"] dev_splits: ["dev-clean"] test_splits: ["dev-clean", "test-clean", "test-other"] skip_prep: False -train_csv: !ref /train.csv -valid_csv: !ref /dev-clean.csv +train_csv: !ref /train.csv +valid_csv: !ref /dev-clean.csv test_csv: - - !ref /dev-clean.csv - - !ref /test-clean.csv + - !ref /dev-clean.csv + - !ref /test-clean.csv +tokens_folder: !PLACEHOLDER # Path to the folder where extracted tokens are saved. +pretrain_embeddings_folder: none # Optional: If pretrain_embeddings is True, this should be set to the path where the pretrained embeddings are saved. ####################### Training Parameters #################################### number_of_epochs: 20 -batch_size: 4 # This works for 2x GPUs with 32GB +batch_size: 4 test_batch_size: 1 grad_accumulation_factor: 2 max_grad_norm: 5.0 @@ -53,10 +59,6 @@ weight_decay: 0.0005 # Training parameters -# To make Transformers converge, the global bath size should be large enough. -# The global batch size is max_batch_len * n_gpus * gradient_accumulation. -# Empirically, we used 850 * 8 A40 45G GPUs * 2 or 1700 * 4 A100 80G * 2. -# Please, set your parameters accordingly. dynamic_batching: True max_batch_length_train: 850 max_batch_len_val: 100 @@ -94,21 +96,17 @@ test_dataloader_opts: ####################### Model parameters ########################### # Tokenizer parameters -# sample_rate: [24000, 24000, 24000, 24000] -# vocab_size: [1024, 1024, 1024, 1024] -# bandwidth: [1.5, 3.0, 6.0, 12.0, 24.0] -# num_codebooks: [2, 4, 8, 16, 32] +# These parameters should be set according to the tokenizer used to extract tokens saved in . vocab_size: 1024 -# bandwidth: 1.5 num_codebooks: 2 sample_rate: 24000 + # Feature parameters encoder_dim: 1024 -# If set to True, the encoder_dim should be set to the dim of the tokenizer. For encodec it is 128. +# If set to True, encoder_dim should match the dimension of the tokenizer. For Encodec, it is 128. pretrain_embeddings: False freeze_embedding: False - # LSTM activation: !name:torch.nn.Sigmoid dnn_layers: 2 @@ -131,15 +129,8 @@ token_prune_min_logp: -1.2 prune_history: False ############################## models ################################ -# EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) -# tokenizer: !new:model.tokenizer_interface.EncodecTokenizer -# source: facebook/encodec_24khz # Only the 24kHz version supports mono audio -# save_path: !ref -# sample_rate: !ref -# bandwidth: !ref -# flat_embeddings: False -# freeze: True -# renorm_embeddings: False +tokens_loader: !new:utils.tokens.TokensLoader + data_path: !ref discrete_embedding_layer: !new:model.custom_model.Discrete_EmbeddingLayer num_codebooks: !ref @@ -153,15 +144,12 @@ attention_mlp: !new:model.custom_model.AttentionMLP input_dim: !ref hidden_dim: !ref -encoder: !new:speechbrain.nnet.RNN.LSTM - input_shape: [Null, Null, !ref ] - num_layers: !ref - bidirectional: True - dropout: !ref - hidden_size: !ref +encoder: !new:speechbrain.lobes.models.ContextNet.ContextNet + input_shape: [null, null, !ref ] + strides: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] ctc_lin: !new:speechbrain.nnet.linear.Linear - input_size: 2048 + input_size: 640 n_neurons: !ref modules: @@ -198,10 +186,6 @@ scheduler: !new:speechbrain.nnet.schedulers.NewBobScheduler improvement_threshold: 0.0025 annealing_factor: 0.8 patient: 0 -# scheduler: !new:speechbrain.nnet.schedulers.LinearNoamScheduler -# lr_initial: !ref -# n_warmup_steps: 7500 -# n_keep_steps: 36000 model_opt_class: !name:torch.optim.AdamW lr: !ref diff --git a/benchmarks/DASB/LibriSpeech/ASR/train.py b/benchmarks/DASB/LibriSpeech/ASR/train.py index d7b86f659..2758eb0eb 100644 --- a/benchmarks/DASB/LibriSpeech/ASR/train.py +++ b/benchmarks/DASB/LibriSpeech/ASR/train.py @@ -6,6 +6,7 @@ Authors * Pooneh Mousavi 2024 + * Jarod Duret 2024 """ import os @@ -361,6 +362,8 @@ def text_pipeline(wrd): embs = embs[ : hparams["num_codebooks"] * hparams["vocab_size"], ] + # For discrete SSL, num_codebooks is a list used to determine which layers to use. + # It is not sequential and can be, for example, [0, 1] or [1, 4]. elif isinstance(hparams["num_codebooks"], list): indices = [ i diff --git a/benchmarks/DASB/run_experiment.sh b/benchmarks/DASB/run_experiment.sh new file mode 100644 index 000000000..35a3ba4bc --- /dev/null +++ b/benchmarks/DASB/run_experiment.sh @@ -0,0 +1,203 @@ +#!/bin/bash + +########################################################### +# Script to run downstream evaluation training, optionally with multiple seeds. +# This script loops over seeds and trains different models. +# At the end, the final performance is computed with the aggregate_results.py script that provides the average performance. +# +# Usage: +# ./run_experiments.sh --hparams=hparams/MotorImagery/BNCI2014001/EEGNet.yaml --data_folder=eeg_data \ +# --output_folder=results/MotorImagery/BNCI2014001/EEGNet --nsbj=9 --nsess=2 --seed=1986 --nruns=2 --number_of_epochs=10 +# +# Authors: +# - Pooneh Mousavi (2024) +########################################################### + +# Initialize variables +hparams="" +data_folder="" +cached_data_folder="" +output_folder="" +task="" +dataset="" +seed="" +nruns="" +eval_metric="acc" +eval_set="test" +rnd_dir=False +additional_flags="" + + +# Function to print argument descriptions and exit +print_argument_descriptions() { + echo "Usage: $0 [options]" + echo "Options:" + echo " --hparams hparams_path Hparam YAML file" + echo " --data_folder data_folder_path Data folder path" + echo " --cached_data_folder cache_path Cached data folder path" + echo " --output_folder output_path Output folder path" + echo " --task task downstream task" + echo " --dataset dataset dataset" + echo " --seed random_seed Seed (random if not specified)" + echo " --nruns num_runs Number of runs" + echo " --eval_metric metric Evaluation metric (e.g., acc or WER)" + echo " --eval_set dev or test Evaluation set. Default: test" + echo " --rnd_dir If True the results are stored in a subdir of the output folder with a random name (useful to store all the results of an hparam tuning). Default: False" + exit 1 +} + + +# Parse command line +POSITIONAL_ARGS=() + +while [[ $# -gt 0 ]]; do + case $1 in + --hparams) + hparams="$2" + shift + shift + ;; + + --data_folder) + data_folder="$2" + shift + shift + ;; + + --cached_data_folder) + cached_data_folder="$2" + shift + shift + ;; + + --output_folder) + output_folder="$2" + shift + shift + ;; + + --task) + task="$2" + shift + shift + ;; + + --dataset) + dataset="$2" + shift + shift + ;; + + --seed) + seed="$2" + shift + shift + ;; + + --nruns) + nruns="$2" + shift + shift + ;; + + --eval_metric) + eval_metric="$2" + shift + shift + ;; + + --eval_set) + eval_set="$2" + shift + shift + ;; + + --rnd_dir) + rnd_dir="$2" + shift + shift + ;; + + + --help) + print_argument_descriptions + ;; + + -*|--*) + additional_flags+="$1 $2 " # store additional flags + shift # past argument + ;; + + + *) + POSITIONAL_ARGS+=("$1") # save positional arg + shift # past argument + ;; + esac +done + + +# Check for required arguments +if [ -z "$hparams" ] ||[ -z "$data_folder" ] || [ -z "$output_folder" ] || [ -z "$nruns" ]; then + echo "ERROR: Missing required arguments! Please provide all required options." + print_argument_descriptions +fi + +# Manage Seed (optional argument) +seed="${seed:-$RANDOM}" + + +if [ "$rnd_dir" = True ]; then + rnd_dirname=$(tr -dc 'a-zA-Z' < /dev/urandom | head -c 6) + output_folder="$output_folder/$rnd_dirname" +fi + +# Make sure the output_folder is created +mkdir -p $output_folder + +# Print command line arguments and save to file +{ + echo "hparams: $hparams" + echo "data_folder: $data_folder" + echo "cached_data_folder: $cached_data_folder" + echo "output_folder: $output_folder" + echo "task: $task" + echo "dataset: $dataset" + echo "seed: $seed" + echo "nruns: $nruns" + echo "eval_metric: $eval_metric" + echo "eval_set: $eval_set" + echo "rnd_dir: $rnd_dir" + echo "additional flags: $additional_flags" +} | tee "$output_folder/flags.txt" + + +# Creating output folder +mkdir -p $output_folder +mkdir -p $data_folder +mkdir -p $cached_data_folder + +# Function to run the training experiment +run_experiment() { + +python $dataset/$task/train.py $hparams --cached_data_folder=$cached_data_folder --seed=$seed --data_folder=$data_folder --output_folder=$output_folder_exp \ +$additional_flags + +} + +# Run multiple training experiments (with different seeds) +for i in $(seq 0 1 $(( nruns - 1 ))); do + ((run_idx = i + 1)) + run_name=run"$run_idx" + output_folder_exp="$output_folder"/"$run_name"/$seed + + run_experiment $output_folder_exp + + + # Changing Random seed + seed=$((seed+1)) +done + + +echo 'Final Results (Performance Aggregation)' +python utils/aggregate_results.py $output_folder "$eval_metric" | tee -a $output_folder/aggregated_performance.txt \ No newline at end of file diff --git a/benchmarks/DASB/utils/aggregate_results.py b/benchmarks/DASB/utils/aggregate_results.py new file mode 100644 index 000000000..be30bdb85 --- /dev/null +++ b/benchmarks/DASB/utils/aggregate_results.py @@ -0,0 +1,147 @@ +#!/usr/bin/python +""" +Snippet to aggregate the results over multiple runs of the same experiment. +This is useful when we run multiple experiments with different seeds and we +want to compute the average performance. The script also reports the final +metric to Orion (when needed for hyperparameter tuning). + +The script searches for the result files (_results.txt) and computes the mean +and the standard deviation of the given evaluation metrics (e.g., acc or f1). +The results must have an identical format (with only different performance +numbers). + +To run this script: + + > python aggregate_results.py your_result_folder acc + +Author +------ +Pooneh Mousavi 2024 +""" + +import sys +import re +import numpy as np +from orion.client import report_objective +from speechbrain.utils.data_utils import get_all_files + + +def get_prototype(res_file, eval_metric): + """Parses a result file and adds a placeholder where the aggregated metrics + should be printed. It also returns the number of detected metrics. + + Arguments + --------- + res_file: path + Path of the result file to parse. + eval_metric: path + Metric of interest (e.g, acc or f1). + + Returns + --------- + prototype: list + List of the lines of the result file (with as placeholder). + n_metrics: int + Number of metrics to replace in the result files. + """ + prototype = [] + n_metrics = 0 + + # Open the first res file and figure out where the metrics are + with open(res_file) as file_in: + for line in file_in: + if eval_metric in line: + line = line.split(eval_metric)[0] + # The placeholder for the metric is + line = line + eval_metric + " " + n_metrics = n_metrics + 1 + prototype.append(line) + return prototype, n_metrics + + +def get_metrics(res_files, eval_metric): + """Summarizes the metrics of interest in a matrix. + + Arguments + --------- + res_files: list + List of all the result files. + eval_metric: path + Metric of interest (e.g, acc or f1). + + Returns + --------- + metrics: np.array + Matrix (n_metrics, n_files) containing the metrics of interest. + """ + + # Metric initialization + metrics = np.zeros([n_metrics, len(res_files)]) + + # Loop over files + for i in range(len(res_files)): + cnt = 0 + # Metric extraction + with open(res_files[i]) as file_in: + for line in file_in: + if eval_metric in line: + # Use regex to find the test WER value + match = re.search(rf'{eval_metric}: (\d+\.\d+(?:e[+-]?\d+)?)', line) + if match: + value = match.group(1) + value = float(value) + metrics[cnt, i] = value + cnt = cnt + 1 + return metrics + + +def aggregate_metrics(prototype, metrics): + """Prints the aggregated metrics.It replaces the placeholders with + the corresponding metrics. + + Arguments + --------- + prototype: list + List of the lines of the result file (with as placeholder). + metrics: np.array + Matrix (n_metrics, n_files) containing the metrics of interest. + """ + cnt = 0 + for line in prototype: + if eval_metric in line: + values_line = "[" + for i in range(len(res_files)): + values_line = values_line + "%f " % float(metrics[cnt, i]) + values_line = values_line[:-1] + values_line = values_line + "] avg: %f ± %f " % ( + float(metrics[cnt, :].mean()), + float(metrics[cnt, :].std()), + ) + line = line.replace("", values_line) + cnt = cnt + 1 + print(line) + + +if __name__ == "__main__": + output_folder = sys.argv[1] + eval_metric = sys.argv[2] + + # Getting the list of the result files in the output folder + res_files = get_all_files(output_folder, match_and=["train_log.txt"]) + + # Gettin a prototype file + prototype, n_metrics = get_prototype(res_files[0], eval_metric) + + # Extracting the metrics of interest + metrics = get_metrics(res_files, eval_metric) + + # print aggregated metrics + aggregate_metrics(prototype, metrics) + + final_metric = metrics[-1, :].mean() + + # Report final metric to Orion + # Remember: orion expects metrics to be minimized! + if eval_metric == "acc" or eval_metric == "f1": + final_metric = 1 - final_metric + report_objective(final_metric) \ No newline at end of file From d41c6e4a51591bd2cd57d9a8a0fd5f11e0756ddb Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Tue, 24 Dec 2024 18:28:34 -0500 Subject: [PATCH 31/61] fix run_experiments.sh bug --- .../DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml | 2 +- .../LibriSpeech/ASR/hparams/contextnet/train.yaml | 2 +- benchmarks/DASB/LibriSpeech/ASR/train.py | 4 ++-- benchmarks/DASB/extra_requirements.txt | 1 + .../DASB/{run_experiment.sh => run_experiments.sh} | 11 ++++++----- benchmarks/DASB/utils/aggregate_results.py | 8 +++++--- 6 files changed, 16 insertions(+), 12 deletions(-) rename benchmarks/DASB/{run_experiment.sh => run_experiments.sh} (93%) diff --git a/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml b/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml index 69e74ca54..eb0d98d4b 100644 --- a/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml +++ b/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml @@ -5,7 +5,7 @@ # Decoder: CTC beam searcher and greedy searcher # Tokens: character # Training: Librispeech 960h -# Authors: +# Authors: # - Pooneh Mousavi 2024 # - Jarod Duret 2024 # ############################################################################ diff --git a/benchmarks/DASB/LibriSpeech/ASR/hparams/contextnet/train.yaml b/benchmarks/DASB/LibriSpeech/ASR/hparams/contextnet/train.yaml index dcedc415d..aaca2668d 100644 --- a/benchmarks/DASB/LibriSpeech/ASR/hparams/contextnet/train.yaml +++ b/benchmarks/DASB/LibriSpeech/ASR/hparams/contextnet/train.yaml @@ -5,7 +5,7 @@ # Decoder: CTC beam searcher and greedy searcher # Tokens: character # Training: Librispeech 960h -# Authors: +# Authors: # - Pooneh Mousavi 2024 # - Jarod Duret 2024 # ############################################################################ diff --git a/benchmarks/DASB/LibriSpeech/ASR/train.py b/benchmarks/DASB/LibriSpeech/ASR/train.py index 2758eb0eb..19aa43786 100644 --- a/benchmarks/DASB/LibriSpeech/ASR/train.py +++ b/benchmarks/DASB/LibriSpeech/ASR/train.py @@ -324,7 +324,7 @@ def text_pipeline(wrd): "tr_splits": hparams["train_splits"], "dev_splits": hparams["dev_splits"], "te_splits": hparams["test_splits"], - "save_folder": hparams["output_folder"], + "save_folder": hparams["cached_data_folder"], "merge_lst": hparams["train_splits"], "merge_name": "train.csv", "skip_prep": hparams["skip_prep"], @@ -333,7 +333,7 @@ def text_pipeline(wrd): # Defining tokenizer and loading it tokenizer = SentencePiece( - model_dir=hparams["save_folder"], + model_dir=hparams["cached_data_folder"], vocab_size=hparams["output_neurons"], annotation_train=hparams["train_csv"], annotation_read="wrd", diff --git a/benchmarks/DASB/extra_requirements.txt b/benchmarks/DASB/extra_requirements.txt index e04ccf781..1068c2b2a 100644 --- a/benchmarks/DASB/extra_requirements.txt +++ b/benchmarks/DASB/extra_requirements.txt @@ -3,6 +3,7 @@ jsonlines kaldiio librosa>=0.9.2 onnxruntime>=1.16.3 +orion scikit-learn speechbrain>=1.0.0 speechtokenizer>=0.1.2 diff --git a/benchmarks/DASB/run_experiment.sh b/benchmarks/DASB/run_experiments.sh similarity index 93% rename from benchmarks/DASB/run_experiment.sh rename to benchmarks/DASB/run_experiments.sh index 35a3ba4bc..e0f848aef 100644 --- a/benchmarks/DASB/run_experiment.sh +++ b/benchmarks/DASB/run_experiments.sh @@ -6,8 +6,9 @@ # At the end, the final performance is computed with the aggregate_results.py script that provides the average performance. # # Usage: -# ./run_experiments.sh --hparams=hparams/MotorImagery/BNCI2014001/EEGNet.yaml --data_folder=eeg_data \ -# --output_folder=results/MotorImagery/BNCI2014001/EEGNet --nsbj=9 --nsess=2 --seed=1986 --nruns=2 --number_of_epochs=10 +# ./run_experiments.sh --hparams benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml --data_folder LibriSpeech --cached_data_folder cache/ \ +# --output_folder results/LibriSpeech/ASR/encodec/LSTM --task ASR --dataset LibriSpeech --seed 1986 --nruns 2 --eval_metric WER --tokens_folder LibriSpeech/extraction-emb/speech_tokenizer/save/librispeech/ + # # Authors: # - Pooneh Mousavi (2024) @@ -75,13 +76,13 @@ while [[ $# -gt 0 ]]; do shift shift ;; - + --task) task="$2" shift shift ;; - + --dataset) dataset="$2" shift @@ -181,7 +182,7 @@ mkdir -p $cached_data_folder run_experiment() { python $dataset/$task/train.py $hparams --cached_data_folder=$cached_data_folder --seed=$seed --data_folder=$data_folder --output_folder=$output_folder_exp \ -$additional_flags +$additional_flags } diff --git a/benchmarks/DASB/utils/aggregate_results.py b/benchmarks/DASB/utils/aggregate_results.py index be30bdb85..0df315b7e 100644 --- a/benchmarks/DASB/utils/aggregate_results.py +++ b/benchmarks/DASB/utils/aggregate_results.py @@ -86,7 +86,9 @@ def get_metrics(res_files, eval_metric): for line in file_in: if eval_metric in line: # Use regex to find the test WER value - match = re.search(rf'{eval_metric}: (\d+\.\d+(?:e[+-]?\d+)?)', line) + match = re.search( + rf"{eval_metric}: (\d+\.\d+(?:e[+-]?\d+)?)", line + ) if match: value = match.group(1) value = float(value) @@ -125,7 +127,7 @@ def aggregate_metrics(prototype, metrics): if __name__ == "__main__": output_folder = sys.argv[1] eval_metric = sys.argv[2] - + # Getting the list of the result files in the output folder res_files = get_all_files(output_folder, match_and=["train_log.txt"]) @@ -144,4 +146,4 @@ def aggregate_metrics(prototype, metrics): # Remember: orion expects metrics to be minimized! if eval_metric == "acc" or eval_metric == "f1": final_metric = 1 - final_metric - report_objective(final_metric) \ No newline at end of file + report_objective(final_metric) From 04ea1e62a1b74310466891a3e5f8e0fd950364ea Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Tue, 24 Dec 2024 18:48:32 -0500 Subject: [PATCH 32/61] add bash script for token extraction --- .../DASB/run_discriminative_benchmark.sh | 36 ------ benchmarks/DASB/run_extraction.sh | 114 ++++++++++++++++++ benchmarks/DASB/run_generative_benchmark.sh | 67 ---------- 3 files changed, 114 insertions(+), 103 deletions(-) delete mode 100644 benchmarks/DASB/run_discriminative_benchmark.sh create mode 100644 benchmarks/DASB/run_extraction.sh delete mode 100644 benchmarks/DASB/run_generative_benchmark.sh diff --git a/benchmarks/DASB/run_discriminative_benchmark.sh b/benchmarks/DASB/run_discriminative_benchmark.sh deleted file mode 100644 index 79383deb2..000000000 --- a/benchmarks/DASB/run_discriminative_benchmark.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/bash -# Please consult the README.md file for instructions on how to run the benchmark. - -tokenizer_name=$1 -if [[ "$tokenizer_name" == "" ]]; then - echo "Usage: run_generative_benchmark.sh " - exit 1 -fi - -output_folder='/path/to/output' -declare -a DatasetsFolders=('path/to/LibriSpeech' 'path/to/CommonVoice' 'path/to/IEMOCAP' 'path/to/SLURP' 'path/to/Google-speech-commands' 'path/to/VoiceCeleb1') -declare -a ConsideredTasks=('LibriSpeech/ASR' 'CommonVoice/ASR' 'IEMOCAP/emotion_recognition' 'SLURP/intent_classification' 'Google-speech-commands/keyword-spotting' 'VoiceCeleb1/speaker_ver') -declare -a DownStreams=('LSTM' 'LSTM' 'ecapa_tdnn' 'LSTM_linear' 'Xvector','Xvector') -declare -a Locales=('cy' 'eu') -declare -a LocalesVobSize=(100 200) - -shift -script_args="$@" - -for i in "${!ConsideredTasks[@]}"; do - task=${ConsideredTasks[i]} - downstream=${DownStreams[i]} - dataset_folder=${DatasetsFolders[i]} - recipe_extra_args="$script_args" - set -- "$recipe_extra_args" - if [[ "$task" == "CommonVoice/ASR" ]]; then - echo "${tokenizer_name}/${task}/${downstream}" - for j in "${!Locales[@]}"; do - locale=${Locales[j]} - vocab=${LocalesVobSize[j]} - python $task/$downstream/train_$tokenizer_name.py $task/$downstream/hparams/train_$tokenizer_name.yaml --output_folder $output_folder/$tokenizer_name/$task/$downstream/$locale --data_folder $dataset_folder/$locale --language $locale --output_neurons $vocab $@ - done - else - python $task/$downstream/train_$tokenizer_name.py $task/$downstream/hparams/train_$tokenizer_name.yaml --output_folder $output_folder/$tokenizer_name/$task/$downstream --data_folder $dataset_folder $@ - fi -done diff --git a/benchmarks/DASB/run_extraction.sh b/benchmarks/DASB/run_extraction.sh new file mode 100644 index 000000000..2d419bac5 --- /dev/null +++ b/benchmarks/DASB/run_extraction.sh @@ -0,0 +1,114 @@ +#!/bin/bash + +########################################################### +# Script to extracts and save tokens from dataset. +# +# Usage: +# ./ $run_extraction.sh --data_folder LibriSpeech --output_folder results/LibriSpeech/ASR/encodec/LSTM --tokenizer encidec --dataset LibriSpeech + +# Authors: +# - Pooneh Mousavi (2024) +########################################################### + +# Initialize variables +data_folder="" +output_folder="" +tokenizer="" +dataset="" +save_embedding=False +additional_flags="" + + +# Function to print argument descriptions and exit +print_argument_descriptions() { + echo "Usage: $0 [options]" + echo "Options:" + echo " --data_folder data_folder_path Data folder path" + echo " --output_folder output_path Output folder path" + echo " --tokenizer tokenizer tokenizer" + echo " --dataset dataset dataset" + echo " --save_embedding save_embedding If True the the embedding are saved. Default: False" + exit 1 +} + + +# Parse command line +POSITIONAL_ARGS=() + +while [[ $# -gt 0 ]]; do + case $1 in + --data_folder) + data_folder="$2" + shift + shift + ;; + + --output_folder) + output_folder="$2" + shift + shift + ;; + + --tokenizer) + task="$2" + shift + shift + ;; + + --dataset) + dataset="$2" + shift + shift + ;; + + --save_embedding) + save_embedding="$2" + shift + shift + ;; + + --help) + print_argument_descriptions + ;; + + -*|--*) + additional_flags+="$1 $2 " # store additional flags + shift # past argument + ;; + + + *) + POSITIONAL_ARGS+=("$1") # save positional arg + shift # past argument + ;; + esac +done + + +# Check for required arguments +if [ -z "$tokenizer" ] ||[ -z "$data_folder" ] || [ -z "$output_folder" ] || [ -z "$dataset" ]; then + echo "ERROR: Missing required arguments! Please provide all required options." + print_argument_descriptions +fi + + +# Make sure the output_folder is created +mkdir -p $output_folder + +# Print command line arguments and save to file +{ + echo "data_folder: $data_folder" + echo "output_folder: $output_folder" + echo "tokenizer: $tokenizer" + echo "dataset: $dataset" + echo "save_embedding: $save_embedding" + echo "additional flags: $additional_flags" +} | tee "$output_folder/flags.txt" + + +# Creating output folder +mkdir -p $output_folder +mkdir -p $data_folder + +python $dataset/extraction/extract.py $dataset/extraction/hparams/$tokenizer.yaml --data_folder=$data_folder --output_folder=$output_folder --save_embedding=$save_embedding \ +$additional_flags diff --git a/benchmarks/DASB/run_generative_benchmark.sh b/benchmarks/DASB/run_generative_benchmark.sh deleted file mode 100644 index d5dc0d1d4..000000000 --- a/benchmarks/DASB/run_generative_benchmark.sh +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/bash -# Please consult the README.md file for instructions on how to run the benchmark. - -tokenizer_name=$1 -if [[ "$tokenizer_name" == "" ]]; then - echo "Usage: run_generative_benchmark.sh " - exit 1 -fi - -output_folder='path/to/output' -librimix_path='path/to/Libri2Mix' -voicebank_path='path/to/VoiceBank' -ljspeech_path='path/to/ljspeech' -utmos_path='path/to/utmos' -tts_args="--token_list_file_text %recipe_root%/hparams/char_en.txt --utmos_model_path $utmos_path" - -declare -a DatasetsFolders=(\ - "$librimix_path" \ - "$voicebank_path" \ - "$ljspeech_path" \ - "$ljspeech_path" \ -) -declare -a ConsideredTasks=(\ - 'Libri2Mix/separation' \ - 'VoiceBank/enhancement' \ - 'LJSpeech/TTS' \ - 'LJSpeech/TTS' \ -) -declare -a DownStreams=(\ - 'conformer' \ - 'conformer' \ - 'tokotron' \ - 'tokotron' \ -) -declare -a ExtraArgs=(\ - '' \ - '' \ - "$tts_args" \ - "$tts_args --enc_num_layers 3 --dec_num_layers 6" \ -) - -declare -a OutputSuffix=(\ - '' \ - '' \ - '' \ - '-small' -) - -shift -script_args="$@" - -for i in "${!ConsideredTasks[@]}"; do - task=${ConsideredTasks[i]} - downstream=${DownStreams[i]} - dataset_folder=${DatasetsFolders[i]} - extra_args=${ExtraArgs[i]} - suffix=${OutputSuffix[i]} - recipe_root="$task/$downstream" - recipe_extra_args="$script_args ${extra_args//%recipe_root%/$recipe_root}" - set -- "$recipe_extra_args" - echo "${tokenizer_name}/${task}/${downstream}" - python $task/$downstream/train_$tokenizer_name.py \ - $task/$downstream/hparams/train_$tokenizer_name.yaml \ - --output_folder $output_folder/$tokenizer_name/$task/$downstream$suffix \ - --data_folder $dataset_folder \ - $@ -done From 95333cf4c9ab0a19c5254840fb6a7d14505eefd7 Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Tue, 24 Dec 2024 18:56:21 -0500 Subject: [PATCH 33/61] fix bug --- benchmarks/DASB/run_extraction.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/benchmarks/DASB/run_extraction.sh b/benchmarks/DASB/run_extraction.sh index 2d419bac5..e121c35cb 100644 --- a/benchmarks/DASB/run_extraction.sh +++ b/benchmarks/DASB/run_extraction.sh @@ -49,13 +49,13 @@ while [[ $# -gt 0 ]]; do shift ;; - --tokenizer) - task="$2" + --tokenizer) + tokenizer="$2" shift shift ;; - --dataset) + --dataset) dataset="$2" shift shift From 096fc43c659122952e7be36257ac6a4d7f75ce39 Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Wed, 25 Dec 2024 13:48:17 -0500 Subject: [PATCH 34/61] add hyperparam tuning --- .../LibriSpeech/ASR/hparams/LSTM/train.yaml | 8 +- benchmarks/DASB/extra_requirements.txt | 1 + benchmarks/DASB/orion/hparams_tpe.yaml | 6 + benchmarks/DASB/run_hparam_optimization.sh | 422 ++++++++++++++++++ 4 files changed, 433 insertions(+), 4 deletions(-) create mode 100644 benchmarks/DASB/orion/hparams_tpe.yaml create mode 100644 benchmarks/DASB/run_hparam_optimization.sh diff --git a/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml b/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml index eb0d98d4b..98ba22d23 100644 --- a/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml +++ b/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml @@ -42,7 +42,8 @@ pretrain_embeddings_folder: none # Optional: If pretrain_embeddings is True, th ####################### Training Parameters #################################### number_of_epochs: 20 -batch_size: 4 +batch_size_exponent: 4 # @orion_step1: --batch_size_exponent~"uniform(2, 4,discrete=True)" +batch_size: !ref 2 ** test_batch_size: 1 grad_accumulation_factor: 2 max_grad_norm: 5.0 @@ -54,7 +55,7 @@ valid_search_interval: 1 avg_checkpoints: 10 # Number of checkpoints to average for evaluation cache_size: 1.e+10 -lr_model: 0.001 +lr_model: 0.0001 # @orion_step1: --lr_model~"loguniform(0.00001,0.5)" weight_decay: 0.0005 @@ -109,8 +110,7 @@ freeze_embedding: False # LSTM activation: !name:torch.nn.Sigmoid -dnn_layers: 2 -dnn_neurons: 1024 +dnn_layers: 2 # @orion_step1: --dnn_layers~"uniform(1, 4,discrete=True)"dnn_neurons: 1024 dropout: 0.2 output_neurons: 31 diff --git a/benchmarks/DASB/extra_requirements.txt b/benchmarks/DASB/extra_requirements.txt index 1068c2b2a..e97e16b28 100644 --- a/benchmarks/DASB/extra_requirements.txt +++ b/benchmarks/DASB/extra_requirements.txt @@ -4,6 +4,7 @@ kaldiio librosa>=0.9.2 onnxruntime>=1.16.3 orion +orion[profet] scikit-learn speechbrain>=1.0.0 speechtokenizer>=0.1.2 diff --git a/benchmarks/DASB/orion/hparams_tpe.yaml b/benchmarks/DASB/orion/hparams_tpe.yaml new file mode 100644 index 000000000..cf2f6fd54 --- /dev/null +++ b/benchmarks/DASB/orion/hparams_tpe.yaml @@ -0,0 +1,6 @@ +experiment: + algorithms: + tpe: + seed: 1986 + n_initial_points: 20 + n_ei_candidates: 24 \ No newline at end of file diff --git a/benchmarks/DASB/run_hparam_optimization.sh b/benchmarks/DASB/run_hparam_optimization.sh new file mode 100644 index 000000000..de5110b96 --- /dev/null +++ b/benchmarks/DASB/run_hparam_optimization.sh @@ -0,0 +1,422 @@ +#!/bin/bash + +########################################################### +# Hyperparameter Tuning Script for EEG Model with Orion +########################################################### + +# Description: +# This script facilitates hyperparameter tuning for a given EEG model and dataset using Orion. +# It supports leave-one-subject-out and/or leave-one-session-out training strategies. + +# Usage: +# ./run_hparam_optimization.sh --exp_name 'EEGNet_BNCI2014001_hopt' \ +# --output_folder results/MotorImagery/BNCI2014001/EEGNet/hopt \ +# --data_folder eeg_data/ \ +# --hparams hparams/MotorImagery/BNCI2014001/EEGNet.yaml \ +# --nruns 1 --nruns_eval 10 \ +# --eval_metric acc \ +# --exp_max_trials 50 \ +# --store_all True \ +# --device 'cpu' +# +# Optimization Steps: +# The script supports multiple hyperparameter optimization steps. +# We found it convenient to first optimize training and model hyperparameters, +# and then optimize data augmentation hyperparameters in a separate step. + +# Script Workflow: +# 1. Search for the orion flags in the specified hparam file. +# 2. Run the orion-hunt command for hyperparameter tuning. +# By default, TPE (Tree-structured Parzen Estimator) hyperparameter tuning is +# performed, as specified in the default orion config file at hparams/orion/hparams_tpe.yaml. +# 3. Save the best hyperparameters, which can be viewed using torch-info. +# 4. Loop until flags like @orion_step are found in the YAML file. +# +# Final Performance Evaluation: +# At the end of the optimization process, the script computes the final performance +# using the best hyperparameters on the test set. +# This is done by averaging over nruns_eval different seeds. +# +# Note: More detailed information can be found in the README.md file. + +# Authors: +# - Pooneh Mousavi 2024 +########################################################### + +# Initialize variables +exp_name="hopt" +output_folder="" +data_folder="" +cached_data_folder="" +task="" +dataset="" +hparams="" +nruns="" +nruns_eval=10 +eval_metric="acc" +seed=1986 +config_file="orion/hparams_tpe.yaml" +mne_dir="" +orion_db_address="" +orion_db_type="PickledDB" +exp_max_trials=50 +store_all=True +compress_exp=True + +# Function to print argument descriptions and exit +print_argument_descriptions() { + echo "Usage: $0 [options]" + echo "Options:" + echo " --exp_name Name Name that Orion gives to the experiment" + echo " --output_folder output_path Output folder were the results will be stored" + echo " --data_folder data_path Folder were the data are stored. If not available, they will be downloaded there." + echo " --cached_data_folder path [Optional] Folder were the data in pkl format will be cached." + echo " --task task downstream task" + echo " --dataset dataset dataset" + echo " --hparms hparam_file YAML file containing the hparam to optimize. The hyperparameters decorated with @orion_step1 or @orion_step1 in the YAML file will be used" + echo " --nruns num_runs Number of runs for each hparam selection." + echo " --nruns_eval num_runs Number of runs for the final evaluation (with best hparams) on the test set" + echo " --eval_metric metric [Optional] Evaluation metric description. Default:acc" + echo " --seed random_seed [Optional] Seed (random if not specified)" + echo " --config_file config_file [Optional] Orion config file. Default: hparams/orion/hparams_tpe.yaml" + echo " --mne_dir mne_dir [Optional] MNE directory. Need it different from your home (see notes on MNE in README.md)" + echo " --orion_db_address [Optional] Path of the database where orion will store hparams and performance" + echo " --orion_db_type db_type [Optional] Type of the dataset that orion will use. Default: PickledDB" + echo " --exp_max_trials int [Optional] Maximum number of hparam trials for each oprimization step. Default:50" + echo " --store_all Bool [Optional] When set to True, the output folders of all hparam trials will be stored in randomly named folders. Default: False" + echo " --compress_exp Bool [Optional] When set to True, this option compresses the output folders of all hyperparameter trials into a single tar.gz file. This is particularly useful when store_all is set to True, as it helps prevent the accumulation of a large number of files. Default: False" + exit 1 +} + +POSITIONAL_ARGS=() + +while [[ $# -gt 0 ]]; do + case $1 in + + --exp_name) + exp_name="$2" + shift + shift + ;; + + --output_folder) + output_folder="$2" + shift + shift + ;; + + --data_folder) + data_folder="$2" + shift + shift + ;; + + --hparams) + hparams="$2" + shift + shift + ;; + + --cached_data_folder) + cached_data_folder="$2" + shift + shift + ;; + + --task) + task="$2" + shift + shift + ;; + + --dataset) + dataset="$2" + shift + shift + ;; + + --seed) + seed="$2" + shift + shift + ;; + + --nruns) + nruns="$2" + shift + shift + ;; + + --nruns_eval) + nruns_eval="$2" + shift + shift + ;; + + + --eval_metric) + eval_metric="$2" + shift + shift + ;; + + + + --config_file) + config_file="$2" + shift + shift + ;; + + --mne_dir) + mne_dir="$2" + shift + shift + ;; + + --orion_db_address) + orion_db_address="$2" + shift + shift + ;; + + --orion_db_type) + orion_db_type="$2" + shift + shift + ;; + + --exp_max_trials) + exp_max_trials="$2" + shift + shift + ;; + + --store_all) + store_all="$2" + shift + shift + ;; + + --compress_exp) + compress_exp="$2" + shift + shift + ;; + + --help) + print_argument_descriptions + ;; + + -*|--*) + additional_flags+="$1 $2 " # store additional flags + shift # past argument + ;; + + + *) + POSITIONAL_ARGS+=("$1") # save positional arg + shift # past argument + ;; + esac +done + + +# Check for required arguments +if [ -z "$output_folder" ] || [ -z "$data_folder" ] || [ -z "$hparams" ] || [ -z "$nruns" ]; then + echo "ERROR: Missing required arguments! Please provide all required options." + print_argument_descriptions +fi + +# Set mne_dir if specified +if [ "$mne_dir" ]; then + export _MNE_FAKE_HOME_DIR=$mne_dir +fi + +# Assign default value to cached_data_folder +if [ -z "$cached_data_folder" ]; then + cached_data_folder="$data_folder/cache" +fi + + +# Set orion db address if specified +if [ -z "$orion_db_address" ]; then + orion_db_address=$output_folder'/'$exp_name'.pkl' +fi +export ORION_DB_ADDRESS=$orion_db_address +export ORION_DB_TYPE=$orion_db_type + +echo "-------------------------------------" +echo "Experiment Name: $exp_name" +echo "hparams: $hparams" +echo "Output Folder: $output_folder" +echo "Data Folder: $data_folder" +echo "Cached Data Folder: $cached_data_folder" +echo "task: $task" +echo "dataset: $dataset" +echo "Hparam File: $hparams" +echo "Number of Runs: $nruns" +echo "Number of Eval Runs: $nruns_eval" +echo "Eval Metric: $eval_metric" +echo "Seed: $seed" +echo "Additional Flags: $additional_flags" +echo "Orion Config File: $config_file" +echo "Orion Database type: $orion_db_type" +echo "Orion Database file: $orion_db_address" +echo "Experiment Max Trials: $exp_max_trials" +echo "-------------------------------------" + + +# This function will extract all the optimization flags added in the yaml file +# The input is a text file (e.g, a yaml file) and a pattern (e.g, "@orion_step1:") +# The ouput are the detected flags (e.g., --dropout~"uniform(0.0, 0.5)"). +get_flag() { + local file_path="$1" + local pattern="$2" + + # Check if the file exists + if [ ! -f "$file_path" ]; then + echo "Error: File '$file_path' not found." + return 1 + fi + + # Use grep to find all lines containing the pattern and then extract the flags using sed + grep -o "$pattern.*" "$file_path" | sed "s/$pattern//" | tr -d '\n' +} + + +# Function for updatading the hparam yaml file with the best hparams found at step 1 +update_hparams() { + local best_hparams_file="$1" + local hparams_yaml_file="$2" + local output_yaml_file="$3" + + # Read the values from best_hparams.txt into an associative array + declare -A best_hparams + while IFS=": " read -r key value; do + best_hparams["$key"]=$value + done < "$best_hparams_file" + + + # Read the hparams.yaml file into a variable + local hparams_content=$(cat "$hparams_yaml_file") + + # Update values in hparams_content using values from best_hparams + for key in "${!best_hparams[@]}"; do + local pattern="^$key: .*" + local replacement="$key: ${best_hparams[$key]}" + hparams_content=$(sed "s/$pattern/$replacement/g" <<< "$hparams_content") + done + + # Write the updated content to a new YAML file + echo "$hparams_content" > "$output_yaml_file" +} + +# Function for extracting the best hparams from orion-info +function extract_best_params() { + local input_file="$1" + local best_trial_line=$(grep -n "best trial:" "$input_file" | cut -d ":" -f 1) + local params_lines=$(tail -n +$best_trial_line "$input_file" | awk '/params:/{flag=1;next}/start time:/{flag=0}flag') + local formatted_params=$(echo "$params_lines" | sed -e 's/^[[:space:]]*//' -e 's/: /: /' -e '/^$/d' -e 's#^/##') + echo "$formatted_params" +} + +# Running hparam tuning (loop over multiple steps) +step_id=1 +hparams_step=$hparams +pattern="@orion_step1:" +opt_flags=$(get_flag "$hparams_step" "$pattern") + +# Check if the string is empty and exit with an error if it is +if [ -z "$opt_flags" ]; then + echo "Error: Optimization flags not found in '$hparams'" + echo "Please ensure that the Orion optimization flags are set in the hparam file using in-line comments like:" + echo "# @orion_step1: --dropout~\"uniform(0.0, 0.5)\"" + exit 1 # Exit with a non-zero error code +fi + + +while [ -n "$opt_flags" ]; do + # Do something + output_folder_step="$output_folder"/step"$step_id" + mkdir -p $output_folder_step + exp_name_step="$exp_name"_step"$step_id" + + echo + echo "**********************************************************************************************" + echo "Running hparam tuning (step $step_id)..." + echo "- This might take several hours!" + echo "- The best set of hparams will be save in $output_folder_step" + echo "- You can monitor the evolution of the hparam optimization with: orion status -n $exp_name" + echo "......" + echo "**********************************************************************************************" + echo + # Setting up orion command + orion_hunt_command="orion hunt -n $exp_name_step -c $config_file --exp-max-trials $exp_max_trials \ + ./run_experiments.sh --hparams $hparams_step --data_folder $data_folder --cached_data_folder $cached_data_folder \ + --output_folder $output_folder_step/exp --task $task --dataset $dataset --seed $seed --nruns $nruns \ + --eval_metric $eval_metric --eval_set dev --rnd_dir $store_all $additional_flags" + + + # Appending the optimization flags + orion_hunt_command="$orion_hunt_command $opt_flags" + + echo $orion_hunt_command &> "$output_folder_step/orion_hunt_command.txt" + + # Execute the command for hparm tuning + eval $orion_hunt_command + + # Compress the exp folder (if required) + if [ "$compress_exp" = True ]; then + tar -czf "$output_folder_step/exp.tar.gz" "$output_folder_step/exp" + if [ -d "$output_folder_step/exp" ]; then + rm -rf "$output_folder_step/exp" + fi + + fi + + # Storing best haprams + orion info --name $exp_name_step &> $output_folder_step/orion-info.txt + + # Extract list of the best hparams from orion-info + # Find the line number where "best trial:" appears + best_trial_line=$(grep -n "best trial:" $output_folder_step/orion-info.txt | cut -d ":" -f 1) + + # Extract and store the best set of hparams + best_params_output=$(extract_best_params "$output_folder_step/orion-info.txt") + best_hparams_file="$output_folder_step/best_hparams.txt" + echo "$best_params_output" > $best_hparams_file + + # Store the current best yaml file + best_yaml_file="$output_folder_step/best_hparams.yaml" + update_hparams "$best_hparams_file" "$hparams_step" "$best_yaml_file" + + # Update best hparam step + hparams_step=$best_yaml_file + + # Update step variable + ((step_id++)) + + # Update search pattern + pattern="@orion_step$step_id:" + + # update optimization flags pattern + opt_flags=$(get_flag "$hparams_step" "$pattern") +done + +echo +echo "**********************************************************************************************" +echo "Running Final Evaluation on the best hparams (test-set)..." +echo "**********************************************************************************************" +echo + +final_yaml_file="$output_folder/best_hparams.yaml" +scp $best_yaml_file $final_yaml_file + +# Running evaluation on the test set for the best models +./run_experiments.sh --hparams $final_yaml_file --data_folder $data_folder --cached_data_folder $cached_data_folder \ + --output_folder $output_folder/best --task $task --dataset $dataset --seed $seed\ + --nruns $nruns_eval --eval_metric $eval_metric --eval_set test \ + --rnd_dir $store_all $additional_flags + +echo "The test performance with best hparams is available at $output_folder/best" \ No newline at end of file From 8dc0161dd7c088e97faf8d7e22429646678d535b Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Wed, 25 Dec 2024 13:50:59 -0500 Subject: [PATCH 35/61] fix precommit --- benchmarks/DASB/orion/hparams_tpe.yaml | 2 +- benchmarks/DASB/run_hparam_optimization.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks/DASB/orion/hparams_tpe.yaml b/benchmarks/DASB/orion/hparams_tpe.yaml index cf2f6fd54..fb6a7c9b0 100644 --- a/benchmarks/DASB/orion/hparams_tpe.yaml +++ b/benchmarks/DASB/orion/hparams_tpe.yaml @@ -3,4 +3,4 @@ experiment: tpe: seed: 1986 n_initial_points: 20 - n_ei_candidates: 24 \ No newline at end of file + n_ei_candidates: 24 diff --git a/benchmarks/DASB/run_hparam_optimization.sh b/benchmarks/DASB/run_hparam_optimization.sh index de5110b96..39766018f 100644 --- a/benchmarks/DASB/run_hparam_optimization.sh +++ b/benchmarks/DASB/run_hparam_optimization.sh @@ -128,7 +128,7 @@ while [[ $# -gt 0 ]]; do shift shift ;; - + --dataset) dataset="$2" shift From c0f4feeafaad74e6e9dea038129917277e76f756 Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Wed, 25 Dec 2024 13:57:56 -0500 Subject: [PATCH 36/61] modify hparams.sh input order --- benchmarks/DASB/run_hparam_optimization.sh | 31 ++++++++++------------ 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/benchmarks/DASB/run_hparam_optimization.sh b/benchmarks/DASB/run_hparam_optimization.sh index 39766018f..3c84f5ad4 100644 --- a/benchmarks/DASB/run_hparam_optimization.sh +++ b/benchmarks/DASB/run_hparam_optimization.sh @@ -45,16 +45,16 @@ # Initialize variables exp_name="hopt" -output_folder="" +hparams="" data_folder="" cached_data_folder="" +output_folder="" task="" dataset="" -hparams="" +seed=1986 nruns="" nruns_eval=10 eval_metric="acc" -seed=1986 config_file="orion/hparams_tpe.yaml" mne_dir="" orion_db_address="" @@ -68,16 +68,16 @@ print_argument_descriptions() { echo "Usage: $0 [options]" echo "Options:" echo " --exp_name Name Name that Orion gives to the experiment" - echo " --output_folder output_path Output folder were the results will be stored" + echo " --hparms hparam_file YAML file containing the hparam to optimize. The hyperparameters decorated with @orion_step1 or @orion_step1 in the YAML file will be used" echo " --data_folder data_path Folder were the data are stored. If not available, they will be downloaded there." echo " --cached_data_folder path [Optional] Folder were the data in pkl format will be cached." - echo " --task task downstream task" - echo " --dataset dataset dataset" - echo " --hparms hparam_file YAML file containing the hparam to optimize. The hyperparameters decorated with @orion_step1 or @orion_step1 in the YAML file will be used" + echo " --output_folder output_path Output folder were the results will be stored" + echo " --task task downstream task" + echo " --dataset dataset dataset" + echo " --seed random_seed [Optional] Seed (random if not specified)" echo " --nruns num_runs Number of runs for each hparam selection." echo " --nruns_eval num_runs Number of runs for the final evaluation (with best hparams) on the test set" echo " --eval_metric metric [Optional] Evaluation metric description. Default:acc" - echo " --seed random_seed [Optional] Seed (random if not specified)" echo " --config_file config_file [Optional] Orion config file. Default: hparams/orion/hparams_tpe.yaml" echo " --mne_dir mne_dir [Optional] MNE directory. Need it different from your home (see notes on MNE in README.md)" echo " --orion_db_address [Optional] Path of the database where orion will store hparams and performance" @@ -99,8 +99,8 @@ while [[ $# -gt 0 ]]; do shift ;; - --output_folder) - output_folder="$2" + --hparams) + hparams="$2" shift shift ;; @@ -111,14 +111,14 @@ while [[ $# -gt 0 ]]; do shift ;; - --hparams) - hparams="$2" + --cached_data_folder) + cached_data_folder="$2" shift shift ;; - --cached_data_folder) - cached_data_folder="$2" + --output_folder) + output_folder="$2" shift shift ;; @@ -153,15 +153,12 @@ while [[ $# -gt 0 ]]; do shift ;; - --eval_metric) eval_metric="$2" shift shift ;; - - --config_file) config_file="$2" shift From a595cf6172f4c035cc3c2e9cc880ce411bf47a4c Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Wed, 25 Dec 2024 16:13:54 -0500 Subject: [PATCH 37/61] only applying testing for final run HT --- .../LibriSpeech/ASR/hparams/LSTM/train.yaml | 2 +- benchmarks/DASB/LibriSpeech/ASR/train.py | 27 ++++++++++--------- benchmarks/DASB/run_hparam_optimization.sh | 9 +++---- 3 files changed, 18 insertions(+), 20 deletions(-) diff --git a/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml b/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml index 98ba22d23..1be23bc0c 100644 --- a/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml +++ b/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml @@ -18,7 +18,7 @@ output_folder: !ref results/LSTM// output_wer_folder: !ref /wer.txt save_folder: !ref /save train_log: !ref /train_log.txt - +testing: True # If set to True, the test evlaution is done, otherwise skipped. # Data files data_folder: !PLACEHOLDER # e.g., /path/to/LibriSpeech diff --git a/benchmarks/DASB/LibriSpeech/ASR/train.py b/benchmarks/DASB/LibriSpeech/ASR/train.py index 19aa43786..49d2248cb 100644 --- a/benchmarks/DASB/LibriSpeech/ASR/train.py +++ b/benchmarks/DASB/LibriSpeech/ASR/train.py @@ -433,16 +433,17 @@ def text_pipeline(wrd): valid_loader_kwargs=hparams["valid_dataloader_opts"], ) - # Testing - if not os.path.exists(hparams["output_wer_folder"]): - os.makedirs(hparams["output_wer_folder"]) - - for k in test_datasets.keys(): # keys are test_clean, test_other etc - asr_brain.hparams.output_wer_folder = os.path.join( - hparams["output_wer_folder"], f"wer_{k}.txt" - ) - asr_brain.evaluate( - test_datasets[k], - test_loader_kwargs=hparams["test_dataloader_opts"], - min_key="WER", - ) + if hparams["testing"]: + # Testing + if not os.path.exists(hparams["output_wer_folder"]): + os.makedirs(hparams["output_wer_folder"]) + + for k in test_datasets.keys(): # keys are test_clean, test_other etc + asr_brain.hparams.output_wer_folder = os.path.join( + hparams["output_wer_folder"], f"wer_{k}.txt" + ) + asr_brain.evaluate( + test_datasets[k], + test_loader_kwargs=hparams["test_dataloader_opts"], + min_key="WER", + ) diff --git a/benchmarks/DASB/run_hparam_optimization.sh b/benchmarks/DASB/run_hparam_optimization.sh index 3c84f5ad4..390177b28 100644 --- a/benchmarks/DASB/run_hparam_optimization.sh +++ b/benchmarks/DASB/run_hparam_optimization.sh @@ -5,8 +5,7 @@ ########################################################### # Description: -# This script facilitates hyperparameter tuning for a given EEG model and dataset using Orion. -# It supports leave-one-subject-out and/or leave-one-session-out training strategies. +# This script facilitates hyperparameter tuning for a given audio tokenizer, dowsnteram model and dataset using Orion. # Usage: # ./run_hparam_optimization.sh --exp_name 'EEGNet_BNCI2014001_hopt' \ @@ -21,8 +20,6 @@ # # Optimization Steps: # The script supports multiple hyperparameter optimization steps. -# We found it convenient to first optimize training and model hyperparameters, -# and then optimize data augmentation hyperparameters in a separate step. # Script Workflow: # 1. Search for the orion flags in the specified hparam file. @@ -352,7 +349,7 @@ while [ -n "$opt_flags" ]; do orion_hunt_command="orion hunt -n $exp_name_step -c $config_file --exp-max-trials $exp_max_trials \ ./run_experiments.sh --hparams $hparams_step --data_folder $data_folder --cached_data_folder $cached_data_folder \ --output_folder $output_folder_step/exp --task $task --dataset $dataset --seed $seed --nruns $nruns \ - --eval_metric $eval_metric --eval_set dev --rnd_dir $store_all $additional_flags" + --eval_metric $eval_metric --eval_set dev --rnd_dir $store_all --testing False $additional_flags" # Appending the optimization flags @@ -414,6 +411,6 @@ scp $best_yaml_file $final_yaml_file ./run_experiments.sh --hparams $final_yaml_file --data_folder $data_folder --cached_data_folder $cached_data_folder \ --output_folder $output_folder/best --task $task --dataset $dataset --seed $seed\ --nruns $nruns_eval --eval_metric $eval_metric --eval_set test \ - --rnd_dir $store_all $additional_flags + --rnd_dir $store_all --testing False $additional_flags echo "The test performance with best hparams is available at $output_folder/best" \ No newline at end of file From 78da6c14e9c2b58d5cfce9a4341707689a9eab7e Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Wed, 25 Dec 2024 21:08:03 -0500 Subject: [PATCH 38/61] fix bug --- benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml b/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml index 1be23bc0c..8b9581dc9 100644 --- a/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml +++ b/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml @@ -110,7 +110,8 @@ freeze_embedding: False # LSTM activation: !name:torch.nn.Sigmoid -dnn_layers: 2 # @orion_step1: --dnn_layers~"uniform(1, 4,discrete=True)"dnn_neurons: 1024 +dnn_layers: 2 # @orion_step1: --dnn_layers~"uniform(1, 4,discrete=True)" +dnn_neurons: 1024 dropout: 0.2 output_neurons: 31 From 6a3a7a5127c7f63534bc879305b602bb9170670e Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Wed, 25 Dec 2024 21:26:45 -0500 Subject: [PATCH 39/61] fix bug --- benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml b/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml index 8b9581dc9..be5c18d5b 100644 --- a/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml +++ b/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml @@ -41,7 +41,7 @@ tokens_folder: !PLACEHOLDER # Path to the folder where extracted tokens are sav pretrain_embeddings_folder: none # Optional: If pretrain_embeddings is True, this should be set to the path where the pretrained embeddings are saved. ####################### Training Parameters #################################### -number_of_epochs: 20 +number_of_epochs: 20 # @orion_step1: --number_of_epochs~"fidelity(5, 20, base=4)" batch_size_exponent: 4 # @orion_step1: --batch_size_exponent~"uniform(2, 4,discrete=True)" batch_size: !ref 2 ** test_batch_size: 1 From e9ff250486b8b1ed7adde95cc07e36a46c4b1441 Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Wed, 25 Dec 2024 21:32:24 -0500 Subject: [PATCH 40/61] add hupertun for contextnet --- .../DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml | 2 +- .../LibriSpeech/ASR/hparams/contextnet/train.yaml | 12 +++++------- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml b/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml index be5c18d5b..8b9581dc9 100644 --- a/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml +++ b/benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml @@ -41,7 +41,7 @@ tokens_folder: !PLACEHOLDER # Path to the folder where extracted tokens are sav pretrain_embeddings_folder: none # Optional: If pretrain_embeddings is True, this should be set to the path where the pretrained embeddings are saved. ####################### Training Parameters #################################### -number_of_epochs: 20 # @orion_step1: --number_of_epochs~"fidelity(5, 20, base=4)" +number_of_epochs: 20 batch_size_exponent: 4 # @orion_step1: --batch_size_exponent~"uniform(2, 4,discrete=True)" batch_size: !ref 2 ** test_batch_size: 1 diff --git a/benchmarks/DASB/LibriSpeech/ASR/hparams/contextnet/train.yaml b/benchmarks/DASB/LibriSpeech/ASR/hparams/contextnet/train.yaml index aaca2668d..cd45d7d9a 100644 --- a/benchmarks/DASB/LibriSpeech/ASR/hparams/contextnet/train.yaml +++ b/benchmarks/DASB/LibriSpeech/ASR/hparams/contextnet/train.yaml @@ -18,7 +18,7 @@ output_folder: !ref results/LSTM// output_wer_folder: !ref /wer.txt save_folder: !ref /save train_log: !ref /train_log.txt - +testing: True # If set to True, the test evlaution is done, otherwise skipped. # Data files data_folder: !PLACEHOLDER # e.g., /path/to/LibriSpeech @@ -42,7 +42,8 @@ pretrain_embeddings_folder: none # Optional: If pretrain_embeddings is True, th ####################### Training Parameters #################################### number_of_epochs: 20 -batch_size: 4 +batch_size_exponent: 4 # @orion_step1: --batch_size_exponent~"uniform(2, 4,discrete=True)" +batch_size: !ref 2 ** test_batch_size: 1 grad_accumulation_factor: 2 max_grad_norm: 5.0 @@ -107,11 +108,8 @@ encoder_dim: 1024 pretrain_embeddings: False freeze_embedding: False -# LSTM -activation: !name:torch.nn.Sigmoid -dnn_layers: 2 -dnn_neurons: 1024 -dropout: 0.2 +# Contextnet + output_neurons: 31 # BPE parameters From 3e2fe0c89050745a2375f4c10c6d5654059d1f96 Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Wed, 25 Dec 2024 21:52:00 -0500 Subject: [PATCH 41/61] add etsting to average run --- benchmarks/DASB/run_hparam_optimization.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/DASB/run_hparam_optimization.sh b/benchmarks/DASB/run_hparam_optimization.sh index 390177b28..5cbde3b20 100644 --- a/benchmarks/DASB/run_hparam_optimization.sh +++ b/benchmarks/DASB/run_hparam_optimization.sh @@ -411,6 +411,6 @@ scp $best_yaml_file $final_yaml_file ./run_experiments.sh --hparams $final_yaml_file --data_folder $data_folder --cached_data_folder $cached_data_folder \ --output_folder $output_folder/best --task $task --dataset $dataset --seed $seed\ --nruns $nruns_eval --eval_metric $eval_metric --eval_set test \ - --rnd_dir $store_all --testing False $additional_flags + --rnd_dir $store_all --testing True $additional_flags echo "The test performance with best hparams is available at $output_folder/best" \ No newline at end of file From f378aeca46d2439d4bc747c8f656ec09173d24be Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Wed, 25 Dec 2024 21:52:00 -0500 Subject: [PATCH 42/61] add lr for HT for contextnet --- benchmarks/DASB/LibriSpeech/ASR/hparams/contextnet/train.yaml | 2 +- benchmarks/DASB/run_hparam_optimization.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks/DASB/LibriSpeech/ASR/hparams/contextnet/train.yaml b/benchmarks/DASB/LibriSpeech/ASR/hparams/contextnet/train.yaml index cd45d7d9a..eab197c68 100644 --- a/benchmarks/DASB/LibriSpeech/ASR/hparams/contextnet/train.yaml +++ b/benchmarks/DASB/LibriSpeech/ASR/hparams/contextnet/train.yaml @@ -55,7 +55,7 @@ valid_search_interval: 1 avg_checkpoints: 10 # Number of checkpoints to average for evaluation cache_size: 1.e+10 -lr_model: 0.001 +lr_model: 0.0001 # @orion_step1: --lr_model~"loguniform(0.00001,0.5)" weight_decay: 0.0005 diff --git a/benchmarks/DASB/run_hparam_optimization.sh b/benchmarks/DASB/run_hparam_optimization.sh index 390177b28..5cbde3b20 100644 --- a/benchmarks/DASB/run_hparam_optimization.sh +++ b/benchmarks/DASB/run_hparam_optimization.sh @@ -411,6 +411,6 @@ scp $best_yaml_file $final_yaml_file ./run_experiments.sh --hparams $final_yaml_file --data_folder $data_folder --cached_data_folder $cached_data_folder \ --output_folder $output_folder/best --task $task --dataset $dataset --seed $seed\ --nruns $nruns_eval --eval_metric $eval_metric --eval_set test \ - --rnd_dir $store_all --testing False $additional_flags + --rnd_dir $store_all --testing True $additional_flags echo "The test performance with best hparams is available at $output_folder/best" \ No newline at end of file From b2bd3165bfa497b1742961eba8dae405171f0d77 Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Wed, 25 Dec 2024 22:29:14 -0500 Subject: [PATCH 43/61] add measuring time --- benchmarks/DASB/LibriSpeech/ASR-on-the-fly/train.py | 9 +++++++++ benchmarks/DASB/LibriSpeech/ASR/train.py | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/train.py b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/train.py index 99eeb81fe..9fa3e3f3d 100644 --- a/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/train.py +++ b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/train.py @@ -10,6 +10,7 @@ import os import sys +import time import torch import torchaudio import logging @@ -423,6 +424,8 @@ def text_pipeline(wrd): if valid_bsampler is not None: valid_dataloader_opts = {"batch_sampler": valid_bsampler} + # Measure time + start_time = time.time() # Start the timer # Training asr_brain.fit( @@ -433,6 +436,12 @@ def text_pipeline(wrd): valid_loader_kwargs=hparams["valid_dataloader_opts"], ) + end_time = time.time() # End the timer + # Calculate elapsed time + elapsed_time = end_time - start_time + hparams["train_logger"].log_stats( + stats_meta={f"Model execution time: {elapsed_time:.6f} seconds"}, + ) # Testing if not os.path.exists(hparams["output_wer_folder"]): os.makedirs(hparams["output_wer_folder"]) diff --git a/benchmarks/DASB/LibriSpeech/ASR/train.py b/benchmarks/DASB/LibriSpeech/ASR/train.py index 49d2248cb..a66c0c5bf 100644 --- a/benchmarks/DASB/LibriSpeech/ASR/train.py +++ b/benchmarks/DASB/LibriSpeech/ASR/train.py @@ -11,6 +11,7 @@ import os import sys +import time import torch import torchaudio import logging @@ -424,6 +425,8 @@ def text_pipeline(wrd): if valid_bsampler is not None: valid_dataloader_opts = {"batch_sampler": valid_bsampler} + # Measure time + start_time = time.time() # Start the timer # Training asr_brain.fit( asr_brain.hparams.epoch_counter, @@ -433,6 +436,12 @@ def text_pipeline(wrd): valid_loader_kwargs=hparams["valid_dataloader_opts"], ) + end_time = time.time() # End the timer + # Calculate elapsed time + elapsed_time = end_time - start_time + hparams["train_logger"].log_stats( + stats_meta={f"Model execution time: {elapsed_time:.6f} seconds"}, + ) if hparams["testing"]: # Testing if not os.path.exists(hparams["output_wer_folder"]): From 9de693453ac350cd9f4997a380d41ca4a4537b4d Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Thu, 26 Dec 2024 01:14:50 -0500 Subject: [PATCH 44/61] add time measure --- benchmarks/DASB/LibriSpeech/ASR-on-the-fly/train.py | 7 ++++--- benchmarks/DASB/LibriSpeech/ASR/train.py | 5 ++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/train.py b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/train.py index 9fa3e3f3d..938ce8b96 100644 --- a/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/train.py +++ b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/train.py @@ -439,9 +439,10 @@ def text_pipeline(wrd): end_time = time.time() # End the timer # Calculate elapsed time elapsed_time = end_time - start_time - hparams["train_logger"].log_stats( - stats_meta={f"Model execution time: {elapsed_time:.6f} seconds"}, - ) + logger.info(f"Model execution time: {elapsed_time:.6f} seconds") + # hparams["train_logger"].log_stats( + # stats_meta={f"Model execution time: {elapsed_time:.6f} seconds"}, + # ) # Testing if not os.path.exists(hparams["output_wer_folder"]): os.makedirs(hparams["output_wer_folder"]) diff --git a/benchmarks/DASB/LibriSpeech/ASR/train.py b/benchmarks/DASB/LibriSpeech/ASR/train.py index a66c0c5bf..ec6ac1b42 100644 --- a/benchmarks/DASB/LibriSpeech/ASR/train.py +++ b/benchmarks/DASB/LibriSpeech/ASR/train.py @@ -439,9 +439,8 @@ def text_pipeline(wrd): end_time = time.time() # End the timer # Calculate elapsed time elapsed_time = end_time - start_time - hparams["train_logger"].log_stats( - stats_meta={f"Model execution time: {elapsed_time:.6f} seconds"}, - ) + logger.info(f"Model execution time: {elapsed_time:.6f} seconds") + if hparams["testing"]: # Testing if not os.path.exists(hparams["output_wer_folder"]): From c4e273852c2b1078bfb70b5d515867788c982218 Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Sat, 28 Dec 2024 11:24:50 -0500 Subject: [PATCH 45/61] update readme + minor changes --- .../ASR-on-the-fly/hparams/LSTM/dac.yaml | 1 - .../ASR-on-the-fly/hparams/LSTM/encodec.yaml | 1 - .../hparams/LSTM/speech_tokenizer.yaml | 1 - .../hparams/contextnet/dac.yaml | 1 - .../hparams/contextnet/encodec.yaml | 1 - .../hparams/contextnet/speech_tokenizer.yaml | 1 - benchmarks/DASB/README.md | 176 +++++++++++++++--- benchmarks/DASB/run_extraction.sh | 2 +- benchmarks/DASB/run_hparam_optimization.sh | 24 ++- benchmarks/DASB/utils/tokenizer_interface.py | 82 +++++++- 10 files changed, 240 insertions(+), 50 deletions(-) diff --git a/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/LSTM/dac.yaml b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/LSTM/dac.yaml index ff1749fab..605b772b5 100644 --- a/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/LSTM/dac.yaml +++ b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/LSTM/dac.yaml @@ -119,7 +119,6 @@ dnn_neurons: 1024 dropout: 0.2 output_neurons: 31 -# BPE parameters # BPE parameters token_type: char # ["unigram", "bpe", "char"] character_coverage: 1.0 diff --git a/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/LSTM/encodec.yaml b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/LSTM/encodec.yaml index dd4f62bf4..f13e3cb53 100644 --- a/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/LSTM/encodec.yaml +++ b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/LSTM/encodec.yaml @@ -116,7 +116,6 @@ dnn_neurons: 1024 dropout: 0.2 output_neurons: 31 -# BPE parameters # BPE parameters token_type: char # ["unigram", "bpe", "char"] character_coverage: 1.0 diff --git a/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/LSTM/speech_tokenizer.yaml b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/LSTM/speech_tokenizer.yaml index bb0b32a43..d0e9aae5b 100644 --- a/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/LSTM/speech_tokenizer.yaml +++ b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/LSTM/speech_tokenizer.yaml @@ -111,7 +111,6 @@ dnn_neurons: 1024 dropout: 0.2 output_neurons: 31 -# BPE parameters # BPE parameters token_type: char # ["unigram", "bpe", "char"] character_coverage: 1.0 diff --git a/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/contextnet/dac.yaml b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/contextnet/dac.yaml index b60b32604..8e73e3601 100644 --- a/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/contextnet/dac.yaml +++ b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/contextnet/dac.yaml @@ -115,7 +115,6 @@ freeze_embedding: False # LSTM output_neurons: 31 -# BPE parameters # BPE parameters token_type: char # ["unigram", "bpe", "char"] character_coverage: 1.0 diff --git a/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/contextnet/encodec.yaml b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/contextnet/encodec.yaml index 7c0dcfc45..4d88a7978 100644 --- a/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/contextnet/encodec.yaml +++ b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/contextnet/encodec.yaml @@ -109,7 +109,6 @@ freeze_embedding: False output_neurons: 31 -# BPE parameters # BPE parameters token_type: char # ["unigram", "bpe", "char"] character_coverage: 1.0 diff --git a/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/contextnet/speech_tokenizer.yaml b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/contextnet/speech_tokenizer.yaml index 3dcd7eea7..7fdbf8d51 100644 --- a/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/contextnet/speech_tokenizer.yaml +++ b/benchmarks/DASB/LibriSpeech/ASR-on-the-fly/hparams/contextnet/speech_tokenizer.yaml @@ -105,7 +105,6 @@ freeze_embedding: False output_neurons: 31 -# BPE parameters # BPE parameters token_type: char # ["unigram", "bpe", "char"] character_coverage: 1.0 diff --git a/benchmarks/DASB/README.md b/benchmarks/DASB/README.md index c3e42bf64..78d780739 100644 --- a/benchmarks/DASB/README.md +++ b/benchmarks/DASB/README.md @@ -29,10 +29,11 @@ For detailed information, refer to [paper](https://arxiv.org/pdf/2406.14294): - [Installation](#-installation) - [Discrete Audio Encoder](#-Discrete-Audio-Encoder) - [Datasets and Recipes](#-Datasets-and-Recipes) -- [Quickstart](#-quickstart) - - [Running a single task](#Running-a-single-task) - - [Running multiple tasks](#Runnin-multiple-tasks) +- [Training Scenarios](#-Training-Scenarios) + - [On-the-FlybToken Extraction](#On-the-Fly-Token-Extraction) + - [Offline-Token-Extraction](#Offline-Token-Extraction) - [‍Incorporating Your Audio Tokenizer](#-Incorporating-Your-Audio-Tokenizer) +- [Hyperparameter Tuning](#Hyperparameter-Tuning) - [Results](#-results) - [Contact](#-contact) - [Citing](#-citing) @@ -98,51 +99,166 @@ To set up SpeechBrain-DASB, follow these steps: | Libri2Mix | Speech Separation | Conformer | CRDNN | [github.com/JorisCos/LibriMix](https://github.com/JorisCos/LibriMix) | | LJSpeech | Text-to-Speech | Shallow Transformer | Deep Transformer | [keithito.com/LJ-Speech-Dataset/](https://keithito.com/LJ-Speech-Dataset/) | -# ▶️ Quickstart +# 📖 Training Scenarios -## Running a single task +We offer two different training scenarios: **on-the-fly token extraction** and **offline token extraction**. -If you have specific discrete model and want to benchmark it for a specific task, you need to run the following command: - ``` - python LibriSpeech/ASR/LSTM/train_[tokenzier_name].py LibriSpeech/ASR/LSTM/hparams/train_[tokenzier_name].yaml --output_folder my-output-folder --data_folder mypath/to/LibriSpeech - ``` +## 1. On-the-Fly Token Extraction +In this scenario, audio tokens are extracted dynamically during training. To enhance efficiency, we use a caching mechanism where tokens are saved in memory during the first epoch and retrieved for subsequent epochs. However, this approach has some limitations: +- It works best when the dataset is small, the bitrate is low, and batching is sorted (not random). +- It is unsuitable when data augmentation is required. -## Running multiple tasks +You can also disable the caching mechanism if needed. -To run all tasks, make the following changes: +Currently, the on-the-fly token extraction is applied only in the recipe located at: +`LibriSpeech/ASR-on-the-fly` -1. Edit the `run_discriminative_benchmark.sh` and `run_genarative_benchmark.sh` files and modify tokenizer related values for example the bitrate , number of codebooks, and etc. -2. Choose a set of tasks from the provided list and, for each task, select a downstream architecture from the available options (see list below). -3. Update the variables defined in `run_benchmark.sh` with two lists of equal size. In the `ConsideredTasks` list, specify the tasks you want to run (e.g., `'LibriSpeechASR' 'LibriSpeechASR' 'IEMOCAP'`). In the `Downstreams` list, specify the corresponding downstream architecture for each task (e.g., `'BiLSTM'`, `contextnet`, `'ecapa_tdnn'`). +If you wish to adapt this strategy for your own recipe, you can copy and modify the existing recipe as needed. Here's how to run the on-the-fly recipe: - For example, if you set `ConsideredTasks=('LibriSpeechASR' 'LibriSpeechASR' 'IEMOCAP')` and `Downstreams=('BiLSTM', 'contextnet', 'ecapa_tdnn')`, the benchmark will be executed as follows: - - LibriSpeechASR with BiLSTM as the probing head - - LibriSpeechASR with contextnet as the probing head - - IEMOCAP with ecapa_tdnn as the probing head. +```bash +python LibriSpeech/ASR-on-the-fly/train.py LibriSpeech/ASR-on-the-fly/hparams/LSTM/{TOKENIZER}.yaml --data_folder=path/LibriSpeech --output_folder=path/results/LibriSpeech/ASR/{TOKENIZER}/LSTM +``` -3. Run the following command: - ``` - bash run_discriminative_benchmark.sh [tokenzier_name] - bash run_genarative_benchmark.sh [tokenzier_name] - ``` - You could also pass extra arguments as far as they are consistent across all tasks. +> **Note:** On-the-fly extraction can be time-consuming, which is why we also provide an alternative approach: **offline token extraction**. + +--- + +## 2. Offline Token Extraction +In this scenario, all tokens are pre-extracted in a separate recipe. We recommend using the highest number of codebooks available for token extraction and then choosing the desired settings during training. + +### Token Extraction Command +To extract tokens, use the following command: + +```bash +python LibriSpeech/extraction/extract.py benchmarks/DASB/LibriSpeech/extraction/hparams/{tokenizer}.yaml --data_folder=path/LibriSpeech --num_codebooks=32 +``` + +If you wish to initialize your embedding layer with the tokenizer's embeddings while training your downstream model, set the flag `save_embedding` to `True`. For discrete SSL tokenizers, you can specify a list of layers for `--num_codebooks` instead of a single number (e.g., `--num_codebooks=[3,7,12]`). + +### Training with Pre-Extracted Tokens +Once tokens are extracted and saved, you can train a downstream model using the following command: + +```bash +bash run_experiments.sh --hparams benchmarks/DASB/LibriSpeech/ASR/hparams/LSTM/train.yaml --data_folder LibriSpeech --cached_data_folder cache/ --output_folder results/LibriSpeech/ASR/encodec/LSTM --task ASR --dataset LibriSpeech --seed 1986 --nruns 2 --eval_metric WER --tokens_folder LibriSpeech/extraction-emb/speech_tokenizer/save/librispeech/ +``` + +--- + +This workflow ensures flexibility, efficiency, and reproducibility for both training scenarios. Adapt the recipes as needed for your specific requirements! + +Here's a polished and formatted version for clarity, suitable for a README or documentation: + + + +# 🎛️ Hyperparameter Tuning + +Efficient hyperparameter tuning is critical when introducing novel models or experimenting with diverse datasets. Our benchmark establishes a standardized protocol for hyperparameter tuning, leveraging [Orion](https://orion.readthedocs.io/en/stable/) to ensure fair and consistent model comparisons. + +--- + +## **Overview** + +Hyperparameter tuning is managed using the `./run_hparam_optimization.sh` script. This script coordinates multiple hyperparameter trials via `run_experiments.sh`. + + + +## **Incorporating Orion Flags in Hparam Files** + +To enable tuning, Orion flags should be directly embedded in the YAML hparam file using comments. For example, to optimize the learning rate (`lr`) parameter within a defined range, include the following line in the YAML file: + +```yaml +lr_model: 0.0001 # @orion_step1: --lr_model~"loguniform(0.00001,0.5)" +``` + + + +## **Workflow of the Script** + +The script operates as follows: + +1. **Scans** the YAML hparam file for Orion flags. +2. **Executes** hyperparameter tuning using the `orion-hunt` command. +3. **Saves** the best hyperparameters for reference via `torch-info`. +4. **Iterates** until encountering flags such as `@orion_step` in the YAML file. + + + +## **Running Hyperparameter Optimization** + +You can perform hyperparameter optimization using a command like this: + +```bash +bash run_hparam_optimization.sh \ + --exp_name 'ASR-encodec-LSTM_hopt' \ + --hparams LibriSpeech/ASR/hparams/LSTM/train.yaml \ + --data_folder path/LibriSpeech \ + --cached_data_folder path/cache/ \ + --output_folder results/LibriSpeech/ASR/encodec/LSTM \ + --task ASR \ + --dataset LibriSpeech \ + --seed 1986 \ + --nruns 1 \ + --nruns_eval 5 \ + --eval_metric WER \ + --exp_max_trials 50 \ + --tokens_folder results/LibriSpeech/extraction-emb/encodec/save/librispeech/ \ + --run_name encodec +``` + +For more details on the arguments and customization options, refer to `./run_hparam_optimization.sh`. + + +### **Notes** + +1. **Execution Time**: + - Hyperparameter tuning may take several hours or even days, depending on the model complexity and dataset. + +2. **GPU vs. CPU**: + - By default, models are trained on GPU. To train on CPU instead, include the `--device cpu` flag. + +3. **Monitoring Progress**: + - Use the following command to monitor optimization status: + ```bash + orion status --all + ``` + - Ensure that Orion-specific environment variables are set in your bash environment. For example: + ```bash + export ORION_DB_ADDRESS=results/LibriSpeech/ASR/encodec/LSTM/hopt/ASR-encodec-LSTM_hopt.pkl + export ORION_DB_TYPE=pickleddb + ``` + Adjust `ORION_DB_ADDRESS` according to your experiment. + +4. **Resuming Optimization**: + - You can interrupt the script at any point. It will resume from the last completed trial. + +5. **Repetition of Optimization**: + - For multiple repetitions of the same hyperparameter optimization, modify the `--exp_name` parameter. + +6. **System Requirements**: + - The script is designed for Linux-based systems. A bash script is provided instead of Python due to its ability to manage diverse training loops across various subjects and sessions. + +--- + +This protocol ensures fair model comparison across diverse tasks and datasets. All reported results are derived using this standardized hyperparameter tuning methodology, enabling consistent assessments across models. - For generative task, make sure to set the `utmos_path` required for TTS evaluation. # 📝 ‍Incorporating Your Audio Tokenizer Let's now assume you've designed an audio and speech tokenizer in PyTorch and wish to integrate it into our benchmark. You're in luck because we've made this step as simple as possible for you! Here are the steps you should follow: -1. Write your model's code in a Python library saved in `benchmarks/DASB/model` (e.g., `benchmarks/MOABB/models/my_model.py`). -2. Create a YAML and py file for each task you want to experiment with. Thankfully, you don't have to start from scratch. For example, if you're working with LibriSpeech/ASR/LSTM, copy `benchmarks/DASB/LibriSpeech/ASR/contextnet/hparams/train_encodec.yaml` and save it in the same folder with a different name (e.g., `train_my_model.yaml` and `train_my_model.py`). +1. Write your model's code in a Python library saved in `benchmarks/DASB/model` (e.g., `benchmarks/DASB/models/my_model.py`). + +2. Add the tokenizer to `utils/tokenizer_interface.py` and ensure the `encode` and `decode` functions are consistent in functionality and output shape with the other tokenizers. + +3. Create a YAML and Python file for each task you want to experiment with. Thankfully, you don't have to start from scratch. For example, you can copy `LibriSpeech/extraction/hparams/encodec.yaml`, adapt it based on your needs, and save it in the same folder with a different name (e.g., `LibriSpeech/extraction/hparams/{YOUR_TOKENIZER_NAME}.yaml`). -3. Edit the relevant section of your `train_my_model.yaml` and `train_my_model.py`. Redefine the `codec:` to reference your custom model (e.g., `codec: !new:models.my_model.my_model`). +4. Edit the relevant sections of your `{YOUR_TOKENIZER_NAME}.yaml`. Redefine the `tokenizer:` field to reference your custom model (e.g., `tokenizer: !new:tokenizer_interface.your_tokenizer`). -4. Ensure you include the hyperparameters specific to your model. +5. Ensure you include the hyperparameters specific to your model. -5. Now, follow the instructions above to run an experiments across tasks. +6. Now, follow the instructions provided earlier to run experiments across tasks. **Note**: If you're not familiar with YAML, you can refer to our [HyperPyYAML tutorial](https://speechbrain.github.io/tutorial_basics.html) on the SpeechBrain website for guidance. # 📈 Results diff --git a/benchmarks/DASB/run_extraction.sh b/benchmarks/DASB/run_extraction.sh index e121c35cb..92cc81381 100644 --- a/benchmarks/DASB/run_extraction.sh +++ b/benchmarks/DASB/run_extraction.sh @@ -4,7 +4,7 @@ # Script to extracts and save tokens from dataset. # # Usage: -# ./ $run_extraction.sh --data_folder LibriSpeech --output_folder results/LibriSpeech/ASR/encodec/LSTM --tokenizer encidec --dataset LibriSpeech +# ./ $run_extraction.sh --data_folder LibriSpeech --output_folder results/LibriSpeech/ASR/encodec/LSTM --tokenizer encodec --dataset LibriSpeech # Authors: # - Pooneh Mousavi (2024) diff --git a/benchmarks/DASB/run_hparam_optimization.sh b/benchmarks/DASB/run_hparam_optimization.sh index 5cbde3b20..2ad1dddf3 100644 --- a/benchmarks/DASB/run_hparam_optimization.sh +++ b/benchmarks/DASB/run_hparam_optimization.sh @@ -8,16 +8,20 @@ # This script facilitates hyperparameter tuning for a given audio tokenizer, dowsnteram model and dataset using Orion. # Usage: -# ./run_hparam_optimization.sh --exp_name 'EEGNet_BNCI2014001_hopt' \ -# --output_folder results/MotorImagery/BNCI2014001/EEGNet/hopt \ -# --data_folder eeg_data/ \ -# --hparams hparams/MotorImagery/BNCI2014001/EEGNet.yaml \ -# --nruns 1 --nruns_eval 10 \ -# --eval_metric acc \ -# --exp_max_trials 50 \ -# --store_all True \ -# --device 'cpu' -# +# ./run_hparam_optimization.sh --exp_name 'ASR-encodec-LSTM_hopt' \ + # --hparams LibriSpeech/ASR/hparams/LSTM/train.yaml \ + # --data_folder path/LibriSpeech \ + # --cached_data_folder path/cache/ \ + # --output_folder results/LibriSpeech/ASR/encodec/LSTM \ + # --task ASR \ + # --dataset LibriSpeech \ + # --seed 1986 \ + # --nruns 1 \ + # --nruns_eval 5 \ + # --eval_metric WER \ + # --exp_max_trials 50 \ + # --tokens_folder results/LibriSpeech/extraction-emb/encodec/save/librispeech/ \ + # --run_name encodec # Optimization Steps: # The script supports multiple hyperparameter optimization steps. diff --git a/benchmarks/DASB/utils/tokenizer_interface.py b/benchmarks/DASB/utils/tokenizer_interface.py index f63ddd6aa..ff1194968 100644 --- a/benchmarks/DASB/utils/tokenizer_interface.py +++ b/benchmarks/DASB/utils/tokenizer_interface.py @@ -21,25 +21,101 @@ class BaseTokenizer(ABC): + """ + Abstract base class for tokenizers that encode signals into discrete tokens + and decode tokens back into signals. + + This class defines the essential methods that any tokenizer must implement, + including encoding, decoding, and retrieving pretrained embeddings. + + Naming Convenstion + ------------------ + B : int + Batch size. + T : int + Sequence length in the time domain. + N : int + Sequence length in the token domain. + C : int + Vocabulary size, assuming each codebook has the same number of tokens. + K : int + Number of codebooks. + """ + def __init__(self): + """ + Initialize the BaseTokenizer. + + This is a base constructor that other tokenizers can extend. + """ super().__init__() @abstractmethod @torch.no_grad() def sig_to_tokens(self, signal, lengths, num_codebooks=None, **kwargs): - """Encode signal into tokens.""" + """ + Encode a signal into discrete tokens. + + Arguments + --------- + signal : torch.Tensor + Input signal with shape [B, T]. + lengths : torch.Tensor + Lengths of each sequence in the batch, with shape [B]. + num_codebooks : int, optional + Number of codebooks to use for encoding. If None, all codebooks are used (default: None). + If specified as an int, the tokens will be truncated to include only the first `num_codebooks` codebooks. If specified as a list, + the tokens will include only the codebooks at the specified indices. + **kwargs : dict + Additional arguments for the tokenizer. + + Returns + ------- + tokens : torch.Tensor + Discretized tokens with shape [B, N, K]. + """ pass @abstractmethod @torch.no_grad() def tokens_to_sig(self, tokens, **kwargs): - """Decode tokens to signal.""" + """ + Decode discrete tokens back into a signal. + + Arguments + --------- + tokens : torch.Tensor + Input tokens with shape [B, N, K]. + **kwargs : dict + Additional arguments for the tokenizer. + + Returns + ------- + signal : torch.Tensor + Reconstructed signal with shape [B, T]. + """ pass @abstractmethod @torch.no_grad() def get_pretrained_embeddings(self, vocab_size, num_codebooks, **kwargs): - """Get codebook embeddings.""" + """ + Retrieve pretrained embeddings for the tokenizer. + + Arguments + --------- + vocab_size : int + Number of tokens in each codebook. + num_codebooks : int + Number of codebooks. + **kwargs : dict + Additional arguments for embedding retrieval. + + Returns + ------- + embeddings : torch.Tensor + Pretrained embedding weights with shape [K, C, H], where H is the embedding dimension. + """ pass From 279e48b001fedc21ba69acc1150a9099b114d5a7 Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Sat, 28 Dec 2024 11:35:57 -0500 Subject: [PATCH 46/61] fix link in readme --- README.md | 2 +- benchmarks/DASB/README.md | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index a6defc05b..fc0b33c4d 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ The SpeechBrain Benchmarks currently include the following: - [MOABB](https://github.com/speechbrain/benchmarks/tree/main/benchmarks/MOABB) - A benchmark designed for evaluating neural models in well-known EEG tasks like motor imagery, P300, and SSVEP. -- [DASB](https://github.com/speechbrain/benchmarks/tree/main/benchmarks/DASB) - A benchmark designed for evaluating discrete audio tokens across a wide range of discriminative +- [DASB](https://github.com/speechbrain/benchmarks/tree/DASB/benchmarks/DASB) - A benchmark designed for evaluating discrete audio tokens across a wide range of discriminative and generative tasks. diff --git a/benchmarks/DASB/README.md b/benchmarks/DASB/README.md index 78d780739..445232337 100644 --- a/benchmarks/DASB/README.md +++ b/benchmarks/DASB/README.md @@ -30,10 +30,10 @@ For detailed information, refer to [paper](https://arxiv.org/pdf/2406.14294): - [Discrete Audio Encoder](#-Discrete-Audio-Encoder) - [Datasets and Recipes](#-Datasets-and-Recipes) - [Training Scenarios](#-Training-Scenarios) - - [On-the-FlybToken Extraction](#On-the-Fly-Token-Extraction) - - [Offline-Token-Extraction](#Offline-Token-Extraction) + - [On-the-Fly Token Extraction](#-On-the-Fly-Token-Extraction) + - [Offline-Token-Extraction](#-Offline-Token-Extraction) - [‍Incorporating Your Audio Tokenizer](#-Incorporating-Your-Audio-Tokenizer) -- [Hyperparameter Tuning](#Hyperparameter-Tuning) +- [Hyperparameter Tuning](#-Hyperparameter-Tuning) - [Results](#-results) - [Contact](#-contact) - [Citing](#-citing) From 7f32f1bf3f3c7c7e844b5134f82845ce29cdbea7 Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Sat, 28 Dec 2024 11:40:01 -0500 Subject: [PATCH 47/61] update table of contnet --- benchmarks/DASB/README.md | 43 ++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/benchmarks/DASB/README.md b/benchmarks/DASB/README.md index 445232337..684459083 100644 --- a/benchmarks/DASB/README.md +++ b/benchmarks/DASB/README.md @@ -25,18 +25,31 @@ For detailed information, refer to [paper](https://arxiv.org/pdf/2406.14294): # Table of Contents -- [Table of Contents](#table-of-contents) -- [Installation](#-installation) -- [Discrete Audio Encoder](#-Discrete-Audio-Encoder) -- [Datasets and Recipes](#-Datasets-and-Recipes) -- [Training Scenarios](#-Training-Scenarios) - - [On-the-Fly Token Extraction](#-On-the-Fly-Token-Extraction) - - [Offline-Token-Extraction](#-Offline-Token-Extraction) -- [‍Incorporating Your Audio Tokenizer](#-Incorporating-Your-Audio-Tokenizer) -- [Hyperparameter Tuning](#-Hyperparameter-Tuning) -- [Results](#-results) -- [Contact](#-contact) -- [Citing](#-citing) +Here’s the updated **Table of Contents** for your GitHub README with corrections and better alignment: + +--- + +# 📑 Table of Contents + +- [DASB - Discrete Audio and Speech Benchmark](#dasb---discrete-audio-and-speech-benchmark) +- [🛠️ Installation](#-installation) +- [🎌 Discrete Audio Encoder](#-discrete-audio-encoder) +- [⚡ Datasets and Recipes](#-datasets-and-recipes) +- [📖 Training Scenarios](#-training-scenarios) + - [On-the-Fly Token Extraction](#on-the-fly-token-extraction) + - [Offline Token Extraction](#offline-token-extraction) +- [🎛️ Hyperparameter Tuning](#-hyperparameter-tuning) +- [📝 Incorporating Your Audio Tokenizer](#-incorporating-your-audio-tokenizer) +- [📈 Results](#-results) + - [Ranking](#ranking) + - [Benchmarking Results for Discriminative Tasks](#benchmarking-results-for-discriminative-tasks) + - [Benchmarking Results for Generative Tasks](#benchmarking-results-for-generative-tasks) +- [📧 Contact](#-contact) +- [📖 Citing](#-citing) + +--- + +This structure provides a clear and logical flow, ensuring users can easily navigate the document. Each major section is linked appropriately, with sub-sections for detailed content. Let me know if additional adjustments are required! # 🛠️ Installation @@ -103,7 +116,7 @@ To set up SpeechBrain-DASB, follow these steps: We offer two different training scenarios: **on-the-fly token extraction** and **offline token extraction**. -## 1. On-the-Fly Token Extraction +## On-the-Fly Token Extraction In this scenario, audio tokens are extracted dynamically during training. To enhance efficiency, we use a caching mechanism where tokens are saved in memory during the first epoch and retrieved for subsequent epochs. However, this approach has some limitations: - It works best when the dataset is small, the bitrate is low, and batching is sorted (not random). - It is unsuitable when data augmentation is required. @@ -121,9 +134,8 @@ python LibriSpeech/ASR-on-the-fly/train.py LibriSpeech/ASR-on-the-fly/hparams/LS > **Note:** On-the-fly extraction can be time-consuming, which is why we also provide an alternative approach: **offline token extraction**. ---- -## 2. Offline Token Extraction +## Offline Token Extraction In this scenario, all tokens are pre-extracted in a separate recipe. We recommend using the highest number of codebooks available for token extraction and then choosing the desired settings during training. ### Token Extraction Command @@ -149,7 +161,6 @@ This workflow ensures flexibility, efficiency, and reproducibility for both trai Here's a polished and formatted version for clarity, suitable for a README or documentation: - # 🎛️ Hyperparameter Tuning Efficient hyperparameter tuning is critical when introducing novel models or experimenting with diverse datasets. Our benchmark establishes a standardized protocol for hyperparameter tuning, leveraging [Orion](https://orion.readthedocs.io/en/stable/) to ensure fair and consistent model comparisons. From 30fc2d691aef1ff6c9edf4eb97fd1a3bb58d8a77 Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Sat, 28 Dec 2024 11:42:14 -0500 Subject: [PATCH 48/61] fix --- benchmarks/DASB/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/DASB/README.md b/benchmarks/DASB/README.md index 684459083..a3fdedb56 100644 --- a/benchmarks/DASB/README.md +++ b/benchmarks/DASB/README.md @@ -38,7 +38,7 @@ Here’s the updated **Table of Contents** for your GitHub README with correctio - [📖 Training Scenarios](#-training-scenarios) - [On-the-Fly Token Extraction](#on-the-fly-token-extraction) - [Offline Token Extraction](#offline-token-extraction) -- [🎛️ Hyperparameter Tuning](#-hyperparameter-tuning) +- [🎛️ Hyperparameter Tuning](#hyperparameter-tuning) - [📝 Incorporating Your Audio Tokenizer](#-incorporating-your-audio-tokenizer) - [📈 Results](#-results) - [Ranking](#ranking) From a576ba7fe63d4b1e93792030210bbb8e6d4f3c1a Mon Sep 17 00:00:00 2001 From: poonehmousavi Date: Sat, 28 Dec 2024 11:43:35 -0500 Subject: [PATCH 49/61] fix --- benchmarks/DASB/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/DASB/README.md b/benchmarks/DASB/README.md index a3fdedb56..0ad632979 100644 --- a/benchmarks/DASB/README.md +++ b/benchmarks/DASB/README.md @@ -38,7 +38,7 @@ Here’s the updated **Table of Contents** for your GitHub README with correctio - [📖 Training Scenarios](#-training-scenarios) - [On-the-Fly Token Extraction](#on-the-fly-token-extraction) - [Offline Token Extraction](#offline-token-extraction) -- [🎛️ Hyperparameter Tuning](#hyperparameter-tuning) +- [🎛️ Hyperparameter Tuning](#%EF%B8%8F-hyperparameter-tuning) - [📝 Incorporating Your Audio Tokenizer](#-incorporating-your-audio-tokenizer) - [📈 Results](#-results) - [Ranking](#ranking) From c96eefbacd3f1f3abec1bf08fbf8fddc24f908a7 Mon Sep 17 00:00:00 2001 From: Anastasia Kuznetsova Date: Fri, 10 Jan 2025 11:11:23 -0500 Subject: [PATCH 50/61] Add Common Voice tokenization --- .../ASR/LSTM/common_voice_prepare.py | 1 - .../CommonVoice/ASR/LSTM/hparams/train.yaml | 218 +++++++++ .../ASR/LSTM/hparams/train_dac.yaml | 6 + .../CommonVoice/ASR/common_voice_prepare.py | 449 +++++++++++++++++ benchmarks/DASB/CommonVoice/ASR/train.py | 453 ++++++++++++++++++ .../extraction/common_voice_prepare.py | 449 +++++++++++++++++ .../DASB/CommonVoice/extraction/extract.py | 90 ++++ .../CommonVoice/extraction/hparams/dac.yaml | 68 +++ .../extraction/hparams/discrete_ssl.yaml | 102 ++++ .../extraction/hparams/encodec.yaml | 63 +++ .../extraction/hparams/speech_tokenizer.yaml | 54 +++ benchmarks/DASB/run_experiments.sh | 0 benchmarks/DASB/run_hparam_optimization.sh | 0 13 files changed, 1952 insertions(+), 1 deletion(-) delete mode 120000 benchmarks/DASB/CommonVoice/ASR/LSTM/common_voice_prepare.py create mode 100644 benchmarks/DASB/CommonVoice/ASR/LSTM/hparams/train.yaml create mode 100644 benchmarks/DASB/CommonVoice/ASR/common_voice_prepare.py create mode 100644 benchmarks/DASB/CommonVoice/ASR/train.py create mode 100644 benchmarks/DASB/CommonVoice/extraction/common_voice_prepare.py create mode 100644 benchmarks/DASB/CommonVoice/extraction/extract.py create mode 100644 benchmarks/DASB/CommonVoice/extraction/hparams/dac.yaml create mode 100644 benchmarks/DASB/CommonVoice/extraction/hparams/discrete_ssl.yaml create mode 100644 benchmarks/DASB/CommonVoice/extraction/hparams/encodec.yaml create mode 100644 benchmarks/DASB/CommonVoice/extraction/hparams/speech_tokenizer.yaml mode change 100644 => 100755 benchmarks/DASB/run_experiments.sh mode change 100644 => 100755 benchmarks/DASB/run_hparam_optimization.sh diff --git a/benchmarks/DASB/CommonVoice/ASR/LSTM/common_voice_prepare.py b/benchmarks/DASB/CommonVoice/ASR/LSTM/common_voice_prepare.py deleted file mode 120000 index 402027afc..000000000 --- a/benchmarks/DASB/CommonVoice/ASR/LSTM/common_voice_prepare.py +++ /dev/null @@ -1 +0,0 @@ -../../common_voice_prepare.py \ No newline at end of file diff --git a/benchmarks/DASB/CommonVoice/ASR/LSTM/hparams/train.yaml b/benchmarks/DASB/CommonVoice/ASR/LSTM/hparams/train.yaml new file mode 100644 index 000000000..26e73236a --- /dev/null +++ b/benchmarks/DASB/CommonVoice/ASR/LSTM/hparams/train.yaml @@ -0,0 +1,218 @@ +# ############################################################################ +# Model: E2E ASR with CTC +# Auido Tokenizer: Encodec +# Encoder: LSTM Encoder +# Decoder: CTC beam searcher and greedy searcher +# Tokens: character +# Training: Librispeech 960h +# Authors: +# - Pooneh Mousavi 2024 +# - Jarod Duret 2024 +# ############################################################################ +# Seed needs to be set at top of yaml, before objects with parameters are made + +seed: 1986 +__set_seed: !apply:torch.manual_seed [!ref ] +run_name: !PLACEHOLDER +output_folder: !ref results// +output_wer_folder: !ref /wer.txt +save_folder: !ref /save +train_log: !ref /train_log.txt +testing: True # If set to True, the test evlaution is done, otherwise skipped. + +# Data files +data_folder: !PLACEHOLDER # e.g, /local/cv-corpus-11.0-2022-09-21/ +cached_data_folder: !PLACEHOLDER # e.g., path/to/cache +train_tsv_file: !ref /train.tsv # Standard CommonVoice .tsv files +dev_tsv_file: !ref /dev.tsv # Standard CommonVoice .tsv files +test_tsv_file: !ref /test.tsv # Standard CommonVoice .tsv files +accented_letters: True +train_csv: !ref /train.csv +valid_csv: !ref /dev.csv +test_csv: !ref /test.csv +skip_prep: False # Skip data preparation +language: cy # use 'cy' for Welsh and 'eu' for Basque + +tokens_folder: !PLACEHOLDER # Path to the folder where extracted tokens are saved. +pretrain_embeddings_folder: none # Optional: If pretrain_embeddings is True, this should be set to the path where the pretrained embeddings are saved. + +avoid_if_longer_than: 10.0 + +####################### Training Parameters #################################### +number_of_epochs: 20 +batch_size_exponent: 4 # @orion_step1: --batch_size_exponent~"uniform(2, 4,discrete=True)" +batch_size: !ref 2 ** +test_batch_size: 1 +grad_accumulation_factor: 2 +max_grad_norm: 5.0 +sorting: descending #random +num_workers: 8 +loss_reduction: batchmean +precision: fp32 # bf16, fp16 or fp32loss_reduction: batchmean +valid_search_interval: 1 +avg_checkpoints: 10 # Number of checkpoints to average for evaluation +cache_size: 1.e+10 + +lr_model: 0.0001 # @orion_step1: --lr_model~"loguniform(0.00001,0.5)" +weight_decay: 0.0005 + + +# Training parameters +dynamic_batching: True +max_batch_length_train: 850 +max_batch_len_val: 100 +num_bucket: 200 +shuffle: False # if true re-creates batches at each epoch shuffling examples. +max_batch_ex: 128 +batch_ordering: random + +dynamic_batch_sampler_train: + max_batch_length: !ref + num_buckets: !ref + shuffle: !ref + batch_ordering: !ref + max_batch_ex: !ref + +dynamic_batch_sampler_val: + max_batch_length: !ref + num_buckets: !ref + shuffle: !ref + batch_ordering: !ref + max_batch_ex: !ref + +# Dataloader options +train_dataloader_opts: + batch_size: !ref + shuffle: True + num_workers: !ref + +valid_dataloader_opts: + batch_size: !ref + +test_dataloader_opts: + batch_size: !ref + + +####################### Model parameters ########################### +# Tokenizer parameters +# These parameters should be set according to the tokenizer used to extract tokens saved in . +vocab_size: 1024 +num_codebooks: 24 +sample_rate: 24000 + +# Feature parameters +encoder_dim: 1024 +# If set to True, encoder_dim should match the dimension of the tokenizer. For Encodec, it is 128. +pretrain_embeddings: False +freeze_embedding: False + +# LSTM +activation: !name:torch.nn.Sigmoid +dnn_layers: 2 # @orion_step1: --dnn_layers~"uniform(1, 4,discrete=True)" +dnn_neurons: 1024 +dropout: 0.2 +output_neurons: 31 + +# BPE parameters +# BPE parameters +token_type: char # ["unigram", "bpe", "char"] +character_coverage: 1.0 +blank_index: 0 +bos_index: 1 +eos_index: 2 + +# Decoding parameters +beam_size: 100 +beam_prune_logp: -12.0 +token_prune_min_logp: -1.2 +prune_history: False + +############################## models ################################ +tokens_loader: !new:utils.tokens.TokensLoader + data_path: !ref + +discrete_embedding_layer: !new:model.custom_model.Discrete_EmbeddingLayer + num_codebooks: !ref + vocab_size: !ref + emb_dim: !ref + # hidden_dim: !ref + freeze: !ref + init: !ref + +attention_mlp: !new:model.custom_model.AttentionMLP + input_dim: !ref + hidden_dim: !ref + +encoder: !new:speechbrain.nnet.RNN.LSTM + input_shape: [Null, Null, !ref ] + num_layers: !ref + bidirectional: True + dropout: !ref + hidden_size: !ref + +ctc_lin: !new:speechbrain.nnet.linear.Linear + input_size: 2048 + n_neurons: !ref + +modules: + encoder: !ref + ctc_lin: !ref + attention_mlp: !ref + # tokenizer: !ref + discrete_embedding_layer: !ref + + +model: !new:torch.nn.ModuleList + - [!ref , !ref , !ref , !ref ] + +####################### Decoding & optimiser ########################### +# Decoding parameters +test_beam_search: + blank_index: !ref + beam_size: !ref + beam_prune_logp: !ref + token_prune_min_logp: !ref + prune_history: !ref + alpha: 0.8 + beta: 1.2 + +ctc_cost: !name:speechbrain.nnet.losses.ctc_loss + blank_index: !ref + + +log_softmax: !new:speechbrain.nnet.activations.Softmax + apply_log: True + +scheduler: !new:speechbrain.nnet.schedulers.NewBobScheduler + initial_value: !ref + improvement_threshold: 0.0025 + annealing_factor: 0.8 + patient: 0 + +model_opt_class: !name:torch.optim.AdamW + lr: !ref + betas: (0.9, 0.98) + eps: 0.000000001 + weight_decay: !ref + +############################## Logging and Pretrainer ########################## +checkpointer: !new:speechbrain.utils.checkpoints.Checkpointer + checkpoints_dir: !ref + recoverables: + model: !ref + scheduler: !ref + counter: !ref + + +# Functions and classes +epoch_counter: !new:speechbrain.utils.epoch_loop.EpochCounter + limit: !ref + +train_logger: !new:speechbrain.utils.train_logger.FileTrainLogger + save_file: !ref + +error_rate_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats + +cer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats + split_tokens: True +wer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats \ No newline at end of file diff --git a/benchmarks/DASB/CommonVoice/ASR/LSTM/hparams/train_dac.yaml b/benchmarks/DASB/CommonVoice/ASR/LSTM/hparams/train_dac.yaml index d80230db7..22f06450c 100644 --- a/benchmarks/DASB/CommonVoice/ASR/LSTM/hparams/train_dac.yaml +++ b/benchmarks/DASB/CommonVoice/ASR/LSTM/hparams/train_dac.yaml @@ -19,6 +19,7 @@ train_log: !ref /train_log.txt # Data files data_folder: !PLACEHOLDER # e.g, /local/cv-corpus-11.0-2022-09-21/ +cached_data_folder: !PLACEHOLDER # e.g., path/to/cache train_tsv_file: !ref /train.tsv # Standard CommonVoice .tsv files dev_tsv_file: !ref /dev.tsv # Standard CommonVoice .tsv files test_tsv_file: !ref /test.tsv # Standard CommonVoice .tsv files @@ -28,6 +29,9 @@ valid_csv: !ref /dev.csv test_csv: !ref /test.csv skip_prep: False # Skip data preparation +tokens_folder: !PLACEHOLDER # Path to the folder where extracted tokens are saved. +pretrain_embeddings_folder: none # Optional: If pretrain_embeddings is True, this should be set to the path where the pretrained embeddings are saved. + avoid_if_longer_than: 10.0 # Training parameters @@ -97,6 +101,8 @@ vocab_size: 1024 model_bitrate: 8kbps num_codebooks: 2 # NOTE: must be smaller or equal to the maximum number of codebooks for the given model type sample_rate: 24000 +pretrain_embeddings: False +freeze_embedding: False # Feature parameters encoder_dim: 1024 diff --git a/benchmarks/DASB/CommonVoice/ASR/common_voice_prepare.py b/benchmarks/DASB/CommonVoice/ASR/common_voice_prepare.py new file mode 100644 index 000000000..1f17faa66 --- /dev/null +++ b/benchmarks/DASB/CommonVoice/ASR/common_voice_prepare.py @@ -0,0 +1,449 @@ +""" +Data preparation. +Download: https://commonvoice.mozilla.org/en/datasets +Author +------ +Titouan Parcollet +Luca Della Libera 2022 +Pooneh Mousavi 2022 +Salima Mdhaffar 2023 +""" + +from dataclasses import dataclass +import os +import csv +import re +import logging +import unicodedata +import functools + +from speechbrain.utils.parallel import parallel_map +from speechbrain.dataio.dataio import read_audio_info + +logger = logging.getLogger(__name__) + + +def prepare_common_voice( + data_folder, + save_folder, + train_tsv_file=None, + dev_tsv_file=None, + test_tsv_file=None, + accented_letters=False, + language="en", + skip_prep=False, +): + """ + Prepares the csv files for the Mozilla Common Voice dataset. + Download: https://commonvoice.mozilla.org/en + + Arguments + --------- + data_folder : str + Path to the folder where the original Common Voice dataset is stored. + This path should include the lang: /datasets/CommonVoice// + save_folder : str + The directory where to store the csv files. + train_tsv_file : str, optional + Path to the Train Common Voice .tsv file (cs) + dev_tsv_file : str, optional + Path to the Dev Common Voice .tsv file (cs) + test_tsv_file : str, optional + Path to the Test Common Voice .tsv file (cs) + accented_letters : bool, optional + Defines if accented letters will be kept as individual letters or + transformed to the closest non-accented letters. + language: str + Specify the language for text normalization. + skip_prep: bool + If True, skip data preparation. + Example + ------- + >>> from recipes.CommonVoice.common_voice_prepare import prepare_common_voice + >>> data_folder = '/datasets/CommonVoice/en' + >>> save_folder = 'exp/CommonVoice_exp' + >>> train_tsv_file = '/datasets/CommonVoice/en/train.tsv' + >>> dev_tsv_file = '/datasets/CommonVoice/en/dev.tsv' + >>> test_tsv_file = '/datasets/CommonVoice/en/test.tsv' + >>> accented_letters = False + >>> duration_threshold = 10 + >>> prepare_common_voice( \ + data_folder, \ + save_folder, \ + train_tsv_file, \ + dev_tsv_file, \ + test_tsv_file, \ + accented_letters, \ + language="en" \ + ) + """ + + if skip_prep: + return + + # If not specified point toward standard location w.r.t CommonVoice tree + if train_tsv_file is None: + train_tsv_file = data_folder + "/train.tsv" + else: + train_tsv_file = train_tsv_file + + if dev_tsv_file is None: + dev_tsv_file = data_folder + "/dev.tsv" + else: + dev_tsv_file = dev_tsv_file + + if test_tsv_file is None: + test_tsv_file = data_folder + "/test.tsv" + else: + test_tsv_file = test_tsv_file + + # Setting the save folder + if not os.path.exists(save_folder): + os.makedirs(save_folder) + + # Setting ouput files + save_csv_train = save_folder + "/train.csv" + save_csv_dev = save_folder + "/dev.csv" + save_csv_test = save_folder + "/test.csv" + + # If csv already exists, we skip the data preparation + if skip(save_csv_train, save_csv_dev, save_csv_test): + + msg = "%s already exists, skipping data preparation!" % (save_csv_train) + logger.info(msg) + + msg = "%s already exists, skipping data preparation!" % (save_csv_dev) + logger.info(msg) + + msg = "%s already exists, skipping data preparation!" % (save_csv_test) + logger.info(msg) + + return + + # Additional checks to make sure the data folder contains Common Voice + check_commonvoice_folders(data_folder) + # Creating csv files for {train, dev, test} data + file_pairs = zip( + [train_tsv_file, dev_tsv_file, test_tsv_file], + [save_csv_train, save_csv_dev, save_csv_test], + ) + for tsv_file, save_csv in file_pairs: + create_csv( + tsv_file, save_csv, data_folder, accented_letters, language, + ) + + +def skip(save_csv_train, save_csv_dev, save_csv_test): + """ + Detects if the Common Voice data preparation has been already done. + If the preparation has been done, we can skip it. + Returns + ------- + bool + if True, the preparation phase can be skipped. + if False, it must be done. + """ + + # Checking folders and save options + skip = False + + if ( + os.path.isfile(save_csv_train) + and os.path.isfile(save_csv_dev) + and os.path.isfile(save_csv_test) + ): + skip = True + + return skip + + +@dataclass +class CVRow: + snt_id: str + duration: float + mp3_path: str + spk_id: str + words: str + + +def process_line(line, data_folder, language, accented_letters): + # Path is at indice 1 in Common Voice tsv files. And .mp3 files + # are located in datasets/lang/clips/ + mp3_path = data_folder + "/clips/" + line.split("\t")[1] + + file_name = mp3_path.split(".")[-2].split("/")[-1] + spk_id = line.split("\t")[0] + snt_id = file_name + + # Reading the signal (to retrieve duration in seconds) + if os.path.isfile(mp3_path): + info = read_audio_info(mp3_path) + else: + msg = "\tError loading: %s" % (str(len(file_name))) + logger.info(msg) + return None + + duration = info.num_frames / info.sample_rate + + # Getting transcript + words = line.split("\t")[3] + + # Unicode Normalization + words = unicode_normalisation(words) + + # !! Language specific cleaning !! + words = language_specific_preprocess(language, words) + + # Remove accents if specified + if not accented_letters: + words = strip_accents(words) + words = words.replace("'", " ") + words = words.replace("’", " ") + + # Remove multiple spaces + words = re.sub(" +", " ", words) + + # Remove spaces at the beginning and the end of the sentence + words = words.lstrip().rstrip() + + # Getting chars + chars = words.replace(" ", "_") + chars = " ".join([char for char in chars][:]) + + # Remove too short sentences (or empty): + if language in ["ja", "zh-CN"]: + if len(chars) < 3: + return None + else: + if len(words.split(" ")) < 3: + return None + + # Composition of the csv_line + return CVRow(snt_id, duration, mp3_path, spk_id, words) + + +def create_csv( + orig_tsv_file, csv_file, data_folder, accented_letters=False, language="en" +): + """ + Creates the csv file given a list of wav files. + Arguments + --------- + orig_tsv_file : str + Path to the Common Voice tsv file (standard file). + data_folder : str + Path of the CommonVoice dataset. + accented_letters : bool, optional + Defines if accented letters will be kept as individual letters or + transformed to the closest non-accented letters. + Returns + ------- + None + """ + + # Check if the given files exists + if not os.path.isfile(orig_tsv_file): + msg = "\t%s doesn't exist, verify your dataset!" % (orig_tsv_file) + logger.info(msg) + raise FileNotFoundError(msg) + + # We load and skip the header + loaded_csv = open(orig_tsv_file, "r").readlines()[1:] + nb_samples = len(loaded_csv) + + msg = "Preparing CSV files for %s samples ..." % (str(nb_samples)) + logger.info(msg) + + # Adding some Prints + msg = "Creating csv lists in %s ..." % (csv_file) + logger.info(msg) + + # Process and write lines + total_duration = 0.0 + + line_processor = functools.partial( + process_line, + data_folder=data_folder, + language=language, + accented_letters=accented_letters, + ) + + # Stream into a .tmp file, and rename it to the real path at the end. + csv_file_tmp = csv_file + ".tmp" + + with open(csv_file_tmp, mode="w", encoding="utf-8") as csv_f: + csv_writer = csv.writer( + csv_f, delimiter=",", quotechar='"', quoting=csv.QUOTE_MINIMAL + ) + + csv_writer.writerow(["ID", "duration", "wav", "spk_id", "wrd"]) + + for row in parallel_map(line_processor, loaded_csv): + if row is None: + continue + + total_duration += row.duration + csv_writer.writerow( + [ + row.snt_id, + str(row.duration), + row.mp3_path, + row.spk_id, + row.words, + ] + ) + + os.replace(csv_file_tmp, csv_file) + + # Final prints + msg = "%s successfully created!" % (csv_file) + logger.info(msg) + msg = "Number of samples: %s " % (str(len(loaded_csv))) + logger.info(msg) + msg = "Total duration: %s Hours" % (str(round(total_duration / 3600, 2))) + logger.info(msg) + + +def language_specific_preprocess(language, words): + # !! Language specific cleaning !! + # Important: feel free to specify the text normalization + # corresponding to your alphabet. + + if language in ["en", "fr", "it", "rw"]: + words = re.sub( + "[^’'A-Za-z0-9À-ÖØ-öø-ÿЀ-ӿéæœâçèàûî]+", " ", words + ).upper() + + if language == "de": + # this replacement helps preserve the case of ß + # (and helps retain solitary occurrences of SS) + # since python's upper() converts ß to SS. + words = words.replace("ß", "0000ß0000") + words = re.sub("[^’'A-Za-z0-9öÖäÄüÜß]+", " ", words).upper() + words = words.replace("'", " ") + words = words.replace("’", " ") + words = words.replace( + "0000SS0000", "ß" + ) # replace 0000SS0000 back to ß as its initial presence in the corpus + + elif language == "fr": # SM + words = re.sub( + "[^’'A-Za-z0-9À-ÖØ-öø-ÿЀ-ӿéæœâçèàûî]+", " ", words + ) + words = words.replace("’", "'") + words = words.replace("é", "é") + words = words.replace("æ", "ae") + words = words.replace("œ", "oe") + words = words.replace("â", "â") + words = words.replace("ç", "ç") + words = words.replace("è", "è") + words = words.replace("à", "à") + words = words.replace("û", "û") + words = words.replace("î", "î") + words = words.upper() + + # Case of apostrophe collés + words = words.replace("L'", "L' ") + words = words.replace("L' ", "L' ") + words = words.replace("S'", "S' ") + words = words.replace("S' ", "S' ") + words = words.replace("D'", "D' ") + words = words.replace("D' ", "D' ") + words = words.replace("J'", "J' ") + words = words.replace("J' ", "J' ") + words = words.replace("N'", "N' ") + words = words.replace("N' ", "N' ") + words = words.replace("C'", "C' ") + words = words.replace("C' ", "C' ") + words = words.replace("QU'", "QU' ") + words = words.replace("QU' ", "QU' ") + words = words.replace("M'", "M' ") + words = words.replace("M' ", "M' ") + + # Case of apostrophe qui encadre quelques mots + words = words.replace(" '", " ") + words = words.replace("A'", "A") + words = words.replace("B'", "B") + words = words.replace("E'", "E") + words = words.replace("F'", "F") + words = words.replace("G'", "G") + words = words.replace("K'", "K") + words = words.replace("Q'", "Q") + words = words.replace("V'", "V") + words = words.replace("W'", "W") + words = words.replace("Z'", "Z") + words = words.replace("O'", "O") + words = words.replace("X'", "X") + words = words.replace("AUJOURD' HUI", "AUJOURD'HUI") + elif language == "ar": + HAMZA = "\u0621" + ALEF_MADDA = "\u0622" + ALEF_HAMZA_ABOVE = "\u0623" + letters = ( + "ابتةثجحخدذرزژشسصضطظعغفقكلمنهويىءآأؤإئ" + + HAMZA + + ALEF_MADDA + + ALEF_HAMZA_ABOVE + ) + words = re.sub("[^" + letters + " ]+", "", words).upper() + elif language == "fa": + HAMZA = "\u0621" + ALEF_MADDA = "\u0622" + ALEF_HAMZA_ABOVE = "\u0623" + letters = ( + "ابپتةثجحخچدذرزژسشصضطظعغفقگکلمنهویىءآأؤإئ" + + HAMZA + + ALEF_MADDA + + ALEF_HAMZA_ABOVE + ) + words = re.sub("[^" + letters + " ]+", "", words).upper() + elif language == "ga-IE": + # Irish lower() is complicated, but upper() is nondeterministic, so use lowercase + def pfxuc(a): + return len(a) >= 2 and a[0] in "tn" and a[1] in "AEIOUÁÉÍÓÚ" + + def galc(w): + return w.lower() if not pfxuc(w) else w[0] + "-" + w[1:].lower() + + words = re.sub("[^-A-Za-z'ÁÉÍÓÚáéíóú]+", " ", words) + words = " ".join(map(galc, words.split(" "))) + elif language == "es": + # Fix the following error in dataset large: + # KeyError: 'The item En noviembre lanzaron Queen Elizabeth , coproducida por Foreign Noi$e . requires replacements which were not supplied.' + words = words.replace("$", "s") + return words + + +def check_commonvoice_folders(data_folder): + """ + Check if the data folder actually contains the Common Voice dataset. + If not, raises an error. + Returns + ------- + None + Raises + ------ + FileNotFoundError + If data folder doesn't contain Common Voice dataset. + """ + files_str = "/clips" + # Checking clips + if not os.path.exists(data_folder + files_str): + err_msg = ( + "the folder %s does not exist (it is expected in " + "the Common Voice dataset)" % (data_folder + files_str) + ) + raise FileNotFoundError(err_msg) + + +def unicode_normalisation(text): + return str(text) + + +def strip_accents(text): + text = ( + unicodedata.normalize("NFD", text) + .encode("ascii", "ignore") + .decode("utf-8") + ) + return str(text) \ No newline at end of file diff --git a/benchmarks/DASB/CommonVoice/ASR/train.py b/benchmarks/DASB/CommonVoice/ASR/train.py new file mode 100644 index 000000000..b59625f4f --- /dev/null +++ b/benchmarks/DASB/CommonVoice/ASR/train.py @@ -0,0 +1,453 @@ +#!/usr/bin/env/python3 +"""Recipe for training an discrete tokens ctc ASR system with librispeech. + +Decoding is performed with greedy decoding at validation time. +At test time, beamsearch is used with an optional external language model. + +Authors + * Pooneh Mousavi 2024 + * Jarod Duret 2024 +""" + +import os +import sys +import time +import torch +import torchaudio +import logging +import speechbrain as sb +from speechbrain.utils.distributed import run_on_main, if_main_process +from speechbrain.tokenizers.SentencePiece import SentencePiece +from hyperpyyaml import load_hyperpyyaml +from pathlib import Path + +base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../")) +sys.path.append(base_dir) + + +logger = logging.getLogger(__name__) + + +# Define training procedure +class ASR(sb.Brain): + def compute_forward(self, batch, stage): + """Forward computations from the waveform batches to the output probabilities.""" + batch = batch.to(self.device) + wavs, wav_lens = batch.sig + in_toks, _ = batch.speech_tokens + + in_embs = self.modules.discrete_embedding_layer( + in_toks + ) # [B, T, N-Q, D] + + # Attention-Pooling + att_w = self.modules.attention_mlp(in_embs) # [B, T, N-Q, 1] + in_embs = torch.matmul(att_w.transpose(2, -1), in_embs).squeeze( + -2 + ) # [B, T, D] + + # forward modules + if type(self.modules.encoder).__name__ == "Linear": + enc_out = self.modules.encoder(in_embs) + + elif type(self.modules.encoder).__name__ == "LSTM": + enc_out, _ = self.modules.encoder(in_embs) + + else: + raise NotImplementedError + + # output layer for ctc log-probabilities + logits = self.modules.ctc_lin(enc_out) + p_ctc = self.hparams.log_softmax(logits) + + p_tokens = None + if stage == sb.Stage.VALID: + p_tokens = sb.decoders.ctc_greedy_decode( + p_ctc, wav_lens, blank_id=self.hparams.blank_index + ) + elif stage == sb.Stage.TEST: + p_tokens = test_searcher(p_ctc, wav_lens) + + return p_ctc, wav_lens, p_tokens + + def compute_objectives(self, predictions, batch, stage): + """Computes the loss (CTC+NLL) given predictions and targets.""" + + p_ctc, wav_lens, predicted_tokens = predictions + ids = batch.id + tokens, tokens_lens = batch.tokens + + # Label Augmentation + if stage == sb.Stage.TRAIN and hasattr(self.hparams, "wav_augment"): + tokens = self.hparams.wav_augment.replicate_labels(tokens) + tokens_lens = self.hparams.wav_augment.replicate_labels(tokens_lens) + + loss = self.hparams.ctc_cost(p_ctc, tokens, wav_lens, tokens_lens) + + if stage == sb.Stage.VALID: + # Decode token terms to words + predicted_words = self.tokenizer( + predicted_tokens, task="decode_from_list" + ) + elif stage == sb.Stage.TEST: + predicted_words = [ + hyp[0].text.split(" ") for hyp in predicted_tokens + ] + + if stage != sb.Stage.TRAIN: + target_words = [wrd.split(" ") for wrd in batch.wrd] + self.wer_metric.append(ids, predicted_words, target_words) + self.cer_metric.append(ids, predicted_words, target_words) + + return loss + + def on_stage_start(self, stage, epoch): + """Gets called at the beginning of each epoch""" + if stage != sb.Stage.TRAIN: + self.cer_metric = self.hparams.cer_computer() + self.wer_metric = self.hparams.wer_computer() + + def on_stage_end(self, stage, stage_loss, epoch): + """Gets called at the end of a epoch.""" + # Compute/store important stats + stage_stats = {"loss": stage_loss} + if stage == sb.Stage.TRAIN: + self.train_stats = stage_stats + else: + stage_stats["CER"] = self.cer_metric.summarize("error_rate") + stage_stats["WER"] = self.wer_metric.summarize("error_rate") + current_epoch = self.hparams.epoch_counter.current + valid_search_interval = self.hparams.valid_search_interval + if ( + current_epoch % valid_search_interval == 0 + or stage == sb.Stage.TEST + ): + stage_stats["WER"] = self.wer_metric.summarize("error_rate") + + # log stats and save checkpoint at end-of-epoch + if stage == sb.Stage.VALID: + if type(self.hparams.scheduler).__name__ == "NewBobScheduler": + lr, new_lr = self.hparams.scheduler(stage_stats["loss"]) + sb.nnet.schedulers.update_learning_rate(self.optimizer, new_lr) + elif type(self.hparams.scheduler).__name__ == "LinearNoamScheduler": + lr = self.hparams.scheduler.current_lr + else: + raise NotImplementedError + + optimizer = self.optimizer.__class__.__name__ + epoch_stats = { + "epoch": epoch, + "lr": lr, + "optimizer": optimizer, + } + self.hparams.train_logger.log_stats( + stats_meta=epoch_stats, + train_stats=self.train_stats, + valid_stats=stage_stats, + ) + self.checkpointer.save_and_keep_only( + meta={"WER": stage_stats["WER"], "epoch": epoch}, + min_keys=["WER"], + num_to_keep=self.hparams.avg_checkpoints, + ) + + elif stage == sb.Stage.TEST: + self.hparams.train_logger.log_stats( + stats_meta={"Epoch loaded": self.hparams.epoch_counter.current}, + test_stats=stage_stats, + ) + if if_main_process(): + with open( + self.hparams.output_wer_folder, "w", encoding="utf-8" + ) as w: + self.wer_metric.write_stats(w) + + def on_fit_batch_end(self, batch, outputs, loss, should_step): + if ( + should_step + and type(self.hparams.scheduler).__name__ == "LinearNoamScheduler" + ): + self.hparams.scheduler(self.optimizer) + + +def dataio_prepare(hparams, tokenizer): + """This function prepares the datasets to be used in the brain class. + It also defines the data processing pipeline through user-defined functions. + """ + #data_folder = hparams["data_folder"] + + train_data = sb.dataio.dataset.DynamicItemDataset.from_csv( + csv_path=hparams["train_csv"], + ) + print(f"Train data size: {len(train_data)}") + + if hparams["sorting"] == "ascending": + # we sort training data to speed up training and get better results. + train_data = train_data.filtered_sorted(sort_key="duration") + # when sorting do not shuffle in dataloader ! otherwise is pointless + hparams["train_dataloader_opts"]["shuffle"] = False + + elif hparams["sorting"] == "descending": + train_data = train_data.filtered_sorted( + sort_key="duration", reverse=True + ) + # when sorting do not shuffle in dataloader ! otherwise is pointless + hparams["train_dataloader_opts"]["shuffle"] = False + + elif hparams["sorting"] == "random": + pass + + else: + raise NotImplementedError( + "sorting must be random, ascending or descending" + ) + + valid_data = sb.dataio.dataset.DynamicItemDataset.from_csv( + csv_path=hparams["valid_csv"], + ) + valid_data = valid_data.filtered_sorted(sort_key="duration") + + test_data = sb.dataio.dataset.DynamicItemDataset.from_csv( + csv_path=hparams["test_csv"], + ) + test_data = test_data.filtered_sorted(sort_key="duration") + + datasets = [train_data, valid_data, test_data] + + # 1. Define tokens pipeline: + tokens_loader = hparams["tokens_loader"] + num_codebooks = hparams["num_codebooks"] + + @sb.utils.data_pipeline.takes("id") + @sb.utils.data_pipeline.provides("speech_tokens") + def tokens_pipeline(id): + tokens = tokens_loader.tokens_by_uttid(id, num_codebooks=num_codebooks) + return tokens + + sb.dataio.dataset.add_dynamic_item(datasets, tokens_pipeline) + + ## 2. Define audio pipeline: + + @sb.utils.data_pipeline.takes("wav") + @sb.utils.data_pipeline.provides("sig") + def audio_pipeline(wav): + sig = sb.dataio.dataio.read_audio(wav) + info = torchaudio.info(wav) + resampled = torchaudio.transforms.Resample( + info.sample_rate, hparams["sample_rate"], + )(sig) + # resampled = resampled.unsqueeze(0) + return resampled + + sb.dataio.dataset.add_dynamic_item(datasets, audio_pipeline) + + # 3. Define text pipeline: + @sb.utils.data_pipeline.takes("wrd") + @sb.utils.data_pipeline.provides( + "wrd", "char_list", "tokens_list", "tokens" + ) + def text_pipeline(wrd): + yield wrd + char_list = list(wrd) + yield char_list + tokens_list = tokenizer.sp.encode_as_ids(wrd) + yield tokens_list + tokens = torch.LongTensor(tokens_list) + yield tokens + + sb.dataio.dataset.add_dynamic_item(datasets, text_pipeline) + + # 4. Set output: + sb.dataio.dataset.set_output_keys( + datasets, ["id", "sig", "wrd", "char_list", "tokens", "speech_tokens"], + ) + + # 5. If Dynamic Batching is used, we instantiate the needed samplers. + train_batch_sampler = None + valid_batch_sampler = None + if hparams["dynamic_batching"]: + from speechbrain.dataio.sampler import DynamicBatchSampler # noqa + + dynamic_hparams_train = hparams["dynamic_batch_sampler_train"] + dynamic_hparams_val = hparams["dynamic_batch_sampler_val"] + + train_batch_sampler = DynamicBatchSampler( + train_data, + length_func=lambda x: x["duration"], + **dynamic_hparams_train, + ) + + valid_batch_sampler = DynamicBatchSampler( + valid_data, + length_func=lambda x: x["duration"], + **dynamic_hparams_val, + ) + + return ( + train_data, + valid_data, + test_data, + train_batch_sampler, + valid_batch_sampler, + ) + + +if __name__ == "__main__": + + # CLI: + hparams_file, run_opts, overrides = sb.parse_arguments(sys.argv[1:]) + with open(hparams_file) as fin: + hparams = load_hyperpyyaml(fin, overrides) + + # If distributed_launch=True then + # create ddp_group with the right communication protocol + sb.utils.distributed.ddp_init_group(run_opts) + + # Create experiment directory + sb.create_experiment_directory( + experiment_directory=hparams["output_folder"], + hyperparams_to_save=hparams_file, + overrides=overrides, + ) + + # Dataset preparation + from common_voice_prepare import prepare_common_voice # noqa + + # multi-gpu (ddp) save data preparation + # Due to DDP, we do the preparation ONLY on the main python process + run_on_main( + prepare_common_voice, + kwargs={ + "data_folder": hparams["data_folder"], + "save_folder": hparams["save_folder"], + "train_tsv_file": hparams["train_tsv_file"], + "dev_tsv_file": hparams["dev_tsv_file"], + "test_tsv_file": hparams["test_tsv_file"], + "accented_letters": hparams["accented_letters"], + "language": hparams["language"], + "skip_prep": hparams["skip_prep"], + }, + ) + + # Defining tokenizer and loading it + tokenizer = SentencePiece( + model_dir=hparams["cached_data_folder"], + vocab_size=hparams["output_neurons"], + annotation_train=hparams["train_csv"], + annotation_read="wrd", + model_type=hparams["token_type"], + character_coverage=hparams["character_coverage"], + bos_id=hparams["bos_index"], + eos_id=hparams["eos_index"], + ) + + # here we create the datasets objects as well as tokenization and encoding + ( + train_data, + valid_data, + test_data, + train_bsampler, + valid_bsampler, + ) = dataio_prepare(hparams, tokenizer) + + # Use pretrained embeddings + if hparams["pretrain_embeddings"]: + tokens_loader = hparams["tokens_loader"] + embs = tokens_loader.load_pretrained_embeddings( + hparams["pretain_embeddings_folder"] + ) + if isinstance(hparams["num_codebooks"], int): + embs = embs[ + : hparams["num_codebooks"] * hparams["vocab_size"], + ] + # For discrete SSL, num_codebooks is a list used to determine which layers to use. + # It is not sequential and can be, for example, [0, 1] or [1, 4]. + elif isinstance(hparams["num_codebooks"], list): + indices = [ + i + for codebook_idx in hparams["num_codebooks"] + for i in range( + codebook_idx * hparams["vocab_size"], + (codebook_idx + 1) * hparams["vocab_size"], + ) + ] + indices = torch.tensor(indices, dtype=torch.long) + embs = embs[indices] + hparams["discrete_embedding_layer"].init_embedding(embs) + + # Log number of parameters/buffers + model_params = sum( + [ + x.numel() + for module in hparams["modules"].values() + for x in module.state_dict().values() + ] + ) + hparams["train_logger"].log_stats( + stats_meta={ + "Model parameters/buffers (M)": f"{model_params / 1e6:.2f}", + }, + ) + + # Trainer initialization + asr_brain = ASR( + modules=hparams["modules"], + opt_class=hparams["model_opt_class"], + hparams=hparams, + run_opts=run_opts, + checkpointer=hparams["checkpointer"], + ) + + # Adding objects to trainer. + asr_brain.tokenizer = tokenizer + vocab_list = [ + tokenizer.sp.id_to_piece(i) for i in range(tokenizer.sp.vocab_size()) + ] + + from speechbrain.decoders.ctc import CTCBeamSearcher + + test_searcher = CTCBeamSearcher( + **hparams["test_beam_search"], vocab_list=vocab_list, + ) + + train_dataloader_opts = hparams["train_dataloader_opts"] + valid_dataloader_opts = hparams["valid_dataloader_opts"] + + if train_bsampler is not None: + train_dataloader_opts = { + "batch_sampler": train_bsampler, + "num_workers": hparams["num_workers"], + } + + if valid_bsampler is not None: + valid_dataloader_opts = {"batch_sampler": valid_bsampler} + + # Measure time + start_time = time.time() # Start the timer + # Training + asr_brain.fit( + asr_brain.hparams.epoch_counter, + train_data, + valid_data, + train_loader_kwargs=hparams["train_dataloader_opts"], + valid_loader_kwargs=hparams["valid_dataloader_opts"], + ) + + end_time = time.time() # End the timer + # Calculate elapsed time + elapsed_time = end_time - start_time + logger.info(f"Model execution time: {elapsed_time:.6f} seconds") + + if hparams["testing"]: + # Testing + if not os.path.exists(hparams["output_wer_folder"]): + os.makedirs(hparams["output_wer_folder"]) + + asr_brain.hparams.output_wer_folder = os.path.join( + hparams["output_wer_folder"], f"wer_test.txt" + ) + asr_brain.evaluate( + test_data, + test_loader_kwargs=hparams["test_dataloader_opts"], + min_key="WER", + ) \ No newline at end of file diff --git a/benchmarks/DASB/CommonVoice/extraction/common_voice_prepare.py b/benchmarks/DASB/CommonVoice/extraction/common_voice_prepare.py new file mode 100644 index 000000000..196d144d7 --- /dev/null +++ b/benchmarks/DASB/CommonVoice/extraction/common_voice_prepare.py @@ -0,0 +1,449 @@ +""" +Data preparation. +Download: https://commonvoice.mozilla.org/en/datasets +Author +------ +Titouan Parcollet +Luca Della Libera 2022 +Pooneh Mousavi 2022 +Salima Mdhaffar 2023 +""" + +from dataclasses import dataclass +import os +import csv +import re +import logging +import unicodedata +import functools + +from speechbrain.utils.parallel import parallel_map +from speechbrain.dataio.dataio import read_audio_info + +logger = logging.getLogger(__name__) + + +def prepare_common_voice( + data_folder, + save_folder, + train_tsv_file=None, + dev_tsv_file=None, + test_tsv_file=None, + accented_letters=False, + language="en", + skip_prep=False, +): + """ + Prepares the csv files for the Mozilla Common Voice dataset. + Download: https://commonvoice.mozilla.org/en + + Arguments + --------- + data_folder : str + Path to the folder where the original Common Voice dataset is stored. + This path should include the lang: /datasets/CommonVoice// + save_folder : str + The directory where to store the csv files. + train_tsv_file : str, optional + Path to the Train Common Voice .tsv file (cs) + dev_tsv_file : str, optional + Path to the Dev Common Voice .tsv file (cs) + test_tsv_file : str, optional + Path to the Test Common Voice .tsv file (cs) + accented_letters : bool, optional + Defines if accented letters will be kept as individual letters or + transformed to the closest non-accented letters. + language: str + Specify the language for text normalization. + skip_prep: bool + If True, skip data preparation. + Example + ------- + >>> from recipes.CommonVoice.common_voice_prepare import prepare_common_voice + >>> data_folder = '/datasets/CommonVoice/en' + >>> save_folder = 'exp/CommonVoice_exp' + >>> train_tsv_file = '/datasets/CommonVoice/en/train.tsv' + >>> dev_tsv_file = '/datasets/CommonVoice/en/dev.tsv' + >>> test_tsv_file = '/datasets/CommonVoice/en/test.tsv' + >>> accented_letters = False + >>> duration_threshold = 10 + >>> prepare_common_voice( \ + data_folder, \ + save_folder, \ + train_tsv_file, \ + dev_tsv_file, \ + test_tsv_file, \ + accented_letters, \ + language="en" \ + ) + """ + + if skip_prep: + return + + # If not specified point toward standard location w.r.t CommonVoice tree + if train_tsv_file is None: + train_tsv_file = data_folder + "/train.tsv" + else: + train_tsv_file = train_tsv_file + + if dev_tsv_file is None: + dev_tsv_file = data_folder + "/dev.tsv" + else: + dev_tsv_file = dev_tsv_file + + if test_tsv_file is None: + test_tsv_file = data_folder + "/test.tsv" + else: + test_tsv_file = test_tsv_file + + # Setting the save folder + if not os.path.exists(save_folder): + os.makedirs(save_folder) + + # Setting ouput files + save_csv_train = save_folder + "/train.csv" + save_csv_dev = save_folder + "/dev.csv" + save_csv_test = save_folder + "/test.csv" + + # If csv already exists, we skip the data preparation + if skip(save_csv_train, save_csv_dev, save_csv_test): + + msg = "%s already exists, skipping data preparation!" % (save_csv_train) + logger.info(msg) + + msg = "%s already exists, skipping data preparation!" % (save_csv_dev) + logger.info(msg) + + msg = "%s already exists, skipping data preparation!" % (save_csv_test) + logger.info(msg) + + return + + # Additional checks to make sure the data folder contains Common Voice + check_commonvoice_folders(data_folder) + # Creating csv files for {train, dev, test} data + file_pairs = zip( + [train_tsv_file, dev_tsv_file, test_tsv_file], + [save_csv_train, save_csv_dev, save_csv_test], + ) + for tsv_file, save_csv in file_pairs: + create_csv( + tsv_file, save_csv, data_folder, accented_letters, language, + ) + + +def skip(save_csv_train, save_csv_dev, save_csv_test): + """ + Detects if the Common Voice data preparation has been already done. + If the preparation has been done, we can skip it. + Returns + ------- + bool + if True, the preparation phase can be skipped. + if False, it must be done. + """ + + # Checking folders and save options + skip = False + + if ( + os.path.isfile(save_csv_train) + and os.path.isfile(save_csv_dev) + and os.path.isfile(save_csv_test) + ): + skip = True + + return skip + + +@dataclass +class CVRow: + snt_id: str + duration: float + mp3_path: str + spk_id: str + words: str + + +def process_line(line, data_folder, language, accented_letters): + # Path is at indice 1 in Common Voice tsv files. And .mp3 files + # are located in datasets/lang/clips/ + mp3_path = data_folder + "/clips/" + line.split("\t")[1] + + file_name = mp3_path.split(".")[-2].split("/")[-1] + spk_id = line.split("\t")[0] + snt_id = file_name + + # Reading the signal (to retrieve duration in seconds) + if os.path.isfile(mp3_path): + info = read_audio_info(mp3_path) + else: + msg = "\tError loading: %s" % (str(len(file_name))) + logger.info(msg) + return None + + duration = info.num_frames / info.sample_rate + + # Getting transcript + words = line.split("\t")[3] + + # Unicode Normalization + words = unicode_normalisation(words) + + # !! Language specific cleaning !! + words = language_specific_preprocess(language, words) + + # Remove accents if specified + if not accented_letters: + words = strip_accents(words) + words = words.replace("'", " ") + words = words.replace("’", " ") + + # Remove multiple spaces + words = re.sub(" +", " ", words) + + # Remove spaces at the beginning and the end of the sentence + words = words.lstrip().rstrip() + + # Getting chars + chars = words.replace(" ", "_") + chars = " ".join([char for char in chars][:]) + + # Remove too short sentences (or empty): + if language in ["ja", "zh-CN"]: + if len(chars) < 3: + return None + else: + if len(words.split(" ")) < 3: + return None + + # Composition of the csv_line + return CVRow(snt_id, duration, mp3_path, spk_id, words) + + +def create_csv( + orig_tsv_file, csv_file, data_folder, accented_letters=False, language="en" +): + """ + Creates the csv file given a list of wav files. + Arguments + --------- + orig_tsv_file : str + Path to the Common Voice tsv file (standard file). + data_folder : str + Path of the CommonVoice dataset. + accented_letters : bool, optional + Defines if accented letters will be kept as individual letters or + transformed to the closest non-accented letters. + Returns + ------- + None + """ + + # Check if the given files exists + if not os.path.isfile(orig_tsv_file): + msg = "\t%s doesn't exist, verify your dataset!" % (orig_tsv_file) + logger.info(msg) + raise FileNotFoundError(msg) + + # We load and skip the header + loaded_csv = open(orig_tsv_file, "r").readlines()[1:] + nb_samples = len(loaded_csv) + + msg = "Preparing CSV files for %s samples ..." % (str(nb_samples)) + logger.info(msg) + + # Adding some Prints + msg = "Creating csv lists in %s ..." % (csv_file) + logger.info(msg) + + # Process and write lines + total_duration = 0.0 + + line_processor = functools.partial( + process_line, + data_folder=data_folder, + language=language, + accented_letters=accented_letters, + ) + + # Stream into a .tmp file, and rename it to the real path at the end. + csv_file_tmp = csv_file + ".tmp" + + with open(csv_file_tmp, mode="w", encoding="utf-8") as csv_f: + csv_writer = csv.writer( + csv_f, delimiter=",", quotechar='"', quoting=csv.QUOTE_MINIMAL + ) + + csv_writer.writerow(["ID", "duration", "wav", "spk_id", "wrd"]) + + for row in parallel_map(line_processor, loaded_csv): + if row is None: + continue + + total_duration += row.duration + csv_writer.writerow( + [ + row.snt_id, + str(row.duration), + row.mp3_path, + row.spk_id, + row.words, + ] + ) + + os.replace(csv_file_tmp, csv_file) + + # Final prints + msg = "%s successfully created!" % (csv_file) + logger.info(msg) + msg = "Number of samples: %s " % (str(len(loaded_csv))) + logger.info(msg) + msg = "Total duration: %s Hours" % (str(round(total_duration / 3600, 2))) + logger.info(msg) + + +def language_specific_preprocess(language, words): + # !! Language specific cleaning !! + # Important: feel free to specify the text normalization + # corresponding to your alphabet. + + if language in ["en", "fr", "it", "rw"]: + words = re.sub( + "[^’'A-Za-z0-9À-ÖØ-öø-ÿЀ-ӿéæœâçèàûî]+", " ", words + ).upper() + + if language == "de": + # this replacement helps preserve the case of ß + # (and helps retain solitary occurrences of SS) + # since python's upper() converts ß to SS. + words = words.replace("ß", "0000ß0000") + words = re.sub("[^’'A-Za-z0-9öÖäÄüÜß]+", " ", words).upper() + words = words.replace("'", " ") + words = words.replace("’", " ") + words = words.replace( + "0000SS0000", "ß" + ) # replace 0000SS0000 back to ß as its initial presence in the corpus + + elif language == "fr": # SM + words = re.sub( + "[^’'A-Za-z0-9À-ÖØ-öø-ÿЀ-ӿéæœâçèàûî]+", " ", words + ) + words = words.replace("’", "'") + words = words.replace("é", "é") + words = words.replace("æ", "ae") + words = words.replace("œ", "oe") + words = words.replace("â", "â") + words = words.replace("ç", "ç") + words = words.replace("è", "è") + words = words.replace("à", "à") + words = words.replace("û", "û") + words = words.replace("î", "î") + words = words.upper() + + # Case of apostrophe collés + words = words.replace("L'", "L' ") + words = words.replace("L' ", "L' ") + words = words.replace("S'", "S' ") + words = words.replace("S' ", "S' ") + words = words.replace("D'", "D' ") + words = words.replace("D' ", "D' ") + words = words.replace("J'", "J' ") + words = words.replace("J' ", "J' ") + words = words.replace("N'", "N' ") + words = words.replace("N' ", "N' ") + words = words.replace("C'", "C' ") + words = words.replace("C' ", "C' ") + words = words.replace("QU'", "QU' ") + words = words.replace("QU' ", "QU' ") + words = words.replace("M'", "M' ") + words = words.replace("M' ", "M' ") + + # Case of apostrophe qui encadre quelques mots + words = words.replace(" '", " ") + words = words.replace("A'", "A") + words = words.replace("B'", "B") + words = words.replace("E'", "E") + words = words.replace("F'", "F") + words = words.replace("G'", "G") + words = words.replace("K'", "K") + words = words.replace("Q'", "Q") + words = words.replace("V'", "V") + words = words.replace("W'", "W") + words = words.replace("Z'", "Z") + words = words.replace("O'", "O") + words = words.replace("X'", "X") + words = words.replace("AUJOURD' HUI", "AUJOURD'HUI") + elif language == "ar": + HAMZA = "\u0621" + ALEF_MADDA = "\u0622" + ALEF_HAMZA_ABOVE = "\u0623" + letters = ( + "ابتةثجحخدذرزژشسصضطظعغفقكلمنهويىءآأؤإئ" + + HAMZA + + ALEF_MADDA + + ALEF_HAMZA_ABOVE + ) + words = re.sub("[^" + letters + " ]+", "", words).upper() + elif language == "fa": + HAMZA = "\u0621" + ALEF_MADDA = "\u0622" + ALEF_HAMZA_ABOVE = "\u0623" + letters = ( + "ابپتةثجحخچدذرزژسشصضطظعغفقگکلمنهویىءآأؤإئ" + + HAMZA + + ALEF_MADDA + + ALEF_HAMZA_ABOVE + ) + words = re.sub("[^" + letters + " ]+", "", words).upper() + elif language == "ga-IE": + # Irish lower() is complicated, but upper() is nondeterministic, so use lowercase + def pfxuc(a): + return len(a) >= 2 and a[0] in "tn" and a[1] in "AEIOUÁÉÍÓÚ" + + def galc(w): + return w.lower() if not pfxuc(w) else w[0] + "-" + w[1:].lower() + + words = re.sub("[^-A-Za-z'ÁÉÍÓÚáéíóú]+", " ", words) + words = " ".join(map(galc, words.split(" "))) + elif language == "es": + # Fix the following error in dataset large: + # KeyError: 'The item En noviembre lanzaron Queen Elizabeth , coproducida por Foreign Noi$e . requires replacements which were not supplied.' + words = words.replace("$", "s") + return words + + +def check_commonvoice_folders(data_folder): + """ + Check if the data folder actually contains the Common Voice dataset. + If not, raises an error. + Returns + ------- + None + Raises + ------ + FileNotFoundError + If data folder doesn't contain Common Voice dataset. + """ + files_str = "/clips" + # Checking clips + if not os.path.exists(data_folder + files_str): + err_msg = ( + "the folder %s does not exist (it is expected in " + "the Common Voice dataset)" % (data_folder + files_str) + ) + raise FileNotFoundError(err_msg) + + +def unicode_normalisation(text): + return str(text) + + +def strip_accents(text): + text = ( + unicodedata.normalize("NFD", text) + .encode("ascii", "ignore") + .decode("utf-8") + ) + return str(text) diff --git a/benchmarks/DASB/CommonVoice/extraction/extract.py b/benchmarks/DASB/CommonVoice/extraction/extract.py new file mode 100644 index 000000000..de87951e4 --- /dev/null +++ b/benchmarks/DASB/CommonVoice/extraction/extract.py @@ -0,0 +1,90 @@ +#!/usr/bin/env/python3 +"""Recipe for extracting a discrete tokens with librispeech. + +Authors + * Jarod Duret 2024 +""" + +import os +import sys +import logging +import pathlib as pl +import speechbrain as sb +from speechbrain.dataio.dataset import DynamicItemDataset +from speechbrain.utils.distributed import run_on_main +from hyperpyyaml import load_hyperpyyaml + +base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../")) +sys.path.append(base_dir) +#sys.path.insert(0, '/data/anakuzne/benchmarks/speechbrain/speechbrain') +print(base_dir) + +logger = logging.getLogger(__name__) + + +if __name__ == "__main__": + # CLI: + hparams_file, run_opts, overrides = sb.parse_arguments(sys.argv[1:]) + + with open(hparams_file) as fin: + hparams = load_hyperpyyaml(fin, overrides) + + # Create experiment directory + sb.create_experiment_directory( + experiment_directory=hparams["output_folder"], + hyperparams_to_save=hparams_file, + overrides=overrides, + ) + + # Dataset prep (parsing CommonVoice dataset) + from common_voice_prepare import prepare_common_voice + + # multi-gpu (ddp) save data preparation + run_on_main( + prepare_common_voice, + kwargs={ + "data_folder": hparams["data_folder"], + "save_folder": hparams["output_folder"], + "train_tsv_file": hparams["train_tsv"], + "dev_tsv_file": hparams["dev_tsv"], + "test_tsv_file": hparams["test_tsv"], + "accented_letters": hparams["accented_letters"], + "language": hparams["language"], + "skip_prep": hparams["skip_prep"], + }, + ) + + tokens_extractor = hparams["tokens_extractor"] + data_folder = hparams["data_folder"] + datasets = [] + for split in ["train", "dev", "test"]: + csv_path = hparams["output_folder"] +f"/{split}.csv" + name = pl.Path(csv_path).stem + dataset = sb.dataio.dataset.DynamicItemDataset.from_csv( + csv_path=csv_path, + ) + datasets.append(dataset) + + merged_data = { + key: value + for dataset in datasets + for key, value in dataset.data.items() + } + merged_dataset = DynamicItemDataset(merged_data) + + save_folder = pl.Path(hparams["save_folder"]) + logger.info("Extracting dataset tokens ...") + tokens_extractor.extract_tokens( + merged_dataset, + hparams["num_codebooks"], + (save_folder / hparams["language"]).as_posix(), + ) + + if hparams["save_embedding"]: + save_folder = pl.Path(hparams["save_folder"]) + logger.info(f"Saving embeddings ...") + tokens_extractor.save_pretrained_embeddings( + (save_folder / "embeddings").as_posix(), + vocab_size=hparams["vocab_size"], + num_codebooks=hparams["num_codebooks"], + ) diff --git a/benchmarks/DASB/CommonVoice/extraction/hparams/dac.yaml b/benchmarks/DASB/CommonVoice/extraction/hparams/dac.yaml new file mode 100644 index 000000000..eb8b8eeba --- /dev/null +++ b/benchmarks/DASB/CommonVoice/extraction/hparams/dac.yaml @@ -0,0 +1,68 @@ +# ############################################################################ +# Auido Tokenizer: DAC +# Extraction: Librispeech 960h +# Authors: Jarod Duret 2024 +# ############################################################################ +# Seed needs to be set at top of yaml, before objects with parameters are made + +seed: 1986 +__set_seed: !apply:torch.manual_seed [!ref ] +output_folder: !ref results/dac +save_folder: !ref /save +train_log: !ref /extraction_log.txt + +# Data files +data_folder: /data/anakuzne/cv/cv-corpus-17.0-2024-03-15/cy +train_tsv: !ref /train.tsv +dev_tsv: !ref /dev.tsv +test_tsv: !ref /test.tsv +language: cy +accented_letters: True +skip_prep: False +convert_to_wav: False + +# We remove utterance slonger than 10s in the train/dev/test sets as +# longer sentences certainly correspond to "open microphones". +avoid_if_longer_than: 10.0 + + +batch_size: 8 +num_workers: 8 +src_key: wav +id_key: id + +# Dataloader options +dataloader_opts: + batch_size: !ref + shuffle: True + num_workers: !ref + +####################### Model parameters ########################### +# Tokenizer parameters +# DAC parameters +# model_type: [16khz, 24khz, 44khz, 44khz] +# vocab_size: [1024, 1024, 1024, 1024] +# model_bitrate: [8kbps, 8kbps, 8kbps, 16kbps] +# max_num_codebooks: [12, 32, 9, 18] +# embedding_dim: [1024, 1024, 1024, 128] +model_type: 24khz +vocab_size: 1024 +model_bitrate: 8kbps +num_codebooks: 32 +sample_rate: 24000 +# Feature parameters +encoder_dim: 1024 +save_embedding: False + +tokenizer: !new:utils.tokenizer_interface.DACTokenizer + model_type: !ref + model_bitrate: !ref + load_pretrained: True + tag: latest + +tokens_extractor: !new:utils.tokens.TokensExtractor + tokenizer: !ref + sample_rate: !ref + src_key: !ref + id_key: !ref + dataloader_opts: !ref diff --git a/benchmarks/DASB/CommonVoice/extraction/hparams/discrete_ssl.yaml b/benchmarks/DASB/CommonVoice/extraction/hparams/discrete_ssl.yaml new file mode 100644 index 000000000..7d4938625 --- /dev/null +++ b/benchmarks/DASB/CommonVoice/extraction/hparams/discrete_ssl.yaml @@ -0,0 +1,102 @@ +# ############################################################################ +# Auido Tokenizer: WavLM +# Extraction: Librispeech 960h +# Authors: Jarod Duret 2024 +# ############################################################################ +# Seed needs to be set at top of yaml, before objects with parameters are made + +seed: 1986 +__set_seed: !apply:torch.manual_seed [!ref ] +output_folder: !ref results/wavlm +save_folder: !ref /save +train_log: !ref /extraction_log.txt + +# Data files +data_folder: !PLACEHOLDER # e.g., /path/to/LibriSpeech +train_splits: ["train-clean-100"] #, "train-clean-360", "train-other-500" +dev_splits: ["dev-clean"] +test_splits: ["dev-clean", "test-clean", "test-other"] +skip_prep: False +train_csv: !ref /train.csv +valid_csv: !ref /dev-clean.csv +test_csv: + - !ref /test-clean.csv + - !ref /test-other.csv + +batch_size: 8 +num_workers: 8 +src_key: wav +id_key: id + +# Dataloader options +dataloader_opts: + batch_size: !ref + shuffle: True + num_workers: !ref + +### Configuration for discrete SSL model +# | SSL Model | HF Encoder | K-Means Dataset | K-Means Size | SSL Layers | Vocoder Model | +# |------------|----------------------------------------|-----------------|--------------|----------------------|------------------------------------------| +# | WavLM | microsoft/wavlm-large | LibriSpeech960 | 1000 | 1, 3, 7, 12, 18, 23 | speechbrain/hifigan-wavlm-k1000-LibriTTS | +# | HuBERT | facebook/hubert-large-ll60k | LibriSpeech960 | 1000 | 1, 3, 7, 12, 18, 23 | WIP | +# | Wav2Vec2 | facebook/wav2vec2-large-960h-lv60-self | LibriSpeech960 | 1000 | 1, 3, 7, 12, 18, 23 | WIP | + +# ssl_model_type: hubert, wavlm, wav2vec2 +# ssl_hub: facebook/hubert-large-ll60k, microsoft/wavlm-large, facebook/wav2vec2-large +ssl_model_type: WavLM +ssl_hub: microsoft/wavlm-large +ssl_folder: !ref /ssl_checkpoint +kmeans_cache_dir: !ref /kmeans_checkpoint +kmeans_dataset: LibriSpeech +vocoder_repo_id: speechbrain/hifigan-wavlm-k1000-LibriTTS +freeze_ssl: True +freeze_feature_extractor: True +vocab_size: 1000 +save_embedding: False + +### Config for Tokenizer +# Layer number should be among the supported layers for discrete SSL models(kmenas model should be available for that layer) +num_codebooks: [1, 3, 7, 12, 18, 23] +deduplicate: [False, False, False, False, False, False] +bpe_tokenizer_path: [null, null, null, null, null, null] +sample_rate: 16000 +encoder_dim: 1024 + +ssl_model: !apply:speechbrain.utils.hparams.choice + value: !ref + choices: + WavLM: !new:speechbrain.lobes.models.huggingface_transformers.wavlm.WavLM + source: !ref + output_norm: False + freeze: !ref + freeze_feature_extractor: !ref + output_all_hiddens: True + save_path: !ref + HuBERT: !new:speechbrain.lobes.models.huggingface_transformers.hubert.HuBERT + source: !ref + output_norm: False + freeze: !ref + freeze_feature_extractor: !ref + output_all_hiddens: True + save_path: !ref + Wav2Vec2: !new:speechbrain.lobes.models.huggingface_transformers.wav2vec2.Wav2Vec2 + source: !ref + output_norm: False + freeze: !ref + freeze_feature_extractor: !ref + output_all_hiddens: True + save_path: !ref + +tokenizer: !new:utils.tokenizer_interface.DiscreteSSLTokenizer + save_path: !ref + ssl_model: !ref + vocoder_repo_id: !ref + kmeans_dataset: !ref + num_clusters: !ref + +tokens_extractor: !new:utils.tokens.TokensExtractor + tokenizer: !ref + sample_rate: !ref + src_key: !ref + id_key: !ref + dataloader_opts: !ref diff --git a/benchmarks/DASB/CommonVoice/extraction/hparams/encodec.yaml b/benchmarks/DASB/CommonVoice/extraction/hparams/encodec.yaml new file mode 100644 index 000000000..ee0a7e910 --- /dev/null +++ b/benchmarks/DASB/CommonVoice/extraction/hparams/encodec.yaml @@ -0,0 +1,63 @@ +# ############################################################################ +# Auido Tokenizer: Encodec +# Extraction: Librispeech 960h +# Authors: Jarod Duret 2024 +# ############################################################################ +# Seed needs to be set at top of yaml, before objects with parameters are made + +seed: 1986 +__set_seed: !apply:torch.manual_seed [!ref ] +output_folder: !ref results/encodec +save_folder: !ref /save +train_log: !ref /extraction_log.txt + +# Data files +data_folder: !PLACEHOLDER # e.g., /path/to/LibriSpeech +train_splits: ["train-clean-100"] #, "train-clean-360", "train-other-500" +dev_splits: ["dev-clean"] +test_splits: ["dev-clean", "test-clean", "test-other"] +skip_prep: False +train_csv: !ref /train.csv +valid_csv: !ref /dev-clean.csv +test_csv: + - !ref /test-clean.csv + - !ref /test-other.csv + +batch_size: 8 +num_workers: 8 +src_key: wav +id_key: id + +# Dataloader options +dataloader_opts: + batch_size: !ref + shuffle: True + num_workers: !ref + +# EnCodec parameters +# sample_rate: [24000, 24000, 24000, 24000] +# vocab_size: [1024, 1024, 1024, 1024] +# bandwidth: [1.5, 3.0, 6.0, 12.0, 24.0] +# num_codebooks: [2, 4, 8, 16, 32] +bandwidth: 24.0 +num_codebooks: 32 +vocab_size: 1024 +sample_rate: 24000 +save_embedding: False + +# EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) +tokenizer: !new:utils.tokenizer_interface.EncodecTokenizer + source: facebook/encodec_24khz # Only the 24kHz version supports mono audio + save_path: !ref + sample_rate: !ref + bandwidth: !ref + flat_embeddings: False + freeze: True + renorm_embeddings: False + +tokens_extractor: !new:utils.tokens.TokensExtractor + tokenizer: !ref + sample_rate: !ref + src_key: !ref + id_key: !ref + dataloader_opts: !ref diff --git a/benchmarks/DASB/CommonVoice/extraction/hparams/speech_tokenizer.yaml b/benchmarks/DASB/CommonVoice/extraction/hparams/speech_tokenizer.yaml new file mode 100644 index 000000000..5d897a782 --- /dev/null +++ b/benchmarks/DASB/CommonVoice/extraction/hparams/speech_tokenizer.yaml @@ -0,0 +1,54 @@ +# ############################################################################ +# Auido Tokenizer: Speech Tokenizer +# Extraction: Librispeech 960h +# Authors: Jarod Duret 2024 +# ############################################################################ +# Seed needs to be set at top of yaml, before objects with parameters are made + +seed: 1986 +__set_seed: !apply:torch.manual_seed [!ref ] +output_folder: !ref results/speech_tokenizer +save_folder: !ref /save +train_log: !ref /extraction_log.txt + +# Data files +data_folder: !PLACEHOLDER # e.g., /path/to/LibriSpeech +train_splits: ["train-clean-100"] #, "train-clean-360", "train-other-500" +dev_splits: ["dev-clean"] +test_splits: ["dev-clean", "test-clean", "test-other"] +skip_prep: False +train_csv: !ref /train.csv +valid_csv: !ref /dev-clean.csv +test_csv: + - !ref /test-clean.csv + - !ref /test-other.csv + +batch_size: 8 +num_workers: 8 +src_key: wav +id_key: id + +# Dataloader options +dataloader_opts: + batch_size: !ref + shuffle: True + num_workers: !ref + +vocab_size: 1024 +num_codebooks: 8 +sample_rate: 16000 +encoder_dim: 1024 +freeze_embedding: False +save_embedding: False + +# EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) +tokenizer: !new:utils.tokenizer_interface.SpeechTokenizer + source: fnlp/SpeechTokenizer # Only the 24kHz version supports mono audio + save_path: !ref + +tokens_extractor: !new:utils.tokens.TokensExtractor + tokenizer: !ref + sample_rate: !ref + src_key: !ref + id_key: !ref + dataloader_opts: !ref diff --git a/benchmarks/DASB/run_experiments.sh b/benchmarks/DASB/run_experiments.sh old mode 100644 new mode 100755 diff --git a/benchmarks/DASB/run_hparam_optimization.sh b/benchmarks/DASB/run_hparam_optimization.sh old mode 100644 new mode 100755 From bd9e953a90e08cd81c5bad65154fe96bd6eceb82 Mon Sep 17 00:00:00 2001 From: Anastasia Kuznetsova Date: Wed, 15 Jan 2025 12:39:39 -0500 Subject: [PATCH 51/61] Add linear model implementation --- .../CommonVoice/ASR/LSTM/hparams/train.yaml | 10 +- .../CommonVoice/ASR/linear/hparams/train.yaml | 223 + benchmarks/DASB/CommonVoice/ASR/train.py | 29 +- .../extraction/hparams/discrete_ssl.yaml | 28 +- .../extraction/hparams/encodec.yaml | 20 +- .../extraction/hparams/speech_tokenizer.yaml | 22 +- benchmarks/DASB/cache/31_char.model | Bin 0 -> 238564 bytes benchmarks/DASB/cache/31_char.vocab | 87 + benchmarks/DASB/cache/train.txt | 7953 +++++++++++++++++ 9 files changed, 8327 insertions(+), 45 deletions(-) create mode 100644 benchmarks/DASB/CommonVoice/ASR/linear/hparams/train.yaml create mode 100644 benchmarks/DASB/cache/31_char.model create mode 100644 benchmarks/DASB/cache/31_char.vocab create mode 100644 benchmarks/DASB/cache/train.txt diff --git a/benchmarks/DASB/CommonVoice/ASR/LSTM/hparams/train.yaml b/benchmarks/DASB/CommonVoice/ASR/LSTM/hparams/train.yaml index 26e73236a..d6644b574 100644 --- a/benchmarks/DASB/CommonVoice/ASR/LSTM/hparams/train.yaml +++ b/benchmarks/DASB/CommonVoice/ASR/LSTM/hparams/train.yaml @@ -45,6 +45,7 @@ batch_size: !ref 2 ** test_batch_size: 1 grad_accumulation_factor: 2 max_grad_norm: 5.0 + sorting: descending #random num_workers: 8 loss_reduction: batchmean @@ -53,7 +54,7 @@ valid_search_interval: 1 avg_checkpoints: 10 # Number of checkpoints to average for evaluation cache_size: 1.e+10 -lr_model: 0.0001 # @orion_step1: --lr_model~"loguniform(0.00001,0.5)" +lr_model: 0.00001 # @orion_step1: --lr_model~"loguniform(0.00001,0.5)" weight_decay: 0.0005 @@ -189,6 +190,11 @@ scheduler: !new:speechbrain.nnet.schedulers.NewBobScheduler annealing_factor: 0.8 patient: 0 +#scheduler: !new:speechbrain.nnet.schedulers.LinearNoamScheduler +# lr_initial: !ref +# n_warmup_steps: 3000 +# n_keep_steps: 10 + model_opt_class: !name:torch.optim.AdamW lr: !ref betas: (0.9, 0.98) @@ -215,4 +221,4 @@ error_rate_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats cer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats split_tokens: True -wer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats \ No newline at end of file +wer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats diff --git a/benchmarks/DASB/CommonVoice/ASR/linear/hparams/train.yaml b/benchmarks/DASB/CommonVoice/ASR/linear/hparams/train.yaml new file mode 100644 index 000000000..079d10f40 --- /dev/null +++ b/benchmarks/DASB/CommonVoice/ASR/linear/hparams/train.yaml @@ -0,0 +1,223 @@ +# ############################################################################ +# Model: E2E ASR with CTC +# Encoder: Linear Encoder +# Decoder: CTC beam searcher and greedy searcher +# Tokens: character +# Training: Librispeech 960h +# Authors: +# - Pooneh Mousavi 2024 +# - Jarod Duret 2024 +# ############################################################################ +# Seed needs to be set at top of yaml, before objects with parameters are made + +seed: 1986 +__set_seed: !apply:torch.manual_seed [!ref ] +run_name: !PLACEHOLDER +output_folder: !ref results// +output_wer_folder: !ref /wer.txt +save_folder: !ref /save +train_log: !ref /train_log.txt +testing: True # If set to True, the test evlaution is done, otherwise skipped. + +# Data files +data_folder: !PLACEHOLDER # e.g, /local/cv-corpus-11.0-2022-09-21/ +cached_data_folder: !PLACEHOLDER # e.g., path/to/cache +train_tsv_file: !ref /train.tsv # Standard CommonVoice .tsv files +dev_tsv_file: !ref /dev.tsv # Standard CommonVoice .tsv files +test_tsv_file: !ref /test.tsv # Standard CommonVoice .tsv files +accented_letters: True +train_csv: !ref /train.csv +valid_csv: !ref /dev.csv +test_csv: !ref /test.csv +skip_prep: False # Skip data preparation +language: cy # use 'cy' for Welsh and 'eu' for Basque + +tokens_folder: !PLACEHOLDER # Path to the folder where extracted tokens are saved. +pretrain_embeddings_folder: none # Optional: If pretrain_embeddings is True, this should be set to the path where the pretrained embeddings are saved. + +avoid_if_longer_than: 10.0 + +####################### Training Parameters #################################### +number_of_epochs: 20 +batch_size_exponent: 4 # @orion_step1: --batch_size_exponent~"uniform(2, 4,discrete=True)" +batch_size: !ref 2 ** +test_batch_size: 1 +grad_accumulation_factor: 2 +max_grad_norm: 5.0 + +sorting: descending #random +num_workers: 8 +loss_reduction: batchmean +precision: fp32 # bf16, fp16 or fp32loss_reduction: batchmean +valid_search_interval: 1 +avg_checkpoints: 10 # Number of checkpoints to average for evaluation +cache_size: 1.e+10 + +lr_model: 0.00001 # @orion_step1: --lr_model~"loguniform(0.00001,0.5)" +weight_decay: 0.0005 + + +# Training parameters +dynamic_batching: True +max_batch_length_train: 850 +max_batch_len_val: 100 +num_bucket: 200 +shuffle: False # if true re-creates batches at each epoch shuffling examples. +max_batch_ex: 128 +batch_ordering: random + +dynamic_batch_sampler_train: + max_batch_length: !ref + num_buckets: !ref + shuffle: !ref + batch_ordering: !ref + max_batch_ex: !ref + +dynamic_batch_sampler_val: + max_batch_length: !ref + num_buckets: !ref + shuffle: !ref + batch_ordering: !ref + max_batch_ex: !ref + +# Dataloader options +train_dataloader_opts: + batch_size: !ref + shuffle: True + num_workers: !ref + +valid_dataloader_opts: + batch_size: !ref + +test_dataloader_opts: + batch_size: !ref + + +####################### Model parameters ########################### +# Tokenizer parameters +# These parameters should be set according to the tokenizer used to extract tokens saved in . +vocab_size: 1024 +num_codebooks: 24 +sample_rate: 24000 + +# Feature parameters +encoder_dim: 1024 +# If set to True, encoder_dim should match the dimension of the tokenizer. For Encodec, it is 128. +pretrain_embeddings: False +freeze_embedding: False + +# Linear +activation: !name:torch.nn.Sigmoid +dnn_layers: 2 # @orion_step1: --dnn_layers~"uniform(1, 4,discrete=True)" +dnn_neurons: 2048 +dropout: 0.2 +output_neurons: 31 + +# BPE parameters +# BPE parameters +token_type: char # ["unigram", "bpe", "char"] +character_coverage: 1.0 +blank_index: 0 +bos_index: 1 +eos_index: 2 + +# Decoding parameters +beam_size: 100 +beam_prune_logp: -12.0 +token_prune_min_logp: -1.2 +prune_history: False + +############################## models ################################ +tokens_loader: !new:utils.tokens.TokensLoader + data_path: !ref + +discrete_embedding_layer: !new:model.custom_model.Discrete_EmbeddingLayer + num_codebooks: !ref + vocab_size: !ref + emb_dim: !ref + # hidden_dim: !ref + freeze: !ref + init: !ref + +attention_mlp: !new:model.custom_model.AttentionMLP + input_dim: !ref + hidden_dim: !ref + +encoder: !new:speechbrain.lobes.models.VanillaNN.VanillaNN + input_shape: [null, null, !ref ] + activation: !ref + dnn_blocks: !ref + dnn_neurons: !ref + + +ctc_lin: !new:speechbrain.nnet.linear.Linear + input_size: 2048 + n_neurons: !ref + +modules: + encoder: !ref + ctc_lin: !ref + attention_mlp: !ref + # tokenizer: !ref + discrete_embedding_layer: !ref + + +model: !new:torch.nn.ModuleList + - [!ref , !ref , !ref , !ref ] + +####################### Decoding & optimiser ########################### +# Decoding parameters +test_beam_search: + blank_index: !ref + beam_size: !ref + beam_prune_logp: !ref + token_prune_min_logp: !ref + prune_history: !ref + alpha: 0.8 + beta: 1.2 + +ctc_cost: !name:speechbrain.nnet.losses.ctc_loss + blank_index: !ref + + +log_softmax: !new:speechbrain.nnet.activations.Softmax + apply_log: True + +scheduler: !new:speechbrain.nnet.schedulers.NewBobScheduler + initial_value: !ref + improvement_threshold: 0.0025 + annealing_factor: 0.8 + patient: 0 + +#scheduler: !new:speechbrain.nnet.schedulers.LinearNoamScheduler +# lr_initial: !ref +# n_warmup_steps: 3000 +# n_keep_steps: 10 + +model_opt_class: !name:torch.optim.AdamW + lr: !ref + betas: (0.9, 0.98) + eps: 0.000000001 + weight_decay: !ref + +############################## Logging and Pretrainer ########################## +checkpointer: !new:speechbrain.utils.checkpoints.Checkpointer + checkpoints_dir: !ref + recoverables: + model: !ref + scheduler: !ref + counter: !ref + + +# Functions and classes +epoch_counter: !new:speechbrain.utils.epoch_loop.EpochCounter + limit: !ref + +train_logger: !new:speechbrain.utils.train_logger.FileTrainLogger + save_file: !ref + +error_rate_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats + +cer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats + split_tokens: True +wer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats diff --git a/benchmarks/DASB/CommonVoice/ASR/train.py b/benchmarks/DASB/CommonVoice/ASR/train.py index b59625f4f..a819c41e8 100644 --- a/benchmarks/DASB/CommonVoice/ASR/train.py +++ b/benchmarks/DASB/CommonVoice/ASR/train.py @@ -28,6 +28,14 @@ logger = logging.getLogger(__name__) +def compute_grad_norms(model): + total_norm = 0.0 + for p in model.parameters(): + if p.grad is not None: + param_norm = p.grad.data.norm(2) + total_norm += param_norm.item() ** 2 + total_norm = total_norm ** 0.5 + return total_norm # Define training procedure class ASR(sb.Brain): def compute_forward(self, batch, stage): @@ -45,9 +53,8 @@ def compute_forward(self, batch, stage): in_embs = torch.matmul(att_w.transpose(2, -1), in_embs).squeeze( -2 ) # [B, T, D] - - # forward modules - if type(self.modules.encoder).__name__ == "Linear": + + if type(self.modules.encoder).__name__ == "VanillaNN": enc_out = self.modules.encoder(in_embs) elif type(self.modules.encoder).__name__ == "LSTM": @@ -59,7 +66,6 @@ def compute_forward(self, batch, stage): # output layer for ctc log-probabilities logits = self.modules.ctc_lin(enc_out) p_ctc = self.hparams.log_softmax(logits) - p_tokens = None if stage == sb.Stage.VALID: p_tokens = sb.decoders.ctc_greedy_decode( @@ -425,13 +431,14 @@ def text_pipeline(wrd): # Measure time start_time = time.time() # Start the timer # Training - asr_brain.fit( - asr_brain.hparams.epoch_counter, - train_data, - valid_data, - train_loader_kwargs=hparams["train_dataloader_opts"], - valid_loader_kwargs=hparams["valid_dataloader_opts"], - ) + with torch.autograd.detect_anomaly(): + asr_brain.fit( + asr_brain.hparams.epoch_counter, + train_data, + valid_data, + train_loader_kwargs=hparams["train_dataloader_opts"], + valid_loader_kwargs=hparams["valid_dataloader_opts"], + ) end_time = time.time() # End the timer # Calculate elapsed time diff --git a/benchmarks/DASB/CommonVoice/extraction/hparams/discrete_ssl.yaml b/benchmarks/DASB/CommonVoice/extraction/hparams/discrete_ssl.yaml index 7d4938625..12fde3a2a 100644 --- a/benchmarks/DASB/CommonVoice/extraction/hparams/discrete_ssl.yaml +++ b/benchmarks/DASB/CommonVoice/extraction/hparams/discrete_ssl.yaml @@ -7,21 +7,23 @@ seed: 1986 __set_seed: !apply:torch.manual_seed [!ref ] -output_folder: !ref results/wavlm +output_folder: !ref results/hubert save_folder: !ref /save train_log: !ref /extraction_log.txt # Data files -data_folder: !PLACEHOLDER # e.g., /path/to/LibriSpeech -train_splits: ["train-clean-100"] #, "train-clean-360", "train-other-500" -dev_splits: ["dev-clean"] -test_splits: ["dev-clean", "test-clean", "test-other"] +data_folder: /data/anakuzne/cv/cv-corpus-17.0-2024-03-15/cy +train_tsv: !ref /train.tsv +dev_tsv: !ref /dev.tsv +test_tsv: !ref /test.tsv +language: cy +accented_letters: True skip_prep: False -train_csv: !ref /train.csv -valid_csv: !ref /dev-clean.csv -test_csv: - - !ref /test-clean.csv - - !ref /test-other.csv +convert_to_wav: False + +# We remove utterance slonger than 10s in the train/dev/test sets as +# longer sentences certainly correspond to "open microphones". +avoid_if_longer_than: 10.0 batch_size: 8 num_workers: 8 @@ -43,12 +45,12 @@ dataloader_opts: # ssl_model_type: hubert, wavlm, wav2vec2 # ssl_hub: facebook/hubert-large-ll60k, microsoft/wavlm-large, facebook/wav2vec2-large -ssl_model_type: WavLM -ssl_hub: microsoft/wavlm-large +ssl_model_type: hubert +ssl_hub: facebook/hubert-large-ll60k ssl_folder: !ref /ssl_checkpoint kmeans_cache_dir: !ref /kmeans_checkpoint kmeans_dataset: LibriSpeech -vocoder_repo_id: speechbrain/hifigan-wavlm-k1000-LibriTTS +vocoder_repo_id: null freeze_ssl: True freeze_feature_extractor: True vocab_size: 1000 diff --git a/benchmarks/DASB/CommonVoice/extraction/hparams/encodec.yaml b/benchmarks/DASB/CommonVoice/extraction/hparams/encodec.yaml index ee0a7e910..179981d34 100644 --- a/benchmarks/DASB/CommonVoice/extraction/hparams/encodec.yaml +++ b/benchmarks/DASB/CommonVoice/extraction/hparams/encodec.yaml @@ -12,16 +12,18 @@ save_folder: !ref /save train_log: !ref /extraction_log.txt # Data files -data_folder: !PLACEHOLDER # e.g., /path/to/LibriSpeech -train_splits: ["train-clean-100"] #, "train-clean-360", "train-other-500" -dev_splits: ["dev-clean"] -test_splits: ["dev-clean", "test-clean", "test-other"] +data_folder: /data/anakuzne/cv/cv-corpus-17.0-2024-03-15/cy +train_tsv: !ref /train.tsv +dev_tsv: !ref /dev.tsv +test_tsv: !ref /test.tsv +language: cy +accented_letters: True skip_prep: False -train_csv: !ref /train.csv -valid_csv: !ref /dev-clean.csv -test_csv: - - !ref /test-clean.csv - - !ref /test-other.csv +convert_to_wav: False + +# We remove utterance slonger than 10s in the train/dev/test sets as +# longer sentences certainly correspond to "open microphones". +avoid_if_longer_than: 10.0 batch_size: 8 num_workers: 8 diff --git a/benchmarks/DASB/CommonVoice/extraction/hparams/speech_tokenizer.yaml b/benchmarks/DASB/CommonVoice/extraction/hparams/speech_tokenizer.yaml index 5d897a782..9a4fe840a 100644 --- a/benchmarks/DASB/CommonVoice/extraction/hparams/speech_tokenizer.yaml +++ b/benchmarks/DASB/CommonVoice/extraction/hparams/speech_tokenizer.yaml @@ -12,18 +12,20 @@ save_folder: !ref /save train_log: !ref /extraction_log.txt # Data files -data_folder: !PLACEHOLDER # e.g., /path/to/LibriSpeech -train_splits: ["train-clean-100"] #, "train-clean-360", "train-other-500" -dev_splits: ["dev-clean"] -test_splits: ["dev-clean", "test-clean", "test-other"] +data_folder: /data/anakuzne/cv/cv-corpus-17.0-2024-03-15/cy +train_tsv: !ref /train.tsv +dev_tsv: !ref /dev.tsv +test_tsv: !ref /test.tsv +language: cy +accented_letters: True skip_prep: False -train_csv: !ref /train.csv -valid_csv: !ref /dev-clean.csv -test_csv: - - !ref /test-clean.csv - - !ref /test-other.csv +convert_to_wav: False -batch_size: 8 +# We remove utterance slonger than 10s in the train/dev/test sets as +# longer sentences certainly correspond to "open microphones". +avoid_if_longer_than: 10.0 + +batch_size: 1 num_workers: 8 src_key: wav id_key: id diff --git a/benchmarks/DASB/cache/31_char.model b/benchmarks/DASB/cache/31_char.model new file mode 100644 index 0000000000000000000000000000000000000000..66178dd35c6b7d8182910cee125db7ea5755d42b GIT binary patch literal 238564 zcmZU+3s{q9n)rPu;ULOEM>EzcqGMU>TF1K9RaXvm)v99|>sZFRmbH#`)uq-l%2>xD z34~M8r4%W($RHELDG32XIE5rS*0rw5TGz75-(i)du63J2BZ`$mr%t$AI46Dl(t3x$*_5KoLQ2VL=SCSjlcIkhUHKP4W-*w?|&~K*xSDQUQuN7BHUzb2^mqTz6x5dMpBdL3)RyTtg?WP7FZ3yIo(XCz^)vSVb5Pr; z&#C#Bpte+h>*0l<_P6@ROaB(sey;zy>uOM2uiwAyk3sDv{YMFXr$$GN)}Hyj{-FLp zf}Stx|LukAL2ZS8`&%R03nQ8e*s5=g9|&H4S^uL)BU-Zl>yG~l`fbp^^TO?*wpJfA z=}u6aqrdm!{{*#F`ltRd7)G)pQ{@k)PAF%yF4m*`HVyV`A=hlp40VFapQy9Kk8ptIbq~- zlm3O?iKj=a&SW_DXL{9$PNM1h>i#E20@vtw{C!+7h9&y#U;QMgtw5w%TU82-}{)vdQ4S}>v>*EddG9K1h6ukB16@wASp z!TfzVqLZh;(fb!H4+ec@L{k;f`h)rhoBr;LYeyo;`ICC&PwI(3sV7I&U_M7rITf& z#gMc^Cz?F6pwWo#u!y!uB(z*4q*NrlN+j&4NJN9ks2Y(mc9GE*k*H3QNRLPiM5B*8 zD>C-9$oPQBkIswedqgH&5}DX1^5b5SNjDk7`b8$+6?yWuNbHcvlzSp^!y;23ifmaF zA?f6E>+{j_tFK1Mwx?s{bwjjlzZxU|@KucLd@E9RJR2$LUq#A4UX7GptD@wMDN(X} z?2qKlH=<-U<#;P{yzHqTFTehByktH-R`$L)R`z{5PJT0CtnB~v$MW{qV`VF8{Pyb~ z%K_vb$j;J8QKT4_8nn_sMhwfI5c%6vA}dyjEPqX8<$GcBf=MH*pAM5%Z)jxAqHy`y zSK*TKR=B*lJY3d(6(T?Phe#v!`qDF@vi|sJ`Nh~!NtMy^@=K#-!>6OKSDHmy8K9^ci3 zNKubY3h(NqBtpc>z0cr(2>q{+Me}r0itfKEvPs1WXPy+pTI$BIjkuzSGf^ZrRww?k zS_x3DoLPk5s}r*^OfC@C&_W*IGP;p#7TWY0y8jEE1YXlhDsk1*Zkv!>U^@(`usez8 zk0FvXP9t}4@528+Qa4!)W8e{b8+GJA9wGt4`A2D_6StK-=5tTK%$6JP%#?w`RoefI zT%2%QRe+3`^l3LX(-o-f00H46Et$@v_`V=_mLN~UL$9YOq4$yn;>UR6XoNV zCd#=lC(1t?ek5h2S4_AI^rL^d@ni1&u`Hs_FLqCpe?2xyF8QC5Pp`(yfA4-udOw*dS3moST>ECG%vX848!mao=l>=|X5gMpxPtRx;v^rX+}Dkq zjsG6PEI}4?y+pP3!!U_P8hXOScseXtAAyii$yrAkGsDGT$GxWA5m;zqV4hDibO=9i1q$C9Tak<<9+G|)CZ zB6dx<1aOzqH*=0^EEGYru` z2$y5jNN$yeG&FLKIP)7cQjjK6NIxhdUweo{_5DNm=afAJ^^^w|N%* zCZ70GHByXU-2(c{3Hl57^%A}eKh+nnqc=s+-;w?=xc;ia2u!xW2{IEdf^PtY>_(AC+}9GJlOpQDlt}v6p^5fVbCw}OjddcrDb&xW;o@hU9fMw4 zM7S5jBoIP>e+#)6`Fyxk&WRC!J$=U(F8Q=&L23;BJw_sF!yHYdBRm3@+`f#cG zA^k5%vo(@&H&SW?wCP!q^@J@k#>kcrk(F$U$}ouxE1)Revpg%0Qhb6vrj~BP^N;NA_GXH2OFf` z{!96FYGfVvlv+mmlbL%q;4UN|R`kkJku==539D?s2mL&pfs2s4g1Cso2nLHrmeEG} z8RVO5Ch}IS7kQU*6j9fOge@WeJGth8L!?p1m|eSCBRj}@GkG#^WNv7nPl8cFSqxy$ z(8!yFv8Z?tQ;(#x2F%p=R^%o~2jecnLrbVePLSpj{E8{ZZtklmy-M^lz^29DOun&Y z1LOvD;>6z#XTaahIKez!#CYJJqWUuHgR`_LcH>Wg9q7xolA9uOf$#;rwA~!iri@1V zQ4VQklIAt8U4{V_Cw;Pz`Y7xl$)j3h_)Wy~l19ucbYfb}m`1q!D(oL=w^dr%L;k;{ z?hg=GF}j^PP-T2X7$bh>OSCoq2f$w#BF0SO29vtxB7R}se_1O!`tQ5=nXr@hkYjL< z2mhzh;(vznNT>u}4V6LC`oF;cVKnm`_xtI~34~$Y5IBbXEJgxvkN5=^5#}cC4!Mv6 zSGd=NRBM2h#9w4#4(X--&WB4f?hUY3rTd&lz9FokkNUbT@`4&Khsk>Y_d`{O;j)`> z+o6au`k!XKfW8ktC;#gH|3Dhj2)m7bqahDl(CK@I)glWC7fW3=5k{>|=Ativ&G;9< zIo3tLAkCau>Tf^u_oQ&fLdG-tQ^73iuQXhS$ltp==}Wy~Qiv=XV(rO2CCuH2dV%;J z5oRv&{XfXk8sb?>JfQ6OB5C9h&lTi#FqgAF$O{*>Ch)&UyWa?vmfPf=dVYm?{~lh4 ze*_I!wuQ?r?(=u(q&_uV2GQTb{{b?b@jM0|qle&UwzFqI9*Pf>(MqO>ILKGdF6xAJ zK#qp>3H4N`%8&FZIga&#T_f%2{+GxPYdjBGveB7^dxdG*V5NL(CUN3q*cH z{Hl+sIW>O{^@X1)i#-SV$;snhbc32(7%$@R3y%N&BJXft4n#p=6!l3v*U{%Ii2I-L zTS9%B<2AAr*}Rdl0)J&k=a6>2M&8GNA@SwoS4jAo=yRctwlPGJ9(|x-9`(7JHk&ju zHz#v_9QPd|ynP+@{u%xF8;#U2WskwN@9o)mS0^74hHZr55PAEGep8EXJd6Ef>o)Wp z^tIe$INC7$u{V>m>;bs)Xa z(j)RQGMoD@a$l?Ji%1M2eFD-u3u z8|^|kmB#;8aeX;O0^hQK!LP|K@<;BiK=+?wUjLN!r-%A_FI@f;eMs+D@ifQjTwrJ=@C z|7)cCdYF7oTyb!Pu%)v!WS)BiadI8^|Be43@|KF{W5SbHBXw@*75NF*;z7+lxhv?i zNHquLr)lH?b!9>hA_MFx{a?{vG*hH#zed6tCreV9W437IG1rZKQ^lx{lWNj1rp3u2 zW1JK$jidau+YaW2lsGY3;^b-4%5C5}VGmuJDzkAHxZ;?bxPBC zo%K7)T*URqxYe8*LHWWNyA4sa*D(8dbaQWPYVd_nQdY zh&1E>Q_{5)zbS*Zo*pMHiBqM8G(Y6}Ey|Z~R36?Soxvj{bp-NkM#YFxxVUu7R2%lQOx z)ISuN$@RZP-%NblU@mU8{#uAMV>eH6Em_5}j{Cpn{!caXEPiVJv;qIWMqi2iTjj@n zo6*-o!9CXVy`a|hrPwWg`-uP0Lu{V)eL*Mw=n35Cf1Psz?EVm8cdL6ZVN0c4?+cUC zA;L?D1ioZk*hYD%tDkevKEh=Y-zs(g6V&BmY!bh0@V`o2@gnnRPc{FlHNSbWPM*WP z5b6k1w~=@`BPhg{%#s@E zI81!hdo}(Q&<=*_T&G`}X*VD4b8r#-EFJ^TYo&dPPTuC;0`}I|@xKBysQ*Br>Pzf9 z`a*+tHA&U;4XxbbdLeaUOd&7uGWQPR_jkzB#o_WdgeyE7F7>$IWzF({Yn9}`;AXh& zBhNxcc!cU6qD)LqF& z)(*SESp!cnpWBFWT5o-wJ#YBH>&+jK6txxRfDd zaGO2hG7&kMZ2ULb8-qMy370z|q#w#z5bpXd)K3)lgZ>G_+Emsn_MHTtL;WUV(`mFZ zYjI`&9o%Pw0`x*`yU3-HcRd;@nWdL*;+v-0|84B|D(3|B2esz9MP71-xqp(#UvRyE zeltUbdk(vJHbnlL>(x8;G7G;$%r61XU;NmA%W92GCmZTKLY)I0KdP7Ca7_0Cex@PH z{WSMK6C(eNpM&wcK8x{*ay0JLNGfG$Wxe2u1RIzL!WpT@?5Ozp`e^IK%-7V$a^@9h7X_N+?MvJ zWq%epMBlFulf0dbm-x*CRD=I3orEJ7z-Oe@QZ6!^d!5LWumn8`UVx?W9Apx728r>SQ(7;?O6<_G#3`8zM)xMalc3m1DGXl|>^T6){f3hetJX6zQMFysP&A z&m&(&QfUFsV*TBmqp5^6>`9|yWH<43aZg^T$UgMV;LW3N%;GE{K1R}U=S+{0yjdcx zq?5;3u?IgV`{0v#G178gBh8#0w6iyEqwlz&6^z>$gCLi_*rE2-48|t5tp>YcOqQ#BhQJy25L0*7%SVp=&Wc6Oo z!jPp;knmylO2%l`|It!@h(1viEfvd|Q>cfA4&iVJJHN}CiSTO)eg~PiF-CHWIFq1J zjVq$r*F?)8{ucH=d0VK9uO`S0mK>cQb7qH82iP+P_fx0oBl!E?3k}wD%a?TIA>zls zj=FNu*XDD*oi;U41|#M1KaD+84nqLqq*@8}(JqwV8xdXG`jgX)byheeB2_&K0<(!YuqQ9w+W(rPDWZ2%EP+ zNRRvaIkV%M8CFuKD$VW4T=Ep0muAsFzhW$D*2piYv#ng)3=K*rzH~4!b{k1+5BdS+ zCVh2omO~%ejyu5IyBoO=vZ0VQzLhwF`?GG=zw8TAi7%gZfSKzCY}hzVJ*#-hr*SoT z#pVNlqz;f)!qkBS0?fZh7+1=OFF-#1kO;$+^n5w=Vd!uY{i)7P{gWmWk)!kl`AJY0k85Zu4B z?pEtmb%y5PepS~7)^}>37T7@_Izk*{BREg}vG`w!W}i>Lm=MJ{Kbro*ITjlu|BZ=& zd(jvPd_5}Izc!Hv!#d_vxHXM@y+{9{tp?HkSBd9K*5t}x@F&dx&y@n4DFj|7{vD+K z2J1_%zmBaPIm*~_YKa)IcVjPofxHG@C*0eFdj~%|eHrq$(S}v%>+pjk{ftYj_0`x= zc9wlS_unDT!s#RZ@xDr*HJExv6KECsJ^5wLP)*(BMQ|RCd_))>48Rx|50fDV!of+M zO+?0lzXN+=?V%=Ab>^b_{|x+9TzT|^aKbuNy)gG1nc!5p)xJ0e|GbTywIUxAo=ORp zvrO4LZDYF485Mf|P4=hiI&G=?uUTD>6$^tMFIz#o6IR()GS?~y z7qma(t^V%*HTc(kcmH~I|845;9(|Yi9LitiA2xAqnYzA<>(r_0E4dbpj92-myej>P z=wo0e;ryRaAAi)!Ny>a#rMsAX!8P;&xB}OeKV?wmxrIJk#eWue4{f6MX{>_`=tlhV zxHtDa;~4R~R6Qzxl{eCzkDreADp2?1r~335++{~8eqb{79bs-%!qvu|aIFgM1m8*A0hp ze@q==&w1+zw_2@R=&y_|-=8lSb|#4t))L4hWj7~3J)j9Ca$SDE;x=&C#{}jsibU%yVS!y&SNYhYjB$yC@X7eRkroG z3m+y)-o0emguWK?&L*=il?}wb84RI`l9$E4fc(y<{?s$SxlCb3=5zydgsQ)s z0FpY&QF9Fa%&-xd>s9*~6Gt%r>@RXCmpT&+UY~`YLH%OOYCKT)ml0Nt>8fv)pjW^? z(hWYN`8<(wFy4H@J(0xE9Hq`Ta_B3$H z{2an3ie#(&s(wOzYW~YLqJNqwOQvDJ)0F)(ROj0s#HRAFw*NIIma!e1cV1LaTsT}FTWT|C#&TTX{cGxO;g^pi+eZ>Y2en5)UV z8bdmntLxA!;WTxB8Dc40IB|?Y_Tu&zYGoXH;6@UCoj#A<{04ufcE!+!xeqLb4Q6J~jW8;8#d}EJbF4 z>c5ppHNMp#^ZT)3%AcaHk&ikhvC%@>tZ)|nit%T?@HIJ>-Y- z=V(}Cux9bUPG0<4`Pp~z`6J2CC~S2caUJ7&GxxPJ{(Ou)g*1$m%Sm|kY{LH`a zOM1^D*_Zx`aPNbfhqfX8oVD{>3u%)d#-e=gQ~R`N{PIoD%D>Ro2F?ZYhr{J}DjaiB zAvSXYJp+{9sQgzEKQ{79^k%3y6)GPvr<6ZI{Iq}BE9{9$vyeQ!_f3N2Q$N3}4;9l2 zkvG--pK0ZzR>G!KhBKS{VblX?+uZB`kMCy`;AQeVtEe8JzX!-?(7vh zzNL@U6BqUP2mIBusRFeIT%?tB-2M=)6qBbCuJ6NLGKqXLPW%@AFnjkx;{1^3*hiny zNjZKWDO-9`OMMXkclGz7is!rhb}C)@6JIxa!4U5ye5R8I=F0RIC@{v z%4_(kdwX9d4$@zU`^H|*HQ0N1>!};$4TDw=<8M4pyML*b6Q6Ky{VLZ9U#-HMwCemr z%;+b+(aMdlIk)js_D^{RiJ$X^PHMTQjy$~2I`bd#^PU#TKvp2%MrK1kDEskuCySQ_ zdnxYjw}i?+E36 zfmOIwIH+Gvy;27(*9~>Z6V#!lkiN1&C+&$kd7pf`kVn(l>!&aVVPhZd3Ga zM{(_jO)HVe{BPI;eM$LRwK4&>gZP@>qfHVBPkW8UuYxphTxA?F>Er|A@JXap?Gib* zh2*&2LVt3;q?K~QPf>9)9^Rl{ob-D&zdnuM_t&36p9W8XN;Cfu>0?7Gt#a)C18nYD zuC;zay%ML&?;;iUGp)3KO`cR>MWpOXaqo`-kohwaZ{Z`9{<+^fLJ z^%uXBTad@7vnp7R{&%3Bq3=NMf!~4=s#nvWktOg3d;nE&9eUs^_%ApCxvYhZ4>fWU zy%SEsIrvwwf}wS!-}H~7e#zGZ{CG!74%60;(EEkHP9GRJGFH_7qoRm4#018Xw;5w4 zL^k{l&*ot>Y=!MmMO_UZ+9AhkG?I>cH~ju6dvxSJH~`sDSHv0xSpW^IS)(Iu4Xp8y zWl#amc=|4~8qCnney?pY=STCHJ8@f~^C9biaje%Taejf@sltI949(0vh0I6jxy)0h zml-Qx4UsdrO*{`b^f8~#VSU0l=!W zV;}~`!$g=2#^zmABIk2cejzzm_etKgkHqwzR|-a5#76#0ir!eLDZKHFrud12ns={` z*BriK(H#2f?=&Uf-qHNiD#oR516)L69gd(OknOT*>F(lD{~OqSZd$x?UvNvY?#UqgSKG_H;lt7fd& zhQ^ECK3?zKB(PD9pHZe-KwE% zbHXGWJr^8z!=(xAV1s(nXqcmsM(oI%$axadj=Krzz^)6prx;403@RYULmPkrI;uEN zx6{8Yyfez!+MP-N%EDHVKHSZW6D`AxFQ=Ispw)$KdazMsJNH!*Up1J)$#_tQbRpZo zik?s3DqvmNMc&*CIM2t1J>bpKh%b|K|GVT<-3#sDhFbhA;6u0Wr)(L#?}vU49E&L% zV}m`Fvcd)YF2ZHF0@tA5#(5NS;I%LrK;D8oF!*wq3?lD?xAjSRfP4gxA%DjdDPT<3 zC15Ks24dj*a}d>E$K#$1aWDgBLVYar^irKPf)#9FUyZ$IVDDg>7Avy}Hy7r^LRbRH zunanGGqw$hbPcm_yhr_)Qvcv(?DRo%KhFo@BsifJTz5sjxl=Yo$l zh8MSow(ExW#4u?C7qm|2J=_J@3bfE~nt_d5mbDs^YM(p7zeZDkI>X8!(QvlUqJ{v1$qybSvQ;;DmN)8=fjIaHG3>r%D&^3;58_fNy7#_X-?(+fV8P{66qX{lUBmH2;YWm?^Ev`#K|qRC&ZbuA-^ZwvP8J&~=H}19Z*7e&cC# z?AU|!f=|!$ycEh$-WtiH6=}n5ufj%IM>vek$JpW+?vH`-FcBt09L#_Y`cmhvkv`^T zOz6h#!L9n3kN(|kVf?W({ve$m#vgPS@wb)J_tF?YdSYcJ@yv#~Fdu4TS@Y2T3(>7R zwbHmnD@)Lm!LgBb5Po*BWoTs?ek)-OtcCTk0XD&A_;dT;iaQ;4Ljh~|{8vN7^kRtY z!MzVmA)zubjrXn5`|Gh87|2;Hj6Mj0QY>o^{94AZy3 z4z{J_iFxu0*TT6r24bMCi1Fxfn2bkvGfs5jo`^mfd_#;!xIK&`-N-onX249C4Rc{W zEQCQ*tSmwHvo1_V4tyKJ%V^YF?8y3M8GiNm7>l4Wim@q_F$(Mvj9H9_4#vTigjoYY z`y0#qXXxu;18jnhag2qN$RlH?8@h*B7jTB*Mfz^D{zzdgO=V0?V{ApX;&#nr%!PI^ z^De_?;@Jw@AsuRq!o_l!_b<_{yua9pdk^|Pa1d`3Zo8571M&cV&VJSx$XsZ<$vcI} zVsPCfUmo&BU6$Z3gW$Z4ZFZMahm8OAv6Mf4WQ}4)+9;6f@nNXs^RT~Q3N|$z+gOZ^%)?eLg~}Oq-#x9ILtcP3p0i&> zUIte`>uu(6_kNvR!F>(9^K{}%WbKbldZ0cY`&&RCO~n3?wmHOI%KQ%wxXwKTa0~8$ zjrIE=@;*F(j-xu(U)Z>XbaoMMCh=nXUZf9q^F5ukJmlSm(~JSo+QQi2;T*ul{nQDuzFYZY+k22*^aXbc{UeqBkw*VO`c~8a z9K_D#`aU=S*-(q0B{f=d(XGa4_72fffL;uayl81U8ciETiwzn4&MAWWz@|&MKKMk0 zlp!mi5(W~Yq#D`(N~D;P`J5FMbaN(+ZiRZ{X&|1)^U-4EAl1eJsr@u*fMY0HOgy)6 z5Y7qh;07O@fpgGtIz~F73*68R9`J&1C`Ouj@1SKxw4CHX*@O@zr12Qy$M%!ZB(><@x=j_mHi{`#;#q%VN|U1I)&li-Bb zb=V)YK|9PP4(DyH%tv|+A)L=?Wg+?!2#z1)wBm+j+{?gQO1#jm(TWFF;HVCS${OJ{-B&@5ATZ-&w4PKI46CN z?}4Hyzn*gt{H(}E$R9<0^1RoPMcy*V<9_n036sr)aoXvp$nDV9z#M?w4KDni4} z#(3O`}M#?!>XKydm*fa z{0{mX=kx2)H^3&?3|nD43{HDT(vi-hEZL3R1N-0rv>nc3|Bxlw=*yW(@8s!E$&O%Bjf02>Rc|HaXFiHLN@D!Y^lGQEe%82(m0$gR;2B2w%8Yt zM&dznAgwA*a6&t{!3SsH9CY*^l+J$A0XKBtq-?h-?#JMzfBIVJr}%lGzAuaNXHotv&R?>`7EAxv(Ek_H|3SBm zz5-()27>2!$lyM19Q)sK*#9K#e>(OL-9609eT-vBUx4R>tJOQs*#AcCA6iqe|9RLy zw1b!PC38kr@EL@f|7-KKGMV_}z*34`7Gal=&vV^^NapOrBX()S&ki#PXZnQqj{KqQ zZ*(#fw+q>JS0}U4=fZsG+Qt508|#KF#wVl~)H}foxwZs+5+de!)*0v)WbGWzHqckX z8fdhW4-4aihjfumpvK3wTw4ztU=wVH0l!YRBGozScH|)YrgY?P*aQ3E0Axe|TiLQf z*IyF42MCO0NH+Roa2K2TC zj4`2{C8Mh|(XM{p%S3m8k9o^`iSrNQ?8bj0eg)u!cBs*W$nkN+GfCw4XG5f(`Kp0A zs_{1S<1lm1UFM!1=Ab_2N9NCF=FyhaaL(5_3*E)}ekSMpdd~M_Ip0Ti%;EXK0_Nd) z%)?R4yOWrA!5hIm4C-5dH|hG|44i}7Oy<88{4NB#wT1n6O}Lbt-z67uJMOXnE@l6H zl>ImU<$alQe_W;%fQg5id53rK?e1PFKKpCA#Zv0pyQ2$f1tsNCZE9Tf)p zc^~4~e$JcuU5=VO>=i#VFYW%G_rEQgQGB<{_bm+(QtOG328&+mc~)bE#$mnKJI9Hw zWt=#8uG3UAR$7LqNb}8Dao(OJCpAxqOY@YpW=#?k&mg@J{C=XG{=+!=h;;H_;v4PP z`F*d3QmBhCO+Af8N%Mv1M(cOU%=8zCskG=tXoy6Tj8Vg7ZHsNO;3X#potx#JY zBI(H8VCfHG{0d?GV(hAql6-%pG!1dCG0bz044!j<+W+@I7cQ)=W#ARw=fyUSeY95( z&x46$9~^*e$b|wZhQVWu2cKXU=w;wsz%zHG%f&M#WHqQ~Ox`cqccZ&YnG23G=C5Py zFJcZrdN(ru-;I)n;V5YwiW2KC_Jx`33$xh&A|1H5b8j73!2wQa2RHbjV~G9lFnd&_ zdnx;G@T_M4ox%Pan)U2|W7+>AodNd0J?w4!*#9EiahtQE|rl)4p6U^E4Uq#$Q%1!JJNQVeQyf&l}deqa~;1^Ko}S4w!wAu{2Q!eLfD_CaX!HB zHgqo_e~ZZQmYOr;$cE`(!(Dx`^9D8b}B30php?cVH0i!vlB(kKu>&U+mcp z-8-pc@b*#1J*@wFD8GgB6PL4w@}s-Z+o~u(^>2=i7TpTwSa^U6kFfbuT z*5K~H5hW((;{0a%>IBYN@mmiYU=wVHtuS~hMz$l$t zUI4|Q&fwk9P5<}M|Gl@FfBX4{kZWa70hLe=pIJRbzxQS1hq&>hf> ztq0HdQaImR!TH`&&KFjbKDN~k9n(3VfG%)DH+aAcJ}|IGSMLIapS%sT1_2wa$InUrHXt`a+g;A{kz2t< ze!C7czp-A}jyoN^nXEgqSce#y-;nj>qk()ik}oUR(CyH)pYmsh$!_l11N-0rWJ4|# zKrwXmQ2sv3Prlsbr~4-5zf1X%>a3(Wit>-6{NTjDb%^p4t_|6a+uXt#3i~r7HmcsS zT}ge{Hc^+cOx3O)cS_7!DMU62n zDeOVO$=>AT9OnLb)&Pr{`^T{cK(EJM8^~uPSZ|W{FnQ2({ufK#MDe?HE3r3-f$=aA zCPN&|fDYE#oe|VC;oaQVJ&$^Y;QoJz@t-;2hy6co)4BrNOkw|zY^N>qkH_+U2hU)M zYmj#)XCvpreC7T)OiXV~k$%2UScrR|ne!;5+8-n<_j3BwB=#xjD`5@fefbP?D`~JE zSc}_zmb?w~4FviI@SP`br^zF-n{ejdSP92}6Ksa9P^+IRmZ4bLj&2R**)-4N)6sW> zBZBAO8lF)jZG=+3-@q+9~^)Jp4H{Q!+e0AtK3iwB~S(xPzm*xIBBr+j2&s^ znY#^X$K8Z<==og&!kD2Btl$7Aw1XQuqImv4iRb^*dHxUG>}%BC#>+vC?={7 zoCN0zp8qf9`F{$}{}Xxs&+iF1dB?yT!1$GTyPQH?c)6fxQu=Ud_3Ft=1mn( z=~U^q@Vf!CIDg+sJuts28?HsaM!4%>LI3`}h5_8B8}uvQd2j@%yMF4hhxZ?7gNB>D zqjQ(@XQYj`vLl;tJCNSv{5}Z%{1*4$f&8)9`Cfk80sTI7WU2Ef_ITiiZtzfc?>)*7 z%~kZj6`ViO=bXsaH2Maz4R<^80dYKn$DmuqIs^uJ2XpYtsWJw=|EpLTxPeVSJ5~Bk z8i~PgJWPbi;KYWGa3&UqJ_BZgvMbg9W}~~YuP*xNT=e!fgVRgs`?@O^%*_Dntri zVn2?)9nxVp?16nyZ^!;U*uP7~PyOqu|5)lDsq9}p|2ROnY{-QID25U!gAT%W&cVjw zvH!q`O?mogH|)!Yoi%4s|Ebh}8ugECO`-l1ss9DkKlk-NF;yyvXJFA(sYF(T8S20a z4se3^wGe4X8Z((EVDLs!Jg|j14fz1SN8pZN&YRBsH5@9BaqCvocVGI$=nkMGhil+oWJw^ zQVZ)F+#M|?W-=QG&1o@L(}U>}Qg_OWk8x^TB4+xO#lJ6z@x z&wMbQqTR02HvNRbe<6Osa%wn#FU0OR&+$=iFK!P~)yopXnC<+w6LJ~UT6l*Hxdtrw zH?E*uDV*`+UJp&U)pLDYD&<7hQ}%{!lz$iDkpE}-)%!mixNj3|hOMw2(qT7rl+yp0 z3%gj?xuH9Qu^qhNgXVkmKR7u=|D#{Fo~8e_P)2A6=gm;rLp=N70Axd3e<oc$`Fyr<<&ANRBbNf8( zcpG+{g8lYjziPkR&lweA)cZdUqNWRp&GPc#^D~q)U<#cqa^+%Lk z=e_~B1*SJ5I%K@FnFRK9ZyZvtidrJ1FcJ`-DNC$iGiNrG# zX2V>V4+~)lBtu6g&)>6n{*H9>djj2O*1jCfYU8dwW$a|i?L(cKxGE$oVx4d|P|S5Dj;dH%hQ=ilsuH{)lS-%`UTOl2lqZ`B0a~Y7_r4uPCd`RJ(T|v;lMhJ@qaPnKQy5`;LrEZ2e>~Q za>2V7n?U~X{*96LhwePu|1j;3ZK-qi=8f1NoV=@S4f`9${*d3le^X2x>Y1H-=eGpi zxjI_Pkok)kZ}=Y3H;=f;hi5u*Bi+QU-u0=Ye^e08JSkc#k=06vI;eff`@i>CPoP_| z`9^S{JHfGqvhAmg8I%>-j^E%PX*;A3&cHdi02kphT!CwF9R?I%M9VE?zxpVRee)0d z=jU1P<39-Z!K>DQYW`i$dp5WqgKiCd8pc2j3_him@yLlV8RB3D%!JvX=HI!<`LGZM z_%3M)vVRe4V5BpZ-;zeIgf*}h+G4SPSdZ?G!2TEOWCQvp_~HG(hpd&xVgE+#ADd~c z!v0&ZjUH^I58FUG0*p@q&IckGpEwWS%>7#-9lU(=wj0?&+jc_NPTB^#sZ$Sl(S3{u z&8#h24rBj$*#9otpKCw7|3{eoY1Gds#$e*w2L~V*mOvR) zfH{?CsK{!iLmdR)-;AX^=++3zwwSV@JK=}-{~pr*tO?Ig3YiMwnI7$e8m|Fvj183s*)gk z(D%Us$c9|VdoGc8r&&M1U^8dd$TFyaN~i`ict1{%I%G~2HV5i#u09I;+(sYHqCaP1 zpBu4HXyOde0nKWU4=364JE0Zb1#M}Z|1man?Be{7v&b%Rb3WLOzdE}QzK1xAGey#K zfD_!%|C&w)zvg?)+l;1+>|CZmg!F>TP!ez*RJy{BN@U8!I(|P}!bq0Rl zzh8I_{W=Ul7wZf+bb|-H;DcLSy90x8A0EIXcnpKzu>aVRApHrvBa=croXdnG$3P5> z2eV!$6Oof44rV~@Vx3s#@%$6r${5xN-q(|4E^alZHGz7^!3OoQNzxFXB#m>D#EP^f zCW#%{gxi5^Cm%UOeB;k=1sGr^amD;uv2C7waQay(-#AB(q|A}B{%7R<-dR$*ahAMy?`dhZOcGb$6H-9jrcvzIOZC#C z(FdR9IX#m`)*p6k)1s4N!kAg({XRBPYWT49ct(PpILo`bOGBhqGfL|EBV;A*RWqcK z-{0nJr;q1peDh^LJ5HKzmVL9+4LXAh}S|Szh?!LUrmx@Mc9xe$@@G1TFUk>lxqA3pGcAqQkFZq-$+AMqSO~9inTLQ z8tsX+Nut(T_~#ss;H zegzzz37lIdaE_V4Sd<{w@VgGqEXs>i-#y+!-U0O;=gm+a%HbT-kq;j6tgNzZm77#=3tolYjBTiN3@LLB-GaKy6*V|=hPKG+g-LRbRz%ry;a z9y!cBlE=Kkd}l{~|9xQdF!TFT_SfKqR&cFmf6d;z9Xh77KZmY(_UDV)pU+}{u4jK9 z%l>?rd*Yd!NM{+Wgf;N}`-f}M-R!5;`-kh%H-L{lwHH5+i@0DDe&#K_2Z!7WwdmWC z>0lx6jcMe&pLh9j?|~+C2YY+lJ)TcPeGBFD5H3KtKFWtw&lZ}7nE%^Yrd9D*8f?o|BR|Fi#G9!VLPe=YQV4>nN4HSm?w7spZ0 zw6A)X(XR4qp&jt6U$IykG8W4q@!f|9@CY7*ZY_Nl#(?)O{V0XLaEU%~lfJ?kkNY(J zZUO7E9{M5m(H_ORi+<)pKRJ&zS0d}ub@W@PXKma7jYifNU<37D(GTxGzY!%dDxKG& zWIS>rOolj^0YB{j(`f%x+9ZXxp`C-@c_5o>SpVBu|68b^PWJx|?EkCS|Ce*F!Cs)B zZz}sg;|zfJ00&qb%_Pp*Fc;>7iQiRRh+G26unbnhAirHW_&M*-tk%jJ+-qSyY=T<+ zEU+2fI*YQ!({ESN4*U+kV-jVXLm9!wIZW{VcMJPpJNsXx&BMMJ*@WAHG~DEO2JiAa zfyfQSw-vTSI_!py9`^rz?EjJO+wA`zvi}D!x(}NB*#9r(Hx5^@*H4R)R-`M1{Xepu zc%AX=&536p9Dro2kY?KkA;?he9q682B$Z=AnlBVO=9Gj`T8^xgRzV@PWs_V4=B`J0b8&VaL%K68q` zflZ&oeF4-rz~6uW>n3kq)9G82=wsy1x1aFinBy5kE)w<@c5xYb1!`}z|7R?^hHk~y z)o+DfM;`#kJj%9_GOnYnTQqVDzdJAp_d%VzJwOhymw$xxJ*}6=$U)9KbT46dFa}~^ zJWPavz5M?R_7DBf@je3XIG6!5;fM2+aXj0?Jr@Q~#K?T)5~!c_-S@vMSc|hZw=q}Q znM<28S>IRj`$s4A;(dpG$tczrQ}_;@dzQgUSOXnH>Nk#f{(*EKW>0UV{=o}AXuiq! zzjyim7wKfr--_|%}4p&E95?C%Ay}FrLMP8=d@X4CVdLO16<37TquBID1pJx z`OOz(1ysVo*l4Ln_Vas$W~5=xcjqm7%Gk_1k19U=3nuW57W2OYU6sv6dQNorcXiXQ zbnw-1AAQ%;M_oZZb4`Pbao5ARi?rDphnb(7n4cZUI&}}6fpc&HF2ZHF0v*ihozQij zaTmIK8Hd3eU|c@S`8#WXmi?>`Rx{T_D`8#njLWPE+QG~?eT{go!vNfZ+H$_XW4ykD zZuM}6?&7!q(eHzU`MZgAgT0D593J5J2p)rO9sLv3Z+)@s69bIF9RuURbewtT1p6iQ z;P(kPDF0c?-$VJqdXw@GQ+{P5ploF_VdG#1%!Ju67v{r4=)j&kvGJ~(BWH8n<$pH+ zA7=c=&eZ>9Itfl_9m4*Hv43Pc_c_yehCn>Yunbm$I-7T8^3DUg`lh4{)}pTm-(vdS zJkrQx901E4p5NfV36$M$Ms5XjDC;1ko&4D#c<#qIkdEI%>dG3RFT!rzd%*ND^Rav_ z`_TWq{tn>IhFtKnH!en&Kp9j({tdqS=e?mpzN4?iT@7Za11mVd3GLv9{!^R_AqSq} ze^epQ!3DSom*EOrgX=H=^_=53KqFYe26kuy2Q)Kov@m9zL^>HiTG79M|EQg@rGq_w z=K|K=iRvtg^@oP_2V;f$2H3|~;ADQhMLKt25bi_UbjD%)O)tfY8~aw@Hax=rG5D}; zFMb~AZsB*tQs`$ec#J(-8sF=DMSZ*-%i1SabibfK!Wf8w@t~f~O+*e*my?lkFau`7 zY?ur4VId5%&NqF@^Z&Q#Be(}%;>;7d3|7J#P|r-)BGxP zev15`-*4B?= zO!<-BcgY*+dcgFnb-4v6OhT!hQ;{qHB3USUj`PTZ8! z`!vsPx#q*|T}&GDNDKLW|1+2KE&~0};+iT~2zMQ7(F`QuQw)V%7EQShy)P{gV=V{ z-Me>hn%%qKcK6;=m|`eQFn@3Mlin2nLo}S-+G?)+rPbj zuWPO6dDhGCta3oV?YFzAkVnq?A3fT_`_jF^7=quFhW_)t^UsV4eLppZ;H#x!p!8sr zU?}PbutAlh1lfROF}svZO<|{^;-vv$xcx?=6yq=+6EG1SZ+i!Ol!^_{u_~tj!S@K%lRfV!BhtO2#)Nfb^#3=+^k>vxu5J5Q|3}y)U5;&NRj+4I zMbBm)*rq$^yAXZS+*a)e8Rv@6vTYCc;Q$Vy8b^>oT|eWx(Xie)Z@zb^J7pvEmrj zG}(qM@~A5w5b8I(e=is#c3AsdqkU$h6#6H$)knAU<974w>iKnSm=?ch{N75oZL~(p zYl4NH_k`nAeoBAdr`g{0)`RlEX?pfG|CR3<`Z?t9`7a9VAMDgG zVO#YGHVk{k9ZwYDI1#XhJaToW|e}Qu}=3p>cf}t3Wk?8w~{+lJr52~+O3>Uo(OB`*&(iNkQfEM;`@BQ^{!32+df_7 ztIAqo{=KpkzrR!ayx+Ck8|+`>{x!VdzAiBTUf*OKKhz|ha!(q`qP@g&o+1 z@$UN`vd%H;(J(?jXrw2Xc|M5oiAV7T?^OC0|HAXnc&-n}m;A~2)D7hxaeUxD$2fpP zsKyb*{`~|Q{rR}2UmPEhl1`%yS>$m7=^Mr2BzYQVa1O0oi$kWTI9#A-=dl}Re;{0< zUqQickdA#|U1as7;?Qe*j2~Pl`%wE_ai|$v9B$GRyV(V=u`}p*kEk-n)H>_}<6D zKM!~;9K2i{-k9-tI56q)@V#5bVgI`y3g4aap|J1#kno-6VPWrpkA&B+4hwrSBf_^Q zeJt#r_ObA-;!$DOvQgoh`<~`MFOA36HZCNWqgA`Sl3a!CUhOEl7l;ucj~v$cZ5{ro ze_^Y3GNVtq&f2?v--PNX2ZVC6hOB+s_%wPIc3>CwU>^?P5UOzm38aulb^USgzfmp;$dM&^G8D7Zzu3iZw?8&&OaW$ z`PPTR&e21{x0e-%J?o3DLus8?zklb=LFOVBh1YjJu77J#_}+8I!=dtD?#Djx!nbj^ zY_taJ*rM>N`r`1L+7JJ$?)RJUgNyw6VfVrhGxx#~i+0xb`?a$F>rl7%4*U3)811c) zY`!5@{!8!XFU4qYgyx=i!_j{4s9S##j@^65yY;ph!`tDUJTKr9uAmp!a2Rm zWS2h2ZZapGf7jaN`-?&|j?EUULW{Bf8MM;dP(8XR)}j5H?1tgMGhK|Bv$Ws`4^Ro^vo4^RW=^_U*85Cz(yM zX)PFI%67+=G2F{V(Q@ zkaaKI6JNO(8qVGe2{higr(f(|XhI58?GxulZ5^S$IeR}GlCDO@H(Vpy*T1L!dr$rM zp6CCb=l`DP{~rJUy^z24p8o86?DKo!7}982@Sb<{J@wyv>c98Q3HPqcud-45$cIeO zTi4zTnT?K5&n~zZI+3QgA-`YVyB*{Cd!FIFkhQIP^u3TLPoQ?ny>OB|jhY#*Yl!Q@ z8R>IqI{#isImgC+t`l`{-4FGys{x6zwj+rqq;SE1F5wD#aShkehnr~M>H3{d=U&&J zbp09U*5MrMT|bWYyr+!5C;seO@4RPxitBd{t{j_7CYtnm#acR|~@B41VgJ)FhI3@NQikf%d3k}QO3kg(wO`Wg5 zxamdLwZL_*cb)W+_UrxZd!dx$hk-5(+$DbPzX3|@g$Ba1HEP7TO-Px^=iarIXiB;&h;~l)A?7g52lHJeASKe{$ksQ5wkTR&8 zr)ALDI2*KE~tL$fx(0=C6<&@P7YclXN+@VFz|$5BfgMb|S0a=1Y(d z=l>m|7yOg`d>4A0v)G_MI1+Uf;%~02aGkrAW82bbLl$|Qz)AG6BP+gNq>u1^I4#{< zp{*d#;Q}rpt>4_||B>%s)SG{=k0gp2)BNB5ex>qqf=nfe!Nr=rJZA z*Z&zxAC8p&#kB{Lw#T&yM%tEkUZvzXw2C>5Cnq4rAqw;VRv6pW+xZT)*=xjLU!CF%akfP4%DYD8o$5!W_)Se6+v)C$4|D7{Oj~?w#Tj#jfAE z9&@f~vgMxZCtIc4$T)U!p?nr&DVC%5P1o-lhr2I@^^e2~R@%M_DfhBz+Jk4*NEYHx zv)RA=k2t?)jeQF9d+6)vm7i0ueocJfDfZu!p7{*Veyn!@asAN^_SuArBIPAK9(uJO zeLu4<-G{Uzw)cHYJcIqbjo$Nb{7G^Lc3}_p;Q*?Se;^zpYshNy2x{pGGKIupZ1+O{&(q4AW1Pb! zTtP3c;X3-z?ml+lkL+vqcK#~+pPk>lg#AyZ<<~Mr*__7yr?+_?TRe}gHJ)FRy>A@A zO?lqN-I%|&J@;wr51RjXU%J<~gZuyQo`d+`K(hC7@09v;Fum&Y)))Aqu?qCoQ;u<& z??TTi`<-X?InYNU-|g8qdj~qa3&(x0T)w5YkHdIOz(h>ORMZVBVS|?NKl$fqq$kl- z&nLvui~Q?%`PX;&(zp26d->OV_g1uJNU8Ha*S7h{Too7C zC@%1Vu?y0Rk((ke@T54wY;l6;jSJw5FSUI+R$>)upK|=M{C|4Fxiob1|LGf$>iO;Q z9lKF{W0P&=*oG?Xz%J~;J{-UyRO1K={o&_5@5|zS(sj>?|IHJdL1Km2%w{o~-P&oS zBKAq6(0*&fE45cu74D^Nd9>T71D(jCtJ(cU4sorQqc_C=?uh>#S3jV|whUU)hBznX zgnV*eSN^r(C+V$2*r>Ox^-s^v(5_CgZWjF<^6Tw~?qS+lT(GVBApf4cg4zYf!I9Tc z)2v*rWz%is+e`PMX_7V%jq}*DsGFvL5C38O(|>N`F7BiMV(kP5qXhq9{L_1%$A1?8 z94e3D7>QE!ecpHM$ja}E+y7h~!Q7m<_C(LG%{Q}s%QSWt;+*Y?(y`8+Oismglp)4m zVjVn_o>k7{*nwH}ImnMz{_t=<$6VWb{@Pp@viBM9DY+O+u^cP03ccczYshujfQnyP ztKjF}#d@(k#F$=kulH!b_XwNpQ;u47!8WoAaZbpq_w>1wTga`qw3W8+z%J~;J{&-0 zyYloc&!<@Ye}wq|YVm*VW}|j9Nj4$He?R)P`2U;Y|LlW5nqTJ_?SAWEKXhI+J^&Bb z?av()1K8_7em~@R)i{C#;@rH@?V%HLM^4GA*i>VIaNgF=hXo)&i%uDF-FwP^4$8+sTnA#W=Lumce*>_9^e*lipqWM8q*G zIqzdP;#~FIzxNN5ZSVUvTZf#EvY2KA%p_x5GmGps{%1~1D;INPT7Un1av>HYw*M9S z|6=>URC+mL`@fQ0h5xAiuTvM)t796bs3&Ht7Z#}(&_qwM-wWSI9HhLB@czqZ9X27Z zEm=8g6#LWtzv2Gha{qU_|9jp4t?oba-R}RO=mW6*?U(LR{~?3ctLndtz6mFYl(B2yR_fk)7&@rHILez=HK}J5NfuweaP4+e}qh+X|4AN zjjO#^%VPOtXCURbG}_Qp!FDElKgni{Y4`j@O!F~vzZe}((odsL47uVr#ugZ3a3-d| zFfg1WFW?fc;Ng4JOOJD+D?evE!jDIV>(YI=iQBk~`>4}LTtC44d-LcMWMe<`?+2NG zKh6AmT(eLACF)!ZMhS*uI7XuVl==7P&A&fu{=K#LyY5(j|6S|v@3;Owjy`Gr{nO^( z%PVcZeG5I~SgnrLW;{W9dub?@&p3?71hl?pA55gjJUe?z!({qYR9BaxZN|VHWr|qUh|Z(5@Z!> zjTP8I?n1&jHXQd3p7Jh|smo3Td<+2BIoS$aQ@!~`XyXJFZw>=-6F3?9XF$t&u#K9?xX+z;TXoX4}x_@s4)>64LXv*hrw|FLcgA7m>#1%GP% z@0NSN8~;7s|0~7PtE>}LMz8pKQD~p-`J;1@=Z`LWH*y=*4=9ZPtvB|d+qq_pJ>d6b z(CW81{&%K)W?>HIVm=mPG5Y>>Okw^*&sV%7(!Iu>FDF-G71kh*|6NCJz$TRA;rQQe z^u*JyO>Cu#z5}UY{4ONN^244Id*S=m^L-l@@PAkEe>d|j$-+FjW!eP)*@ZpWhl2ge zZj9^S9*{2hzkJ}%JHPe+`Muo--{=4K@PBa(>3jTNK5vHa8`sHiyJ*{GW7p+VjUz}P z{+7AL|E6c3ls78bVO3&;d2xx{SjQl{oO{|nF^13<_eJetbtriPHR1>l*A+M^eHu+G zzp8s$~^{t-QeGyZc97jOwz(2Hxhj`p4Wf7cxQHnKI&soS}& z_54wofA79DzvcSlwW8&eYeTF3+A_BF<8RC7CT`;{T1VJt2%nE$SbxCz^nUT` zE{j*aW$jJ-#5H_s>812a54`Gi?em+_Kh{1gJIT@7XEG(-^TzPd`!O+skI+BsT0Uk? zPX8N^3F!S-Yk!bE<`+yRr=suE_WSvhVLCmo#hsk@Al8>!;eG6Ib^ zLz(?%Vit10E)H|ZxtNc_cLdlAxn*L0Xn$8co?r2By|MT$)XaH)q3dfSkMfrb@p$R9 zbgwpbp?um5ZC|7{j4PP z_+EXrZM|DOFLusWw#%zHV%z@JrQy48mWBhTMuzWg{CGIH{^Q||H%Ep;cdU2mJ=*=^ zN5i+8uZKOWhlg*!H9YJ+J2brh;)ktK`Qh-Lw}yso3x4jq?LQAy@=Bm;=jc$m`(t7I zw2xT>b41uNWR!3888_&+Gr#_>P<}>P+&+7mBta9|JaO~b^#dpoA zJNv0{L7taz1--b2>xedX9CP&QMKMw7x*_5l;u;Oc3?vqaZ-^Bn*NShf7vET25^mb( zE*^Y;#F|s|{$EuVF&ORo@jK=jBY-TrRu~(wTE97&A8q`@Xz`Kb;v-0-U*!_VIfuJv%@QLyTn{eLV7FFS&kV7sJFbFu}I!-6dfnIT^K? zk}#E=j+(8m>!9m;&NvF`nP__6b-BjId9D+6Tdn_y1|-mkB$}FitKzUVG5u!_=3+h; z;?)lKkZrvM?NhA3IYW$JeUaVk{od*Q&UnAIcX{&YYURy)e(ZVepLVFlzM0Y5zhTDU z73-sx-%_Oe6^G?yhFnEfsB>D)Pt1L~D6EmrYMsog z_@XItgSy!27$*zBB-9e4d`X?FdN-|F79 z)$PY? zpc&VD$@c7K=eFM3Z1i5_r+GH6w|l{Zx~O`}fUwf`3%G{ssNHQ&>679M^hCF@cNuE| z(QhMlNB`?B{jYoVzhaAeW-DIhXQy{s%iKP3>|FeY(0zLUWy%UVU*M}h&u3r4cYlr# zk30tZtpvA~tD)p@j6^BMpbRvs5_MqE2#IXmlf1>)h7>MIcz(h<&t@uODS?mAM6N4Pv@u$#`7KQa^PVs;Fw7<9hSu_8mga7dw{{t=Tk_=kCpKadHv_ASO`Ru?h z>_MycH-mljhwsk;`XR(JokMKHx{%`&#W5AtemjC%Wj#TrP(yE+B<-C`OIQ4i-Jm?g zb@dxZD2K@X!!t21yyfBdJmZ|yBzwK-Y4!zKXz%W+uaAorvsLmjU$Pb_=#^h}f4^i6 zAo^*XL9ck-IkM-6;x}a9SCj?vO8gDia23RBgs;vpJt)68mz+xY(hD< zp$hHu%CvuF+P^aGUzz%^O#N4;{wq`em4&0Png5St=J2P{LeHReV_9gkPn&yPJ?+`B zLtf)i`&Yf z`nEcyvrC-c3(jwb^LxtqjV%jxFSz~%j)TMs`EHi)Yp%b;ad1Q)38aul8?wmb1lpG= zf9OOOUFb#*c^rMq^`CeBh-)3RSc@Q2@A}<~HdMRcC*^Y*XK)U+gPyhi;>Q`U!*SCHTGmFJ-QA zit?unHjydmq4pV$ktoGDjK>5_MEl$9ZFIiIzC{+#bI>vwhc57X&cd3EkK#+W`6@!MfJbfaslb^pUhLbZBi zmfz-}R^D^T`KX~coEKNTZ2ceU#fW2OQfPeBb&|bbdN%a@w9Fd2?&UMqj<8QGU(3mr zScO+AayRZlQ zZ~%wUZcTy?bndr?!ES38bXdaxxwFO2_`kdPzj);TYUdxe?~m61eV4C$kN-<%F0&8L|JMKIuV0YQC0s!-T0891Y|K18 z%a-WGHTpp0NAQW9SHb^xp0V6lUsZ2D$0kLsWAxeYCTebJS1-CQ6uy7;l72O9ZEA_@ z-0V8(b@C{zKltMN?2C=AUpj@`^0|xq=>Ik6fWauiQ2fuozp4C>;Q!;;R@aXfWYCH> z#BT=gT!;ZI>hp-@nlg71qD~6Xk!d|I9~R`(QD-6w9#^tMGf}pO4#hP}x*2 zbI51@^YXuCwfIAg@{?45vq{&;Gt;boz&d)x&pr?~ke%|)?v?*e`A?ER@`z=Bli#<0 z{l!pDZbR)o{Sc_4CoZZ3&gv_O^WVFa{mtqu-|$IWN7&o1o2KJ*>+{`}aO9{M5l zzAU!!y4Xg$c{o2c-`ch#NFaqY+EDR%?fRFCLm@sk#r4e4A7OhQCs6qQ-&cymY5EzQ z!v$Qz74+g7uA>h(qvY>bG!~ox<2{t_Wgpxn@1y?;?;_%u@4;jVhGID4+QM;-xsmij z|KnJ50_fwA7eC0MTc1$Z)7t;1jW3^~k9!8+gDi~y->zQ~sg5VYNyi%Re-khfaqWk# zhmg{A(p94oO3Yp@O*unFz%Q^!vJ zKbbwq|EG7yYs&Ed#dnY1aQ!%j^qa2#xVZ&rMH{N`JQ2#}vkg_)f!ZO)AB=b+?4rkK z(tthmeMk*(Zb;fEu3=bs--dY}qs3$WehAg5c%2P`%Fp>O%+HNAi2p?zZO9^zy4U!> zyOsaF?DP(H`FVCZKe-91TgC?1=Oj+!4B}k;bL0hFLc4O*p&WH0i!OAZQa*1epE$ac z|NFf5{{?M5*|J3YPqs?8k#YRW75Vhy8m^=DdG<5AppTy2D(~68aZA6AymW5AW9)V; z@~&;wi_AGB`~P3=T|fP$%pK z%}<|>GIT!2K17$Y+5LiNL+0;@|NCtg=3p-7V<8r!?`O{ArJ~UDZ{9=c-ci=MBv)b; z)}VTl7zkPMN#lUYO{jg!{NJ%32<7yL^Srmwcc3uu=ahb+K*PsufFwQtUw$yP$j(!l^=UBKA`=q`1eI^ly)qOuHD+EgW9OQ;_$B-|2A9u zhu{1D?hWl9+Hkao|BhpW`0r>L!GA|9y$yx+1&aCawq?;}TQ?rA@4Lsj9P#Y;kq2-H z)o~jVsJmhO0)M`NpP#s_-~ZJ6<}V(0%%@zZ{nBVd7OhLPzhj+$Olxa9ae{sldF^Ws z-H5UN)3#N!BhHZLP&LtaA7iU+ZSg!cA|bT69jI3602M4kWE^U)h-8-L)PXynT$ z$tLeeioE7O?;jsCqYd{~qIi zkVc{Z`)&Q-{L40E2Pj_`jgS9yod2lI7As%2JsjT?znOE_vF@Y7@BLT0KUbAcb;Ce< zVcpE<%%`E3poyNEt$fW>zA)6b_-)SNIPfwp6mGZs4(8X6EG2zF%{EMhK|i*kcew&2w*%NA;vJVWoX8;1aH&c9He}=Zy)y z^!QEshS}zcKc>9D_rQ{*#4K4jMr{~K)#fIRZ@ z>i;+FAl&wT4kk-56vHtRb!UBF0EKY?-GA_XfrF*imKzgF?KckNF#)x<)nFn$;o2LX z8xtnery^y0lXTMdM)&Cb?eBEImtiIV=0znC01b#)}gTe{Bh+US#;s|*8lgsn{n(Zu|BlS zU>iR9yYZ*l)#6jwAg@h$v_Ai3@hQZ4^X0a0Llr8#i>(`#|F!zAq#Lv~agC{6^gSqi zH*`BYVm~_q`)sSW{{iw4YUNi=9zo3%Yly8LAGYoMi%?mo9rb=y?*GeB_145tG2}19 zcKSb#{czav)Q3aD{we&^?vI9DqdywHIpo7(=a7$vZ?FA$*mL#cA?>%m*Z(ej=Z5tk zu8s+>&;EGWJ7P@uo^v~(4$JyIj}z$m#D~KhH?;4c_-HsZwlw_n@zQW`|H$yh(<6Ns zPCr`r@UVZ{@bKN{;bGrvL&JCKhlag)ef?jCJ<}$d|28q~Zk`yvHDyBBmHhM2`}d{c z{|!O>&YJwn*h$COa)VugT;0HMTKWvmAwK`UPnU)Z^h@aZp>p;U@xPaSU!lube%pF+ z4Ha+jfyvxU{zKlxZS;Le{I6(CxJ$o}{x2#67>p7O#c+(omKp5zLFxzXUa55T9sQW> zvcr@5hws0o{LNk)n)|&RjtzP_q{nU!E&cvJWQP5Hm?hsfjPsw|r`S1+x{Jnv`{8tvC7RV`Avv2#G=85VQJ5NRD0~ znl^r29Omnx?kfA^2Kxhvr`aD<*dH_4A7n~;y8O#96SFV}b1@$a(SDEpu~QqpU0s>f zCU^e!}QHm-3V zJLFCC?A9B9_#*oR4I9}f7uf~3*afbsu>Rmx_4_H$57FP+l{f@;QP8QfS?5jvmtV zY_qw2i_F!FI`aF)w)UFiXU+evdUO12tIiaK6XZ$MP8$$TlV?yvZy4>l-Wm|jNnb$I zSpXCGk; zyKO7`?NzexU&R{O1--v23O$d-bw7$i-(M;FpD40!)#G8J|4&9wMZYkW?ER^JDY6U| zKPnFCQ~U{fM*9)x0L-G#!CZ7|OR`Dre~0!TIeNZ^f6D)Fex85&9RCz8^vnzV)3y9l zv~T6#q7zwkp&L2mF;L#~u@H-~&wX4-f=y^$%t{zvtz-MBdLi22$(!;Qq4*`)~k

mx< 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�s0Gt3cvMqQyg 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 z{D1iW@c-fe!~ci>5C0$jKm33A|M36e|HJ=>{}2Bk{y+SG`2X<#;s3+`hyM@%AO1i5 zfB66K|Kb0`|A+q%{~!K8{D1iW@c-fe!~ci>5C0$jKm33A|M36e|HJ=>{}2Bk{y+SG z`2X<#;s3+`hyM@%AO1i5fB66K|Kb0`|A+q%{~!K8{D1iW@c-fe!~ci>5C0$jKm33A z|M36e|HJ=>{}2Bk{y+SG`2X<#;s3+`hyM@%AO1i5fB66K|Kb0`|A+q%{~!K8{D1iW z@c-fe!~ci>5C0$jKm33A|M36e|HJ=>{}2Bk{y+SG`2X<#;s3+`hyM@%AO1i5fB66K z|Kb0`|A+q%{~!K8{D1iW@c-fe!~ci>5C0$jKm33A|M36e|HJ=>{}2Bk{y+SG`2X<# z;s3+`hyM@%AO1i5fB66K|Kb0`|A+q%{~!K8{D1iW@c-fe!~ci>5C0$jKm33A|M36e z|HJ=>{}2Bk{y+SG`2X<#;s3+`hyM@%AO1i5fB66K|Kb0`|A+q%{~!K8{D1iW@c-fe z!~ci>5C0$jKm33A|M36e|HJ=>{}2Bk{y+SG`2X<#;s3+`hyM@%AO1i5fB66K|Kb0` z|A+q%{~!K8{D1iW@c-fe!~ci>5C0$jKm33A|M36e|HJ=>{}2Bk{y+SG`2X<#;s3+` zhyM@%AO1i5fB66K|Kb0`|A+q%{~!K8{D1iW@c-fe!~ci>5C0$jKm33A|M36e|HJ=> z{}2Bk{y+SG`2X<#;s3+`hyM@%AO1i5fB66K|Kb0`|A+q%{~!K8{D1iW@c-fe!~ci> z5C0$jKm33A|M36e|HJ=>{}2Bk{y+SG`2X<#;s3+`hyM@%AO1i5fB66K|Kb0`|A+q% z{~!K8{D1iW@c-fe!~ci>5C0$jKm33A|M36e|HJ=>{}2Bk{y+SG`2X<#;s3+`hyM@% zAO1i5fB66K|Kb0`|A+q%{~!K8{D1iW@c-fe!~ci>5C0$jKm33A|M36e|HJ=>{}2Bk z{y+SG`2X<#;s3+`hyM@%AO1i5fB66K|Kb0`|A+q%{~!K8{D1iW@c-fe!~ci>5C0$j zKm33A|M36e|HJ=>{}2Bk{y+SG`2X<#;s3+`hyM@%AO1i5fB66K|Kb0`|A+q%{~!K8 z{D1iW@c-fe!~ci>5C0$jKm33A|M36e|HJ=>{}2Bk{y+SG`2X<#;s3+`hyM@%AO1i5 zfB66K|Kb0`|A+q%{~!K8{D1iW@c-fe!~ci>5C0$jKm33A|M36e|HJ=>{}2Bk{y+SG z`2X<#;s3+`hyM@%AO1i5fB66K|Kb0`|A+q%{~!K8{D1iW@c-fe!~ci>5C0$jKm33A z|M36e|HJ=>{}2Bk{y+SG`2X<#;s3+`hyM@%AO1i5fB66K|Kb0`|A+q%{~!K8{D1iW z@c-fe!~ci>5C0$jKm33A|M36e|HJ=>{}2Bk{y+SG`2X<#;s3+`hyM@%AO1i5fB66K z|Kb0`|A+q%{~!K8{D1iW@c-fe!~ci>5C0$jKm33A|M36e|HJ=>{}2Bk{y+SG`2X<# z;s3+`hyM@%AO1i5fB66K|Kb0`|A+q%{~!K8{D1iW@c-fe!~ci>5C0$jKm33A|M36e z|HJ=>{}2Bk{y+SG`2X<#;s3+`hyM@%U;e-RfBFCN|Kc{=fWxr~3K-PW4aqPxVjrPxVjr zPxVjrPxVjrPxVjrPxVjrPxVjrPxVjrPxVjrPxVjrPxVjrPxVjrPxVjrPxVjrPxVjr zPxVjrPxVjrPxVjrPxVjrPxVjrPxVjrPxVjrPxVjr&*-1gKcjy}|BU__{WJP!^v~$$ z|I7cE|L=_c8T~W*XY}*`<^Rk7m;W#SU;e-RfBFCN|KUK_0Q^`)zANz z|L?5+S^cy6XZ7>{<^Rk7m;W#SU;e-RfBFCN|KA%u{rTXgCaNSEgm9{aJQq2g7=U2_h5;A`U>Ja50EPh=24EO~VE~2! z7zSV%fMEcJ0T>2g7=U2_h5;A`U>Ja50EPh=24EO~VE~2!7zSV%fMEcJ0T>2g7=U2_ zh5;A`U>Ja50EPh=24EO~VE~2!7zSV%fMEcJ0T>2g7=U2_h5;A`U>Ja50EPh=24EO~ zVE~2!7zSV%fMEcJ0T>2g7=U2_h5;A`U>JaX=>O3Fq5nfa24EO~VE~2!*oXcP{U7>2 z^nd98(Ep+TL;r{V5B(qdKlFd-|Iq)T|3m+!|I&Zyzw}@FFa4MPOaG<+(tqi{^k4cf z{g?hr|E2%Zf9b#UU-~com;OutrT@}@>A&<}`Y-*L{!9O*|I&Zyzw}@FFa4MPOaG<+ z(vJZc24I)|OaG<+(vJZc24EO~VE~2!7zSV%fMEcJ0T>2g7=U2_h5;A`U>Ja50CwxY z_22q${kQ&G|E>Slf9t>XV*rK$*scH8f9t>XV*rK$7zSV%fMEcJ0T>2g7=U2_h5;A` zU>Ja50EPh=24EO~-TH6+xBgrIt^d}4>%aBi`fvTW{#*a8|JHx&zxChxZ~eFaTmP;9 z)_?22_22q${kQ&G|E>Slf9t>XV*rK$7zSV%fMEcJ0T>2g7=U2_h5;A`U>Ja50EPh= z24EO~VE~2!7zSV%fMEcJ0T>2g7=U2_h5;A`U>Ja50EPh=24EO~VE~2!7zSV%fMEcJ z0T>2g7=U2_h5;A`U>Ja50EPh=24EO~VE~2!7zSV%fMEcJ0T>2g7=U2_h5;A`U>Ja5 z0EPh=24EO~VE~2!7zSV%fMEcJ0T>2g7=U2_h5;A`U>Ja50EPh=24EO~VE~2!7zSV% zfMEcJ0T>2g7=U2_h5;A`U>Ja50EPh=24EO~VE~2!7zSV%fMEcJ0T>2g7=U2_h5;A` zU>Ja50EPh=24EO~VE~2!7zSV%fMEcJ0T>2g7=U2_h5;A`U>Ja50EPh=24EO~VE~2! z7zSV%fMEcJ0T>2g7=U2_h5;A`U>Ja50EPh=24EO~VE~2!7zSV%fMEcJ0T>2g7=U2_ zh5;A`U>Ja50EPh=24EO~VE~2!7zSV%fMEcJ0T>2g7=U2_h5;A`U>Ja50EPh=24EO~ zVE~2!7zSV%fMEcJ0T>2g7=U2_{QD25tw#eG4PZ2Y(EvsR7!6=FfYAU(0~ifpG=R|n zMgtfPU^IZy07e5C4PZ2Y(EvsR7!6=FfYAU(0~ifpG=R|nMgtfPU^IZy07e5C4PZ2Y z(EvsR7!6=FfYAU(0~ifpG=R|nMgtfPU^IZy07e5C4PZ2Y(EvsR7!6=FfYAU(0~ifp zG=R|nMgtfPU^IZy07e5C4PZ2Y(EvsR7!6=Ffc>JM1~3}HXaJ)Dj0P|oz-R!Y0gMJP z8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn z1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y z0gMJP8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U z0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U0Q>y?qydZuFdD#U0HXnn z1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y z0gMJP8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U z0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|o zz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQt zFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)D zj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1( zqXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn1~3}H zXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP z8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn z1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y z0gMJP8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U z0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|o zz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQt zFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)D zj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1( zqXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn1~3}H zXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP z8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn z1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y 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 Axc~qF literal 0 HcmV?d00001 diff --git a/benchmarks/DASB/cache/31_char.vocab b/benchmarks/DASB/cache/31_char.vocab new file mode 100644 index 000000000..e7ce7b137 --- /dev/null +++ b/benchmarks/DASB/cache/31_char.vocab @@ -0,0 +1,87 @@ + 0 + 0 + 0 +▁ -1.74721 +d -2.53055 +a -2.61418 +y -2.76667 +e -2.76814 +n -2.7718 +i -2.89511 +r -2.93808 +o -3.11776 +l -3.22858 +w -3.39486 +h -3.53487 +f -3.63673 +g -3.6499 +t -3.83412 +s -3.92351 +u -3.96273 +c -4.0488 +. -4.0938 +m -4.10907 +b -4.43112 +' -4.54289 +p -5.23272 +M -5.28445 +, -5.46129 +D -5.8771 +C -5.90703 +R -6.10721 +G -6.20168 +Y -6.33222 +A -6.37426 +B -6.58809 +N -6.77213 +S -6.88324 +P -6.91365 +â -6.94012 +L -6.9774 +E -6.98247 +F -6.98247 +ô -7.09835 +T -7.1244 +? -7.21008 +W -7.28985 +O -7.34681 +- -7.44689 +H -7.49245 +ŵ -7.65796 +I -7.97267 +ê -8.17716 +J -8.30232 +U -8.49037 +ŷ -8.56183 +" -8.66582 +v -8.82915 +ï -8.94895 +! -9.19508 +j -9.2674 +î -9.49055 +“ -9.49055 +” -9.49055 +k -9.55508 +á -9.96055 +; -10.1837 +K -10.4714 +V -10.5584 +z -10.5584 +x -10.6537 +é -10.7591 +ö -10.8768 +û -11.3468 +à -11.57 +q -11.8577 +ë -11.8577 +‘ -11.8577 +: -12.2631 +X -12.2631 +Ŵ -12.2631 +¬ -12.9563 +Â -12.9563 +Ô -12.9563 +ä -12.9563 +ò -12.9563 +– -12.9563 +— -12.9563 diff --git a/benchmarks/DASB/cache/train.txt b/benchmarks/DASB/cache/train.txt new file mode 100644 index 000000000..05a44aab1 --- /dev/null +++ b/benchmarks/DASB/cache/train.txt @@ -0,0 +1,7953 @@ +Mae cysylltiad ystadegol cryf rhwng tlodi a chyrhaeddiad addysgol isel +Yr oedd pobl y llofftydd uwchben, hefyd, yn medru cymryd rhan yn y sgwrs. +Beth am fynd am dro i lan y môr. +Oes gen ti blwg sbâr? +Gellir cysylltu â gorsaf heddlu Casnewydd neu Crimestoppers yn ddienw. +Ydych chi angen unrhyw hyfforddiant neu gyngor ynglŷn â darllen? +Un o ffilmiau gorau America oedd One Flew Over the Cuckoo's Nest. +Nid anerchiad politicaidd a fwriadaf fi heddiw. +Gwisga dy sanau gwlân cynnes. +Mae'r llyfr yma wedi bod ar goll ers amser maith. +Cynhaliwyd Ffair y Byd yn Chicago yn un naw wyth tri. +Mae cynllunio statws yn broses fwriadol o osod statws ar iaith neu ieithoedd penodol. +Bydd hyn yn cael ei drafod yn ddyfnach nes ymlaen. +Rydym o hyd yn awyddus i helpu busnesau i arloesi +Daeth gwraig, darlun o lanweithdra a chynildeb, a glasiaid inni. +Mae'r dyddiau yn dechrau ymestyn. +Bydd hi'n dywyll cyn bo hir. +Mae'n gwneud marciau i gynrychioli rhifau wrth chwarae +Er hyn byddai'n derbyn y math yma o eiriau mewn cerddi llai mawreddog +Mae dilyniant penodol yn dewis siâp y protein +Byddwch yn medi'r hyn rydych yn hau +Aethom i gaffe i gael coffi a llaeth a bara menyn. +Sicrhaodd hyn bod y dysgwyr yn ffocysu ar batrymau perthnasol +Wnaiff y dillad ddim sychu ar y lein heddiw, mae'n rhy wlyb. +Cul iawn ydyw'r ystryd, oer a budr. +Mae'r ffermydd wedi eu rhannu mor fân yno. +Ffrainc yw'r ffefryn i ennill, yna'r Unol Daleithiau, yr Almaen a Lloegr. +Gall esiampl dda fod yn athro, rhiant neu ffrind +Mae tri chwarter o dir y byd wedi cael ei newid gan weithgaredd dynol. +Mae angen cychwyn ar dasgau'n syth er mwyn eu cwblhau'n brydlon +Dangosir y ddau syniad allweddol hyn yn y gerdd. +Cyfres deledu Americanaidd am wleidyddion oedd The West Wing. +Diolch yn fawr iawn i'r ddau ohonoch chi am ddoe. +Mae cymhelliant yn ffactor bwysig wrth ddysgu ail iaith +Podlediad Dim Rwan Na Nawr plîs +Rwy'n chwilio am garafán ail-law ar gyfer y Steddfod. +Gellir plotio'r bariau yn fertigol neu'n llorweddol. +Mi oedd hi wedi gweithio fel nyrs ers pymtheg mlynedd. +Gyda defnydd hirdymor efallai y bydd angen dosau mwy am yr un effaith. +Cafodd y sir weinyddol ei rhannu'n fwrdeistrefi trefol a rhanbarthau trefol a gwledig. +Gall brics gynnwys pridd, tywod a chalch, neu ddeunyddiau concrit. +Gall paratoadau trwy'r genau effeithio ar ddatblygiad y babi. +Mae gofod dau ddimensiwn, fel yr awgryma'r enw, yn fath o ddimensiwn. +Mi oeddan nhw'n hunan-ynysu ar Ynys Enlli. +Be' mae'r gair yna 'n feddwl? +Prif fwyd y siani flewog ydy coed conifferaidd megis Sbriws Norwy. +Erbyn roedd yn naw oed, ni allai ddarllen mwyach. +Mesuriad byr o amser ydy eiliad. +Gallai rhai elwa o reolaeth dynn lefelau siwgr yn y gwaed gydag inswlin. +Dw i'n siarad o brofiadau hunllefus ges i hefo nhw. +Dw i angen brwsio 'y ngwallt achos mae o'n flêr. +Wedi dod ar draws hwn wrth ddarllen ar gyfer traethawd ar ieithoedd. +Beth a wnawn ni? +Penodwyd Moelwyn Hughes i arwain ymchwiliad i'r trychineb. +Mi fydd angen camau cryfach. +Roedd Myrddin yn gwybod yn iawn ei fod yn wahanol i'r bechgyn eraill. +Dwi angen gwybod mwy amdano. +Roedd chwarae cardiau ac yfed cwrw. +Mae'r carped yn frwnt. +Oce dwi'n deall rŵan. +Roedd gan y reiffl hon bellter dair gwaith hirach na'r mysged. +Dyn gwlatgar ac annibynnol ei ysbryd yw Paddy, a dweud y gwir amdano. +Ond 's dim lot o siâp arno fe, druan. +Dim maddeuant i unrhyw un efo jyst twtsh o fol cwrw! +Hanodd o deulu dosbarth canol, Catholig. +Am ysbaid, mynychodd yr ysgol feddygol a dechreuodd addysgu dosbarthiadau iechyd cymunedol. +Wnes i erioed feddwl am hynny. +Nid oedd o yno. +Ymunodd hefyd â Phlaid Gomiwnyddol Japan. +Arferid defnyddio'r mesuriad modfedd yn yr hen drefn Imperialaidd o fesur. +Hyd hynny, ysgrifennai a siaradai'n bennaf yn yr Almaeneg. +Gellir cyfrifo cyfaint solid afreolaidd drwy ddadleoliad. +Ni phriododd hi erioed. +Cymunedau gwasgaredig yn sir Benfro yw Mynachlog-ddu, Llangolman a Llandeilo. +Cafodd adroddiad ardderchog, yn adlewyrchu ei ymdrech a'i bresenoldeb gwych +Mae wedi bod yn bleser cydweithio gyda rhywun mor gefnogol a chyfeillgar +Yr oedd wedi darganfod fod y llong yn agos iawn i'r porthladd. +Wedi cyrraedd, eisteddai'r dynion ar fur y fynwent. +Gofynna i Wicipedia Cymraeg beth yw Mwyalchen Y Mynydd? +Mae'n gyffyrddus yn y naill safle neu'r llall. +Mae hyn yn dangos sut i ychwanegu pennyn neu gynffon i'r cynllun argraffu. +Mae'r cyfleusterau addysgol yn cynnwys celf a chrefft +Sypyn ydoedd mewn papur llwyd, ac wedi ei lapio yn daclus. +Maen nhw'n byw yn y gogledd ers blynyddoedd maith. +Wedi noson fawr peidiwch â cheisio coginio o dan ddylanwad alcohol +Gobeithiaf y caf y cyfle i ymhelaethu ar yr uchod mewn cyfweliad +Gofynnodd Wil Ifan beth oedd yr helynt rhwng y ddau. +Ga i fynd â fy nghi gyda fi i'r nefoedd yma? +Ci oedd Sam. +Rhwng popeth, gŵr go ddigyfaill ydoedd Dafydd Tomos. +Rwy o leia yn cael gwaith cyson ar hyd y blynydde ynte. +Dywedodd wrth ei fam pa beth oedd wedi digwydd. +Bydd cawodydd trymion ar y tir uchel. +Ni byddent hwy yn mynd i lawr i'r traeth bob dydd. +Roedd ein symudiadau yn adlewyrchu ein cymeriadau +Diolch am roi'r cyfle imi geisio am y swydd +Wedi ymddiddan byr, aeth Dafydd ymaith â gwn Siôn Huws ar ei ysgwydd. +Wyt ti'n clywed y durtur yn y coed? +Hwyrach mai y cinio oedd heb fod wrth ei fodd. +Yn ogystal, pwysleisiaf bwysigrwydd cydweithrediad ar gyfer y dasg hon +Sut mae modd gwneud cartref diogel i ni a'r trychfilod? +Gawn ni ddod â ffrind gyda ni i chwarae? +Wedi ei gladdu, bu'n sefyll yn hir uwch ben ei fedd. +Cafodd fraw pan welodd Pero yn dod tuag ato a chwningen rhwng ei ddannedd. +Roedd yr oergell yn wag. +Does neb call yn mynd ar eu gwyliau ar hyn o bryd. +Mae wedi rhoi'r gorau i ddawnsio. +Meddyliodd hefyd tybed pwy fyddai'n edrych ar ei hôl hi. +Aeth ac eisteddodd ar gadair wrth y tân. +Chwifiai ei gap, a'r llaw arall yn pwyso ar ei ystlys, yn ddidaro. +Gan dy fod yn chwarelwr rhaid i ti ymddwyn fel chwarelwr. +Roedd plant eraill fel petaen nhw'n perthyn i'w mamau a'u tadau. +Y mae adeiladau o'i gwmpas bron ym mhob cyfeiriad. +Pam ges i'n anghofio? +Yr oedd mam Siôn Morys yn ofni'r môr yn arw. +Dydi e ddim yn gallu darllen eto. +Roedd y wifren i dynnu'r mellt ati a'u harwain i'r ddaear. +Roedd Mary wedi hoffi edrych ar ei mam o bell. +Pam na wnei di roi pentwr o gerrig yn fan 'na? +Safai'r coed yn fud ac yn llonydd o'i chwmpas. +Hen beth bach diniwed oedd y neidr. +Gweithiai mewn siop lle cedwid amryw gryddion. +Pan ddaeth, nid oedd ganddo syniad yn y byd am Gymru na dim Cymreig. +Rwyf wedi atodi posteri sydd yn hysbysebu'r sesiynau +Wrth deithio ymlaen, daethom at dŷ newydd rhyw ddegllath o'r ffordd. +Gellir troi i edrych ar ffactorau allanol, megis mewnfudo ac allfudo. +Yr oedd yr hen greadur wedi cael ergyd o'r parlys. +Mi sylwais ryw ddiwrnod fod cyfarfod i'w gynnal yn y dref. +Cerddodd drwy'r orsaf i'r cerbyd trên gyda'i phen yn uchel. +Fe gafodd hi ei gadael ar ei phen ei hun. +Cyhoeddir y Western Mail yng Nghaerdydd. +Roedden nhw'n meddwl nad oedd Mary yn gwrando. +Peidiwch fyth â chymryd dognau mwy neu fwy aml +Bydd gweithredu argymhellion yr adolygiad yn ceisio sicrhau rheolaeth achosion barnwrol gadarn +Roedd hi mor dal, main a phrydferth ac yn gwisgo dillad mor hyfryd. +Adeiladodd y tylwyth teg bont o dywod. +Doeddwn i ddim yn meddwl i chi ddeud hanes eich teulu. +Amcanion y wers oedd addysgu sut i gyfrifo gwerth arwynebedd siapau cyfansawdd +Mae angen i ni ddadansoddi effeithiolrwydd cost a model gweithredu'r ddarpariaeth hon +Craidd prydferthwch y pili-pala yw dycnwch y lindysyn +Mae angen gofal mawr gyda phreifatrwydd a materion hawlfraint wrth gasglu corpora. +Bydd rhaid iddyn nhw ddilyn y gerddoriaeth er mwyn creu dilyniant o symudiadau +Dewiswch eich hoff artistiaid a ffotograffau o'u gwaith +Nid yw'r pleidiau eto wedi oeri. +Cafodd ei anghofio gan bawb. +Gellir cynnwys rhestrau geiriau helaeth sy'n rhestru pob ffurf bosibl. +Roedd hi'n darllen yn ddistaw yn y gornel. +Roedd y canu cefndir yn dda hefyd. +Roedd ei mam hi mor brydferth. +Yr oedd yn ddyn cyffredin go anghyffredin hefyd. +Pwy yw chwaraewr y gêm? +Rwyf bellach yn gyfrifol am asesiadau risg tripiau ysgol hefyd. +Nid ydyw'r hen arferion ofergoelus wedi eu halltudio o'r wlad. +Roedd yn digwydd go iawn, ac roedd yn erchyll +Roedd Gwynfor yn ymgeisydd dros Feirionnydd. +Gallai unrhyw un ohonyn nhw fod wedi ennill. +Mae yna reswm ac achos y tu ôl i bob profiad. +Y term Cymraeg am ‘odd number' yw odrif. +Rhaid i chi fynd i Lundain eich hun i'w chasglu hi. +Cyn hir roedd hi'n teimlo'n gysglyd iawn. +Roedden nhw yn agor drysau ac yn edrych mewn i stafelloedd. +Roedd hi'n gwybod nad oedd hi'n mynd i aros. +Wrth odre y creigiau mae digonedd o fôr lysywod. +Diolch byth fod y gwanwyn wedi cyrraedd. +Rwyt ti'n mynd at dy ewythr. +Prin y gwrandawai arnom ni, yr hogiau eraill, yn siarad. +Dw i ddim eisiau fe. +'Dan ni'n dod o'r un brethyn. +Doedd hi'n methu gweld unrhyw beth, dim ond tywyllwch dudew o boptu. +Mae o'n gwybod ein bod ni'n siarad amdano fo. +Byddai Mary wedi hoffi gofyn rhagor o gwestiynau. +Yn ei syndod siaradodd gydag acen lydan Swydd Efrog. +Aeth hi drwy'r drws i ardd gyda wal o'i hamgylch. +Edrychodd Martha fel petai ar fin gwylltio. +Dyro mymryn o driog neu bach o siwgr arno fo. +Welsoch chi erioed y fath gyfnewidiad. +Y cyfle cyntaf a gafodd, aeth ati i ddal cwningod drachefn. +Edrych arno'n pigo o gwmpas fan 'na ac yn edrych aton ni. +Hoffet ti fod yn ffrind i fi? +Cododd ei llaw yn serchus arna i wrth fynd heibio. +Roedd hi'n berson heulog, braf a serchog yr olwg. +Dw i wrth 'y modd gydag o. +A dyna lle yr oedd dillad Siôn yn swp ar y traeth. +Ar y dechrau doedd ganddi ddim diddordeb o gwbl. +Merch gyffredin oedd hi wedi cael ei magu mewn bwthyn ar y rhostir. +Ti 'di'r hogan fach o India? +Mae dylanwad technoleg a systemau cyfrifiadurol wedi cynyddu nifer y myfyrwyr yn bendant. +Arferai fod ganddi gymdogion, nawr mae ar ei phen ei hun. +Cyn bo hir daeth hen ŵr gyda rhaw dros ei ysgwydd drwy'r drws. +Roedd nifer o bobl yn siarad am eu gwyliau. +Ceisiodd obeithio na ddaliai Pero ddim rhagor o gwningod. +Ci fy mrawd oedd o. +Roedd eu gwaith cerfio yn gywrain iawn. +Cnociodd ar y drws cyn mynd i fewn. +Rydych wedi dŵad yr holl ffordd o'r America i weld yr hen gartre? +Dangoswyd nifer o brojectau da i amddiffyn bywyd gwyllt. +Byddwch chi'n cael mynd adre yfory. +Welis i erioed ddim byd neilltuol iawn ynddo fo. +Mae'n gais arall i orffen y gêm. +Wnei di gau'r llenni os gweli di'n dda. +Mae gen ti ormod o gynffon i bethe'r Plas 'na o lawer. +Aeth y trigolion yn benben, er na wyddai neb yn iawn pam. +Drysau glas oedd i bob ystafell. +Ei ddifyrrwch pennaf fyddai mynd i chware i'r llyn mynyddig. +Teithiai llawer o bererinion at y ffynnon sanctaidd. +Yr oedd hi yn noswaith hyfryd ym mis Medi. +Roedd wedi torri pob potyn oedd yn ei gyrraedd o yn yfflon mân. +Wyt ti am ei wneud o yn llyfr? +Geneth hardd anghyffredin oedd hi, dal a syth. +Roedd yno deisen lemon, bara brith a threiffl mefus. +Mae daearyddiaeth yn bwysig iawn. +Prin y bu ddeuddydd nad oedd o wedi'n credu ni. +Yr oedd Siôn yn ddeg oed cyn gweld y môr o gwbl. +Cadarnhawyd dau achos arall o'r coronafeirws yng Nghymru heddiw. +Prynodd Siôn rewgell newydd. +Mae'n edrych am y bwlch. +Maen nhw newydd ddarganfod cerfiadau allai fod yn ysgrifen. +Cerddodd drwy'r drws a'i chael ei hun mewn perllan. +Rwyf yn deall hyn ac yn dymuno'r gorau i bawb +Faint o bysgod sydd yn y môr? +Yr oedd hithau yn sefyll ar y darn pren a'i breichiau ymhleth. +Trwy'r ffenestr yr oedd llecyn gwyrdd bychan i'w weled. +Rwyf yn gwerthfawrogi ei chyfraniad i'r dosbarth. +Mae'r mwyafrif o entrepreneuriaid yn rhannu'r un rhinweddau. +Bu allan ohoni am amser hir. +Yr oedd y gwasanaeth yn rhy faith o lawer gennyf. +Os byddech chi'n ymweld â'r castell byddai'n tawelu eich meddwl. +Hyd y gwyddom ni mae'r dyddiadur yn llawn +Cyn y rheilffordd, dŵr oedd y dull mwyaf effeithlon o gludo. +Mae anhawster mynediad hefyd yn ddewisol iawn. +Llwgodd nyddwyr a'r gwehyddion yn ystod y newyn. +Gall plant bach adeiladu strwythurau cadarn a chymhleth. +Tractor lliwgar yn y cae. +Y gweinyddwr taleithiol sy'n arwain y fiwrocratiaeth daleithiol. +Fodd bynnag, gellir gwerthuso a mynegi economi'r byd mewn llawer mwy o ffyrdd. +Mae'r mwng, cynffon a bacsiau yn syth, sidanaidd a niferus. +Un ffordd oedd bod yn byw ar y tir yn weithredol. +Mae'n gyrchfan poblogaidd iawn i dwristiaid ac yn fan pererindod yn y wlad. +Wrth adael, estynnodd Abraham sofren felen i mam. +Nid oedd haul yn tywynnu arno am rai wythnosau yn nyfnder y gaeaf. +Trois ar y dde hyd ffordd a'm denai i'w chysgodion. +Roedd e'n sioc darllen hwn ac yn awr rwy wedi newid fy marn. +Bydd raid i fi yrru neges atyn nhw yn dweud fod Gwen i ffwrdd. +Mae'n rhaid gwneud ymdrechion arbennig i'w diogelu yn y byd digidol. +Dim ond tipyn i jips a grefi gafodd o i ginio. +Daeth trefn newydd i rym, sef Safonau'r Gymraeg. +Safle caer yw safle mynwent Llanfihangel yng Ngwynfa. +Er syndod iddi, nid oedd y rhisgl garw yn brifo'i chefn. +Does dim rhyfedd iddo orfod cael triniaeth i wella mewn ysbyty. +Roedd yn rhaid i bawb siarad Lladin er mwyn cyfathrebu â'r llywodraeth imperialaidd. +O ganlyniad, mae'r Amason yn ecosystem lai dwys sy'n peryglu'r fioamrywiaeth. +Y rheswm am hyn yw bod cyfle i ennill lle ym mhencampwriaeth yr Ewros. +Beth ydych chi'n credu sydd angen i chi weithio mwy arno? +Bwthyn bach cerrig oedd gan y teulu, a thair ystafell iddo. +Wnes i ddefnyddio'r meini prawf asesu trwy gydol y prosiect. +Byddaf yn gorfod arfer cyfrwystra mawr i guddio fy anwybodaeth. +Er mor flasus oedd y bwyd, y gweinyddion a wnaeth y profiad yn bleserus. +Mae llythrennau syml, plaen, yn fwy darllenadwy na llythrennau ffansi. +Yr oedd gennyf ddu neu dri cae i fyned drostynt ar fy ffordd adref. +Wrth gyrraedd y gwesty, cawsom de rhosyn a phwdin traddodiadol. +Dyma'r cyfarwyddiadau fydd yn cael eu rhoi gyda'r gêm. +Arhoson nhw'n llonydd iawn rhag i'r arth ymosod arnyn nhw. +Nid ydyw Awst wedi darfod. +Rwy'n barod am baned arall erbyn hyn. +Mwy nag unwaith bu bron iddi faglu ar y tir anwastad. +Rhybuddia adroddiad y Cenhedloedd Unedig bod hyd at filiwn o rywogaethau mewn perygl. +Daethom at le yr oedd yr afon a'r ffordd yn ymrannu'n ddwy. +Clic ar glic bob awr o'r gloch. +Mae tair lefel yn cael eu gweld yn y persbectif clasurol. +Yn ogystal rwyf yn mwynhau chwarae pêl-rwyd yn fy amser rhydd. +Cadarnhawyd fi yn y syniad fod ganddo ryw gynllun i'n gwaredu. +Cytunodd awdurdodau India i gyd-weithio â'r Swyddfa Dramor i'w helpu. +Cyfarwyddodd torrwr cerrig fi i ffordd gul oedd yn gadael y ffordd fawr. +Carlamai trwy'r coed fel hydd fach ofnus. +Ond nid hon yw'r unig agwedd bosibl. +Ni fynnwn i er dim i chwi fy nghamddeall yn y peth hwn. +Oddi wrth y llyn arweiniai ffordd dywodlyd i fyny at y tŷ gwyn. +Na feddylier fod Ap Vychan wedi byw'n fachgen gwyllt. +Gallai rhywbeth ddigwydd i ti, a thithau'n bell o gartre. +Ochrau rhedynog oedd yno, a gwartheg duon. +Beth yw'r peth gorau i mi wneud? +Rhedais drwy'r glaw bras trysfawr i'r hen westy hwn, a dyma fi. +Yr oedd y bechgyn oll yn bresennol, ac am unwaith yn ddistaw a llonydd. +Defnyddid y cen i lifo dillad, ac nid oes bosibl cael lliw prydferthach. +Gwelsom lawer hafan brydferth, ac aml gip ar y Traeth Mawr a Chastell Harlech. +Dywedir ei fod yn trechu planhigion ac anifeiliaid brodorol. +Ni chlywir sŵn symudiad y diferyn dŵr gan y glust feinaf. +Roedd y delyn yn canu ac arogleuon hyfryd yn y gwynt. +Roedd systemau diogelwch hanfodol wedi methu, cafwyd ffrwydradau a rhyddhawyd ymbelydredd. +Effeithia llygredd plastig yn sylweddol ar fywyd môr hefyd. +Bwyteais datws pob ddoe ac roedden nhw'n iachus. +Cododd o'i gwely a tharo siôl o'i chmwpas. +Cawsom gerydd lawer gwaith gan Abel Hughes am adrodd ein hadnodau mor wael. +Ymddiheuriadau, yn anffodus, dydi'r toiled yma ddim ar gael. +Nid oes digon o ddŵr croyw i gwrdd â'r galw am ddŵr. +Yn hwyr nos Iau tarodd awyren fynydd yn Sbaen, gan ladd ugain o bobl. +Dw i ddim yn gwybod beth sydd ganddyn nhw mewn golwg. +Y mae teimlad yn arwydd fod y genedl yn fyw. +Y mae'r dyffryn ymysg y culaf o ddyffrynnoedd Cymru. +Credaf fod yn y thema hon ystyr gwaelodol cryf megis llawenydd neu euogrwydd. +Roedden nhw wedi gadael y car yn y maes parcio. +Ganwyd Robert Thomas, Ap Vychan, yma mewn tlodi mawr. +Dwedwch os oes angen cywiriadau neu ychwanegiadau ar y daflen. +Cardodasant yn Sir Aberteifi, a chawsant lawer o ŷd. +Y thema ganolog ydy'r economi, tlodi a gormes. +Dyma bennill clo'r gerdd fuddugol sy'n sôn am brofiadau erchyll y rhyfel. +Dyma ffordd yn croesi ein ffordd ni, ac yn rhedeg ar draws y cwm. +Rwy'n hoffi chwarae yn y cornel chwarae rôl ac yn y toes. +Yr oedd ganddo rhyw allu rhyfeddol i newid gwedd ei wyneb. +Mae hyn yn dangos y gwymplen yn y ddogfen. +Rydym wedi gweld agweddau mwy cymhwysol ar wyddor ieithyddiaeth. +Dylet ti gael e-bost yn cadarnhau hyn. +Ni welwn o'm blaen ddim, cyfannedd nag anghyfannedd. +Gyda golwg ar fy ngwybodaeth, nid wyf nac yma nac acw. +Y dydd o'r blaen edrychwn ar ddau geiliog ar y domen. +Dyma gyfle, felly, i weld at beth y medrwn anelu. +Ofni yr oedd i fy mrawd ei dynnu ei hun i helynt. +Diolch am gysylltu, ond yn anffodus byddaf i ffwrdd yr wythnos dan sylw. +A ydyw teulu Ann Griffiths yn yr hen gartref o hyd? +Mae hefyd yn dylanwadu ar sut mae ymennydd plentyn ifanc yn datblygu. +Serch hynny, mae'r trafodaethau wedi methu hyd yn hyn. +Ceir rhai ardaloedd o siopau lleol a siopau cornel. +Mae'r digwyddiad yn tynnu sylw at y pwysau a roddwyd ar fenywod. +Dau brif raniad o fewn geiriaduron yw rhai disgrifiadol a rhai rhagnodol. +Mi fydda i'n meddwl llawer sut y bydd hi arnom ni. +Mae rhai llwybrau traddodiadol yn cynnwys gyrfaoedd mewn therapi iaith a lleferydd, a newyddiaduraeth. +A diolch am y sylw i'n gwaith. +Mae gennyf fi barch hyd yn oed at y rhai sydd yn eich camarwain. +Yr oedd arnaf frys am weled amser gwely. +Rhaid adnabod ymddygiad gwirion ac ymddygiad call y bobl sydd ar y stryd fawr. +Yn y cwch dywedodd rhywun tirion ei fod yn talu dros y plant bach. +Annwyl ffrindie, dyma adroddiad sydyn i chi am y gweithgareddau. +Mae llawer o seigiau poblogaidd yn cynnwys y ddau fath yma o gig. +Beth allech chi ei wneud gydag ieithyddiaeth neu bwnc cysylltiedig arall? +Gadewch i ni gan hynny droi ein holl feddwl ar y mater pwysig hwn. +Serch hynny mae ei berthynas agosaf wedi cael ei hysbysu. +Yn gyntaf bwydwch hadau a ffrwythau i'ch parot ddwywaith y dydd. +Nid rhosynnau na blodau gardd sy'n tyfu yno, ond blodau gwylltion Cymru. +Cymharodd y plant y lluniau mewn ffordd effeithiol. +Tybiai ar y dechrau fod y coed eu hunain ar dân. +Diddymwyd Bwrdd yr Iaith Gymraeg o dan y ddeddfwriaeth newydd. +Deuai lleisiau hudol tuag ati ar awel y nos. +Cyrcha bechgyn a genethod yr ardaloedd cylchynol yno ar nawniau Iau i ddawnsio. +Bydd angen cynrychiolwyr o bob dosbarth wrth y byrddau er mwyn gwerthu'r cwcis. +Ysgrifennwch gan greu brawddegau yn ymdrin â'r person cyntaf a'r trydydd person. +Yng nghongl yr ardd cafodd fy nau gyfaill a minnau ymgom faith a chyfrinachol. +Os edrych y teithiwr ar ei aswy, gwêl gofgolofn o wenithfaen. +Mae'n gwneud i mi feddwl am y darlun ehangach. +Ffeindiodd hi'r allweddi o'r diwedd yn cuddio yng ngwaelod ei bag. +Clywn y defnynnau'n rhedeg i lawr rhwng fy nghrys a'm croen. +Yn wyf yn ddiolchgar dros ben i chwi am eich teimlad da tuag ataf. +Roedd y strydoedd yn llawn sbwriel a fandaliaeth ac roedd thor-cyfraith yn cynyddu. +Yr ydw i yn gobeithio nad oes eisio llawer o nyrsio arna i. +Dylid ystyried cefndir plant a phrofiadau dysgu cynnar gartref fel dechreubwynt wrth gynllunio. +Roedd y gacen yn eithaf plaen ar phen ei hun. +Byddaf yn gofyn i unigolion holi ei gilydd o flaen y dosbarth. +Mae'r corpws bellach yn cynnwys tua chant a hanner o filiynau o eiriau. +Ni ddylid cynnwys plant â byddardod dros dro yn yr ymarferiad. +Roedd y cwpan wedi torri'n deilchion ar lawr. +I ffeindio'r trwynau coch mae angen i chi ddarllen map o'r ysgol. +Beth ydych chi'n ei feddwl pan rydych chi'n edrych dros y lluniau. +Yr oedd awelon oerion y gogledd a'r dwyrain yn ymosod arno yn ddidrugaredd. +Digon tebyg y cewch rywun y gallwch dynnu sgwrs ag ef. +Gwelwyd datblygiadau gan gyrff rhynglywodraethol y Cenhedloedd Unedig, yr Undeb Ewropeaidd a Chyngor Ewrop. +Roedd ei fam yn annog ei phlant i gael diddordeb yn y theatr. +Ysgrifennwch lythyr adref, gan ddisgrifio eich brofiadau a sut rydych yn teimlo. +Pan fydd ynadon wedi gwneud camgymeriad, dydyn nhw byth yn ceisio cywiro'r camgymeriad. +Roedd hi'n pwyso yn erbyn hen dderwen ar ymyl y goedwig. +Bwytaent oddi ar yr un bwrdd, ac yr oedd eu bywyd yn hawddgar. +O'n blaenau dacw Foel Llyfnant a'r Arennig. +Y mae Tŷ'r Ficer yn hen dref Llanymddyfri. +Digon tebyg ei fod ef yn brysur tua Chalanmai yn chwilio am nythod adar. +Mae'r rhain yn rhesymau pam mae'r heddlu yn arestio rhywun. +Hen le cas, digysur, digroeso ydi'r goedwig yna. +Wedyn, cefais lifft i'r stadiwm gan fy ffrindiau. +Ond y mae'r cerbyd wrth y drws yn disgwyl. +Weles i erioed ddaioni o gadw plant yn rhy hir heb ddechre gweithio. +Ymguddia y bywyd yn rhywle yng nghalon yr hedyn bychan. +Diolch o galon am adael i mi ddod atoch. +Doedd hi ddim wedi arfer gyda'r math yma o beth chwaith. +Mae'r gwryw cryn dipyn yn fwy o ran maint. +Aeth yn athrawes yn y clasuron i Ysgol y Sant Paul. +Ac yno, choeliech chi fyth, oedd y robin goch ar gangen hir o eiddew. +Bu'n aelod o'r Academi Brydeinig am rai blynyddoedd. +Roedd yn un o brif noddwyr llenyddiaeth Gymraeg y cyfnod. +Roedd hefyd yn undebwr llafur ceidwadol. +Sgrifennodd hi lot o erthyglau i'r cylchgrawn. +'Dan ni angen cneifio'r defaid. +Cafodd ei addysg uwchradd yn Ysgol Brynhyfryd, Rhuthun. +Ganwyd John yn Rhiwlas Isaf, Llanrhaeadr, ger Dinbych. +Mae unrhyw nifer o bwyntiau'n bosibl. +Mae'n bosib fod ei dad yn gefnder i John Roberts. +Cyhoeddir casét i gyd-fynd â'r gyfrol. +Nid yw pob merch yn gallu bwydo ei babi yn ddiogel. +Dwi'n cofio pobl yn cyfeirio at y lle yn yr wythdegau. +Dydy o ddim yn yr erthygl. +Rwy'n paratoi i redeg. +Byddi di'n falch i glywed bod siop figan wedi agor. +Mi oedd yr arholiad yn sialens arthrol. +Dwi jyst isie tanlinellu nad rhyw brawf yw e. +Mae'n bosibl mai Geraint Saer o Iwerddon oedd ei dad. +Ti 'di codi'n gynnar iawn heddiw. +Bu'n aelod o Gymdeithas Frenhinol Canada am rai blynyddoedd. +Dwi heb ddarllen y darn eto. +Cyfrannodd at archwilio a chadw celf gwydr lliw canoloesol dros sawl degawd. +Dywedir fod y fflam yn dal i losgi ddwy ganrif yn ddiweddarach. +Nath o gostio lot o bres. +Defnyddir y capel heddiw fel amgueddfa i'r creiriau hynafol. +Cyfrol amrywiol, a dadlennol. +Oddi fewn i'r adeilad ceir darlun gwydr o'r hen garchar. +Yn dilyn hynny, ymunodd ag Undeb Cymdeithasol a Gwleidyddol y Merched, grŵp milwriaethus. +Bu yn ynad heddwch ar feinciau Sir Forgannwg, Sir Gaerfyrddin a Sir Frycheiniog. +Mymryn lleiaf erioed sydd ei angen i newid metaboledd y gell. +Cafodd ei eni ym Mangor a chafodd ei fagu ym Mhorthaethwy. +I ble'r ai popeth? +Lleoliad maes y gad. +Gellir gweld ei waith ar wefan y Llyfrgell, yma. +Gwelir y siani flewog rhwng Mai a Medi. +Petai gen i frân neu lwynog bach byddwn i'n gallu chwarae gyda nhw. +Yn yr un flwyddyn, aethpwyd ymlaen â'r gwaith o ddiffinio litr. +Be' 'sa chdi'n gael i fyta yna? +Roedd ei mam yn athrawes. +Am ryw reswm, o fewn y gwyddorau cymdeithasol, cyfeirir atynt fel archifdai data. +Dwi jyst yn dweud. +Dyw'r ddwy wefan ddim yn llwytho o gwbl. +Mynychodd y merched Ysgol Sant Henry, lle buont yn actio mewn dramâu ysgol. +Mae hi'n hoff o ista yn y cae gyda'r nos. +Mae Wil yn cysgu. +Mae'n ffrind i'n byw yn Rwsia. +Mae'r adar yn canu tu fas i'r ffenest. +Gwelir yng nghorff y llyfr mor ddiymadferth yw bechgyn yn y gymdeithas. +Casgliad llenyddol i oedolion gan William Owen yw Yr Un Mor Wen. +Ar yr un pryd, cafwyd gwarchae ar y Fenni. +Dw i 'di bod yn witsiad amdanach chdi trwy dydd. +Mi oedd y tywydd yn boeth ofnadwy tro dwytha i ni fynd yno. +Mae bellach yn amgueddfa ac ar agor i'r cyhoedd. +Nofel ar gyfer plant a'r arddegau gan Emily Huws yw Ned. +Mae'r hen draddodiad hwn yn parhau mewn rhai ardaloedd yng Nghymru. +Roedd ynddo ran ar gyfer golchi dillad a man storio. +Mae germaniwm, fodd bynnag yn hynod brin. +Dydi hi ddim wedi dod adra heno. +Wnest ti drio macarŵn yn y caffi posh 'na? +Mi fedrwch hefyd ddefnyddio finegr gwin gwyn. +Mae'n un o westai mwya'r dref. +Mae'n frown ei liw a'i enw, ac mae ganddo adenydd efydd. +Nofel arswyd i oedolion gan Dyfed Edwards yw Y Syrcas. +Mae'r gaer wedi ei rannol ddifetha gan chwarela. +Stori am y Frenhines Ddu, sef y wraig ddirgel sy'n byw drws nesa. +Wnes i weld ysgyfarnog yn cae. +Casgliad o ysgrifau gan Islwyn Ffowc Elis yw Naddion. +Daeth y ddau ddyn yn bartneriaid busnes gan sefydlu cadwyn o siopau groser. +Fe'i croesawyd mewn eisteddfodau a chyngherddau bychan ledled Cymru, fel gwestai arbennig. +Mae'n dangos be ma buddsoddi mewn diwylliant yn gallu'i wneud. +Felly, mae e'n penderfynu chwilio am dad newydd ar wefan y Tadau Hud. +Darluniau du-a-gwyn doniol, niferus. +Sgen ti hen ffôn Android? +Ni ddefnyddiwyd y ddyfais hon yn eang ar y dechrau. +Ffotograffau a darluniau du-a-gwyn. +Mae sgil-effeithiau cyffredin y gwm yn cynnwys cyfog, hylif, a llid y geg. +Mae'n tarddu o'r gair mudo sydd yntau'n tarddu o symud. +Mae yn rhan flaen yr ymennydd. +Astudir gweithrediadau deuaidd sy'n parhau â'r patrymau hyn mewn algebra haniaethol. +Mae ganddo ddau o blant. +Mae'r ymgyrch yn beirniadu diffyg gweithredu'r awdurdodau cyhoeddus. +Ysgrifennodd yn helaeth ar ddirfodaeth ac athroniaeth gwyddoniaeth, yn enwedig athroniaeth bioleg. +Wyt ti am dorri'r ardd? +Mae ebay yn cymryd eu rhan, mae'n siwr. +Dyma restr o rai o'r llongddrylliadau ar arfordir Cymru. +Dw i ddim eisiau athrawes bersonol. +Hynny ydi os ddewch chi nôl i Gymru rhyw ben. +Mae'r fenyw yn llefen. +Neu rhywun sa'n fodlon cyfarfod am sgwrs yn Gymraeg? +Mae Dei'r gwas a Greta'r forwyn yn cynllwynio i etifeddu'r fferm. +Yna gweithiodd yn y sector preifat a chyhoeddus. +Cyfrol arall yn sôn am un ar bymtheg o heddychwyr Cymru. +Nath o brynu blodau iddi ar 'i phen-blwydd. +Mae ystyr arall i'r gair, sef brychni haul. +Dos â'r parsal 'ma at dy chwaer. +Dylunnir dwy echelin berpendicwlar sy'n croesi ei gilydd ar y tarddiad. +Roedd Martha wastad yn ddirgelwch iddi hi. +Treulia'r gaeaf mewn hen adeiladau neu mewn coed. +Mae 'i wallt o'n 'lyb. +Cynhyrchwch daflen wybodaeth i annog pobl i ailgylchu ffabrig +Yr eiddew oedd y peth mwyaf dryslyd. +Fe aeth â phicnic efo hi i'r traeth. +I bob pwrpas, mae'n cyffredinoli'r polyhedron tri dimensiwn. +Dw i'n gwybod sut ti'n licio dy de. +Mae'n dibynnu ar osodiadau'ch porwr. +Does gan dechnetiwm ddim isotopau sefydlog. +Gweler fy sylwadau isod. +Dyddiadur yn ystod chwedegau'r ganrif ddiwethaf. +Saif ym mhlwyf a chymuned Llanbedr Dyffryn Clwyd. +Gwneir hyn naill ai drwy atgenhedliad anrhywiol neu atgenhedliad rhywiol. +Coginiwch y tagliatelle, a chofiwch, bydd pum munud mewn dŵr berwedig yn ddigonol. +Pwy all newid pethau? +Ai hen addoldy yw'r lle i wneud hynny? +Ystyr egr yn Gymraeg ydy sur. +Mae'n gaeafgysgu fel chwiler. +Piti dy fod di methu teithio o gwmpas Cymru. +Person o Gaernarfon ydy cofi. +Mae rhywfaint o'r ddrama hon yn Gymraeg. +Cynhwysir lluniau ohonynt a manylion am eu llinach. +Tywallt banad o de i fi plis. +Mae'n cael ei ddefnyddio i drin rhwymedd, yn arbennig rhwymedd gan gleifion hŷn. +Dymchwelwyd hefyd galeri'r eglwys yn y rhan ddeheuol. +Gellir cymhwyso a chyffredinoli'r astudiaeth o wrthdroad i ddimensiynau uwch. +Mae hi wedi ysgrifennu rhai llyfrau ffeithiol, a dwy nofel. +Golygir y perfformiadau hyn ganddynt a'u postio ar y we. +Mae'r un systemau i raddau hefyd yn bresennol mewn anifeiliaid eraill. +Mae tynnu niferoedd bach iawn o fewn cyrraedd plant ifanc iawn. +Mae thymws ŵyn a lloi yn cael eu cyfrif yn ddanteithfwyd. +Fe aeth yn ei flaen nes iddo gyrraedd tŷ ei nain. +Fe demtid ni i gredu nad oes Creawdwr. +Ni ddylai fod yn waith caled. +Syniad Aneurin Jenkins Jones oedd cyhoeddi'r cylchgrawn ysgafn a doniol hwn. +Gelwir y ddau ddimensiwn yn hyd a lled. +Darlith am draddodiadau cerdd Cymru gan Stephen Rees yw Traddodiadau Cerdd Cymru. +Rhestr o dermau sy'n ymwneud ag economeg ac econometreg. +Ni fynn y rhan fwyaf ohonynt gymaint ag ychwanegu iaith estronol at eu hiaith. +Eirin gwlanog yw prif gnwd ffrwythau'r ardal bellach. +Mae cyn perchenogion y bwthyn i gyd wedi marw o dan amgylchiadau rhyfedd. +Mae 'i ddillad o i gyd yn rhai lliw tywyll. +Ar adegau defnyddiai efydd a phren. +Mi aeth yr hogan am dro hefo'i ffrind. +Nathon ni gael barbeciw efo'r teulu i gyd. +Tybed pa flas Cymreig fyddai mwyaf addas? +Gruffudd enillodd y frwydr gan fynd â gwraig Hywel adre gydag ef. +Ymhlith ei olygyddion bu Hugh Edwards ac Owen Edward Jones. +Tynnodd hi allan o'r ras cyn dydd y bleidlais. +Mae'n sbwylio prydferthwch atyniadol yr ardal. +Gwesty bach dymunol ym mhentref Glan-y-môr yw Glas y Don +Eisiau clip o'r canu, boi. +Rhaid dewis ar gyfer Ewrop. +Mae'r gwyfyn corn carw'n cael ei denu at olau, fin nos. +Dinistriwyd llawer o'i gynnyrch yn ystod y cyfnod hwn gan dân. +Ar wahân i'r math hwn, ceir nifer o restrau poblogaidd eraill. +Mae bellach yn byw yn Troon yn yr Alban. +Ymladdodd mewn sawl brwydr yn Rhyfel y Rhosynnau. +Cyfrol o gerddi gan Gareth Ffowc Roberts yw Mae Pawb yn Cyfrif. +Yn wreiddiol, roedd yn swydd o statws a grym. +Ni chyhoeddwyd dim o'i hemynau yn ystod ei bywyd. +Mae'n dangos bod enghraifft yn bodoli, i sicrwydd, trwy ddefnyddio dulliau theori tebygolrwydd. +Ond y cynghorau sir yw'r unig awdurdod â chyfrifoldeb dros enwau lleoedd. +Ydach chi angen r'wbath o'r siop? +Nofel arall yn y gyfres i ddarllenwyr yn eu harddegau. +Yn Llanrwst mae Eglwys Sant Crwst. +Dyma'r ail yn y drioleg o nofelau gan Wiliam Owen Roberts. +Ffotograffydd Cymreig oedd John Thomas. +Mae Trefaldwyn o fewn y Bowys bresennol a cheir rhestr o'r safleoedd yma. +Mae'r testun ar ffurf mydr ac odl. +Mae llawer o'r dadleuon yn ddilys. +Dwi'n ffan o'r sgarff newydd. +Ef hefyd a gasglodd ynghyd ei barddoniaeth, mewn sawl cyfrol. +Roedd y newid yn y tywydd fel petai wedi gwneud lles iddo. +Mae hi'n siaradwr Cymraeg. +Beth fyddet ti'n gwneud pan mae'n bwrw glaw fel hyn? +'Di o erioed di gweld merch fach yma o'r blaen. +Roedd ci wedi bod yn ceisio cloddio am wahadden. +Yng Nghaernarfon ail gydiodd mewn pregethu ond fel lleygwr nid weinidog. +Roedd Mary yn ei gasáu. +Gadawodd y gang y dref yn gyflym gan fynd i guddio. +Hogan o'r Clas-ar-wy oedd Morgan. +Fodd bynnag, profodd straen y sioe yn ormod, ac arweiniodd at chwalfa nerfol. +Mae o'n beth bach balch. +Wnaiff rhain ddim tyfu mewn noson. +Fe gymerodd hi gerfydd ei braich a hanner ei gwthio hi, hanner ei thynnu. +Recordiad cyntaf y Tri Thenor yw'r albwm clasurol mwyaf poblogaidd erioed. +Fe wnaeth y robin sboncio, ysgwyd ei gynffon a thrydar. +Mae'n nabod pob bonyn cabaets yn yr ardd, heb sôn am y bobl. +Dros y silff ben tân roedd yna bortread arall o'r ferch fach stiff. +Wnaeth hi ddim crio, ond gwasgodd ei dannedd yn dynn. +Roedd y ddau yn gwrthwynebu Ail Ryfel y Böer. +Pa sgidie wyt ti am wisgo i fynd i'r dre? +Mae dal lot i'w wneud. +Caneuon i soprano neu denor gyda chyfeiliant piano. +Edrychodd o'i chwmpas ac anadlu yn eithaf cyflym mewn cyffro. +Ddaru o aros efo'i gert wrth ein drws ni. +Fy merch newydd holi, beth yw'r gwahaniaeth rhwng ydy ac ydi? +Dalia ati i chwarae'r piano. +Lluniau du-a-gwyn ar bob tudalen. +Saif i'r gogledd o bentref Y Transh. +Pecyn o hadau ymhob cyfrol. +Yr wyt yn proffesu bod yn garwr rhyddid. +Nid fy mai i oedd e! +Mae'r ddynes yn gwisgo masg. +Chwythodd un o'r hyrddiadau bach hyfryd o wynt i lawr y rhodfa. +Stori fydryddol i blant sy'n adrodd hanes teulu o ddreigiau. +Mae Kev yn dipyn o gymeriad yn tydi. +Arwydd indy Wales arall yn y gwyllt yn Aberystwyth. +Mae'n cario Beibl a sach, ac yn y sach ceir draig. +Ma' hi wedi bod yn gweithio'n galed iawn druan fach. +Bu'n ynad heddwch dros Sir Forgannwg. +Coffa da amdano. +Gwych, y sŵn yn dod lawr y cwm. +Ti'n medru 'i ffrio fo mewn sbeisys a ballu. +Rhowch halan a rhosmari ar y tatws rhost. +Mi oedd ganddi anhwylderau bwyta. +Hafaliad mathemategol yw hafaliad differol, sy'n ymwneud â ffwythiant a'i ddeilliadau. +Defnyddid y gair Hindŵ gan yr Arabiaid yr adeg honno. +Mae'n hedfan yn y nos rhwng Gorffennaf a Medi. +Mae'r oedolyn hwn yn hedfan rhwng Mai a Medi. +Dw i'n licio gwrando ar fiwsig o'r wythdega'. +Mae ei lyfr yn hynod ddifyr. +Mewn gwledydd cynnes, gall yr oedolyn gael ei weld drwy gydol y flwyddyn. +Heb glywed y gân ers blynyddoedd. +Tu ôl i'r diacon parchus roedd cymeriad cwbl wahanol yn llechu. +Dal di ati. +Ond mi oedd cynnwrf ac aflonyddwch yn y dorf. +Y diwrnod nesaf fe wnaethon nhw gerdded ymhellach. +Tisio sôs coch ar dy jips? +Dw i prin iawn yn prynu alcohol. +Nofel ar gyfer plant a'r arddegau gan Rhiannon Ifans yw Paul. +Ond mae eu cŵn bach yn waeth o lawer. +Ceir llawer o henebion megalithig yn yr ardal. +Pa bryd bydd safonau ar gyflenwyr dŵr, nwy a thrydan? +Ychwanegwch ddŵr a dod â'r cyfan i'r berw. +Ond mae Sara'n gallu ei gweld hi. +Teyrnged i Emrys Jones gan Robin Gwyndaf yw Teulu, Bro a Thelyn. +Mae'r thymws yn cyrraedd ei bwysau mwyaf erbyn cyfnod y glasoed. +Llyfr dwyieithog sy'n olrhain hanes y Ddresel Gymreig. +Brysia wella yn llawn. +Bydd hyn bron yn sicr o arwain at ddolur rhydd. +Roedd John James yn aelod o'r orsedd gan ddefnyddio'r llysenw Brychan. +Mae prifddinasoedd y taleithiau yn cael eu dangos mewn print trwm. +Mi oedd un yn Wrecsam ac un yng Nghaerdydd. +Mae'r ail grug tua chan metr i'r dwyrain ohono. +Wnest ti fynd mas neithiwr? +Mae traw uchel i sain sydd ag amledd uchel. +Mae cyfrifiadureg yn elfen hanfodol bwysig o fewn y byd technolegol, diwydiannol modern. +Mae'n chwaer i 'di prynu car newydd. +Cafodd ei haddysgu gan diwtor preifat. +Pwy neu beth sydd wrth y ffenestr? +Yn yr hydref mae'r dail yn troi'n goch. +Tisio fi beintio dy winadd di? +Felly, mae cyfanswm dau eilrif yn rhoi ateb sy'n eilrif. +Nid yw'n cofio sut y cyrhaeddodd yno. +Mi oedd pawb yn ofidus yn y dref y noson honno. +Proffwyd rhyfeddol a anwyd yn Llangelynnin ger Tywyn, Gwynedd yw Rhys Evans. +Roedd o'n hel cregyn ar y traeth ac addurno'r ardd hefo nhw. +Mae ynddo hefyd asid tartarig ac asid sitrig ac eraill. +Yr hen enw arno oedd hirsgwar, ond mae creu sgwâr hir yn amhosib! +Rhyddid personol yw ei freuddwyd. +Serch hynny, parhaodd â'i gweithgareddau i amddiffyn hawliau dynol. +Byth 'di clywed neb yn dweud tom. +Straeon Guto Gwningen a'i Gyfeillion. +Wna i brynu cwpwl mwy o baneidiau i ti. +Hi oedd yr unig aelod o'i theulu i oroesi'r Holocost. +Cysgwch ac yfwch yn dda. +Mae llem ac aflem yn cyfeirio at onglau mewnol dau fath o drionglau. +Cyhoeddwyd gan Bwyllgor Cerdd Esgobaeth Bangor. +Y dail sy'n cael eu bwyta ac nid yr hedyn caled. +Mae'r elfennau sydd ag ymddygiad tebyg, felly, o dan ei gilydd, mewn colofnau. +Cysgant fel chwiler dros y gaeaf. +Dyna ydy fy marn personol i beth bynnag. +Heddiw, yn ogystal â bod yn fan i addoli, mae hefyd yn amgueddfa. +Rhys Davies, ynad heddwch, oedd ei thad. +Mae hi'n meddwl bod 'na ysbryd yn yr atig. +Dw i am drio'u ffonio nhw yn lle. +Shwd ath hi gyda ti? +Roedd ganddi ei barn ei hun, barn radical o flaen ei hoes. +Mae'n bresennol ym mhob ymlusgiad, aderyn a mamal gwrywaidd. +Enw brand a chwmni yw Twitter. +Gymerodd hi flwyddyn mas a mynd i deithio. +Roedd y teulu'n Iddewon. +Bydd popeth ar gau a phob sefydliad ar gau. +Mae 'na lwynog yn byw yn y goedwig. +Mi oedd y ffilm yn bril. +Mae Gwyndaf Evans yn yrrwr rali Gymreig ac yn ŵr busnes. +A fydd hi'n gallu dod o hyd iddo? +Mae gan bob rhan ohono oglau garlleg cryf iawn. +Ond mi rwyt ti yn codi 'nghalon i. +Mae'n llawer haws gweld patrymau ar siartiau bar. +Mi fydd yn priodi merch y brenin. +Mae'n werth ei wylio. +Gerllaw, ceir hen gapel Canoloesol. +Gadewch i'r gymysgedd oeri. +Yn Rhydychen dysgodd Ffrangeg, Eidaleg a Sbaeneg. +Mae pobl yn hapus. +Pe treulient rai blynyddoedd ar y Cyfandir, fe ddysgent am hen lenyddiaeth. +Gweithiai'n ddieithriad i gomisiwn. +Dilyniant i'r nofel Byth Ffarwél. +Ond mae gen i nawr fwy o gwestiynau yn fy mhen. +Mae addysg yn golygu mwy na dim ond cyflwyno cwricwlwm. +Os felly, byddai'r un uchod yn dewis da. +Ond mae hi wedi gwella. +Pa helynt fyddan nhw'n tynnu am eu pen y tro hwn, tybed? +Ni fedrai lacio'r cwlwm. +Mae'n tyfu yn Ewrop, gorllewin Asia a gogledd Affrica. +Diolch i chi am sefyll yn y bwlch. +Pam na ches i ddim un? +Gethon ni dywydd braf wythnos ddiwetha'. +Diolch am fod mor onest Esyllt. +Dydy o ddim yn deall fy mod i'n siarad Cymraeg. +Ydy tîm gemau gymanwlad Cymru wedi dod adref eto? +Hoff fwyd y siani flewog ydy dail y Ddraenen Wen a'r Ddraenen Ddu. +Gall hefyd ei gwneud hi'n anodd anadlu. +Aethon ni i syrffio bora 'ma. +Mae'n cynnwys y pentref Pentywyn. +Dyn yn rhoi ei amser i gadw eraill yn iach. +Maen nhw, fodd bynnag, yn brin, ar wahân i garbon a silicon. +Mae 'na ddwy soffa yn y stafell fyw. +Ti 'di gadael gwydr ar y bwrdd tu allan. +Mae'n crwydro'r strydoedd yn chwilio am ffrind ac am gartref newydd. +Roedd eu cegau ar agor. +Mae'r rhain yn fathau gwahanol o ddadansoddi data. +Nofel gyfoes, sy'n codi nifer o gwestiynau. +Ma' fe wedi mynd bant yn 'i fan lwyd. +Nid oes gan fabi newydd anedig badell pen-glin, ond mae ganddo gartilag meddal. +Mi welon nhw sloth yn y jyngl. +Roedd eu llygaid yn rhythu. +Mae'n biwt, wir i ti. +Bore braf arall yn Llandudno. +Aeth yn ôl i dŷ ei ffrind. +Ond angerdd pennaf Lydia oedd llenyddiaeth, yn enwedig barddoniaeth. +Wedi hynny bu am gyfnod byr yn Tsiecoslofacia a Rwmania. +Ydi toriadau'n bygwth ein Parciau Cenedlaethol? +'Di'n iPad i yn fan 'na? +Ar ddiwrnod y gêm bêl-droed fawr, mae problemau'n codi. +Mae dy sanna' di'n drewi. +Rhowch y hufen a'r menyn mewn dysgl bwrpasol. +Bu galwadau seneddol i egluro'r gyfraith. +Cyfrol o ganeuon dwyieithog gan y gyfansoddwraig o'r Rhondda. +Mae gwrych yn ei groesi; ar wahân i hynny mae mewn cyflwr da. +Dyna'n union beth mae Lenni Dafis yn ei wneud. +Yn ôl yr hyn dw i'n darllen, mewn cyflwr diymateb parhaol mae o. +Ceir craig ar y copa. +Mae ofn uchder yn ofnadwy ar Dafydd. +Cyrhaeddon nhw dŷ ei chwaer. +Mae'n hedfan yn y nos a hynny rhwng Mehefin a Gorffennaf. +A wyddost ti beth fy ffrind, y mae'n well gennyf i ti. +Wnes i gau'r cypyrdda i gyd. +Mae nodiant mathemategol yn system ysgrifennu a ddefnyddir ar gyfer cofnodi cysyniadau mathemategol. +Casgliad cyflawn o gerddi cyfoethog un o feirdd gorau'r ugeinfed ganrif yng Nghymru. +Gall crawniad ddatblygu unrhyw le yn y corff. +Nathon ni beintio'r ddresal yn wyn. +Wedi gadael yr ysgol mynychodd Brifysgol Caeredin a Phrifysgol Glasgow. +Ond mi fydd e braidd yn boring. +Ond un diwrnod caiff ei gipio gan long ofod. +Ffotograffau lliw o olygfeydd yng Nghymru. +Hi oedd yr hynaf o saith o blant. +Dw i ddim yn teimlo dyletswydd o gwbl i roi arian iddyn nhw. +Ganwyd Evans yn Nolgellau, yn fab i David Evans, a Jane ei wraig. +Mae angen cael hwn yn trendio. +Ond heb yn wybod iddi, mae cadno llwglyd yn ei dilyn. +Roedd mewn hwyliau da iawn. +Mae'r amgueddfa hon yn cynnwys llawer iawn o arteffactau diddorol o India. +Mae hi wedi derbyn nifer o wobrau am ei gwaith llenyddol a newyddiadurol. +Fodd bynnag, ar hyn o bryd, roedd Cefnfor yr Iwerydd yn gymharol gul. +Ar yr oedolyn ifanc mae'r smotyn yn frown golau. +Pedair stori sydd yn cludo Morgan Wyn i fyd dychmygol. +Mewn geometreg eliptig, mae pob dwy linell berpendicwlar i linell benodol yn croestorri. +Mae ei straeon yn ymddangos mewn blodeugerddi ledled y byd. +Maent yn gadael i dynged benderfynu ac yn gadael i ddwy arth ymladd drosto. +Ystyr ei enw yw "wedi'i falu ag wyau" yn Sbaeneg. +Y prif gnydau amaethyddol yn y rhanbarth hwn yw pomgranadau, grawnwin, eirin a mariwana. +Gelwir unrhyw fath sydd ddim yn gyfan yn fath rhannol. +Adeiladwyd nifer o antenau, seigiau, cromenni a chyfleusterau eraill yn ystod y blynyddoedd canlynol. +Dim ond rhannau o'r ffos fyddai'n dal yn weladwy. +Yn dioddef o iselder difrifol, aethpwyd ag ef i'r ysbyty eto yn fuan. +Y prif ddulliau o godi arian yw trethi a ffioedd defnyddwyr. +Lladdodd eirlithriad lawer o'r cŵn oedd yn cael eu defnyddio i fagu. +Ymddangosodd dwy bennod ym mhob sioe. +Methodd â chyrraedd unrhyw le yn y siartiau. +Ar ôl dychwelyd adref, dysgodd chwarae gitâr a ffidil. +Mae'r brifysgol yn cynnig rhaglenni i israddedigion. +Mae'r ardal yn dueddol o brofi sychder. +Mae'r fenyw'n dodwy ei hwyau rhwng drain llaethlys y coed. +Rwyf eisiau fy mywyd preifat yn ôl a dydw i byth am gael hynny. +Roedd hi hefyd yn bianydd wedi'i hyfforddi'n glasurol. +Plentyn ifanc yn bwyta pastai gyda'i wyneb. +Yn aml cyfeirir at yr uned "n"-sffêr fel "y" "n"-sffêr. +Roedd awdurdodau lleol i ofalu am gyfranogiad torfol mewn chwaraeon. +Daeth y gwasanaeth hwn i ben yn ddiweddarach oherwydd anawsterau ariannol a derbyniad gwael. +Roedd dŵr yn diferu o'r gwely, ac roedd y bwced wedi rowlio i gornel. +Mae'r gymuned hefyd yn cynnwys llawer o fflatiau, condos a thai trefol. +Mae'n cwmpasu modelu Cefnfor a Modelu Atmosfferig. +Defnyddir goleuder yn aml i nodweddu allyriad neu adlewyrchiad o wynebau fflat, tryledol. +Gweithiodd ochr yn ochr â'i fab hynaf, Germain, a rannai ddoniau mecanyddol ei dad. +Mae sirbysgod yn cael eu dal gan amlaf gan ddefnyddio bachau a llinyn. +Mae'r llawr cyntaf yn fwaog mewn carreg, gyda dau dyred yn ymwthio allan. +Defnyddir dadansoddi meintiol yn helaeth gan reolwyr asedau. +Yn ddiweddarach daeth y menywod hyn yn nymffau. +Ni dalwyd cyflogau'r staff hyd yn oed. +Mae ci gwyn a brown yn neidio i fyny am ffrisbi gwyn. +Ni chafodd y teitl ei benderfynu hyd at fis ar ôl cyflwyno'r llawysgrif. +Yn anffodus, ychydig iawn sy'n weddill o'r addurniadau mewnol artistig helaeth gwreiddiol. +Mae enw'r band yn hen air Norwyeg sy'n golygu “Dicter”. +Caffaelodd De Mol, personoliaeth adnabyddus yn yr Iseldiroedd, ei ffortiwn trwy gynhyrchu rhaglenni teledu. +Cynhyrchodd waith celf hefyd ar gyfer nifer o galendrau. +Mae aelodau o bedair urdd grefyddol Gatholig wedi cael yr enw hwnnw. +Er mwyn y gwahaniaethiad hwn, mae'r solidws yn gallu cael ei gyferbynnu â'r hylifedd. +Mae'r dref wedi ei hamgylchynu gan fynyddoedd. +Mae'r breninllwyth wedi meddiannu'r orsedd Denmarc ers hynny. +Daeth ei neges yn un o brif ddogfennau'r “symudiad ethnig”. +Un o achosion cyffredin symudiadau carbwl yw diffyg profiad. +Does dim y byddwn i'n troseddu rhai egwyddorion drosto. +Yno, gwnaeth drin llosgiadau dwfn iawn ac anffurfiadau difrifol i'r wyneb fel colli amrannau. +Nid yw'r llinell drawsyrru yma'n rhedeg mwyach. +Sylweddolwyd anhawster yr awdurdodiad hwn, gan nad oedd swyddogion dymunol ar gael bob amser. +Nid oes unrhyw gysylltiadau ag ethnigrwydd neu hil i coccydnia. +Mae ei ogwydd gogledd-de yn amddiffyn y dyffryn o lawer o olau haul uniongyrchol. +Mae'r twr coch a gwyn yn strwythur delltwaith agored. +Enillodd pedwar o feibion yr iarll cyntaf ragoriaeth. +Masgot yr ysgol yw'r gath wyllt, a lliwiau'r ysgol yw glas a gwyn. +Yma, mae'n dadlau bod cyfraith gyffredinol hanes dynol yn gynnydd. +Gellir eu clywed yn ymarfer ar ffliwtiau bambŵ o filltiroedd i ffwrdd. +Mae'r tragws yn nodwedd allweddol mewn llawer o rywogaethau ystlumod. +Mae mwyafrif y teuluoedd yn byw ar ffermio. +Mae llawer o'u perfformiadau ar gyfer elusen. +Bwrdd yn llawn bwyd mewn marchnad awyr agored llawn. +Mae ychydig o enghreifftiau o bysgod sy'n hunan-ffrwythloni. +Mae'n bosib mynd i weld yr adfeilion o hyd. +Mae'n byw yng nghanol Llundain ac wedi ysgaru. +Ystyriwyd yr arbrawf yn fethiant ac nis ceisiwyd fyth eto. +Yn raddol fe wnaethant gynnwys pwyslais pentecostaidd. +Yng nghefn y tŷ mae'r ystafell fyw a'r gegin. +Aeth yn alltud i'r Swistir, lle graddiodd o Brifysgol Genefa. +Mae defnyddiau eraill yn cynnwys ffynonellau golau tiwnadwy, systemau adnabod delwedd ac optegau addasiadol. +A hyd yn oed yn y gaeaf rwy'n gallu dod adref ar ddydd Gwener. +Mae llawr yr arena'n cynnwys nodweddion gofodol. +Defnyddir yr un ymadrodd gydag arwyddocâd cwbl gadarnhaol mewn rhan o Loegr. +Roedd ei llygaid hi'n ddisglair yn sgil y dagrau oedd heb eu gollwng. +Mae'r rhan esgyrnog yn ffurfio'r ddau draean mewnol. +Mae ffyngau ym mhob prif ddosbarth yn ffurfio hawstoria. +Mae tensiynau rhyngddynt a phoblogaeth weddilliol yr Almaen wedi lleddfu dros y degawdau. +Yn yr achos hwnnw, mae'r buddion traddodiadol yn berthnasol. +Gallaf ddeall sut mae sêr roc yn teimlo. +Mae dynion mewn festiau oren llachar yn defnyddio offer o flaen stryd. +Ar ôl i'r Undeb Sofietaidd chwalu, syrthiodd yr arsyllfa i amseroedd anodd. +Sgriniwyd y ffilm yn Singapore a Tsieina. +Bryd hynny cafodd addasiadau eu gwneud i wella safonau'r moduron. +Mae rhai prosiectau yn parhau. +Fel arfer, mae gan ddamcaniaethau gydag uwch-gymesuredd estynedig sawl gweithredydd o'r math hwn. +Gellir defnyddio math arbennig o laparasgop ar gyfer diagnosis gynaecolegol, o'r enw ffrwythlonosgop. +Yna sylweddolais y gallai fy man gwylio fod mewn gwirionedd yn fagl. +Gellir cynyddu gwrthiant i rwd trwy neu blatio â chadmiwm neu ffosffadu. +Mae llwch calch yn arbennig o gyrydol. +Ond yn ei ffordd ei hun ar raddfa fach, ffilm fwy o lawer. +Fel arfer bydd y cyrsiau'n defnyddio rysetiau traddodiadol yr Alban. +Bellach mae eglwysi yn cerdded mewn grwpiau eciwmenaidd o bob ardal. +Mewn un fersiwn o'r act arferol yma, mae pob enw yn double-entendre. +Y ganolfan weinyddol yw Pont-y-pŵl yng nghanol y fwrdeistref sirol. +Dyma hefyd y tro cyntaf y cyflwynwyd dosbarth darnau arian yn Tajikistan. +Gelwir y porthladdoedd hynny sy'n llwytho cargo mewn cynwysyddion yn borthladdoedd amlwytho. +Fe drodd hi ei hwyneb tuag at wydr ffenest cerbyd y trên. +Dawnsiodd o'i hamgylch a thynnu wynebau a chanu a chwerthin. +Digwyddodd pethau rhyfedd nad oedd hi'n gwybod dim amdanyn nhw. +Wrth i'r gromen oeri, mae'n codi'n uwch. +Roedd ei mam wedi bod yn wraig hardd eithriadol. +Roedden nhw wastad yn gadael iddi hi gael ei ffordd ei hun. +Roedden nhw bob amser yn ffraeo ac yn cipio teganau oddi wrth ei gilydd. +Cafodd gymaint o fraw fel y bu bron iddo fe neidio am yn ôl. +Gwaeddodd y dynion ar lawr dair hwrê egnïol i'r hen wraig. +I ddechrau'r gwaith bydd angen creu ffeil electronig +Yr oedd y nos yn dod, a'm ffordd innau i'm llety yn hir. +Cyn hir, angorasom yn hafan dawel Pedr Sant. +Mae'r argyfwng gyda gorgynhesu'r byd yn gwaethygu. +Gwnaed y bwrdd bach gan grefftwr medrus. +Roedd hi wastad yn gwneud hyn pan gâi hi siawns i'w gweld. +Doedd e ddim yn gwneud i Mary deimlo'n hapus. +Wel wir, mae'n ferch fach ddiolwg iawn. +Cofiwch gadw'ch teganau yn daclus cyn mynd i'r gwely. +Ar ôl y diwrnod neu ddau gyntaf doedd neb yn fodlon chwarae gyda hi. +Fe geisiodd hi esgus ei bod hi'n gwneud gwely blodau. +Bydd yn rhaid i ti chwarae ar dy ben dy hun. +Wrth i ni droi gyda'r ffordd gwelem lwyn o goed o'n blaen. +Camgymeriad arall yn y fan yna. +Roedd e'n felys, a wyddai hi ddim pa mor gryf oedd e. +Roedd y tŷ fel petai'n mynd yn fwyfwy tawel. +Waeth i mi heb geisio f'amddiffyn fy hun. +Fe roddodd hi roi'r gorau i'w swydd ar ôl tri mis. +Ond roedd hi'n ifanc iawn. +Gan ei bod hi'n wraig siaradus, aeth ymlaen gyda mwy o ddiddordeb. +Mae'n swnio fel petai neb yn y byngalo ond fi a'r neidr. +O leiaf, yr oedd ei ddwylaw yn rhy grynedig. +Mae'r gic olaf wedi bod yn llwyddiannus. +Yna cerddodd y ddau ymlaen yn ddistaw eilwaith. +Roedd ei goesau fel plwm a methai deimlo'r gwaed yn ei draed. +Cynghorem yr awdur i beidio â cholli rhagor o amser gyda'r gelfyddyd. +Gallant ymddiried ynddynt eu hunain. +Aeth Mary i ffit biws a'i churo a chicio. +Roedd ei dillad hi i gyd yn denau ac yn llac. +Yr oedd ganddi lygaid gleision prydferth. +Efallai y byddwch yn dymuno cadw llungopi i chi eich hun +Does neb ar ôl. +Roedd gan y sinema'r grym i lunio'r amhosib a'r annhebygol +Ni chlywais fod yr un bardd erioed wedi canu i goffi du Arabia. +Yr oedd yno gysgod coed ac awel. +Rhaid i ni dynnu at a chefnogi ein gilydd. +Parhaodd gyda gwaith rhyfel trwy ddod yn swyddog gyda'r Bwrdd Glanweithdra. +Dyma'r anrhydedd uchaf y mae Llywodraeth Cymru yn ei roi i Gymry. +Maen nhw wedi cicio un ar bymtheg o weithiau yr un. +Dw i'n cynnal cyngherddau cerddoriaeth a chân mewn cartrefi gofal ac ysbytai +Dyma ddau ŵr ieuanc yn dod o'r tŷ i'n cyfarfod. +Cydiodd ym mraich y dyn ifanc. +Roedd ganddi ffordd mor brydferth hefyd. +Fe'i defnyddir yn aml gyda set data o bobl neu ddosbarthiad tebygolrwydd. +Cafodd ei wrthod gan bob un ohonynt. +Edrychai'r aber mor brydferth o'r bont. +Roedd hyn yn rhoi cyfle i fusnesau annibynnol dderbyn mwy o arian +Y canfyddiad poblogaidd oedd mai Saesneg oedd iaith briodol bywyd cyhoeddus. +Roedd Mary wedi diflasu braidd ar yr hen straeon. +Oxwich yw un o'r traethau mwyaf poblogaidd ym Nghymru. +Cawsom ein hunain mewn hen amddiffynfa adfeiliedig. +Dylai'r disgyblion fynd ati i gwblhau'r asesiad darllen tan ddiwedd y wers. +Hefyd mae yna gyfleoedd gwych i fynd i ddeifio +Y mae pob carreg yn heneiddio yn y mur. +Ydy'r dyn efo neidr yn y ffair drwy'r dydd +O gyffiniau'r eglwys cerddasom i orsaf y ffordd haearn. +Ysgydwodd ei phen, ond gyda gwên garedig ar ei hwyneb. +Maen nhw'n gofyn am gacennau ar gyfer y parti ddydd Sadwrn. +Rho'r teledu i ffwrdd +Nawr defnyddiwch y dechneg yma wrth drafod atomau +Roedd yr ynys gyfan bron o dan ddŵr. +Ni chollodd ei dad ei ddylanwad ar ei gymeriad. +Does dim byd fel dŵr i dorri syched. +Y mae'r dyfyniad hwn yn dangos ei arwyddocâd ar y pryd. +Gŵr ydyw Evan a gwreiddyn y mater ganddo. +Does dim angen dawn mewn daearyddiaeth i wneud map o'r ymennydd +Roedd Cymru'n gryf iawn yn y sgrym gyntaf. +Ni fedrir eu troi ymaith tra bônt yn talu'r rhent arferol. +Nid oes rhaid prynu bwyd i fynychu'r digwyddiad yma +Fe wasgara hi y tywyllwch, fe ymlid ymaith nos anwybodaeth. +Felly, nid wyf yn siŵr o'm marc a'm camgymeriadau +Roedd y môr yn arw iawn. +Mae parotiaid yn mwynhau cwmni ac yn dda am ddynwared y llais dynol. +Gawson ni brynhawn braf, dioglyd yn y tŷ. +Prysurais adref gyda chalon drom. +Rho neges trydar ar Twitter iddyn nhw. +Gwelais y llyn lle y bu ond y dim i Ieuan Gwynedd foddi. +Mae fy mhasio arferol hefyd fel rheol yn eithaf cyson a cryf +Maen nhw wedi codi pris alcohol yng Nghymru. +Roedden nhw'n anghytuno ar bopeth. +Roedden nhw'n hapus iawn i gael glaw ar ôl y sychdwr. +Gall diwylliannau gwahanol hefyd ddylanwadu ar ein cerddoriaeth +Teimlwn yn wan a digalon, ond ceisiwn dreulio yr amser yn darllen. +Mae angen rhoi min ar y bensil yna. +Mae'r dorf yn wenfflam. +Yn y tyllau nytha miloedd o wylanod. +Gall achos hefyd cael ei wneud ar gyfer hawlio treuliau fesul pythefnos +Gawn ni fynd i'r sinema yfory? +Dyfnhaodd y distawrwydd pan oedd yr offeiriad yn cymuno. +Cyn i ni ymadael yr oedd y ddinas yn dawel. +Mae bŵts lliwgar yn ffasiynol iawn eleni. +Rydyn ni'n mynd i Gernyw ar ein gwyliau haf eleni. +Rhai pethau heb newid dim ym mywyd Cymru. +Bellach, yr oedd yno ffordd lydan, a thai mawrion o boptu iddi. +Oherwydd mae'n dangos ar unwaith beth syn digwydd. +Llywodraeth Lafur yn nwy fil a dau ddeg un sy' fwya' tebygol erbyn hyn. +Mae'n amser nawr ar gyfer rhagolygon y tywydd. +Dyma fy nghyflwyniad, nodiadau a meini prawf. +Oedd yna gant go wir? +Teimlodd hi fwlyn y drws yn troi heb drafferth. +Roedd hi'n meddwl yn gyfan gwbl amdani hi ei hun. +Roeddwn i'n teimlo'n freintiedig a deud y lleia. +Hi oedd enillydd y gystadleuaeth. +Bu'n aelod o Undeb Chwarelwyr Gogledd Cymru. +Cafodd ei benodi yn union deg yn ohebydd lleol i'r papur enwog hwnnw. +Tra yr oedd hyn yn digwydd, galwodd y wraig ar yr hogyn. +Yr oedd y gwynt mewn heddwch â hwy. +Roedd y gwaith yn parhau i ddioddef. +Mae'n rhaid i'r fwydlen gynnwys cost ar gyfer pob pitsa +Chwarddodd y ddynes, ond doedd o ddim yn fater chwerthin ychwaith. +Dwn i'm a fyddai modd iti fy nilyn os wyt ti'n fodlon? +Mae Elisabeth yn llewygu ac mae'r brenin yn galw am gymorth. +Mae'n adnabod, yn defnyddio ac yn gwneud patrymau sy'n ailadrodd +Ie, tala dy hun am nawr a hawlia'r gost yn ôl. +Mantais defnyddio Word i fi ar hyn o bryd yw bod gwirydd sillafu ynddo. +Gofynnodd y Maes Awyr am gael benthyciad arall. +Roeddwn i'n gobeithio dy weld y tro nesaf y byddwn yn y de. +Erbyn hyn bargen rhwng dau ŵr rhydd yw bargen y meistr a'r gwas. +Dangosir trosodd enghraifft o sut y gallai'r tabl edrych. +Dwi wedi creu amserlen ffilmio ddrafft ar gyfer y tri lleoliad +Y mae'r hen fynwent wedi ei gwneud yn ardd ddymunol. +Sioe gerdd yw My Fair Lady a addaswyd o'r ddrama lwyfan Pygmalion. +Wedi codi i gynnig yr ymateb aeth i wewyr. +Mae hi'n marw wrth eni plentyn. +Gwaeddodd y dynion ar lawr hwrê yr un modd. +Mae rhai ohonoch eisoes wedi dweud eich bod yn dymuno dod +Bydd cau'r ffatri hefyd yn ergyd sylweddol i economi de Cymru. +Pan hedfanodd y robin i goeden wrth ymyl estynnodd ei llaw. +Treuliodd ei phlentyndod yn nwyrain yr Unol Daleithiau. +Edrychodd Martha arni mewn penbleth. +Dydyn nhw ddim yn siŵr sut i ddathlu'r canmlwyddiant. +Daeth adref i'w ginio, y cinio cyntaf iddo yn ei dŷ newydd. +Sori, anghofiais y ddolen. +Roedd y ddau riant yn droseddwyr a fu mewn carchar yn Ne Cymru Newydd. +Cefais brofiad gwych ac fe wnes i fwynhau fy nghyfnod hefo chi +Gwelwn fynyddoedd pell, fel breuddwyd gŵr ieuanc, yn ymgodi'n brydferth a gwyrdd. +Gobeithio y bydd y berthynas yn gwella rhwng y ddwy wlad. +Mae ganddi hanner chwaer, hanner brawd, a dau frawd iau. +Byddaf yn cyflwyno'r cwestiynau i'r disgyblion +Mae unrhyw gynllun gofal iechyd unigol yn disodli'r polisi hwn. +Y Frenhines fydd yn ei groesawu i Balas Buckingham trwy gynnal gwledd y wladwriaeth. +Newidiadau i ddyddiadau talu yw'r rheswm am hyn. +Ystyried ef yn un o'r glowyr medrusaf a mwyaf profiadol yn y wlad. +Erbyn heddiw, gwyddom fod unrhyw beth poeth megis tywel gwlyb, cynnes yn dda. +Tyfodd y gyfres o lyfrau'n sydyn iawn o drioleg i saith llyfr. +Gwelir yn y gerdd dylanwad y Lladin. +Mi fedran ni helpu hyd yn oed os jyst trwy godi ymwybyddiaeth. +Yn Wuhan fues i'n gweithio am bedair wythnos cyn 'Dolig. +Ond cawn weld be fydd y canlyniadau swyddogol. +Dyma'r ddeiseb i chi arwyddo. +Mae 'na siarc o dan y cwch. +Roedd yn Rhyddfreiniwr bwrdeistrefi Caerdydd a Chasnewydd. +Drwy ddod o hyd i gartref newydd, wrth gwrs! +Aye dyna welis i. +Roedd ganddi bwerau goruwchnaturiol. +Ysgrifennwyd a darluniwyd gan bobl ifanc lleol. +Roedd y plant yn alluog ac roedd y teulu'n llewyrchus, yn ariannol. +Felly, mae'n bolygon lle mae ei du mewn yn amgrwm. +Nofel ramantus, gyfoes sy'n symud rhwng y gororau, Llundain a'r Eidal. +Ceir yma unawdau, deuawdau, partïon unsain, deulais a thri llais. +Cyhoeddwyd ar y cyd gydag Amgueddfa Werin Cymru. +Gwelon nhw hebog yn hedfan uwch eu pennau. +Prif fwyd y lindys ydy hopys fel yr awgryma'r enw. +On i methu cysgu, oedd 'y mol i'n brifo. +Dyma bencadlys y Rhufeiniaid yn eu hymgyrch i orchfygu brodorion De Cymru. +Mae gobaith erbyn hyn bydd y cynllun fymryn bach gwell. +Symudodd Margaret i Fanceinion i fod yn feddyg teulu. +Jyst meddwl, ydy hyn yn saff? +Mae e'n cadw nadredd mewn tanc. +Ni all wneud dim i rwystro hyn, sy'n dipyn o niwsans. +Yn ei chanol oed, ymwelodd hefyd â Pharis, Llundain a Rhufain. +Bu'n briod â dau lenor enwog yn Seland Newydd. +Pob lwc nos Sadwrn. +Fe ruodd y gwynt. +Doedd Mary Lennox erioed wedi gweld rhaff sgipio o'r blaen. +Gall y cyfrifiadur prif ffrâm redeg sawl system weithredu ar yr un pryd. +Gobeithio'ch bod chi gyd yn iawn acw. +'S dim erthygl am y clwb ar Wicipedia. +A byddai mwy o fynegiant ar eu gwep pe baent heb iaith. +Paladr yr englyn ydy'r ddwy linell gyntaf. +Y tu fewn y chwaraeir y gêm fel arfer. +Roedd Gareth yn hel atgofion am y dyddiau cynnar a rôl arloesol yr ysgol. +Oes angen rhywbeth parhaol i gofio am y dreftadaeth? +Hyd yn oed fel plentyn bychan ymddiddorai mewn llyfrau ac ysgrifennu. +Cyfrol o englynion gan wahanol feirdd dienw yw Englynion Piws. +Ar adeg ei farwolaeth ef oedd aelod hynaf Tŷ'r Cyffredin. +Dydi Elin ddim yn cyrraedd adref o'r ysgol un diwrnod. +Mae sgil-effeithiau difrifol yn cynnwys gwenwyno gan nicotin a dibyniaeth barhaus. +Yr Apocryffa i'r Beibl Cymraeg Newydd, argraffiad diwygiedig. +Roedd yn ferch i weinidog lleol. +Mae Wil Bach Saer yn sâl. +Y berthynas rhwng ochrau'r triongl a'i onglau yw sail trigonometreg. +Mae wedi'i leoli i'r de o Foel Famau a Moel Fenlli. +Mae'r capel ar agor o hyd. +Dyma restr o esgyrn y sgerbwd dynol. +Dw i'n meddwl bod o'n gyfle da i rhywun yn fama. +Cyfrol ddwyieithog yn adrodd hanes y bardd a'r heddychwr Waldo Williams. +Roeddynt yn hawlio mae eu heiddo cymunedol hwy oedd yr adeilad a'i diroedd. +Er i feirniaid ei dderbyn yn ffafriol, ni chafodd ganmoliaeth gan y cyhoedd. +Ac maen nhw wrthi bron drwy'r amser. +Y bumed gyfrol o farddoniaeth ar themâu cyfoes. +Nofel wedi'i seilio ar atgofion plentyn yn Nhrefor, Pen Llŷn. +Nofel am Gymru heddiw a enillodd Wobr Goffa Daniel Owen. +Y diwrnod wedyn fe aeth i weld y castell. +Cafodd ei addysgu yn Ysgol Ramadeg y Rhyl a Choleg y Brifysgol Rhydychen. +Mae'r cyfrifiadur yn araf iawn heddiw. +Erbyn heddiw, fe all y nyrs ennill gradd doethuriaeth, gan fynd yn feddyg. +Mae'r ynysoedd mawr wedi'u rhannu'n sawl ardal. +Ceir yma ddwy gyfrol mewn un. +Roedd ei mam yn swffragét, yn llwyrymwrthodwr ac yn ymgyrchydd dros ddiwygio cymdeithasol. +Ymosodwyd arnynt gan yr heddlu wedi hynny. +Gellir nodi'r amserydd aros am gludwr wrth ffurfweddu'r map deialwr. +Llwyddodd i ganfod amser i addysgu hyd yn oed. +Gwasanaethodd yn Ail Ryfel De Affrica a soniwyd amdano mewn adroddiadau. +Cedwir llawer o'i weithiau bellach mewn amgueddfeydd a chasgliadau preifat. +Mewn cyferbyniad â chownter pefrio mae'r cynhyrchiad golau yn digwydd yn syth. +Mae pump o bobl ar fin perfformio dawns. +Ar y llaw arall, cydnabyddir cywirdeb adolygiad y cyfeirlyfr ar drwyddedau. +Mae gor-weithio'r toes hefyd yn risg. +Mae cocên yn blocio ail-dderbyn dopamin ac felly'n cynyddu ei effeithiau. +Ni all cyllyll arferol eraill fodloni'r amodau hynny. +Ni chaiff ddiwyllio ei dir ar ei delerau ei hun. +Cofnodi gwybodaeth a'i chadw dros gyfnod o amser yw storio data. +Stori gan Alys Jones yw Straeon Cornel y Stryd. +Beth amdanoch chi? +Edrych mlaen at ddarllen y cerddi'n iawn. +Mae'r gyfrol yn ddathliad o oleuni a lliwiau Llŷn. +Gweinir trwy'r genau unwaith y dydd. +Mae rhan o'r etholaeth o fewn y sir Ynysoedd Erch a Shetland. +Ti 'di pacio dy betha? +Yma, mae sgwario canlyniad y rhagflaenydd drwy adio nifer odrif o bwyntiau. +Ti heb sgwennu digon yn y traethawd yma. +Wrth i Now feddwl am rywbeth, mae'n digwydd go iawn. +Er gwaethaf hyn, mae datblygiadau modern y system yn dileu'r tybiaethau hyn. +Gwelwn gapel Methodist bychan yn ymnythu rhwng torlan ac afonig. +Oh waw, digwydd gyrru drwy Aberystwyth a gweld rhain. +Oherwydd hyn, ystyrir y canolrif yn wirioneddol bwysig i'r ystadegwr go iawn. +Prynodd dŷ tafarn yn Llundain. +Wedi hynny astudiodd Hanes ym Mhrifysgol Glasgow. +Mae tua hanner cilometr i'r de o Foel y Waun. +Ceir eglwys Santes Fair yn y pentref. +Anfonodd y Met ef i'r Eidal yr haf hwnnw gyda grant astudio. +Mae ei llyfrau'n llawn dychan, a gelwir yr arddull yn realaeth ledrithiol. +Wedi gorffen gwylio trydydd cyfres y ddrama Israelaidd wych. +Gwyddfid ydy prif fwyd y siani flewog. +Cyfrol o erthyglau ar Daniel Owen wedi'i golygu gan Urien Williams. +Dw i'n deall eich pwynt ac mae'n un da. +Mae'n anodd dweud pa bryd y daeth y ffonograff yn fenter fasnachol lwyddiannus. +Disgwylir i ymgynghoriad gael ei lansio yng Ngorffennaf i drafod y cynlluniau. +Ond nid yw bywyd yn fêl i gyd yno ychwaith. +Mynd i Toulouse dydd Iau am wino, piwo a ffwti. +Addysgwyd Williams yng Ngholeg Llanymddyfri a Choleg y Trwyn Pres, Rhydychen. +Mae'r cregyn yn help i adeiladu tir newydd. +Fyswn i'n cael camembert i ddechra a wedyn tarten nionyn fatha prif gwrs. +Dwi'n gorfod rhoi mwy o fanylion amdan y pethau dwi'n gwerthu +Mae 'na olwg wyllt yn 'i llgada fo. +Mae cyfyngiadau crefyddol ei magwraeth yn chwarae rhan allweddol yn rhai o'i gwaith. +Datblygwyd radar yn gyfrinachol gan sawl gwlad ychydig cyn yr Ail Ryfel Byd. +Ehangodd y brodyr y banc o dan yr enw David Jones a'i Gwmni. +Pryd fydd y siop fara yn agor yn y bore? +Fe welson ni haid o wyddau yn hedfan heibio. +Rydyn ni angen prynu bocsys newydd ar gyfer storio pethau. +Does dim mwy o le ar ôl yn yr atig. +Llongyfarchiadau i'r Ffindir am guro Ffrainc mewn gêm gyfeillgar. +Roedd hi'n wyntog iawn ar y pier, ond roedd yr olygfa yn hardd. +Mae'r lluniau ysgol newydd yn barod. +Bydda i yma eto yr un amser bore fory. +Wnaiff pawb yn y gynulleidfa ddiffodd eu meic os gwelwch yn dda. +Peidiwch anghofio rhoi dŵr i'r planhigion. +Roedd y traeth yn wag, ond roedd ambell i forlo yn y môr. +Rhaid i mi fynd i gadw'r car yn y garej gyntaf. +Rwy'n hoffi corau cerdd dant. +Mae'r plant yn hoffi'r llwybr beics yn Llanberis. +Mae hen oleuadau'r goeden wedi torri. +Mae'r tonnau yn uchel iawn yn torri dros y morglawdd heno. +Mae'n drueni mawr na chawsom ni gwrdd yn y Steddfod eleni. +Os cymysgwch chi las a melyn fe gewch chi wyrdd. +Doedd hi ddim yn blentyn oedd wedi cael ei dysgu i ofyn caniatâd. +Parhaodd hyn nes i'r system deligraff gyrraedd. +Hanes bachgendod cefn gwlad yw asgwrn cefn y nofel hon. +Roedd Martha a'i mam wedi gwnïo clytiau ar ddillad oedd wedi'u rhwygo. +Y differiad yw'r ffwythiant hwn. +Yr oedd yr amser yn hir i aros am ryddhad fy mrawd. +Maddeuwch i mi. +Roedd rhaid i fi 'i brynu fo. +Mae'r amgylchedd a chadwraeth yn themâu pwysig. +Mae hyn ar ôl iddo ddefnyddio technoleg arbennig i astudio'r gwaith +Nathon ni gyrraedd yr y stesion yn hwyr ac roedd y trên 'di mynd. +Ystyriai ei hun radd yn uwch na gweithwyr, ffermwyr a labrwyr cyffredin yr ardal. +Dw i wedi 'nghalonogi yn darllen am yr ymgeiswyr. +Gofynna i Wicipedia Cymraeg pwy yw Alffa? +Roedd Martha yn amlwg heb ddeall ei bod hi'n bod yn ddigywilydd. +Detholiad hyfryd o rai o sonedau ac ysgrifau un o gewri llenyddiaeth Cymru. +Mae'n enedigol o dref Rhuthun, Sir Ddinbych. +Dyma ni, amser cerdded ar y llwyfan +Mae'r car angen 'i olchi. +Toriad drwy chwarren laeth. +Roedd e'n gwmni da, hoffus. +Edrychai drwy ei ffenest ar y glesni yn y pellter. +Bwyd y siani flewog ydy amrywiaeth o goed collddail a llysiau. +Mae'r wobr wedi dyblu i drideg miliwn o ddoleri ers y twrnamaint diwethaf. +Dydi hi ddim yn gwybod lle mae gartre. +Mae Dilys Ddwl wedi diflannu. +Ifor ap Glyn oedd cynhyrchydd gweithredol y ffilm. +Byddai wrthi yn hwyr ac yn fore. +Prif fwyd y siani flewog ydy coed derw. +Planhigyn lluosflwydd, unionsyth, blewog ydy blodyn menyn neu flodyn ymenyn. +Gyda'i bod hi yno, mi glywn rhyw ebychiad o syndod. +Bydd hi'n Ddydd Gŵyl Dewi fory. +Cerddon nhw am filltiroedd cyn cyrraedd y traeth. +Mae diweddglo'r nofel yn rhagweld ffurfio undeb Geltaidd, Gatholig Rufeinig. +Drwy'r ugeinfed ganrif cynyddwyd y nifer yng ngwledydd Prydain. +Ar ddiwedd pob llinell mae'r brifodl. +Gall hyd yn oed merch fach annymunol fod yn unig. +Y gyntaf mewn trioleg o nofelau gan Wiliam Owen Roberts. +Bu'n aelod o Academi Gwyddorau a Chelfyddydau Croasia am rai blynyddoedd. +Mae e'n teimlo'n well erbyn hyn. +Yn y Pwyllgor Sir un tro buom yn trafod enwau llefydd. +Roedd cyflwr y ffyrdd yn gwaethygu'n raddol. +Bydd rhaid siarad am hyn mewn mwy o fanylder dwi'n meddwl. +Sut mae olew craidd yn cael ei ffurfio? +Yr oedd un dyn ar ben y simnai. +Fel ei dad, roedd ganddo ddiddordeb mawr mewn hynafiaethau, archaeoleg a herodraeth. +Gwasanaethodd fel Ysgrifennydd a Llywydd Undeb yr Annibynwyr Cymreig. +Roedd pob math o sbwriel yn y ffos. +Cymru yw hi wedi ennill ymreolaeth ac wedi colli ei chrefydd Brotestannaidd. +Sbïa yn y drôr 'na am 'y mhres i. +Felly o dan y polisi ni chaiff y cadeirydd fod yn ymchwilydd +Mae gan y maes awyr dair lolfa. +Daeth y ddrama ar y teledu i ben. +Dyna fo, mae gen ti gystadleuaeth. +Pentre bychan ym Maldwyn ydy Tal-y-bont. +Lle unig a thywyll. +Weithiau roedden nhw'n dirluniau tywyll, dieithr. +Mae'n ysbyty Gwasanaeth Iechyd Gwladol o dan reolaeth Bwrdd Iechyd Prifysgol Betsi Cadwaladr. +Ond mae bodau amlgellog yn defnyddio systemau llawer iawn mwy cymhleth. +Roedd cant o stafelloedd dirgelaidd dan glo. +Beth ar y ddaear ydech chi wedi wneud, deudwch? +Gyda i ni gyrraedd glan y môr, disgynnodd y niwl gwyn trwchus. +Ond roedd rhywbeth llawer gwaeth na gweld cysgod dieithr ar fin digwydd. +Roedd ciw hir am y tŷ bach. +Mae ei gwaith yn archwilio themâu twf a chreu. +Yn Denmarc mae'n nodedig am ei chyfrol Saith Chwedl Gothig. +Cafodd ei magu yn Llundain, Rhydychen, Seland Newydd a Fiji. +Pa fath o le oedd e, a sut ddyn fyddai e? +Erbyn iddo symud i Flaenau Gwent bu galw rheolaidd arno i feirniadu traethodau eisteddfodol. +Mae symud i lawr yr un peth â symud i fyny pellter negatif. +Yr oeddem yn ystyried cryfderau a diddordebau pawb +Mae'r nyrs yn galw enwau allan mewn llais uchel. +Mae yna le i fathemateg ar y cwricwlwm am resymau amlwg +Dy ddwy geiniog di oedden nhw go wir. +Ni wrthodaf ddyrchafiad. +Mae ganddo flodau glas sy'n blodeuo yn yr haf hwyr a'r hydref. +Mae'n cysgu drwy'r gaeaf ac yn creu chwiler yn y gwanwyn. +Awdur Cymreig yw Caren Wyn Jones. +Roedden nhw wedi llwytho gormod o wair ar y trelyr. +Rydym wrthi yn ffilmio ein cyfres cyngor i blant +Cerddodd yn araf ar hyd y galeri a syllu ar y wynebau. +Rhisgl y dderwen a'r fedwen ydy prif fwyd yr oedolyn. +O'nd ydi popeth yn braf? +Dymunaf gyflwyno fy nghais i leihau fy nyddiau. +Pwy 'di 'i chariad newydd hi? +Fasat ti wir yn gwneud hynny Mary? +Awn gyda Tesni i weld ei modryb yn perfformio mewn bale. +Maen nhw wrthi'n adeiladu pont newydd. +Cliciwch ar y botwm 'Home' i ddychwelyd i'r dudalen gartref. +Dwi'n falch iawn clywed fod gennych ddiddordeb mewn ymuno +Gwadodd y cyhuddiad yn gryf ar y dechrau. +Mae pethau yn mynd o chwith. +Mae dros hanner wedi'u cyfri yn barod. +Ceir craig enfawr ar y copa. +Ymosododd Caradog arno a'i ddinistrio, ac yna anrheithio'r ardal. +Ychwanegwch yr wyau a'r blawd. +Roedd un lle roedd hi'n mynd iddo yn amlach nag unrhyw un arall. +Ceir golygfa o fynydd y Breiddin i'r gogledd-ddwyrain o'r pentref. +Mae clychau'n canu ac yn tarfu ar y stori. +Caiff polenta ei fwyta yn aml yng Ngogledd yr Eidal. +Wn i ddim pwy oedd The Bishop of Bath and Wells bryd hynny. +Dangosed ef yn gall pe newidiai ei iaith, ei grefydd, a'i Dduw hefyd. +Stori ysbryd lawn arswyd yn y gyfres Ysbrydion ac Ati. +Dyfais mewnbwn ar gyfer y cyfrifiadur yw'r bysellfwrdd. +Dos i fewn o fy mlaen. +Defnyddia'r raca i lefelu'r pridd. +Diolch i Osian am ei gais. +Llyfryn dwyieithog yn cynnwys lluniau lliwgar a ffeithiau diddorol am fynydd uchaf Cymru. +Doedd o ddim wedi medru dal llawer o bysgod wythnos diwethaf. +Pen y morthwyl yw'r adran fawr sy'n cysylltu â'r eingion. +Mae pobl yn gallu plannu coed mewn anialwch tywodlyd. +Gall y prinder anadl gadw'r claf yn effro yn y nos. +Arweiniodd hyn at yr hyn a wyddom ni heddiw am Eneteg. +Y mae yn amlwg nad ellir bardd ohono. +I nodi canmlwyddiant ei eni dechreuwyd casgliad cenedlaethol i roi cofadail ar ei fedd. +Ceir effaith arwyddocaol ar feddwl y darllenydd o ganlyniad i hyn +Gwasanaethodd fel ysgrifennydd mygedol i Gymdeithas y Gyfraith a'r Gymdeithas Addysg Gyfreithiol. +Dilyniant o straeon byrion yn ymwneud ag atgofion Mari, y prif gymeriad. +Digwydd bod wedi ffeindio fy hun yn sgwennu am gynadleddau. +O wastadedd hen Faelor, troesom i'r de. +Yr oedd y pellter tua milltir, a chynt nid oedd ond ffordd wledig, gul. +Gall pobl wylio'n fyw ar Facebook. +Bu hefyd yn chwarae i dîm cenedlaethol Cymru. +Maent yn cael eu cysylltu gan aelodau blaen ac ôl. +Torrwch y moron a seleri yn fân cyn eu ffrio. +Nath hi ddympio'i chariad wythnos dwytha. +Yr oedd golwg iach ar ei dalcen. +Cymuned a phentref ym Mro Morgannwg ydy'r Bont-faen a Llanfleiddan. +Mae'r gerddorfa yn elusen gofrestredig o dan gyfraith Lloegr. +Mewn lock-down, wrth gwrs. +Diolch am dy hyder ynof. +Ystyr y gair rhiain ydy merch. +Y mae nwyf a melyster ieuenctid yn ei chân, a mawredd tragwyddoldeb hefyd. +Roedd hi wedi meddwl ei bod hi'n dlws iawn. +Roeddent yn canu yn fwy calonnog o lawer nag y buont. +Mae e'n gweithio yn Aberystwyth. +Hon oedd eu buddugoliaeth ddiwethaf hyd yn hyn. +Ar drai gellir cerdded yn droedsych i ambell un ohonynt. +Anelir yma at gynnig atebion syml, clir ac uniongyrchol. +Cafodd ei addysgu yn ysgol ramadeg Pontnewydd ar Wysg. +Beth yw'r gwahaniaeth? +Mae Sara'n casáu ei llysfrawd newydd, Mat, sy'n Goth. +Pwy a ŵyr na chei di a dy deulu olau newydd. +Dyna oedd ei awgrym heddiw. +Mae'n cymryd rhan yn annibynnol mewn gweithgareddau chwarae ar y cyd +Y mae arnaf ddiolch mawr i chi, f'arglwydd, am y wybodaeth gywir. +Cyfieithiad William Morgan a Richard Parry yw Llyfr Ruth. +Ydych chi wedi dal llawer o bysgod heddiw? +Wi wedi bod yn pobi tomatos yn y ffwrn gydag olew a halen. +Wedi bod trwy fy Facebook yn ddiweddar yn dileu hen sgyrsiau. +Dim ond dwy awr sydd ar ôl gyda ni. +Mi oedd y siop yn gwerthu paent a papur wal. +Fe gododd ei ben ac edrych arni gyda chywreinrwydd ar ei wyneb. +Oes rheswm pam na allwch chi wneud ymdrech i barchu'r Gymraeg? +Rwy'n credu ei fod wedi gollwng. +Nid yw hyn yn newid y gwerth a gynrychiolir gan y degol. +Wi wedi bod yn edrych lot ar Youtube. +Gweiriau ydy prif fwyd y siani flewog ac mae'n gaeafu fel lindysyn. +Bu hefyd yn aelod o Gynghrair yr Eglwys ar gyfer Etholfraint Merched. +Daeth yn blentyn jyngl a dysgodd dechnegau goroesi. +Doedd fy lle parcio arferol ddim ar gael yn Lerpwl heddiw. +Mae'n cysgu'r gaeaf fel chwiler. +Gellir eu defnyddio mewn stoc neu saws tomato. +Mae'r ciwb hefyd yn giwboid hafalochrog ac yn rhombohedron de. +Cododd Llywelyn a'r Cymry lleol mewn gwrthryfel ym Mlaenau Morgannwg. +Roedd y teulu'n fasnachwyr adnabyddus. +Anturiaethau Sam Tân mewn print. +Stori wedi'i seilio ar gyfres Tomos y Tanc. +Ydych chi wedi cofrestru? +Mae Twm a Jac yn cael gwyliau sgïo bendigedig. +Dwi isio copi â llofnod a sws mewn lipstig. +Mae hwnna'n ddarn o hanes nad o'n i'n gwybod amdano. +Dw i wedi gorfod adeiladu fersiwn fy hun. +Stori ddoniol i blant am deulu o ysbrydion direidus. +Y lluosog yw radiysau. +Ar farwolaeth ei dad, etifeddodd ystâd a buddiannau diwydiannol a masnachol sylweddol. +Dw i 'di edrych mewn i hyn. +Sori ga'i jyst deud 'wbath yn sydyn. +Wedi ei marwolaeth fe'i gwnaed yn santes. +Mae nhw angen arweinyddiaeth sydd â chyfeiriad a blaenoriaethau amlwg. +Dyna beth oedd mam yn dweud. +Mae'n cael ei hystyried yn un o'r prif ddeallusion ôl-trefedigaethol. +Casgliad newydd toreithiog a gwallgof. +Mae mam Lisa newydd farw, a'i thad yn wyddonydd dwl. +Ymunodd Paul Powell gyda nhw ar y banjo a'r llais. +Fel arfer, ysgrifennir y rhain fel pâr trefnedig. +Ond yr egwyddor sy'n bwysig. +Mae'n wyfyn prin iawn. +Cymraeg-Lladin-Saesneg, Lladin-Saesneg-Cymraeg a Saesneg-Lladin-Cymraeg. +Ni bu erioed wrthryfelwr mwy aflwyddiannus na thi. +Tafla'r syniad am ymlywodraeth i blith y pethau Utopaidd. +Mae'r mesur yn cynnwys un brifodl drwyddo. +Mae sgil-effeithiau yn anghyffredin. +Heddiw oedd y tro cynta' i mi fod i Gastell Dinbych. +Yno ysgrifennodd ei cherddi cyntaf a breuddwydiodd am ddod yn fardd. +Mae ei cherddi'n hynod bersonol a chyffrous. +Mae ei lygad yn wastadol ar y sach wlân yn Nhŷ'r Arglwyddi. +Mae'r testun wedi'i olygu. +Ydy o'n gulfarn? +Wrth gwrs fe ddywedaf hynny wrtho. +Casgliad o gerddi gan un o brif lenorion Cymru. +Gofod topolegol yw'r gromlin, sy'n homomorffig, yn lleol, i linell. +Agora'r ffenestri yn y stafell wely, mae'n rhy dwym yna. +Mae Draig a Gwich yn deffro yn y fforest dan orchudd o eira. +Prif fwyd y siani flewog ydy derwen, bedwen a choed helyg. +Rhowch fwy o halen a phupur fel y mynnwch. +Dw i'n licio dipio bisgedi yn 'y nhe. +Methiant fu eu hymdrech. +Mae'r pentref oddeutu tair milltir i'r gogledd-ddwyrain o Ruthun. +Derbyniodd Urdd y Faner Goch dros Lafur ddwywaith. +Faint yw'r cyfanswm sy'n aros i astudio yng Nghymru? +Mae hefyd yn aml yn dechrau ar ôl dioddef pwl o gastro-enteritis. +Roedd ganddi naw brawd a chwaer a chafodd ei haddysgu gartref. +Dw i'n dechrau teimlo dros Dave druan. +Gelwir canlyniad tynnu yn wahaniaeth. +Rhaid cofio bod eraill yn gwneud rhywbeth tebyg a llawer mwy cyson na fi. +Fe ŵyr y darllenydd hyn bellach. +Gwnewch â mi fel y gweloch yn orau. +Dechreuodd ei yrfa mewn gwaith cemegolion yng Nglyn Ebwy, cyn symud i Lundain. +Ysbrydolodd y profiad hwn hi fel awdur. +Nofel sy'n cyfuno stori, dychan craff ac adloniant pur. +Ia ma' hynny'n gwneud sens. +Mi oedd y cerrig yn llithrig. +Unig fwyd y siani flewog ydy'r fedwen. +Mi oedd y cyfarfod cyhoeddus yn llawn dop. +Dilynwyd ef gan ei ddyweddi ym mis Rhagfyr. +Y dderwen a'r fedwen ydy prif fwyd y siani flewog. +Dyma restr o Aelodau Seneddol Plaid Genedlaethol yr Alban. +Mi oedd y tractor yn swnllyd. +Mae'r te 'di mynd yn oer. +Mae'r Pwyllgor hwn yn amrywio o flwyddyn i flwyddyn. +Tybed faint o waith golygu sydd wedi ei wneud yn y misoedd ers hynny? +Cofio lle oddan ni'n arfar yfad fel llancs ifanc? +Saith darn o gerddoriaeth gan John Hywel yn seiliedig ar Suo Gân. +Amgylchir y gymuned gan nifer o goedwigoedd. +Un mewn cyfres o lyfrau sy'n dilyn anturiaethau criw o blant. +Nofel ar gyfer yr arddegau am anturiaethau gwaedlyd Nic yng nghanolbarth America. +A dyma fi heddiw yn eu gweld ymhlith coed eraill ar brom Llandudno. +Storïau ar ffurf cartwnau lliwgar yw Cyfres Cyffro. +Weithiau mae'n rhaid gwahaniaethu rhwng segmentau o linell caeedig ac agored. +Mae rhai'n credu eu bod yn dda at asma. +Cyd-ddigwyddiad yw hyn yn ôl Ben. +Casgliad o ganeuon gwerin Cymraeg gan Arfon Gwilym yw Caneuon Traddodiadol y Cymry. +Wedi methiant yr ymgyrch i greu trydedd blaid ymunodd â'r Torïaid. +Ti'n gwybod am unrhyw un ym Marcelona sy'n rhoi gwersi Cymraeg? +Cuddiodd y swyddog y llyfr yn y ddesg. +Mi gafodd o gyfle i fynd ar gynllun hyfforddi ar gyfer newyddiadurwyr. +Nofel hanesyddol anturus i'r arddegau, wedi ei gosod yn y ddeuddegfed ganrif. +Ganwyd ef ym Madrid a'i fagu yng Nghatalwnia. +Byddai'n braf petaech chi'n gwneud mwy o ymdrech. +Ma'r gwynt wedi bwrw pethe drosodd tu fas. +Daw'r wybodaeth yma o lyfryn i ymwelwyr. +Ei wrthwyneb yw amgrwm. +Yr enw arferol ar y beirdd darogan yw daroganwyr neu frudwyr. +Mae yma nyddu delweddau, cerddoriaeth a stori wir. +Mae dau ohonynt yn geidwaid nid anenwog ar fy helwriaeth. +Roeddwn i eisiau i bethau fod fel ro'n nhw cyn i Dad adael. +Dyluniad hyfryd gan Kappa. +Addas i ddarllenwyr yn eu harddegau. +Yna gweithiodd ar raglenni plant am ddwy flynedd ac ysgrifennodd ar benwythnosau. +Ar un cyfnod, bu'n garchar. +Mae 'na lwynog yn y goedwig. +Cyfrol am adferiad yr Hebraeg gan John Emyr yw Sut I. +Cen carreg ydy prif fwyd y siani flewog, fel yr awgryma'r enw. +Hwy ydyw un o'r ddwy genedl fwyaf uniaith yn Ewrop. +Cafodd ei enw oherwydd y lliw oren ar flaen adain yr oedolyn gwrywaidd. +Darluniau lliw llawn a du-a-gwyn godidog. +Yn ddiweddarach, ymrwymodd i'r hyn a alwodd yn drosedd berffaith. +Peiriant sy'n trawsnewid egni trydanol yn egni symudol yw'r modur trydan. +Roedd Gwen yn ferch i'r Brenin Brychan, o Deyrnas Brycheiniog. +Ffurf ar seliwlos wedi'i addasu yw asetad seliwlos. +Ah, reit, wedi camddarllen! +Ar wahân i hynny, doedd dim ffordd i fewn beth bynnag. +Mwy o syniadau dwl y bachgen bach direidus. +Cemegydd organig a ffeindiodd radicalau rhydd mewn toddiant. +Ceir sawl math o halwyn. +Roedd mor agos at yr ardd ac eto'n methu mynd mewn. +Ar fath arall, drwy glicio ar y gair, gall lwytho fideo neu raglen. +Mi oedd dau ddeg chwech o blaid a dau ddeg chwech yn erbyn. +Defnyddiwyd yr olion fel chwarel i'r trigolion cyfagos. +Cafodd yr albwm ei ardystio'n aml blatinwm ledled y byd. +Rho'r teisenni ar y bwrdd. +Fflachiadau o olygfeydd dwi'n eu cofio, nid ffilmiau cyfan. +Dyma un o'r rhannau mwyaf unigryw a gwahanol. +Nid oes gan y fenyw adenydd. +Cerddoriaeth a gomisiynwyd ar ran Côr Ieuenctid Cenedlaethol Cymru. +Oes ap tywydd ar gael yn Gymraeg? +Mae'r chwarennau parathyroid yn gwneud hyn trwy secretu'r hormon parathyroid. +Mae'n arian-gwyn o ran lliw. +Diolch yn fawr iawn, Tom. +Cafodd hefyd lwyddiant gyda dramâu radio. +Yn yr ysgol, roedd yn adnabyddus am ei chyflymder a'i gallu i sbrintio. +Saif o fewn esgobaeth Llanelwy. +Bu'n aelod o Gartref y Swedeg a Chymdeithas Cyhoeddwyr Sweden. +Dyma restr o ddinasoedd a phrif drefi Armenia yn ôl eu poblogaeth. +Coginio Groegaidd ac Eidalaidd sy'n defnyddio'r perlysieuyn hwn fwyaf. +Byddwn yn trafod tai, gofal cymdeithasol, ysgolion y blaenoriaethau. +Mae'r iaith yn goeth, mae angen canolbwyntio weithiau ond mae'n wych. +Darluniau du-a-gwyn doniol. +Ma' batri fy ffôn i yn fflat. +Ti'n meddwl bo fi'n becso am gwestiwn mor dwp? +Ceir un genhedlaeth pob blwyddyn, fel rheol. +Piti wnaeth e ddim para, o leiaf roedd pobl yn canu yn eu mamiaith. +Dysgodd ei thad Ladin a Groeg i Margaret a'i brodyr. +Priododd Lleucu ferch Ieuan ap Siencyn Llwyd a bu iddynt o leiaf un mab. +Ei ddiddordebau yw coginio a darllen. +Dywed traddodiad ei bod yn perthyn i'r Brenin Arthur. +Arferai sefyll yn Sir Feirionnydd cyn newid y ffiniau. +Nid oes gofod i sôn am Mistar Herbert Roberts. +Poblogeiddiodd y byd botaneg ar raglenni radio am rai blynyddoedd. +Teithlyfr gan Geraint Thomas yw Cyfrinachau Llynnoedd Eryri. +Teimlo fel twtsh bach o'r annwyd cyffredin. +Mae ei gwaith yn cael ei ddisgrifio fel brand unigryw o swrealaeth. +Meddwl buasai llysiau a ffrwythau yn ddiogel. +Cymered yr hanesyn hwn fel cynllun. +Mae'n aelod o Blaid Weriniaethol. +Mae hwn yn gymorth da iawn. +Mab Ieuan a ddechreuodd ddefnyddio'r enw Mostyn fel cyfenw'r teulu. +Trigodd mewn ogof syml ychydig yn uwch na phentref Llangrannog heddiw. +Ystyrir mai hon yw'r eglwys leiaf yn Nyffryn Clwyd. +Mae Bedwyr a Dwynwen yn edrych ymlaen at gael mynd i sglefrio. +Roedd hi'n dda gweld cyfweliad Cymraeg gydag Angela. +Un genhedlaeth sydd bob blwyddyn. +Am fy mod yn Ymreolwr cywir a chyson, yr wyf yn parhau i lefain. +Mae hi 'di bod mor boeth yn ddiweddar. +Dwi'n cymryd mai eilbeth fuodd o erioed. +Ond nid dyma'r tro cyntaf iddynt ddod ynghyd i wrthwynebu'r drefn. +Dw i'n mynd am wâc ddyddiol. +O'r diwedd mae rhywun ar y cyfryngau yn siarad yn blaen +Prif fwyd y lindys ydy helyg a phoplys. +Mae pob elfen sydd yn y cyfnod hwn yn ymbelydrol. +Bu yma harbwr ers yr Oesoedd Canol. +Falle hynny'n rhy uchelgeisiol i ddechrau? +Chi yw'r dyn gorau yn y byd. +Roedd lafa yn gorchuddio rhan eang o Gymru ac Ardal y Llynnoedd. +Injan neu beiriant sy'n llosgi tanwydd oddi fewn iddo ydy peiriant tanio mewnol. +Wedi canu Calon Lân heno. +Mae'n edrych yn dda. +Ddown nhw draw yn y funud i gael paned o de. +Ceir y Duw Arddu, hefyd, sef Duw'r Gaeaf. +Pam nad oedd gennym senedd Gymreig? +Ystyr parhaol yma yw am oes y cerflun neu'r gwaith. +Fin nos roedden nhw i gyd wedi eistedd o gwmpas y tân. +Mae'r pennawd yn gamarweiniol ac yn anghywir. +Mae anwybodaeth barnwyr o'r iaith Gymraeg yn ennyn parchedigaeth yn enaid pob Cymro. +Rhoddodd rhywun reid imi yn ei gert a ddaru mi fwynhau fy hun. +Eto ni byddai'n foneddigaidd i Gymro eu galw hwynt yn rhagfarnllyd. +Casgliad o ddeugain o ganeuon heddwch gan Lleucu Roberts yw Caneuon Heddwch. +Dyma gasgliad hyfryd o gerddi mewn amrywiaeth o wahanol fesurau a chyweiriau. +Does dim cofnod o unrhyw weithgaredd yn y Senedd gan Hugh Lewis Owen. +Mae'r etholiad diwethaf wedi dangos eu bod i gyd yn unfarn. +Wnes i ei fwynhau, er mod i prin yn darllen nofelau. +Mewn geometreg elfennol, ochr yw polygon ar ffin polyhedron. +Cafodd gorfodogion y ddeddf hyfforddi eu hamsugno i'r fyddin. +Mae ganddo dri chopa arall. +Llyfr ac astudiaeth lenyddol, Gymraeg gan Alan Llwyd yw Crefft y Gynghanedd. +Enillodd y nofel hon Fedal Ryddiaith Eisteddfod yr Urdd. +Bydde'n dda cael dewis o raglenni Cymraeg ar bnawn Sadwrn. +Bu'n aelod o Academi Ewropeaidd Celf a Gwyddoniaeth am rai blynyddoedd. +Mae Dave yn ôl! +Bu hefyd yn cyfrannu nifer o erthyglau ar gyfer cyhoeddiadau cyfreithiol. +Os 'da chi'n adio gwynnwy i'r coctêl bydd ewyn da arno. +Gwelir y llythyren hon yn sillafiad Ffrengig ei enw ef ei hun. +Yn ystod hinsawdd sych y cyfnod ffurfiwyd y Tywodfaen Coch Newydd. +Cafodd ei diswyddo o'r Weinyddiaeth Crefydd ac Addysg yn yr un flwyddyn. +Pan nad yw'n hydoddi, gall yr asid hwn grisialu gan greu cerrig. +Lluosog y gair dynes yw merched neu wragedd. +Roedd gan Evans diddordeb mawr yn hanes Methodistiaeth Galfinaidd. +Crwydrai'r ci i fyny ac i lawr glannau'r llyn, ddydd a nos. +Casgliad o astudiaeth lenyddol, Gymraeg gan Owen Thomas yw Llenyddiaeth Mewn Theori. +Credir fod ymlyniad cenedl wrth ei hiaith yn ddim angen na rhagfarn. +Bedair blynedd yn ddiweddarach derbyniodd ei gradd Doethuriaeth mewn Llawfeddygaeth Ddeintyddol. +Cymysga'r menyn a'r siwgr cyn ti adio'r wy a'r blawd. +Mae'n llai cyffredin yn Asia ac Affrica. +Mae o'n cael uwd i frecwast. +Treuliodd y diwrnod yn garddio. +Mewn gwirionedd, dwy blaid wleidyddol sydd yno. +Oedran a dinasyddiaeth, fel arfer, yw'r prif feini prawf cymhwysedd. +Roedden nhw eisiau gwybod popeth am y bobl frodorol yn India. +Ei diriogaethau pennaf yw Seland Newydd ac Awstralia. +Fe'i defnyddir fel man cychwyn ar gyfer rhesymu a dadleuon mathemategol pellach. +Roedd y teulu yn perthyn i enwad y Crynwyr. +Mae Cymru mewn trafferthion. +Ond mae'n seiliedig ar adwaith go iawn i fygythiad gwirioneddol. +Ym Mecsico, gweithiodd fel cyfieithydd yn swyddfa'r llywodraeth ac fel newyddiadurwr masnach. +Roedd perthynas y ddau yn fwy o gyd-fyw na phriodas. +Disgwylid amcangyfrif gwell, yma, na'r amcangyfrif un-cam. +Wi'n hoffi gwrando ar hen fiwsig. +Byddai absenoldeb yr esgyrnynnau clywedol yn golygu colli clyw cymedrol neu ddifrifol. +Dyma'r broses ble mae celloedd yr epil yn derbyn nodweddion ei rieni. +Dyma'r gwaith papur i ti. +Mae gan y fodrwy, fel arfer, elfen unfathiant, ond nid gan bob awdur. +Mae'r plant yn cyrraedd lefel dda yn barod. +Athon ni am ddêt noson o'r blaen. +Yng ngwledydd Prydain mae'n bryfyn eithaf prin. +Mae prinder anadl fel arfer yn gwaethygu gydag ymarfer corff ac wrth orwedd. +Yn enw rheswm, pa beth sy decach? +Gweiriau amrywiol yw prif fwyd y siani flewog. +Ewch chi'ch dwy i ista'n fan 'na. +Ar adegau mae'n cydredeg o fewn ychydig fetrau i Glawdd Offa. +Cymuned a phentref ym Mhen-y-bont ar Ogwr ydy Y Castellnewydd. +Mi oedd hynny yn wastraff amser. +Awduron Cymreig yw Bob Morris, Bob Gruff Jones a Bleddyn Owen Huws. +Tybed a fydd gan un ohonynt y priodoleddau sydd eu hangen? +Mae cymuned wedi bod yno ers y cyfnod Rhufeinig. +Mynychodd ysgol ferched Almaeneg breifat. +Mae epilepsi yn dod yn fwy cyffredin wrth i bobl heneiddio. +Siâp hirgrwn sydd i'r dail, a'r rheiny yn wyrdd tywyll. +Mae hi'n werth cofio rhybudd arbenigwr am yr effaith bosib. +Sefydlwyd y cylch yn gynharach 'leni. +Sucan gwyn yw enw arall arno. +Mae'r swyddfa'n oer er 'i bod hi'n boeth tu allan. +Mae'n trefnu teithiau cerdded ar gyfer ei haelodau. +Casgliad o ddwsin o geinciau telyn newydd gan ddeg o gyfansoddwyr cyfoes. +Oes rhywun yn gwybod am unrhyw erthygl neu drafodaeth am drychinebiaeth? +Bacteriolegydd o Dywyn, Meirionnydd oedd Griffith Evans. +Stori ysbrydion hwyliog, llawn dychymyg ar gyfer plant. +Yfory yw Diwnrod Neges Ewyllys Da yr Urdd. +Mae ganddynt ddau o blant, mab a merch. +Tua diwedd Mehefin hyd at fis Medi mae'r oedolyn yn hedfan. +Dw i'n caru Cymru. +Mae bomiau'n disgyn a chriwiau awyrennau'n mynd ar gyrchoedd awyr bob dydd. +Yn gyffredinol, fodd bynnag, nid yw'n gyflwr difrifol. +Be sydd o'i le? +Cadwodd yr heddlu eu llygad arni am rai blynyddoedd. +Yn aml, defnyddir botiau i gywiro'r gwaith gyda sgriptiau a chod pwrpasol. +Doeddach chdi ddim yn licio'r lle bwyd Mecsicanaidd? +Yn union, dwed di. +Elisabeth oedd y ferch gyntaf i dderbyn gradd mewn meddygaeth yn America. +Ledled y byd amcangyfrifir fod anorecsia'n effeithio ar oddeutu dwy filiwn o bobl. +Mae negeseuon mewn dros ugain o ieithoedd. +Nid yw hi'n iawn i mi dalu rhent am ddarn o'm etifeddiaeth. +Roedd gyda Joseph Smith, sefydlydd Mudiad Saint y Dyddiau Diwethaf pan lofruddiwyd ef. +Oes rhywun yn dweud y drefn wrthoch chi yn yr ysgol weithiau? +Yn fuan wedyn, dechreuodd deithio. +Caiff y sepalau eu diosg wrth i'r petalau agor. +Mae o 'di mynd i chwarae rygbi heno. +Gwasanaethodd fel Chwip y Blaid Ryddfrydol yn y ddau dŷ. +Ond mae'n derbyn neges destun sy'n bygwth ei bywyd. +Menna Elfyn yw'r awdur o Gymru. +Mae Tomos yn mynd ar ei wyliau i fferm Ewythr Sam. +Arni y mae'r enghraifft gynharaf sydd ar gael o Gymraeg. +Cysyllta os am sgwrs. +Daeth i ben oherwydd y sgandal hacio ffonau. +Oes problemau gyda'r ap ar lechen Samsung Galaxy Tab? +Mae Mistar Tedi'n methu cysgu. +Defnyddiodd ei ymchwil i olau o'r math hwn i greu meddygaeth newydd. +Teithlyfr gan Eirwyn George yw Meini Nadd a Mynyddoedd. +Mae ganddyn nhw eliffantod a theigrod a chamelod. +Mae'r cysyniad o blân cymhlyg yn caniatáu dehongliad geometrig o rifau cymhlyg. +Ailymgynnull ar gyfer diwrnod olaf yr achos yfory. +Fe ddychwelodd am y goriad. +Dim ond y Llywodraeth sy'n ceisio rhoi sbin positif ar y peth. +Fe ddringodd e lan y graig. +Hi yw'r ieuengaf o bedwar o blant. +Cynhwysir portreadau a cherfluniau o bob unigolyn a drafodir. +Detholiad o gerddi gan y cyn-archdderwydd Dic Jones. +Dw i'n meddwl bod coffi'n well mewn cwpan a sosar. +Yn anffurfiol, gelwir unrhyw linell ymylol yn groeslin. +Ymledodd y system, yn ddiweddarach, i Ewrop ganoloesol. +Piti ydi bod y bobl ddylai fod yn gwrando ar hyn ddim yma. +Mae wedi gweithio i gylchgronau Almaeneg eraill ac wedi ysgrifennu nifer o lyfrau. +Calchfaen golau yw gwneuthuriad y waliau, gyda pheth tywodfaen coch yma ac acw. +Mae hwnna'n ffoto gwych. +Comisiynwyd y gwaith gan Gôr Ieuenctid Cenedlaethol Cymru. +Nodwedd arall yw ffeirio tinboeth heb amharu ar y system reoli. +A dylet ti fod â dynes i edrych ar dy ôl di. +Cyfrol ddwyieithog, lliw llawn drwyddi. +Dyma'r brotest fwyaf a welwyd yng Nghatalwnia. +Stopia roi'r stwff 'na ar dy wallt, dw i'n mygu. +Dyma'r teimlad o ofnadwyaeth fod rhywbeth erchyll fel marwolaeth ar ddigwydd. +Un mewn cyfres o lyfrau i blant. +Mae'n asid cryf y gellir ei gymharu gydag asid sylffwrig neu asid nitrig. +Chdi sydd bia'r ci bach? +Wnes i weld y ffilm yna yn y sinema. +Pump o ganeuon o wahanol wledydd yn Ewrop gyda geiriau Cymraeg a Saesneg. +Pan weles i ti tro cynta' roeddet ti'n gwisgo cot goch. +Print bras a darluniau du a gwyn. +Trigai yng nghwmwd Nant Conwy. +Ceir nifer o henebion eraill o Oes yr Efydd gerllaw. +Gelwir yr ochrau cyfagos i'r ongl sgwâr yn goesynnau. +Ond mae'n amlwg na lwyddodd hynny, a'r Cymry oedd yn fuddugol. +Mae'n cynnwys lluniau du a gwyn. +Mae sglerosis y glust yn fwy tebygol mewn pobl ifanc a menywod. +Nofel yn ymwneud a thân a bwrlwm y diwygiad. +Falch iawn ei fod yn cael ei sortio. +Cynheswch y menyn mewn padell drom. +Cynorthwyodd y twyll Owain i ddianc. +Mewn mathemateg, rhif negatif yw rhif real sy'n llai na sero. +Roedd Guto'r Glyn yn hoff iawn o'r mesur hwn. +Yn dilyn llunio'r rhestr, cafwyd cyfarfod i drafod dyfodol y llyfrgell. +Enwyd y ffatri yn Ffatri Dŵr Mwynol Bryniau Cymru. +Dw i wedi sylwi ar hwnna. +Toriad saethol drwy'r pelfis dynol gwrywaidd. +Mi oedd y parti yn smonach llwyr. +Nid anfuddiol fyddai rhoi pwnc dadleuol iddynt i ysgrifennu arno. +Nid hen awel fain, ond un ysgafn braf. +Doeddwn i ddim mor dew bryd hynny ag ydw i rŵan. +Yr wyf fy hun yn barnu y dylai dyn gael rhyddid crefyddol. +Roedd yn lladmerydd dros hawliau merched o fewn Dwyrain yr Almaen. +Hwn yw degfed mynydd uchaf gwledydd Prydain. +Nofel yn sôn am gi bach direidus sy'n mynd ar goll. +Cofnodwyd ei bod yn edrych yn fain ac esgyrnog. +Mae'r darganfyddiadau hyn yn cael eu cadw gan Amgueddfa Cymru. +Mae'r gwynt 'di nocio petha' drosodd tu allan. +Dro arall, defnyddir y gair am odre sgert. +Cafodd ei alw yn gynhyrfwr, yn wrthryfelwr, ac yn fradwr. +Effaith finegr yw'r term poblogaidd ar ddirywiad negyddion ar sylfaen ffilm asetad seliwlos. +Ni wyddai'r ym¬geisydd ei hun ddim amdano, er bod ei enw wrtho. +Oes raid i fi wneud hwn hefyd nawr? +Dyma gipolwg ar rai o Gymry enwog drwy'r canrifoedd. +Ges i gyfarfod pobl ddifyr a dweud y straeon 'da chi isio'u dweud. +Mae'r neges yn newid bywyd Leusa. +Mae cyfrifo ffactorau cysefin, fel arfer, yn cymryd llawer hirach! +Mynychodd ysgol y Cenhedloedd Unedig ac yna Prifysgol Islamaidd Gasa. +Mae'r adenydd yn ymestyn yn llorweddol ar bob achlysur. +Mae'n adnabyddus am y gyfrol A Wnaiff y Gwragedd...? +Ond buasai'n gwneud dim drwg gofyn. +Bu i fab John Lloyd ac un o ferched Trefor briodi ei gilydd. +Fel be, tybed? +Wyth stori o blith goreuon awdures sy'n fyd-enwog ym maes llenyddiaeth plant. +Rhan o gyfres o lyfrau stori antur i blant gyda darluniau lliw. +'So hi'n cytuno gyda defnyddio lledr achos mae hi'n figan. +Llongwr oedd ei dad, prif beiriannydd ar longau masnachol. +Gelwir perimedr cylch neu elips yn gylchedd. +Mae'r adar yn canu tu allan i'r ffenast. +Etifeddodd Cadwallon ap Cadfan deyrnas Gwynedd ar farwolaeth ei dad, Cadfan ap Iago. +Olynwyd ef gan ei fab, y trydydd Barwn. +Sgyrsiau a draddodwyd ar y radio yw mwyafrif yr ysgrifau. +Wnes i fynd â'r ci am dro i'r parc. +Homilïau gyda chyflwyniad gan Ieuan Wyn a cherdd gan Dafydd Glyn Jones. +Mae'r gwryw yn hedfan yn y dydd a'r nos. +Roedd gan Syr William fab anghyfreithlon hefyd, Richard. +Mae'r canlyniad yma yn sefyll yn y categori cyfartaledd ar y tabl normadol +Bydd y cwrs yn cynnwys gwersi ffurfiol yn ogystal ag astudiaethau annibynnol +Edrychwn heddiw ar yr ochr ysgrifenedig theatr mewn addysg +Roedd hi'n canolbwyntio, a llwyddodd i orffen ei llyfr +Dwi hefyd wedi gwirfoddoli i helpu athrawon rownd yr ysgol +Mae rhai busnesau'n dewis bod yn fusnesau cydweithredol +Mae angen iddo ddatblygu'r gallu i ddrafftio a golygu'n effeithiol +Ella buasai'r model yma o ddiddordeb i chi hefyd +Mwynhaodd defnyddio chwyddwydr i astudio'r wahanol batrymau olion bysedd +Defnyddiwyd cynllun dull cymysg gan gynnal astudiaethau meintiol ac ansoddol +Fy argraff gyntaf o'r darlun oedd ei fod ei yn ymwneud â rhyfel +Byddwn yn ddiolchgar am unrhyw rodd, boed fach neu fawr +Diolch am y gwahoddiad, rwyf ar gael i ddod i'r cyfarfod. +Hwn oedd y canfyddiad pwysicaf o adolygiad diweddar ac awdurdodol o'r dystiolaeth +Bu menywod dosbarth canol yn ymgymryd â gwaith elusen a lles +Mae'r unigolyn yma hefyd yn fyfyriwr ym mhrifysgol Bangor +Yn ogystal, rwyf nawr yn deall pwysigrwydd cydnabod cefndir diwylliannol disgyblion +Mae gan y gwerthwyr allanol offer penodol ac arbenigedd technegol +Yn dilyn ein sgwrs prynhawn yma, atodaf y canlynol i'ch sylw +Cyn gwneud trefniadau pellach, beth yw'r amserlen o ran y gwaith +Mae'r gweithiwr siop yn gweini ar y cwsmer ac yn cwblhau'r pryniad +Mae'r plant wedi ysgrifennu rheolau dosbarth ar y cyd +Dylen nhw farcio ar y cyd mewn asesiad +Nid oes bwriad cynnal adolygiad manwl o'r swyddogaeth +Mae'r llywodraeth yn annog busnesau mawr i gynorthwyo elusennau gwahanol +Alli di e-bostio'r cytundeb diwygiedig draw ata i +Bydd y rhan fwyaf yn gallu creu brawddegau estynedig gan ddefnyddio ansoddeiriau +Dull demograffig arall o gategoreiddio dinas yw ei dwysedd poblogaeth +Mae'r ardal o bwysigrwydd rhyngwladol ar gyfer yr adar i fagu +Parhaf i sôn am bwysigrwydd oedolion yn natblygiad plant +Bydd disgwyl i'r dysgwyr yna ailadrodd y frawddeg a chyflwyno eu henwau +Mae'r hyn yr ydych yn ei wneud yn cyfri +Mae ein cystadleuaeth barddoniaeth i bobl ifanc yn agor yn fuan +Mae'n bwysig dilyn canllawiau priodol er mwyn ateb dibenion y cwricwlwm +Ymddiheurwn, mi fydd y stiwdio ar gau yn y pnawn ar gyfer cyfweliadau +Mae cadeirydd y blaid wedi rhoi ei farn y dylwn i barhau +Soniai am yr effaith mae straen yn ei gael ar arweinyddiaeth +Defnyddiwyd gwahanol strategaethau i hybu ymddygiad da a chreu amgylchedd dysgu pwrpasol +Ar hyn o bryd, nid oes llawer o astudiaethau o sianeli creigwely +Diolch am arweinyddiaeth greadigol a thechnegol +Wnes i dorri coed hefo bwyall. +Y fo yw llysgennad dysgu awyr agored Cymru. +Cymhwysodd yn fargyfreithiwr gan ymarfer yng Nghylchdaith Cymru a Chaer. +Casgliad o ddarluniau'r artist Cymreig Aneurin Jones gan Emyr Llywelyn yw Aneurin. +Ar gyfer lladd uchelwyr Lloegr cafodd ei grogi yn fyw. +Delfrydol ar gyfer pobl sy'n cyfathrebu mewn mwy nag un iaith. +Er ei holl bwerau ychwanegol, dyw fy ymennydd dwyieithog i methu gweld hwnna. +Dau ddotyn yn unig sydd gan y fenyw. +Nofel gan Gwawr Eilian Williams yw Tafarn y Gŵr Drwg. +Dyma'r dull arferol o gyflwyno hafaliad y plân. +Fel ysgrifennydd cyntaf y gangen, cymerodd ran ym mhrotestiadau Dydd Gwener Du. +Arnaf i baned yn dre pan fydd yr haint 'di clirio! +Yn syml, gellir diffinio tameidiau o ddata fel darnau o wybodaeth. +Cred rhai mai fersiwn wedi'i Seisnigeiddio o Arthur yw'r trydydd. +Roedd ei bochau yn fwy gwritgoch nag erioed. +Dilyniant i'r nofel boblogaidd, Gwyn eu Byd. +Mae hynna'n ddatrysiad posib. +Gair tebyg yw amcangyfrif. +Mae ar batrwm croes, gyda'r tŵr yng nghanol y groes. +Nid yw'r tŵr ar agor i'r cyhoedd. +Pan oedd yn ei harddegau, hoffai fod yn filfeddyg neu'n dditectif. +Yr ynyswyr mwyaf effeithiol ydy'r defnyddiau hynny sy'n trapio pocedi o aer. +Gellir cyfrifo canolduedd set feidraidd o werthoedd neu ddosbarthiad damcaniaethol. +Roedd gan Price cysylltiadau ag Aberhonddu o'i ieuenctid. +Credir mai hwn yw'r unig fedal swffragét gyda chysylltiad i Seland Newydd. +Efallai fod tuedd i ystyried cyrris ac ati'n ecsotig ar un adeg? +Dw i isio darllen y llyfr cyn i'r ffilm ddod allan. +Arferai Byddin Imperialaidd yr Almaen ddefnyddio'r enw yma hyd at y Rhyfel Mawr. +Mae Llywelyn yn benderfynol o fynd at wraidd y mater. +Cyfrol o ddeunydd ffeithiol ar gyfer dysgwyr gan diwtor Cymraeg profiadol. +Cafodd ei sedd ei ddal gan John, ei frawd. +Cynhwysir darluniau o rai o'r esiamplau mwyaf prin a diddorol. +Soprano Gymreig oedd Ceinwen Rowlands. +Mae arbrofi gyda disgyrchiant yn rhan anhepgor o'i fagwraeth. +Codwyd o dywodfaen lleol, coch ond gwyngalchwyd drosto. +Dw i 'di sgwennu cerdd am farwolaeth. +O'n i'n lwcus iawn i ffeindio'r fodrwy. +Ef a fu'n gyfrifol am gryfhau Castell Caerdydd. +Yn Nyfnaint y cafodd ei eni, ac yng Nghaergrawnt y graddiodd. +Basan nhw'n dwli ar gael stori. +Cyfraniad oes a fu'n arloesol, ac yn hanesyddol ei ddylanwad hefyd. +Dwi'n edmygu'r genhedlaeth yna fwy fwy bob dydd. +Cyfarwyddwr cynta'r cwmni oedd Dylan Euros Lewis. +Roedd o'n dweud bod ganddyn nhw fwy o aelodau yn y grŵp. +Mi oedd yr hen ddynes yn dod yn fwy ac yn fwy gofidus. +Roedd yn Rhyddfrydwr mewn gwleidyddiaeth ac yn rhugl ei Gymraeg. +Mae'r gweision neidr hyn yn paru wrth hedfan. +Cerddodd at balas Mistar Bully, a sefyll o flaen ffenestr agored y ddawnsfa. +Ond ar y diwrnod hwnnw, pan ddaeth yr amser yn agos, doedd neb yno. +Ym mhob unigolyn, mae un hemisffer yn flaenllaw. +Dwnim, rili, beth amdanat ti? +Y mae gennyf ormod o gariad atat i'th ollwng yn rhydd. +Byddai buddsoddi mewn cynhyrchu mwy o ffilmiau Cymraeg yn gam da. +Roedd ganddi bedair chwaer, gan gynnwys dwy hanner chwaer, a phedwar brawd. +Roedd e'n union fel yr un yn ei breuddwydion. +Wel, dwi yn chwilio am joban. +Fe wnaeth e gadarnhau hynny. +Edmygu pawb ar y rhaglen am roi eu hunain ar y sgrîn deledu. +Dw i'n rili joio fo. +Mae achosion yn amrywio o heb fod yn ddifrifol i fod yn angheuol. +Eu tymor hedfan, fodd bynnag ydy rhwng Ebrill a Thachwedd. +Yn y cyfamser cynheswch gynnwys tin bychan o ansiofis. +Mae'r Ddaear mewn perygl. +Adeiladodd y sefydliad neuadd gyhoeddus, llyfrgell a chwe bwthyn i dlodion y dref. +Wedi cyfieithu Android i'r Gymraeg ydw i. +Ceir carnedd yn gysgodfa ar y copa. +Mae'r antipasti wedi'i wneud gyda reis. +Mae rhifau sengl yn aros fel ag y maent. +Cymhwysodd fel Ysgolor Teilyngdod Cenedlaethol. +Bu'n llywydd Anrhydeddus Gymdeithas y Cymrodorion. +Dyfarnwyd sawl medal iddi hefyd. +Ceir gwared llwyr o'r pregethau hirwyntog, yr areithiau llywyddol, y cylchlythyrau, yr hysbysiadau. +Mae'n dafell gyfoethog o hanes Caerdydd. +Llyfryddiaeth sy'n gyflwyniad i faes cerddoriaeth draddodiadol yng Nghymru. +Mi oedd y bwthyn i lawr y dyffryn. +Ceir tystiolaeth o byllau tanddaearol hefyd i gadw'r grawn. +Mae'r ymennydd eiddil yn cael ei warchod gan esgyrn y benglog. +Ceir lliain pinc wedi'i osod dros fwrdd arall yng nghefndir y llun. +Sawl gwaith sy' raid fi ddeud hynna wrtha chdi? +Mae ar gael ar ffurf tabledi, hufen, eli llygaid ac ar gyfer chwistrell. +Yn ystod ei hoes bu'n aelod o'r Blaid Radical Weriniaethol. +Mae gan yr hogan llgada gwyrdd. +Y tu allan, roedd maes bowlio ac roedd stablau gerllaw. +Mae rhai ieithoedd tagio'n cynnwys cystrawen a ddiffiniwyd ymlaen llaw. +Roedd y robin goch yn dal i ganu a thrydar a gwyro'i ben. +Cyfeirir ati fel morwyn. +Tyddynwr tlawd o Gricieth oedd tad Edward David Hughes. +Enghraifft o segment o linell yw llinellau triongl neu sgwâr. +Daw ei ddymuniad yn wir pan ymddengys cysgod ysbryd i gadw cwmni iddo. +Dwi'n gweld buddugoliaeth yn annhebygol. +Mae rhan helaeth o'r deunydd ar gael hyd heddiw wedi'i archifo. +Person sy'n hoff o fod heb ddillad yw noethlymunwr. +Mae cyn-lywydd Plaid Cymru, Dafydd Wigley, yn berthynas iddo. +Disgwyl bod yno am rhyw ugain munud ond aeth hi dros awr. +Mewn cân gorawl, ceir mwy na tua dwsin. +Mae'n hoff o dywydd braf. +Bu'n aelod o Bwyllgor Cenedlaethol ar gyfer Almaen Rhydd am rai blynyddoedd. +Ond mae iddo ei beryglon hefyd. +Roeddwn i'n ymarfer lot fawr. +Nofel i oedolion gan Mari Ellis yw Ystyriwch Lili. +Roedd yn fab i Dafydd Goch, mab Dafydd ap Gruffudd. +Geith e swper yn y funud. +Casgliad o straeon byrion a modern. +Mae'n un o'r Aelodau Seneddol ieuengaf erioed. +Mae'n adeilad nodedig gyda hanner ohono'n ffrâm bren. +Sawl estrys sydd ei hangen i ddifrodi ysgol? +Yna symudodd i Efrog Newydd i ddechrau ei gyrfa broffesiynol. +Ni fyddaf i yn rhyfygu barnu neb, na dim, drosof fy hun. +Goroesodd dau gywydd i Meurig a'i deulu a sgwennwyd gan Guto'r Glyn. +Mi nath o danio'r gannwyll ar y bwrdd. +Mae'n byw ym Methel, Gwynedd. +Yn ddiweddarach cawsant dri mab. +Prif fwyd yr oedolyn ydy dail helygen a phoplys. +Problem arall gyda heintiau firaol yw pa mor gyflym gall y firws luosogi. +Mi oedd y siarc yn rhy agos i'r traeth. +Oedd dathliad o ryw fath? +Llyfr bwrdd lliwgar i'r ifanc gyda geirfa o gwmpas y lluniau. +Pentrefan yng nghymuned Llaneilian, Ynys Môn, Cymru yw Cerrig-mân. +A fydd yn derbyn anrheg gan Siôn Corn? +Pa un ai mantais ai anfantais i ddynion fyddai bod heb iaith o gwbl? +Ga i rew yn y ddiod 'ma plis? +Gobeithio eu bod nhw'n bloeddio fel bod y neges yn atseinio. +Nath o gwcio ratatouille. +Llyfr stori a llun sy'n ymdrin â thema bwlian. +Gwaith Llywarch Ap Llywelyn Prydydd y Moch. +Mae ganddi beil o lyfra wrth ymyl y gwely. +Dyma a wneir mewn geometreg Ewclidaidd. +Doedd genna i ddim signal felly wnes i 'im cael dy decst di. +Ti 'di dwyn y ffrog newydd o'n i 'di feddwl gwisgo heddiw? +Wnes i weld seren wib neithiwr. +Rhoddwyd addysg breifat iddi. +Rho'r miwsig 'na ffwrdd. +Y cyfrwng a ddefnyddiwyd yw paent olew ar bren, gyda brwsh impasto. +Handi cadw pethe'n syml weithiau 'fyd! +Hi yw sefydlydd a chadeirydd Cymdeithas Merched Asiaidd yr Alban. +Nofel am fywydau amrywiol aelodau o gôr merched. +Llyfr yn cynnwys gwybodaeth adloniannol. +Nid yw amgryptio disg yn disodli amgryptio ffeiliau ym mhob sefyllfa. +Ond dwi'n lyfio fo. +Daeth yn arweinydd naturiol o ymgyrch y siartwyr yn Ne Cymru. +Casgliad o ysgrifau gan Dyfed Evans yw Cyfaredd Eifionydd. +Does dim dianc i Dylan Rees. +Mae angen iddynt fod heb drawiad am beth amser cyn y gallant yrru car. +Yr wyf yn coelio, bellach, na'th foddlonir byth. +Bu'n aelod o Gynghrair Ryngwladol Menywod dros Heddwch a Rhyddid am rai blynyddoedd. +Hi oedd cyd-sylfaenydd meithrinfa gyntaf y dalaith. +Yn ei llyfr, archwiliodd effeithiau'r gosb eithaf ar bawb dan sylw. +Roedd Gavin yn hogyn clên ac mae colled mawr ar ei ôl. +Fydd y mwnci'n ffeindio'i fam? +Nid yw'r fenyw yn medru hedfan. +Stori ddoniol a byrlymus ar thema rygbi. +Cyfeirlyfr Cymraeg yw Llawlyfr y Theatr yng Nghymru. +Croeso nôl i chi. +Mae 'na wersi yoga am ddim ar-lein. +Lle bach cwtshlyd, braf. +Mae yn gefnder i mi, ac yn debyg i mi mewn llawer o bethau. +Mae pwyntiau yn un o'r gwrthrychau mwyaf sylfaenol o fewn fframwaith geometreg Ewclidaidd. +Bu'n aelod o Urdd Merched y Bleidlais am rai blynyddoedd. +Saif Castell y Fenni yn nhref farchnad y Fenni, yn ne-ddwyrain Cymru. +Byddai'n dda dilyn person blaengar a medrus fel ef. +Marciau melyn golau sydd gan y gweision ieuanc. +Drygionus tu hwnt; clyfar dros ben. +Yr oedd yr holl deulu wrth eu bodd. +Rhan o gyfres o ddramâu byrion Cyfres y Llwyfan. +Mi wnes i dy drin yn deg, ond aneffeithiol fu pob triniaeth. +Yn flynyddol ceir rhwng dau a phum diffyg rhannol ar y lleuad. +Mi oedd hi'n sych ac oer yn gyffredinol. +Torrwch y wyau, gan ychwanegu halen, a dwy lwy fwrdd o ddŵr llugoer. +Cyfrol o ysgrifau ar agweddau amrywiol ar lenyddiaeth mewn theori. +Caiff ei gysylltu gyda dolur gwddw. +Gogledd-ddwyrain a Hanes Cymru gan John Davies. +Bu'n ynad heddwch ar feinciau siroedd Caerfyrddin a Cheredigion. +Mae Dwyrain Rhisga ym mwrdeistref sirol Caerffili ac yn rhan o dref Rhisga. +Mewn pobol, mae'r ffaryncs hefyd yn bwysig yn y broses o greu sain. +Cymuned yn Sir Gaerfyrddin ydy Treflan Lacharn. +Fedra' i ddim helpu meddwl weithiau ei fod o'n fwriadol anodd ffeindio pethau. +Roedd fel bod potel bop wedi'i hagor. +Mae'r dorth 'di mynd yn stêl. +Y fam fynydd ydy Cadair Berwyn. +Gellir gwrando ar y gerddoriaeth ar ddyfais, yn ffôn, tabled, cyfrifiadur ac ati. +Cyfrol gan Dafydd Davies ac Arthur Jones yw Enwau Cymraeg ar Blanhigion. +Mae'r castell wedi'i gofrestru fel Adeiladau rhestredig Gradd Un Sir Gaerfyrddin. +Mae Alys a Glain wedi bod yn ffrindiau gorau erioed. +Ceir ffos o'i amgylch a dwy gistfaen dal lludw dynol o'i fewn. +Mae'n treulio'r gaeaf fel chwiler. +Mae 'na wenoliaid 'di nythu yn y cwt. +Fel rheol mae'n gweithio o fewn un i dri diwrnod. +Ystyr biswail ydy baw gwartheg, neu dom da. +Flwyddyn yn ôl roedd rali annibyniaeth Caerdydd. +Helo, ydy hynna'n dal yn rhywbeth pwysig? +Arweinydd newydd ydi'r peth nesaf ar yr agenda. +Mae'n was neidr eithaf hir, ac mae o faint mwy na'r cyffredin. +Diolch i'r gwasanaeth iechyd. +Stori gan Catherine Jones yw Straeon Bobi Blaidd. +Parhaodd y cam-drin hwn am saith mlynedd. +Caiff ei gynhyrchu drwy greu adwaith cemegol rhwng amonia a hydrogen clorid. +Nes i brynu top hefo sequins arno fo i fynd allan. +Ysgol ddwyieithog yng nghanol tref Rhuthun, Sir Ddinbych ydy Ysgol Stryd y Rhos. +Mae'n is faes rhyngddisgyblaethol o fewn gwyddoniaeth gyfrifiadurol ac ystadegaeth. +Mae'n hawdd canfod yr achos. +Atgoffa fi o fod yn Budapest yn un naw naw un. +Cawn bortread byw o'r dre a'r cymeriadau trwy lygaid y tri. +Un ar ddeg o straeon byrion. +Yn eironig iawn, mae'n llawer gwaeth mewn oedolyn nag ydyw mewn plentyn. +Stori gan Alan Davies yw Y Belen Iorwerth. +Dw i'n berffaith iach hyd y gwn i. +Mae'r cloc yn tician. +Mi aeth y ferch fach am dro gyda'i ffrind. +Oherwydd problemau gyda'i chefn, nid ydyw bellach y chwarae tenis. +Cafodd hyfforddiant mewn adrodd gan David Thomas Jones ar awgrym ei gweinidog. +Llyfr ar gyfer plant yn bwrw golwg smala ar wahanol ddulliau o deithio. +Mae'r dail yn fwytadwy yn yr haf a'r hydref. +Mae'r ddynes yn hen a mae'i chefn wedi crymu. +Sgwenna bethau gwreiddiol neu addasa a chyfieitha erthyglau eraill. +Mae'r geg yn cynnwys dau ranbarth, y cyntedd a'r ceudod llafar. +Ni cheir nodweddion amlwg ar y copa. +Mae iddo dair rhan, pob un yn bedair sillaf yr un. +Casgliad o wyth o straeon byrion gan Meinir Eluned Jones yw Sylfeini Llithrig. +Pan maen nhw'n cael seibiant nid yw eu hadenydd ar agor. +Nofel ar gyfer plant a'r arddegau gan Gwenno Hywyn yw Gwerfyl Gam. +Caiff gartref gyda hwy ar ôl cael ei hachub o blith y biniau. +Es i i nôl torth o'r becws. +Mae mam yn mynd am dro yn y car heb do. +Mae hi 'di bod yn gweithio'n galed iawn bechod. +Mae'r ardal yn lled fynyddig gyda llawer o gymoedd bach, dwfn a chul. +Dyma restr o ardaloedd llywodraeth leol yn Nhalaith De Cymru Newydd Awstralia. +Nofel ar gyfer plant a'r arddegau gan Eirug Wyn yw Powdwr Rhech! +Mae'r dystiolaeth mai metaboledd araf ydy'r achos yn wan iawn. +Ond chi'n iawn bod colli ein gorsafoedd lleol yn drist. +Llyfr wedi ei ddarlunio mewn lliw a du-a-gwyn. +Roedd Jenkins yn daclwr cryf ac yn rhedwr hynod o gyflym o ddechrau stond. +Dilyniant i Rhwng y Cŵn a'r Brain a Rhyw Chwarae Plant. +Rhieni fydd yn penderfynu os ydi plant yn mynychu ysgol, nid y wladwriaeth. +Cysegrwyd yr eglwys i Dewi Sant a'i fam Non. +Mae'n treulio llawer o'i hamser yn byw yng Ngorllewin Cymru. +Stori gan Stephen Jones yw Y Saethau Duon. +Mae India'n lle gwahanol iawn i Swydd Efrog. +Fe ddaeth ar draws car wedi ei adael wrth ymyl y ffordd. +Dwi'n ymwybodol o fudiadau sydd wedi derbyn llythyr fel hwn yn Saesneg. +Ti 'di gweld y lein-yps? +Aeth i fyny un rodfa ac i lawr rhodfa arall. +Mae'r erthygl hon yn cynnwys diffyg maeth a gor faeth. +Blodeugerdd o gerddi gan Alan Llwyd ac Elwyn Edwards yw Gwaedd y Lleiddiad. +Tarodd hoelan i fewn i'r pren hefo mwrthwl. +Gafaelodd yn y dillad gwely a'u hysgwyd unwaith neu ddwy. +Mae hi'n gwisgo mwclis efo sêr arno fo. +Hyd yn hyn, nid yw'r esgyrn wedi eu dyddio. +Un o'r cylchoedd hyn ydy'r cylch cerrig mwyaf yn Ewrop. +Rhestrir Ilar fel un o seintiau'r Eglwys Geltaidd mewn sawl dogfen. +Er enghraifft, un o'r symptomau cynharaf o lid y freithell ydy cur pen. +Gwell fyth, dyma gyfle i wneud hynny wrth ddysgu caneuon meithrin Cymru. +Wedi bod yn bach o slob dros y gaeaf. +Geiriadur idiomau Cymraeg gan Ceri Jones yw Dweud eich Dweud. +Bu'n aelod o Blaid y Merched Rhyddfrydol am rai blynyddoedd. +Does dim posib ei newid, oherwydd strwythur y rhan yna o'r cod. +Uned arferol dwysedd yw cilogram pob metr ciwb. +Meddwl rhoi bet arno fo yn arweinydd nesa'r Toris. +Mae'r gwynt wedi newid cyfeiriad. +Y megalodon ydi'r siarc mwyaf i fodoli erioed. +Tylinwch y toes, gan roi blawd ar eich dwylo o dro i dro. +Mae modd eu prynu o fferyllfeydd, archfarchnadoedd neu ar-lein. +Rho'r cartŵns mlaen iddyn nhw ar y teli. +Cyfeirlyfr poced i lefydd i ymweld â hwy yn Sir Benfro. +Saif mewn stryd o'r un enw yn Nhrefynwy, Sir Fynwy, de-ddwyrain Cymru. +Ar y dechrau, roedd saith mynach a phrior. +Ddaru mi godi am bedwar y bore. +Pa mor ofalus bynnag fyddai hi'n edrych allai hi ddim gweld dim byd. +Dywed rhai mai dyma leoliad gwreiddiol Dinbych. +Arferid defnyddio pren ywen ar gyfer y bwa hir. +Ar doriad yr Ail Ryfel Byd ymunodd â'r Llynges Frenhinol fel codiwr. +Mae'n perthyn i'r un teulu â blodyn ymenyn. +Yn India roedd hi wastad wedi bod yn rhy boeth a diegni. +Yr ail o dair nofel fywgraffyddol. +Er hyn, mae'r set o rifau cysefin yn un enfawr. +Roedd yn ymddangos bod y briodas yn un berffaith. +Haia Sioned, dwi'n gweithio iddyn nhw. +Prif fwyd y siani flewog ydy'r llarwydden. +Ychwanegwch flawd a'u cymysgu gyda'i gilydd, yna ychwanegwch domatos. +Blawd ceirch wedi'i ferwi mewn dŵr neu laeth ydy uwd. +Nofelig aeddfed am deulu Cain gyda pherthynas a gwreiddiau'n llinyn arian drwyddi. +Yn yr achos hwn, nid oes diffiniad cytûn o ddull. +Os ydynt yn gyfochrog yna gelwir hwythau'n sylfaen. +Dengys ymchwil gwyddonol fod ei olew yn cynnwys rhinweddau gwrth-ffwng. +Fel arfer mae pedair chwarren barathyroid. +Dechra t'wllu wedi glaw, cenllysg a thamed o heulwen ym Mrwsel. +Trydar yw tweet ac felly retweet yw aildrydar. +Ar y dechrau doedd hi ddim wedi'i hoffi hi o gwbl. +Yn aml, mae'r canghennau'n llydan a'r rhisgl wedi cracio. +Lle gest ti'r 'sgidia 'na? +Mae'n perthyn i deulu llygad y dydd. +Cafodd gryn ddylanwad ar ei ddilynwyr. +Casgliad o fyfyrdodau a gweddïau cryno sy'n canolbwyntio ar natur Duw. +Ysgrifau am gymeriadau a digwyddiadau diddorol ym Mhenllyn. +Ceir yma ymdriniaeth ag ansawdd a tharddiad y canu rhydd. +Eich job fel newyddiadurwyr yw rhannu'r gwir. +Naddo, ydyn nhw'n gwneud hyd a lledrith neu Excel hefyd? +Dwi gam yn agosach o ran bod â chopi a medru gweld ei gynnwys. +Cyfrol wedi'i pharatoi gan hanesydd bocsio uchel ei barch. +Ceir yn bennaf o gwmpas y Môr Canoldir a thiroedd isel Gogledd Affrica. +Ni fedraf gysoni fy holl ymddygiadau â'i gilydd. +Ceir un genhedlaeth yn unig bob blwyddyn. +'Di o rioed wedi gweld un o'r blaen. +Mae hwn yn blanhigyn gwenwynig a gall achosi briw ar y croen. +Mae pecynnau diderfyn ond mae cyfyngiadau ym mhrint bach y cytundebau. +Mae'r tymheredd hwn, fodd bynnag, yn is na thymheredd yr ymbelydredd cefndirol. +Ar ôl y gwaith pobi roedd yna dân da. +Mae'r clust fewnol yn cynnwys y cochlea a'r nerf clywol. +Mae nain yn licio mynd i'r capal ar y Sul. +Ffôn diwifr, cludadwy a ddefnyddir i drosglwyddo llais neu ddata i ffôn arall. +Mae'r meinwe byw yn llosgi oherwydd pelydrau uwchfioled yr haul. +Cyfrol newydd ar gerddoriaeth draddodiadol Cymru gan Meredydd Evans yw Hela'r Hen Ganeuon. +Hi oedd y ferch gyntaf i gael ei derbyn i'r Gymdeithas Frenhinol. +Mae dy anti di yn wych! +Daeth yn ail yn y ddwy flwyddyn gyfamserol. +Mae'n digwydd yn aml ar draed neu ddwylo. +Ceir cyhyr ac amlinelliad math o ddail o'r enw rhomboid hefyd. +Caiff weithiau ei alw'n ffactor cyffredin mwyaf neu ffactor cyffredin uchaf. +Ceir pennaeth ar ysgolion cynradd ac uwchradd. +Ond a all y tŷ ei hun fod yn ddrwg? +Fodd bynnag, roedd llawer o'i berthnasau yn ddioddefwyr yr Holocost. +Arferai fod yn rhan ar gyfer gwasanaethau'r amryw denantiaid yn yr adeilad. +Ceir hefyd yn Lloegr, de-orllewin yr Almaen ac yn y Swistir. +Mae'r gair rhudd yn Gymraeg, wrth gwrs, yn golygu coch. +Wedi cael jinsen bach gyda'r cordial heno paid becs! +Dw i ddim yn siŵr iawn pwy oedd o. +Daethant ynghyd yn wythnosol i drafod materion cymdeithasol y dydd. +Mae'r gynrychiolaeth yma'n unigryw hyd at drefn y ffactorau. +Rhoddodd yr hen ddyn y llyfr i'w fab. +'Da ni'n bobl fusneslyd! +Mae'n sylweddoli bod rhywbeth sy'n bwysig iawn iddi ar goll. +Nofel ar gyfer plant a'r arddegau gan Mair Wynn Hughes yw Caleb. +Ychydig iawn o ddeunydd litwrgaidd sydd wedi goroesi yng Nghymru. +Hyfryd ond melys iawn iawn. +Bu'n aelod o Bwyllgor Materion Mewnol am rai blynyddoedd. +Mae mislif yn medru bod yn boenus iawn. +Mae'n bosib mai o'r cyfnod yma y daw'r to bwaog hefyd. +Gelwir y rhain yn gyfryngau digidol. +Diolch am eich gwaith. +Casgliad o ddeuddeg cainc ar gyfer y delyn gan nifer o wahanol gyfansoddwyr. +Mae'n perthyn i deulu'r fresychen. +Heddiw ymhlith ei aelodau mae llawer o bobl nad ydynt yn arddel crefydd benodol. +Yr oedd Thomas yn aelod cenedlaetholgar o'r Blaid Ryddfrydol. +Gall cyson hefyd gyfeirio at ffwythiant cysonyn, neu ei werth. +Roedd Robert Roberts yn amaethwr, melinydd, bardd, eisteddfodwr a chanwr gwerin Gymreig. +Nofel i ieuenctid yn eu harddegau. +Ddylsen ni chwarae rygbi yn yr Haf? +Edrychir ar y tair arall gan nifer o fudiadau fel carcharorion gwleidyddol. +Mi oedd hi'n bleser cael cyfarfod Elsi fach a'i theulu ddoe. +Mi oedd y felin yn troi. +Ychydig a wyddent fod blaidd mawr blin yn dynn ar eu sodlau. +Mae rheoli data yn ymgorffori pob disgyblaeth academaidd parthed data fel adnodd defnyddiol. +Ceir craciau fertig, oren yn y rhisgl. +Ysgrifennai nofelau, pamffledi, cerddoriaeth a dramâu. +Nid yw anifeiliaid eraill, megis cathod a chŵn, yn chwarae rhan wrth drosglwyddo. +Nofel ar gyfer plant a'r arddegau gan Emyr Hywel yw Dyddiau'r Drin. +Fues i ym Maracesh flwyddyn ddiwethaf. +Os daw gwrthryfelwr i'ch tiriogaeth, caiff ei noddi a'i foethi gennych. +Prif fwyd y siani flewog ydy cen carreg a mwsogl. +Mae rhai mathau sydd bellach yn imiwn i sebon golchi dwylo gwrthseptig. +Gwrthododd gynnig i ddod yn Brif Weinidog ar dri achlysur. +Mae e'n methu siarad Cymraeg. +Bwyd syml, traddodiadol wedi'i wneud gyda bara a llaeth ydy bara llaeth. +Gellir darllen ei gwaith ar sawl lefel, fel pob llenyddiaeth fawr. +Cafwyd sawl perchennog dros y canrifoedd. +Pumed casgliad o farddoniaeth ysgolhaig a beirniad llenyddol Cymraeg cydnabyddedig. +Nofel i blant yn ymwneud â byd ceffylau a marchogaeth. +Mae o hefyd ar gael mewn glas neu ddu. +Rhoddwyd ei weddillion i orffwys yn Eglwys Sant Afan, Llanafan, Ceredigion. +Pan fydd y madarch wedi'u coginio, rhowch ansiofi tu fewn i bob un. +Erbyn yr arddegau cynnar, mae'r thymws yn dechrau arafu. +Tirfeddiannwr pwerus, gwleidydd a milwr oedd Syr Richard Trefor, Trefalun, Maelor. +Mae'r ymwybyddiaeth ei bod yn brifddinas yn treiddio yn araf i'r boblogaeth. +Roedd yn gyffrous medru gweld y bwyd yn cael ei goginio hefyd. +Roedd Ymerodraeth Awstria yn niwtral, ond chwaraeodd ran flaenllaw yn y rhyfel. +Mae'r dyn yn gyrru'r lori. +Myfi a'i piau i gyd oll. +Ymddangosodd gweithiau ganddi mewn sawl cylchgrawn a phapur newydd. +Mae Dewi a Siriol yn blant arbennig. +Mae Ardal Ymchwil Brycheiniog, bellach, o fewn Ardal Ymchwil Powys. +Does ganddon ni ddim stamps. +A oes modd achub Llechen? +Hi yw Aelod o Lywodraeth yr Alban dros Glasgow. +Cafodd ei addysgu yn ysgol ramadeg Caerfyrddin. +Diolch Einir, dyna garedig. +Un i chi y tro yma. +Tair taith a thri llai, ond pwy sy'n gwrando? +Dyma un o'r rhywogaethau mwyaf niferus drwy Ewrop. +Roedd Yma o Hyd a Bob yn y Ddinas wedi cystadlu, yn aflwyddiannus. +Llyfr am ddraig fach sy'n achosi anrhefn ar y fferm. +Os na ddaw ateb i dy gwestiwn, bydd hyn ar agenda'r cyfarfod nesaf. +Mewn mathemateg, mae'r ansoddair cysonyn yn ddisgrifiad o rywbeth nad yw'n amrywio. +Dw i 'di gadael yr ysgol ers saith mlynedd erbyn hyn. +Stori arall am helyntion Rhian Mai a'i theulu. +Y blodau, y llwybr, y staff a hyd yn oed yr awyr yn binc! +Antur amlddewis i blant gan Eleri Davies yw Tro i'r Castell. +A yw'n llwyddo, tybed? +Dwsin o garolau i lonni'r Ŵyl. +Safodd Law fel ymgeisydd plaid Annibynnol Llais Pobl Blaenau Gwent gan gipio'r etholaeth. +Almaeneg oedd iaith y teulu. +Cymerwyd mantais o hyn gan rai i siarad heb wahoddiad. +Caiff ei achosi drwy orfwyta, diffyg cadw'n heini a rhesymau etifeddol. +Poen yn y geg oherwydd dant drwg ydy'r ddannodd. +Fe'i gwelir mewn llawer o wledydd Ewropeaidd ac yn Asia. +Yn aml, mae pobl hŷn yn datblygu effeithiau andwyol. +Does na'm amheuaeth o hynny. +Mae asennau gyddfol yn gyffredin mewn rhai anifeiliaid megis ymlusgiaid. +Daeth y digwyddiad yn adnabyddus fel Y Dydd Gwener Du. +Ma'r blode yn gwynto'n ffein bore 'ma. +Efallai nad yw rhai o'r awgrymiadau dilynol yn apelio. +Gwyn yw lliw eu hwyau. +Saif ym Mro Morgannwg. +Mae gan drychiadau conig y plân Ewclidaidd amryw o nodweddion. +Mae'n cael ei weini yn fewnwythiennol. +Dengys y gyfrol hon ddarlun newydd, cyfoes o holl amrywiaeth yr arfordir. +Mae fforiwr yn berson sy'n chwilio am rywbeth. +Dw i jyst yn rhoi'r fath lythyron nôl yn y post. +Cymuned ym Mhenfro yw Abergwaun a Wdig. +Mae hyn yn wir! +Y mae rhai o'r ymgeiswyr yn dangos llai o wladgarwch. +Daeth yn aelod o Gapel Libanus, Y Methodistiaid Calfinaidd, ym Maesteg. +Nid oedd ganddi unrhyw blant a bu farw yn Awstralia. +Pwrpas yr arbrawf yw canfod neu gadarnhau'r berthynas achos-effaith rhwng y newidynnau. +Dywedodd ei thad wrthi mai mater rhyngddo fo a'r perchennog oedd o. +Cefais wybod dros y ffôn nad oedd trên na chwaith bws o'r Amwythig. +O ddydd i ddydd mae hi'n ddarlledwr ac yn athro ysgrifennu creadigol. +Y bwriad oedd ei gyflwyno ar yr un pryd i holl seneddau'r byd. +A dyna ddiwedd yr alwad. +Ddim yn dod yn agos at gyrraedd hynny. +Serch hynny, dychwelodd rheithgor ei threngholiad reithfarn o lofruddiaeth. +Mae hyn yn bwysig iawn i mi. +Maen nhw'n blodeuo rhwng Mehefin ag Awst. +Mae hefyd eisiau buddsoddi llawer mwy mewn datblygu technolegau iaith. +Mae rhai o'th feibion yn llenwi swyddau anrhydeddus yn fy nhŷ. +Roedd ganddynt fab o'r enw Dafydd. +Planhigyn bwytadwy yn nheulu'r fresychen ydy brocoli. +Dyma'r gyfrol olaf yn y gyfres bwysig a diddorol hon. +Roedd hefyd yn heddychwr cadarn. +Yr wyf yn awyddus i'th gael yn gyfaill ac yn gydweithiwr. +Roedd ei chefn tuag at y drws. +Mae ei thŵr sgwâr canoloesol hefyd yn nodwedd hynod o drawiadol. +Cyfrol ar sut i adnabod blodau gwyllt a dysgu mwy amdanyn nhw. +Ond meddylia mae 'na ddoethuriaeth i'w sgwennu. +Mae'r canlyniad bob tro yn rhif real. +Fe ddaeth i lawr oddi ar y mynydd fel yr oedd hi'n nosi. +Ychydig yn ddiflas yw prifathro newydd Ysgol y Bryn. +Mae triniaethau eraill yn cynnwys albwmen a thiamin, a defnyddio dialysis. +Nathon ni ffendio madarch yn tyfu tu fewn i'r adfail. +Maen nhw angen rhoi'r cyfrwy ar gefn y ceffyl. +Trist iawn i glywed hyn. +Fe'th fagwyd yn rhy dyner i orwedd mewn daeardy. +Llyfr lliwgar yn adrodd hanes y Nadolig i blant ifanc. +Ceir yma hefyd gywydd mawl a nifer o englynion. +Gwyddys, bellach, fodd bynnag fod y dyddiad geni hwn yn anghywir. +Mae llongau o'r gofod ar eu ffordd i ddwyn dŵr y Ddaear. +Cyfansoddyn organig yw fitamin, sydd yn angenrheidiol i lawer o organebau byw. +Lluniau du-a-gwyn gan Angharad Tomos. +Fel hyn y mae llawer ohonynt yn siarad. +Mae'r gyfrol yn cynnwys awdl Y Cynhaeaf gan y Prifardd Dic Jones. +Mae bys bach 'yn nhroed i'n 'nafu. +Gweithiodd am gyfnod fel beirniad diwylliannol ar gyfer papurau newydd a chylchgronau. +Y nofel ôl-drefedigaethol gynta' yn y Gymraeg. +Ond hoffodd hi sgipio gymaint fel nad oedd hi eisiau stopio. +Dilyniant i Siani'r Shetland. +Sut fuasech yn disgrifio'r ystum yma? +Llyfr lliw llawn drwyddo yw hwn. +Maent yn cynnwys rhwydwaith o diwbiau a sachau bach. +Ymgorfforodd llawer o'r llefydd a welodd ar ei theithiau yn ei gwaith llenyddol. +Mae nhw'n chwarae gêm ar yr Xbox. +Cafodd, felly, ei magu yng nghartref ei mam-gu. +Mae'n dewis iaith estronol yn lle ei iaith ei hun. +Newyddion da iawn. +'S rhywun wedi gwneud ymchwil tebyg eisoes? +I bob pwrpas, gellir ei ystyried i fod y gwerth yn y canol. +Ond trist gweld darn arall o'r gorffennol yn diflannu. +Os bernwch y gwnai ddyrchafiad niwed i mi, rwyf yn fodlon parhau yn wastrodyn. +Mae'r wledd priodas yn mynd rhagddi. +Cynhwysir yn y gyfrol hon holl gerddi'r bardd o Rosllannerchrugog. +Dw i'n hoff o gadw'n ffit. +Mae creigiau Llanymddyfri Isaf yn cynnwys cruglwythau, tywodfaen a gwlâu o lechi. +Joben fach i rywun ei drwsio. +Buodd yr ap yn adnodd hynod werthfawr i mi allan yn Tsieina yn ddiweddar. +Bydd bonws yn cael ei wobrwyo am gyflawni'r tasgau. +Roedd yn rhan o sefydlu'r Gymdeithas Genedlaethol er Hyrwyddo Pobl Liw hefyd. +Ond ni'n gwylio pob symudiad. +O ble daw'r holl sôn bod Kim Jong-un wedi marw? +Caiff ei neithdar o blanhigion llysieuog. +Un mewn pedair o astudiaethau yng Nghyfres y Meddwl Modern. +Cafodd addysg breifat cyn mynd i astudio'r gyfraith. +Daeth mor sâl nes iddi gael ei rhyddhau bythefnos ar ôl hyn. +Wnest ti weld rywun odda chdi'n nabod? +Roedd yr enwadau anghydffurfiol yn gandryll yn erbyn y syniad. +Mae gen i datŵ o ysgyfarnog a lleuad. +Mae'r oedolion yn byw rhwng Mehefin ac Awst. +Ceir dau fath topolegol gwahanol. +Hi oedd yr hynaf o bedwar o blant. +Hinsawdd Môr y Canoldir Dwyreiniol yw hinsawdd yr ardal. +O dan adio, maent yn adio fel fectorau. +Bu dyfalu bod Jack wedi symud yno ac wedi lladd y ddwy. +Mi gafodd o swper mawr y noson honno. +Mae'n hoff iawn o greigiau cynnes i orffwys arno. +Teithiodd i Wlad Groeg gan astudio'r hen adfeilion. +Cangen o fathemateg gymhwysol yw geodedd a gwyddorau daear. +Wnes i weld hi'n croesi lôn, wn i ddim lle mai 'di mynd. +Pwy sydd bia'r gôt ar waelod y grisia? +Mae'r Fantell felyngoch yn hoff iawn o ymylon coedwigoedd, llennyrch a llwybrau cerdded. +Wedi arbrofi a chymreigio ap tywydd yn ddiweddar. +Dyma'r cwbl y mae o'n dadlau drosto. +Mi oedd hi'n gwisgo siaced goch. +Ef hefyd oedd arweinydd y gymuned ddarlledu yng Nghymru. +Ond penderfynu aros yn ddyn, a mynnu hawliau dyn, a wnaeth. +Casgliad o wasanaethau yn seiliedig ar adrannau'r llyfr emynau, Caneuon Ffydd. +Mae o'n licio chwarae ar yr Xbox. +Roedd Syr Robert John Thomas yn berchennog llongau ac yn Aelod Seneddol Rhyddfrydol. +Mae'n odli gyda'r ail linell naw sill. +Dylai creu llwch hyd y tylwyth teg fod yn llawer o hwyl. +Ges i'r pasta gora 'rioed pan es i i'r Eidal. +Llyfr sy'n amlinellu'r egwyddorion Cristnogol gan Isaac Thomas yw Trosom Ni. +Bydd mwy am ddatblygiadau diweddaraf y cwmni ar y newyddion heno. +Gallai fynychu oherwydd iddi ddefnyddio beic tair olwyn wedi'i addasu. +Dw i angen golchi dillad heddiw. +Dyma'r diffiniad anghynhwysol, sydd yn eithrio'r paralelogramau. +Saif ychydig i'r gogledd o Landegfan. +Ti 'di gorffan y coffi. +Sylwer mai carnedd yw disgrifiad Comisiwn Brenhinol Henebion Cymru o'r mwnt hwn. +Gwmpes i wrth drio mynd ar 'y meic. +'Swn i'n gallu sgipio mwy na hyn. +Cofnodai hanes lleol a chyffredinol. +Llu o luniau difyr. +Nid yw'r ffocws yn gorwedd ar y cyfeirlin. +Dydi'r tatws ddim yn barod i'w hel. +Mae homeopathi yn feddyginiaeth gyflenwol neu amgen. +Hanes Llŷr, sy'n darllen stori arswyd yn ei wely. +Pa bryd gawn ni raglenni Cymraeg? +Mae caneuon lot gwell fel Gwybod yn Iawn ac Yn yr Ardd. +Mae drws y wardrob wedi disgyn i ffwrdd. +Pasia'r teclyn ar gyfer y teli. +Y dydd Iau cyn dydd Gwener y Groglith yw Dydd Iau Cablyd. +Tref yn Swydd Efrog, Lloegr ydy Hedon. +Ffilm oedd wedi ei thynnu trwy glymu gŵr camera ar flaen trên. +O ffermdy Plas yn Iâl, Llandegla, Dyffryn Clwyd y deuai ei rieni. +Dyma sy'n creu'r amrywiaeth y soniwyd amdano'n gynharach. +Ti 'di gweld y rhaglen newydd 'na ar y teli? +Caiff ei hadnabod hefyd fel eiriolwr dros hawliau sifil. +Dw i heb weld y canyniadau llawn. +Mae'r plentyn wedi rhoi sticers ar 'i gas penseli. +Ai Meilir oedd yn gyfrifol? +Fel merch swyddog milwrol, symudodd y teulu'n gyson. +Pwynt dilys ganddoch chi a dw i'n cydymdeimlo. +Handi iawn i bawb. +Roedd hyn yn cadarnhau eu cyfeillgarwch. +Gallai hynny fod yn hynod niweidiol i'r ymgyrch o blaid. +Dw i'n cofio mynd ar drip ysgol i amgueddfa. +Meddyliwn fod fy nghyfaill yn gystal dyn â chithau. +Cedwir llawer o'i lawysgrifau yn Llyfrgell Genedlaethol Cymru. +Be' gest ti i frecwast? +Mae methanol yn hylif anweddol, fflamllyd, di-liw, diarogl. +'S dim angen tractor. +Mae gan bob ochr arwyneb. +Ceir crug crwn arall ychydig fetrau i'r de. +Yr ochr arall i'r briffordd mae hen Reithordy. +Dyna'r broblem, pa enw newydd i'w ddefnyddio? +Ymhlith ei hoff themâu roedd mamolaeth a dirgelion hil ac etifeddiaeth. +Edrych ar ôl natur. +Dyma, mewn gwirionedd, gychwyn y colon mawr. +Yr hyn sy'n groes i duedd yw niwtraliaeth neu feddwl agored. +Roedd Ilar hefyd yn gantref. +Dw i angen mwy o goffi. +Yn gyffredinol mae'n ddiogel yn ystod beichiogrwydd. +Mae hi'n anodd cario'r cerrig am 'u bod nhw mor drwm. +Mae'n arian o ran lliw ac mae'n ocsideiddio'n sydyn. +Dw i angen hwfro'r carpad. +Mae'n ymwneud â'r astudiaeth o ffwythiannau rhifau cymhlyg. +A nawr mae fy mywyd yn wag. +Rhaid i ni fynd â'r gath at y ffariar. +Dw i 'di cysidro hynny hefyd. +Cyflwyniad o ymadroddion Cymraeg, Gaeleg, Gwyddeleg a Llydaweg ar gyfer defnydd pob dydd. +Roedd hi'n defnyddio naill ai baglau neu feic dair olwyn wedi'i addasu. +Gwyrdd, glas neu wyrddlas yw lliw'r llygad. +Defnyddir canrannau i fynegi rhan gymarebol o gyfanswm. +Llyfr dwyieithog ar gyfer y Nadolig. +Ychwanegwch bupur du, halen os oes angen, a llond llwy fwrdd o sudd lemwn. +Gellir dweud fod yr hecsagon rheolaidd yn bolygon hafalochrog ac yn bolygon hafalonglog. +Cŵl, dyma'i lun e lan ger Parc y Llyn. +Casgliad amrywiol o ddywediadau gan Dewi Jones yw Fesul Tamaid. +Pum stori ysbrydol ac arallfydol. +Dw i methu deall bod pobol yn gwirioni gyda rhywbeth fel 'na. +Mae'r tu fewn yn wyn. +Dwi 'n gwisgo coch, gwyn a gwyrdd i gefnogi'r Urdd heddiw. +Mae 'na lot o chwyn y tyfu yn yr ardd. +Gwyrdd yw lliw'r llygad. +Mae fersiwn clawr meddal hefyd ar gael. +Mae Hefin, ffrind gorau Dan, yn cael syniadau mawr a rhyfedd yn aml. +Mi oedd ganddi lot o fodrwya' aur ar 'i bysadd. +'Dan i'n byw mewn lle braf. +Bu'n fardd yn Llundain ac yn golygu llyfrau. +Dwi'n sibrwd wrth ddweud ond roedd yn braf smwddio crys hefyd. +Does gan Mr. Craven ddim athrawes bersonol ar ei chyfer hi? +Ceir rhagymadrodd ysgolheigaidd gan y golygydd, nodiadau testunol a geirfa. +O fewn pob un o'r rhain ceir cannoedd o flasbwyntiau. +Nofel ramantus yn sôn am ferch ifanc yn ennill serch ac enwogrwydd annisgwyl. +Maen nhw'n gweddu i dir gwastad y dyffryn yn ogystal â thir mynydd. +Mi oedd yna raeadr enfawr i'w gweld drwy'r coed. +Yr oeddwn yn fwy o hen ben nag y tybiai fy mam fy mod. +Gwelwn oddi wrth eu duwch fod ywen ymysg y coed. +Gwas y wlad ydyw'r aelod Seneddol. +Cafodd dwy ddynes ifanc eu hachub gan Wasanaeth Tân ac Achub Gogledd Cymru. +Nid un ymffrostiai yn ei dlodi oedd Ap Vychan. +Mae yna ddrws cefn cul i'r chwith yn y darlun hwn. +Roeddem wedi bod gydol y dydd yn canfasio yn ardal Henllan Amgoed. +Ffermdy ar lethr mynydd Epynt, wedi gweld dyddiau gwell, yw Cefn Brith. +Ehedai ei meddwl ymhellach bellach oddi wrthynt at bethau byd a bery byth. +Taflodd ei chot amdani a cherdded tua'r ddesg wybodaeth. +Efallai felly wnes i ddim amseru fy hun yn iawn +Hoffwn i fedru cymryd rhan yn The Great British Bake Off. +Dewisais y rhain oherwydd bod edrychiad y gwefannau yma wedi apelio ataf +Cynydda newid hinsawdd y risg o danau coedwig mewn ardaloedd fel Lisbon ym Mhortiwgal. +Dangosodd ymwybyddiaeth o sut i amrywio ei iaith lafar yn ôl y gynulleidfa +Dwi'n edrych ymlaen at glywed yn ôl wrthych chi. +Mae dolen sain ar gael ar gyfer defnyddwyr cymhorthion clyw +Ddylet ti fod wedi gadael y ffeil gartref +Albert oedd gŵr y frenhines Victoria. +Maent yn darparu amrywiaeth o gyfleoedd i bobl y ddinas ddefnyddio'r iaith +Hefyd fe ellir labelu ffigyrau a hafaliadau +Nodwch beth ydych yn archebu ac yn cyfrifwch y cyfanswm +Buasai amcan o'r niferoedd yn ddefnyddiol ar gyfer cael pris cystadleuol +Mae nifer o ddangosyddion i gael er mwyn mesur datblygiad erbyn heddiw +Mwynheais y sesiwn hon o rannu cerddi a phrofiadau yn arw +Parhewch i ymarfer er mwyn rhoi hwb i'ch sgôr +Gall amcanion yr ymchwil ddod o dan un allan o bedwar categori +Yn anffodus dim ond pennaeth adran sy'n gallu awdurdodi hyn +Mae gan Uruguay dîm rygbi cenedlaethol. +Curais wrth y drws, a daeth merch ieuanc i'w agor. +Ni chredaf fi hynny, beth bynnag. +Bydd Angharad hefyd yn gyfrifol am farchnata'r gwasanaeth newyddion +Defnyddiwch y dŵr yma i olchi ac ymolchi yn unig +Dyma fi'n mentro ateb ar ran y ddau ohonom. +Mae'r Roma neu'r Romani yn bobl grwydrol sy'n tarddu o India. +Mae grwpiau hwb wedi eu sefydlu i roi cymorth ychwanegol i rai dysgwyr +Mae hyn yn dangos sut mae'r ddogfen yn edrych cyn ei hargraffu. +Christine James oedd y ferch gyntaf i fod yn Archdderwydd Cymru. +Mi wnes i ddatblygu fy sgiliau rhesymu wrth ddadansoddi a dehongli gwybodaeth +Y mae tinc melys yr hen brofiad gorfoleddus i'w glywed ynddynt hyd eto. +Roedd ymchwil newydd yn annog artistiaid i arbrofi +Yna, byddent yn creu graff gyda'r canlyniadau +Roedd hi'n bleser eich cyfarfod wythnos diwethaf +Ni fyddai'n bosib cynnal bywyd ar y ddaear hebddo. +Disgwyliwn o hyd iddo dewi, ond nis gwnâi. +Elin yw'r bwli'r flwyddyn yn fy nhyb i +Atodaf bris newydd sydd yn cynnwys y lluniaeth +Byddai'r cynllun yn amharu ar gynefinoedd bywyd gwyllt. +Yng ngwythiennau'r graig acw y mae aur. +Rydym yn mynd i ddefnyddio geirfa i ddisgrifio ble mae cwningen. +Mae'r amseru hyn yn hynod o bwysig +Defnyddiwch lu o dermau daearyddol a chofiwch gyfeirio at enghreifftiau +Mae hi'n ddogfen ddefnyddiol, ac af ati i'w rhannu ag eraill. +Pwy sy'n edrych ymlaen at benwythnos gŵyl y banc? +Peidiwch â rhoi gormod o ddŵr neu bydd y mwydod yn boddi. +Mae'n gyffredin bod teuluoedd tlotach yn deuluoedd un rhiant +Symudodd yn ofalus tuag at y goeden fach ac edrych i fyny. +Maen nhw'n trio cario o'u dwy ar hugain. +Roedd hi wedi chwarae gyda'r eliffantod ifori. +Byddaf yn mesur hyn trwy gadw dyddiadur bwyd +Dyma be ddwedodd fy hyfforddwr amdan fy ngêm +Chwythwyd drws yr ystafell lle roedden nhw'n eistedd ar agor. +Y mae y dull hwn yn fwy rhesymol, ond y mae iddo ei anfanteision. +Mae'r llifogydd wedi gadael llanast difrifol ar eu hôl. +Roedd rhai ohonyn nhw yn lluniau o blant. +Harri oedd y brenin olaf i ennill y goron wrth frwydro +Mae'r mwyar duon a blodau'r grug yn ei nabod o. +Dydi o ddim yn mynd i drwblu'i hun yn dy gylch. +Dwi'n cysylltu i gael arweiniad ar fater cyfreithiol +Dechreuodd Mary chwerthin, a rhedodd ar ei ôl. +Mae batri fy ffôn i'n fflat. +Mae hyn yn rhan annatod o'i ymrwymiad i'r swydd +Sylwem hardded a chryfed oedd y merched. +Roedd Keith Joseph yn un o benseiri Thatcheriaeth. +Roedd rhaid aros yn hir yn yr Adran Ddamweiniau. +Mae'r llyswennod mawr yn hela'r crancod. +Rhaid i mi frysio adre. +Bydda i'n dechrau rhedeg yn yr haf. +Roedd angen miloedd o bryfed sidan i greu'r edafedd. +Yr oedd yn amlwg fod y ddynes mewn cryn gyffro. +Mae'r gŵr wrthi yn clirio'r llestri. +Dowch yma erbyn amser te. +Edrychai ei llygaid yn dreiddgar, llawn cywreinrwydd. +Mae'n amlwg nad ydyn nhw'n barod i reoli cymaint o bobl +Roedd wedi clywed ei fod yn swyddog ifanc iawn oedd newydd ddod o Loegr. +Bu'n rhaid i filoedd o filwyr ffoi o Dunkirk yn ôl i Brydain. +Amcan y Llywodraeth yw cynyddu'r nifer o siaradwyr i filiwn o bobl. +Pam mae copr yn ddefnydd da ar gyfer pibellau dŵr? +Rydych wedi ymateb yn gadarnhaol i'r holl dargedau a osodwyd i chi +Edrychodd ar y got wlân wen drwchus a'r ffrog. +Gadawodd pawb eu chwarae pan ddeallasant fod yno Gymry. +Rwy wedi addo copi o'r adroddiad ar ddoe iddyn nhw hefyd. +Cyhoeddodd nifer o emynau yng nghylchgronau a llyfrau emynau Eglwys Lloegr. +Dychrynwyd hwy i gyd ar y cyntaf. +Mae gwellt plastig yn ddrwg i'r amgylchedd. +Ond mae rhaid cofio fod anfanteision i'r cynllun yma hefyd +Bydd rhaid i fi brynu helmed neu bydda i'n cael dolur. +Caiff ei ddefnyddio i roi profiad o lefydd gwahanol i'r defnyddiwr. +Cyhoeddodd sawl nofel ac mae wedi cyfrannu straeon byrion at flodeugerddi amrywiol. +Yn y bôn ni sy'n gyfrifol. +Yn hytrach na disgrifio trais mae ei nofelau'n canolbwyntio ar gymeriadu. +Cyn y rhyfel bu'n gweithio fel llafurwr. +Ar ôl siopa ar-lein, cofiwch roi'ch adborth. +Ceir un genhedlaeth ac mae'r oedolyn yn hedfan rhwng Mehefin ac Awst. +Defnyddir y ffurf anadlu i reoli asthma yn y tymor hir. +Nodwedd arbennig o'r dirwedd a chymeriad cyffredinol arwyneb y tir yw tirffurf. +Anturiaethau digrif y Parchedig Eilir Thomas, yng Nghyfres Carreg Boeth. +Mae'r siani flewog yn byw yn nail y dderwen. +Roedd yn swm sylweddol ond llawer llai na'i hawliad. +Saif yr etholaeth hon ar ochr ogleddol glannau Afon Clud. +Casgliad o englynion cyfoes sy'n dangos yr englyn yn fyw heddiw. +Mae'n un o ddau ddeg pedwar adeilad sydd ar y Llwybr Treftadaeth. +Dywedodd o wrthi am fynd adra. +Sut aeth dy apwyntiad 'di? +Lliw hyfryd, crys glas, trwsus gwyn a sannau glas. +Blwyddyn Newydd Dda i chwi! +Maent yn cynnwys yr ên uchaf a'r ên isaf. +Mae hwn yn gyfarfod allweddol, dybiwn i. +Gelwir hyn yn ddeddf gymudol lluosi. +Daw'r gair sgwâr o'r siâp o'r un enw, sef y sgwâr. +Nid y ffasiwn diflas o wisgo un lliw i gyd. +Rhoddodd y dyn ddarn o bapur i fi. +Stori am ysbryd hen fôr-leidr yn aflonyddu ar drigolion Plas Nant Esgob. +Gwelodd fwystfil yn nghanol y llyn. +Pa wobr sydd yna ar gyfer yr enillydd? +Dywedir iddynt ddioddef anafiadau seicolegol. +Stori am Ferwyn, y bachgen mwyaf barus yn y byd. +Pe ceisient gadw'r ddwy, anghofient y ddwy. +Olrheinir eu perthynas gyfrinachol a ddigwyddodd flynyddoedd yn ôl. +Nath hyn groesi fy meddwl i heddiw. +Gan hynny mae o'n casáu'r pentrefwyr gyda chas perffaith. +Tybed pwy gaiff pa ran? +Mi fuon ni'n siarad â phlant yng Nghaerdydd. +Ie mae hynny'n swnio fel term mwy agos ati. +Hi oedd llywydd ei dosbarth graddio. +Cyfrol ddwyieithog am y gwleidydd o Gymru. +Dywedir fod yr heddlu'n llawer rhy lawdrwm yn eu hymateb. +Gwelir hyn yn aml, yn enwedig mewn print, gyhoeddiadau, a'r cyfryngau. +Fe wasanaethodd fel Aelod Seneddol a nifer o etholaethau eraill. +Tref fwyaf yr ynys yw Tre Huw. +Wel, pawb ond Tiwdor Rees. +Ar wahân i ryddiaith ysgrifennodd hefyd farddoniaeth a dramâu. +Sut mae dyn i ddelio â'r grymoedd hyn? +Pan ddeallodd ei thad, fe anogodd hi i fynd gam ymhellach. +Mae eu harbenigwyr hefyd yn cynnig cyngor i'r cyhoedd. +Teithlyfr yw Yn ôl. +Fel arfer ceir dau, ac maent yn gweithio fel pâr. +Mae trawsffurfiad geometrig yn dafluniad o set geometrig. +Llyfr ydyw ar addysgu ieithoedd gyda ffocws arbennig ar ddwyieithrwydd ac addysgu ail iaith. +Os dydi o ddim yn cyrraedd mewn pryd fydda i mewn trwbl. +Roedd Margaret yn ddysgwr araf, ac roedd yn casáu mathemateg yn yr ysgol. +Maen nhw'n nodi y dylid ei sgwennu mewn llythrennau bras. +Am weddill ei hoes, byddai'n gwisgo hetiau neu fonedau i orchuddio'i chreithiau. +Sôn am ran o'r cyfrifiadur ydym ni yma. +Mae'r siani fach hefyd yn cysgu dros y gaeaf. +Mae'r hogan bach yn chwythu bybls. +Ceir plac ar y cerrig sy'n cofnodi'r hanes. +Caiff y gwryw ei ddenu gan olau. +Dw i heb wisgo siwt ers dros mis. +Gyda dyfodiad y rheilffordd, tyfodd y dref i fod yn gyrchfan glan môr. +Casgliad o gerddi i blant yw Llais y Berth. +Mae'r ysgrifau wedi ymddangos yng ngholofn olygyddol wythnosolyn y Bedyddwyr, Seren Cymru. +Prif fwyd y siani flewog ydy ysgall a gweiriau. +Wlser ar aelodau pellaf y corff ydy llosg eira sy'n effeithio rhai pobl. +Mi oedd y lle mor llwm. +Byddai'n blaenoriaeth buddsoddi ym meysydd tai a gofal cymdeithasol. +Mae gennym ni'r Cymry bob hawl i waradwyddo ein hunain. +Fyddai neb yn gwybod ble roedd hi. +Cyfrol ar win cartref gan Medwyn Roberts yw Gwinoedd Cartref. +Carw bychan ydy ewig. +Mae wedi dysgu Cymraeg. +Nid ydynt eto wedi ymgyfuno'n blaid wleidyddol. +Gall alcohol gynyddu effaith tawelydd y cyffur. +Neidiodd ar gefn y ceffyl, ac fe aeth i chwilio amdano. +'So fe moyn cawl i swper. +Prin oedd y disgwyl i Davies ennill y sedd yn y lle cyntaf. +Cyfrol sy'n cyflwyno'r ddadl dros ddeddfwriaeth Gymraeg. +Nodir mesur pob emyn, ac awgrymir emyn-dôn addas i bob un ohonynt. +Mi nath y llong suddo. +Yn cynnwys barddoniaeth a darluniau lliw. +Roedd brawd John, David, yn rhagflaenydd iddo fel Cynrychiolydd Ceidwadol Sir Gaerfyrddin. +Ni'n mynd i ga'l te prynhawn. +Fasa fo fath â'r sioe anifeiliaid gwyllt yna yn Efrog unwaith. +Ond nid yn y modd fyddai pawb yn hoffi. +Gall y cerrynt fod yn gerrynt union neu'n gerrynt eiledol. +Mae wedi dadlau dros ddiddymu'r gosb eithaf drwy gydol ei hoes. +Ydi'r cathod wedi cael bwyd? +Roedd yn aelod o Undeb Cymdeithasol a Gwleidyddol y Menywod. +Ond, darganfu glo yno, a gwnaeth ei ffortiwn yn ei fwyngloddio. +Deunydd ar gyfer ei ddefnyddio yn y dosbarth neu'n unigol. +Mae llif clocwedd yn aml yn golygu pwysedd uchel yn Hemisffer y Gogledd. +A oes unrhyw un yn fodlon helpu Siencyn a Dan Draed druan? +Mae modd trosglwyddo'r cyffur i faban trwy laeth y fron. +Ceir cyflwyniad manwl a nodiadau gan y golygydd. +Aeth How-Martyn ar daith o amgylch India yn siarad am reoli beichiogrwydd. +Gall technegau ymlacio hefyd brofi'n ddefnyddiol. +Ychwanegir diwrnod naid ym mis Chwefror bob pedair blynedd. +Oddi yma, yn aml, dedfrydwyd yr oedolion i ailsefydlu yn Awstralia. +Ydych chi'n un da am wneud toes? +Ceir sawl mynydd o'r enw yma. +Ble a'th y gath 'na? +Llyfr taith ar gyfer y Wladfa, Patagonia. +Mae nhw ar gael i staff a stiwdants. +Stori ddoniol yn addas ar gyfer darllenwyr yn eu harddegau cynnar. +Nofel dditectif gan awdur sydd eisoes yn gyfarwydd fel awdur straeon arswyd. +Roeddwn i'n siarad am eich rhagrith chi ar y mater. +Mae'r llyfr hefyd yn cynnwys ugain o weithiau eraill o'r cylch hwn. +Dwnim i fod yn onast 'sa well ti sbïo yn y geiriadur. +Mae gan ffrind Mali, Aled, gi bach newydd o'r enw Titw. +Pob nerth a dymuniad da i ti, dy dad a'r thylwyth. +Mae anadlu hefyd yn cael gwared â charbon deuocsid allan o'r corff. +Gwrthiant hylif ydy gwasgedd. +I ariannu'r cylchgrawn agorodd fwyty llysieuol ym Manceinion. +Tywysydd yn teithio ar hyd rhan o'r Ynysoedd yn gwisgo camera. +Nath y dyn saethu cwningen. +Mae'r arferiad yma, bellach, yn anghyfreithlon. +Ysgrifennodd ar gyfer papur y coleg. +Fe rannodd y deisen rhwng y tri. +Mae'n aelod blaenllaw o symudiad ysbrydolrwydd y menywod. +Bydd y risotto yn llawer gwell os ydych chi'n ychwanegu gwin. +Daeth Cymry eraill ato i'r Eidal, gan gynnwys Gruffydd Robert. +Nofel hanesyddol gan un o brif nofelwyr y Gymru gyfoes. +Sglods hyfryd yn Badell Aur, Y Bala, ar y ffordd fyny i Wrecsam neithiwr. +Arferid defnyddio'r blodau bach melyn fel siampŵ i felynu gwallt merch. +Mae 'y nghefndar i 'di symud i Awstralia. +Yr oedd dy waed yn rhy bur i'w leipio gan y cŵn. +Codwyd y llawr chwe modfedd er mwyn gosod system gynhesu. +Hyd yma, methodd ymchwil gwyddonol â phrofi effeithiolrwydd y llysiau hyn. +Gwnaeth y rhaglen redeg am bedair cyfres. +Cerbyd 'mond blwydd oed. +Yn ogystal, ceir cyflwyniad gan yr awdur ei hun. +Wrth gwrs, Cen oedd ei enw go iawn. +Y cerebrwm yw'r darn fwyaf o'r ymennydd. +Mae'r deisen blât ma'n ffein mam-gu. +Un ffynhonnell ar gyfer geometreg dafluniol, yn wir, oedd theori persbectif. +Mae nhw'n gwneud pasta efo blawd a wyau. +Bu'n gynghorydd ar Gyngor Sir Gwynedd ers blynyddoedd. +Y bore wedyn fe agorodd y ffenest. +Gall pobl sy'n cael ffit epileptig wynebu nifer o broblemau. +Casgliad olaf o gerddi'r diweddar R. Bryn Williams. +Roedd y teulu o gyff Rhys ap Gruffydd, Arglwydd Deheubarth. +Diolch o galon. +Ystyrir grwpiau yn un o brif nodweddion defnyddiol y tabl cyfnodol. +Defnydd posibl arall yw creu tanwydd. +Fe'i haddysgwyd yng Ngholeg Penrhos yng Nghonwy. +Byddaf yn ennill fy mwyd heb wneud drwg i neb. +Mae'n gath annwyl ond swnllyd iawn, ac mae hi eisiau sylw o hyd. +Bu'n aelod o Gymdeithas Frenhinol Llenyddiaeth am rai blynyddoedd. +Dim chwarae teg iddo fo chwaith. +Bydd Michael, Hugh a Matthew yn y cyfarfod hefyd. +Cafodd ei addysg gan diwtoriaid preifat ac yng Ngholeg Eglwys Crist, Rhydychen. +Mae'r iâr ar y nyth yn y stabl. +Roedd eiddew trwchus yn tyfu yn erbyn y waliau. +Roedd yr ystafelloedd dosbarth ar ochr y tirlithriad. +Mae ganddo'r potensial i fod yn gam mawr ymlaen i'r iaith. +Ond fel pob un tro arall, aeth pethau o chwith. +Hanes y Tuduriaid a'r Stiwartiaid wedi ei ddehongli a'i ddarlunio'n gyffrous. +Wi angen glanhau'r llwch gyda dwster. +Mae'n gymrawd Cymdeithas Frenhinol Llenyddiaeth +Y peth cyntaf wnaeth hi oedd rhedeg ddeg gwaith o gwmpas yr ardd flodau. +Drama gan athrawes ddrama yw Hap. +Troes ei wyneb yn goch fel y tân. +Blas yr Haf, cordial ysgawen o flodau Llanbadarn. +Gallwn feddwl fod yr is-olygydd yn rhy ddiog i'w ddarllen. +Dim ond un ffordd sydd i ddianc o'i afael +Doedd hi ddim yn gwybod fod hyn yn wir amdani hi ei hun. +O'n i'n arfer sgwennu llythyrau i Siôn Corn. +Cawsom ni glap mawr ar ôl i'r araith orffen +Mae rhai o'i hymddangosiadau yn y coleg wedi ysgogi dadlau rhyngwladol. +Bydd yn rhaid codi'n gynnar bore fory i ddal y trên i Gaer. +Roedd yn aelod o'r Blaid Arian. +Testun bachog mewn odl, a lluniau lliwgar iawn. +Dilynwyd yr erthyliadau hyn gan afiechyd meddwl dwys a barodd am ddegawd. +Er ei anabledd, ef, y brawd ieuanc, a etifeddodd allu gwleidyddol ei dad. +Effaith hyn yw rhoi argraff o soffistigeiddrwydd i'r araith +Cyhoeddwyd peth o'i cherddi yn y cylchgrawn Y Dysgedydd a olygid gan Emrys. +Newidiwyd hynny gan yr Ail Ddeddf Uno pan roddwyd cyfansoddiad statudol i'r cyngor. +Roedd hi'n fraint gweld y garreg nadd. +Cyn pen y mis, yr oedd ganddo wallt a fuasai'n gredyd i Archdderwydd. +Mae print swyddogol gan artist eleni ar gael yma +Roedd golygfeydd hyfryd dros y penrhyn. +Creadur bychan a rhyw draed drwg ganddo ydoedd Dico. +Yr oedd yr afon yn llydan a'i dŵr yn hallt tan y dyfrddor. +Mae gwahanol fathau o driniaeth yn bodoli, felly. +Llwyth o bobl yn ymuno gydag Yes Cymru. +Roedd ar denantiaid stad y Gaer ofn y meistr tir a'i stiward. +Bu'n aelod o Ganolfan Cywirdeb a Gonestrwydd Cyhoeddus am rai blynyddoedd. +Beth am gerdded o gwmpas yr ystafell a chynnig help os oes angen? +Gyda lluniau'n unig, yn sôn am ddyfodiad babi newydd. +Ymestynnodd y gath cyn ista yn ôl i lawr. +Llyfr gyda lluniau yn egluro'r symudiadau. +Ganwyd Richards yn Nolgellau yn blentyn i Thomas Richards, cyfreithiwr, ac Elizabeth ei wraig. +Daeth awel oer, a meddyginiaeth ar ei hadenydd, o'r môr. +Gobeithio na fydd hi ddim yn rhy boeth yr haf yma. +Claddwyd ei weddillion ym mynwent Glanadda, Bangor. +Atodaf y ddogfen i'r e-bost hwn i chi gael ei darllen +Cafodd yr atgofion am ei thad a'i fywyd trasig effaith fawr ar Lena. +Dyw hwn ddim yn arian nac yn grantiau newydd. +Hoffwn wylio'r gêm heno. +Daeth rhywfaint o'i thymer groes yn ôl iddi wrth iddi gerdded. +Y testun yn orgraff heddiw, aralleiriad o'r cerddi a nodiadau testunol. +Mae nhw'n yn cynnig eu hoffer yn Gymraeg. +Defnyddir rhanbarthau Gwlad yr Iâ yn bennaf at ddibenion ystadegol. +Mi oedd yr hen adfeilion yn dal yno. +Mae cyfraddau clefydau wedi bod yn cynyddu. +Gefais i hoe am rhyw dri mis. +Gallaf ei defnyddio tu fewn yn ogystal â thu allan +Byddaf yn bwriadu edrych arno heddiw a'i addasu +Yr oedd yr hanes wedi ymledu yn gyflym. +Cefais hefyd wythnos o arsylwi yn y cyfnod sylfaen +Dwy ddim yn gwybod dim byd am lefydd felly. +Mae hyn wedi bod yn gymorth i ddatblygu sgiliau adio ac adnabod rhifau. +Rhennir yr iaith ar sail swyddogaethau, er enghraifft gofyn am rywbeth neu ymddiheuro. +Golygwyd y testun ac ychwanegwyd nodiadau, geirfa a mynegai llawn. +Mae fy swydd yn fy ngalluogi i ysbrydoli'r genhedlaeth nesaf o beirianwyr +Fe wnaeth hi sgwrsio, a siarad, a denu'r robin goch. +Cwynai nad oedd ganddo unlle ar y ddaear las i droi iddo. +Roedd hi'n byw yn Abertawe. +Trowyd hwy ymaith ac ychwanegwyd y tir at ffermydd eraill. +Dyna'r fantais roedd Lloegr eisiau cyn yr egwyl +Os wnei di ymarfer, byddi di'n gwella. +Mae'r coed i gyd yn dechrau blaguro. +Roedd y cwningod wedi bwyta'r letys yn yr ardd i gyd. +Mab arall iddo oedd y bardd Gwilym Caradog, William Caradog Evans. +Mae llawer o ynysoedd yn y môr yn gyforiog o fywyd. +Argraffodd yr enw ar lain hir o bapur. +Roedd dau heddwas arall ar gefn y cerbyd. +Maent wedi mynd trwy ormod gyda'i gilydd i dorri fyny. +Cerddasom ill dau yn ein blaenau. +'Swn i'n gwerthfawrogi unrhyw awgrymiadau eraill +Roedd arogl lludw a dŵr golchi lloriau yn llenwi'r awyr o'u cwmpas. +Nofiai o gwmpas er gwaethaf anystwythder ei goes a'i fraich chwith. +Fodd bynnag, ni allai ymarfer fel cyfreithiwr, gan na chaniateid hynny. +Roedd fy wyneb i mor wyn ag eira yn gwylio'r fyddin. +Bydd angen i ni olchi'r ffenestri hefyd. +Gofynnais i ŵr y botymau a fedrai siarad Llydaweg. +Dylech chi fod wedi mynd i'r bryniau bythefnos yn ôl. +O achos yr arglwyddes bu'n fuddugol. +Toc, troes at y doctor. +Cafodd ei addysg yn Ysgol y Cwm, Bron y Maen. +Byddwch yn ymwybodol bod siawns y gall amseroedd y prynhawn rhedeg drosodd +Mae llawer o gyrsiau golff yn yr Alban. +Nid aethom dros y rhiniog y diwrnod hwnnw, a llusgai yr oriau yn araf. +Yr oedd Sam gydag ef yno ar hyd yr amser. +Galwyd ei enw ond wnaeth e ddim clywed. +Gallesid meddwl nad oedd neb yn byw yno. +Mae'n bleser darllen dy fod yn gwneud cynnydd yn y mwyafrif o bynciau +Yn India byddai'r brodorion yn siarad tafodieithoedd gwahanol. +Codai drewdod ofnadwy o'r pydew. +O mor drist oedd hynny. +Ceir ansicrwydd mawr ar hyn o bryd. +Dacw fur y fynwent lle mae'r hen Ann wedi ei chladdu. +Ceir yma aralleiriad o wyth testun, nodiadau manwl a geirfa ddefnyddiol. +Dywedodd toc mai o ddeheudir Ffrainc y daeth. +Dyn mewn siaced frown yn helpu bachgen bach i ddringo i fyny polyn. +Mae'n dal teitl Llywydd Emeritws ar hyn o bryd. +Nod y rhaglen yw dod o hyd i lawer o systemau rhif deuaidd cyffredinoledig. +Gemau eraill oedd yn cael eu chwarae yn Stadiwm R. Stadiwm. +Mae'n darparu prosesu, storio a logisteg i'r diwydiant pysgota. +Mae'r ddau yma'n cael deuawd yn perfformio ar y llwyfan, Maen nhw'n cael hwyl. +Defnyddir amgodio hyd rhediad yn gyffredin i gywasgu'r ffrydiau hir hyn. +Roedd Ann ei hun hefyd yn fam erbyn hyn. +Roedd gerbocsys 'llaw' pedwar a phump gêr ar gael. +Ysgubodd ar draws yr haen ogleddol i Michigan trwy deithwyr ar y dyfrffyrdd. +Rydym wedi bod yn gefnogol erioed o adael y cyfan allan "yn llwyr". +Fe'i gosodwyd yn wreiddiol ar fformat arddull gwrando hamddenol. +Ni chafodd y ffilm ei rhyddhau'n llawn yn sgil adolygiadau gwael. +Mae meddalwedd porwr llais yn cael ei ddanfon mewn amrywiaeth o fedelau gweithredu. +Mae cyllyll ffliwt yn ddelfrydol ar gyfer tasgau bach fel addurno a philio. +Fel arfer, mae llinellau trosglwyddo foltedd uchel yn defnyddio dyluniadau ynysyddion crogiant modwlaidd. +Mae cyffur cyffredin, diazepam, yn ymddwyn fel cynyddwr alosterig yn y safle rhwymo hwn. +Fodd bynnag, gwelwyd cynnydd mawr mewn gwerthiannau ym mhob un o'r teitlau. +Mae llawer o artistiaid wedi recordio eu dehongliadau o'r gân. +Mae nifer o frechlynnau geneuol diogel ac effeithiol ar gael ar gyfer colera. +Mae'r twyni wedi cynnwys arteffactau brodorol. +Mae'r pentref yn honni bod yn man geni Diwrnod Coffa. +Yn yr achos hwn, mae angen i gyfrifwyr ddatgelu'r sefyllfa hon i fuddsoddwyr. +Ar ben hynny, mae'r Sefydliad yn ymestyn y gwasanaeth archwilio clefydau i'r milfeddygon maes. +Cafodd ei haraith ei gefnogi gan chwe Gweriniaethwr rhyddfrydol i gymedrol. +Yn yr un modd, gall cau chwarel neu wella ardal wella prisiau. +Yn ôl y sôn, roedd Della Chiesa wedi cael ei hethol o un bleidlais. +Mae menyw benfelen yn brwsio ceffyl. +Dengys y llyngesau ar gyfer yr holl wledydd sy'n bresennol isod. +Fe'i hystyrir fel cwrt tennis enwocaf y byd. +Mae'n anodd cael gwybodaeth ddibynadwy am yr arf hwn. +Mae myfyrwyr Caerefrog yn symud ymlaen at raddio ar wahanol gyfraddau. +Yn ystod y frwydr hon cafodd ei drywanu â bidog. +Mae ffurfio wyau yn ganlyniad cyplu. +Mae'n amgáu gweriniaeth bresennol Liberia. +Pysgodyn haul mawr yw un o'r prif atyniadau. +Cyn mynd i faes gwleidyddiaeth roedd yn athro ysgol uwchradd. +Mae cemeg asid deugloroasetig yn nodweddiadol o asidau organig halogenaidd. +Cyfeirir at diwbiau â phennau marmor fel “tiger-tops” mewn rhai clinigau hefyd. +Mae iddi'r defnydd o dorri gwrthrychau a darnio moleciwlau cyfagos. +Cafodd ef ac eraill oedd ynghlwm eu crogi gan y Prydeinwyr. +Gall natur y wybodaeth hon amrywio rhwng arbrofion. +Derbyniodd radd meistr mewn cyfraith ryngwladol hefyd. +Mae gŵr Cawcasaidd yn chwarae'r ffidil. +Does dim enw eto i'r deunaw lloeren afreolaidd. +Mae'r gaeafau yn wlyb, yn oer a llwm. +Defnyddiwyd y tevah hwn ar gyfer gwyliau ac achlysuron unigryw. +Cafodd cyfeiliornadau rheolaidd y sgriw eu hystyried. +Eich hen fethiant. +Mae cylchdröwyr yn troi'r cymeriad o gwmpas i gyfeiriad ar hap. +Mae'r weledigaeth hon yn rhan o sylfaen llawer o Academïau Cenedlaethol. +Rwy'n sicr y byddwn yn cofio hynny. +Dilynodd rhagor o dreialon, archwiliadau, a phrofion parodrwydd. +Roedd yn briod bedair gwaith ac wedi magu deunaw o blant. +Mae'i gynhyrchion yn cefnogi cyfathrebu unedig, defnydd o dechnoleg symudol, gemau a cherddoriaeth, +Hefyd, cyflwynwyd yr Unawdwyr archtop. +Defnyddiodd proseswyr cynnar wifren ar gyfer pob darn o led y cyfeiriad. +Roedd hi'n het ffelt feddal, drwsiadus. +Ef yw'r unig ysgrifennydd i'r wasg i wasanaethu dau dymor arlywyddol llawn. +Fe'i ganwyd i deulu cerddorol Americanaidd o dras Iddewig. +Nid oes ganddynt geudod mantell. +Yr un peth yw hyn. +Defnyddir cylchedau gwthio-tynnu yn helaeth mewn llawer o gamau allbwn mwyhäwr. +Ar y llwybr mae model maint llawn o brachiosaurus. +Y canwr yw'r un mwyaf amlwg a lleisiol yn y grŵp. +Nodwyd sawl mwtaniad sy'n achosi afiechydon. +maent wedi bod yn ffyrdd cyffredin o arddangos prydau arbennig mewn tai bwyta. +Mae croeso i bobl ifanc, hen, gwrywaidd a benywaidd yn y ddinas estron. +Daeth y Brifddinas eto yn fan anarchiaeth o'r newydd. +Drwy gydol y daith, chwaraeodd y band yr albwm yn ei gyfanrwydd. +Mae modd cyfnewid tocynnau'n llawn rhwng y ddau weithredwr. +Tâl gan gleientiaid i weithwyr cyflogedig am wyliau swyddogol. +Chi'n gwybod, y gwir fachgen soprano gyda llais mawr a phwerus iawn. +Roedd gan y ddau ddiddordeb brwd mewn seryddiaeth amaturaidd. +Mae ganddo gefndir amrywiol mewn gwaith Gwylwyr y Glannau. +Maen nhw wedi gwneud hynny'n bennaf trwy Sbaeneg. +Roedd rhai awdurdodau lleol yn benderfynol o gadw ysgolion gramadeg. +Yn groes i ddisgwyliadau'r heddlu, ni ddigwyddodd unrhyw gythrwfl o unrhyw fath. +Roeddwn i'n meddwl ei fod yn mynd i fod yn Big George arall. +Mae hefyd yn cefnogi'n frwd integreiddio rhanbarth Gogledd-ddwyrain Asia. +Mae'r ffrâm yn gogwyddo'r injan yn ôl rywfaint. +Defnyddir y term "tâl cyflenwi" mewn achosion eraill, a gall fod yn ddryslyd. +Mae organebau aero-oddefol yn gwbl eplesol. +Mae argae hirgrwn wedi'i adeiladu o graig ddu, gref a soled. +Mae'r ysgol yn rhan o'r fenter "Dinasoedd yn Rhagori". +Dyma'r safle milwrol uchaf ei radd yn y wlad. +Aeth at ei ddyletswyddau newydd mewn ffordd fethodolegol. +arian ac eiddo. +Roedd fel arfer yn gyfwerth â phymtheg rwpî arian. +Rydych chi'n sgriwio mwncïod gwyrdd a'i roi i'n jyncïod. +Cofnododd ddyrchafiad cychwynnol o ddefnyddio barmedr merchyriol. +Cyhoeddir teitlau'r Nadolig bob blwyddyn. +Cymerwch er enghraifft yr osgiladur cwantwm harmonig. +Mae boliau gwyn yn dal i fod gan y llyffantod bychain hyn. +Nid yw sail y "tonalpohualli" yn hysbys. +Cafodd y Terfysgoedd Colera eu hatal yn ymosodol gan y llywodraeth tsaraidd. +Mae gan yr orsaf ei blatfform ynys gwreiddiol a'i adeilad gorsaf hyd heddiw. +Gosodwyd cleddyf uchod. +Gwrthdroad y pedwerydd ostinato cromatig o'r symudiad agoriadol ydyw. +Mae grŵp o bobl ifanc ag offerynnau ar lwyfan. +Yn gyffredinol, nid ydynt wedi cael eu harestio am wneud hynny. +Mae menyw yn cerdded gyda beic glas ar draws ffordd. +“A faint fydd hynny?” “Tua un bunt ac un ar ddeg,” meddai. +Mae effeithiau nwyon nerfau yn para'n hir ac yn cynyddu gydag amlygiad parhaus. +Ystyr yr enw yw "un melltigedig" neu "un dieflig". +Mae plant yn ymgynnull yn hapus o amgylch tegan. +Roedd yr adleoliad anferth hwn yn bosibl ar ddiwedd y Rhyfel Oer. +"Ac rydw i eisiau iddo roi dewrder i mi," meddai'r Llew Llwfr. +Dyma lle y cynrychiolodd ef Sweden, +Fe'i cysylltwyd â'r Tueddiad Sosialaidd Rhyngwladol. +Trwy ei hanes, gwisgodd y cwmni ei hunaniaeth Albanaidd ar ei lawes. +Llun priodas, y morwynion mewn porffor, a phob un o'r gweision priodas yn neidio. +Rydym wedi cael cocên, llwgrwobrwyo ac Arsenal yn sgorio dwy gôl gartref. +Er enghraifft, gallai fod gan sefydliadau milwrol heddlu milwrol. +"Ydych chi?" holodd Tom Smart. +Mae ein penderfyniad yn y mater hwn yn ddisyflyd. +Maen nhw'n cael eu meithrin yn bennaf yng nghanolbarth a dwyrain y Môr Tawel. +Am saith mis cynhaliodd brofion helaeth o'i chyfarpar newydd. +Dywed y rhagair y bu'n casglu'r wybodaeth yma ers pan oedd yn fachgen ifanc. +Dyma'r dosbarth sydd ar y cyfan yn cael ei labelu'n anwahanadwy. +Ar y bore cyntaf, deffront a syllu ar donnau cwbl berffaith. +Diddymwyd y bwrdd cyfarwyddwyr a sefydlwyd cyngor ymgynghorol. +Byddent yn dwyn eich eiddo. +Ymhlith y rhain, peswch yw'r effaith andwyol fwyaf cyffredin. +Collodd un palfaliad hefyd. +Mae'n weladwy i'r llygad noeth o dan amodau da iawn. +Fe wnaeth nifer y myfyrwyr wedi'u cofrestru gynyddu'n raddol. +Gwelir brwydr ddramatig rhwng y ddau. +Mae'r glöyn byw hwn yn dangos ymddygiad mudol heidiol yn ne India. +Fodd bynnag, cadwodd Henry deyrngarwch ei ddeiliaid. +Ymatebodd y Milwyr â'r mor-filwyr drwy ddod a thanciau ac hofrenyddion. +Offer glanio sefydlog, gyda rhaff rwber â sbring mewnol, gyda sglefren ôl. +Mae beicwyr yn cario'u beiciau i fyny llethr glaswelltog serth. +Cafwyd adolygiad cadarnhaol arall gan Allmusic. +Yna mae'r un peth yn cael ei wneud gyda'r tomato. +Maent i gyd yn dal i gynnal gweithrediadau ar wahân. +Mae'r llwybrau ar gael at ddibenion cerdded, mynydda, beicio mynydd a marchogaeth. +Roedd ei wrthwynebwyr yn ei ddisgrifio yn ddyn aflonydd â thuedd ynddo i ddadlau. +Mae'r siop hefyd yn cynnwys y swyddfa weinyddol ar gyfer gwerthu tocynnau ac ymholiadau. +Roedd llawer o'r darluniau yn ei weithiau wedi'u seilio ar sbesimenau yn ei gasgliad. +Gwerthu dillad yr oedd ef. +Cynhyrchon nhw belenni traul a gafodd eu defnyddio ar gyfer hediadau trawsatlantig cynnar. +Roedd ar gael drwy archeb ar-lein sawl blwyddyn cyn iddo gael ei ryddhau'n gyffredinol. +Dyma ei bumed nofel a'r olaf, a gyhoeddwyd dwy flynedd cyn ei farwolaeth. +Hefyd mae'r teulu gwag o setiau yn ddigyswllt fel pâr. +Mae un newydd yn cael ei adeiladu. +Mae'r ysgol annibynnol ddyddiol a phreswyl Coleg Llanymddyfri hefyd wedi'i lleoli yn y dref. +Roedd y rhaglen yn cynnwys gweithgareddau arbennig, cyrsiau trwyadl, darlithoedd a chyfres colocwia. +Roedd yr ysgrifen yn dathlu dyfeisgarwch Americanaidd a'r ffordd seml o fyw. +Mae'r Ddeddf wedi'i diwygio sawl gwaith yn ogystal. +Heddiw, mae galw mawr am gychod couta ac maent yn cystadlu'n frwd mewn rasys. +Mae'r Cwmni hefyd yn sefydliad elusennol ac addysgiadol. +Defnyddir miligram am bob litr yn aml mewn meddygaeth ac mewn presgripsiynau meddygol. +Mae'r canlynol yn ymdrin â rheolau sylfaenol chwarae'r gêm. +Fodd bynnag, mae sawl un o ganghennau'r delta wedi eu cysylltu yn ddirwystr. +Ond yn fwy tebygol mae'n perthyn i;r Almaeneg "mahlen" sydd yn golygu "melynu". +Roedd ei rieni ill dau yn aelodau cynnar o'r Blaid Lafur. +Caiff pren y goeden ei ddefnyddio i wneud cribau. +Cynrychiolir cludiant cyhoeddus yn y ddinas gan dramiau a llinellau bysiau'r ddinas. +Gellir clywed samplau sain yma. +Mae eu hymddangosiad yn amrywio yn ôl y tymor. +Ni ddywedir unrhyw beth pellach amdani yn yr hanesion swyddogol. +Roedd ei gerddoriaeth yr un mor addas i wrando arni'n weithredol neu'n oddefol. +Gwadiad o ran swyddogaeth wirioneddol ein milwyr yn Irac. +Ceir hefyd reilffordd fach gul a rheilffordd fodel yn y Ganolfan. +Mae hyn yn ffenomenau ôl-tsunami. +Mae'n debyg i fugail sy'n bugeilio defaid. +Edrychai preswylwyr cyfagos ar y tir hwn fel ffordd o bori eu hanifeiliaid fferm. +Dyma restr o alaethau a ddaeth yn brototeipiau ar gyfer dosbarth o alaethau. +Mae archwiliwr tocynnau rheilffordd mewn trên olif yn gwenu ar gyfer llun +Roedd gwobrau cenedlaethol yn amrywio, ond roeddent o werth ariannol tebyg. +Mae Ardal Ysgol Gorllewin Ada yn cynnig amrywiaeth o ysgolion magnet ledled yr ardal. +Mae'r ddau gampws yn cynnig blwyddyn o astudiaethau ôl-raddedig. +Fe greodd yr haul, y lleuad, a'r sêr. +Mae nifer o Iddewon yn y boblogaeth. +Unwaith eto, nid y cynhyrchydd sy'n defnyddio'r nwydd yn y pen draw. +Dwi wedi tyfu'n fedrus iawn o ran cuddio pethau. +Mae gwersyll tebyg i farics wedi'i lleoli ar ochr ogleddol y maes awyr. +Dyma enghraifft bosibl o ffurfio tafodiaith mewn cân adar. +Ei arbenigedd yw Oes Haearn Ewrop. +Mae'r Archesgob hefyd yn goruchwylio nifer o esgobaethau swffraganiaid Manila. +Llwyddodd i gyrraedd Lloegr yn gyntaf gyda'i gyfrif ef o ymosodiad Prwsia. +Llwyddodd y llyncdwll hefyd i lyncu dau gar gwag wedi'u parcio. +"Da," meddyliodd yr hen fonheddwr. +Mae llawer o ffermwyr yn byw yn llwybrau digwyddiadau dinistriol posibl o'r fath. +Teitl nad oedd yn ei dderbyn. +Fodd bynnag, ni wireddwyd cynlluniau i ddyroddi gorchmynion post Prydeinig ledled Canada. +Roedd pobl yn cael eu stopio hefyd am droseddau sy'n effeithio ar ansawdd bywyd. +Mae tri gŵr yn gweithio ar jobyn weldio. +Mae'r cyngor wedi mabwysiadu codau cynllunio sirol a pharthi cynhwysfawr. +Wir, nid yw hynny'n bosibl. +Roedd gan lawer fowntiau ar longau dariannau torri yn ysgyrion. +Roedd y rhan fwyaf o'r drafnidiaeth dros ddŵr, felly defnyddiwyd cwch trac yn aml. +Mae ci du a chi brown yn rhedeg ar hyd llwybr lludw. +Dechreuodd dynion hefyd wisgo topiau byr, beth bynnag oedd y gamp. +Dyn mewn crys-t gwyn yn glanhau ysgyrion. +Rhywun mewn siaced felen yn eirafyrddio. +Arweiniodd hyn at arestiadau torfol a dienyddiadau cyhoeddus gan yr awdurdodau. +Cynigir gwybodaeth ynglŷn â threnau drwy gyfrwng posteri a ffôn. +Mae gan y brifysgol gampysau mewn sawl lleoliad ym Mhacistan. +Mae hefyd yn rhanbarth poblogaidd ar gyfer mynd mewn llongau pleser. +Fodd bynnag, ar ôl sawl dydd o ymladd, caiff y Cydweithfa ei ddinistrio. +Mae nentydd y cwm yn rhai tymhorol, nid yw'n ddiogel i yfed y dŵr. +Mae'r achos hefyd yn brif ffynhonnell cyfraith yswiriant. +Beth oedd hynna? fe ofynnodd hi, yn ofnus. +Ar ôl y rhyfel, ymsefydlodd gwladychwyr o wahanol rannau o gyn-Iwgoslafia yr ardal hon. +O, na, dim byd felly! +Roedd ei waith yn bennaf ym maes plastigau a chatalyddion. +Coeden fytholwyrdd gonifferaidd yw hi, sy'n tyfu i uchder penodol. +Roedd gan y dref eglwys Gynulleidfaol Almaenaidd ac eglwys Fethodistaidd. +Mae gan y Ganolfan Fasnachu Forwrol bellach gyfran cynulleidfa, cyfradd a chyfraddiad bach, minimol. +Roedd ei mam, Georgette, y cafodd ei henw llwyfan ohoni, yn Babydd Ffrengig. +Mae'r rhisomorffau'n ddu yn y rhywogaeth hon. +Dim ond difetha fy mywyd a wnaeth a doedd gen i ddim cynorthwywyr. +Erbyn hyn mae'n gwneud ymddangosiadau corfforaethol ac areithiau ysgogiadol. +Mae gwrywod yn unweddog. +Mae'r dyn yn y crys pinc yn chwarae'r gitâr ac yn ysmygu sigarét. +Blodyn cenedlaethol yr Alban ydyw. +Gallant gael eu creu o gwmpas cofeb, dynodwr hanesyddol neu brosiect celf. +Ar ôl iddo orffen ymddeolodd o actio. +Gweithiodd hefyd ar opteg a dileu egwyriant golau. +Dwy fenyw mewn trowsus byr sy'n eistedd ar risiau fflat neu dŷ. +Mae yna wahaniaeth mawr. +Caiff yr holl gymhleth ei roi gan yr Adran Amddiffyn. +Newidiodd y ddau liw, edrychodd un yn wyn, y llall yn goch. +Dilynodd ymfudwyr diweddarach i Galiffornia yr un llwybr yn ystod misoedd y gaeaf. +Roedd e'n dal i fod yn agos at yr arlunwyr hyn, fodd bynnag. +Mae tân yn berygl sylweddol mewn trefi cytiau a'r cytiau'n agos i'w gilydd. +O'r cyfnod hwn ymlaen, roedd dylanwad y Salon yn ddiamheuol. +Roedd hefyd yn Llywodraethwr Ynysoedd Sili. +Mae man lansio cychod ac ardal nofio i anifeiliaid anwes yno hefyd. +Mae'r amgueddfa'n cael ei rhedeg yn gyfan gwbl gan aelodau gwirfoddol. +Mae gweithiwr adeiladu yn sefyll ar ben adeilad pren. +Mae'r peilonau'n cynnwys dau gerfwedd maint llawn o benaethiaid Brodorol America. +Gellir tynnu'r sgiliau hyn a gellir eu gwerthu i chwaraewyr eraill. +Yn ddi-rym o drefn broffesiynol, mae ei baentiad yn gwneud argraff lem, soniol. +Roedd hefyd wyliau balŵn awyr poeth a ffeiriau sirol. +Dyn yn cerdded a dynes yn cerdded yn gafael mewn merch fach. +Myfyriwr yn dathlu yn yr eira. +Mae'r “pusilla” penodol yn golygu “bach iawn” yn Lladin. +Rhoddwyd y ffurfweddiadau un prosesydd a dau brosesydd ar waith. +Y cynllun hwn oedd y cynllun olaf ar gyfer annibyniaeth. +Achosodd y digwyddiad hwn orffwylledd yn y cyfryngau. +Ar gorneli, gosodir “meini cornel” i nodi eu hunion leoliad ar y tir. +Oherwydd gwelson nhw eu bod yn rhy hwyr. +Mae pŵer hefyd yn sylweddol ac yn hygyrch. +Mae'r penrhyn yn adnabyddus am ei ynysfor hardd a'i draethau tywodlyd hir. +Gellir chwarae'r fersiwn hwn o'r gêm am ddim. +Yn lle, fe'i defnyddir yn bennaf yn lle ôl-lenwi cywasgedig. +Mae'r Sefydliad Siartredig wedi'i ymgorffori gan Siarter Frenhinol. +Trwy gydol y gyfres mae cymeriadau amrywiol yn medru sgwrsio gyda neu ddeall anifeiliaid. +Yn chweched gystadleuaeth saethyddiaeth yr Almaen, enillodd tîm merched yr Almaen y fedal arian. +Ci du a gwyn ger ci llwyd a gwyn ar garped llwydfelyn. +Gair Lladin ydyw am “morthwyl” neu “gordd”. +Rhyw feddwl mai dyna sut y mae sefydliadau oeddwn i, dyna'r oll. +Gellir adnabod hyn yn hawdd drwy'r staen melyn yn y goleubwyntiau. +Efallai y bydd hefyd yn cynnal profion straen, gan ddefnyddio sefyllfaoedd andwyol. +Maent hefyd fel arfer yn fwy ac yn ddrutach. +Yna fe adferais fy hun. +Yn dair oed, dechreuodd Jones chwarae pêl-fasged mewn parc lleol. +Dwy ddynes oedrannus gyda gwalltiau wedi britho yn sgwrsio. +Mae gan y ddau blatfform fynediad di-ris trwy rampiau o'r ffordd gyfagos. +Mae gan y llyfrgell le yn awr. +Cyfeiriodd yr erthygl olygyddol sawl gwaith at ailuno Korea. +Mae'r orsaf hefyd yn gwasanaethu'r rhai sy'n gweithio yn y ffatrïoedd i'r dwyrain. +Roedd Gweinyddiaethau eraill hefyd wedi'u lleoli ym mhlastai preifat yr ardal. +Estheteg a dyluniad cas gwreiddiol gan Robert Ellis. +Maent yn adnabyddus am eu dygnwch gwych a'u cotiau "metalaidd". +Fe wnaeth ef ysgrifennu, cyfarwyddo, cynhyrchu a chynnal ystod o raglenni dogfen hanesyddol. +Mae'r safle'n gysylltiedig â dadleuon lleol oherwydd llygredd yn ystod gweithrediadau'r ffatri. +Nid yw'r tir fel arfer yn weladwy o'r basleoedd allanol. +Mae'n ffynnu mewn amgylchedd golau, llaith, megis wrth ymyl pwll. +Roedd ei berthynas â Llafur Newydd yn fwy cythryblus. +Mae wedi cael ei gynnal gan Blaid Ryddfrydol Awstralia am ei bodolaeth gyfan. +Mae'r paentiadau hyn yn disgrifio casglu treth am nwyddau penodol, fel olew coginio. +Cafodd ei ymgeisyddiaeth ei blagio bron yn syth gan nifer o gamsyniadau cysylltiadau cyhoeddus. +Yn ddiweddarach bu'n rheoli cwmni buddsoddi preifat. +Dydyn nhw ddim yn gallu byw os rhoddir dŵr ffres i mewn. +Mewn plant, mae gwahanu yn cynnwys amddifadedd mamol. +O ganlyniad, cafwyd sawl brwydr yn yr ardal. +Mae eu pren hefyd wedi'i alw yn “mahogani cnawd ceffyl” ar wahanol amseroedd. +Mae'r term “idu” yn cael ei ddefnyddio mewn dwy ffordd. +Mae pedwar ymddiriedolwr ychwanegol yn cael eu hethol i'r Bwrdd. +Roedd tebygrwydd arall yn ei boeni. +Mynychodd Brifysgol Caergaint a graddiodd gyda Diploma mewn Addysgu. +Mewn sianeli llydan hirsgwar, mae'r radiws hydrolig yn agos at ddyfnder y llif. +Mae pob term yn pwysleisio elfennau fymryn yn wahanol. +Mae'n dal yn aneglur faint ysgrifennodd a golygodd ei fyfyrwyr. +Mae'r erthygl hon yn defnyddio ar gyfer cyflymder golau mewn gwacter un unig. +Mae swyddi eraill i'w cael mewn busnesau lleol ac yn y sector gwasanaethau. +Yr amcan mwyaf cyffredin yw trechu'r holl elynion neu gymeriad giaffer penodol. +Olynwyd ef gan ei fab hynaf, Thomas. +Dywedaf gymaint â hyn wrthych. +Cynorthwyodd i sefydlu'r hyn sydd bellach yn Brifysgol Gregori yn Rhufain. +Y mae'r digwyddiadau yma yn Ddehongliad Doniol, Dehongliad Deuawd, a Rhaglen Dehongliad Llafar. +Mae'r casgliad hwn yn dibynnu ar gael digon o byllau. +Mae dros gan mil o bobl yn cymryd rhan. +Mae'n ffurfio cyfres toddiant silid gyda magnesioriebecid. +Mae dyn gwallt tywyll yn eistedd ar floc colsyn o flaen wal wedi'i baentio. +Fe'i henwyd ar ôl prifddinas Cymru. +Fodd bynnag, perfformiodd Awstria yn well na'r disgwyl. +Bachgen a sgerbwd ar ei grys yn chwerthin. +Roedd yr awdurdodau yn cymryd rhifynnau o bryd i'w gilydd. +Mae safonau ardystio sy'n berthnasol i addasrwydd aer awyren yn cynnwys llawer o ofynion. +Ar lawer o systemau mae'n rhaid nodi'r ddwy i nodi'r diogelwch yn unigryw. +Mae'r nofel yn ymwneud â goruchafiaeth yr unigolyn a “herwriaeth fetaffisegol”. +Ar ôl derbyn statws Parc Naturiol, cafwyd gwared ar y moch. +Ni ailsefydlwyd yr ynys erioed. +Gellir ethol aelodau am nifer amhenodol o delerau. +Mae'r dechnoleg hon yn defnyddio signalau'r ymennydd i reoli swyddogaethau'r cyfrifiadur. +Merch fach yn ymarfer gymnasteg ar drawst cydbwysedd. +Mae hanes byr o'r ysgolion yn dilyn isod. +Nid oes cyngor sefydlog fel gyda chymdeithas Bar Cymru a Lloegr. +Nid oes dim o ardal y pentref wedi'i gorchuddio â dŵr. +Cafod y gêm adolygiadau cymysg yn gyffredinol gan feirniaid. +Mae hi'n hŷn na'i gefell, Lisa, o un munud. +Cefnogodd ymyrraeth Suez hefyd. +Mae siwtiau bolier gyda hwd cysylltiedig ar gael. +Mae'n gallu ysgogi'r economi. +Wedi hynny daeth yn gyfrannwr i sawl cyfnodolyn Americanaidd. +Merch mewn pinc yn mwynhau ei hun yn y parc. +Gellir rhannu'r rhain i ddangosyddion aciwt neu gronig. +Ar un adeg, roedd gan y dref glafdy, siop groser ac ali fowlio. +Mae gan y ddau ryw fil du a thraed pinc. +Mae grŵp o fyfyrwyr crefft ymladd yn ymarfer eu symudiadau. +Mae'n bumed sir leiaf yng Ngogledd Carolina. +Mae ei enwau lleol yn cynnwys "somlatha". +Gwnaed cynlluniau i sefydlu anheddiad yn y dyfodol yn y fan honno. +Darparwyd stêm ar gyfer y tyrbinau gan dri boeler tri-drwm Morlys. +Roedd yn hysbys bod ganddo deyrngarwch "â gwreiddiau dwfn" ei filwyr. +Mae'r llyfr hefyd yn manylu ynghylch eitemau hudolus newydd a bwystfilod newydd. +Fe ysgarodd bedair blynedd yn ddiweddarach. +Daeth Arthur, a enillodd y frwydr, yn ymwybodol o gasineb Morgan tuag ato. +Weithiau bydd edifeirwyr yn penlinio wrth ddweud eu cyffes wrth offeiriad. +Mae'r brifysgol yn cynnig graddau mewn peirianneg ddiwydiannol, fecanyddol, systemau, sifil, drydanol ac electronig. +Roedd ei ymdrechion yn ystyried llawdriniaethau isgroenol megis tenotomeg, sef llawdriniaeth i rannu tendon. +Roedd goroesiad cryfder crai, yn y tymor hir, yn ddymunol. +Mae'r llyfr hefyd yn cynnwys llawer o ddelweddau a ffotograffau yn darlunio'r llyn. +Mae ynni niwclear wedi ei gysylltu'n hanesyddol â materion o ddiogelwch cenedlaethol. +Gwasanaeth Fferm y Gorllewin yw'r unig gwsmer ar y rheilffordd. +Fe wnaeth rhifyn clawr caled y llyfr ddileu'r gwall hwn. +Mewn dosbarthu deuaidd, mae manwl gywirdeb yn gydwedd â gwerth rhagfynegol positif. +Newidiodd i'r allfaes ddwy flynedd yn ddiweddarach. +Mae'r digwyddiad wedi dwyn anfri ar Fwslimiaid ym Malaysia. +Dau ddyn gwallt du yn siarad ar soffa. +Uniongred Gwlad Roeg oedd ef. +Roedd y dylanwad Cristnogol hwn yn amlwg yn llawer o'u harferion hudol. +Gwnaeth gornest nos Lun wireddu ei restriad. +Mae'r rhai sydd â statws amhenodol wedi'u marcio â ? +Gwelodd fymryn o syndod yn ei llygaid. +Methodd yr albwm â dychwelyd y band i'w ogoniant masnachol. +Mae gan bob pennod thema benodol, un gymdeithasol neu amgylcheddol yn arferol. +Daeth y ffermwr o hyd iddi bron yn farw'r bore wedyn. +Roedd gan y ddinas hyd at dair ffwrnais ar gyfer mwyndoddi. +Gwarantodd y gystadleuaeth raglen y tymor i'w holl glybiau sy'n aelodau. +Mae awdur y gân yn anhysbys. +“Helo fenyw fach” meddai ef, a “helo ddyn mawr” atebodd hithau. +Chwaraeodd yn y tîm a gynrychiolodd y Gynghrair Bêl-droed. +Yno y bu hi yn sefydlog am sawl blwyddyn. +Morgrug yw un o hoff fwydydd y frân goesgoch. +Mae gan eraill wifrau sy'n dod o'u cyrff “yn rheiddiol" yn lle hynny. +Felly mae'r gell yn cael ei hyperpolareiddio. +Roeddwn i'n barod i roi cynnig ar unrhyw beth. +Ar yr un pryd roedd Dolin wedi'i gyflogi fel cyfarwyddwr gweithredol dros wasanaethau teulu. +Ychydig yn ddiweddarach, cafodd y rheolau eu diwygio'n ffurfiol i egluro cyfraniad cyhoeddiadau ar-lein. +Ac roedd y dodrefn yn hen a hysig. +Ymosodiad cyffredin ar dystiolaeth ddigidol yw y gellir newid cyfryngau digidol yn hawdd. +Ddiwrnodau'n hwyrach, ceisiodd hunan-laddiad. +Dechreuodd ei gyrfa actio fel plentyn mewn cynyrchiadau llwyfan rhanbarthol a hysbysebion. +Ef oedd hyrwyddwr cyntaf y rheilffordd, y coffi a'r grefft o wehyddu brwyn. +Mae ei waith wedi cael ei berfformio'n fyd-eang. +Mae pump stondin i gyd. +Mae nifer o fenywod mewn mentyll yn cerdded drwy adeilad teiliedig. +Mae hyn yn cyfeirio at y tri chorn a welir ar bennau'r gwryw. +Mae hyn yn debyg i'r defnydd o stôl drochi. +Mae'r ynys tua o'r lan ger pen deheuol y llyn. +Mae'r dyn sy'n eistedd wrth y bwrdd yn posio am lun. +Mae a wnelo'r testun uchod â cham cyntaf ffactorio cromlin eliptig. +Weithiau mae e'n awgrymu'r ffilm y byddai'n well gyda chi fod yn ei gwylio. +Cytunodd swyddogion yr Adran Gyfiawnder bod ei darllediadau yn "ddiniwed". +Roedd gan y naill fersiwn a'r llall yr un rhestr draciau. +Felly dilynir prosesau apeliadol dyladwy i sicrhau rheolaeth y gyfraith. +Mae'n dal i sefyll. +Ni chynhyrchwyd y ffilm erioed. +Mae ar eich stepen drws gydag amseroedd teithio byr +Hefyd llongyfarchiadau i bawb a wnaeth mor dda yn y gystadleuaeth eleni +Os oes gennych unrhyw gwestiwn, mae yna groeso ichi ofyn i mi +Crëwch adroddiad ar fanteision ac anfanteision un ffynhonnell egni adnewyddadwy +Mae siartiau cylch yn weledol gryf ac maent yn cyflwyno'r data yn effeithlon +Yn ei arddegau dechreuodd wneud celf yn ei dref enedigol +Fel arall, gallent weithio ar eu pen eu hunain yng nghartrefi cleifion +Sut allwn wella hyn os cawn siawns eto i gynnal y clwb? +Mae'n gallu cymryd dros wythnos i wrando ar bawb +Cyhoeddodd bethau fel beirniadaeth lenyddol, atgofion a chyfieithiadau +Rydw i wedi bod eisiau astudio celfyddydau perfformio erioed +Bydd newidiadau yn y dyfodol yn dibynnu ar sawl ffactor +Teimlaf yn fwy hyderus i ddelio â sefyllfaoedd amddiffyn plant +Credaf fod y wefan yn ddibynadwy gan ei bod wedi'i hysgrifennu gan arbenigwyr +Hoffwn i gael pizza i swper heno. +Ni all y cyfranogwyr eraill weld y wybodaeth bellach +Ond, mae nifer o gyfansoddiadau yn gadael allan rhai adrannau +Mae darllen gartref yn cael ei gysylltu gyda llwyddiant addysgol +Rwyf yn ddeunaw oed a newydd orffen fy nghyfnod yn yr ysgol uwchradd +Mae angen cyflwyniad i'r traethawd sydd yn esbonio'r cwestiwn +Ditectif dychmygol yw Sherlock Holmes yn nofelau Arthur Conan Doyle. +Mae'r mapiau isod yn dangos canran y toriadau i gyllid pob sir +Ni all colegau gael enwau defnyddwyr a chyfrineiriau ar hyn o bryd +Mae gwybodaeth yn hanfodol er mwyn adnabod bygythiadau a chymryd y camau angenrheidiol +Defnyddiwch y bocs yma i ddangos eich gwaith cyfrifo +Mi ddylech chi ymddiheuro drwy lythyr yn y papur bro +Rho sianel pedwar Cymru ymlaen +Cofia, nid oes angen alcohol i gael hwyl +Mae'r plant yn hoff iawn o chwarae gyda'u teganau Lego. +Disgwylir i boblogaeth y byd gynyddu o bron i bedwar biliwn. +Mi fydd arholiad ymarferol yn rhan o'r dasg yma +Mae Graham yn enw mynydd yn yr Alban yn ogystal ag enw dyn. +Canodd Parry-Williams am y ferch ar y cei yn Rio. +Yn gyntaf, penderfynais i edrych ar fathau gwahanol o fwlio +Dyma ddatganiadau cenhadaeth a nodau ac amcanion gwahanol fusnesau +Ewch ati i greu poster am bwysigrwydd ailgylchu +Ers hynny daeth yn fwy penderfynol i lwyddo yn y celfyddydau +Gall y plant ddewis yr adnoddau gwahanol a wneud cerdyn unigryw eu hun. +Mae'r hysbyseb yn defnyddio ffactor sioc i gael sylw pobl +Rwyt wedi ail ysgrifennu'r stori yn y drefn gywir +Gwnewch allwedd yn eich llyfr i ddangos beth mae'r cylchoedd yn eu dangos. +Diolch i bawb a wnaeth y daith a phrofiad yn llawer mwy pleserus +Felly, mae'n bwysig ar gyfer adeiladu a chynnal dannedd ac esgyrn +Torrwch o amgylch y lluniau a'u lleoli yn yr adran gywir +Gwnaeth deisen hyfryd allan o'r bananas oedd bron â throi'n ddu. +Dewch â dillad addas ar gyfer y gweithgareddau awyr agored +Canmoliaeth yw dweud yn benodol beth maen nhw wedi gwneud yn dda +Mwynheais ddarllen ac astudio'r gerdd yn fawr iawn +Gofynna i Wicipedia Cymraeg pwy yw Arlywydd Yr Unol Daleithiau? +Rydyn ni'n croesawu ymwelwyr i'n hysgol +Mae modd dweud cynnau a diffodd am ‘switch on' a ‘switch off' yn Gymraeg. +Canolbwyntiwch ar y dasg er mwyn creu'r gwaith gorau posib +Pan gyrhaeddais adre, cefais fy mam yn mwmian canu. +Dylai adrannau prifysgol ganolbwyntio ar ddysgu ac addysgu yn lle ymchwil +Gŵyl diolchgarwch yw un o uchafbwyntiau'r flwyddyn +Mae angen gwirio dy waith gan fod un ateb yn anghywir +Mae bore'r nawfed yn iawn - croeso i chi ddod draw. +Sawl hysbysiad sgen i yn Twitter? +Roedd yr awdur yn mynegi barn o blaid arbrofi ar anifeiliaid +Faint o filltiroedd fyddan nhw wedi eu teithio pan fyddant yn stopio? +Mae hyn wedi cadarnhau'r atebion canlynol i gwestiynau'r adolygiad +Bydd sgwariau o ffabrigau gwahanol ar gael er mwyn arbrofi gyda nhw +Nodwch unrhyw syniadau o bethau hoffech ei wneud yn y clwb celf +Rwy'n adnabod sawl dyn o'r enw John Roberts. +Bydd costau teithio a lluniaeth yn cael eu cynnwys +Sori doeddwn i ddim yn gwybod hyn pan ofynnais am yr amserlen +Penderfynais ymchwilio ymhellach i'r agwedd yn dilyn fy adolygiad llenyddiaeth +Edrychwch trwy gatalogau, cylchgronau, gwefannau, hysbysebion neu ewch i siop +Bydd y rhain yn cael eu dewis yng nghyfarfodydd cyntaf y clwb +Rwyt ti'n rhy fach, byddi di dan draed pawb. +Doeddwn i ddim yn gyfarwydd â'r gerdd na'r dôn +Mae wedi bod yn dymor hir +Trafodir y tair strategaeth eto, a diolch i'r llywodraethwyr am ddod +Os gwelwch yn dda, dilynwch y prosiect cymunedol yma +Mae siarad cyn ysgrifennu yn strategaeth fuddiol tu hwnt i blant +Mae disgyblion yn cyfrannu at nifer o elusennau +Heddiw rydw i am siarad hefo chi am fy nheulu +Hefyd mae rhaid iddyn nhw oruchwylio rheolwr y ffair +Roedd Iddewon a charcharorion yn cael eu gweithio i farwolaeth yn y ffatrïoedd +Fel y nodwyd, rydym yn croesawu dulliau arloesol o asesu +Rôl y dyn camera yw rheoli a gweithredu'r camera fideo yn broffesiynol +Ydi hyn yn rhywbeth fedra i wneud drwyddo chdi? +Mae'r cyfuniadau canlynol wedi eu rhestru yn nhrefn darllenadwyedd. +Nid wyf yn ailgylchu na'n ailddefnyddio bagiau plastig +Mae bwydlen sylweddol gan y clwb gyda darpariaeth o'r safon uchaf +Bydd angen tywod, lythrennau mawr, a bwrdd gwyn bach. +Diolch o galon am y sgwrs yn gynharach heddiw +Gofynna i Wicipedia beth yw Deallusrwydd Artiffisial? +Gŵr cydnerth ydoedd ef, ac mewn gwth o oedran. +Am fwy o wybodaeth am sut i gael eich cofnod credyd gweler drosodd. +Er hyn, nid oedd yn hollol lwyddiannus +Llusga'r brawddegau i'w lleoliadau cywir i gymharu celloedd planhigion ac anifeiliaid +Roedd Martin Luther yn un o brif ffigurau'r Diwygiad Protestannaidd. +Diolch i ti Dduw am deulu i'n helpu a rhoi cariad +Roedd tri phwynt o blaid a thri phwynt yn erbyn. +Daethant i adnabod beth yw cerdd acrostig a cheisio ysgrifennu enghraifft eu hunain +Yn sicr y mae wedi denu ein sylw ni i gyd +Digwyddodd i ni gael ychydig o faip, a berwai ein mam y rhai hynny. +Fe lwyddon ni i ddal yr awyren yn y diwedd. +Mae'r National Theatre ar y South Bank yn Llundain. +Bydd tasg estynedig yn cynnwys graffiau bach gyda chwestiynau i fynd efo nhw +Amcan y bardd yw cofnodi'r profiadau fel ffotograff mewn geiriau +Mae'r manylion cyswllt ar gyfer y cwmnïau bws hefyd wedi eu cynnwys isod +Mae'n anghyfreithlon trin myfyriwr yn llai ffafriol oherwydd ei anabledd +Mae'r model yma wedi'i greu gan bobl sydd ag anabledd yn barod +Nid oedd damweiniau i'w cofnodi ar y cae chwarae +Rwy'n hoff iawn o ddramâu Shakespeare. +Gwnewch siart gylch gan ddefnyddio'r data yn y tabl +Faint wyt yn codi am wneud gweithdai gyda phlant? +Rydyn ni'n ceisio datrys cwynion mor gyflym â phosib ar sail anffurfiol +Rwy'n gwybod bod pwyllgorau rhyngwladol yn penderfynu ar enwau gwyddonol +Teimlaf boen iasoer yn saethu lan fy nghefn +Mae actio yn arf er mwyn gwella dychymyg a dyfeisiau a ddefnyddir mewn barddoniaeth. +Y mae gwlad agored brydferth Llanfair a Llanbedr o'n blaenau. +Rhowch wallt a thrwyn doniol ar y wynebau. +Pwrpas y llun oedd cefnogi'r ystadegau a dangos erchyllterau'r digwyddiad +Gofynnir i bawb wisgo'n addas ar gyfer y tywydd +Mae'r cyllid a rhoddwyd fan yma +Rwy wedi newid y dyddiad yn fy nyddiadur. +Gwelir calendr cyfredol ar wefan yr ysgol neu drwy law'r pennaeth +Mae'n bleser cyflwyno'r adroddiad hwn ichi +Diolch am eich e-bost diweddaraf gyda'r manylion diwygiedig +Defnyddiwyd y cyfryngau cymdeithasol i hyrwyddo a marchnata'r digwyddiad +Nid oeddem yn gallu creu cyfrif gyda'ch cyfeiriad e-bost +Dylai tystiolaeth sydd yn cael ei chyflwyno yn yr adran yma adlewyrchu hyn +Diolch yn fawr am wrando ar fy araith +Ysgydwais ei llaw a cheisio mynegi mewn symudiadau mor ddiolchgar y teimlwn +Cymysgir caws trwy hufen, melynwy a meringue i greu gwead unigryw i'r gacen. +Atodaf gopi o'r anfoneb ar gyfer y cneifio +Yna gosodwch haen o'r defnydd dros y twll yn y bocs +Mae hwn yn faes sydd yn symud yn ei flaen yn gyflym. +Roedd pensaernïaeth hynod i'r dref. +Mae'n debyg eu bod nhw wedi llusgo'r cerrig ar geir llusg. +Cleciodd Dic ei chwip gan wenu. +Aethom ymlaen at y tŷ. +Torrodd Catrin i wylo, yn fwy o ddigofaint na dim arall. +Dyna oedd fy uchelgais ers pan oeddwn i'n ddeg oed. +Mae'r dymheredd yn uchel iawn am fis Mawrth. +Mae tymheredd y cerrynt oer yn peri i'r lafa ffrwydro. +Ym mhen eiliad neu ddau, yr oedd Pero wedi marw. +Pan godai'r fflam, gwelem ninnau'r ystafell. +Dw i ddim yn meddwl y galla i ddod allan gyda chi heno. +Eu hunig bwrpas yw tynnu sylw at bŵer y brenin +Mae hyn yn cefnogi'r data sydd i gael yn y tabl amlder +Roedd cyfleoedd i ddatblygu sgiliau cyfathrebu, cofnodi a chydweithio â'r plant +Arferai Jessica fynd â'i chi am dro bob bore. +Roedd het wellt goryn isel gantel mawr a ruban am dani am ei ben. +Roedd Ray Gravell yn chwaraewr rygbi poblogaidd iawn. +Bydd rhaid i ni brynu pabell newydd. +Y peth olaf welwn oedd y wraig unig, yn gwylio ei buwch. +Roedd yn codi hiraeth am lefrith melys y gwartheg sy'n pori ochrau mynyddoedd. +Bydda i hanner awr yn hwyr i'r cyfarfod. +Y cewri oedd Tudur Jones, Pennar Davies, Dan Thomas a Gwynfor. +Clywai leisiau anniddig yn sibrwd wrthi. +Ymddiswyddodd dros ei gred a chafodd ei garcharu am weddill y rhyfel +Dydi plant ddim yn gallu chwarae'n dawel. +Roedd yn rhaid i'r bobl symud oddi yno i fyw. +Mae'n car yn mynd i gostio'n ddrud i'w drwsio. +I gloi, hoffwn gadarnhau prif neges y ddwy gerdd +Nhw yw'r côr gorau yn y gystadleuaeth. +Byddwn ni'n hwyr i'r cwrdd plant. +Rwy'n atodi fy sleidiau ar gyfer y cyfieithwyr. +Mae angen tywelion glân yn y stafell ymolch. +Gwelsai Dafydd ap Gwilym lawer Morfudd yma. +Rhaid nawr wneud newidiadau a cheisio dileu gwallau iaith +Agorir y llif-ddorau pan fo'r môr yn dod i mewn. +Siaradai am ei senedd, am y cyfreithiau wneir gan yr ynyswyr eu hunain. +Gobeithio y gwelwn fwy o'n gilydd yn y gwasanaeth nesaf ar y cyd +Byddai casgliad byr wedi bod yn dda fan hyn +Cafodd Pws Pwdin bump o gathod bach. +Awn ni i Tesco i brynu bwyd. +Wrth i'r dŵr anweddu mae'n lleihau'r tymheredd y corff +Byddwn ni yn glyd iawn yn ein cartref newydd. +Mae'r plant yno fel arfer gyda'u rhieni. +Cyn bo hir, cefais ergyd yn fy mraich. +Mae cawl tomato yn dda at annwyd. +Tyn yr ede allan dipyn. +Y ferch a lefarodd gyntaf. +A daeth hithau yno rhag blaen. +Aeth yntau o'm blaen. +Yr oedd dail y coed eisoes yn dechrau troi eu lliwiau. +Roedd gan Marian fusnes allforio bagiau croen crocodeil. +Roedd rhai pobl yn cnoi eu hewinedd. +Roedd ganddi wallt hir brown. +Roedd clwt bach o awyr las i'w weld drwy'r ffenest. +Roedd tipyn o chwerthin yn y cefndir. +Y munud nesaf, dyna fo yn i ôl, a gwningen yn i geg. +Mae'n cael hufen iâ i bwdin bob nos. +Pentref bychan ydoedd gynt, a rhyw ddeucant o dai ynddo ar y gorau. +Defnyddia lai ar y car a cherdda mwy. +Roedd y mwclis wedi bod ar goll am chwe chan mlynedd. +Maen nhw wedi darganfod y gloddfa gerrig wreiddiol. +Byddent gyda'i gilydd bob amser. +Cymer ofal, rwan, y penbwl! +Yr oedd Dafydd ar fedr chwibanu arno pryd y gwelodd bwff o fwg. +Roedd hi'n ddiwrnod poeth arswydus yn yr haf. +Bu felly am rai wythnosau, heb gael bod yn rhydd. +Mae tri pot iogwrt yn yr oergell. +Dim ond rhimyn cul o dir sydd rhwng y lagŵn a'r môr mawr. +Deallais innau ei feddwl. +Doedd neb yn edrych ar y teledu. +Safodd y ddynes o'r neilltu, yn syn. +Erbyn hyn, y mae o yn berchen busnes mawr a llawer o arian. +Clywodd sŵn traed yn rhedeg. +Nid oedd chwaith y dilyniant ar draws yr unedau yn ddigon cydlynnus +Rwy'n asesu ac yn rhoi cyngor ariannol i'r cyhoedd +Mae asesu anffurfiol yn gallu cael ei wneud bob dydd yn y dosbarth +Dydi e ddim yn malio am neb. +Roedd ganddi wyneb bach main, corff bach main a golwg sur arni. +Ond yr oedd yn rhaid prysuro ymaith. +Tynnodd gyfres o gartwnau digri. +Ni fynnai Pero fynd ymaith. +Doedd hi ddim eisiau cael merch fach o gwbl. +Tu ôl i ni gwelais gysgod du pigfain ar y prysgwydd. +Daeth y lili yn wrthrych edmygedd y byd. +Rydyn ni'n gwisgo cennin neu gennin Pedr ar Ddydd Gŵyl Dewi. +Mwyaf blin fyddai Mary yn mynd, mwyaf y bydden nhw'n canu. +Heddwch y mynyddoedd, dyna feddyginiaeth meddwl pryderus. +Cawsom hamdden i edrych o'n cwmpas cyn i'r gwasanaeth ddechrau. +Iawn, dim probs, ddylai nhw i gyd fod yno rŵan. +Teulu crwydr oeddynt, ac nid oedd y plentyn yn mynd i'r ysgol. +Rwyt ti wedi defnyddio teitl diddorol i ddenu llygad y darllenydd +Yn aml, pan fydd angen mwy o ddŵr, caiff dŵr daear ei bwmpio. +Bydd yn rhaid i bawb yn y grŵp gymryd eu tro. +Dyma'r rhan ohonom sy'n chwilio am bleser +Dyna lle mae Cymru'n mwynhau'r meddiant. +Gofynnais a oedd ganddynt lyfr yn y tŷ. +Dim ond saith mlwydd oed oedd Delyth. +Cyn hir bydd dau ar yr ystyllen groes, mewn trol glonciog, ar ffordd Llanfyllin. +Pam nad wyt ti'n trwsio'r twll yna yn dy hosan? +Mae o'n lle mawr gwych mewn rhyw ffordd dywyll. +Ydi e mor wael â hynny? +Clywai synau rhyfedd a brawychus. +Dewiswch un lleoliad, gwlad neu ranbarth, gyda dwysedd poblogaeth isel +Mae'r ansawdd adeiladu yn broffesiynol ac yn daclus iawn +Aml y teithia enaid Cymro i fynyddoedd ei wlad. +Penderfynodd ddychwelyd i'r ysgol er mwyn gwella ei gyfleoedd mewn maes arall. +Roedd pobl yn gwisgo dillad rhyfeddol o dan y coed. +Roedd y Parch John Roberts, Llangwm, yn frawd hynaf iddo. +Does ganddyn nhw unman i fynd. +Cof gennyf fod arnaf ofn myned adref wrth feddwl am brofedigaeth fy mam. +Roedd cemegau ac offer electroneg ym mhlith ei brif allforion. +Ddaru o ffeindio cenau llwynog bach wedi hanner boddi yn ei ffau. +Er nad oeddwn yn llwgu rhagor, nid oeddwn yn medru gadael heb gael pwdin! +Gwelodd wal hir, gydag eiddew yn tyfu ar hyd-ddi. +Daeth o â'r llwynog bach adre y tu fewn i'w grys. +Gyrron nhw ymlaen ac ymlaen drwy'r tywyllwch. +Mae o'n syrthio mewn cariad â hi y tro cyntaf iddo ei gweld. +Roedd dynion bach glas rhyfedd yn y ffilm. +Bu Cymru'n fuddugol yn y ddwy. +Pwy fydd yn mynd gyda fi? +Yn ugain mlwydd oed dychwelodd i Lanwrtyd gan ddechrau mynychu Ysgol Sul yno. +Dyna lle'r oedd y goeden yr ochr arall i'r wal. +Ar hyn o bryd nid oes manylion pellach am gyflwr y teithwyr hyn. +Roedd y llygaid disglair yn perthyn i lygoden fach lwyd. +Mae o'n dweud na fydd hi byth yn cael gwared arno. +Mae gwiwerod llwyd yn cario llawer o afiechydon. +Mae hefyd restr gyda pharagraff am holl drefi a phentrefi Meirion. +Maen nhw wedi dymchwel y sgrym eto. +Roedd ar y pryd yn aelod o Blaid Gomiwnyddol Prydain Fawr. +Ysgrifennodd ei hunangofiant, ond ni chafodd ei gyhoeddi. +Toc gwelwn feudy megis pe'n edrych arnaf dros ochr rugog y ffordd. +Beth ydi'r lle 'ma? +Cynrychiolir ei waith yn rhyngwladol mewn nifer o gasgliadau cyhoeddus, corfforaethol a phreifat. +Mae'r gyfrol yn adrodd hanes Daniel Owen. +Rydwyf am ddefnyddio'r alcan ethan i'w gymharu gyda'r alcohol ethanol +Fasat ti'n methu cerdded pum milltir. +Pentrefan yng nghymuned Penmynydd, Ynys Môn, Cymru yw Ceint. +Mae'r etholaeth o fewn Dinas Glasgow. +Helo Emyr, sut hwyl? +Tisio cyfarfod yn y caffi? +Nawr, doedd dim ffordd o gyrraedd yr ynys, am fod y llanw i fewn. +A heb fod yn ddiofal am ddim oddieithr yr un peth angenrheidiol. +Mae lliw'r fenyw hefyd ychydig yn fwy gwelw. +Mae hi'n colli ei thymer ac yn rhedeg i ffwrdd. +Mae hi'n disgwyl babi. +Roedd Gwylliaid Llwyni Awstralia yn lladron oedd yn byw ar dir prysglwyn. +Astudiaeth ysgolheigaidd yn ymdrin â phob agwedd ar ddiwinyddiaeth yr Hen Destament. +Symudodd y fyddin Gymreig i ogledd Efrog. +Ewch i'r efail, a gadewch i'r efail wneud pedolau i chi. +Eglwys Newydd yw'r lle i fod. +Hedfana'r gwryw rhwng Mawrth ac Ebrill. +Prif fwyd y lindys ydy coed pîn, cedrwydden a llarwydden. +Ddois i ag anrheg i ti. +Mae 'na frain yn y goedan fawr. +Mae Mali Huws yn caru anifeiliaid. +Mae 'na bentwr o fagasîns ar y bwrdd. +Mae'n gydawdur y gyfrol Eleni Mewn Englynion. +Ffilmiodd, am y tro cyntaf erioed, luniau o wyneb comed. +Ti 'di bod yn Paris erioed? +Llu o bwyntiau trafod yn fama. +Dyma'r bedwaredd gyfrol yng nghyfres Y Derwyddon. +Chwaraeodd rhan flaenllaw yn natblygiad rheilffyrdd De Cymru, Dyffryn Nedd, Llanelli a Llanidloes. +Mwy o ddyddiadur Delyth Haf, a dilyniant i Tydi bywyd yn boen! +Teithia o amgylch y byd ar noswyl Nadolig yn dosbarthu anrhegion i bobl. +Mewn geometreg sylfaenol, defnyddir y gair cyfath fel a ganlyn. +Gwnewch bentwr gyda'r blawd ar eich bwrdd, gan wneud pant yn y canol. +Maen nhw'n peintio y bwrdd yn yr ardd. +Mae hi hefyd wedi ysgrifennu llyfrau i blant, a derbyniodd rai gwobrau rhyngwladol. +Mi gafodd hi andros o fil ar ôl ar bod at y deintydd. +Ganwyd Gwilym Prys Davies yn Llanegryn, Meirionnydd. +Roedd ei mam yn feddyg. +Ceir etholaeth Senedd yr Alban o'r un enw. +Derbyniodd Wobr Cylch Beirniaid y Llyfr Cenedlaethol am Fywgraffiadau. +Mi oedd o'n bencampwr ers talwm. +Wi'n lico'r gân yna. +Profer y byddai mwy o naturioldeb ar eu hysgogiadau. +Penderfynodd ddod yn weithiwr cymdeithasol. +O'dd y blode yn felyn ac yn las. +Ceir carreg o'r enw Carreg Rhian ar bwys y pentref. +Blaswch a phrofwch, ac mae'n debyg y dewch yn ôl am fwy. +Gellir ystyried lluosi rhifau cyfan yn fath o adio ailadroddus. +Mae'r llyfr cyffwrdd a theimlo hwn yn llyfr rhyngweithiol. +Mae'r solidau gwastraff yn teithio drwy'r coluddion mawr. +Mae 'na jac y do yn eistedd ar ben y simne. +Mae coes y gadair 'di torri. +Peidiant â chyfrannu arian tuag at godi a chynnal yr eglwysi. +Darluniwyd Non a Dewi hefyd mewn ffenestr liw cywrain. +Doedd neb wedi gweld nac wedi clywed unrhyw beth. +Bu'n aelod o Gymdeithas Y Naw am rai blynyddoedd. +Cyhoeddodd nifer o nofelau, straeon byrion, traethodau, ac un llyfr ffeithiol. +O'r diwedd daw cyfle i ddial. +Mae hi am goginio bwyd sbesial i swper. +Diolch am yr awgrymiadau, a'r rîtwîtiau. +Mae arwynebau gwrthwynebol yn gyfath. +Fel un sy'n pryderu am fusnesau bach, dw i'n edrych ymlaen. +Mae'n ddydd Nadolig ac mae Berwyn wrth ei fodd! +Mae'r pen-glin yn gymal cyfansawdd cymhleth iawn. +Hwn yw ei gyfweliad cyntaf fel arweinydd. +Roedd ei thad yn beiriannydd ar reilffyrdd yr Almaen. +Pob nerth i bob busnes preifat. +Roedd hefyd yn Arglwydd Lywydd Cyngor Cymru a'r Gororau. +Ceir sawl cenhedlaeth pob blwyddyn. +Wedi i mi gyrraedd yr Amwythig, roedd bws wedi'i drefnu. +Cyhoeddwyd nifer o'r cerddi eisoes mewn amryw gylchgronau. +Yr hyn sy'n gyffredin rhwng y ddau ystyr, yw'r syniad o ochr. +Dyma beth arall hefyd gall y cystadleuydd ei haeru heb ofni cael ei wrthddywedyd. +Parhewch yn yr un modd gyda'r ail hanner. +Cyfrol sy'n adrodd atgofion Griff, y cyn ditectif o Benygroes, Sir Gaernarfon. +Fe aeth y cyfarfod yn ei flaen. +Yr Awdurdod Refeniw Cymreig fydd yn gyfrifol am gasglu'r arian. +Yr oedd Chamberlain yn Rhyddfrydol hyd at fod yn eithafol. +Addas ar gyfer disgyblion uwchradd ac oedolion sy'n dysgu Cymraeg. +Cofiwch ddefnyddio'r hashnod. +Mae llawer o'r darnau a strwythurau cysylltiol yn goesau sydd wedi eu haddasu. +Oddach chdi'n 'i nabod o cynt? +Dŵr am ddim i ti ac i'r ci! +Mae ei garreg fedd yn adeilad rhestredig. +Byrhoedlog fu'r sefyllfa hynny. +I'r de o'r bryncyn mae pentref Rhuallt. +Hedfanodd y robin o'i gangen frau o eiddew ar dop y wal. +Rhan o gyfres o lyfrau i blant. +Sut oedd hi'n gallu amddiffyn creaduriaid rhag gelynion cas? +Croeso i chi ychwanegu gwybodaeth a ffotos. +Stori i blant am ddyn eira. +Yn hytrach, gweithiai gyda'i mam yn swyddfa cofrestru genedigaethau, priodasau a marwolaethau Manceinion. +Credir eu bod yn dyddio yn ôl i Oes Newydd y Cerrig. +Dw i ddim yn ei ddefnyddio mewn llythyr, traethawd neu ddogfen ffurfiol. +Canolbwynt y gymuned ydy pentref bychan Llanfechell. +Mi wneith hefyd hydoddi mewn asid gwan. +Mae ganddyn nhw'r arian. +Dyna fi pan mae rhywun yn trio esbonio sut i ddefnyddio Excel. +Dyma'r swyddogaethau meddyliol uwch. +Tyd 'laen wnei di, 'dan ni'n hwyr. +Rwy wedi gwglo ychydig am y pwnc. +Mae'n bosib troi pethau mlaen a ffwrdd gyda'r symudiad. +'Sgwn i beth yw effaith y lockdown ar fyd natur? +Mae'n nodedig am y gyfrol Nansi Dolwar. +Llyfryddiaeth ysgolheigaidd yn ymwneud â'r iaith Gymraeg o'r cyfnod cynnar ymlaen. +Yn anffodus, archwiliodd am fwy o olew a chollodd ei arian. +Mae Blaidd yn teimlo'n ddig ac mae wedi cymryd ato'n arw. +Rhaid i ni groesi'r afon er mwyn cario 'mlaen ar y llwybr. +Ni welir hi nes dod i'w hymyl, oherwydd mewn pantle y mae. +Yn ôl undeb y gweithwyr, nid ydynt wedi cael eu talu ers dau fis. +Codais fy mhen wrth i'r dagrau ddawnsio i lawr fy wyneb. +Yn y man dechreuodd y dynion ddyfod o'r pwll bob yn llwyth. +Gyda'r gair daeth gwraig ieuanc i'r drws. +Y peth mwyaf anghysurus i'r gweision fyddai cynnau tân yn yr ysgoldy. +Popeth yn iawn, gawn ni sgwrs ar ôl cinio. +Mae'n fwy nag ailgylchu dodrefn a siopau elusen +Ar ôl hynny byddaf yn cyflwyno'r syniad o roi newid o bunt +Mi obeithia i y ca i eto fy nghadw rhag mynd ar y plwy. +Fel menter gymdeithasol, ein nod yw bod yn hunangynhaliol yn ariannol +Maen nhw wedi helpu nifer o siopau lleol a busnesau bach +Nodir hefyd bod cysylltiadau cryf rhwng sgiliau meddwl a dysgu'n seiliedig ar ymholi +Sŵn i fyny +Hyn yw'r diogelwch cyfreithiol uchaf sydd ar gael i adar +Ddylech chi fyth rannu dyddiad geni rhywun heb ei ganiatâd +Cofnodwyd rhai o'r datblygiadau hwyrach yma o fewn y casgliad +Oedd gennych chi amser i gywiro'r testun? +I ba raddau gellir dadlau bod y swydd yn fwy arwyddocaol na hynny +Byddaf yn gofyn am yr atebion ar ôl iddynt orffen. +Rwyf hefyd wedi mwynhau treulio amser gyda phobl mor frwdfrydig ac ysbrydoledig +Mae cadw gwybodaeth bersonol y cyfranogwyr yn gyfrinachol yn holl bwysig +Beth am gymharu màs bwyd arferol â bwyd y gofod? +Rwyf wedi atodi ein costau diwygiedig yn dilyn y newidiadau +Rhyddhaodd Llywodraeth Cymru strategaeth i gynyddu nifer y siaradwyr Cymraeg i filiwn. +Mae'r atgofion afiach yn aros fel gwaddod ar waelod gwydr peint +Roedd hi'n fardd da iawn. +Gwelir patrymau pendant o ran cyflenwad a chymeriant bwyd y byd +Mae nifer o ddulliau neu dechnegau y gall ymarferwyr eu defnyddio yn ddyddiol +Mae'n rhoi ymdriniaeth o le a chynefin fel elfen arwyddocaol, ddylanwadol +Digwyddodd y fyrgleriaeth rhwng dau a phedwar fore Sadwrn. +Mae gweinyddwr cronfa ddata yn cynllunio a chynhyrchu system cyfrifiadur +Fe welwch chi goeden fach hyfryd yn tyfu yng nghanol y llannerch yna. +Pob lwc i'n cadeirydd ar ei noson agoriadol +Rwyt wedi dangos dilyniant clir yn y broses dylunio +Llawn o ddyfroedd oedd Llanymddyfri pan welais i'r lle gyntaf. +Mae bechgyn yn ymateb yn bositif i sialens +Adwaenir Shakespeare fel The bard of Avon. +Rhaid aros am dawelwch, bod yn bwyllog a chymryd amser +Mae hyn yn pwysleisio eto bod bwlch rhwng theori ac ymarfer. +Rwyt ti wedi astudio llawer o drychinebau naturiol sy'n digwydd ledled y byd +Ni chafwyd anafiadau nac unrhyw effeithiau hirdymor arwyddocaol +Hoffwn weithio fel cyfrifydd yn y cyfryngau +Byddaf yn paratoi taflen barod ar eu cyfer yn esbonio natur y prosiect +Gelwid Margaret Thatcher weithiau yn Ddynes Ddur. +Diolch am ateb mor gloi, yn enwedig a chithau ar eich gwyliau +Byddai gan Ap Vychan got laes a dwy boced fawr y tu mewn iddi. +Beth ydi cyfanswm y tatws sydd eu hangen? +Mae rygbi yn fwy cyffrous, gyda gemau rhyngwladol ffyrnig +Mae'r Times, y Guardian, a'r Daily Telegraph yn bapurau newydd o Brydain. +Wyt ti'n gallu dal y drws ar agor am eiliad? +Wedyn, fydd yr hysbyseb yn barod i gael ei chyhoeddi +Datblygodd gwleidyddiaeth llawer yn ystod y chwyldro hefyd +Mari ydw i ac rydw i'n bedair oed +Rwy'n edrych ymlaen at gyfarfod â Dave. +Gall dy fanc lleol hefyd roi cyngor am ddim i ti. +Cyfeiriwch at ffocws llythrennedd yn eich amcanion dysgu os yn bosibl +Gadewch i ni ddynesu ato. +Mae'n caniatáu i chi anfon e-byst marchnata ac ymgyrchoedd wedi'u targedu +Gobeithio eich bod chi a'r plant wedi mwynhau'r ymweliad +Gall hyn ddarwagio'r cyflenwad yn barhaol. +Sipsiwn diwylliedig oedd teulu Abram Wood. +Os oes gennych chi ddiddordeb, cliciwch yma am fwy o wybodaeth +Y mae'n defnyddio'r trosiad i ddisgrifio'r hydref +Mae hyn oherwydd iddi fynychu ymarferion pêl-rwyd yn rheolaidd +Nodwyd na ddylid trin y Gymraeg yn llai ffafriol na'r Saesneg. +Awgrymaf yn gryf ei bod yn ystyried cwblhau tasg arall +Mae'r amserlen hon yn dy siwtio di +Diolch am y cyfle i fynegi fy safbwynt +Helpwch ni i leihau tomenni gwastraff drwy ailgylchu +Rwyf yn deall bod arholiad gyda chi wythnos nesaf +Rheolwr pêl-droed proffesiynol yw Lee Johnson. +Wedi'r clefyd, bu'r tad a'r fam yn ddedwydd lawer awr. +Cwis bach ar ddiwedd y cyfnod er mwyn sicrhau dealltwriaeth y disgyblion. +Mae rhaid cwestiynu effeithiolrwydd y dulliau cymorth a roddwyd yn eu lle +Canwr a chyfansoddwr o Loegr yw Nik Kershaw. +Roedd Ballet Rambert yn gwmni dawns mentrus iawn. +Gwahoddwyd y cadeirydd i ginio gan y Cyngor Sir +Mae yna botensial i fusnesau bach gychwyn ond dim mwy na hynny +Mae'n mynegi barn ar storïau, cerddi a deunydd ffeithiol +Roeddwn i wedi oedi ychydig rhag ofn y byddai modd cynnig rhywbeth mwy sylweddol. +Enwau poblogaidd oedd Claire, Angela a Charlotte. +Erbyn diwedd yr arholiad, yr oedd batri fy ffôn wedi diflannu +Eu hymateb oedd galw ar y stadau cyffredinol +Cwblhawyd deuddeg o holiaduron cleifion cyn dyddiad yr arolygiad +Roedd e'n rhy feirniadol o'r cynnyrch terfynol +Arosasant gyda ni am oriau lawer. +Roeddent felly yn rheoli cynnwys y rhaglenni radio +Dyma rai esiamplau o sut fedra i gefnogi rhieni +Byddai prifysgol yn fwy addas na phrentisiaeth yn yr achos yma +Felly trigolion bro fy mebyd a ddylanwadodd arnaf, nid yr athrawon +Defnyddir iaith gyfoes, ffeithiol, gan ddyfynnu arbenigwyr adnabyddus +Rydw i'n caru yn fawr iawn chwaraeon a gweithgareddau corfforol yn gyffredinol +Enw arall ar yr Almaen dan y Natsïaid oedd y Drydedd Reich. +Gofynnir ichi beidio â cheisio addasu'r ffurflen mewn unrhyw fodd +Mae copi wedi'i anfon i'ch adrannau hefyd +Ond pan gyrhaeddon ni'r car roedd e'n drewi o alcohol +Yng nghanol y goedwig cefais bleser o wrando ar yr eos +Mae hi'n creu ffordd o ehangu busnesau ardraws y byd +Y gân Saesneg gyntaf i mi ei dysgu oedd London Bridge is falling down. +Rydw i'n cofnodi'r disgybl yn y dosbarth ac yn unig +A throstynt oll gwelem y mynydd yn dawel a thlws. +Yr oedd y dydd yn mynd, a'n ffordd eto'n hir. +Mae'r saethiad yn parhau, cyn torri allan. +Beth yw'r technegau mwyaf addawol i hybu'r diwylliant hwn? +Defnyddir thema bywyd gwyllt yn y gyfres o sesiynau. +Mae Tesco, Waitrose, Sainsburys, Asda, Morrisons, Aldi a Lidl yn archfarchnadoedd mawr. +Llwyddodd i sylweddoli bod modd cyfri unrhyw beth +Dyma nhw'n chwarae gemau i helpu datblygu geirfa yn y stori +Nid dim ond barn yr arbenigwyr sy'n cyfri +Bydd eich bywyd yn ddiflas heb cael pethau crefyddol i'w gwneud pob dydd. +Mae'n bwysig cysidro holl opsiynau costau rhedeg, nid yn unig cost prynu +Bydd nyrs ysgol yn mynd i'w thŷ, fel bo angen hefyd +Roedd yr orsaf drenau yn agos i'r gwesty. +Hollywood yw canolfan diwydiant ffilmiau America. +Ond, teimlaf fod hygrededd a defnyddioldeb y ffynhonnell yn gorbwyso'r anfantais yma +Mae yna lawer o gyfleoedd gwirfoddoli amrywiol ar gael +A allwch dorri a gludo'r anifeiliaid yma ar y grid? +Disgwylir i Corbyn annerch y protestwyr yn Llundain. +Edrychai fy mam yn isel o ysbryd a digalon. +Teimlais golli ei ymddangosiad gwrol, ei lais soniarus a'i ffraethineb dihysbydd. +Mae Washington yn enw dinas a thalaith yn America. +Bwriadaf gasglu amrywiaeth o ddata gan gynnwys data safonol a meintiol +Fe fyddaf yn trafod hyn ymhellach yn yr aseiniad +Anadlai gwynt braf o'r Wyddfa arnom wrth i ni deithio ymlaen. +Bydd dyddiadur yn cael ei gyflwyno i'r dysgwyr +Trefnwch y papurau yn ôl y marc uchaf i'r marc isaf +Mae hefyd wedi cael y profiad o ddarllen thermomedr y dosbarth yn ddyddiol +Ynot ti y gorwedd Dewi Sant a Gerald Gymro a William Morris. +Dyna'r union gwestiwn sy'n cael ei ofyn yn y Cynulliad +Mae angen newid y bit ar flaen y dril. +Dyma rai o'r cwestiynau y dylem eu hateb er mwyn datrys y broblem. +Siaradwch am y gair parch a beth mae hyn yn ei olygu +Mae hi hefyd wedi helpu yn y clwb pêl-rwyd ar ôl ysgol +Chdi ydi honna o dan y fan yna +Dyma ddôl wastad eto, a choed o boptu iddi, lle hyfryd ddigon. +Gweithgaredd dynol sy'n achosi'r dirywiad hwn. +Roedd holl olau'r lloer a'r sêr wedi'i gronni'n dân gwenfflam. +Yr adnodd olaf wnes i ddefnyddio oedd yr holiadur +Mae sŵn dychrynllyd gan y motobeics yn sgrialu heibio. +Rhagor o gyfenwau poblogaidd yng Nghymru yw Rees, Price a Richards. +Mae eisiau archwilio ym mhellach er mwyn creu darlun cyflawn +Tynnwch lun o stribed cartŵn am brif ddigwyddiadau'r stori +Symudais ei law yn araf, a chyfodais ar fy nhraed yn grynedig. +Ganed Shirley Bassey yn Tiger Bay, Caerdydd. +Teimlaf fod y profiad yma o fudd i mi ar gyfer y dyfodol +Cyflwynir gwaith yn y dosbarth sy'n cyd-fynd â'i darged +Ffurf ar ap Richard yw'r cyfenw Pritchard. +Mae angen datblygu eich gwerthusiad, a cheisio peidio disgrifio yn unig +Ni chlywir sŵn y plant sydd yn yr ysgol lwyd gerllaw. +Diffiniwyd sawl math o anabledd yn ystod y blynyddoedd diweddar +Anaml, yn sicr, y bydd neb yn torri ar unigedd y fan. +Gellir dosbarthu proteinau yn ôl eu hadeiledd +Hefyd byddaf angen mynediad at drydan er mwyn defnyddio'r sganiwr +Mae'r cysyniad o dalent yn un pwysig yn ein cymdeithas heddiw. +Drafft ydy hwn wrth gwrs i'w drafod, nid y fersiwn terfynol +Rwy'n falch iawn clywed bod 'na ddysgwyr brwd newydd +Cafodd yr albwm adolygiadau da ond ni werthodd lawer o gopïau. +Cafodd amrywiaeth o gyfleoedd i gyflawni pob math o waith celf +Gwrandawais ar dâp myfyrdod gan neud ymarferion anadlu +Meddyliwch am bwy rydych chi'n sôn a pham +Ni wyddai i ble roedd hi'n mynd. +Fydda i lawr mewn munud i ni gael trafod y lluniau. +Mae'n annhebyg fod y celloedd yn gwbl ar gau +Gad fi wybod os ydi'r dyddiadau yna yn gyfleus gyda chdi +Felly dewch i gefnogi'r digwyddiad a rhannwch y neges +Hefyd mae camerâu yn gallu bod mewn ffonau symudol a thabledi +Gwaith cartref eich plentyn yw cwblhau cwestiynau yn ymwneud ag arian +Fe wnes i ddysgu pwysigrwydd cyfathrebu gan ystyried teimladau ac emosiynau'r cleifion +Roedd stad Wynnstay yn un o stadau mwyaf gogledd Cymru. +Mae coginio gan ddefnyddio gwahanol gynhwysion a ryseitiau yn boblogaidd gan bobl gyffredin +Mae nifer o ddatblygiadau gwyddonol a thechnolegol wedi cael effaith ar berfformwyr +I baratoi, torrwch yr orenau yn eu hanner +Mae athletwyr yn eu camddefnyddio i dawelu eu nerfau cyn rhyw achlysur mawr +Roeddet ti wedi blino'n lân erbyn diwedd yr arolwg. +Bydd gwobrau ariannol ar gyfer y ddau bapur gorau a'r poster gorau +Yma, mae'r wladwriaeth yn ceisio annog neu orfodi aelodau cymdeithas gyfan i integreiddio. +Bydd angen i chi fod yn gyfathrebwr hyderus a medrus +Fe dderbyniais gyngor ar gyfer fy nghyfansoddiad oddi wrth fy athrawes cerddoriaeth +Ofnaf mai gwastraff llwyr o arian fydd hyn eto. +Cawn ddefnyddio sawl adnodd neu ychwanegu rhai ein hun +Mae hyn yn fwlch enfawr ac yn ystadegau syfrdanol yn fy marn i +Mae hefyd wedi dechrau egluro patrymau yn y canlyniadau +Byddaf yn mynychu'r cyfarfodydd perthnasol yn ôl yr angen +Rhed llwybr hir rhwng mangoed at ddrws yr eglwys. +Dwi wedi creu amserlen ffilmio ddrafft am y tri lleoliad +Tasg nesaf y ferch yw gorffen ei gwaith dosbarth +Ceid digon o danwydd o fawnog oedd yn y mynydd uwchlaw'r tŷ +Llenwch waelod y botel blastig fawr gyda thywod. +Anaml y bu neb mor hoff o gartref ag Ap Vychan. +Ffoniai eto er mwyn trafod yr adroddiad a cheisio eu perswadio +Mae hwn yn lle perffaith i werthu'r ffilm i gynulleidfa newydd +Rydw i bob tro yn anelu yn uchel ac eisiau'r canlyniad gorau +Wel, mae'n gyfnod cyffrous ar hyn o bryd +Dyma'r broses lle caiff egni ei ryddhau yn y celloedd +Nid yw'r corff wedi cael ei enwi yn ffurfiol. +Er hyn, nid dyma oedd prif fwriad yr ymyrraeth +Ond mae'n rhaid iddo hefyd wneud rhaglenni sy'n cyrraedd cymdeithas fawr. +Wnaeth hi a'i phartner anghytuno gyda sawl parot oedd yn y llun +Mae Deio yn gweithio ar ei liwt ei hun. +Yr oedd ffair mewn cae a oedd yn fendigedig i bawb +Defnyddiwch gwpan sy'n newid lliw wrth i ddŵr poeth gael ei ychwanegu. +Angharad, pa bryd fydd hi'n gyfleus i drafod hyn +Dyma'r cyfnod hapusaf ym mherthynas y ddau ers geni eu plant +Dydi Jean ddim yn hoffi llygod bach. +Rhaid cyflwyno asesiad risg cyn mynd ati i wneud arbrawf +Bydd ugain eiliad i bob person yn y grŵp +Ar y cyfan rwy'n credu bod ein syniadau yn arloesol ac yn greadigol +Seiat ydi lot o bobl dda yn meddwl eu bod nhw yn ddrwg. +Yn y byd amlddiwylliannol hwn roedd cyfnewid diwylliannol yn anorfod +Roedd y syniad yma ar ddiwedd cerdd yn un o gonfensiynau canu'r cyfnod. +Bydd rhaid cymryd hyn i ystyriaeth wrth feddwl am ddulliau casglu data +Un o'm hoff awduron i yw Jane Austen. +Bydd y gwregys yn mynd o gwmpas y wast. +Mae'r cwricwlwm cenedlaethol yn rhoi esiamplau o hafaliadau +Dewiswch eiriau yr ydych yn gyfarwydd â nhw +Os oes genych unrhyw gwestiwn neu broblem, cysylltwch â'r ysgol. +Y cyfrwng a ddefnyddiodd i greu'r ddelwedd oedd acrylig ar gynfas +Mae hwn yn enghraifft o aseiniad o safon dda iawn +Y mae tas o hen wair yn y gadlas yn ymyl, a llwybr glaswelltog. +Dacw fynydd yn codi o'n blaenau; daeth awydd canu drosom. +Mi wna i faddau i chdi, wir yr +Hoffai Gwen rodio ar ei phen ei hun yn y goedwig. +Bydda i'n trio defnyddio bagiau papur yn lle bagiau plastig erbyn hyn. +Mae gwirydd sillafu Microsoft i gael yn Gymraeg. +Nid oes ganddynt gyswllt hawdd â chyflenwad thrydan, y we, ac angenrheidiau eraill. +Collais fy helm ofod, esgidiau gofod, fy nhedi a fy mhêl +Nid yw anghymeradwyaeth yn golygu bod diffyg cariad. +Dylid sicrhau eu bod yn cyfeirio at y dasg wrth drafod eu dewisiadau +Rwy'n gyfforddus iawn wrth weithio gydag unrhyw oedran yn yr ysgol gynradd. +Toc gadawodd yr afonig a minne gwmni ein gilydd +Mae'r adnodd yma yn cynnwys y brif eirfa ar gyfer y thema +Teimlaf fod yna fanteision ac anfanteision o wneud hyn +Diolch anferthol i bob aelod o'r côr am eu cyfraniad neithiwr +Mae'n mynd i fod yn gystadleuaeth frwd rhwng y ddau +Aethon ni am baned i Starbucks tra oedden ni yn y dre. +Pa sgiliau ydych chi wedi ennill yn ystod y cwrs? +Cafodd pedwar disgybl ddau ddarn o waith cartref +Mae'r Daily Mail yn bapur poblogaidd iawn. +Diolch yn fawr am yrru'r dogfennau hyn ymlaen atom. +Does dim cost, ac mae'n hawdd ymuno +Mae hyn yn sicr yn golygu manteision economaidd +Cysylltwch ar bob cyfri ynghylch unrhyw agwedd ar yr achlysur +Roedd y cig yn llawn sudd a blas felly'n werth ei ganmol. +Os hoffech gael y manylion pan fyddant yn barod, cysylltwch â mi +Mae Kevin Costner yn actor, cerddor, cynhyrchydd a chyfarwyddwr ffilmiau o America. +Nid oedd ynof yr awydd lleiaf i fyned i'r gwaith. +Gwelwn yr eglwys yn diflannu o'm golwg yn y pellter ac yn y glaw. +Dim ond Carl, Matt, Jo a Scott oedd ar ôl erbyn diwedd y noson. +Parodd eu hymweliad ollyngdod mawr i mi. +Mae hyn yn dangos sut i ddatguddio colofn yn y ddogfen. +I leihau unrhyw ansicrwydd, penderfynais y byddai cwestiwn enghreifftiol yn fuddiol +Diolch am eich e-bost yn esbonio'r trefniadau +Ydw i wedi ateb fy nghwestiwn neu esbonio'r teitl +Defnyddiwch y penawdau o'ch tabl canlyniadau fel labeli i'r graff +Yr oedd yn disgwyl ei fab adre o Loegr. +Sut fyddech chi'n disgrifio eich hunan o ran eich corff? +Es i â'r dillad i gyd i'r siop ail law. +Mae'r gweilch wedi cyrraedd nôl i Gymru yn gynnar eleni. +Mae'n dal i hercian ar y cae. +Doedd dim digon o eira i sgïo. +Yr oedd seindorf filwrol yn chware alawon pruddglwyfus. +Brysiwch, mae'ch swper chi'n oeri. +Cafodd y biniau i gyd eu chwythu drosodd. +Hoffwn i fynd i'r Eidal am ein gwyliau eleni. +Roedd y drymiau yn amlwg iawn yn y gân. +Cawsom gyfle i sylwi ar wisg y Llydawesau. +Hoffais i'r dawnsio yn fawr iawn. +Gadawodd y plant ddarnau Lego dros y llawr ym mhob man. +Doedd dim llawer o bobl yn y ddarlith. +Does dim angen i ti sibrwd chwaith. +Mae'r ras wedi'i gohirio am fis. +Fydd dim awyrennau yn hedfan fory. +Wyt ti'n meddwl fod y fodrwy yna yn rhy ddrud i ni? +Gymra i goffi os oes gen ti goffi iawn. +Daeth y llun yn enwog yn Ulster. +Dyw hi ddim wedi dod nôl o'r siop eto. +Rwy wedi rhoi'r gorau i gymryd llaeth yn fy nghoffi. +Roedd yr ieir yn pigo hadau ar fuarth y fferm. +Paid siarad mor uchel. +Bydd y siop yn cau mewn hanner awr. +Mae'n pabell ni'n gollwng dŵr. +Fe geision nhw olchi'r adar oedd wedi cael eu dal yn yr olew. +Fe wnaethon nhw ailargraffu Llyfr Mawr y Plant. +Syrthiodd y teledu oddi ar y wal. +Mae yna ddau brif fath o deulu estynedig +Oes yna ffilm newydd yn y sinema? +Ydych chi eisiau tyfu eich busnes gan harneisio holl botensial eich tîm? +Dewch â llond bag o sglodion i mi. +Gellir gweld cynnwys pob tŷ wrth fynd heibio. +Cofiwch fod croeso i chi yma unrhyw bryd. +Doeddwn i ddim yn hoffi'r gân gyntaf. +Fydda i byth yn gwylio'r teledu bellach. +Gwelem y merched a'u crymanau'n dod o'r caeau gwenith. +Pryd mae Dechrau Canu Dechrau Canmol? +Roedd yn rhaid i Gymru fod yn berffaith yn amddiffynnol. +Defnyddion nhw lawer o offer gwyddonol modern yn eu gwaith. +Ers talwm doedd gan bobl ddim gwres canolog yn eu tai. +Cafodd hi frwsh dannedd trydan newydd. +Dim ond brocoli a jeli coch oedd e'n bwyta. +Mae'r esgidiau yma'n rhy fach i mi. +Mae torf Twickenham yn syn, maen nhw'n gegrwth. +Ddo i gyda ti os nad wyt ti eisiau mynd dy hun. +Bydda i'n gwneud teisen sbwng i de. +Mae angen iddo ofalu nad yw'n cael ei ynysu. +Roeddwn i'n hoff iawn o'r rhaglenni Steptoe and son. +Bydd hi'n benllanw am wyth bore fory. +Mae wedi mynd yn ddistaw iawn yn ddiweddar. +Yr oedd y clychau yn canu cnul, a llawenydd priodas yno. +Synnem at uchder y tai, pob un yn bedwar neu bum uchder llofft. +Ar ddau achlysur mae wedi mynd ar goll eleni +Yn fy mhrosiect bydd ymchwil eilaidd yn cael ei defnyddio +Arlunydd o Borthmadog yw Rob Piercy. +Troesom ar y dde i lawr hyd stryd gul uchel. +Diolch byth ein bod ni i gyd wedi cyrraedd adre'n ddiogel. +Roedd y llinellau daearol yn brysur iawn. +Aeth y ffarmwr heibio ar gefn ei dractor coch. +Hoffwn i gael blodfresych gyda saws caws. +Mae'r wybodaeth sy'n dilyn y prifair yn dibynnu ar natur y geiriadur. +Pryd wyt ti'n mynd i osod y gawod newydd? +Daethom i'r côr, dan oleuni lliwiau hen wydr. +Byddai cyfarwyddwr neu reolwr swyddfa yn mynd i'r afael â'r materion hyn +Roedd Stan a Steve yn ddau aderyn digon brith. +Mae Paul yn darlledu o'r tu allan i'r Senedd. +Hwy'n unig sy'n aros o feddiannau Ffrengig brenhinoedd Normanaidd Lloegr. +Mae yna erwau iddo roi'r gic i fewn iddo fe. +Gas gen i goffi powdr. +Wnes i ddim mwynhau'r ddrama rhyw lawer. +Dydi'r dôn yna ddim yn gyfarwydd i fi. +Dychmygwn fod y lloer yn edrych yn ddyfal arnaf. +Rhedodd yn ôl ac ymlaen ar y lan gan chwilio am le i groesi. +Mae Cymru'n dal o fewn trosgais i ennill. +Dyw e ddim yn hoffi i neb ei feirniadu. +Ail ddechreuodd y tonnau luchio'r llong. +Egyr y llyfr trwy gyflwyno chwarae fel modd o ddysgu. +Y mae'n hawdd gweld fod llawer storm wedi bod yn curo arni. +Toc, daeth rhywun i mewn, a gorchymynnodd oleuo cannwyll mewn tôn awdurdodol. +Meddyliwn wrth gysgu'r noson honno fy mod wedi cael Sul hir a llawn. +Daeth y llanw i mewn yn gyflym iawn. +Mae gwin da ar werth yn Lidl. +Gwyddant ym mha farchnad i werthu eu cynnyrch. +Yr oedd hen wraig yn malu siwgr yn brysur. +Gwelsom dŷ teiliwr, a deg neu ddeuddeg o feibion a merched yn gweithio ynddo. +Deffro'r meddwl ddylai addoliad iawn wneud. +Roedd y blodau yn dechrau gwywo. +Bu yno am flynyddoedd heb i neb syllu ar ei thlysni. +Clywn ru'r dyfroedd wrth i'r llong ymdreiglo fel peth meddw drwyddynt. +Dengys ei allu ar faes y gad ei fod yn arweinydd da +Pan ddistawodd y delyn, aethom allan i grwydro drwy'r ystrydoedd. +Felly mae llwyddiant y clwb yn hollol bwysig +Bydd y cwch i Ddulyn yn cyrraedd cyn bo hir. +Os gall hyn aros tan fory Gwener gall Gwen wneud bryd hynny. +Hoffwn i ddod i'ch gweld chi ar ôl gwaith. +Os gwell gennyt ti, yr Undebwr, yw annibyniaeth, cymer dy annibyniaeth. +Sut beth oedd yr awyrgylch gefn llwyfan? +Chwiliem am westy cysurus, lle mae popeth dan lygad y pen-teulu. +Gobeithio i chi dderbyn fy neges ffôn yn gynharach +Rhwng y colofnau yr oedd darluniau mawrion o olygfa ddwyreiniol. +Daeth awel ysgafn i suo trwy'r coed oddi tanom. +Dywedodd fod ganddo'r ddau geffyl gorau yn Llydaw. +Aeth yn nos dywyll arnaf a chollais bob ymwybyddiaeth. +Byddaf yn codi'n fore ac yn gweithio'n galed bob dydd. +Felly fe wnes gyflwyno'r biliau ffôn iddo +Ni wyddent fawr am Lydaw, ond edmygent y dodrefn Llydewig yn fawr. +Mae rhan o'r casgliad yma yn yr amgueddfa +Yr oedd wedi cael tri mis o wyliau i fendio. +Dacw feddrod a chadair garreg sy'n perthyn i'r cyfnod hwnnw. +Diolch am yrru newyddion diweddaraf amdan y tywydd yn eich ardal chi +Eisteddasom ym mhen blaen y llong wrth iddi forio i fyny'r afon. +Yr oedd y llong ar gychwyn, a'u celfi hwythau heb ddod. +Gwelsom lawer o longau Prydeinig wedi dod yno i gael llwyth o datws. +Byddwn i hefyd yn coginio gyda'r cogydd ac yn paratoi pwdinau +Atodaf restr o'r eitemau sydd ar yswiriant yr ysgol +Gwelsom fod mur uchel cadarn yn amgylchu'r ddinas. +Teimlaf lawer mwy cyfforddus gyda safon yr adolygiad llyfr yr wythnos hon +Clywais wrth rywun arall fod yn rhaid gwahanu'r pâr priod. +Nid yw y môr yn brydferthach yn unlle. +Rhaid creu tabl er mwyn cofnodi pa dai bwyta sydd ar y brif stryd +Gwyddem am ŵr yfodd drochion sebon unwaith mewn camgymeriad am laeth enwyn. +Pam oeda chdi isio cymryd rhan yn y gyfres +Nid oedd gwely yn ein hystafell, dim ond blancedi ar y llawr! +Byddai hyn yn annog gweithgaredd corfforol dyddiol rheolaidd i'r plentyn +Yr oedd golwg brydferth ddigymar ar yr ochrau coediog oddi tanom. +A fedrwch chi atgyfnerthu'r neges yma hefyd os gwelwch yn dda? +Cofnodwyd teimladau cadarnhaol a negyddol am ddyfodol yr ardal +Felly, mae hyn yn gysylltiedig â'r model meddygol o anabledd +Cymru heb ei Diwygiad ydyw Llydaw. +Yr oedd mantell y simdde'n ddigon mawr i gysgodi dwsin o bobl. +A oes modd i chi danfon ffurflen gais ac unrhyw fanylion pellach ataf. +Ni thelir rhent na threth ar y môr. +Oherwydd dyna beth mae papurau newydd yn gwneud hefyd +Yr oedd rhywun beunydd yn cynnig i ni bapur newydd. +Gŵr bychan a wyneb hir oedd hwn. +Nid oedd y gyrrwr yn un siaradus. +Rydw i wedi cynnwys y dyddiad ar frig y dudalen. +Clywon ni'r bomiau yn mynd bant wrth ein hochr ni +Y mae'r awyr yn drom ac yn llethol, a'r golygfeydd yn undonog. +Mae disgyblion yn cwblhau'r tablau o swyddogaethau yn eu llyfrau +Yr oedd yn y tu mewn iddi gadwyni wedi eu gwisgo â huddygl canrifoedd. +Rydym yn adolygu caneuon a wnaed mewn gwersi blaenorol. +Credir i dri chant o dunelli o blwm doddi yn y tân. +Gallai eiliad o amynedd fod wedi arbed llawer o ddrwgdeimlad a lletchwithdod +Ar gornel ddeheuol y mur mae castell gyda thŵr dros gan troedfedd o uchder. +Mae'n amlwg fod ganddi wir gariad a brwdfrydedd tuag at y pwnc +Yr oedd mawredd y colofnau'n dylanwadu arnom ninnau er ein gwaethaf. +Gyda'r gair yr oedd y ddau geffyl gwyn ar garlam gwyllt. +Mae'r canlyniadau yn ddiddorol i ddeall arferion ieithyddol y cyhoedd +Dilynwyd ni o'r pentre gan dyrfa o blant. +Tra'r oeddym ni'n sgwrsio, clywem droediad ysgafn ar y llofft uwchben. +Disgwylir i'r disgyblion ddefnyddio rhifau atomig a màs er mwyn cyfrifo +Dechreuodd y trên redeg yn chwyrn gyda godre mynyddoedd Cymru tua Henffordd. +Bore drannoeth yr oedd cerbyd wrth ddrws y gwesty, a gyrrwr ynddo. +Gwanhau ein meddyliau a wnâi, gwneud i'n heneidiau suddo i ddiogi. +Mae hynna wir yn siomedig. +Mae pob picsel yn gynhwysydd gyda haen o hylif ynysol rhwng yr haenau. +Fe ellir disgwyl iddynt ymladd yn erbyn y gelyn cyffredin. +Cyfres mewn cartwnau lliwgar. +Gelwir hyn yn buro wraniwm neu buro plwtoniwm. +Roedden nhw wrth eu bodd yn clywed amdanat ti. +Doeddwn i ddim yn gallu dweud digon wrthyn nhw. +Mae deilliadau Senna yn fath o garthydd ysgogol. +Ar ôl iddo ymddeol ymddiheurodd iddi am ei ymddygiad. +Fel arfer, er bod y pris am ddim, codir am rannau atodol, ychwanegol. +Casgliad o gerddi gyda lluniau lliwgar. +Fe welai ferch ddewr a phrydferth ar gefn ceffyl gwyn. +Oherwydd ei fychander, caiff ei ddefnyddio fel trosiad am rywbeth bychan. +Mae wedi'i ddifrodi gan aredig diweddar. +Roedd yr awel yn cario arogleuon ffres pridd newydd ei droi gydag hi. +Buasai'n dda pe bai'r llinell darged yno hefyd elle. +Gadawyd creigiau anferthol ar y copa ar ddiwedd Oes y Rhew. +A phwy yw ei rhieni? +Aeth y gair allan am y bwyty. +Ond gwneud cawlach wrth beidio gwasgu botwm recordio'r ffôn. +Mi oedd hi'n tresio bwrw glaw. +Enghraifft gyfarwydd yw'r cysyniad o graff ffwythiant. +Cofiwch hefyd i lawr lwytho hwnnw ar gyfer bysellfwrdd Cymraeg. +Yna gyda cyllell finiog torrwch y rholyn yn ddarnau chwarter modfedd neu lai. +Be oedd enw'r grŵp nath sgwennu'r gân? +Blodeugerdd o gerddi i blant yw Mae Modfedd yn Llawer Mewn Trwyn. +Bu'n aelod o Gyngor Cenedlaethol Menywod Seland Newydd am rai blynyddoedd. +Mewn oedolion dynol mae rhwng chwech a saith metr o hyd. +Felly, mewn geometreg, astudir y planau Ewclidaidd a gofod Ewclidaidd. +Bu'n gapten ar y tîm cenedlaethol ar ddau achlysur. +Mae hyn yn sicrhau cydweithio a chysondeb llwyr. +Llyfr syn ymwneud â hanes Llanegryn yw Hanes Plwyf Llanegryn gan William Davies. +Ysgogodd y symudiad hwn hi hefyd i ddechrau ysgrifennu eto. +Cer o 'ma. +Gofynnaf i chi ddatgan yn eich rhaglen nesaf bod honiadau'r dyn yn anghywir. +Mae'n ddiogel ei ddefnyddio mewn beichiogrwydd ac wrth fwydo ar y fron. +Difrodwyd y cwch yn arw a bu'n rhaid angori yn Libanus. +Ydy, mae'n brysur ond yn wych. +Mae'r cyfarwyddiadau isod yn cyd-fynd â'r diagram ar y chwith. +Mae wedi'i orchuddio gyda meini o gwarts. +Llyfryn am gymunedau Cymraeg yw Mewnfudo, Ie; Gwladychu, Na! +Ond dwi wedi clywed canmol ac hoffwn ei weld. +Nid oes gennyt achos i gwyno hyd yn oed yn awr. +Casgliad o ganeuon i blant gan Margaret Lloyd Hughes yw Miri Meithrin. +Gwasanaethodd fel un o lywodraethwyr Coleg Prifysgol Cymru Aberystwyth. +Natur oedd y diddordeb mawr i fi, nid bod yn sdyc mewn dosbarth. +Wnaeth Martha ddim eu gweld nhw o gwbl. +Mae'r gath yn cysgu ar y gwely. +Gall y morter sy'n eu cadw at ei gilydd amrywio'n fawr. +Daliwch i ddarllen. +Weithiau mae elfennau allanol megis crefydd yn effeithio ar ddiet person. +Hyd yma, nid oes tystiolaeth o unrhyw ddifrod i'r eglwys. +Mae llawer iawn o'r cylchoedd hyn yn ymwneud â chladdu gweddillion dynol. +Newyddion trist, newydd glywed ei fod wedi marw. +Maent hefyd wedi comisiynu cabined i ddal y casgliad o Feiblau. +Fe'i haddysgwyd gartref oherwydd ei hiechyd bregus. +Roedd yn arweinydd Seindorf Arian Trefor am flynyddoedd ac yn brifathro'r ysgol leol. +Pan oedd yn blentyn ifanc, roedd hi'n ddarllenydd brwd, ac yn awdur talentog. +Stori i blant am helyntion Mr Arth wrth iddo geisio gwarchod plant. +O'dd 'na lestri brwnt yn y sinc. +Mae'n nofel am glytwaith o berthnasau. +Llyfr dwyieithog yw Y Ddresel Gymreig gan Trefor Alun Davies. +Nofel ddiweddaraf y Prif Lenor o Ynys Môn. +Mae'n dibynnu ar y driniaeth, unrhyw gymhlethdodau ac iechyd cyffredinol y claf. +Mae gan gylch y trac bedwar rhwystr cyffredin ac un naid dŵr. +Lluniwyd gan arbenigwyr ar feicio mynydd. +Gelwir set nad yw'n feidraidd yn anfeidraidd. +Diolch byth ges i sgidie newydd ddoe a dyw sefyll heb fod yn boenus. +Paradwys oedd yr addewid, ond anialwch a gafwyd. +Mae'n debyg mai clawdd a ffos fyddai yma'n wreiddiol. +Fe'i ceir fel arfer ar draed neu ar y dwylo. +Gwsbris oedden nhw yn fy mhlentyndod i. +Y rhif sy'n digwydd amlaf mewn rhestr neu set o rifau yw modd. +Portread o'r bardd o Langollen. +Nawn ni gychwyn y bennod yma drwy ddiolch i pawb am wrando. +Llyfryn dwyieithog am y bardd a'r eicon o Gymro, Dylan Thomas. +Dipyn o record. +Cawsant ddau o blant. +Rhan o dir Ymerodraeth Awstria oedd Pilsen, lle'i ganed, tref ddiwydiannol, lewyrchus. +Ffoaduriaid ydy lluosog ffoadur. +Dydyn nhw eu hunain ddim yn gwybod be maen nhw'n neud. +Ceir cydbwysedd rhwng trafodaethau testunol manwl ac ymdriniaethau cysyniadol. +Rhaid sgriwtineiddio o hyd a chodi ymwybyddiaeth a diddordeb. +Gyrra'r llun 'na i fi plis. +Dyna syniad difyr. +Blodau'r fiaren a chawod fêl ydy prif faeth yr oedolyn. +Yma sefydlodd ei hun fel cyfarwyddwr llwyfan a dechreuodd ddenu sylw rhyngwladol. +Ar ôl colli ei gwaith fel athrawes trodd at yrfa lenyddol. +Faint o arian ti moyn? +Mae pob un o'r gyfres wedi'i enwi ar ôl tafarn. +Treuliodd ei flynyddoedd cyntaf yn farbwr; mae ganddo briod a dau o blant. +Daw allan o'r chwiler ar ôl rhai wythnosau. +Dechreuodd Awen grio yn y car. +Wedi darfod ei brentisiaeth aeth i weithio fel argraffydd yng Nghaernarfon. +Dyma enghraifft sut mae sefydliad yn cydnabod, ymddiheuro a gwneud yn iawn am gamgymeriad. +Wi'n hoffi eu coctêls nhw. +Ceir hefyd fywgraffiad byr o'r arlunydd, a rhestr o'i gasgliadau. +Mae hyn yn rhan o rifyddeg, cangen o fathemateg. +Ti'n nabod fi'n rhy dda Mistar Jones. +Gafon ni salad hefo'n swpar. +Yn ei hamser rhydd, ysgrifennodd farddoniaeth Almaeneg. +Mae'r llinell bron yn Lladin pur. +I Glyn, roedd cwm coll Nant Gwrtheyrn yn lle o atgofion rhyfeddol plentyndod. +Yn anffodus, dyw pob sefydliad heb newid arferion. +Dyma fan cychwyn yr injan. +Fe oedd yn gyfrifol am ei ollwng yn rhydd. +Mae'r cynnwys yn pontio dau ddegawd. +Mewn rhai gwledydd, mae angen gradd bellach i gymhwyso fel therapydd ffisiotherapi. +Na, dw i ddim yn meddwl. +Aroglau yw'r hyn y gellir ei arogleuo. +Cyhoeddodd hefyd nifer o lyfrau a dramâu eraill. +Saif ar y briffordd rhwng Rhuthun a Llangollen. +Ceir craig noeth ar y copa. +Dyna'r tegan calla all plentyn ei gael. +Ar un cyfnod, gwyddom iddo gynllunio i ddianc o'r cyfandir. +Cyfrol yn tynnu sylw at ddigwyddiadau hanesyddol ac arwyddocaol yw Rhywbeth Bob Dydd. +Pan fyddant yn dod ar draws ffrigad Ewropeaidd byddent yn ffoi. +Yr oeddent nawr yn briod, ond doedd hi ddim yn hapus. +Ydy'r cyhoeddiadau traffig yn cael eu cydnabod o gwbl? +Mae'r gair mafon cochion yn cyfeirio at y ffrwyth a'r planhigyn. +Mae'r ddiod yn bigog. +Mae hen fenyw fach Cydweli yn gwerthu losin du. +Felly mae'r ddyled wedi parhau i gynyddu trwy gydol tymor y llywodraeth. +Fe'i canfyddir yng nghanol a de Ewrop a'r Dwyrain canol. +Mae'r rhain yn cael eu hadnabod fel Llys Tretŵr. +O'n i'n meddwl bod yr orsaf radio yn fyw bob bore? +Nid yw'n cofio pwy yw e, hyd yn oed. +Roedd fel petai'r robin mor gyffrous ag oedd hi. +Bu'n aelod o Academi Norwy am rai blynyddoedd. +Mae'r caws ar hyd y llawr. +Yn achos y gofod hyperbolig, mae gan bob llinell ddau bwynt ideal neilltuol. +Mae blodau'r math hwn yn borffor tywyll ac yn felfedaidd. +Dydy'r opsiwn ddim ar gael ar bob dyfais, yn anffodus. +Bu'n aelod o Academi y Gwyddorau a'r Celfyddydau Almaeneg am rai blynyddoedd. +Gelwir hwn yn hylif uwch gritigol. +Fe'i disgrifiwyd gan rai gwyddonwyr fel defnydd realaeth. +Maen nhw bron i gyd yn llysysol. +Bydd y cerbydau hyn yn ymddangos ym maes parcio'r garej. +A'i henw yw Dilys Ddwl. +Mae damcaniaethau ffiseg clasurol yn disgrifio tri dimensiwn ffisegol. +Roedd hi'n gweithio fel llysieuydd traddodiadol. +Mae ei waith yn datblygu ymhellach i'r geometreg solat o dri dimensiwn. +Bu ei brawd Robert Lloyd yn rheithor Aber. +Addaswyd gan Emily Huws. +Ceir carnedd ar y copa. +Os gwneir hyn am gyfnod hir, mae'r ysgarthion yn eithaf caled. +Dail y boplysen ydy prif fwyd y siani flewog. +Mae gen i sychad ofnadwy. +Bu iddynt bedair merch. +Beth yw eich polisi? +Ond un diwrnod roedd yn rhaid iddo fod yn ddewr. +Mae'n effeithiol i ladd llyngyr mewn plant hefyd. +Cyfrol am gynllunio preswylfeydd yw Tai a Chynllunio yng Nghynulliad Cenedlaethol Cymru. +Flwyddyn yn ddiweddarach cyhoeddwyd ei hail lyfr. +Cafodd ei chyhuddo, ei dyfarnu'n euog a'i dirwyo am hyn. +Mae'r cysyniad o newidyn hefyd yn hanfodol mewn calcwlws. +Yr oedd y briodas yn mynd yn ei blaen beth bynnag. +Dywed i Cadog ei hannog i ddychwelyd i Gymru o Gernyw. +Bu hefyd yn byw gyda theulu Thomas am dair blynedd. +Mae ysbryd bach cas a pheryglus yn mynnu aros yn nhŷ Siân a Dafydd. +Gall y problemau sylfaenol hyn gynnwys trawma, heintiau, neu strôc ymhlith eraill. +Mae hi wedi cael cam yn ei hadroddiad o'r feithrinfa heddiw. +Enw arall y teulu hwn o elfennau ydy'r Grŵp Boron. +Am ei drafferth, derbyniodd Rhys lawer o diroedd gan y brenin newydd. +A'th yr awyren ar goll. +Y mae hefyd yn anfantais yn y cynghorau plwyfol a threfol. +Mae geirfa'r gân hon yn nhafodiaith Bro Morgannwg. +Ar gyngor ei deulu a'i gyfeillion penderfynodd torri'r dyweddïad. +Gyda hi fe saethodd gyfanswm o naw ffilm deledu. +Maen nhw'n deud ei fod yn sybsideiddio torri swyddi'n Lloegr. +Mae angen tair gwraig a dau ŵr ar gyfer y cymeriadau. +Cer i gau cwt yr ieir. +Un enghraifft ydy Penisilin. +Dyma'r cowboi cynharaf, wrth gwrs. +Ceir ystyr ychydig yn wahanol mewn rhifyddeg ac algebra. +Daw'r teitl allan o gân werin draddodiadol. +Wi'n meddwl ei bod hi fod i gyrredd am whech. +Cododd Siân o'i chadair gan ddechrau teimlo'n gyffrous ei hun. +Mae'r gostyngiad graddol hwn yn parhau trwy weddill bywyd yr unigolyn. +Mi wnaeth pob peth ddigwydd fel y dywedodd hi wrth y fôr-forwyn. +Adroddiad dwyieithog yn trafod y berthynas rhwng Cymru a sefydliadau'r Undeb Ewropeaidd. +Ceir hen heol Rufeinig gerllaw. +Ond pam mae Lisa'n casáu canhwyllau gymaint? +Dilynodd un ohonynt ei dad yn llywiawdwr Castell Dinbych. +Dyw hi ddim 'ma heno ti'n gw'bod. +Casgliad o ganeuon i blant gan Hawys Glyn James yw Hwyl a Mawl. +Oddan nhw'n ista rownd bwrdd crwn. +Roedd ei mam yn un o'r siaradwyr. +Nath y greindar dorri felly es i'n syth i brynu un arall. +Chwe stori am bum cymeriad brith mewn pentre diwydiannol yng Nghwm Tawe. +Smwddio crys â choler, a gwisgo siaced a sgidiau go iawn. +Bu hefyd yn aelod o'r Academi Awyr a Gofod am rai blynyddoedd. +Darluniau lliw-llawn a du-a-gwyn ar bob tudalen. +Mae'r dyn yn gwisgo tei melyn. +Mae'r crug yma mewn cyflwr arbennig o dda. +Cwmwd yng ngogledd-ddwyrain Cymru ar lan aber afon Dyfrdwy oedd Cwnsyllt. +Enw'r fam fynydd yw Rhobell Fawr. +Roedd y llyfr yn cyflwyno'r syniad o esblygiad drwy ddetholiad naturiol mewn bioleg. +Mae grwpiau papur wal yn categoreiddio'r patrymau yn ôl eu cymesuredd. +Dw i 'di dechra' swydd newydd. +Ti'n clywad sŵn y fan eiscrîm? +Pan fo person wedi colli ei glyw'n llwyr, dywedir ei fod yn fyddar. +Saif Castell y Waun ger y Waun, Wrecsam. +Mae'r gyfrol yn cyflwyno hanes eu tystiolaeth dros dair canrif a hanner. +Y bumed gyfrol yng Nghyfres y Meistri. +Doedd dim byd ond dail gwyrdd tywyll, sgleiniog yn tyfu'n drwch. +Mi oedd yr hen bysgotwr yn edrych yn druenus. +Mae yma ffynnon o'r enw Ffynnon Oswallt. +Gadawodd yn bymtheg oed i gychwyn ei hyfforddiant fel deintydd. +Nofel i'r arddegau am gerddor yn cynorthwyo'r heddlu i ddal gwerthwr cyffuriau. +Fedrai 'im byta'r sŵp am 'i fod o'n rhy boeth. +Roedd yn cefnogi'r sefydliad ac yn gwrthwynebu newid i'r drefn. +Darparodd barciau, ffyrdd, amgueddfeydd, ysgolion a thai ar gyfer pobl dlawd y ddinas. +Gelwir dyfeisiau cyfannol yn ficro reolyddion neu systemau ar sglodyn. +Mae hyn yn caniatáu i bob ymholiad archwilio'r gronfa ddata berthnasol yn uniongyrchol. +Gorchuddiwch y cawl a'i adael i goginio'n ysgafn am rhyw awr. +Cynhwysir astudiaethau ar bynciau sy'n adlewyrchu diddordebau ymchwil eang yr Athro Gwyn Thomas. +Doedd o ddim isio mynd at y deintydd er bod 'i ddannedd yn ddrwg. +Gweithiodd ar y cyd gyda Llywodraeth Catalwnia i hyrwyddo iaith a diwylliant. +Gall hyn fod o ganlyniad i bris uchel y bwyd, a thlodi. +Fel arfer mae ardal yr haint yn boenus. +Cofion i ti o'r pen yma hefyd. +Ceisiwch ddod o hyd i'r prif lythrennau yn y twb tywod. +A fyddech chi mor garedig â chadarnhau bod hyn yn gywir. +Nath y dyn ddeud bod y tŷ ar fin cael 'i werthu. +Mae'n dŵr a adeiladwyd yn bennaf o gerrig. +Dw i 'di dweud wrthat ti fod yr adar i gyd yn ei hoffi. +Yr oedd rhyw ledneisrwydd boneddigaidd ynddynt yn gymysg ag awydd anniwall i siarad. +Fe'i ganed yng Nghasnewydd, a chafodd ei fagu yng Nghaerfyrddin. +Yr oedd yn aroglus, yn flasus, a deffrodd ni. +Maent yn awyddus i gael gwybod beth yw fy nhrefniadau. +Fe gei di bach o gnawd ar yr esgyrn yna. +Cefais lawer gwahoddiad gan y ffermwyr caredig i droi i mewn i gael tamaid. +Penderfynodd gyhoeddi llyfr fyddai'n gymorth i Gymry Cymraeg ddysgu sut i siarad Saesneg. +Sylwais fod gennych chi ddiddordeb mewn gwleidyddiaeth ac yn bwriadu pleidleisio ymhob etholiad +Ac yn y môr y bu ar hyd ei oes. +Eisteddai y gwas a'r meistr ochr yn ochr yn y gweithdy. +Edrychodd yn syn pan welodd Mary, yna cyffyrddodd â'i gap. +Beth yw gwaith curadur mewn amgueddfa? +Mae'r naill a'r llall yn arwain i'r gamlas longau. +Ar ôl hyn, dechreuodd dreulio amser gyda gangiau a dwyn ceir. +Byddai'n dda cael rhannu fy syniadau gyda chi. +Llwyfan rheoli dysgu agored yw Moodle. +Llwyfan rhannu fideos ar y we yw YouTube. +Dyna pam dewisais i Astudiaethau Celtaidd ym mhrifysgol Aberystwyth +Cofiwch gofnodi unrhyw bwyntiau ychwanegol a gwefreiriau sydd ar goll +Gweler yr adrannau unigol am fwy o fanylion +Yn yr un modd, byddai artist angen brwsh, paent a chynfas +Cai'r ardd ei chynnal a'i datblygu yn ystod y gaeaf +Mae'n rhaid meddwl am y ffordd rataf ond mwyaf effeithiol i'w dosbarthu +Rhaid cofio mai canran yw ffracsiwn o gant +Mae gennym wythnos brysur wythnos yma, gyda'n holl ddigwyddiadau i fabis +Edrychai yn dawelach na phan aeth allan, ond yn llawer mwy prudd a gofidus. +Yr oedd yr hen wraig yn dlawd iawn. +Bore drannoeth yr oeddem yn gorfod ail gychwyn i'r môr. +Mae Evans, Lloyd, James a Hughes yn gyfenwau cyffredin eraill. +Fel marc allan o ddeg mi roddaf wyth +Yr oedd ganddo lyfr dan ei gesail, llyfr y llywodraeth. +Mae plant yn debyg i'w gilydd ym mhob man. +Defnyddiwch hyn i'ch helpu chi amcangyfrif canran y siâp sydd wedi'i liwio +Byddaf yn dweud wrth y plant y byddwn yn coginio yn y wers nesaf +Edrychai'r heolydd yn gulach a duach yng ngoleuni egwan y lampau. +Boed i mi bob amser fod yn barod ac yn ddisgwylgar +Yr oeddem yn flinedig iawn, a gorffwysasom mewn distawrwydd. +Mae'r cyfarfodydd hyn i gyd yn canolbwyntio ar y plentyn +Cyn i ni orffen esbonio Calfiniaeth iddynt, canodd y gloch ginio. +Mae'r disgyblion yn tynnu llun a labelu celloedd yn eu llyfrau +Canolbwyntia'r diffiniad o allu ar y nifer o ieithoedd mae unigolion yn siarad. +Does dim dail ar y coed eto. +Teifl pawb yr hyn nad oes arno ei eisiau i'r heol. +Mae pob tref yn Llydaw naill ai ar ben bryn neu wrth enau afon. +Arhosem amser direswm ym mhob gorsaf wledig. +Mae'r sacsoffonydd yn dda iawn. +Yfwyd ato gyda hwyl a chymeradwyaeth fawr. +Mae'r bardd hwn wedi ysgrifennu ei rigwm ar lun englyn. +Gadawodd yr alwedigaeth yn gynnar. +Mae'n bwydo'r bêl o'i afael. +Teneuodd yn arw, a chrymodd ei gefn. +Ond wedi cael blas arni, nid oedd Pero am roi'r gorau iddi. +Pryd fydd swper yn barod? +Digwydd cyrraedd mewn pryd ddarfu mi i'w achub rhag boddi. +Roedden nhw'n dewis yr enillwyr drwy bleidlais bost. +Rwy'n byw ar Ffordd y Coleg. +Rhoes gost o chweugain ar honno cyn darfod â hi. +Mi fynnodd gael cwpan de. +Chwerthynai'n ddi-baid a llawen. +Weithiau mae hanes naturiol a hanes pobl yn cydblethu. +Yr oedd rhai eisoes yn dechrau teimlo ei fod yn haerllug iawn. +Dechreuasant ddod a'r coed a'r rhaffau at fôn y simnai. +Eu gobaith oedd y byddai modd arddangos y bwrdd yn yr arddangosfa. +Ni buasai dim yn y byd yn ei argyhoeddi i'r gwrthwyneb. +Ymollyngodd i'r tonnau gan geisio nofio fel o'r blaen. +Cododd a chariodd Pero yn dyner yn ei freichiau adref. +Y mae acw bwyllgor bob yn eilddydd. +Mae twneli lafa yn ffurfio ogofeydd tanddaearol. +Mae o ar lawr, ac yr ydym ninnau yn mynd i'w gicio allan. +Chwarddodd y Philistiaid gennym. +Os bydd hi'r un fath eleni cheiff hi ddim croeso yma. +Clywodd Dafydd ef toc yn cyfarth yn y pellter a throes ei ben. +Croesais ar draws y corstir at lan y môr. +Awn at ei waith yn ysgrifennu hanes helynt y dref. +Doedd dim lle yn y maes parcio. +Dyma'r mwclis cyntaf o'i fath i'w ddarganfod yn Lloegr. +Yr oedd ei wraig wedi marw ers blynyddoedd. +Welais i erioed mo'r tŷ yn anhrefnus ganddi. +Bûm yno tan amser cau. +Caiff llawer o bysgod loches ymhlith y cwrel lliwgar. +Yr oedd arni ofn ei bod wedi gwneud rhywbeth i'w ddigio. +Aeth blynyddoedd heibio, ac aeth Gruffydd yn ei flaen. +Roedd gan fy nhad gi a'i enw Pero. +Yn sydyn, daeth rhywun drwy'r penwar ac i fyny'r llwybr. +Tybed mewn difrif y byddai englyn y bardd yn y papur. +Yr oeddwn yn cerdded tuag adref gan feddwl am y peth. +Feddyliais i erioed fod y fath beth yn bosibl. +Gwelodd ei lygaid yn cau a'r chwythad olaf bron a'i adael. +Bydd angen glanhau'r mwclis yn drylwyr. +Mae yna le bwyta newydd wedi agor yn Y Bae. +Ar hyd y blynyddoedd, ymdrochai bob bore. +Roeddwn i yn dechrau mynd i anobaith. +Yna bu distawrwydd llethol. +Roedd balchder y perchnogion yn amlwg. +Edrychasant ar ei gilydd. +Roedd hi'n rhy stormus i gyrraedd yr ynys. +Mae'r tonnau yn sgubo'r tywod i ffwrdd. +Ni wnaeth well defnydd o'i ryddid nag o'r blaen. +Prynais i lyfr newydd o ganeuon adar yr ardd. +Byddai popeth bob amser yn lân ac yn daclus. +Ydi'r bêl wedi mynd yn farw – nac ydi. +Aeth yn helynt mor erwin fel yr aeth y bobl yn benben. +Yr oedd Dafydd Morgan wedi ei blesio yn fawr. +Dechreuodd fwrw glaw yn drwm. +Siomodd bawb yn fuan. +Heb sylwi ar y blodau na dim arall, agorodd Morris y penwar. +Fe wnaeth yr amddiffyn sefyll yn gadarn, yn ddi-ildio. +Waeth i mi heb ddeud chwaneg. +Mi fydd fy ngwraig yn methu dallt lle'r ydw i. +Plygwch y blawd i mewn i'r gymysgedd yn ysgafn. +Wylodd Dafydd uwch ei ben. +Euthum â gweddillion y gath allan. +Fe godon nhw bont bren newydd ar draws yr afon. +Fe wthiodd hi flodau hibiscus coch llachar mewn i bentyrrau bach o bridd. +Roedd hyn yn un ffordd o dreulio'r amser, beth bynnag. +Rhedodd adref ar ei gyfer. +Ond fe wnaeth hi feddwl drosto fe llawer iawn wedyn. +Edrychai cadeiriau fel eu bod nhw wedi cael eu gwthio nôl yn sydyn. +Cafodd hi ei chadw allan o'r ffordd. +Cer amdani tra dy fod ti'n gallu. +Does neb eisiau byw yno bellach. +Buasai fyw yn dda ar hyd ei oes. +Ni wyddai Dafydd ddim am y trefniadau. +Mae yno barcdir o'i gwmpas gyda gerddi a choed. +Roedd ambell i un yn darllen hen gylchgronau. +Gwelodd ddyn a dynes yn rhedeg nerth eu traed tua'r gwrych. +Bu raid i mi wneud swper fy hun. +Gwnaeth y gwin iddi deimlo'n gysglyd. +Doedd neb am eistedd yn rhy agos at ei gilydd. +Roedd ganddi le cysurus, da ei byd fel howscipar. +Daeth o'r diwedd at groesffordd. +Cymerodd ei llwy a dechrau bwyta'r uwd. +Bwyteid pedwar neu bum pryd sylweddol bob dydd. +Cafodd Jenkins a Williams eu cyhuddo o fethu sgrymio. +Sawl gwaith aeth y cerbyd dros bont fach gyda dŵr yn rhuthro dani. +Mae Clawdd Coch yn bentref bach ym Mro Morgannwg. +Roedd yn ŵyr i'r bardd Rolant Huw. +Roedd y sioe yn llwyddiant ysgubol. +Yn gynddeiriog, mae'r Iarll yn ei herio i ymladd gornest hyd farw. +Roedd coed ffrwythau yn tyfu a'u canghennau wedi'u clymu ar hyd wal. +Mi wnaeth hynny iddi feddwl am sawl peth hollol newydd. +Fel arfer roedden nhw'n bortreadau o ddynion a merched mewn dillad hen-ffasiwn. +Bu iddynt dair merch. +Bu iddynt ddau fab a thair merch. +Y flwyddyn ganlynol codwyd y gwaharddiad a dechreuodd arwain eto. +Aeth Mary at y drws gwyrdd a throi bwlyn y drws. +Mae e yn yr ardd, rwy'n siŵr ei fod e. +Cafodd ei addysgu yn Ysgol Sir Llanelli. +Mae'n cael ei ddefnyddio yn ogystal fel canolfan addysg a hyfforddiant hedfan. +Ymadawodd â'r ysgol gan ddod yn fugail ar y fferm deuluol. +Bu hefyd yn ymwneud â grymuso menywod ym mywyd economaidd Iorddonen. +Rown i'n meddwl efallai ei bod hi wastad yn bwrw glaw. +Mae o'n deall ei ystyr. +Mae un o'r gerddi wedi'i chloi. +Yn ei dymor cyntaf fel ysgrifennydd daeth â gweinyddiaeth glir ac ymdeimlad o broffesiynoldeb. +Mae'r orsaf mewn lleoliad anarferol sy'n croesi rhan gromlin o'r trac. +Mae'n ddadl sy'n parhau hyd heddiw. +Pan edrychodd hi ar y gwely blodau iddi dyna lle roedd y robin goch. +Mae'n sylweddoli bod rhaid iddo bellach ddod yn ffermwr. +Ddeuddydd ar ôl hyn, agorodd Mary ei llygaid ac eistedd i fyny. +A doedd 'run o'r garddwyr yn cael mynd i fewn. +Gydag ysbryd brawdgarwch Cristionogol byddai modd ail greu'r nefoedd eto ar diroedd Lloegr. +Bu iddynt pum mab. +Theimlodd hi ddim yn ddig pan oedd Martha yn parablu'n ddiddiwedd. +Roedd hi'n meddwl efallai mae dyma'r ffordd Seisnig o drin plant. +Roedd yna luniau ar y waliau. +Mae'r uwd yn blasu'n dda bore 'ma. +Addysgwyd ef yn Ysgol Rhuthun. +Roedd ei dad yn beiriannydd ac yn ffitiwr mewn gwaith haearn. +Gall amlygu mewn bechgyn a merched. +Roedd yn gapten ar dîm Cymru ar chwe achlysur. +Gwasanaethodd hefyd yn y Gwarchodlu Cartref. +Ganwyd Morgan yng Nghaerdydd. +Os ydi'r botymau ar y cefn fedri ddim eu cau nhw dy hun. +Yna rhedodd i lawr y llwybr drwy'r drws arall. +Edrychodd Mary o'i chwmpas. +Bu iddynt dau o blant. +Mae'r ysgol gyfan yn galaru am ei cholled. +Roedd yn gyfrifol am sicrhau darparu addysg grefyddol ac addysg paratoad at waith. +Argraffwyd y traethawd yn ddiweddarach. +Parhaodd i chwarae i Gymru ac i Swydd Efrog. +Gorweddodd Mary ac edrych arni am rai munudau. +Yn ystod yr Ail Ryfel Byd daeth y Tŷ Opera yn neuadd ddawns. +Aeth allan i'r ardd cyn gynted ag y gallai. +Bu'r teulu wedyn yn byw yn Llwyn-y-Brain, Llanrug. +Ychydig ddyddiau'n ddiweddarach, fe wnaethant ddwyn ceffylau o ddwy fferm. +Mae wedi cael ei ehangu ddwywaith ers hynny. +Wrth iddi edrych gwelodd rywbeth oedd bron wedi'i gladdu yn y pridd. +Parhau i fwyta'i huwd nes bod ei bowlen hi'n wag. +Roedd pedwar peth da wedi digwydd iddi. +Cyflogodd giwrad gyflawni holl ddyletswyddau'r plwyf. +Doedd Mary erioed wedi breuddwydio am awyr mor las. +Rhaid oedd treulio'r ddwy noswaith yn y trên. +Ni wyddys fawr o fanylion hanes y Crynwyr. +Ni all merched ddianc rhag eu rolau ystrydebol yn y gymdeithas. +Roedd e wastad yn pryfocio ei chwiorydd. +Doedd yr un ferch fach arall erioed wedi treulio'r fath fore rhyfedd. +Roedd e'n swnio mor annhebyg i India. +Roedd William Owen yn gerddor, yn arweinydd côr ac yn awdur emyn-donau Cymreig. +Mae'n mynd allan yr un fath â phetai'r haul yn gwenu. +Pam na wnei di ddarllen rhywbeth? +Lledodd gwên araf drosto ac edrychai'r garddwr yn eithaf gwahanol. +Oddi yno symudodd i Gaernarfon gan barhau yn yr un fasnach. +Wnes i droi'r cornel anghywir, esboniodd Mary. +Mae'r cyrch awyr yn dechrau fel y disgrifiodd Rhys. +Ef yw arweinydd y grŵp ac mae'n amddiffynnol iawn tuag at Anne. +Rydw i yn ddiolchgar iddo fo am ei air da. +Roedd ei lyfrau yn ymwneud â chymorth i bregethu yn bennaf. +Clywodd hi drydar bach sionc. +Wnaeth Mary ddim gofyn ble roedd y llyfrgell. +Pryd fu Dewi Emrys farw? +Efallai ei bod hi'n cysgu yma ar un adeg. +Ceir cymeriad sy'n gweld y byd o safbwynt gwrth-semitaidd. +Does neb arall wedi bod yno ers deg mlynedd. +Dymunwn yn dda hefyd i Mabon ap Gwynfor a fydd yn olynydd teilwng. +Mae gan rai o'r cartrefi garej ynghlwm iddynt. +Mae Angharad Edwards yn awdur Cymreig. +Mae ganddo lygaid brown a gwallt du, byr. +Rydym yn trin cleifion gydag urddas trwy gadw at reolau cyfrinachedd +Mi fydd y cyfrif yn wahanol i'r cyfrif diwethaf. +Ystyriodd fod yn newyddiadurwr. +Roedd yn ŵr o dras Gymreig a'i wreiddiau yn ddwfn yn nhir Eryri. +Bu hefyd yn cynrychioli Cymru yn chwarae pêl-rwyd a phêl-fasged. +Debyg ei bod yn fath o ddogfen hanesyddol erbyn hyn. +Doedden nhw'n cofio am ddim ond amdanyn nhw eu hunain. +Dim ond rhan o'r sylfaen sydd wedi goroesi. +Arhosodd yr awditoriwm ei hun, ond mae dros hanner y safle yn newydd. +Ni bu iddo ef a'i wraig ond un mab. +Nid oedd y dodrefn yn hollol wrth ei bodd ychwaith. +Strydoedd yn cael eu cau. +Bu Price yn gyfrifol am ehangu achos y Bedyddwyr ar hyd Cwm Dâr. +Ei wrthwynebydd oedd y bardd Eingl-gymreig Syr Lewis Morris. +Mae Tommy yn ŵr Americanaidd o dras Eidalaidd. +Mae mewn cyflwr cadwraeth da. +Mae dwsinau o gyhoeddiadau Cymraeg yn gwneud hynny. +Myfyrdodau beunyddiol ar y nofelau Cymraeg gorau, yn nhrefn eu teilyngdod. +Daeth dynion di-grefft i'r ardal hefyd oherwydd yr addewid am waith. +Mae'r tŵr yn eiddo preifat. +Rhedodd i fyny'r llwybr at y drws gwyrdd. +Beth wyt ti'n gwneud yma? +Mae'n defnyddio cerrig o bob cwr o'r byd i greu ei cherfluniau. +Clywodd sŵn piwis, plentynnaidd, aneglur. +Mae'n anodd dweud, efo sicrwydd, pa bryd y dyfeisiwyd y gêm fideo gyntaf. +Ond mae'r berthynas â theulu Leone yn suro. +Ond roedd natur y gwaith a gyflwynwyd i Flaenafon yn wahanol. +Un o lyfrau gorau ail genhedlaeth Gymraeg Lloegr. +Rhaid mod i yn breuddwydio yn effro. +Jôc sy'n werth ei darllen. +Gobeithio fod petha'n iawn acw yn Stiniog. +Bu ddarllen yn gyhoeddus yn un o'i ddoniau. +Chafon nhw ddim caniatâd cynllunio i godi archfarchnad newydd. +Does dim mynyddoedd yno i fod yn rhwystr naturiol. +Gadawsom yr afon yn Llangadog, a chroesasom i ddyffryn afon arall. +Heb betruso o gwbl, troes o'r ffordd fawr. +Nid sôn am gaethwasiaeth ydw i rŵan, ond am y cannoedd eraill. +Nid oeddwn erioed wedi gweled tref gymaint o'r blaen. +Isio dy holi am Lundain ers talwm! +Mae Maria yn ymddangos mewn ffilmiau rhagarweiniol i ddwy o'r tasgau. +Aeth ati i wneud y lle yn siriolach fyth. +Isio holi am Gapel Salem, Penbedw ydw i; yn sgwennu yn ei gylch. +Wnewch chi ddod gyda fi os gwelwch yn dda. +Cychwynnodd y tri i adeiladu'r gwaith haearn ar unwaith. +Torrodd ei goes ar y gwyliau sgïo. +Gofynnodd i'w mam fynd i'r siop a chael ffrog arall iddi. +Sut ti'n cymryd dy goffi? +Taflunnir y llinellau syth fel bwa crwm ar y sffêr. +Dydi Siân byth yn defnyddio'r soffa. +Fel arfer mae'n dechrau gweithio o fewn awr. +Mae'r ddaear 'di rhewi. +Heddiw, defnyddir y term mathemateg gymhwysol mewn ystyr eang iawn. +Mae cyfeiriad llinell naill ai'n cynyddu, yn lleihau, yn llorweddol neu'n fertigol. +Mae nhw wedi torri'r coed yn y goedwig. +Derbyniodd Radd Meistr ym Mhrifysgol Caeredin. +Hanner y Ddaear sydd i'r de o'r cyhydedd yw Hemisffer y De. +Daeth y ffydd Gristionogol i'r ardal yn y bedwaredd ganrif. +Hunangofiant crefyddol gan Aled Jones Williams yw Oerfel Gaeaf Duw. +Y degfed llyfr yng Nghyfres y Corryn. +Cyfrol yn sôn am fywyd yn oes Victoria wedi ei ddehongli a'i ddarlunio. +Ni wyddwn ai merch real ynteu ferch ddychmygol ydoedd. +Ceir ffurflen enwebu ar-lein. +Wyt ti wedi rhoi'r dillad ar y lein? +Profer, os mynner, mai mantais ydyw iddynt. +Roedd yr awyr yn glir a'r haul yn codi. +Dywedir fod dail cypreswydden yn help i atal y person rhag gwlychu'r gwely. +Gall ymyl fod yn air gwrywaidd neu fenywaidd. +Rhoddodd ei law yn ei boced, estyn ceiniogau a'u taflu ar y bwrdd. +Mae'r erthygl hon yn rhestru rhai arfbeisiau hanesyddol Cymru. +Mae hi'n wyntog iawn heddiw 'ma. +Mae wedi'i gysylltu ag arwyneb mewnol drwm y glust. +Rwy wedi ail diwnio'r radio ac mae popeth nôl i'r arfer. +Sgwenna am beth bynnag sy'n cymryd dy ffansi. +Dy gyfrinach yn saff gyda fi Richard. +Mi oedd hi'n arfer gweithio yn y syrcas. +Mae'r rhain yn anodd. +Mae yn neoniaeth Yr Wyddgrug, ac yn perthyn i'r Eglwys yng Nghymru. +Mae syniad Annibyniaeth allan yn y gwyllt. +Mewn geometreg, math o byramid yw pyramid sgwâr, gyda'i sylfaen yn sgwâr. +Mae clo y drws wedi malu. +Mae ei theulu o darddiad Iddewig. +Diwrnod penigamp i chi i gyd. +Y glust fewnol yw'r rhan fwyaf mewnol o'r glust fertebraidd. +Y dyddiad cau ydi dydd Llun nesa'. +Llythyr i chdi di hwn 'li. +Ond yr union adeg daeth ymwared i'r hen frawd. +Dechreuodd wylo, a chladdu ei hwyneb yn ei ffedog. +Ynys sy'n perthyn i wlad Groeg yw Corfu. +Ar ôl cwblhau'r adnodd, byddwn yn mynd trwy'r atebion +Y mae y llanw wedi dod i mewn eto. +Podlediad Beti a'i phobl os gwelwch yn dda +Mae hefyd llawer nad ydym ni fel cymdeithas yn ymwybodol ohono +Yn dilyn y sefyllfa uchod, dyma restr o'r prif beryglon posibl +Maent yn edrych fel casgliad o rosynnau +Mae hyn yn gallu arwain at iselder a phroblemau anadlu +Ac yma y bydd o, am byth. +Mae'r llywodraethwyr eisiau sicrhau eu bod wedi cael hyfforddiant priodol +Rydyn ni'n gobeithio paratoi'r dosbarth cyfan cyn yr arholiad +Roedd yn rhoi clod arbennig i ŵr o Landdeusant, wrth siarad â mi. +A chyn bo hir daeth awel eilwaith o'r de. +Ganwyd John Penri yng Nghefn Brith. +Ffurfiwyd National Power wedi preifateiddio'r farchnad ynni ym Mhrydain. +Mae hi'n mwynhau chwarae gemau a gwneud gweithgareddau i atgyfnerthu ei dysgu +Roedd Robert Kennedy yn frawd i'r Arlywydd John F. Kennedy. +Ar gyfer y llenni mewnol, defnyddiais ffabrigau llwyd tryloyw +Dyma yw'r lle gorau i aros yn y wlad i brofi ei thraddodiadau. +Byddaf yn disgwyl i chi atgyfnerthu a chyfoethogi eich dealltwriaeth o gyfesurynnau +Nodwch unwaith eto pa alcohol rydych yn meddwl yw'r tanwydd gorau +Ian Fleming oedd awdur nofelau James Bond. +Beth yw'r gwahaniaeth rhwng pynciau craidd a dewisol? +Teimlai fod canghennau'r coed yn lapio'n famol amdani. +Yr unig anabledd mewn bywyd yw agwedd wael +Trwy wrando ar gerddoriaeth a chreu cerddoriaeth, mae'n adnabod seiniau cyfarwydd +Ymhen rhyw ddwy awr a hanner gwelem Lydaw'n ymestyn ymhell i'r gorllewin. +Y mae Llydaw'n wlad sychedig iawn, gwlad lawn o lwch. +Cerddasom am oriau yn ôl ac ymlaen ar hyd y mur. +Angharad, pam mae pawb yn drist +Pris pymtheg swllt y dydd, heb gyfri gwin a gwasanaeth. +Yr oedd golwg urddasol arno, er gwaethaf ei henaint a'i dlodi. +Roedd Tony ac Aloma yn ddeuawd pop poblogaidd yn ystod y chwedegau. +Cerddasom o borth Mair dros dywod a cherrig at droed yr ynys. +Wedyn bydd ein grŵp yn mynd ati i baratoi ar gyfer yr ymgyrch +Rheolant eu haddysg a'u masnach yn ôl eu hewyllys. +Yr oeddem yn newynog a sychedig, ac yfasom ddiod felen oedd ar y bwrdd. +Mae astudiaethau yn dangos bod llygredd sŵn yn arafu datblygiad corfforol +Ar farwolaeth y perchennog, rhennir y tyddyn rhwng ei ferched a'i feibion. +Rydw i'n anghytuno gyda'r penderfyniad yma oherwydd amryw o resymau gwahanol +I chwarae'r darn yma defnyddiais y piano +Yr oedd y ddau geffyl gwyn yn mynd yn brydferth hyd y ffordd wastad. +Dyma'r mis Chwefror gwlypa erioed. +Rwy'n mynd i brynu car trydan. +Roedd hi'n gân oedd yn sefyll ar ei thraed ei hun. +Gan ddefnyddio technoleg arbennig, mae arbenigwyr wedi sganio waliau'r bedd +Dyna drychineb, mae'r tin bisgedi yn wag. +A dyma finnau bererin wedi cael edrych ar dy degwch. +Llyfr am antur yn y gofod oedd e. +Doedd dim llawer o ddifrod ar ôl y storm. +Meysydd cysylltiedig yw polisi a chynllunio iaith. +Bum yn synnu droeon pam y mae gwin yn destun i'r beirdd. +I'ch helpu, gweler ynghlwm dempled amserlen a chynnig o rai syniadau +Anelon nhw am y gornel bellaf. +Mae'r marchnadoedd stoc yn disgyn yn gyflym. +Aeth i'r llyn i ymdreiglo, a bu yno'n hir. +Ond waeth heb fynd y ffordd yna heno. +Gwyddent am orchestion y dyn. +Does mo'r help, rhaid gwneud hynny. +Welais i erioed blentyn mwy surbwch yn fy myw. +Ymaith â hwy drwy ganol y twr pobl. +Aeth hi nôl i'w stafell a chau'r drws eto. +Roedd ei gwallt fel sidan cyrliog ac roedd ganddi drwyn bach del. +Roedd yn amser rhoi'r plant eraill yn eu gwelyau. +Doedd hi ddim yn gwybod ei bod hi'n annymunol. +Bydd blodau newydd yn dechrau coloneiddio'r ynys. +Roeddwn i yn dotio ato. +Aeth Mari Huws i'r tŷ i wylo yn ddistaw. +Un tro, sut bynnag, digwyddodd lwc i'r hen fochyn. +Chawn nhw ddim teithio i Hong Kong ar hyn o bryd. +Nid anghofiaf byth amdano. +Doedd hi ddim yn gweld ei cholli o gwbl a dweud y gwir. +Fe geision nhw fod yn garedig wrthi. +Bydd yn rhaid i mi fynd i'r gwaith yn gynnar bore fory. +Fe wnaeth y beirniaid jobyn eitha da arni. +Unwaith cripiodd i'r ystafell fwyta a'i chael yn wag. +Clywais y geiriau hyn. +Mae 'ngwallt i'n dal yn wlyb. +Dechreusai Mary wrando ar ei gwaethaf ei hun. +Oedodd am funud a chymryd anadl arall. +Daeth hen deimlad ei ieuenctid yn ôl iddo. +Doedd hi ddim eisiau gwrando dim rhagor. +Roedd pobl yn dweud ei bod hi wedi'i briodi am ei arian. +Mae'r adar wedi dechrau canu cyn iddi wawrio. +Rhaid i ti beidio disgwyl y bydd yno bobl i siarad gyda ti. +Roedd e'n swnio fel rhywbeth allan o lyfr. +Ymddangosai'n gwbl naturiol fod y glaw wedi dechrau tywallt i lawr. +Yr oedd yn noddwr cyson i'r Corn ar hyd ei oes faith. +Chawsom ni ddim ein gweld am yn hir. +Mae pris tanwydd wedi gostwng yn sylweddol. +Yn y diwedd disgynnodd i gysgu. +Dechreuodd chwarae ar ei phen ei hun. +Roedd llwch folcanig yn gorchuddio pob man. +Mae'n anodd dianc o afael y siarcod. +Dygais hwy adref. +Rwy'n prynu fy nillad i gyd o siopau ail-law. +Cyn pen yr awr yr oedd wedi torri ei benderfyniad drachefn. +Cerddai yn araf, gan grymu tipyn ar ei gefn. +Yn sydyn, clywsom dinc prudd ar y gloch fawr. +Ddaw hi byth yn ôl. +Byddwn ni adref cyn hanner nos. +Mae'r dyfyniad hwn yn cyfiawnhau hyn yn dda. +Defnyddid blociau bach i gadw'r bonet i fyny. +Pryd fydd fy nhro i'n dod? +Rhaid i bob teulu gael o leiaf un heliwr. +Dyna lle roedd yr aderyn gyda'r fron goch yn hedfan atyn nhw +Ble mae'r allwedd i gloi'r drws? +Rhaid i mi fynd. +Mae'r berllan y tu hwnt i'r ardd. +Canodd y gloch a daeth y wers i ben. +Fe gafodd hi gipolwg ar y pethau roedden nhw'n eu pasio. +Doedd hi ddim yn gallu penderfynu rhwng y sgarff goch neu'r un flodeuog. +Mae arnoch chi eisio bwyd; dowch at y bwrdd i gymryd tamed o ginio. +Gwelir hefyd ambell i feillionen a llygad y dydd. +Paid ti â bod yn ferch fach fusneslyd rŵan. +Prin y cai ei chwaer ddigon o fwyd a dillad ganddo. +Cawsom ein hunain ar y mur, yn edrych ar olygfa ogoneddus. +Roedd y broses wisgo yn un ddysgodd rywbeth i'r ddwy ohonyn nhw. +Mae wedi hedfan dros y wal. +Hufennwch y siwgr a'r menyn gyda'i gilydd. +Cawsom ni gyfweliad trylwyr iawn gyda'r fferyllydd. +Doedd hi ddim yno mwyach. +Pan aeth hi drwy glwyd fe'i cafod ei hun yn y gerddi mawr. +Mae'n amser i ti godi rŵan. +Doedd neb wedi bod yn yr ardd ers deng mlynedd. +Mae wedi cael ei wneud yn ail stafell i ti. +Yr oeddem yn uchel yng ngolwg pawb wedi i ddyn y llywodraeth wenu arnom. +Yn India roedd y gweision brodorol yn wastad yn codi ac yn cario pethau. +Gwelodd rhywrai fod yno gyfle i wneud arian. +Nid dyna yw ein harfer ni. +Roedd yr aderyn fel petai wedi'i gweld hi ac yn galw arni. +Roedd hi'n cofio brig y goeden roedd e'n clwydo arni. +Nid stafell plentyn oedd hi ond stafell oedolyn. +Teimlai Mary ei bod hi yn y goedwig gyda nhw. +Rydyn ni'n cynghori pawb i aros yn y tŷ. +Na, dw i'n ei gasáu. +Mae'r rhain yn cael eu disgrifio mewn ugain nofel. +Mae'r ddau yn bidio yn ffyrnig ar ei gyfer. +Ond roedd hi'n gwybod ei fod e wedi'i dilyn hi. +Mae hi mewn cariad ag ef. +Roedd Martha yn edrych fel petai hi'n meddwl ei bod hi'n dwp. +Fel adeiladwr bu'n gweithio ar adeiladu'r eisteddle ym Mharc yr Arfau. +Cyrhaeddodd yr heddlu a chafodd y gang eu herlyn i'r llwyni. +O ganlyniad bu ymchwiliad swyddogol i bennu arddull safonol i'r Anthem. +Mae'n dweud wrth Davies ei fod wedi bod yn ei ddisgwyl. +Mae o wastad yn dod i weld beth dw i'n plannu. +Dydi'i drafferthion o yn ddim busnes i'r gweision ddeudodd o. +Roedd galw mawr arni fel siaradwr ffeministaidd. +Bu farw cyn iddo gael ei ddiswyddo. +Fel Esgob Caer, roedd yn poeni am dwf Anghydffurfiaeth yn ei ardal. +Wnaeth Mary ddim hyd yn oed ceisio rheoli ei dicter a'i chywilydd. +Mae'r rhai mwyaf yn mynd allan i'r beudy ac yn chwarae yno. +Pan oedd yn wyth oed symudodd ei deulu i fyw i Fecsico. +Doedd hi ddim yn gwybod yn iawn ble roedd hi. +Caeodd ddrws y cabinet. +Ond does dim byd i'w weld. +Mae mam Anne yn ddynes glên iawn. +Ganwyd Morris yng Nghasnewydd, yn fab i bostfeistr. +Derbynient gyflog plwyf heb fod yn bresennol yn y plwyf. +Y funud honno roedd rhywbeth da iawn yn digwydd iddi. +Yn sydyn fe gafodd hi syniad newydd. +Amlosgwyd y ddau, a chladdwyd eu lludw ym mynwent Rhosan. +Bu hefyd yn feirniad rheolaidd mewn nifer fawr o eisteddfodau cenedlaethol. +Gallai hi weld brig y coed dros y wal. +Doedd y wasg ddim yn llwyddiannus iawn. +Lle wyt ti'n byw nawr, meddai Mary yn uchel wrthi. +Pan edrychodd hi lawr fe welodd hi neidr fach yn llithro yn ei blaen. +Cafodd ei adnabod fel dyn stoc gweithgar a gonest. +Bu iddynt bump o blant. +O'r diwedd lledodd ei adenydd a hedfan i ben coeden. +Llwyddodd yr heddlu i amddiffyn y wagen. +Wyt ti'n clywed rhywun yn crio, meddai. +Claddwyd ei weddillion ym mynwent Capel Salem, Blaenau Gwent. +Doedd y gweision a'r morynion brodorol ddim byd tebyg i hyn. +Yndw, mi ydw i. +Mae popeth mor llonydd yma. +Doedd hi'n gwybod dim byd am awdurdod. +Roedd yn actor a dramodydd Cymreig. +Tydi o ddim yn foel. +Efallai mai hon yw'r allwedd i'r ardd. +O ganlyniad, daeth perfformio yn fwyfwy anodd i'r tenor. +Aeth allan o'r ystafell a chau'r drws yn glep tu ôl iddi. +Roedd hi wedi crwydro'n ddigon hir. +Mae papurau newydd yn y dafarn yn flwydd oed hefyd. +Dihangodd y criw i mewn i'r llwyni. +Mae'r ddau yn gweld goleuadau car heddlu yn nesáu at y tŷ. +Teimlai fel petai hi wedi bod ar daith hir. +Dywedasom ein bod yn synnu nad oedd cyfarfod cyhoeddus yn unlle. +Mae cofeb iddo hefyd yn Nant-y-glo. +Mae'r gwanwyn ar ei ffordd. +Roedd Parry hefyd yn ddarlunydd. +Adeiladodd gwt a dechreuodd ffermio gwartheg. +Sgin i ddim mwy o amser. +Roedd e mor newydd a mawr a bendigedig a'r fath liw nefolaidd. +Mae erydiad yn lleihau maint y mynydd yn gyson. +Crwydrodd plant Llŷr drwy Iwerddon am naw can mlynedd. +Dechreuasom gerdded ffordd wastad drwy gaeau gwenith eang. +Beth wnei di o'r tacl yna? +Doedd Mary ddim yn ei hoffi o gwbl. +Cafodd llawer o'r golygfeydd eu ffilmio ar leoliad yn yr Eidal. +Aeth y ddau ymlaen am ysbaid i ymgomio am grefydd a'i chysuron. +Mae o am gael gwybod popeth amdanat ti. +Mae'r un peth yn digwydd gyda'r arfau mae'n eu defnyddio. +Dyma'r manylion ar gyfer y datganiad i'r wasg. +Aeth Mary ac eistedd ar y mat o flaen y tân. +Doedd dim byd i'w wneud. +Ond doedd mo'r help bellach. +Bu hefyd yn olygydd Y Goleuad. +Mae llawer o olew yn dal ar y traeth. +Roeddwn i fod i hedfan i Genefa heddiw. +Ond erbyn hyn, y mae hi yn wyllt ulw. +Tynnodd Wil ei esgid a thaflodd hi i lawr. +Cyflwynwyd llawer o eitemau gwerthfawr i'r amgueddfa. +Mae hefyd restr gyda pharagraff am brif drefi a phentrefi'r siroedd. +Dewi a'i feibion oedd bron y cyfan o aelodau'r band. +Yr hen gnawes ag wyt ti. +Daeth dwy lechen oddi ar y to. +Methiant truenus ydoedd. +Ond roedd y robin i weld yn ddigon bodlon. +Defnyddiais bensil, pensil lliw, inc a beiro +Mae'r enwau a darllenir yn cael eu cofnodi yn Rôl Anrhydedd yr ysgol. +Mae dy gerbyd yn disgwyl amdanat ti y tu allan. +Agorodd i gynted anferth. +Roedd y pridd wedi'i droi. +Yr oedd yno gynulleidfa o bobl yn barod i siarad a chwerthin. +Byddai'n prynu a gwerthu ceffylau ac yn eu rhoi i gystadlu mewn rasys. +Roedd y cadeiriau yn y stafell aros wedi torri. +Byddent yn ffraeo yn barhaus. +Gyda phob dymuniad da posibl i chi yn unigol +Mae mewn tymer dda yn paratoi i dyfu pethau. +Dewiswyd thema tlodi plant a datblygiad llythrennedd am amryw o resymau +Mae bywyd yn anodd ar hyn o bryd. +Roedd yna ergyd i'r pen gyda'r ysgwydd. +Cafodd y pridd ei olchi i ffwrdd gan y tonnau. +Byddaf yn mynd dros y cyfieithiadau a gofyn am enghreifftiau gan bobl. +Mae gynno fo feddwl ei hun, a dawn i'w ddeud o. +Safodd Mary ar ei thraed a cheisio cadw'i llygaid ar agor. +Ga i sôs coch gyda fy tsips? +Dwi'n methu coelio fy mod ar fin cychwyn ar fy mlwyddyn olaf yma +Os ei di rownd y ffordd yna fe ddei di at y gerddi. +Mae hanes cynharach y castell yn ansicr. +Bu'n angerddol dros y Gwasanaeth Iechyd Gwladol a sosialaeth. +Oes siawns am sgwrs ffôn plîs? +Does dim o olion y tŵr wedi goroesi. +Gobeithio y bydd modd gwneud y pwynt yn glir. +Mae'r tŵr ar dair lefel. +Mi fydd na filoedd o ymgeiswyr ar gyfer hynny! +Does dim tystiolaeth ei fod wedi gwireddu ei fygythiad. +Roedden nhw'n crwydro'r ardal gyda'r Fari Lwyd. +Anghofiais i eu hatgoffa i olchi eu dwylo. +Daeth Dafydd Morgan yn sydyn i sylw mawr. +Mae hi'n gwrthod ei ddatganiad yn ddidwyll. +Mae'n sefyll i'r dwyrain o orlifdir yr Afon Gwy. +Wrth i'r gêm fynd yn ei blaen, mae cwpwrdd dillad Tommy yn ehangu. +Deffrodd un bore yn gwybod beth oedd hi i fod yn llwglyd. +Cafodd Carmel ei drosglwyddo i achos Saesneg ac adeiladwyd capel newydd, Calfaria, gerllaw. +Byddai'n absennol o gartref am gyfnodau maith yn dilyn ei hoffter o geffylau. +Heddiw, cyfrol ddylanwadol newyddiadurwr mwya'r diwylliant Cymraeg erioed. +Nes i fwynhau. +Mae hi'n ymddangos mewn tair gêm. +Doedd dim byd tebyg i hwn yn America gyfan. +Dododd ei wasgod o tan ei grys un bore. +Bu ei fab arall, John, hefyd yn aelod o Senedd De Awstralia. +Dyfarnodd rownd derfynol Cwpan Cymdeithas Pêl Droed Cymru ar chwe achlysur. +Ysgrifennodd gofiant i'r capel sy'n glasur digymar. +I ble wnaeth gweddill y nythaid hedfan? +Mae peth dryswch parthed ei gyfnod fel myfyriwr. +Dyma blaned y Ddaear. +Nofel dda er gwaetha'r llên-ladrad. +Cynddaredd cyfiawn un o rebels mawr llenyddiaeth Gymraeg yn erbyn y drefn. +Trafod y profiad Cymraeg fel rhan o'r byd go-iawn. +Erbyn gêm nesaf y gyfres bydd y ddau yn briod. +Atgoffodd hynny Mary o'r tro cyntaf iddi ei weld. +Mae nhw'n gorfod mynd nôl am sgrym. +Y gweinidog cyntaf oedd William Lewis. +Mae'r llythyr yn darllen, Dyma glust cyntaf Paul. +Mae e'n dal i gysgu'n sownd. +Mae bargeinion i gael ar y sêl. +Yr oedd ganddo ddarn mawr o wlad tan ei ofal. +Roedd hi am wneud yn siŵr ei bod hi wedi ffeindio'r ardd ddirgel. +Aeth y ddau ymlaen mewn distawrwydd am dipyn. +Dyma fy ail syniad wrth i mi ddatblygu'r logo +Dyma lle mae'r Iwerydd a'r Môr Celtaidd yn cydgyfarfod. +Dim ond dau ddiwrnod sydd ar ôl tan y gwyliau. +Yr oedd y rhosynnau gwylltion ar bennau'r gwrychoedd yn orlawn o oleuni. +Y fath iechyd sydd yn ei hesgyll. +Mae darnau bach o blastig wedi mynd i mewn i'r gadwyn fwyd. +Mae'r tywydd yn dal yn oer iawn. +Mae Georgia yn enw ar un o daleithiau Unol Daleithiau America. +Teimlwn eu bod yn barod i wrando, gwyn fyd na fedrwn siarad. +Wnei di gynnau'r golau i mi. +Moriasom gyda glan yr ynys, cyn troi i'r môr agored. +Gwelsom ddwy o ferched ein gwesty ymysg y lliaws. +Maen nhw'n casglu sbwriel bob yn ail ddydd Iau. +Gawn ni wneud jam gyda'r mwyar yma? +Un ffynhonnell o egni adnewyddadwy yw biomas. +Mae'n amser bwydo'r moch. +Wnei di droi'r golau ymlaen. +Dyna biti iddi ddod i'r glaw. +O noswaith yn yr haf, yr oeddem wedi cael mordaith stormus. +Rho'r neges i gadw yn y ffridj. +Y mae ôl dwylo pobl gynt ar lawer peth yn yr eglwys hon. +Ga i de du os gwelwch yn dda. +Ai'r cerrig yn fwy ac yn amlach fel yr elem ymlaen. +Dwy elfen sydd efallai yn absennol i fyfyrwyr +Mae'r gwenoliaid yma, ond does dim pryfed iddyn nhw fwyta. +Rhaid i bobl fod yn fwy caredig wrth ei gilydd. +Dydw i ddim yn defnyddio bagiau plastig mwyach. +Dw i ddim yn hoffi hwfro. +Rwy'n ofni bydd fy het yn chwythu i ffwrdd yn y gwynt. +Paid â ngadael i ar fy mhen fy hun. +Ar y cyfan, roedd adborth y cleifion yn gadarnhaol iawn +Mae'r plant wedi cael ci bach newydd. +Nodir hefyd y cysylltiadau rhwng asesu a chydweithio gyda'r gymuned +Mae'n fwy o hwyl mynd ar y trên. +Yr oeddem yn unigedd gwlad ffrwythlon dlos. +Dyma diwtor a fydd yn gyfarwyddwr canolfan mewn dim o dro +Wyt ti wedi gorffen dy waith cartref? +Awn ni i bigo afalau o'r goeden. +Mae lot o bryderon gan y genhedlaeth ifanc heddiw. +Druan ag e, mae e wedi cael ei gosbi am dynnu i lawr. +Mae wedi bod yn diogi'n y gwely drwy'r bore. +Hoffai dîm Lerpwl ddymuno'n dda iddo yn rhan nesaf o'i yrfa gyffrous. +Edmygem ei thŵr ysgafn uchel a'i lliaws ffenestri crynion. +A chododd ehedydd bach uwchlaw'r coed. +Dengys y bardd ei werthfawrogiad o fyd natur +Mae angen pedair teiar newydd ar y car. +Trown ar y chwith ar hyd-ddi, a dyma ni wrth Hafod y Bibell. +Doedd hi ddim yn gêm dda iawn. +Ar ôl hynny mynnodd gael dŵad i lawr o'i gadair. +Yr oedd y ffordd yn llydan a thai o boptu yr un fath. +Bu raid i mi ei gwadnu hi i chwilio am y lleill. +Yr oeddwn i a'm brawd yn y ffarm newydd ers rhai dyddiau. +Mae'r tegell wedi berwi. +Cafodd yr hanes fel yr adroddir ef uchod. +Mae'n bryd i'r gwalch ddychwelyd i'r Ddyfi. +Cai Pero fwy o ryddid drachefn. +Roedd o yn crio yn arw. +Yr oedd y ddau erbyn hyn wyneb yn wyneb a'i gilydd. +Mae eisiau i'r bêl ddod mas o'r sgrym bach yn gynt. +Erbyn hyn roedd hi'n annioddefol o boeth yno. +Yr oedd pawb wedi synnu ato. +Disgynnai tipyn o oleuni gwan o'r tân ar lawr. +Bore Sul hyfryd ym mis Gorffennaf ydoedd. +Mae ystlumod yn hela drwy wrando. +Mae'r gwenoliaid yn paratoi i adael. +Hwn oedd y pyramid hynaf yng Nghanol America. +Rhedai tarw cynddeiriog ar eu holau. +Cafodd yr ymddiriedolwyr weld y bwrdd yn yr arddangosfa. +Ni welodd y cnafon yn dda gymryd gofal gyda'i gopi. +Yr oedd hynny yn pwyso ar ei feddwl yn fawr. +Ond nid oedd Hannah yn fodlon. +Byddai rhyw ddwsin o'r bobl yn mynd i'r eglwys. +Dyw'r penderfyniad ddim wedi'i wneud eto. +Roedd hi'n amser gweld y meddyg. +Perthyn i'r oes o'r blaen yr oedd hi, rywsut ym mhob peth. +Aeth hithau i'r llofft i weled sut olwg oedd ar y lleill. +Alun Wyn Jones yw'r arwr o hyd. +Nid oedd unrhyw goll arbennig arno, ond yr oedd yn rhyw ddiniwed. +Dangosodd ei falchder drwy roi rhyw gyfarthiad a dechrau rhedeg o gwmpas. +Roedd wal uchel o boptu iddi, ac nid gwrychoedd. +Er holl ofal ei fam, yr oedd wedi rhedeg i'r môr. +Sonient am ormes dynion a'r cam yr oeddynt yn ei wneud â merched. +Yr oedd Elin yn ddynes gall, gyda'r gallaf yn y wlad. +Beth arall wnawn ni? +Wrthi hi y llefarodd y geiriau a ddyfynnwyd ar y dechrau. +Tri chais yr un oedd hi. +Clywodd weiddi mawr yn un o'r caeau ar y dde iddo. +Peidiwch â meddwl mod i am daflu'r hen rai heibio. +Doedd y llawr ddim yn lân iawn. +Bydden nhw'n paentio'r cerfluniau mewn lliwiau llachar. +Yr oedd ofn a gwaseiddiwch yn eu gwaed, megis. +Mae pryfed cop yn byw yn y tywyllwch dudew. +Dw i ddim yn deall beth aeth o'i le. +Ond dyma fi yn mynd i siarad gormod, mi wn. +Y mae hi'n ofnadwy acw. +Byddent yn ymladd weithiau. +Torrwch y llysiau i gyd yn fân. +Welis i rioed y fath beth. +Roedd y bwlch yn ddau bwynt ar bymtheg. +Bu wrthi gyda'r llyfr hwnnw am fisoedd, sut bynnag. +Siaradai am y sylwadau negyddol a gafodd. +Cerddais innau tuag adref. +Na, rydw i am gofio mai hen chwarelwr oeddwn i. +Drannoeth, aeth ein gohebydd i'r dref i wneud ymchwiliadau. +Y mae mis er hynny bellach. +Ni chlywodd mo'r enw erioed ei hun o'r blaen. +Roedd y dŵr yn yr afon islaw yn llwyd-ddu. +Rhedais fy llygaid i lawr hyd y golofn. +Roedd y teledu ymlaen yn ddistaw yn y gornel. +Yr oedd arni eisiau pob math o bethau. +Ni fedraf ddweud mai myfi biau fy nhŷ fy hun. +Dygwyd y rhaff iddi rhag blaen. +Mae'r llif lafa yn llifo bob cam i'r môr. +Da gweld fod Cymru yn gallu sgorio ceisiau. +Yr oeddwn i yn sefyll ar y buarth ym mrig yr hwyr. +Y bwrdd oedd y distawaf o'r tri a'r hawsaf i'w drin. +Y peth gorau y gallai efô ei wneud fyddai ei gwadnu ymaith rhag blaen. +Ni wyddai y meddyg pa beth a ddygodd y fath beth i'w ben. +Dim ond gwydraid o ddŵr gafodd hi. +Doeddwn i ddim yn disgwyl am yr arian yma. +Cefais gryn drafferth i'w cael i'r tŷ. +Fyddai hi byth yn dweud gair cas. +Roedd y babi hefyd wedi gwneud cryn alanas. +Hanner blwyddyn cyn hynny, yr oeddwn yn y ffarm gyda fy nhad. +Gwneud hetiau a boneti oedd ei gwaith. +Does dim llawer o amser cyn i'r llanw ddychwelyd. +Un o blant y môr oedd Siôn Morys. +Mae'n awyrgylch cynhwysol a charedig. +Cymer dy gyllell a datod flaen yr hosan. +Erbyn iddo ddeffro, dyna lle yr oedd y ci yn gorwedd yn ei ymyl. +Dywedodd y doctor ef yn bwyllog a difrif fel o'r blaen. +Safodd a'i gap yn un llaw a'r rhaff yn y llall. +Rhyw blant diarth ydi'r lleill! +Ceir llosgfynyddoedd effro yn Ynysoedd y Galapagos. +Yr oedd gan yr hen greadur fath o law fer at ei wasanaeth. +Arhoson ni yn hir iawn i weld y meddyg. +Bwriodd olwg arnaf, golwg cymysg o awydd a phoen. +Penderfynodd Hannah wneud un ymdrech arall. +Roedd difrod sylweddol ar ôl y tân. +Mae wedi colli pob sgrym hyd yn hyn. +Wel, mae hynny yn wir, os oes rhyw ddaioni ynddo. +Diolch byth bod yswiriant gynnon ni. +Roedd yno degell a phethau gwneud paned. +Dywedodd yn urddasol fod ei englyn ef yn sicr o gael ei brintio. +Mae'r ffesant yna yn cymryd ei hun ormod o ddifri. +Roedd yn sicr o fod wedi gweld Pero yn cario cwningen i'r tŷ. +Llwyddodd amryw o fasnachwyr y dref i gael gwahoddiad i'r cinio. +Yr oedd yn gorffen gosod y wifren. +Mae rhai pysgod hefyd yn bwyta'r llygaid meheryn. +Nid hynny, sut bynnag, oedd yn ei phoeni fwyaf. +Rwan, cymer dy gyllell a rhwyma hi wrth flaen yr ede. +Nid dyna oedd y gic orau. +Cyfrifai fod hynny yn ei godi uwchlaw ei debyg. +Roeddwn yn gosod tasgau lle bu rhaid i'r plant gydweithio a chyfathrebu hefyd +Rhoddodd ef y bwrdd. +Dyma fynydd mwya gorllewinol ucheldir Swydd Perth. +Ble mae'r hen dafarn? +Byddai'n rhywbeth i'w wneud gan na allai hi fynd allan. +Lewis William Lewis sy'n ennill y gadair. +Roedd yn chwarae yn safle'r hanerwr. +Mae e yn yr ardd heb ddrws. +Fe'i hetholwyd i Academi'r Celfyddydau Ymerodraethol ychydig fisoedd cyn ei farwolaeth. +Doedd Martha ddim wedi gwrthwynebu o gwbl. +Chymerodd e ddim sylw ohoni. +Mae'n dweud, oherwydd ei natur farus, nad oedd ganddo unrhyw ddewis arall. +Yn fuan wedyn, mae blaidd mawr, llwyd yn dod allan o'r goedwig. +Yn wreiddiol defnyddiwyd hufen go iawn; bellach mae defnyddio hufen chwisg yn gyffredin. +Wedi dwy flynedd o astudio cafodd ei ordeinio'n weinidog gan yr Annibynwyr. +Mae 'na ardd arall ar ochr arall y wal. +Roedd y weriniaeth newydd yn cael ei llywodraethu gan saith conswl. +Roedd ei wraig a'i blant bach wedi marw o salwch. +Gwilym Hiraethog oedd y dyfarnwr. +O fethu, bydd pob un ohonynt yn cael eu lladd. +Mae Elisabeth yn ei halltudio hi o'r llys. +Cydiodd yn ei raw a throi i ffwrdd. +Gweithiodd pawb yn galed ac roedd yr ysbryd cymunedol yn gryf iawn +Mae'n anodd cael llaeth mewn poteli gwydr. +Adeiladwyd estyniad i wasanaethu gwaith haearn Rhymni yng Nghwm Rhymni. +Tybed oedden nhw i gyd dan glo go iawn? +Doedd dim byd hardd amdani ar hyn o bryd. +Cafodd ei urddo fel cydnabyddiaeth am ei waith yn hyrwyddo astudiaethau dwyreiniol. +Dair blynedd yn ddiweddarach, ef oedd â gofal dros y labordy. +Gwisgai ffrog frocêd werdd a daliai barot gwyrdd ar ei bys. +Os na wnei di, mi fyddi di'n cael dy roi dan glo. +Defnyddiwyd yr adeilad hefyd ar gyfer pantomeim, datganiadau a chyfarfodydd gwleidyddol. +Fedri di ddarllen? +Mi wnaiff les i ti a rhoi stumog i ti am dy fwyd. +Yn yr ysgol cafodd ei lygad ei anafu pan daflodd bachgen garreg ato. +Bu hefyd yn un o arholwyr ymgeiswyr am urddau'r orsedd. +Wnaeth hi ddim meddwl am droi bwlyn unrhyw ddrws. +Mae'r llyfrau yn frith o ffotograffau, mapiau a graffiau. +Roedd y Ddeddf Stamp yn amhoblogaidd ymhlith y gwladychwyr. +Roedd ffenestr lydan gyda gwydr plwm ynddi yn edrych allan ar y rhostir. +Dyma yw'r ddamwain mwyngloddio waethaf yn y Deyrnas Unedig o hyd. +Roedd ganddo lais tenor. +Roedd y sŵn yn bell i ffwrdd, ond roedd yn y tŷ. +Fe fu Ambrose yn gystadleuydd brwd mewn eisteddfodau a chyfarfodydd llenyddol. +Hi oedd y ferch aristocrataidd gyntaf i ddilyn yr hobi honno. +Paid â becso am y llanast, bydda i'n clirio'r cyfan. +Jones oedd capten Llanelli ar gyfer yr ornest. +Cyhoeddodd lawer am gerddoriaeth. +Awyr y rhostir sy'n rhoi blas i ti at dy fwyd di. +Wnei di ddim gweld llawer am eu bod hi'n noson dywyll. +Cyhoeddodd nifer fawr o bamffledi tebyg. +Roedd deiliad y swydd yn gyfrifol am Weinyddiaeth yr Awyr. +Cafodd ei addysgu yn ysgol wirfoddol Victoria ac ysgol elfennol Trehopcyn. +Roedd popeth yn llonydd ac eto'n ddisgwylgar. +Mae yno luniau a hen ddodrefn. +Mae'r Hebreaid ar fin cael eu dienyddio. +Danfonodd y tîm sgowt i lawr i Forgannwg i gael golwg ar ei berfformiad. +Nod y gwarchodlu oedd hyfforddi menywod i wasanaethu mewn unrhyw argyfwng cenedlaethol. +Ond nid tasg syml sydd yn eu hwynebu. +Mae'n honni iddi gael ei magu yng nghanolbarth gorllewinol yr Unol Daleithiau. +Wna i dy helpu di gyda dy ddillad os wnei di godi. +I Gymro nid oes ynddi unrhyw beth nad yw'n ei wybod eisoes. +Magwyd Walter gan ei ewythr a'i hen ewythr. +Mae rhywun yn crio, ac nid person mewn oed ydi e chwaith. +Roedd Idwal Jones yn nofelydd ac yn awdur llyfrau ffeithiol Americanaidd Cymreig. +Mae Afon Conwy yn rhedeg i'r gogledd ar hyd y ffin orllewinol. +Gwelodd hi glwt o sgarlad a chlywed trydar llachar. +Roedd pawb mewn gormod o banig i feddwl am ferch fach. +Maent yn helpu portreadu llawer o storïau gwahanol. +Ei farchnadoedd mwyaf yw'r Deyrnas Unedig, Canada a'r Unol Daleithiau. +Mae Lloegr lawr ond dydyn nhw ddim am ildio. +Hafan fach ddymunol sydd yma, ac y mae gwedd gyfoethog a llewyrchus ar bopeth. +Yna mae Dan yn agor y sêff ac yn dwyn yr arian. +Dyw hi ddim yno ond ers tua wyth deg o flynyddoedd. +Roedd y rhostir bron wedi'i orchuddio gan niwl a chymylau llwyd. +Y mae'r Tŷ Croes ar gyfer yr orsaf agosaf yng nghyfeiriad Dolgellau. +Mae'r pedwar cefnder yn hoff iawn ohoni. +Y sgerbwd echelinol yw craidd canolog y corff dynol +Mae'r uned ddeintyddol symudol yn ymweld yn rheolaidd +Wedi i'r syniad hwn ddyfod i'w feddwl, bu Dafydd yn llawer tawelach. +Yr oedd mynd i'r dref yn beth pwysig. +Wedi cyrraedd Bethlehem bu'n chwilio am le i aros. +Bob bore byddai'n deffro yn ei hystafell gyda'r tapestrïau. +Y mae gwobr llafur bob amser yn dibynnu ar effeithiolrwydd y llafur hwnnw. +Aldi yw'r siop agosaf at ein tŷ ni. +Roedd yr howscipar yn wraig reit nobl, gyda bochau coch iawn a llygaid du. +Mae'n defnyddio ei ddeallusrwydd ac yn achub y pump mewn sawl antur. +Roedd John Thomas Rees yn gerddor, cyfansoddwr ac athro cerddoriaeth Cymreig. +Mary oedd enw ei ail wraig a bu iddynt dwy ferch a mab. +Gan hynny swyddi cyfochrog oedd ei dri phenodiad fel esgob. +Erbyn i mi gyrraedd, yr oedd y siop yn llawn. +Mae mam wastad yn deall beth mae rhywun yn ei feddwl. +Torrodd yr Ail Ryfel Byd ar draws gyrfa academaidd Newton-John. +Yn y gerdd hon, y mae'r bardd yn pwyso a mesur bywyd. +Adolygir operâu cynharach, gan gynnwys cyfieithiadau gyda newidiadau cerddorol perthnasol. +Cyhoeddodd Gwilym Hiraethog mai awdl gan Emrys oedd yr orau. +Fodd bynnag, nid yw'r math yma o wirydd yn medru adnabod pob gwall. +Mae nhw wastad ar y droed ôl. +Rwy'n mynd i liwio 'ngwallt yn goch tro nesa. +Dyw Cymru ddim wedi gwneud llawer o gamgymeriadau. +Doedd hi erioed wedi meddwl rhyw lawr am sut oedd hi'n edrych. +Yr oedd yntau mewn gwirionedd wedi dotio ato ei hun. +Tybed a oedd yna unrhyw flodau yn dal yn fyw yno. +Eisteddasom ar wal y fynwent tan i'r cloc daro dau. +Bu hefyd yn gwasanaethu fel cadeirydd is-bwyllgor celf Prifysgol Cymru. +Bydd dawns werin yn cael ei chynnal y noson honno. +I ymlacio roedd yn hoffi garddio a cherddoriaeth siambr. +Roedd yna dapestrïau wedi'u brodio yn hongian ar y wal. +Dyma oedd lladrad aur mwyaf Awstralia. +Dw i'n hoffi dy fam di. +Penodwyd ef yn gurad Helygain. +Pryd wnest ti molchi ddiwetha? +Roedd llawenydd bywyd wedi mynd. +Mae llysiau gwyrdd yn dda i ti. +Mae rhaid i bob ffurflen gael ei hystyried gan diwtor modiwl y myfyriwr +Arweiniwyd ni trwy lawer cyntedd i ystafelloedd eithaf cysurus. +Roedd Paul yn honni ei fod yn parhau i garu ei wraig. +Gobeithio fod pethau'n iawn ym Morfa. +Mae gen i grys T pinc newydd ond mae'n rhy fach i fi. +Blaenoriaid y capel yma oedd yn bennaf gyfrifol am ei chomisiynu. +Bellach, gellir yn ddiogel gyhoeddi'r hanes. +Dywedodd fod croeso inni weld y tŷ. +Pawb at y peth y bo ydi hi mewn gwirionedd. +Roedd ei thras Albanaidd ar ochr ei mam. +Doedd hi erioed wedi gweld plentyn yn sefyll mor llonydd. +Yr oedd ei wallt yn ddu a'i wyneb yn goch. +Cyfarfu â hen gariad yn y dre. +Ydi'r gwaith 'di gweld golau dydd, ta ar gael yn electronig? +Nid oes gwell addysg at fasnach yn bod na dysgu dwy iaith. +Nid yw hyn yn wir bob tro, gyda rhifau cymhlyg, fodd bynnag. +Fel rheol, y mae ynddi hi un gwasanaeth Cymraeg bob Sul. +Hyn sy'n dda. +Ar ôl cael ei hethol, cynhaliodd y swydd hyd ei marwolaeth. +Pymtheg o deithiau cerdded yn ardal bryniau Clwyd. +Lot pertach na phorfa gwta sy'n edrych fel AstroTurf. +Bu'n aelod o Undeb Ysgrifenwyr Rwmania am rai blynyddoedd. +Ail deitl y drioleg am daith enbyd ac anturus Dylan Rees. +Llyfr i blant am olwynion gan Catrin Hughes yw Argyfwng! +Nath o gychwyn ffeit ar y stryd. +Yn anarferol iawn, nid oes gan y fenyw adenydd. +Ydy eraill wedi cael yr un broblem yn ddiweddar? +Mae hi 'di bod yn gyrru negeseuon at ryw foi newydd. +Ti angen dwsto'r silffoedd llyfre. +Maen nhw'n pleidleisio ar y cynnig rŵan. +Teimlad o normalrwydd nid rhyw burdan hanner gwyliau hanner gwaith. +Dyma erthygl ddifyr ar ddwyieithrwydd. +Mae hefyd yn enw ar gawl, pan ychwanegir ychwaneg o ddŵr ar yr uchod. +Yr enw cyffredin ar yr ardal ble gorwedd y pelfis yw'r iau. +Nofel ar gyfer plant a'r arddegau gan Emrys Roberts yw Rheinallt yr Hofrennydd. +Gall fod yn ganlyniad i ryngweithiad prosesau geomorffolegol a phrosesau tectonig a folcanig. +Dihangodd tri ohonynt am eu bywydau ac i fyny i'r wyneb. +Gall cadair gael breichiau, ond does dim rhaid. +Mae'n derm hyblyg ei ystyr, a cheir sawl diffiniad o'r term. +Roedd hyn wedi dechrau rhoi ei meddwl segur ar waith. +Tynnwch y croen a'r hadau os yw'r tomatos yn rhai amrwd. +Mae ar gael fel anadlydd, hufen, pils, a chwistrell drwynol. +Am flynyddoedd, roedd hon yn ardal a bleidleisiai i'r Blaid Lafur. +Mae 'na densiwn, cymeriadau da, stori gref. +Roedd y diddordeb a'r cywreinrwydd yn wyneb Mistres Mary yn ei llonni hi. +Nofel am wrthdaro a'r bwlch rhwng y cenedlaethau. +Cyfrol yn cofnodi straeon am gymeriadau Ffestiniog, wedi eu casglu gan awdur adnabyddus. +Dylid trin llau pen cyn gynted ag y byddant yn cael eu gweld. +Gelwir cod meddalwedd perchnogol, fodd bynnag, yn ffynhonnell gaeedig. +Dim diddordeb o gwbl. +Dw i'n weipio hen ffonau a gosod Android Cymraeg arnyn nhw. +Rhaid i mi wybod beth ydy o. +Daw'r gair Omnibws o air Lladin sy'n golygu at ddefnydd pawb. +Ddaru o dy ddilyn di ddoe? +Roedd hi'n aelod o frawdoliaeth golegol. +Gwariodd ffortiwn yn gwella ac ehangu'r ystâd gan blannu coedwigoedd a chreu gerddi. +Yn ystod y Rhyfel Byd Cyntaf gweithiodd fel nyrs yn Serbia. +Mae ganddi ddwy chwaer iau. +Roedd Mrs. Medlock wedi gadael i Martha aros dros nos yn y bwthyn. +Mae 'na benbyliaid yn y ffoes. +Felly hefyd mannau eraill yng Nghymru. +Dyma'r cysglyn mwyaf cyffredin. +Dw i 'di cychwyn gwrando ar y podcast newydd. +Ffotograffau du-a-gwyn a disgrifiadau o flodau gwyllt Cymru. +Neidiodd y ci ar y wal. +Roedd ei thad yn ffermwr Gwyddelig, yn fasnachwr stoc ac yn berchen caethweision. +Dw i o blaid Cymuned Ewropeaidd ble dw i'n rhydd i deithio. +Os medra i ddyfynnu rhannau yn gwbl gywir, cael fersiwn Cymraeg yw'r nod. +Rhoddant gipolwg unigryw ar grefydd ym Môn yn yr Oesoedd Canol. +Dangoser y medr dynion eisoes wneud y ddau beth pwysicaf heb yr un iaith. +Fel arfer cysylltir y gair gyda defodau claddu Oes Newydd y Cerrig. +Digwyddais ddod ar draws ffrind wythnos yma a chael paned a sgwrs hynod bleserus. +Ceir ffotograffau lliw trawiadol ar bob tudalen. +Bydd rhaid gofyn ar ein rhan ein hunain. +Mae'r Afon Ceri'n rhedeg drwy'r gerddi. +I ba gyfeiriad nath o redeg. +Caiff ei gyfri'n bla mewn caeau cotwm. +Mae'r arweinydd wedi ei ddisodli. +Dyw'r llythyr heb gyrraedd. +Aeth ymlaen i ddysgu dylunio a chrefft yn Ely a Rhydychen. +Un o'i brif swyddogaethau yw cadw organau'r abdomen yn eu safle priodol. +Cadwch yn iach ac yn saff. +Pwy sgwenodd hwn? +Llyfr fydd o ddiddordeb i bawb sy'n ymwneud â byd addysg. +Mae'n hynod o debyg i wyfyn arall o'r enw'r Seffyr Sgolpiog +Dw i 'di cael un rŵan. +Roedd yn aelod o'r Blaid Ryddfrydol. +Detholiad o erthyglau byrion gan Hafina Clwyd yw Clust y Wenci. +Ychwanegir at naws y gwaith gan luniau pin ac inc. +Mae'r hwfer yn y cwpwrdd o dan grisiau. +Dros ddeg ar hugain o ddarluniau du-a-gwyn. +Nath 'na hofrennydd ddod i achub nhw. +Yno mae'n cyfarfod ag Elwyn ac yn gweld yr Ysbryd Arian. +Diolch i bawb sydd wedi ymateb i fy ymholiad. +Daeth y llythyr gyda bocs bach yn cynnwys hanner aren. +Weles i hi'n croesi'r hewl. +Mae'r ddynes yn crio. +Dwi eisiau chwarae rygbi dros Gymru. +Un bore, mae Siencyn yn sylweddoli bod Dan yn sâl iawn. +Ymunodd â'r mudiad heddwch a rhoddodd loches i wrthwynebwyr cydwybodol. +Mae'r casgliad yn cynnig detholiad cynhwysfawr o waith y bardd. +Yn ôl a ddeallaf, wnaeth ei dad ddim pasio'r iaith ymlaen iddo. +Yn aml, mae'r claf yn ei ddal heb sylwi ar hynny. +Nathon nhw chwarae golff trwy'r penwythnos. +Pa raglen oedd hon? +Yfodd wydriad o brosecco. +Braf cael gwisgo rhywbeth gwahanol. +Prif fwyd y siani flewog ydy gweiriau amrywiol. +Mae ei ochr gogledd dwyreiniol wedi cwympo yn rhannol. +Oes yna rywun yn dy boeni? +Wyt ti'n dweud bod eisiau gweithredu'n uniongyrchol yn ei erbyn? +Bach o hwyl a miwsig da. +Dyma restr o Aelodau Seneddol Plaid Cymru. +Yn gyffredinol, ystyrir bod y ffurf anadlu yn ddiogel yn ystod beichiogrwydd. +Oes 'na rywbeth ddylsem ni wybod? +Mi aeth yr awyren ar goll. +Penderfynais na rown byth bleidlais i ymgeisydd oedd yn caru'r genedl fawr. +Cyfres o astudiaethau Beiblaidd yn canolbwyntio ar y Drindod. +Nid yw'n cael ei argymell at ddefnydd plant. +Ond ta waeth am hynny, syrpreis teimladwy a hyfryd. +Cymerodd ei dwy law i fedru troi yr allwedd, ond fe wnaeth hi droi. +Mae nhw'n galw am streic cyffredinol wedi digwyddiadau heddiw. +Ydy'r fformat yma'n iawn? +Drama ddigri mewn dwy olygfa yn portreadu cymhlethdod bywyd teuluol. +Mae olion llithrennau geudy yn y tyrau dwyreiniol. +Dos i gau cwt yr ieir. +Ie, mae'n blincin oer! +Ond y mae'n hawddgar iawn yr olwg. +Yn dilyn, fe welir gwledydd nad ydynt yn aelodau. +Mae'n cymryd llai o amser ac ymdrech. +Mae hyn yn ymwneud â phrofiad ei theulu ei hun. +Dw i ddim yn dweud hynny. +Gall gymryd diwrnod neu ddau i'r symptomau ddiflannu'n llwyr. +Cyfweliad dewr iawn gan Arwel yn fa'ma. +Bu'n aelod o Urdd Meudwy'r Wawr Aur am rai blynyddoedd. +Claddwyd ei weddillion yn Llansadwrn. +Nofel antur i blant. +Chwedlau o Gymru, mewn cyfres o chwedlau a storïau i blant. +Dw i wedi ail ymuno â'r mudiad heddiw. +Fe'i hadroddir yn y person cyntaf. +Bu'n aelod o Gyngor Cyffredinol Cyngres yr Undebau Llafur am rai blynyddoedd. +Dyma'r nodweddion i edrych amdanynt wrth geisio gwahaniaethu rhwng y ddau. +Fedri di ddychmygu rhyw gelwydd newydd amdano? +Gwelwyd merched y ffrwythau'n prysuro i'r lan. +Roedd yn rhaid ei bod yn wahanol i lefydd eraill. +Dydd Mawrth Ynyd yw'r diwrnod sy'n ei ragflaenu. +Cafodd Jones yn ei addysgu yn Ysgol Ramadeg Penarlâg a Choleg Normal Bangor. +Mae hi'n pluo eira. +Cysyllta os oes rhywbeth yn rong neu angen ychwanegu. +Roedd wedi teithio gyda phum menyw arall o Gaeredin. +Dach chi isio dilyn fi? +Astudiodd y falwoden ar gyfer ei doethuriaeth. +Mi oedd y gangen yn chwifio yn y gwynt. +Yn gyffredinol caiff ei gymryd trwy'r genau. +Y genre a ddefnyddir ganddi gan amlaf yw'r rhamant hanesyddol. +Neidiwch ar y trên i Lundain, plîs. +Gellir gweld Moelydd Clwyd o du blaen yr ysgol. +Nôl ati nawr. +Cafodd unedau eu tynnu'n ôl gan eu bod yn disgwyl archwiliadau mawr. +Parhaodd y frwydr nes iddi dywyllu, pan ymgiliodd y Ffederalwyr o'r ardal. +Y tu allan i bob un o'r gwrthgloddiau roedd ffordd tan orchudd. +Roedd disgwyl i fyfyrwyr ysgrifennu nodiadau a thraethodau gradd yn y Saesneg. +Rydyn ni'n mynd ar ôl gemau eraill ar hyn o bryd, er hynny. +Protestiodd y dylai dedfrydau oes gyfan fod yn berthnasol i blant sy'n lladd hefyd. +Dyn yn eistedd ar graig yn y mynyddoedd. +Nid yw'r trawsyriant i gyd yn weladwy i'r defnyddiwr. +Mae'r ymyl ddeheuol yn fwy bas nag mewn mannau eraill. +Roedd ei gefndir artistig a diwylliannol yn gymysgedd o gerddoriaeth a chelfyddyd. +Mae'n gwneud synnwyr i'w wneud y ffordd honno. +Yr hyn a gynigiwyd gennyn ni oedd “Ti'n gwybod beth dw i'n ei olygu”. +Unwaith yn unig y caniateir i weithiwr dynnu arian yn y dull hwn. +Achosodd y gweithrediadau hyn i epidemigau o'r pla dorri allan. +Nid yw'r Bwrdd yn rheoleiddio gwasanaethau cystadleuol yn y sector nwy naturiol. +Mae hafau'n boeth a sych gyda llai o leithder. +Mae dyn a baban yn edrych ar bysgodyn gwyrdd mewn pwll bach. +Fodd bynnag, nid yw cryfder ei wenwyn yn hysbys ar hyn o bryd. +Mae gan y dref sawl onsen poblogaidd. +Roedd y diffynnydd yn honni bod ei wraig wedi llewygu yn y baddon. +Y bwriad oedd creu un wladwriaeth ac awdurdodaeth cyfreithiol. +Nid oes gan fomiau diwerth synhwyrydd, felly nid ydynt yn rhyngweithio â'r ffotonau. +Mae'r casgliad yn parhau i gael ei ddatblygu. +Mae newid hinsawdd yn cynyddu amlder a dwysedd digwyddiadau naturiol. +Ond cododd Catrin ei thrwyn i'r awyr. +Syrthiodd y ci gwerthfawr wrth draed y cipar, a bwled drwy ei galon. +Dringodd rhai o fynyddoedd uchaf y byd. +Dyn bychan, arafaidd a gochelgar dros ben oedd Dafydd Tomos. +Efallai y bydd yn rhaid i ni ohirio'r briodas. +Y mae'n debyg mai oddi wrth ei thad y cafodd ei balchder. +Dyna redeg penderfynol gan George North. +Roedd yna adolygiad swyddogol ar y teledu. +Edrychodd y bobl ar y ddau mewn syndod. +Rhaid i'r siarcod gael bwyta hefyd. +Troes yn ohebydd papur newydd. +Roedd rhai o'r prif ddynion yn awyddus am fynd i'r cinio hwnnw. +Dyw'r pryfed a'r trychfilod byth yn gadael yr ogofeydd. +Un diwrnod, cafodd Pero flas ar ddal cwningod. +Daeth gŵr dieithr yno un diwrnod, ac aeth o gwmpas i weld y lle. +Cododd o'i wely yn y bore wedi penderfynu. +Mae 'na guddfan adar wrth lan y llyn. +Ceir eira ar gopa mynydd uchaf Hawaii. +O'r diwedd, cododd ar ei draed yng nghornel y set fawr. +Doedd yr ystafell aros ddim yn gyfforddus iawn. +Mae'r band yn bwriadu ailffurfio ar gyfer y Steddfod. +Mae'r ynys yn bell o bob man. +Dyna'r bêl yn cael ei hennill yn yr awyr. +Aethant ymlaen tua'r hen bentref. +Y mae llawer yn ofni i'r helynt ail dorri allan. +Nid oes ynddo na synnwyr na chynghanedd. +Yr oedd ganddo raff oddi mewn i'r simnai i fynd i lawr. +Gweithiai yn y chwarel fechan oedd gerllaw. +Cyrhaeddodd y car yr amgueddfa yn ddiogel. +Crafangai bob ceiniog ynghyd o bob man y gallai. +Yr oedd ganddo dŷ bychan glanwaith a chyfleus. +Edrychodd arnaf fi wrth glywed y cloc yn taro tri. +Paid â meddwl mai dy galon di yn unig sy'n drom. +Doedd o ei hun ddim wedi meddwl i fod yn fardd cyn hynny. +Pagan oedd Ffinn, wyddost, ac yr oedd yn gwrando'n astud. +Buont yn siarad yn hir am yr hen amser. +O dipyn i beth, aeth ofnau Dafydd yn llai. +Nid oes hyd heddiw gof golofn ar fedd fy ewythr. +Roedd o wedi rhoi'r gore iddi yn rhy fuan o lawer. +Yr oedd yn cysgu yn drwm o hyd. +Gwelodd yntau ei fod yn rhoi braw iddynt. +Clywodd glec, a gwelodd Pero yn rhoi naid i'r awyr. +Yn fuan wedyn, yr oedd tai eraill yn y farchnad. +Yr oedd hynny yn torri ei galon. +Ni bu gyfarfod canu erioed er pan gychwynnwyd y côr na bu Dico yno. +Fase hi ddim yn cael mis o rodio fel mae hi yn cael. +Roedd hynna'n bendant yn garden goch. +Cafwyd golygfeydd trist o lygredd yn y môr. +Mae Capten Lennox a'i wraig wedi marw o'r colera. +Toc, daeth yn ei hôl i'r gegin, a'r gannwyll yn ei llaw. +Buan y trechwyd ei siomedigaeth gan gywreinrwydd. +Mae hi'n darllen y newyddion ar y radio. +Ond doedd neb yn fodlon dweud dim wrthi. +Hi oedd y plentyn mwyaf surbwch roedden nhw erioed wedi'i weld. +Mae ambell i un yn edrych yn sigledig y tu ôl i'r sgrym. +Roedd hynny'n wir hefyd. +Yr oedd y llanw'n prysur guddio'r tywod pan adawsom yr ynys. +Daeth y ci i'm canlyn. +Dechreuodd siarad mewn llais cras, parablus. +Edrychai ar yr aderyn bach gyda'i wasgod sgarlad fel petai'n falch ohono. +Maen nhw'n chwarae allan ar y rhostir drwy'r dydd. +Buon nhw'n hel llus ar y mynydd drwy'r dydd. +Methodd y dringwyr i ddychwelyd i ganolfan ddydd Mawrth. +Mae'n dipyn o frwydr o ran y gêm gicio. +Wedi i'r cerbyd fynd drwy gatiau'r parc roedd yna rodfa goed. +Doedd hi ddim wedi bod eisiau mynd i Lundain. +Maen nhw'n dweud mai'r ci a gerddiff a gaiff. +Falle fod yna broblem fach gydag Owen Farell. +Gwnaethant hwythau bopeth yn drefnus. +Rhaid oedd i mi dynnu fy nghot. +Teimlai Mary na fyddai'r daith byth yn dod i ben. +Daeth y fam ataf i ofyn a daflwn ddernyn arian drosti i'r het. +Fedri di ddim gwisgo dy ddillad dy hun? +Yr oedd y cnafon bach wedi tawelu erbyn hyn. +Ddwy flynedd ar ôl hynny, roedd yn fforman y shifft nos. +Mae'n bum milltir i'n bwthyn ni. +Fedri di wnïo? +Fysan nhw erioed wedi gadael i fi weini yn y tŷ ei hun. +Roedd y ffilm yn llwyddiant beirniadol ond nid yn llwyddiant ariannol. +Wrth wneud y recordiadau daeth yn rhugl yn yr iaith lafar. +Mewn gwewyr esgor hir ac anodd, mae hi a'r babi yn marw. +Mae copi o'r hunangofiant wedi ei gadw fel llawysgrif yn Llyfrgell Prifysgol Bangor. +Bu'n briod dair gwaith. +Clywir bachgen o fugail yn canu yn y pellter. +Bu iddynt dau fab a dwy ferch. +Meddyliai am y robin fel un o'r bobl. +Cynhelir gwasanaethau'r capel yn y Gymraeg. +Mae chwaraewyr yn defnyddio'r padlau i daro pêl yn ôl ac ymlaen. +Bu yno nes iddo ymddeol ar ôl diwedd yr Ail Ryfel Byd. +Gadawodd fab, John, a'i holynodd fel barwnig, a dwy ferch. +Mae hefyd restr gyda pharagraff am holl drefi a phentrefi Brycheiniog. +Serch hynny, mae hi'n parhau i ffieiddio'r syniad o orfod priodi. +Dechreuodd wrando ar rywbeth arall. +Roedd yr awyr las ddofn, uchel yn ffurfio bwa dros y rhostir. +Hoffai hi wybod a oedd hi'n mynd i fynd at bobl neis. +Bu i Lewis ac Anne ddau fab a chwe merch. +Mae rhaglen newyddion yn adrodd bod diffyg tystiolaeth wedi arwain at fethiant yr achos. +Wrth iddynt symud heibio i ddrws ysgubor, dechreuodd y gang saethu atynt. +Symudodd y teulu i Fryste o herwydd gwaith y tad. +Doedd y gwely blodau ddim yn hollol noeth. +Ar y dechrau, mae pethau'n ymddangos yn ddigon diniwed. +Gweithwyr oedd yn byw yn y tai y soniwyd amdanynt. +Roedd hi'n awdur a ysgrifennodd nifer o erthyglau a phamffledi ar hawliau merched. +Mae angen diet cytbwys arnom i'n cadw'n iach +Rhydd i bob gweithiwr ei farn, ac i bob barn ei gweithrediad. +Rwy bron â gorffen darllen y llyfr. +Teimlai'r ferch fach nad oedd neb ar ôl ond hi'i hun. +Does gen i ddim unrhyw lyfrau, meddai Mary. +Mae nofelau ffantasi yn boblogaidd iawn. +Mae ganddo gasgliad o bortreadau o bobl Brydeinig enwog o bwys hanesyddol. +Mi faswn yn rhyw gadi ffan garw petaswn i yn eu hanghofio nhw. +Bore da, o'nd ydi'r gwynt yn braf? +Gymra i baned arall os gwelwch yn dda. +Myfyrdodau byrfyfyr ar y nofel Gymraeg, yn nhrefn teilyngdod. +Wedi newid cyfrif Twitter. +Er bod y tŵr crwn hwn yn adfeilion mae modd mynd i mewn iddo. +Roedd ystafell gromennog ar y llawr cyntaf. +Methodd ei dad gael cyflogaeth reolaidd oherwydd meddwdod. +Mae'r adeilad bellach yn adfail. +Dyma nodweddion a oedd yn gyffredin mewn capeli Cymraeg y cyfnod. +Dim ond dau gymeriad sydd yn y bale, un dyn ac un fenyw. +Prif Weithredwr cyntaf y bwrdd oedd Paul Williams. +Dywedodd y data bod dosbarthiad y boblogaeth wedi arwain at ddiflaniad cyffiniau America. +Roedd eu lleoliadau ynysig yn eu gwneud yn brif dargedau ar gyfer môr-ladron. +Ysgrifennodd nifer o lyfrau ac erthyglau gwyddonol. +Y tro yma, nofel am gariad a chasineb mewn un teulu yng nghefn gwlad. +Sut yn union ydyn nhw wedi dyddio? +Yn llawer difyrrach yn aml na'r hyn a geir yn y canon llenyddol. +Roedd Griffith yn gasglwr hen lythyrau ac ysgrifau. +Y brifddinas ranbarthol yw Galena. +Yn ystod diwrnodau cyntaf bywyd mae plant yn dechrau caffael iaith +Awdl gan Walchmai fu'n fuddugol. +Yr oeddym oll yn dal ein gwynt bron. +Doedd yr awdurdodau dim yn rhoi digon o arfau i warchodwyr y tyrau. +Nodweddir gan afreoleidd-dra pigmentiad yn y croen a phroblemau'r system nerfol. +Rwy'n hoffi ffuglen wyddonol. +O'r diwedd cyrhaeddodd ei llawr ei hun eto. +Aeth i ben y gwrych i edrych a gwrando. +Yn y llythyrdy yr oedd ganddynt hen arfer o godi dwbl ar bobl ddieithr. +Cartref Ieuan Gwynedd, pa Gymro na theimla ei galon yn cynhesu wrth feddwl amdano? +Rhwng y cerrig, gwelem feysydd gwenith aeddfed, a llwybrau glaswelltog. +Mae gwreiddiau'r dosbarthiad hwn, fodd bynnag, yn nwfn yn y ganrif ddiwethaf. +Ni wyddai Catrin pa beth i'w ddweud +Roedd y ffurf hon o farddoniaeth yn ffefryn gan feirdd Lladin. +Hon oedd y blaid wleidyddol gyntaf a gofrestrwyd yn swyddogol ar ôl cwymp Comiwnyddiaeth. +Maent o faint coed gyda boncyffion cadarn a dail stiff, llydan. +Mae dyn yn tynnu cymeriadau â'i draed ar y stryd. +Oherwydd y llwyddiant, cafodd y gêm bedwar dilyniant pellach dros y blynyddoedd. +Mae dau o weithwyr mewn festiau oren yn gwneud eu swydd. +Roedd y Phariseaid wedi bod yn bleidgar. +Am y rheswm hwnnw, roedd yr amserlen ffilmio ar gyfer “Paranoia” yn un ddirgel. +Mi wnaf i edrych ar ei ôl. +I'r gwrthwyneb, gellir deillio'r achos cyfartal o'r achos anghyfartal. +Roedd cynllun newydd ar gyfer y cronadur gwasgedd wedi cynhyrchu canlyniadau amlwg. +Honnodd mai hunanamddiffyn ydoedd. +Mae'n amlygu cyfresi o ystyron ar draws y gweithiau. +Yna mae'r penodiad yn sefyll mewn grym tan yr etholiad nesaf. +Mae hynny'n fy nychryn. +Roedd yr ardal ar y pryd yn rhan o Swydd Caerhirfryn. +Mae metaddadansoddiadau wedi canfod perthynas arwyddocaol rhwng braster dirlawn a lefelau colesterol serwm. +Yn ogystal, anafwyd naw o gasglwyr hopys yn ddifrifol. +Disgrifiodd adferfau gwmpas datganiad neu berthnasoedd amserol amrywiol. +Oherwydd datblygu, prin y gwelir y rhywogaethau hyn yn yr ardal bellach. +Mae'r Brifysgol yn cynnig cyrsiau ar wahanol lefelau: Ôl-raddedig, Israddedig, Diploma a Thystysgrif. +Priodolwyd y lleihad i adeiladu cronfeydd dŵr, mwyngloddio a dyfrhau amaethyddol. +Mae'r enw'n fyr am “goncrit sy'n trawsyrru golau”. +Beth am fynd allan i de. +Mae'r is-ymddygiadau hyn yn cael eu trefnu i hierarchaeth o haenau. +Roedd barn y cyhoedd yn gymysg. +Rhwng Cyngresau, y Pwyllgor Canolog oedd yn rhoi cyfreithlondeb i'r arweinyddiaeth Sofietaidd. +Mae'n un o ddisgynyddion mewnfudwyr Indiaidd. +Ni wnaeth eu priodas gynhyrchu unrhyw plant a oroesodd. +Dim ond un derfynell a ddefnyddir ar gyfer gwasanaethau domestig a rhyngwladol. +Mae'r Bathodyn Athro Academi'r Awyrlu yn fedal barhaol. +Sicrhawyd diogelwch gan gynlluniau llofnod digidol allweddol cyhoeddus. +Mae partneriaethau strategol hefyd wedi datblygu i ddatrys nifer o broblemau busnes cwmnïau. +Priodolir sawl rheswm i hyn. +Yn ddiweddar, mae prosiect dŵr mawr wedi'i gwblhau. +dyn yn ceisio cyffwrdd dolffin neu forfil neu rhyw fath o anifail môr +Roedd ei wyneb yn arw, ond yn edrych yn garedig ac yn eithaf dymunol. +Mae'r nofel fer yn nodedig am ei strwythur naratif deuol. +Roedden nhw'n gwarantu bod y pecynnau yn mynd i gyrraedd o fewn pedwar mis. +Dau ffrind yn aros i fynd i ar y bws teithio. +Ychwanegwyd rhai o'r lefelau cyfagos i hyn, ond nid yn gyfan gwbl. +Mae'n dal ei bortffolio ar hyn o bryd. +Defnyddiodd, er enghraifft, ddadansoddiad ffactor, dull ystadegol, i gefnogi ei fodel personoliaeth. +Maent yn dod yn aeddfed llawn yn eu hail flwyddyn. +Fodd bynnag, gallant feddiannu tiriogaethau sydd wedi'u gwagio pryd bynnag mae'r cyfle yn codi. +Nodir enwau Almaeneg mewn llythrennau "italig". +Mae'n storio amrywiadau byd eang. +Mae'r amodau mewn gwersylloedd llafur yn amrywio'n fawr yn dibynnu ar y gweithredwyr. +Mae pwerau hudolus y dŵr yn ei gwneud hi'n bosibl iddi oroesi'r gosb. +Mae dadlau ynghylch cyd-destun yr ymadrodd hwn. +Dywedwyd iddo gael ei ysbrydoli gan gariad yn ystod y frwydr. +Ar yr un pryd mae'n rhyddfrydol yn ddiwylliannol ac yn gymdeithasol. +Cynlluniwyd yr iaith i “hwyluso” datblygiad rhaglenni cyfochrog. +Mae ganddi hefyd linell dywyll sy'n mynd yn llorweddol ar draws ei llygaid. +Yn y ddelwedd honno, dangoswyd Mary hefyd yn pwyntio at ei "Chalon Bur". +Mae ganddyn nhw Gyngor deuddeg person. +Mae Archer yn galw hyn yn ddilyniant morffogenetig. +Tref yn gwasanaethu'r ardaloedd cyfagos ydyw. +Dyn a dynes yn cerdded heibio i arwydd gofal. +Plentyn ifanc yn dechrau ei yrfa pêl fas +Bachgen ifanc yn ymarfer camp ymladd. +Arhosodd yn ffrindiau gyda'r awdur ar hyd ei oes. +O'th “lyfr” di! +Y Palas yw canolfan cangen weithredol y llywodraeth fwrdeistrefol. +Mae'r tai eu hunain yn cynnwys dewisiadau pensaernïol yn gyffredinol yn unol â'r gymdogaeth. +Mae deltoidau'n codi mewn amryw o feysydd mathemateg. +Roedd y gyfres hefyd yn boblogaidd yn Seland Newydd. +Cafodd ei ddiarddel o'r ysgol ganol am ymddygiad gwael a meddwl yn rhydd. +Mae hi wedi bod yn actio ers pan oedd hi'n ifanc. +Mae planhigion delfrydol wedi'u tyfu o doriad coesyn ac o hadau. +Roedd crysau tebyg yn cael eu defnyddio gan dimau Cynghrair Pêl-droed Americanaidd y Byd. +Mae beicwyr yn reidio drwy goedwig wrth i wylwyr eu cymeradwyo +Mae'n beryglus iawn. +Mae'n cynnig pêl-fasged dynion, pêl fas, trac a chae, a thraws gwlad. +Mae'n saig boblogaidd iawn yn Iran a Gweriniaeth Azerbaijan gyfagos. +Y canlyniad oedd colli'r siarter. +Methodd y ddau gyntaf yn eu hymosodiadau a chawsant eu saethu yn eu hymdrechion. +Roedd hi'n awdur ar gyfer papurau newydd a chylchgronau. +Mae gan y gymuned nifer o israniadau o amgylch llyn preifat. +Golygfa stryd gyda cheir wedi'u parcio a siop fwyd fechan +Defnyddir cynhwysion eraill hefyd. +Mae'n cynnig ystod lawn o gyrsiau o gyfleusterau cyn-ysgol feithrin i Ddiploma Bagloriaeth Ryngwladol. +Felly, arhosodd y gwaith yn gyfan fel y'i trefnwyd yn wreiddiol. +Ni wnaethant ailadrodd eu llwyddiant cynharach ar ôl y newid. +Mae'r Hen Llynges yn adnabyddus am eu steil denim sydd byth yn newid. +Fe wnaeth nifer aelodau'r Rhyddfrydwyr ostwng i saith. +Dyn a menyw yn eistedd ar ben car wedi ei barcio. +Cyhoeddodd ei hymddeoliad y flwyddyn honno. +Mae cynnwys y rhaglen yn cael ei newid bob blwyddyn. +“Metro” oedd ei gystadleuydd. +Mae coets gwersylla ger y platfform tua'r gorllewin yn cynnig llety gwyliau. +Roedd yna hefyd Eglwys Annibynnol Bresbyteraidd. +Gall bar hario wedi'i gysylltu â strap tynnu fod yn angheuol. +Ychwanegodd yr adran gaffeteria newydd, llyfrgell a llefydd ystafell ddosbarth agored. +Nid yw ei linach wedi ei sefydlu'n bendant gan haneswyr, fodd bynnag. +Yn ei destament, rhoddodd ei lyfrgell breifat fawr i'r ddinas. +Fe'i defnyddiwyd yn bennaf ar gyfer fersiynau offerynnol trosleisio, yn aml ar ochr-b recordiau. +Roedd yn Bresbyteriad gweithgar ac yn aelod o'r Seiri Rhyddion. +Nid oes unrhyw blaid wedi ennill y mwyafrif o seddi ar ôl hyn. +Rhedodd y plentyn ifanc yn y crys du a jîns i lawr y llwybr. +Mae dyn hŷn yn gweithio ar brosiect gwaith coed. +Mae amgodwyr a datgodwyr yn defnyddio'r graffiau hyn yn helaeth. +Mae cyfraith gyffredin yn derm gyda gwreiddiau hanesyddol yn system gyfreithiol Lloegr. +Creodd yr iaith raglennu Perl. +Dyma yw ymddangosiad olaf y cymeriad. +Mae hwn ar gyfer rhamant ... ! +Merch ifanc â rhubanau gwallt yn dylyfu gên. +Adenydd neu ddim adenydd, mae'n ymddangos fod ganddo libido sy'n debyg i gardd-amrywiaeth cwrcyn. +Mae newid anfeidrol fach y fector yn fesur o'r crymedd. +Datganodd yr erthygl fodolaeth y gêm i fod yn "amhendant". +Mae ci brown a gwyn yn rhedeg gyda'i geg ar agor. +Maen nhw hefyd yn cael eu gwahanu yn ôl lliw. +Yn gyffredinol, mae'r risgiau'n isel iawn os nad oes unrhyw ffactorau risg eraill. +Am gyfnod, serch hynny, roedd y cyflenwad o "ffyliaid mwy" wedi bod yn rhagorol. +Mae gan y maes awyr hediadau i Ganada, Mecsico, Caribî ac Ewrop. +Gweler y llenyddiaeth sydd ar gael ar gyfer damcaniaeth parth. +Mae'r diagram ar y dde yn darlunio naid. +Dynes mewn gwisg binc a dynes mewn crys oren yn cerdded ar draws stryd. +Mae'n hy ac yn rhodresgar ac yn dod yn gyfreithiwr. +Felly addawodd fynd â hi i'r gwylnosau ar ôl swper. +Teulu yn eistedd allan ar eu bwrdd. +Dyn yn bwyta ac yn dal babi â het wen. +Canlyniad y cynllunio manwl oedd ymosodiad bron yn ddiwrthwynebiad i mewn i'r amlwg. +Mae'r gêm yn rhoi tri bywyd a thri pharhau i'r chwaraewr. +Bu'n rhaid iddo lwyddo mewn prawf arall o'i fawredd trwy gario yn y ras. +Na; ond mae ganddo lawer o ffrindiau mynwesol. +Ef hefyd oedd y person olaf a enwebwyd yn Gyfarwyddwr Cynorthwyol i farw. +Mae grŵp o bobl wedi ymgasglu mewn ardal gyhoeddus. +Aeth yn dywyll, chwibanodd y gwynt, gwichiodd a griddfanodd y coed. +Gwrthododd yr awdurdodau'r cais hwn fel twyll. +Mae dynes yn sefyll mewn twll draenio mawr. +Daeth yr adeiladau hynny yn Neuadd Gerdd a Sefydliad y Mecanyddion. +Tarian goch gyda latis aur yw hwnnw. +Mae dyn ar feic modur yn perfformio camp yn yr awyr. +Cymerir bwledi ac arfau ar gyfer paru clwyfau a balisteg. +Cath wen yn eistedd ar wal garreg. +Roedd ei lywodraeth wedi cefnogi'r Unol Daleithiau yn rhyfel Irac. +Y dull arall cyffredin yw llinellu, sy'n defnyddio llinellau yn lle dotiau. +Mae menyw hŷn yn defnyddio dringwr grisiau mewn dillad nad ydynt yn rhai chwaraeon. +Nododd ei fasnachwyr ei greadigaethau fel rhai gwreiddiol gan gerflunwyr eraill. +Mae'r twnnel tua o hyd, yn cynnwys ffordd o dan ddŵr. +Mae ei waith wedi cael ei gyfieithu i Saesneg, Ffrangeg, Sbaeneg, Eidaleg ac Almaeneg. +Mae mwy o heddlu yno i chwalu'r dorf gyda phibelli dŵr tân. +Mae'r mynediad cyntaf i'r cyfeiriadur o leiaf yn cael ei berfformio +Mae'r radd ôl-raddedig mewn perfformiad deuawd piano yn unigryw yn Ewrop. +Ar lefel yr ail lawr roedd cyfres o lefydd wedi'u cerflunio a ffurfiai heulfan. +Etholir swyddfeydd llywodraethwr ac is-lywodraethwr ar yr un tocyn. +Dechreuodd y rhan fwyaf o'r labeli oedd wedi eu rhestru yn y paragraff blaenorol. +Mae ci du a gwyn yn llamu drwy'r rhwd gwenith tal. +Mae'r ferch yn y ffotograff i weld yn mwynhau chwarae badminton. +Rydym wedi bod yn gefn i'n gilydd erioed. +Mae cydamheuon yn arwain at ysgariad. +Ac yn ddryslyd iawn. +Mae'r term "bath" yn cyfeirio at siâp y car. +Gellir ei rigio i gael ei hwylio'n unigol. +Mae ganddo isffram olwyn gynffon sefydlog gyda sbats ar y prif olwynion. +Roedd ei ail erthygl y flwyddyn honno yn darlunio model stocastig o symudiad Brownaidd. +Mae ci'n rhedeg ar eira a chanddo belen eira yn ei geg. +Mae'r gro hefyd yn ffurfio dyfrhaen sylweddol ar gyfer yr ardal. +Claddwyd ei gweddillion yn y fynwent Iddewig. +Mae llawer o bobl ar y stryd yn dal balwnau. +Maent hefyd yn cael eu hadnabod fel “siroedd hynafol”. +Mae gan bob un o'r adrannau hyn nifer o is-rannau neu unedau. +Ychwanegwyd pocedi cudd at y dillad a wisgwyd yn ystod y negeseuon cyfrinachol hyn. +Miloedd o bobl yn mynychu rali neu ddigwyddiad. +Mae'r gân ar gael i'r cyhoedd. +Mewnfudwyr o'r Almaen oedd ei ddau riant ac roedd y ddau ohonyn nhw'n alcoholig. +Roedd y tryc llusgo yn cario'r un llwyth echel â'r gyrwyr, oedd yn anarferol. +Dirywiodd ei iechyd yn gyson. +Fe ymddiswyddodd ddwy flynedd yn ddiweddarach, pan ganfuwyd nad oedd hyn yn wir. +Nid oedd dogfen ffurfiol. +Rwy'n deall y teimlad hwn. +Mae ganddi liw bron golau yn y ffilm. +Profodd aelodaeth y band yn broblem drwy gydol ei yrfa. +Roedd economi Llyn Melville yn ymwneud â physgota a ffwr. +Mae'r algorithm sy'n cynhyrchu cardiau angen system-gudd gyda dwy briodwedd allweddol. +Byddaf yn eistedd yn fy ystafell weithiau ac yn llefain. +Danfonodd y wlad dau ffensiwr. +Yn ogystal â gwaith yn digwydd i baratoi wyneb chwarae'r cae. +Hefyd dim gwasanaeth ffôn symudol. +Bachgen gwallt melyn mewn crys coch a siorts glas yn peintio ar gynfas. +Mae'r baneri'n cael eu llwytho i lawr o'r gyfnewidfa. +Mae'r corff yn cwympo ymlaen gan ollwng nid gwaed ond olew peirianyddol gradd uchel. +Fe'i nodweddwyd gan wrthdrawiad damcaniaethu ar ddull gwareiddiadau. +Mae'n aeddfedu'n gynnar, ac mae'n wydn i'r oerfel ac yn gwrthsefyll afiechydon ffyngaidd. +Mae amrywiadau yn lleol i reolau. +Defnyddir cynwysyddion yn aml mewn cymwysiadau amlgyfrwng. +Dyma haneswyr a chroniclwyr mwyaf a mwyaf arwyddocaol y cyfnod. +Mae pwyslais cryf ar berfformio styntiau. +Mae bachgen yn gorwedd ar fainc bwrdd picnic. +Mae'r ardal drefol mewn rhan arbennig o wyrdd o Wlad Pwyl. +Roedd y gwn yn parhau i fod yn ei feddiant. +Mae'r effaith yn gryfach yn y nos am yr un rheswm. +Neu efallai y gwnawn ni'r model yn fwy realistig byth. +Mae hi o dras Tsieineaidd. +Mae'n awdur nifer o werslyfrau cyfreithiol. +Gŵr pryd tywyll yn chwarae rygbi. +Mae'n brin o sugnydd cefnol atalbysgodyn ac mae ganddo gorff mwy cadarn. +Ar ôl swper, roedd William eisiau ysgrifennu llythyr. +Yn ein dydd ni, cafwyd sïon bod rhai gangiau yn gwneud cyfamodau gwaed. +Roedd y model hwn yn cynnwys ffyrc gwrthdro a llyffu arddull rasio wedi'i ddiweddaru. +Yn anffodus dydyn ni ddim ar ein pennau ein hunain yn y byd hwn. +Mae'r cyfansoddyn yn crisialu motiff ciwbig o'r enw strwythur fflworit. +Arhosodd y criwser gwarchodedig yn segur am yn agos i dair blynedd. +Fodd bynnag, mae llawer o eithriadau. +Mae ei gŵr bob amser i ffwrdd ar deithiau busnes neu yn y gwaith. +Cafodd ei erthyglau a'i alw i'r Bar, ond ni wnaeth ymarfer y gyfraith. +Cymerodd dair blynedd cyn y gallai ddechrau gwerthu am bris agosach at bris llawn. +Mae bellach yn byw ger Bonn. +Yn y diwedd, dechreuodd ychwanegu lliw at ei phrintiau â llaw. +Yn Cannes roedd hi gyda ni trwy'r amser. +Grŵp cerddorol yn perfformio o flaen cynulleidfa fyw. +Mae hwn bellach yn safle abseilio poblogaidd. +Cafodd y tywydd gwael ei restru fel ffactor cyfrannol. +Ar gyfer bosonau, fel ffotonau a glwonau, mae "n" yn eilrif. +Pa mor gryf ydych chi? +Bum mlynedd yn ddiweddarach daeth yn brifddinas daleithiol a derbyniodd statws dinas. +Cafodd wersi gitâr am bedair blynedd ar ôl hynny. +Mae'r gyfraith newydd yn gosod safonau ar wahân ar gyfer rheoleiddio cwmnïau buddsoddi. +Addawodd ymladd yn erbyn diweithdra, dirywiad economaidd a llygredd. +Mae'n arlliw canolig disglair marŵn hanner ffordd rhwng brown a rhosyn. +Ni ddangoswyd i mi fedd fy mam erioed. +Mae'n agored am ddim ar ddydd Sul, Gwyliau Cyhoeddus ac ar gyfer digwyddiadau arbennig. +Ar adegau, mae hefyd yn llwfr ac yn rhagrithiol. +Dau ddyn yn gwisgo helmedau beic modur, un yn dal darn o bapur. +Mae rhywun yn dringo wal dringo cerrig. +Roedd yn cynnwys cyfres o sgarmesoedd dinistriol ac ymgyrchoedd awyr bron yn ddyddiol. +Mae gan fy llais rhyw fath o sŵn digynnwrf. +Roedd gan y grŵp ei ganolfan yn Ne Gwlad Thai. +Mae hyn yn golygu amser cyfartal ar gyfer pob ymgeisydd ar bob rhwydwaith darlledu. +Llawer o ffenomenau corfforol wedi eu hastudio ar y strwythurau hyn. +Mae'r gôl-geidwad yn cyrcydu o flaen y gôl. +Nid yw amserlen gadarn ar gyfer adeiladu wedi'i gwireddu eto. +Gweithiodd a chyhoeddodd waith ar anifeiliaid di-asgwrn-cefn, amffibiaid, ymlusgiaid, mamaliaid ac adar eraill hefyd. +Mae'r safle yn cael ei gynnal fel parc ar hyn o bryd. +Mae'r bachgen côr wedi dychwelyd i ganu yn eglwys ei dad. +Dyma le mae'r llyfr yn symud i mewn i stori Khan. +Etifeddiad trechol awtosomaidd yn cael ei adrodd hefyd. +Dyfarnwyd yn wreiddiol fod y gic yn fethiant. +Defnyddir monoglyseridau yn bennaf fel gwlychwyr, fel arfer ar ffurf emylsyddion. +Mae'n debyg bod y condemniedig wedi gwrthod yr holl gynigion o'r fath. +Hedfanodd Ann i'r llawr, ei wyneb yn loyw a'i llygaid yn pefrio. +Dyn yn rhawio eira o flaen tŷ. +Roedd perfformiadau corawl yn draddodiad cyffredin ym mhob dinas-wladwriaeth yng Ngroeg. +Rwyf am ddechrau'r swydd ar garlam. +Crwydryn yw Sri Lanka, wedi ei gofnodi mewn amser unigol. +Gall fod cysylltiadau trydanol ychwanegol ar hyd y dirwyniadau; tapiau yw'r rhain. +Mae'r ci brown bach yn llamu dros y wal frics. +Mae'n llai o ymrwymiad. +Mae'r strwythur hwn o gyfaint cyfyngedig. +Nid yw'n lladd chwain llawn dwf. +Ymhlith ei ddaliadau mae cofnodion Rhyfel Cartref ac achyddol. +Yn ddiweddarach, daeth yn hyfforddwr sglefrio ffigur. +Mae llawer o'r cerddi unigol hyn yn boblogaidd mewn antholegau. +Llafn gwthio dwylafn pren neu fetel. +Mae e'n gyd-drefnydd cenedlaethol yn Sri Lanka ar gyfer Cyfrifiad Adar Dŵr Asia. +Daeth twf gydag oes y “Bŵm Babanod” ar ôl yr Ail Ryfel Byd. +Mae rhai â chysylltiad agos â dathliadau Swedaidd. +Mae ei brif gyfraniadau gwyddonol ym maes symud cyrff nefol bach. +Mae dau ddyn yn gweithio ar ffenestr gron gan sefyll ar gadeiriau. +Maen nhw'n ffrwydro allan o'r ystod fridio pan fydd y cnwd o gonau'n methu. +Mae gennyf fusnes sy'n gadarn yn ariannol. +Roedd y blaid hefyd yn wynebu anawsterau ariannol a gorfod gwerthu asedau'r blaid. +Meddyliais, gall y dyn hwn ei chwarae. +Mae'r gweithredwr yn llywio'r taflegryn â llaw gyda ffon reoli fach. +Mae'r ganolfan niwmotacsig yn ei rwystro. +Roedd y set hon yn cynnwys adeiladau a gorsaf drenau, ymysg pethau eraill. +Mae Neo-Ryddfrydiaeth yn Gyfalafiaeth ymosodol. +The Roots sydd wedi derbyn y mwyaf o enwebiadau heb ennill, gyda phump. +Fodd bynnag, mae sawl Prif Weinidog yn y gorffennol wedi bod yn Gristnogion. +Y thema oedd heddwch, democratiaeth, a datblygu. +Bu farw Molson wrth ymladd yn y Rhyfel Byd Cyntaf. +Denodd lliw anarferol y mwg fwy o wylwyr. +Mae'r warchodfa yn ardal o goedwig law, coetir a glaswelltir arfordirol. +Aethoch chi i Baris? +Ni ddatgelwyd telerau ariannol y caffaeliad. +Fel gyda'r Atlas Manceinion, roedd yn defnyddio cydrannau arwahanol, yn enwedig transistorau germaniwm. +Cyn troi'n actor pornograffig, bu'n gweithio fel gyrrwr tryc. +Mae'n bosibl mai dyma'r record bwysicaf ym myd seiclo. +Cofnodir iddo gael ei drywanu i farwolaeth yn ei addoldy. +Mae'r doctor yn cytuno y bydd y syniad yn gweithio. +Mae hyn yn esbonio'r gwahaniaeth rhwng y ddau dabl. +Mae'r bennod ynghylch claddu yn arwyddocaol. +Ceir rhestr gyflawn o ganlyniadau yn yr erthygl am brif bencampwriaethau hŷn. +Mae'n cael ei ddefnyddio'n aml mewn coginio Japaneaidd, fel topin ar gyfer “sekihan”. +Cynhelir y seremoni wobrwyo yn Llundain. +Mae amheuaeth gan lawer bod pob un yn llym. +Mewn anobaith, hedfanodd Thor i mewn i'r bod ynni, gan amharu ar ffurf Ymosodiad. +Roedd hi hefyd yn etholfreintiwr gweithredol. +Cyn iddo gael y gorchymyn symud, cafodd ei alw'n ôl i Tsieina. +Mae gan lawer o bobl y ddau fath. +Mewn gwirionedd, defnyddir y systemau anghlasurol mwyaf cyffredin mewn mathemateg adeiladol. +Tri pherson yn bwyta mewn caffeteria. +Mae cynlluniau ar gyfer adeiladu pont newydd i leihau traffig drwy'r canol. +Y maes awyr yw un o'r unig gyflogwyr ar ôl yn y gymuned. +Dydy'r gwaith cynnar ddim yn dangos unrhyw wrthrychau heblaw pibell yn cael eu defnyddio. +Cynigiai dechnoleg arloesol yn ei fotor a steil trawiadol. +Mae nifer o'u gemau bellach yn cael eu cario gan gyhoeddwyr eraill. +Dyma'r eicon y mae Cristnogion Uniongred fel arfer yn cyffesu eu pechodau. +Hi oedd ffefryn y bwcis cyn y gystadleuaeth i ennill, ynghyd â Ffrainc. +Parhaodd y gwaith adeiladu er gwaetha'r gwrthwynebiad. +Enghraifft o'r fath iaith yw set o rifau cysefin. +A hithau mewn lleoliad strategol, roedd y dref yn amddiffyn dinasoedd i'r de. +Gellir ei ddefnyddio ar gyfer rhai profion gweithredol hefyd. +Mae'r cyngor yn pleidleisio ar gynigion, penderfyniadau a threfnolion ac yn eu pasio. +Am gyfnod byr rhoddodd y gorau i'r llynges ac ymunodd â'r musketeers. +Nid oes neb yn gwybod dim am yr awdur. +Nifer o ddynion yn cerdded heibio i babell yn sylwi ar arwydd. +Mae ci brown yn ceisio dal Ffrisbi. +Y Dwyrain Canol, De-ddwyrain Asia ac Affrica. +Chwarterwr yn taflu'r bêl i chwaraewr cefn. +Yn ystod y Rhyfel Byd Cyntaf, trosodd ei ffatrïoedd i gynhyrchu pelenni ffrwydrol. +Roedd rhwydweithio cymdeithasol yn greiddiol i'r sefydliad. +Mae lleihadaeth gynnil-damcaniaeth systemau, er enghraifft-yn cynnwys lleihau'r tu mewn i'r tu allan. +Mae dau o bobl yn reidio mewn car rasio oren. +Ond mae'r achos yn dibynnu'n gyfan gwbl ar dystiolaeth fewnol a beirniadaethau goddrychol. +Dyma sy'n cyfateb i addysg gyrwyr ar gyfer gyrwyr ceir. +Mae ci bach gwyn gyda'i dafod allan yn neidio er mwyn dal tegan. +Faint o liwiau sydd yn sbectrwm yr enfys? +Roedd hi'n hyfryd gyda mi. +Mi gei di wybod pa mor galed ydw i. +Mae bachgen bach heb grys yn neidio yn y dŵr sy'n llawn malurion. +Ar ôl cau'r gloddfa, arhosodd rhai siafftiau a mynedfeydd ar agor. +Sut allwn ni wneud iawn i chi? +Felly'r cyfan a welwch chi fydd y fi'n chwerthin. +Nid yw patholeg methiant awtonomig pur wedi'i ddeall yn llwyr eto. +Mae adipocytau'n rhyddhau leptin mewn ymateb i'w dognau o fwyd. +Bellach, mae ganddo bum cangen yn Nigeria. +Roedd y peiriant tân ar ei ffordd i argyfwng. +Ar ôl ei farwolaeth dyfarnwyd iddo Groes Lawryfog Sant Ferdinand, anrhydedd filwrol uchaf Sbaen. +Heddiw mae wedi cael ei adfer yn safle archeolegol. +Hwn yw'r corff llywodraethu ar gyfer y myfyrwyr. +Yna byddai'r Ca yn mynd ati i leihau'r catod. +Mae symptomau dechreuol yn cynnwys anoddefiad, gweddillion gastrig cynyddol, chwydd abdomenol a charthion gwaedlyd. +Mae glawiad yn amrywio'n fawr yn Nicaragua. +Fel ei frawd hynaf, ni chymerodd unrhyw ran weithredol yn y Rhyfeloedd Cartref. +Gall tynnu gynnwys trychiad syml, tynnu endosgopig, neu liposugno. +Ychydig o bobl yn cerdded wrth drac rasio cyn ras. +Mae'n edrych i'r drych ac yn ymuno â'r parti wedyn. +Mynnodd hefyd ni ddylai diwylliant fod yn llonydd. +Yng ngorllewin yr Unol Daleithiau, mae rhai adar yn breswylwyr parhaol. +Dwy ddynes yn eistedd wrth fwrdd ac yn gweithio â chlai. +Eisteddai â mwyafrif gweinidogol yn y siambr uchaf hyd ei farwolaeth. +Mae ei ddefnydd ar gyfer byrddau cownter mewn ceginau yn ehangu'n gyflym. +Meddiannir y safle bellach gan Glwb Brenhinol y Modurwyr. +Mae dyn mewn siaced felen a du yn eistedd ar feic melyn. +Rhoddwyd i'r llong ddistryw bedwar lansiwr taflegrau Safonol, gyda'r gallu i lansio wyth taflegryn. +Mae defnydd y tasel yn awr yn addurniadol yn bennaf. +Mae'r ddau gorff yn cynorthwyo ei gilydd ar adegau. +Rhoddodd y gem y gallu iddo delegludo i leoedd y mae'n gwybod amdanynt. +Nid yw hyn wedi ei wneud eto. +Mae tri gweithiwr yn cerdded allan o'u hadeilad diogel ar ddiwedd y dydd. +Felly trodd gwladychiaeth yr Almaen at gyfandir Ewrop. +Nid oes unrhyw drenau bellach yn rhedeg ar y darn hwn o'r llinell. +Ar hyn o bryd, mae'n agored i'r cyhoedd. +Mae'r ci brown yn rhedeg tuag at diwb glas a melyn. +Roedd yn cael ei ystyried yn un o beintwyr noethluniau gorau Ewrop. +Roedd system gyfathrebu lawrydd ar gael hefyd. +O fewn y genom ceir hefyd chwe genyn ffug. +Cwpwl ifanc yn chwarae mewn ffynnon. +Cedwir ei phapurau yn Archif Ryngwladol Menywod mewn Pensaernïaeth. +Dechreuodd penseiri llyngesol a pheirianwyr sifil ystyried y dimensiynau hyn ar gyfer llongau cynwysyddion. +Mae elfennau o reolyddion yr awyren yn cynnwys rhyngwynebau sgrîn cyffwrdd. +Yma y gwnaethant gyfarfod â chydweithwyr y dyfodol, yn gantorion a chyfansoddwyr caneuon. +Fodd bynnag, mae hi'n dehongli ei gymhellion ac yn gwrthod. +Mae'r rhan fwyaf o daflegrau gwrth-long yn defnyddio radar-lywio gweithredol ar gyfer llywio terfynol. +Mae'n darparu gwasanaethau lles proffesiynol i bobl hŷn, plant a mewnfudwyr. +Mae'n ymddangos bod y pum person yma sydd y tu allan wrthi'n pysgota. +Ond nid dyma'r flwyddyn newydd i'r holl Hindŵiaid. +Bu farw ei dad, a oedd yn athro ysgol, ddwy flynedd yn ddiweddarach. +Dynes yn crafu ei hwyneb. +Mae'r enw “funitel” yn gyfansoddair cywasgedig rhwng y geiriau Ffrangeg "funiculaire" a "telepherique". +Mae plentyn yn ysgubo y tu allan i adeilad. +Mae cylchoedd clir ond cul o flew du o gwmpas y llygaid. +Gweithiodd y rhan fwyaf o'i oes yn Ffrainc a'r Almaen. +Nis cynhwysir yn unrhyw restr ar y dudalen, felly. +Mae pedwar math o Hadau Ynni: Melyn, Oren, Glas a Gwyrdd. +Mae dau ŵr mewn iwnifform yn reidio ar gwch modur. +Merch fach wallt golau'n yfed gwydraid o sudd. +Mae'n alegori o fywyd ymneilltuol Cristnogol rhag Iachawdwriaeth trwy aeddfedrwydd. +Cafodd yr arf ei adeiladu'n rhy gynnar i ddefnyddio dyfais ddiogelwch cyswllt gweithredu caniataol. +Maent yn aml yn gofyn am lefelau uchel o hyfforddiant ac addysg. +Dyn ar feic modur gwyrdd llachar, ger marchnad brysur. +Mae'r Pegwn Anhygyrchedd Affricanaidd wedi'i leoli yma. +Mae tirlithriadau a chwymp cerrig yn nodwedd barhaus o esblygiad yr arfordir hwn. +Ac, ar yr un pryd, ei glymu i'w fan genedigol. +Pobl yn ymlwybro mewn ardal laswelltog gyda choed. +Mae dyn â llif yn creu cerflun iâ. +Yn y ddau o'r achosion hyn, bydd y tebygolrwydd yn sero bob amser. +Ond rwy'n dal i geisio cael y geneteg yn iawn. +Daw'r "cyflymiad disgyrchol" ar y cyhydedd o reol disgyrchiant cyffredin Newton. +Mi fydd - mae'n sicr y bydd yn ddyrys. +Mae Martin yn gwneud ei ffordd yn ôl i'r orsaf betrol. +Heddiw, mae gweddi barhaus yn arfer cyffredin mewn llawer o eglwysi. +Gwelwyd bod dulliau traddodiadol o gyflwyno'r data hyn yn annigonol. +Roedd yr amgylchedd yn debyg i'w gwlad enedigol yn yr Alban. +Y Tad Badin oedd yr offeiriad cyntaf a ordeiniwyd yn yr Unol Daleithiau. +Roedd cadwyn allweddi harmonica wedi'i gynnwys gyda'r fersiwn cyfyngedig a ryddhawyd. +Pam ar y ddaear? +Ni chafodd y llofruddwyr, oedd yn weision iddo, eu darganfod am bum mlynedd. +Er bod dilëwyr ar y pennau hyn, bydd unrhyw ddilëydd yn ddigon da. +Dyn ar sglefr-fwrdd yn neidio o sil fach i'r palmant. +Yn ogystal, roedd ef yn genedlaetholwr blaenllaw ac yn eiriolwr dros hawliau dynol. +Ei brif nodweddion yw maes awyr bach a phwerdy. +Yn hyn mae fel y Mudiad Celf a Chrefft. +Mae'r rhain yn weddillion o'r diwydiant mwyngloddio heli a ffynnai yn yr ardal. +Llongwyr a chrefftwyr oedd y boblogaeth, yn wreiddiol. +Dyfarnwyd iddo'r teitl Tun hefyd fel gwobr am ei wasanaeth. +Cynhaliodd yr orsaf nifer o ddigwyddiadau byw hefyd, yn cynnwys cerddorion blaenllaw. +Ond daliodd y swydd honno am flwyddyn. +Dyn mewn crys gwyrdd olewydd yn defnyddio morthwyl i gerfio gwrthrych euraidd. +un ferch a bachgen yn cael parti cwrw gartref. +Nid yw ei waith yn gwerthu am gymaint o arian. +Yn nhw yw'r prif wrthwynebwyr. +Mae nifer o eglwysi Efengylaidd a Phentecostaidd hefyd. +Mae'n cludo pobl Affricanaidd fel ei gargo. +Roeddent yn aml yn darlunio eu hunain mewn arlliw ysgafnach na'r llygoden. +Mae mwnci ym man A mewn labordy. +Cyn diwedd ei dymor, roedd Uruguay wedi adennill statws rhydd o'r afiechyd. +Gan anwybyddu'r gorchmynion hyn, parhaodd y môr filwyr i wrthsefyll. +Mae modd i'r offeryn gael ei daro ar yr ymyl weithiau. +Bydd y rôl ar gyfer pum pennod. +Cafodd y lloeren ei hadeiladu o alwminiwm ac ategion graffit wedi'u defnyddio. +Roedd cyllid yn broblemus o'r cychwyn cyntaf. +Mae'r model hwn yn cysylltu diagnosis o anabledd â chorff unigolyn. +Rwy'n ofni anarchiaeth. +Solomon Smith oedd y ffermwr cyntaf i ymgartrefu yno. +Mae minisatellite yn ffordd arall o ddweud rhanbarthau arbennig o'r loci. +Mae Neuadd y Pentref, sy'n cael ei rhedeg eto gan wirfoddolwyr. +Nid yw'r twrnamaint blynyddol wedi dychwelyd i Utica ers hynny. +"Ie, ie," meddai, mewn llais lleddfol. +Symudodd yn raddol at weithiau comedi, a brofodd yn fwy llwyddiannus yn fasnachol. +Maen nhw'n pasio pwynt mewn gwahanol fomentau mewn amser. +Mae'r Siglen Fraith a'r Pysgotwr penddu'n fudwyr prin. +Chwaraeodd ei cherddoriaeth fwyaf poblogaidd ran bwysig yn y sin clybiau disgo. +Mae rhubanau'n cael eu defnyddio mewn rhai seremonïau, fel mewn seremoni torri rhuban. +Mae canlyniadau cyffredinol o'r gyfres wedi bod yn gadarnhaol. +Daw'r ffotograff ei hun yn fodd o weddnewid a datgelu pethau. +Mae'n pwyso ar ben ei hun, ac fel rhan o'r system gyfan. +Ar gymeriad y boneddigion cynharaf hyn mae'r cofnodion yn taflu golau erchyll. +Mae'n cymryd cannoedd o flynyddoedd ar ôl i'r gyfres orffen +Mae'n rhaid iddo ddweud y gwirionedd. +Y ddawns a'r rhythm Groegaidd mwyaf adnabyddus yw hasapicos. +Mae'n dal i fod ar waith. +Ystyrir bod teimladau'n briodol os ydyn nhw'n gweddu i'r sefyllfa bresennol. +Ni ddaeth i'm meddwl i unwaith. +Defnyddiodd datblygwyr enw eu hinjan er mwyn comedi mewn nifer o gemau. +Gellir storio rhagor o awyrennau arnofio ar y glaswellt wrth ymyl y doc. +Mae hi'n byw yn Ninas Efrog Newydd er mwy na dau ddegawd. +Mae bachgen bach yn reidio car bach wedi'i ddylunio fel car heddlu mewn cartref. +Mae dyluniad estynadwy yn ei gwneud hi'n hawdd uwchraddio. +Dyn yn sglefrfyrddio mewn parc sglefrfyrddio sydd wedi'i orchuddio â graffiti. +Safbwynt y gwyliwr yw'r dyn sy'n cysgu gyda hi. +Mae'r ddolen gron y tu hwnt i'r orsaf. +Mae salfinorin yn neoclerodan-deuterpenoid “trans”. +Bydd yn costio doler ichi. +Mae cyflymder hedfan uchel yn caniatáu iddo fachu targedau yn gyflym. +Gwnaeth y clwb yn llwydiannus wrth y gât hefyd. +Yn ei fag dogfennau roedd rendradau o'r gofeb, y cynllun olaf a gwblhawyd ganddo. +Arweiniodd datblygiad efelychwyr consol at fynediad i gemau fideo tramor. +Mae menyw'n sgïo i lawr llethr. +Mae'r gellesgen yn lliw coch rhydlyd cryf. +Pobl yn sgïo ar fryn wedi'i orchuddio ag eira. +Cafodd y Senedd ei hailgorffori i gynnwys Senedd a Chynulliad Cenedlaethol. +Gellir disgrifio grwpiau mewn gwahanol ffyrdd. +Yn anarferol felly, gall y larfau yn aml fod yn fwy na'r oedolyn. +Mae llawer o lwybrau olynol yn dilyn patrwm datblygu pedwar cam sylfaenol. +Mae'r ffowntenni dŵr yn olion arbennig o bwysig o'r gymuned hanesyddol. +Roedd penodiadau amhlwyfol o'r fath yn eithriadol o anarferol ar y pryd. +beiciwr yn reidio heb ddwylo mewn ras. +Gall myfyrwyr ag anableddau wneud cais am grant ychwanegol i dalu costau anghyffredin. +Byddai'r rheolau hyn yn caniatáu defnydd heddychlon yn unig o ynni atomig . +Goroeswyd ef gan chwech o wyrion. +Dadleuodd dros wahanol fathau o realaeth a chredai fod ei ddull gweithredu yn unigryw. +Symudasant yn araf oddi wrth ei gilydd. +Newidiodd y gymdeithas ei henw yn Gymdeithas Sgowtiaid Malta. +Mae'n ymestyn am dros mewn cyfeiriad gogledd-orllewinol. +Maent yn cael eu diffinio yn ôl math y toriad a'r addasiad a wnaed. +Ni ddylai'r rhestr hon gynnwys cyhoeddwyr academaidd eraill. +Roedd yn edrych fel porthdy saethu gŵr bonheddig. +Mae hyn i gynrychioli bod Sweden mor gyson â seren sydd byth yn machludo. +Maen nhw wedi'u rhestru uchod mewn cromfachau. +Mae'r bwâu cefn a gweddill y prif fwa o goncrit. +Mae basnau gwaddodol yn ffurfio safleoedd cydgyfeiriol, dargyfeiriol a trawsnewidiol yn bennaf. +Y thema gyson yw dyhead Edna am bartner rhamantus. +Taniodd y milwyr i'r dorf a lladd nifer o bobl. +Mae'r llifwaddod cwaternaidd i'w gael yn ne a chanolbarth Gordon. +Rydyn ni'n cymryd ein hamser, yn datgymalu pethau. +Mae patrôl y ffin wedi darfod oherwydd gweithgareddau eithafol. +Mae glanhau ethnig yn arwain at ladd torfol. +Ystyrir y tîm i fod y tîm gorau a welodd Michigan erioed. +Mae'r stori yn llawn o gymeriadau lliwgar, digwyddiadau ystyrlon, a charwriaethau. +Ceir hefyd brywes dŵr. +Nofel sy'n llawn datblygiadau annisgwyl. +Mae rhai yn gydradd ail neu drydydd. +Ac, ar ran fy mhlant, diolch anferth. +Mae'n cael ei nodweddu gan ffitiau. +Gwasanaethodd am un tymor yn Senedd Lloegr fel Aelod Seneddol Meirionnydd. +Mae hi'n twyllo ei hun. +Wn i ddim os mai cyfnewid cod oedd e chwaith. +Gellir gwasgu'r had, er mwyn cynhyrchu olew ar gyfer y gegin. +Tisio mynd allan heno? +Mae criw yn Sir Benfro wedi codi dwy fil yn lleol. +Dewiswyd Edwards fel yr ymgeisydd Rhyddfrydol ar gyfer etholaeth newydd Castell Nedd. +Benyw wedi gadael ei glasoed yw dynes neu wraig. +Roedd yr wynebau rhyfedd yn yr hen bortreadau fel petaen nhw yn syllu hefyd. +Gafo' ni dywydd braf wythnos ddwytha'. +Edrychodd Mary yn fwy stiff nag erioed. +Gofynnodd y mab wrth ei dad am feic newydd. +Hi, ynghyd â'i gŵr, a greodd y corff pleidleisio barn Almaeneg cyntaf. +Dylai fod ddwywaith gymaint o bwysau na'r un arall. +Mae hefyd yn cynnwys cartwnau safonol. +Mae'r môr yn beryg. +Ystyrir y teledu yn un o brif nwyddau traul y byd. +Gellir, hefyd, ddefnyddio Theorem Pythagoras fel sail i lunio ongl sgwâr. +Merch y Tywysog Dafydd ap Gruffudd oedd Gwladys. +Wedi hynny, cynlluniwyd rhagor o fandaliaeth a llosgi bwriadol gan y merched. +Mae'n un o faestrefi Ellesmere Port. +Fodd bynnag, ysgrifennodd yn gyson drwy gydol ei bywyd fel oedolyn. +Rwy wedi sgwennu darn amdano. +Roedd hi eisiau gweld beth oedd tu fewn i'r waliau. +Cafwyd protestio brwd ac yn y pen draw, llwyddwyd i oresgyn y bygythiad. +Cyhoeddodd eu Siarter wreiddiol eu hawl i gymryd y tiroedd oddi wrth Israel. +Afalau Enlli, coeden afal oedd ar un cyfnod bron wedi diflannu. +Llyfryn dwyieithog yn cyflwyno cynigion y Llywodraeth ar gyfer Cynulliad Cymreig. +Ni chred chwaith fod rhediad amser yn troi eiddo lladrad yn eiddo cyfreithlon. +Mae lleiandy gerllaw'r safle yn dal i sefyll. +Mae'r ffurfiau anadlu yn gyffredinol ddiogel yn ystod beichiogrwydd. +Edrych yn grêt ac yn arwrol yn y gwynt. +Erbyn hyn y mae'r Blaid yn Lloegr agos wedi diflannu. +Bu ymdrech anhygoel ganddyn nhw. +Pam fod Prydain yn dal efo'r system wirion yma? +Gellir eu lliwio dro ar ôl tro, gan ailddefnyddio'r cardiau lliwio pwrpasol. +Ceir hefyd giwboid sgwâr, lle mae dau arwyneb yn sgwariau. +Mae hi nawr yn nos Wener. +Roedd yn Gymro Cymraeg ac fe'i ganed yn Abertawe. +Ond un diwrnod mae popeth yn newid. +Mae 'na ddwy stôl. +Dos o'r gegin plis. +Dyma brif gerbyd y cwmni. +Mae pobl eraill mwy technegol am greu fformat Cymraeg. +Fe wnest ti ddangos i mi lle roedd yr allwedd ddoe. +De Orllewin Prydain yw'r enw ar Gymru bellach. +Gwnaeth dechrau'r Rhyfel Byd Cyntaf ymyrryd ar addysg brifysgol a gyrfa rygbi Evans. +Yr ateb i'r cwestiwn cyntaf yn amlwg yw nac oes. +Casgliad o sgyrsiau radio gan John Roberts Williams yw Ffarwel i'r Sbectol. +Does gennym ni ddim syniad. +Mi oedd yr heddlu 'di arestio rhyw foi yn dre neithiwr. +Ti'n gallu gweld Pen y Fan o'r ffenest yma. +Nes i fynd i redeg dros y garn bore 'ma. +'Sa i'n gwbod yr ateb, edrycha yn y geiriadur. +Mi oedd hynny sawl blwyddyn yn ôl. +Dyma gychwyn dirwasgiad byd-eang. +Dw i 'di gweld rhywbeth dw i eisiau ar ebay yn yr Almaen. +Nid yw'r tŷ, mwy na'r tir, yn helaeth. +Ymddangosodd y fôr-forwyn. +Mae'n rhan, felly, o'r system dreulio. +Mae arwyddion a symptomau cyffredin yn cynnwys diffyg anadl, gorflino a chwyddo'r coesau. +Trwy ei hysgrifennu medrus a'i siarad cyhoeddus argyhoeddiadol, llwyddodd i hyrwyddo pleidlais menywod. +Wel ie, iawn 'de. +Ychwanegodd ei bod wedi credu bod y pafiliwn yn eiddo i Frenhines Lloegr. +Dyna paham y mabwysiadodd y llysenw Llaethferch yn nes ymlaen. +Cyhoeddwyd bod y dyfarniad yn derfynol heb unrhyw bosibilrwydd o apelio. +Bydd croeso i'r caneuon cyfoes hyn mewn cartrefi ac ysgolion. +Ond o'r diwedd fe dorrodd y clo. +Mae tri chant o gleifion Covid wedi cofrestru am dreialon. +Am arwydd stiwpid. +Casgliad o straeon byrion i ddysgwyr am fywyd cefn gwlad ym Mannau Brycheiniog. +Treuliodd ychydig amser gyda'r teulu yn Llundain, pan oedd yn fachgen. +Droies i 'migwrn wrth neidio dros y clawdd. +Cafodd ei eni yn Llandybie. +Mae'n warthus eu bod yn caniatáu i hyn ddigwydd. +Ond dw i ddim yn credu dy fod ti'n gwybod. +Ac roedd hyn mewn gwirionedd yn deffro ei dychymyg. +Mi oedd yr hen wrach yn cuddio tu ôl i'r goeden. +Mae angen i ti drwsio dy sanau. +Ganwyd pob un o'i phedwar taid a nain yn yr Eidal. +Rhaid i ti iwsio rhaw i symud y pridd. +Dim syniad lle rydych chi na beth fydd yn digwydd nesa. +Mae'n arbenigwraig ym maes datblygiad plant ac wedi teithio ar draws y byd. +Tisio mynd i fowlio nos fory? +Addasiad Cymraeg o Mad Iris +Roedd ganddynt un gannwyll, i bara am bythefnos. +Mae Eglwys Fihangel Sant, neu Llanfihangel, yn hen iawn. +Ond ni ddychwelodd i'r Eidal am weddill ei oes. +Dim ots gen i. +Ffafr gan fy ffrindiau sy'n siarad Almaeneg a Rwsieg plîs. +Caiff ei ddenu gan olau a blodau. +Roedd hi'n gyrru yn araf iawn. +Mae nhw'n sôn am rôl bwysig dysgu Cymraeg mewn ysgolion cyfrwng Saesneg. +Mae'r lipstic ar waelod y bag. +Prif fwyd y siani flewog ydy'r helygen. +Dim mwy o handbags. +Mi fyddai unrhyw gwch a fyddai'n ceisio mynd ar y llyn yn suddo. +Mae hynny'n dda i glywed. +Y lluosog ydy delweddau. +Mae pob curiad pwls yn cyfateb i guriad y galon. +Ffynonellau eraill o'r nwy ydy llosgfynyddoedd, coedwigoedd a thanau. +Darluniau lliw a du-a-gwyn. +Stori fywiog sy'n ddilyniant i Campau Siani'r Shetland. +Helpa fi i gario'r bagiau siopa mewn i'r tŷ. +Mae'n nhw'n rhagweld pegwn Covid yn y gogledd ddiwedd Mai. +Nac ydyw, gyfaill, nac ydyw. +Yn draddodiadol, mae'r flwyddyn yn dechrau ac yn gorffen ar Nos Galan Gaeaf. +Casgliad o ysgrifau gan William Owen yw Methu Peidio. +Yn ôl traddodiad, ymladdwyd y frwydr ar safle ger Yr Wyddgrug. +Mae hefyd restr gyda pharagraff am holl drefi a phentrefi Sir Gaernarfon. +Addasiad Cymraeg o stori ddoniol am gar arbennig a'i bum perchennog gwahanol. +Ni'n lico gwylio ffilmiau dwl. +Cadwodd ei sedd am weddill ei oes yn gwbl ddiwrthwynebiad. +Yn ôl rhai, hi oedd y gyflwynwraig fenywaidd cyntaf yng ngwledydd Prydain. +Yr enw ar yr ochr sydd gyferbyn yr ongl sgwâr yw hypotenws. +Ewch ati i gofnodi holl lefydd y byd. +Mae'r cysyniad o set yn un o feysydd craidd mathemateg. +Nofel ar gyfer plant a'r arddegau gan Dyfed Glyn yw Llygad y Ddraig. +Roedd yn gorwedd ar y ddaear ger drws yn yr iard gefn. +Fe'i defnyddir yn aml gyda lens gwydr neu blastig tryloyw. +Parhaodd y cyfweliad am hanner awr. +Wrth weithio yn Efrog Newydd, fe'i chyflwynwyd gan ffrind i gyfarwyddwr asiantaeth hysbysebu. +Llyfr lliwgar gyda thestun syml ar gyfer plant bach. +Ddwy flynedd yn ddiweddarach cafodd ei benodi'r Archesgob Caer. +Y brif stori yn y llyfr yw marwolaeth y fam. +Hwnna wedi'i sgwennu ddoe ond dim ond rŵan wasgais i'r botwm cyhoeddi. +Gwneir hyn o fewn gwahanol fathau o dirffurfiau, patrymau gofodol, ymchwil a pholisi. +Mae'r dyn yn dreifio'r tractor. +Gan pwy gest ti'r hufen ia 'na? +Mae Ardal Ymchwil Ceredigion yn cyfateb yn union â ffiniau sir bresennol Ceredigion. +Mae sawl rheswm dros fwydo ar y fron. +Dyna'r rheswm pam nad aeth o yno. +Mae 'na fwrdd ar gael am chwech o' gloch os dach chi isio. +Dw i eisiau gweld fy ngŵr unwaith eto. +Y flwyddyn ddilynol dychwelodd Jones i Gymru yn genhadwr Mormonaidd. +Detholiad o dros ugain o hwiangerddi Cymru, wedi eu darlunio. +Mae cariad dyn at iaith ei dadau yn un o'r teimladau mwyaf cysegredig. +Ar ben hyn y mae siâp darnau cymalog yr esgyrnynnau yn gweithio fel lifer. +Gwnaed hyn yng Ngwlad Roeg, pan oedd mathemateg yn ei ddyddiau cynnar. +Diffinnir gofod affin fel dimensiwn gofod fector ei drawsfudiad. +Roedd y tapestri yn gorchuddio drws. +Mae bellach yn gartref i Amgueddfa Trefynwy. +Mae 'na grocodeil yn y ffos. +Tybiaf mai cyfieithiad de facto yw'r Cymraeg. +Ond teilsen llawr ydy honno, nid bricsen. +Mae'n hyrwyddo dull trochi, cyfannol a rhyngweithiol i addysgu ieithoedd. +Yn ne Ewrop ceir dwy genhedlaeth y flwyddyn. +Prif fwyd y siani flewog ydy coed llwyfen, poplys a helyg. +Nid oes un ohonynt wedi dygymod â'i chyflwr. +Eu slogan oedd dim treth heb gynrychiolaeth. +Mae glanio yng ngwlad Pwyl yn chwip o olygfa. +Wedi gadael yr ysgol mynychodd Brifysgol Glasgow a Phrifysgol Ystrad Clud. +Mae'r organau atgynhyrchu yn medru amrywio o blanhigyn i blanhigyn. +Prif fwyd y siani flewog ydy'r ffawydden. +Mae'n selog iawn. +Casgliad o straeon arswyd i oeri'r gwaed ac i rwygo'r nerfau. +Gall droi'n glocwedd neu'n wrthglocwedd. +Mae hefyd yn gallu effeithio ar bobl sydd â phroblem sylfaenol yr ymennydd. +'Swn i yno taswn i adra'. +Yno, fe'i gosodwyd ar gofeb Edward y Cyffeswr. +Roedd e'n edrych yn flinedig ac yn boenus. +Doedden nhw ddim yno yn hir cyn i'r goleuadau gael eu diffodd. +Cyfrol gan amryw o lenorion yw Ar hyd y Flwyddyn. +Fe'i gwelir yn ne a chanol Ewrop, gogledd Affrica a chanol Asia. +Roedd hi'n ddrwg iawn gen i glywed y newyddion, Ffred. +Mae'r cysyniad o ofod yn hanfodol er mwyn deall y bydysawd. +Seremoni i uno dau berson ydy priodas. +Ystyr yr enw yw gwlad wastad agored. +Nid yw Aelodau Senedd yr Alban na Senedd Ewrop yn cael eu rhestru. +Ni welem na golau llusern llety na neb a'n cyfarwyddai. +Rhoddir yr esgyrn sy'n cyfateb i rif cyntaf y broblem ar y bwrdd. +Beinties i lun o wyneb. +Mae pob rhombws yn baralelogram ac yn farcud. +Dyma gasgliad o straeon sy'n rhychwantu cyfnod o hanner canrif. +Y mynegiant arferol ar gyfer onglau yw naill ai gradd neu radian. +Stori gan Len Evans yw Y Trywydd Du. +Casgliad o ysgrifau gan Robert Rhys yw Y Patrwm Amryliw. +Ceir crug crwn arall gerllaw. +Cafodd ei godi i'r Cyfrin Gyngor ar ei apwyntiad. +Yna cymysgwch gydag un o'r dilynol, neu gyfuniad o ddau neu dri ohonynt. +Gwasanaeth Tân ac Achub De Cymru. +Cymry Cymraeg o Garno oedd ei rieni. +Nid oedd y borfa gystal yn y fferm newydd. +Mae'n un o ddau ddeg pedwar adeilad sydd ar y Llwybr Trefedigaeth. +Bu'n aelod o Academi Iaith a Barddoniaeth Almaeneg am rai blynyddoedd. +Angen nhw rhoi cyfarwyddiadau ar blincin teclyn plicio moron nawr. +Debyg mai achos o lwcus y trydydd tro oedd hynna. +Ai o ran agwedd maen nhw'n dangos esiampl? +Mi oedd yna beiriant ar gefn y tractor. +Mae'n ymdrin â chyflwr celfyddyd yn y Gymru gyfoes. +Y tro nesaf y bydda i'n prynu car, car trydan fydd e. +Mae hi'n tywyllu'n gynnar fin nos erbyn hyn. +Does dim rhaid i chi ysgrifennu brawddegau llawn, mae pwyntiau bwled yn ddigon. +Gall y plant fynd ar ei beics ar y prom yn Llandudno. +Mae'r ysbytai yn orlawn unwaith eto. +Os cymysgwch chi goch a gwyn fe gewch chi binc. +Paid becso, fydd e wedi anghofio am y cyfan erbyn heno. +Cofiwch ddod â fflasg a dillad cynnes gyda chi. +Dyna ddiwrnod arall wedi dod i ben, nos da i chi gyd. +Aethon nhw i fyw y tu hwnt i'r afon. +Ydych chi wedi ymuno â'r côr eto. +Rhaid i ni gyd gofio cadw pellter cymdeithasol y dyddiau hyn. +Chewch chi ddim eistedd wrth y bar i gael diod. +Mae'r ceir Tesla newydd yn smart iawn ond yn ddrud i'w hyswirio. +Mae'r afon wedi gorlifo yn dilyn y glaw diweddar. +Mae'r melinau gwynt yn y môr yn cynhyrchu llawer o drydan erbyn hyn. +Does dim byd gwell na thost a marmalêd i frecwast. +Dim ond dau oedd yn y ras, a dim ond un enillydd oedd yna. +Beth yw dy farn di am y datblygiadau diweddaraf? +Doedden nhw ddim yn cofio lle roedden nhw wedi gadael y car. +Mae llawer o lefydd braf i gerdded ar lan y môr ym Mangor. +Codwch eich llaw os ydych chi eisiau gofyn cwestiwn. +Wedi taith flin gadawsom y môr, a daethom at lyn ar ochr y ffordd. +Dydi o ddim yn licio cael tynnu 'i lun. +Ond nid oedd unrhyw beth oedd ganddo o unrhyw werth masnachol. +Daeth yn awdur i dri deg a naw o lyfrau. +Yn gweithredu fel y brif ffynhonnell o gyfathrebu ar gyfer poblogaeth wledig yn bennaf. +Ar ôl y rhyfel, astudiodd economeg a hanes gwleidyddol yn Rhydychen. +Roedd elw'r llyfr o fudd i sawl elusen. +Yn ddiweddarach rhyddhaodd ddatganiad yn ymddiheuro i'r clwb a'r cefnogwyr. +Fodd bynnag mae rhai plant bach wedi byw am gyfnod gyda cymorth meddygol dwys. +Roedd yr hawliad yn honni torri contract a thwyll. +Mae'n cynnwys lloches picnic sy'n dyddio'n ôl i gyfnod y Weinyddiaeth Gweithiau Cyhoeddus. +Cafodd y ffilm ei rhyddhau o dan ei theitl gwreiddiol yn Ewrop. +Wrth dyfu i fyny, datblygodd dalent cynnar mewn peintio a thynnu lluniau. +Efallai bod rhai o'r papurau a restrir wedi peidio â chael eu cyhoeddi. +Ar ôl taith genedlaethol arall, bu sawl newid mewn personél. +“Rydw i wedi dy ddewis di,” meddai'r Llais. +Yn aml, ni chaiff chynnig o'r fath ei gyflawni'n ymarferol. +I gychwyn, roedd teithiau'r band wedi eu cyfyngu i safleoedd Gwyddelig. +Yn ystod y cyfnod hwnnw, roedd hefyd yn aelod o'r Cyngor Diogelwch Cenedlaethol. +Mae'r amcan hwn yn canolbwyntio'n benodol ar “ddylunio, datblygu a pheirianwaith System Systemau”. +Parhaodd i gynnal digwyddiadau achlysurol dros y blynyddoedd ond ni wnaeth erioed gystadlu eto. +Mae'r rhannau uwch o'i gorff yn llwydfelyn a'i adenydd a'i gynffon rywfaint yn ddu. +Menyw yn cysgu ar ei phen ei hun mewn gwely. +Pam wnaeth y cyw iâr groesi'r ffordd? +Mae grŵp o bobl ar y palmant yn mynd ar fws dau lawr. +Beth sy'n bod arnat ti? +Lliw swyddogol ei linell yw melyn. +Gyferbyn â'r sgwâr mae dau balas. +Gellir addasu "Y Parchedig" i adlewyrchu statws a rheng eglwysig. +Mae'n ymgyrchu'n frwd dros yr achos o blaid bywyd. +Mae hon yn sefyllfa gyffredin iawn ymhlith prifysgolion addysgol De Corea. +Fredi oedd yr ail o'u pum plentyn. +Mae'r planhigyn yn ymddangos yn ganghennog a phluog. +Dawnswyr yn perfformio mewn gwisgoedd lliwgar. +Bu'n plannu cotwm a thybaco. +Mae'r ysgol gynradd hefyd yn cynnig dosbarthiadau arbenigo mewn Gwyddorau Naturiol a Thechnoleg. +Defnyddir systemau cyfrif canolog yn gyffredin hefyd i brosesu pleidleisiau absennol. +Yna mae'n cael trawiad ar y galon ac yn marw. +Mae dyn a dynes mewn cotiau labordy glas yn edrych drwy ficrosgop. +Ychydig flynyddoedd ar ôl iddo gael ei eni, symudodd ei deulu i'r Ffindir. +Mae'r coesau a'r traed yn goch llachar. +Mae dyn â bag cefn yn croesi stryd brysur. +Ymwelodd â hi yn fuan wedyn yn Awstria a gofyn am ei phriodi. +Rwy'n ystyried un fel cynnwys y llall. +Mae'r ci tenau gyda'r gynffon hir yn teithio trwy'r cae. +Gellir gweld cofnod ffotograffig ar-lein o'i briodas a'i daith fyd eang. +Gelwir un neu fwy o ddogfennau cydberthnasol sy'n defnyddio'r gramadeg hwn yn fap pwnc. +Ond roedd hefyd yn mwynhau mynd yn ôl i'w long. +Mae'n aelod o Glwb yr Archwilwyr. +Mae'n fatiwr llaw dde ac weithiau'n fowliwr cyflymder canolig braich dde. +Dim ond aelodau amlwg, dethol sy'n cael eu dangos. +Ni chafodd arddangosfa oriel yn ystod ei oes. +Clwb Pêl-droed yr Heddlu Metropolitan yw clwb pêl-droed Gwasanaeth yr Heddlu Metropolitan. +Mae'r Pedwar Llys yn parhau i gael eu defnyddio ar gyfer materion sifil. +Fodd bynnag, roedd llawer o'r sioeau a fu'n llwyddiannus o ansawdd braidd yn ymylol. +Adeiladau dibreswyl yn unig sydd ar brif ran y campws. +Yr ail fersiwn a'r lleiaf derbyniol yw "man y neidr aur". +Mewn gwirionedd, mae digwyddiadau pwysig hefyd yn cael eu darlledu'n fyw ar y rhyngrwyd. +Gellir dosbarthu tonnau ymhellach yn ôl y mathau osgiladol. +Daeth y term “trawsgroesi” i'r amlwg fel offeryn marchnata. +Dyma drawslythreniad enghreifftiol. +Fe'u rhyddhawyd ar barôl ar ôl gwasanaethu am wyth mis. +Er ei fod yn fyr, roed y cyfnod yn un dylanwadol. +Mae teithiau tywys ar gael. +Mae'r Dywysoges yn gadael. +Mae'r ymateb hwn ar gyfer ailddosbarthu ei sylffwr i wneud protein newydd. +Gweinir bwydlen ginio hefyd. +Derbyniodd trigolion lleol brofion. +Mae'n dalach na fi! +Mae'r ddinas yn croesawu marchnad awyr agored bob bore Mercher a Sadwrn. +Daeth systemau holl-electronig yn boblogaidd gyda chartrefi ar ôl yr Ail Ryfel Byd. +Mae gwasanaethau cludo nwyddau yn gweithredu saith diwrnod yr wythnos. +Roeddent yn swil iawn ac yn hynod anodd i'w dal. +Bardd Prydeinig, a anwyd yn Llundain, a addysgwyd yng Ngholeg Iesu, Rhydychen. +Mae ci du a brown gyda phêl goch uwchben yn chwarae yn y glaswellt. +Mynnodd felly bod graen ffug a staen yn cael ei osod. +Tybed nad oedd hi'n mynd i aros yma mewn gwirioedd! +Roedd dau fath o'r rhain ar y cyfan. +Mae'r teitl Ffrangeg wedi cael ei sillafu ychydig yn wahanol dros y blynyddoedd. +Gwnaethon nhw ei dorri allan. +Roedd Morris hefyd yn awdur. +Mae grŵp o ferched mewn gwisgoedd brown a sandalau cyfatebol yn dawnsio gyda'i gilydd. +Hefyd fe chwaraeodd bêl-droed ysgol uwchradd a rhedeg ar y trac. +Mae'n achwyn am amodau carcharu ei fab, sy'n fethedig. +Mae astudiaethau a gyfansoddwyd yn rhagddyddio ffurf fodern gwyddbwyll. +Mae bachgen bach yn edmygu car chwaraeon gwyrdd. +Yn ddiweddar, mae'r ddinas wedi dod yn brif anheddiad i Gristnogion yn Iraq. +Dyn mewn siwmper las yn gwylio rhywbeth sy'n cael ei daflunio o'i flaen. +Gall nifer o gyflyrau a chlefydau patholegol arwain at waedu mewnol. +Cafodd ei chyfweld a rhoddwyd plac iddi am ei chefnogaeth dros ffoaduriaid Fietnam. +Yna aeth allan, ac a thuthiodd i lawr y pentref. +Mae Algeria a Singapore yn mwynhau perthynas agos mewn meysydd economaidd a gwleidyddol. +Mae'r cyfansoddiad yn perthyn i'r traddodiad democrataidd rhyddfrydol. +Rwyf wedi meddwl y cyfan drosodd. +Ar hyn o bryd mae yna ganolfan feddygol, ac ysbyty hefyd. +Y rhai sydd â model economaidd sy'n gweithio. +Gwelais y corsydd unwaith,” meddai Phil, gan fwyta'i frecwast yn fodlon. +Roeddent yn edrych yn debyg i fleiddiaid, er yn arwynebol. +Mae nifer o stondinau sy'n cynnig gwahanol fwydydd. +Chwech o bobl yn eistedd wrth gilfach bas yn gwneud cestyll mwd. +Mecanydd mewn ofyrols glas yn gweithio ar fys. +Yn naturiol ni fyddai, o dan yr amgylchiadau heintus hynny. +Mae PowerShell yn defnyddio ôl-dic yn lle. +Aethom drwy eu cyfarwyddiadau, cyfrifiaduron, ystafelloedd dirgel ac ati. +Fe wnes i ddangos y drws iddyn nhw. +Mae grwpiau merched yn flaenllaw yn y mudiad defnyddwyr. +Daeth y sengl i frig y siartiau ym Mhrydain, Iwerddon, yr Iseldiroedd a Norwy. +Y blendiau sy'n cael eu defnyddio ehangaf yw blendiau ffibr cotwm-polyester a gwlân-acrylig. +Mae'r ystâd yn fusnes ffermio gan fwyaf, bellach, gan fagu cnydau a defaid. +Mae gan rai streipen las ar y wasg, ac eraill streipen wyrdd. +Enillodd Michael y Gwpan Gyfandirol gyda'i dîm a daeth yn ffefryn gyda'r cefnogwyr. +Mae dyn yn loncian ar y traeth o flaen marchnadfa brysur +Yn ogystal maent wedi dod yn offeryn cyffredin ar gyfer profi cyffuriau. +Mae pobl yn trin gerddi bychain gan ddefnyddio dŵr o ffynhonnau dyfnion. +Gall pedwar rhif cwantwm ddisgrifio electron mewn atom yn llwyr. +Os oes capasiti wrth adael, gall teithwyr "normal" ddod ar fwrdd. +Mae pump o blant yn chwarae yn yr eira. +Roedd ei hysgoloriaeth yn canolbwyntio'n bennaf ar y cysylltiadau rhwng gwyddoniaeth, llenyddiaeth, a thechnoleg. +Roedd yn cynnwys nifer o siopau print bach a mawr ledled y byd. +Mae dyn yn gweithio ar y trên +Mae'r nodwedd hon yn gwneud dadlwytho a llwytho'n gyflymach ac yn haws. +Gall yr injan adlamu, gan achosi cylchdroi croes sydyn. +Ganed Owen yn Hwlffordd, Sir Benfro. +Achubodd y llywodraeth leol y clwb rhag methdaliad. +Mae preifatrwydd yn wahanol i anhysbysrwydd o ran ei gymhwyster a'i ddefnydd. +Yn ogystal â meddalwedd roboteg at ddefnydd personol a phroffesiynol. +Mae llawer o bethau ar goll o'r llawysgrif. +Dyn mewn dillad glas a melyn yn gwylio sgrin fawr. +Cerddorion a dyn mewn gwyn yn chwarae ar lwyfan. +Roedd y fargen i bara pum ras. +Pan gyrhaeddodd, fodd bynnag, gofynnwyd iddi a allai ddechrau gweithio'n syth. +Mae'r ci ar y traeth wedi gafael yn rhywbeth. +Yn fwy cyffredinol, gallwch ganiatáu mwy na dau ffang. +Mae yna hefyd lwybrau addysgol, troeon cerdded thema, llwybrau cerflunwaith a llwybrau dehongli hanesyddol. +Yn y rownd gyntaf, roedd tri rhagbrawf. +Ers hynny, mae methodoleg addysgu gyda llyfrau darllen graddedig ysgolion wedi symud yn rheolaidd. +Nid yw'r gyfres o ddigwyddiadau yn arwain at y gwrthdrawiad yn gwbl glir. +Roedd yr adran ddeheuol yn amaethyddol iawn o ran cymeriad. +Roedd y jwg yn sefyll ar y fantell tân, i bawb ei gweld. +Mae'r stori wedi'i rhannu'n bum pennod. +Maen nhw hefyd yn gwirfoddoli'n aml mewn mudiadau lles anifeiliaid. +Gweithiodd hefyd fel sgowt a swyddog gweithredol pêl-droed y swyddfa flaen. +Fe allwn ni wneud pethau felly. +Grŵp o bobl yn eistedd wrth fyrddau ger y traeth. +Gellir dod o hyd i oedolion rhwng Gorffennaf a Thachwedd. +Yna rydych chi'n hoffi'r cynllun? +Ni lwyddodd yr ystâd erioed i wneud elw cyson a sefydlog. +Cystadlodd y timau yma yn erbyn timau o Japan hefyd. +Fe allai fod yn fflat neu'n gondominiwm. +Gwelir dyn yn peswch mewn stryd a thorf ynddi. +Mae mwyafrif y gweithiau a enwir wedi'u cyfieithu i'r Saesneg. +Menyw mewn glas yn gorffwys ar fainc o flaen murlun crefyddol enfawr +Mae'r rhisgl yn frown cochlyd tywyll ac yn llyfn. +At hynny, mae'n ymddangos bod angen cysylltiad â'r system wobrwyo. +Mae'n gerddor llaw chwith ac yn chwarae ei gitâr gyda'r tannau wyneb i waered. +Mae'r goedlan yn cysylltu llawer o atyniadau ac adeiladau o bwys ym Merlin. +Dechreuodd Roberts chwarae hoci yn Victoria pan oedd yn dair ar ddeg mlwydd oed. +Dau ddyn mewn siacedi ar y traeth yn gwneud arwyddion. +Mae'r rhestr yn cynnwys cwmnïau nodedig sydd â phrif pencadlys yn y wlad. +Dywedir iddi gael ei henwi yn ôl preswylydd lleol, Peter Dennis. +Ar y dechrau, dim ond pum plentyn lleol a oedd yn mynychu'r ysgol. +Fodd bynnag, rhaid i ddyluniad ymarferol hefyd gyfyngu radiws niweidiol y belen dân. +Yn Japan, mae teitl y sioe'n golygu “Y Bachgen Hapus a'i Deulu.” +Mae'r ci blew byr yn rhedeg ar draws iard laswelltog. +Arhosodd gyda'r gorfforaeth drwy gydol ei yrfa. +Mae dulliau sefydledig eraill yn bodoli, gan gynnwys Mentrau Trefi Marchnad. +Mae person mewn crys brown yn gwthio babi mewn coets fach ger y môr. +O ganlyniad, cafodd ei wahardd am chwe mis yn unig. +Mae dyn yn plygu drosodd wrth ymyl gôl hoci +Maent yn dechrau ymdrechu i'w clirio o'r ardal. +Caiff ei ddeall fel "drwy gyfrwng" ac "ar ran". +Defnyddiwyd yr un peth wrth ddiffinio syndrom metabolig. +Band yn gorymdeithio gan chwythu eu trympedi. +Yn ôl y traddodiad, dinistriwyd yr ysgubor gan dân. +Mae ei gŵr a'i phlant yn ei goroesi. +mae saith o ferched yn dawnsio gan ddal eu breichiau i fyny. +Pwyllgor Doc Cyngor Cyffredin Lerpwl oedd yr awdurdod porthladd gwreiddiol. +Felly fe'u gelwir hefyd yn eiriau a dderbyniwyd. +Roedd y diwydiant awyrennau Americanaidd yn gallu addasu i ofynion rhyfel. +Yn aml yn 'shaka brah'. +Caiff ei adnabod dim ond o gorpws bach iawn. +Hefyd, mae wedi ymddangos mewn sawl drama teledu ynghyd â hysbysebion. +Er enghraifft, mae'r digid sero ar gyfer y pwysau yn cynrychioli pwysau canolig. +Gwnaed llawer o'r gwaith ysgrifennu hwn yn ystod un sesiwn a ddarparodd barhad naturiol. +Cododd ffortiwn enfawr fel brocer yn y farchnad siwgr ym Mharis. +Mae dyn sy'n gwisgo top tanc gwyn yn reidio beic coch ar hyd naid. +Yn hwyrach, derbyniodd y bai am y digwyddiad. +Mae gan eu priffyrdd ategol cysylltiedig rifau tri digid. +Ysgrifennir pob erthygl gan arbenigwr yn y maes hwnnw. +Mae ci ar dennyn yn iard gefn cartref rhywun. +Ymhellach, mae'r rhwydwaith yn cynnwys dwy linell fysiau, +Ie, ond pwy yw e? +Mae'n gweithio mewn cysylltiad agos ag ysbyty'r brifysgol. +Dwi'n ei gael fy hun. +Cyn gwmni hedfan siarter a oedd yn canolbwyntio'n bennaf ar hedfan i gyrchfannau gwyliau. +Ar ôl dychwelyd i Wlad Belg dechreuodd yrfa newydd fel contractwr adeiladu. +Ar hyn o bryd mae'n perthyn i dalaith Gorllewin y Ffindir. +Nid yw'r tymhorau'n newid yn ddrastig iawn. +Ar ddiwedd y corff roedd cynffon tebyg i badl. +Mae swyddogion etholiadol a llywodraeth wedi gwadu cyhuddiadau o'r fath. +Wrth iddo dyfu'n hŷn syrthiodd i mewn i ddistryw araf. +Mae gan y pentref glwb criced. +Mae'r Senedd hefyd yn cynllunio gweithgareddau cymdeithasol a gwasanaeth cymdeithasol yn ystod y flwyddyn. +Gellir storio gellyg ar dymheredd ystafell nes eu bod yn aeddfed. +Roedd ei llwybr olaf o amgylch Môr y Gogledd. +Mae ganddi frawd hŷn, Jeff. +Mae John yn cael ei roi ar brawf am ddinistrio ei gwch. +Mae rhes o bobl yn aros y tu allan i adeilad. +Lladdodd y tornado un ac anafu wyth ar hugain o bobl. +Gwrthodwyd y cynnig wedyn gan yr actores. +Mae dyn â fest goch a dici-bô du yn siarad mewn i feicroffon. +Mae gan y ffilm dro tebyg yn y gynffon tua'r diwedd. +Mae'r fideo yn cynnwys terfysg, baneri ac agweddau o bropaganda. +Roedd yn gyfeiliant safonol i'r farddoniaeth farwnadol angerddol. +Mae'r holl daleithiau ac eithrio'r Ardal Ffederal yn gweithredu rhwydwaith ffyrdd. +Fodd bynnag, nid oedd yn cynhyrchu unrhyw raglenni newyddion ar benwythnosau. +Cafodd pwll nofio trefol cyntaf y dalaith ei adeiladu yn y sir. +Gorffennodd y sioe gyda'r cerdyn teitlau hyn. +Gwahanodd y gŵr a gwraig gyda chusan. +Hebddo, pa werth sydd i weddïo? +Mynychodd gyrsiau canu, dawnsio clasurol, a marchogaeth yn blentyn. +Fel yr Ysbrydion blaenorol, mae'n byw yn yr hynafol Ogof y Penglog. +Mae llawer o bobl yn dod yma ar ôl iddynt ymddeol. +Mae pobl yn siopa mewn marchnad awyr agored. +Ymddiswyddodd ei chynorthwyydd ac felly hefyd y gwnaeth metron cartref y nyrsys. +Roedd hefyd wedi astudio pêl-fasged a thrac. +Mynychodd yr ysgol uwchradd yno a pherfformio yng Nghwmni Theatr Plant. +Roedd yr ysgythriad yn aml yn cael ei wneud yn fras ac yn frysiog. +Dechreuwyd prosesau difeddiannu ar gyfer caeau cyfagos. +O dan eu llywodraeth draddodiadol, roedd penaethiaid etifeddol yn gwasanaethu am oes fel arfer. +Roedd y dieithryn yn ifanc, ac roedd y wraig weddw wedi'i swyno. +Mewn gwirionedd, sêr yw jetiau optegol. +Roedd hefyd yn awdur nifer o lyfrau. +Nid oes unrhyw fynediad cadeiriau olwyn i'r platfform. +O fewn blwyddyn, roedd ei wyneb bron yn ôl i normal. +Mae'r ddau fersiwn ar gael mewn siopau candi ac archfarchnadoedd. +Mae nifer o bobl yn cofleidio ei gilydd y tu mewn i far +Fodd bynnag, ni ddefnyddiwyd yr arddull wrth argraffu am rai blynyddoedd eto. +Mae'r canlynol yn rhestr o holl reolwyr y tîm cenedlaethol. +Gelwir hyn yn broblem dynameg ymlaen. +Mae'n gwasanaethu fel meddyg ar gyfer y tîm Almaenig. +dwi efo dim ffudd yn glwedyddiaeth +Y mae ei heddwch fel yr afon, a'i thangnefedd fel y môr. +Ni chafodd hi erioed diwrnod o ysgol ac eithrio Ysgol Sul. +Y mae y dyfroedd yn ennill rhywfaint bob tro. +Cyfaddefir nas gall y gwyddorau i gyd esbonio un o ffeithiau symlaf natur. +Mae yna hefyd dair ffordd dderbyniol arall i siarad yn ystod dadl. +Mae angen parhau â'r ymchwil er mwyn arfogi addysgu mwy effeithiol. +Mae'n debyg mai'r gaeaf oedd yr adeg ar y flwyddyn. +Dylanwadau distaw yr holl bethau hyn. +Cyndyn iawn oeddwn i i ddysgu adnod. +Aeth y trên ymaith, gan adael dim ond meistr yr orsaf a minnau. +Calon yn hiraethu am weled deddfau teg ydyw calon y dyn da. +Gallai hyn beryglu mathau o blanhigion brodorol ac adar. +Yr oedd gennyf obaith gwan o hyd fod gan Wil gynllun i'n gwaredu. +Efallai y bydd rhai banciau yn codi tâl am y gwasanaeth. +Mae'r tylwyth i gyd wedi mynd ar ddisberod. +Roedd hi wedi bwrw glaw gymaint nes bod yr afon wedi gorlifo'i glannau. +Felly credaf fod y gwrthgyferbyniad rhwng y delweddau yn ffantastig iawn yma. +Ceir geiriadur hanesyddol cynhwysfawr ar gyfer y Gymraeg, sef Geiriadur Prifysgol Cymru. +Bydd streiciau eraill yn cymryd lle mewn meysydd awyr ar draws y wlad. +Rwyf yn hoff o gerddoriaeth ac yn chwarae amrywiol offerynnau. +Roedd Dôl Gamedd yn debycach o bell i dŷ Elizabethaidd neu fynachlog. +Dafydd, mab y Garreg Wen, meddir, yw awdur yr alaw Codiad yr Ehedydd. +Mae gan arolygydd hawl i roi cyfarwyddiadau i'r rhingyll. +Cefais fy hun ar ffordd fryniog, gan syllu ar aeddfedrwydd cyfoethog y wlad. +Carreg fawr ydyw, ar ben cae glas. +Saif yng nghysgod y graig aruthrol goronir gan adfeilion castell Carn Dochan. +Mae blas drwg iawn ar y moddion peswch yna. +Dylanwadodd Piaget ar sut mae meddyliau plant yn gweithio ac yn datblygu. +Bydd disgyblion yn mynd ati tan ddiwedd y wers i gwblhau'r dasg. +Cymhlethdod arall yw nad ydw i'n hedfan nôl tan fory. +Nid oes gwahaniaeth dinesig rhwng gwreng a bonedd. +Y mae Glasynys rhyw ddwy filltir o Harlach i'r gogledd. +Toc dois at groesffordd ar waelod cwm. +Bydd popeth yn barod erbyn iddyn nhw gyrraedd. +O ddrws y fynwent rhed y ffordd i lawr rhwng ychydig o dai. +Wedi mynd i mewn i'r buarth, gwelwn o'm blaen dŷ newydd. +Ar yr un pryd teimlwn law denau ysgafn Seth ar fy mhen. +Mae hyn yn dangos i'r defnyddiwr sut i newid cyfeiriadaeth y dudalen. +Y mae llaw amser wedi rhoddi prydferthwch digymar arno. +Pam fyddech chi eisiau astudio ieithyddiaeth? +Mewn datganiad gan gwmni ceir rhyngwladol, datgelwyd bod cannoedd o swyddi mewn perygl. +Mae disgwyl i deithwyr maes awyr Manceinion wynebu oediadau diogelwch oherwydd streic staff. +Peth digon rhyfedd fod y bobl yn ei galw'n hen Ann. +Oes gennych chi unrhyw syniadau neu sylwadau pellach? +Oni ddylai ffeministiaid roi cymeriad benywaidd cryf yn ganolog i'w llyfr? +Yr wyf yn cofio fy mod yn dychmygu fy hun yn ddyn mawr tew. +Fe gafodd y plant hwyl fawr wrth fynd allan yn y cwch. +Temtiwyd ef i yfed ei lasied cyntaf o gwrw mewn cyfarfod beirdd. +Caiff fforestydd eu torri i greu mwy o ofod ffermio ac adeiladu. +Byddwch yn parhau i ddatblygu eich sgiliau ymarferol yn y gweithdy. +Roedd hi'n gwisgo sgidiau bach coch del am ei thraed. +Byddwch yn dysgu cynllunio, monitro, datblygu a gwobrwyo perfformiad. +Sori, o'n i allan o'r swyddfa pnawn ddoe a bore 'ma. +Yn y capel fel yn y tŷ yr oeddynt yn ddirodres a chartrefol iawn. +Beth yw'r gobeithion ar gyfer y sioe? +Wedi gadael cysgod coed, dois i gaeau agored, ar ben y gefnen. +Ni bûm erioed hyd hynny mor gyfoethog. +Y fath wastraff, teithio'n gyson ac wedi pwyllgora, cychwyn yn ôl adref. +Mae crefydd y dyddiau hyn yn fwy o ffasiwn nag o fater bywyd. +Wna i jyst aros rhag ofn bod rhywun eisiau newid rhywbeth eto. +Bydd hi'n wyliau haf cyn bo hir. +Mae gen i awydd paentio'r stafell yma yn lliw piws golau. +Gwisgai got las a botymau gloywon arni, a chlos a legins llwydion. +Dangosir tlodi ym mhob prif ddigwyddiad yn y stori. +Mae hyn yn dangos y golofn rydw i eisiau'i fformatio'n amodol. +Ond mi rydw i am fod yr un fath â chi. +Rhaid cymryd y chwerw gyda'r melys. +Gorchuddiwyd yr hwyaden mewn saws eirin, a'i gweini gyda reis a llysiau. +Samplwyd dŵr yr Afon Ystwyth yng Nghwm Ystwyth, Ceredigion. +Dylech fanteisio ar y cyrsiau sydd ar gael +Gwleidydd Ceidwadol adain dde yw Jacob Rees-Mogg. +O fewn eich grwpiau cyfansoddwch ddarn sy'n adlewyrchu rhan o'r afon +Byddai hyn yn annog gweithgaredd corfforol dyddiol a rheolaidd i'r plentyn +Yn ogystal â chyfansoddi ac addysgu, roedd hefyd yn actor brwd. +Roedd yn gyson uchel ei barch gan ei gydweithwyr a'i fyfyrwyr +Ysgrifennwch eich enw a rhif arholiad ar y top +Daeth Caffe'r Dolwar ar y sgwâr yn fan cyfarfod pwysig i ni. +Rwyf yn caniatáu i'm plentyn gymryd rhan yn y clwb criced +Roedd yn ymateb yn gwrtais ac yn frwdfrydig +Dyn tawedog iawn oedd Anthony, neu Tony fel y galwai ei ffrindiau ef. +Roedd y siart hwn yn dangos rhywbeth cadarnhaol. +Roeddwn i'n sâl ar y cwch drosodd i Iwerddon. +Tair blwydd ar ddeg oed oeddwn pan garcharwyd fy mrawd. +Yr oedd yr haul yn dechrau goreuro'r mynyddoedd gogoneddus acw. +Ella gawn ni ymweliad ar y cyd eto os ydi hynny'n iawn +Mae hyn yn creu problemau alcohol a chyffuriau +Bydd cyfnod swydd y cadeirydd yn dod i ben yn syth +Ystyriwch faint mae technoleg yn gallu eich helpu chi mewn bywyd. +Yn ail rhowch ddŵr oer a glân i'ch parot bob dydd. +Fodd bynnag, mae'n parhau i wneud lymffocytau trwy gydol oes oedolion. +Dyma nofel arall gan awdur sy'n gwthio'r ffiniau llenyddol. +Dywedir ei bod yn wraig o bersonoliaeth gref ac addysg breifat. +Fyddet ti'n meindio glanhau'r car heddiw? +Gellir ymestyn geometreg hyperbolig i dri dimensiwn ac uwch ddimensiwn. +Gweithiodd fel athrawes am beth amser. +Tybed beth sy'n gwneud i Siriol Swyn deimlo mor ddigalon? +Fe'i lleolir yn y gwddf, ychydig o dan gartilag y thyroid. +Drama gyfoes ddychanol gan Geraint Lewis yw Dosbarth. +Mae'n gwneud synnwyr a fedra'i ddim meddwl am reswm arall. +Arbrofi ydw i. +Bu'n fyfyriwr israddedig mewn cymdeithaseg, seicoleg a gwyddoniaeth droseddol. +Caiff ei ddenu gan flodau, mêl a golau. +Mae'n diffinio'i hun fel mudiad democrataidd, poblogaidd ac unol. +Mae pob llinell yn cynnwys yr un odl. +Yr oedd yn dda gennyf fod Morgan wedi colli. +Tir isel sydd yn Sir Fynwy gan fwyaf. +Ffraeodd y ddwy chwaer. +Caiff ei ystyried yn system o nodiant sy'n dibynnu ar leoliad y glyff. +Mae pob un yn ymbelydrol. +Mae 'na ogla' da ar y bloda' yn y bora. +Mae'n hedfan rhwng Mawrth ac Ebrill. +Mae symud i fyw yn brofiad anodd. +Felly, pwy sy'n rong, fi neu'r genod. +Astudiaeth arloesol o gelfyddyd y Celtiaid gan John Morris yw Y Weledigaeth Geltaidd +Cysylltodd ei hun gyda'r Blaid Ryddfrydol. +Awgrymaf sgwennu atynt a gweld os a sut maen nhw'n gallu helpu. +Mae ganddo groen gŵydd. +Fe'i lleolir ger pentref bychan Tretŵr yn ardal Brycheiniog, de Powys. +Llyfr bach lliwgar am gath fach sinsir o'r enw Maw. +Caiff hefyd ei ddefnyddio mewn amaethyddiaeth. +Cracrwydd am ddiffyg offer diogelwch. +Ni chafodd y roced ei lansio. +Ffriwch y madarch mewn menyn poeth. +Bu'n aelod o'r Undeb Cymdeithasol a Gwleidyddol y Merched am rai blynyddoedd. +Cydweithiodd â hi a chynlluniodd y siacedi ar gyfer llawer o gloriau ei llyfrau. +Mathau o rosyn ydy prif fwyd y siani flewog. +Ceir dau grug arall ar gopa'r mynydd hwn. +Nath o stopio wrth ymyl y llyn i dynnu llun. +Am ein bod yn fwy haelfrydig, neu am ein bod yn ffolach? +Mae bywyd rhy fyr. +Dyna peryg gofyn barn y bobol am unrhyw beth dyddie 'ma. +Mi wnaiff les i ti dendio tipyn arnat ti dy hun. +Mi fuasai'n dda pe bai rhywun yn gallu rhoi trefn ar y sefyllfa. +Cafon nhw fuddugoliaeth swmpus yn yr etholiad. +Pa les yw i ti wingo yn erbyn yr anocheladwy? +Mae'n sgwennu colofnau ac adolygiadau i bapurau newydd Ewropeaidd. +Pwy sydd wedi sarnu lla'th ar y llawr? +Mae ar Restr Meddyginiaethau Hanfodol Sefydliad Iechyd y Byd. +Ganwyd Brown yng Nghaerfaddon. +Does gen i ddim llawer o ddim i'w sbario. +Dyna fy syniad i. +Roedd yno lawntydd eang a llwybrau troellog gyda borderi wedi'u clipio'n dwt. +Un cyfle i ennill. +Gest ti'r tecst nesi yrru i chdi ddoe? +Priododd ddwywaith, a hynny i ddwy Elizabeth. +Gwelsom lawer genethig yn codi'r llen sy'n cuddio'r gyffesgell. +Saethodd y dyn gwningen. +Ceir gwreiddiau dyfnion yn y cysylltiad rhwng Cymru a Swydd Amwythig. +Wi moyn mynd am dro yn car. +Trethi isel oedd thema ymgyrch y Ceidwadwyr, gydag economi a byddin gref. +Ceir sawl crug yn y clwstwr hwn. +Cymerodd arni beidio â'u clywed. +Doedd hi ddim yn bàs wych cofia. +Closiodd fy mam ei chadair yn nes at y tân. +Ysgrifennwch fformiwla ar gyfer cyfanswm cost galw plymar allan +Roedd yr ymgeiswyr i gyd wedi llwyddo i ateb holl ofynion y dasg +Mae hyn yn rhwystro cyfathrebu rhwng ffoaduriaid a phobl leol +Mae batri fy ffôn i'n isel. +Disgleiriodd y tywod, a gwridodd y grug. +Roedd y llanw'n mynd allan ar y pryd. +Bydd y tabl yn hyrwyddo sgiliau rhifedd hefyd +Yr oedd y llong yn dal i godi a syrthio yn y tonnau aflonydd. +Wnei di glirio lle i mi ar y top yn y gegin. +Gellir casglu bod hyn felly yn creu amgylchedd addysgol mwy positif +Aeth y ci gydag ef adref. +Roedd y chwe hynaf yn chware yn yr ardd. +Gwnaeth Wil fel y gorchmynnwyd iddo. +Pan ddeffroem yn y bore, dyna lle byddai yn darllen y llyfr o hyd. +Does dim llawer o ganu o gwmpas y cae. +Euthum i geisio clirio tipyn ar y llawr. +Yr oedd pobl yn byw yn weddol daclus yn y tai hynny. +Roedd rhai yn pleidio'r Rhyddfrydwr ac eraill yn pleidio'r Ceidwadwr yn selog. +Rwyt ti wedi gyrru'r eneth i ffwrdd am byth. +Darllenai'r papur newydd o glawr i glawr. +Yr oedd yno gynulliad mwy nag arfer. +Buom yn ddistaw am ennyd, ac yna dechreuodd fy mrawd drachefn. +Yr oedd Catrin wedi rhoi iddo ergyd ar draws ei war â'i hymbarél. +Bydd hi'n noson fwyn iawn am yr adeg o'r flwyddyn. +Cerddodd yn ei flaen nes daeth at fwthyn bychan to gwellt. +Yr oedd yn adnabyddus fel dyn go ddigrif ers blynyddoedd. +Y mae'n debyg fod fy ewythr wedi digio a chadw ei gopi. +Agorwch y ffenest i ni gael oeri ychydig. +Rhaid i mi ddweud gair neu ddau am fy ewythr. +Cafodd hi ganlyniadau calonogol iawn. +Yr oedd ei wyneb yn rhychau dyfnion, a'i ddwylaw yn gelyd fel haearn. +Roeddynt yn byw yn gynnil ac yn syml. +Chewch chi mo'i weld o chwaith nes bydd o mewn print. +Bu ar led ei hun am flynyddoedd wedi hynny. +Rhaid parchu pawb yn ddiwahân. +Prin y cawswn amser i feddwl. +Be wnewch chwi rwan, ynte? +Doedd neb yn cael yfed dim cyn eu triniaeth. +Roeddwn i yn disgwyl yn eiddgar am weld Elin. +Gobeithio y byddi di'n well yn fuan. +Wnawn ni ddod â'r anrhegion draw fory. +Yna, tynnodd ei het oddi am ei phen, gan ryw fwmian canu yn isel. +Dyw Lloegr ddim ar eu gorau heddiw. +Y mae yn ustus heddwch ac yn un o ddynion blaenaf y sir. +Lle bynnag y byddai Pero, ni byddai Dafydd byth ymhell. +Llafur mawr, a hynny o achos gwrhydri gwyllt y dyn ar y brig! +Ar y môr mewn gwirionedd y bu farw y rhan fwyaf o hynafiaid Siôn. +Ond bellach nid oedd amheuaeth am ei dduwioldeb. +Dyma'r lle cyntaf welsom yn Llydaw. +Mae'r ffyrdd wedi'u claddu o dan dri deg metr o graig. +Bwyd pwysicaf yr ardal oedd India corn. +Roeddwn yn rheoli eu gwaith a chynnig arweiniad a chefnogaeth iddynt +Fe fydd hi'n fisoedd cyn y byddan nhw'n medru symud nôl mewn. +Roedd yn dal ati o hyd i ymlusgo i lan y môr bob dydd. +Mae wedi colli lot o waith yn ddiweddar. +Pa beth bynnag yr ymaflai Dico ynddo, byddai yn selog dros ben gydag o. +Mae techneg gwneud y ffilm wedi mynd yn angof erbyn hyn. +Gosododd y dyn ei ddryll i orwedd ar y clawdd. +Yr oedd y meddyg un noswaith yn sefyll wrth erchwyn ei wely. +Yr oedd y dynion wrthi yn brysur yn paratoi at ail godi'r sgaffaldiau. +Fy hoff bryd o fwyd yw pys a ffagots. +Yr oedd y môr yn agos, ac yr oedd yr ardal yn un iach. +Wyt ti 'run mymryn mwy dy barch wedi'r cwbwl ganddyn nhw. +Mae'n nabod ei ffyrdd e. +Bwytaodd y plentyn ychydig o ffrwythau a bisgedi. +Collodd yr is-olygydd hwnnw ei gyfle. +Roedd ei gwallt yn felyn, ac roedd ei hwyneb yn felyn. +Roedd ganddi esgidiau gwyn glân. +Canai'r fwyalchen yn beraidd yn yr ardd. +Yr oedd gydag ef ddynes tua'r un oed ag yntau. +Medrwyd ei berswadio i dorri ei wallt drannoeth. +Roedd pryd o fwyd ar ei hanner ar y bwrdd. +Pam mae'n rhaid i ni fod yn ofalus? +Bachgen Hugh Bryan ydi'r gwaetha ohonyn nhw i gyd. +Mae Lloegr yn trio newid momentwm y gêm. +Pan anwyd Mary, fe'i rhoddwyd i ofal mamaeth. +Roedd y gwres yn gwneud i arogl annioddefol godi o fudreddi'r strydoedd. +Mae'r rhaff wedi rhedeg i lawr. +Fe wnaeth hi ddeffro yn teimlo'n flin iawn. +Roedd Mary yn casáu eu byngalo blêr. +Yr oedd yn hoff iawn gan ei gydweithwyr. +Doedd hi erioed wedi'i weld mor dawel o'r blaen. +Does dim byd da ar y teledu heno. +Stopiodd hi'i hun fel petai newydd gofio rhywbeth mewn pryd. +Edrychodd y forwyn yn ofnus. +Allwn ni gael ein harian nôl os gwelwch yn dda. +Chwaraeai'r dyfrgwn yn nŵr yr afon. +Yr oedd o yn ddistaw a digalon cyn amser cinio. +Wedi iddo gael pen y llinyn i'w law, stopiodd. +Mae Môr y De i weld yn ddiddiwedd. +Roedd panig ar bob llaw. +Eisteddai Mary yn ei chornel o'r cerbyd trên yn edrych yn boenus. +Daeth amser cadw noswyl, ac aeth Morris allan o'r offis. +Yr oedd yn rhaid iddi fynd i weini. +Roedd Lloegr ddau ddyn yn brin ar y diwedd. +Cymerwyd hi'n sâl yn ystod y nos. +O dipyn i beth, gwnaed ef yn ohebydd arbennig i'r papur clodwiw. +Gwnaeth Mary y daith hir i Loegr dan ofal gwraig rhyw swyddog. +Rhoddwyd pob dylanwad ar waith i ladd y bywyd Celtaidd. +Roedden ei llygaid hi'n fawr ac yn ofnus. +Ymestynnai gwlad goediog fryniog mor bell ag y gallai'r llygad weld. +O'r diwedd, meddyliodd un ohonom am ddull i geisio symud tipyn arno. +Cafwyd y dodrefn yn ddiogel i'r llong cyn iddi gychwyn. +Roedd hi gyda dyn ifanc pryd golau. +Mi ddylase'r hen dafarn fod draw yn y fan acw. +Gweinwyd y bwyd â chatwad mango syml ond blasus iawn. +Roedd Sobyn a'r Smeiliaid yn fand anhygoel. +Yr oedd ei dad heb fod adref ers tair blynedd. +Mi fûm mewn pwyllgor ar ôl y cyfarfod. +Fydda i ddim eisiau mynd i fusnesa o gwmpas y lle. +Sut mae hyn yn gwneud i chi deimlo? +Cyn hir dechreuodd y dynion ddylifo i mewn. +Talai grogrent am ei dipyn tir. +Mae'r chwarae yn siomedig iawn. +Mae haul y bore yn tywynnu ac yn ei oleuo ef a'r bwrdd. +Rhyddhaodd albwm newydd ddoe. +Mae hiraeth arna i am y de. +Mae hi'n dymor wyna. +Mae tarddle wedi cael ei leoli ar fynydd ble mae llawer o law +Paid â mynd i feddwl gormod ohonot dy hun. +Nid oedd fawr o gamp ar y pentref ei hun. +Hogyn deg oed oeddwn, ac yn ddieithr yn yr ardal. +Gwthiai'r ci ei drwyn i'm llaw, tynnwn innau fy llaw hyd ei ben. +Mae'r disgyblion yn creu graff bar o'r data ar dabl amlder +Y mae ei dillad yn wael, nid iddi ei hun y mae wedi byw. +Oni bai am drymder yr awyr, gallem feddwl mai yng Nghymru yr oeddem. +Gwelem groes garreg o gerfiad tlws ryfeddol. +Mae hi hefyd yn cymryd diddordeb proffesiynol mewn datblygiadau addysgol +Mae'r awyr yn edrych mor uchel. +Doedd Mary erioed wedi cael anifail anwes ei hun. +Wnaeth Mary ddim ateb. +Nid fi piau fo. +Bydda i nôl yn y gwaith ddydd Llun. +Dw i'n rhy goman ac mae gen i ormod o acen Swydd Efrog. +Aeth at y gwely a phlygu drosti. +Anadlodd anadl hir o ryddhad. +Fedra i weld hynny'n iawn. +Mi fyddi di'n fwy unig byth cyn y diwedd. +Pam nad ei di ag e iddyn nhw? +Mae fy nillad i yn ddu. +Fe gawson nhw de poeth i'w yfed. +Lapia di dy hun yn gynnes a dos allan i chwarae. +Rhoddodd hyn deimlad rhyfedd i Mary yn ei chalon. +Gymaint neisach yr oedd rhywun yn edrych wrth wenu. +Roedd coetsh ysgafn yn sefyll ar y ffordd gyferbyn â'r platfform bychan. +Edrych drwy'r ffenestr ymhen rhyw ddeg munud ac fe gei di weld. +Rwyt ti wedi cysgu'n hir. +Edrychodd i fyny arno gyda'i lygad disglair meddal. +Edrychodd o'i chwmpas, yn enwedig ar y tân. +Phrioda i byth, gwnes fy meddwl i fyny ers blynyddoedd. +Yna roedden nhw ar y ffordd fawr ac fel welodd gloddiau a choed. +Rhaid eu bod nhw wedi tynnu'r lle i lawr, Dafydd! +Does gen i ddim 'mynadd efo pobol sydd 'mond yn eistedd a syllu. +Er syndod iddi newidiodd ei hen wyneb, garw, sur ei olwg ar unwaith. +Dyma'r robin, oedd newydd orffen ei gân, yn ysgwyd ei adenydd. +Roedd y gwynt yn codi ac yn gwneud sŵn rhuo isel, gwyllt, unigryw. +Dw i'n cael fy niwrnod i ffwrdd unwaith y mis fel y lleill. +Mae peryg i'r hufen iâ doddi. +Un ffordd i ennill ambell geiniog oedd hel cen oddi ar gerrig. +Cyfrol yn cyflwyno rhestr o dermau a ddefnyddir yng ngwahanol adrannau llywodraeth leol. +Erbyn heddiw, goddiweddwyd y syniadau hyn parthed gwirebau. +Bywgraffiad John Elwyn Davies gan John Emyr yw Porth yr Aur. +Cafodd ei ethol yn ddiwrthwynebiad. +Gall heintiau ymledu drwy beswch. +Tybed a all Mali wneud hynny a chael mam-gu newydd yr un pryd? +Argraffiad o gerddi Tudur Penllyn a'i fab Ieuan ap Tudur Penllyn. +Awduron Cymreig yw Beti Rhys, Bethan Wyn Jones, Bethan Mair Hughes a Bet Jones. +Da iawn, pob dymuniad da ichi ar y gwaith. +Mae saethyddiaeth yn un o'r gemau Olympaidd modern. +Agorodd y robin ei big a chanu'n hyfryd, er mwyn dangos ei hun. +Bachgen o Ddyffryn Clwyd oedd Gwilym Owen. +Gall dolur rhydd neu rwymedd ei achosi. +Mae ar gael fel cyffur generig. +Mae rhai yn poeni y bydd pryder ôl-drawmatig ymhlith staff. +Treulia'r gaeaf fel chwiler. +Roedd y fenter yn llwyddiant, ychwanegwyd warws ac ehangwyd y siop. +Yn aml iawn, cânt eu coginio ar Ddydd Mawrth Ynyd. +Ceir carreg enfawr ar y copa. +Mae pwynt tebyg wedi'i godi gan y bòs. +Gweld postiad gan Carl ar Facebook, wnes i. +Llyfr i gofnodi'r dyddiadau hollbwysig yw Y Llyfr Penblwyddi. +Bu'n athro prifysgol mewn ysgrifennu creadigol am rai blynyddoedd. +Bu'n astudio pensaernïaeth yng Nghaergrawnt ond methodd ei arholiadau terfynol. +Gwell ymladd hyd at waed na bod yn gaethion. +Fe aeth i ffwrdd gyda'r dyn newydd. +Ceir pum math o gell wen. +Comedi newydd mewn cyfres o ddramâu byrion. +Ceir graig enfawr ar y copa. +Mwynha'r lawnsiad heno. +Eglwys Anglicanaidd ydyw ac mae ei drysau ar agor yn wythnosol. +Does 'na neb yn byw yn y bwthyn. +Ni bu i'r gorthrymedig erioed amddiffynnydd mwy dihunangar, mwy hawddgar, a mwy huawdl. +Casgliad o farddoniaeth gan sylwedydd treiddgar ar bobl ac iaith, natur a bywyd. +Dw i'n cofio rywun yn dod i'r tŷ un noson. +Mae nhw 'di mynd am dro fyny'r lôn. +Ond nawr roedd hi'n hoff iawn ohoni. +Casgliad o deithiau cerdded yn ardaloedd Dyffryn Conwy. +Wedi ei ddarllen a defnyddiol iawn. +Mae ganddi bentwr o lyfre wrth ochr y gwely. +Daeth yn un o gymeriadau mwyaf dylanwadol y byd ffasiwn, yn rhyngwladol. +Mi oedd ceffyl du ei dad yn y cae. +Gellir gweld ôl y cynllunydd ym mhob cwt a chornel. +Beth tybed oedd cynllun Mrs Mochyn? +Gôl fawr i Joe bach. +Sut ddyfodol fydd gan Elen gyda'i bywyd bellach ar chwâl? +Mae strydoedd Llundain yn lle peryglus i fachgen bach geisio byw. +Magwyd ef yn Perth yn yr Alban. +Casgliad o ganeuon meithrin ar gyfer y gaeaf, y gwanwyn a'r haf. +Histoleg ydy'r enw ar yr astudiaeth o'r meinwe. +Gallai chwarae'r ffidil a snwcer i safon uchel iawn. +Fe ddywedir mai mantais fyddai hynny. +Bydd ei ddefnyddio yn ystod beichiogrwydd yn debygol o niweidio'r babi. +Mae hefyd o blaid diddymu Brenhiniaeth Lloegr. +Geiriadur termau Cymraeg-Saesneg a Saesneg-Cymraeg yn ymwneud â therapi galwedigaethol. +Ei hoff dirwedd ydy caeau agored a gerddi. +Wi moyn darllen y llyfr cyn i'r ffilm ddod mas. +Wedi rhoi'r swm faswn i'n gwario mewn pythefnos iddyn nhw. +Dyma gyfrol gyntaf Owain Owain, un o arweinwyr cynnar Cymdeithas yr Iaith. +Os am wneud saws béchamel gwerth chweil, rhaid ei gymysgu yn gyson. +Mae'r pysgodyn hwn yn mynd yn dda iawn gyda gwin gwyn sych. +Mi oedd 'na lestri budr yn y sinc. +Mi aeth y goleuadau i gyd i ffwrdd. +Casgliad o ysgrifau gan Geraint Talfan Davies yw Y Brifddinas, Diwylliant a'r Genedl. +Mae golosg actifedig yn gweithio trwy arsugno'r tocsin. +Gwasanaethodd fel ynad heddwch ar feinciau Sir Gaerfyrddin a Sir Frycheiniog. +Cerddi yn tarddu o brofiad y bardd fel mynach mewn mynachlog gaeedig. +Faint o gloch ti am ddod yma fory? +Cyfeirir at y rhain hefyd fel y radiws a chanol y cylch. +Darlith ar Lewis Jones gan Dafydd Tudur yw Lewis Jones a'r Wladfa Gymreig. +Bydd defnydd yn ystod beichiogrwydd yn debygol o arwain at niwed i'r babi. +Mae'r nodweddion canlynol yn gymwys am bolygonau amgrwm a pholygonau serennog. +Wedi gadael yr ysgol mynychodd Brifysgol Efrog a Phrifysgol Ddwyrain Anglia. +Dwi'n ail adrodd y cwestiwn yn arafach ond heb fod yn ymosodol. +Cafodd ei wobrwyo drwy ei benodi'n aelod o nifer o bwyllgorau seneddol. +Casgliad o bum drama gan Emyr Edwards yw O Achos y Mab Bychan. +Os cânt eu dychryn, fodd bynnag, gallant hedfan ar gryn gyflymder. +Er mor drwchus oedd yr eiddew yn hongian, roedd bron i gyd yn rhydd. +Ffêc niws, bois. +Mae llawer o'r rhai yr effeithir arnynt yn marw cyn eu geni. +Dwy linell o gyhydedd hir sy'n gwneud un pennill fel arfer. +Os felly, gystal â bod yn farw, sbo. +Mae'r nofel yn llawn cymeriadau brith, ac Aberystwyth yn gefndir i'r digwyddiadau. +Gwleidydd dros Blaid Cymru a Chomisiynydd yr Heddlu a Throseddu ydy Arfon Jones. +Ef a'i hanogodd i ysgrifennu barddoniaeth. +Negesydd cemegol ydyw mewn gwirionedd, sy'n cludo negesau o gell i gell. +Mae'r beicwyr 'ma'n sôn am neud cylchdaith. +Yr oedd yn ddrwg gennyf fod Hywel wedi ennill. +Da iawn Rhys! +Ceir crug arall gerllaw. +Mi oedd rhaid iddi fynd at y doctor. +Bara ceirch mewn dŵr poeth neu mewn llaeth poeth ydy brywes neu briwes. +'Di Ken ofn gwlychu'i wallt? +Mae angen i'r ddau osodiad o amgylch y cymal hwn fodloni ei gilydd. +Ges i freuddwyd ryfedd iawn neithiwr. +Gellir dewis ei yrru gyda'r naill danwydd neu'r llall. +Mae o'n cadw crwban fatha anifail anwes. +Parhaodd yn y swydd hyd ddymchwel y llywodraeth y flwyddyn ganlynol. +Claddwyd ei weddillion ym mynwent capel yr Annibynwyr, Soar, Talsarnau. +Roedd pawb ym Mlwyddyn Pump yn edrych ymlaen at y trip i gastell. +Mae hi'n ymarfer corff yn y llofft gefn. +Mae 'y ngwddw i'n brifo, mae raid bo' fi 'di cysgu'n gam. +Roedd nifer yn honni eu bod wedi eu hysgrifennu gan y llofrudd ei hun. +Cyhoeddwyd gan y Cylch Catholig. +Pwy sy' 'di colli llefrith ar lawr? +Fe'i ceir mewn mamaliaid yn unig. +Gwasanaethodd fel Prif Stiward Arglwyddiaeth Machen, Casnewydd a Gwynllŵg. +Cyfrol am rai o arwyr chwaraeon Cymru gan Gary Pritchard yw Arwyr Chwaraeon. +Mae lot wedi'i gwblhau a dim ond tua mil o eiriau'n weddill. +Stori ar gyfer plant gyda lluniau lliw yn llawn hiwmor. +Yn ne Ewrop a gogledd Affrica maen nhw'n bridio drwy'r flwyddyn. +Pan roddir yn fewnwythiennol, dylai'r claf gael ei fonitro'n agos. +Dwi'n disgwyl dim cysondeb ganddo. +Ceir un ffotograff o lawysgrifen y bardd. +Mae o allan yn fan 'na yn ista ar y wal. +Ti angen y mwgwd llygaid a phlygiau clustiau sydd ar hediadau dros nos. +Daliwch ati i ysbrydoli. +Y dyddiau hyn gellir ychwanegu cwrw gyda'r cynhwysion, a brandi drosto. +Ers hynny mae'r nofel wedi'i chyfieithu i Ffrangeg a Hwngareg. +Mae'r glöyn byw, pan fo'n oedolyn yn goblyn o gyflym. +Roedd Martha wedi sôn wrthyn nhw am y ferch fach o India. +Bryn yn Sir Ddinbych ydy Moel Gyw, sy'n rhan o Fryniau Clwyd. +Do, fues i yna ryw ddwy waith cwpl o flynyddoedd yn ôl. +Cyfeirlyfr taith Cymraeg gan Penri Jones yw Byd y Cymro. +Yna daeth argraffu llinell, parhaus. +Mae'r llyfr yn gyfuniad o destun Harri Parri a ffotograffau proffesiynol, trawiadol. +Ewch adref, mae hi'n tywyllu tu allan. +Iwsia'r cribin i lefelu'r pridd. +Ie, fi yw'r gynulleidfa darged, fel ti'n gwybod. +Teimlo'n reit emosiynol. +Mae'r siani flewog yn wyrdd gyda llinellau melyn a smotiau gwynion. +Ei diriogaeth yw Ewrop a Llychlyn. +Mae triniaeth yn dibynnu ar ddifrifoldeb ac achos y clefyd. +Mi roddaf gyfarwyddyd bras iddynt o dan bob pwnc. +Ma' mwng Richards yn edrach yn ysblennydd. +Addasiad ar gyfer plant o stori'r bugeiliaid ar y Nadolig cyntaf. +Roedd ganddo ofn pethau mawr. +Dyna mae o'n ddeud ar flaen y siop. +Ydy hyn ar yr agenda? +Mae enwau'r gwyliau hynny yn dod o wyliau pagan Almaenaidd ac amldduwiol Geltaidd. +Ymgyrchai hefyd dros hawliau ymfudwyr. +Mae'n gynhenid Gymraeg ac nid Lladin. +Gellir disgrifio gwrthrychau a ffurfiau sy'n cynnwys onglau sgwâr gyda'r ansoddair sgwaronglog. +Gellir deud mai un ffordd o frasamcanu yw drwy ddefnyddio llai o ddigidau. +Dyfais electronig i wneud symiau ydy'r cyfrifiannell. +Mi fuasai hynna'n hollol hurt. +Ymsefydlodd y ddau yng Nghydweli. +Wedi hynny, defnyddiwyd yr adeilad fel marchnad anifeiliaid. +Fodd bynnag roedd hylifedd y busnes yn anwadal. +Mi fydd yn ddwyieithog yn y pen draw, dw i'n cymryd? +Nid oedd gan yr ymgeiswyr ddim i'w gynnig. +Nid yw ar gael yn syth bin pan rydych ei angen. +Credu bod y bachan yma'n edrych yn fwy cŵl 'na fydden i ynddo. +Parhaodd ei dylanwad drwy'r degawdau nesaf. +Mae'r theorem yn ganlyniad rhesymegol i'r gwirebau hyn. +Gorchuddir y copa gan rug. +Neu ella bod o fan hyn. +Beth Yw'r Haf i Mi? +Fe'i ceir yn Ewrop, Asia a Gogledd Affrica. +Canlyniad y toriad hwn oedd creu Cefnfor yr Iwerydd. +Fe brynodd e flode iddi ar 'i phen-blwydd. +Rwy wastad yn pigo un neu ddau darn o sbwriel. +Dw i'n ffan mawr o hynna. +Saif Caer Bach yn Nyffryn Conwy, nid nepell o Rowen. +Mae ganddo dwll yn 'i 'sgidia. +Welist ti'r newyddion bora 'ma? +Fydda i'n siarad mewn odla am w'snosa i ddod. +Stori i blant gan Alys Jones yw Storïau Cornel yr Ardd. +Faint o'r gloch chi moyn mynd sha thre? +Roedd Elizabeth yn chwaer i David Ellis twrnai cyffredinol gogledd Cymru. +Toddaid hir y gelwir y ddwy linell olaf mewn hir a thoddaid. +Castell yn nhref Aberhonddu, Powys yw Castell Aberhonddu. +Ydych chi yn y papur wythnos yma? +Mae sgil-effeithiau cyffredin yn cynnwys cyfog, poenau'r abdomen, a chur pen. +Mae pobl yn ei defnyddio wrth gynhyrchu amonia, ac wrth greu tanwydd. +Mae màs yn wahanol i rym ac yn cael ei fesur mewn cilogramau. +Dyma'r symbol a ddefnyddir fwyaf ledled y byd. +Dyma'r chweched cylch mwyaf yn y rhan hon o Ogledd-orllewin Ewrop. +Yn saith oed, gallai ddal pen rheswm am faterion gwleidyddol y cyfnod. +Ceir hefyd ddiffyg rhannol ar y lleuad. +Mae gan y ddynes wallt cyrliog melyn. +Mae'r gair ar led nad ydych yn llywodraethu yn rhy dda. +Maent yn gysylltiedig â'i gilydd a chyda'r nerfau yn y corff. +Dysgodd Gymraeg a chafodd wersi ar y delyn gan Alwena Roberts. +Dwi'n cytuno gyda Morgan. +Roedd yn weithredwr gwleidyddol asgell chwith a ddaeth yn gomiwnydd ymroddedig. +Mae'r machlud mor hardd. +Pumed teitl y gyfres am y ceffyl bach direidus. +Lle y cynigir iddynt y fargen orau? +Dydi hi ddim yn cytuno hefo iwsio lledr achos bo' hi'n figan. +Caiff ei gysylltu'n agos gyda thebygolrwydd. +Doedd byth yn sylwi eu bod nhw'n gwneud pethau drosti. +Does neb yn teimlo'n saff yn yr Almaen cyn yr Ail Ryfel Byd. +Wyt ti moyn i fi beintio dy winedd di? +Nath hi benderfynu dod yn Fwdydd. +Yn aml, caiff ei ddenu at olau. +Roedd ei rhieni yn Weriniaethwyr Rhyddfrydol cyfoethog. +Wyt ti'n meddwl byddwn i byth yn medru sgipio fel yna? +Priododd y ddau wedi hynny. +Pleidlais gudd ar bapur fydd hon. +Nid cyfeiriad at y sant gwrywaidd Cadog yw hyn yn ôl yr haneswyr. +Roedd y cam hwn yn graith seicolegol a barodd gweddill ei hoes. +Ni fynn ei ddiwyllio ar delerau ei ysbeilwyr. +Sgwenna'r rhestr i lawr ar bapur. +Mae hefyd yn awdur gweithiau sylweddol. +Tecwyn Ifan oedd yn sgrifennu'r rhan fwyaf o ganeuon Ac Eraill. +Casgliad o ysgrifau gan Sioned Puw Rowlands yw Byd y Nofelydd. +Llyfr sy'n adrodd hanes y newyn yn Affrica mewn dull syml. +Chi moyn i fi lanhau'r llawr fan hyn hefyd? +Fe'i ceir ar ei adain o Fai hyd Orffennaf. +Nid ci cyffredin yw Clem! +Roedd y cyfieithiad o Gymraeg i Saesneg yn rhyfeddol o dda. +Dydi o ddim yn gweithio ar fy ffôn. +Copa llyfn heb garnedd. +Drama ysgafn gan John Evans yw Gormod o Ddewis. +Nofel gyntaf yr awdures a'r gantores o Landysul. +Bu farw yn Salvador. +Mi oedd yna lot o bysgod yn yr afon. +Mae nain, mam a merch yn byw o dan yr unto. +Mae'r olion ar lethr gorllewinol, gyda golygfa fendigedig o'r môr. +Daeth tri o aelodau'r teulu'n frenhinoedd ar Loegr. +Roedd y ddau riant yn Gristnogion defosiynol gyda chydwybodau cymdeithasol cryf. +Mae'r traethawd yn llawn dadansoddi treiddgar. +Astudiaeth ddiwinyddol ar ddiwinyddion rhyddhad o Dde Amerig. +Fel ei chwaer, ychydig iawn a wyddom amdani. +Bydd rhaid i fi fynd yno. +Mae graddfa'r cymesuredd yn fesur o'r cylchdro hwnnw. +Ceir darlleniadau, gweddïau, myfyrdodau ac anerchiadau. +Ysgrifeniadau byrion Morgan Llwyd. +Cedwir y llun yn y Galeri Cenedlaethol yn Llundain. +Casgliad o fyfyrdodau gan Elfed ap Nefydd Roberts yw Y Duw Byw. +Y chwe gwlad oedd Iwerddon, Lloegr, Cymru, Ffrainc, Yr Alban a'r Eidal. +Stori wedi'i lleoli yn y dyfodol. +Planhigyn bychan a dyf yn y cloddiau ydy camri, neu gamil. +Mae'r fflag yn chwifio. +Nofel i blant gyda darluniau du-a-gwyn. +Beth am Abercraf, hefyd? +Gwell ei adael felly, dw i'n meddwl. +Pan fo'n cael seibiant mae'r adenydd yn gorgyffwrdd ar fôn coeden. +Teg deud nad ydi gweddill y teulu mor ecseited â fi. +Mae'r llabed blaen yn gweithredu ar sail mewnbwn synhwyraidd a ffactorau eraill. +Lle 'dach chi bois? +Pam ddim ei drafod yma yn gyhoeddus? +Coda dy ên. +Ges i frechdan efo salad i ginio. +Mae ei gopa'n eitha gwastad. +I ddarganfod y gyfradd rifo, rhaid mesur y rhifiad cefndirol yn gyntaf. +Y term swyddogol yno yw strwythur wedi'i warchod. +Credent mewn ymgyrchu'n uniongyrchol, drwy dor-cyfraith, ymprydio ac yn y blaen. +Prif fwyd y lindys ydy'r onnen. +Mi wnaeth yr amgylchiadau eu gorfodi i ganslo. +Nofel am wewyr dyn yn yr oriau mân. +O dde-orllewin Asia a gogledd Affrica y daeth yn wreiddiol. +Bydd croeso i Pete alw heibio'r stondin yn y 'steddfod i gael sticeri. +Roedd yn wleidyddol iawn ei natur, ac roedd yn aelod o'r Blaid Ddemocrataidd. +Gall y patrymau ar ei gorff amrywio cryn dipyn. +Gall effeithio chwyddiant gwledydd a gall codiad aruthrol yn ei bris greu dirwasgiad. +Casgliad o emynau modern i blant wedi eu trefnu'n llawn. +Hwynt yw ein harglwyddi — ein duwiau a ddylaswn ddweud. +Ond mae bedd y brenin yn cynnwys cyfrinach arswydus. +Fe'i defnyddir ers cyn hanes, gan bron pob diwylliant yn y byd. +Dw i'n sbïo ar luniau ohonach chdi yn blentyn. +Pryddest mewn pedair rhan gan Rhydwen Williams. +Ac roedd y bwthyn i gyd yn ogla'n dda. +Mae'n hedfan yn y nos yng Ngorffennaf ac Awst. +Gan iddo farw yn ddibriod daeth yr is-iarllaeth i ben. +Mae triniaeth yn dibynnu ar yr achos sylfaenol. +Mae eisiau rhaglenni fel Pawb a'i Farn a Newsnight yn arbennig i Gymru. +Yr astudiaeth wyddonol o sut mae'r corff dynol yn gweithio ydy anatomeg ddynol. +Caiff ei werthu'n ffres ac yn sych. +Erbyn heddiw, tŷ preifat ydyw, gyda thyddyn bychan yn y cefn. +Mae i'r gogledd o Lyn Gweryd ac i'r de o Foel Llanfair. +Ma 'na genhedlaeth goll sy' 'di colli allan ar ddarganfod byd natur. +Daeth ei dad adref gyda'r bagiau siopa. +Perchennog y mynydd ydy Ymddiriedolaeth Genedlaethol yr Alban. +Rhoddodd y pysgodyn ei ben i fyny at wyneb y llyn. +Roedd gwreiddiau'r teulu yn Llanrwst. +Galwodd am weithredu yn erbyn newid yn yr hinsawdd. +Saif yn Awdurdod Unedol Cyngor yr Ucheldir. +Maent yn gwrthod gwerthu eu heiddo ac yn rhwystro'r cynllun boddi. +Doedd neb ond hi'i hun fel petai byth yn dod yma. +Oh, grêt, heb glywed amdanynt o'r blaen. +Mae saith sillaf ym mhob llinell. +Rhedodd y defaid i ffwrdd. +Un diwrnod wrth bysgota, meddyliodd ei fod wedi gweld môr-forwyn wrth ei gwch. +Pasia'r llysia' i fi plis. +Dyw motor y sment micsar ddim yn troi, jyst yn hymian. +Mae'n löyn llwyddiannus iawn a'r niferoedd yn cynyddu. +Dyma restr o ddinasoedd Albania. +Mae'n hedfan yn y nos a chaiff ei ddenu gan olau. +Nes i lwyddo i godi'n fuan bora 'ma. +Caiff ei goginio'n araf ac felly mae ei liw'n eitha tywyll. +Mae gwyddoniaeth yn hwyluso'r gwaith o ragfynegi'n gywir. +Nid yw Aelodau'r Cynulliad na Senedd Ewrop yn cael eu rhestru. +Roedd yr hyrddiad yma yn gryfach na'r lleill. +Ganwyd John William Thomas yn Allt Isaf, Pentir. +Nofel feistrolgar, gynnil ar gyfer oedolion, wedi'i lleoli ym mhentref Aberdaron yn Llŷn. +Profodd yn hynod boblogaidd fel perfformiwr lleol. +Ymhyfryda llawer o bobl leol heddiw eu bod yn perthyn iddo. +Mae'n nodedig hefyd am ei gwaith ymchwil manwl ac ystod eang ei llyfrau. +Mae'n nodedig am ddosbarthu a disgrifio rhywogaethau newydd. +Glaniwyd ar y lleuad yn yr ardal a fedyddiwyd yn Fôr Gwybodaeth. +Ti'n gallu 'i ffrio fe mewn menyn. +Ond mae'n well cael gwybodaeth swyddogol yn hytrach na bod sïon yn cylchredeg. +Cywilydd oedd anurddo corff mor hardd; gresyn oedd torri ymaith fywyd mor ieuanc. +Wi wedi gosod y cloc larwm am bump bore fory. +Wedi marw Capten Davies bu Mair yn cynorthwyo ei mam i redeg y dafarn. +Mae'n mawrygu cenedl elynol yn fwy na'i genedl ei hun. +Argraffwyd taflen Gymraeg a gellir cael copi ohoni. +Adnabyddir ymarferwyr cyfrifeg fel cyfrifwyr. +Mae'r diffyg yn llai ond yn dal i fodoli. +John Bully, Ywain Taffi, a Daniel Paddy yw enwau llawn y tri penteulu. +Maen nhw'n debyg ond ddim yr un peth. +Rhoddwyd ei weddillion i orwedd yn Eglwys Petersham. +Cymerodd e ddwy flynedd i wneud y gwaith. +Cafodd ei ethol yn ddiwrthwynebiad ar bob achlysur. +Dim ond Bell ac un fenyw arall a aeth ymlaen i dderbyn gradd brifysgol. +Dilyniant i'r nofel Rhannu'r Tŷ gan Eigra Lewis Roberts. +Dyna sut ddysges i. +Ydych chi'n dal yn aelod o'r cylch? +Mae'n cael ei weini drwy chwistrelliad i mewn i wythïen. +Roedd hefyd yn awdur cyfres o werslyfrau gramadeg. +Mi oedd y lori laeth wedi troi drosodd ar y ffordd. +Fe wnaethon nhw weiddi'n hapus. +Dim syniad am unrhyw stwff 'mond be mae'r plant yn chwarae. +Ardal yng nghymuned Bodffordd, Ynys Môn, Cymru yw Heneglwys. +Fe aeth y ferch at lan y llyn. +O'dd y môr yn gynnes braf. +Defnyddir y term gan fwyaf o fewn daeareg, bywydeg ac ecoleg. +Testun ail gainc y Mabinogi gyda rhagymadrodd ysgolheigaidd, nodiadau eglurhaol a geirfa fanwl. +Erthygl ddiddorol ar yr angen i gyfathrebu gyda pobl yn eu priod iaith. +Dyma ydy sail prosesau bywyd ei hun. +Gelwir y ddau is yn chwarennau parathyroid israddol. +Defnyddiwyd iaith theori categori i ffurfioli cysyniadau megis setiau, cylchoedd a grwpiau. +Gwyddom fod y Rhufeiniaid yn meddwl cryn dipyn o'r planhigyn hwn. +Yna fe'i galwyd yn Garchar Dinas Dulyn. +Mae yma ddau os nad tair heneb, sydd o bosibl yn garneddau. +Ti eisiau i fi roi sws i ti? +Y rhan o fathemateg lle astudir rhifedd gan fwyaf ydy algebra. +Gwrthododd ei rhieni ei chais i fynd i'r brifysgol. +Ceisiais i ffonio ddoe. +Fe afaelodd yn ei llaw. +Rho'r ffwrn mla'n cyn i fi ddod nôl o'r gwaith. +Angen edrych ar ôl y bobl sy'n edrych ar ein hôl ni. +Mae dim ond i bobl gyda chorff athletaidd. +Rho'r popty mlaen cyn i mi ddod adra. +Mae'n cynrychioli Plaid Genedlaethol yr Alban yn Nhŷ'r Cyffredin. +Miwsig ymlaen, ymlacio a dysgu rhywbeth newydd. +Enw copa'r mynydd yw Bryn y Bol Mawr. +Aeth gŵr a gwraig uniaith o Loegr i Ffrainc. +Gellir hefyd adeiladu amrywiadau geometrig gydag wynebau afreolaidd. +Mi deithion nhw ar gefn ceffylau ar draws y dyffryn. +Ei thad oedd Brychan, sefydlwr teyrnas Brycheiniog yn ôl traddodiad. +Y llyfr cyntaf o'i fath yn y Gymraeg. +Casgliad o deithiau cerdded o gwmpas Henffordd. +Cwm Tawe, o'i ddechreuad ym mhedwardegau'r ganrif ddiwethaf hyd heddiw. +Daeth wagenni a cheffylau Corona yn olygfa gyffredin a phoblogaidd ledled Cymru. +Casgliad o geinciau telyn gan ddeuddeg cyfansoddwr o gyffiniau Llŷn ac Eifionydd. +Roedd y llongau mewn dyfroedd rhyngwladol ar y pryd. +Mi oedd na ddwy orsaf bleidleisio yng Nghymru ar gyfer etholiadau Gwlad Pwyl. +Diolch i ti am ateb. +Cymerodd ran mewn sawl sioe deledu. +Cyfrol fydd yn gwneud i chi gywilyddio a gwenu! +Cyn hir, graddiodd ym Mhrifysgol Llundain. +Dw i ffansi cwcio cinio dydd Sul. +Be' fysach chi'n licio i yfad? +Yr ail reswm yw i fynychu clyweliad ar gyfer ysgol piano. +Hi hefyd yw Bardd Llawryfog cyntaf yr Americanwyr Brodorol. +Ti moyn mynd mas heno? +Casgliad o straeon byrion doniol ac amrywiol sy'n addas ar gyfer dysgwyr. +Un mewn cyfres o astudiaethau ar feddylwyr amlwg, yng Nghyfres y Meddwl Modern. +Ysgol ddwyieithog, wledig dwy filltir o Ruthun ydy Ysgol Llanbedr Dyffryn Clwyd. +Yn anffurfiol, mae theori categori yn theori gyffredinol o ffwythiannau. +Rheibiwyd sawl pentref ac eglwys ar y ffordd, mae'n debyg. +Bu lot o waith ar y bont yn dilyn y llifogydd diweddar. +Mae'r erthygl amdanoch chi ar y wefan rŵan. +Emosiwn cryf a deimlir mewn perthynas â pherson arall ydy cariad. +Rhaid cwblhau ambell i dasg er mwyn datgloi rhai lleoliadau. +Dyw'r ddolen i'r ap ar Google Play ddim yn gweithio chwaith. +Mae ceisio dod o hyd i ddogfen wrth chwilio gwefannau'r Llywodraeth yn anobeithiol. +Roedd agwedd y wasg tuag at ei anabledd yn gymysglyd. +Nofel gyntaf yr actores o bentref Llanfair ger Harlech. +Cath fach frech oedd hi. +Ar ôl pump awr o gerdded oeddan ni wedi blino. +Yn y rhestr ganlynol, nodir y math o ddangosydd mewn cromfachau. +Pan ddychwelodd atynt roeddent wedi troi'n niwlog. +Roedd nifer o'r teulu dros y blynyddoedd yn gyfreithwyr. +Bu'n aelod o Academi Celfyddydau a Llythyrau America am rai blynyddoedd. +Rhaid golchi dwylo wedi cyrraedd y tŷ. +Casgliad o gerddi a rhyddiaith i blant gan Mari Siân Stevens yw Brasluniau. +Doedd ganddi ddim syniad fod ei ffrindiau wedi trefnu parti. +Dw i wedi colli gwaith oherwydd hyn oll. +Mae nhw'n rhegi ar ei gilydd. +Daeth yn rhugl mewn Ffrangeg, Saesneg ac Almaeneg. +Dwi braidd yn nerfus. +Roedd yn Radical brwd ac yn weithgar gydag ymgyrch y Siartwyr hefyd. +Pwy yw'r ysbrydion sy'n llechu yng nghornel yr atig? +Mewn pobl iau, gellir ei achosi trwy wrando ar ormodedd o sŵn uchel. +Mae hynny'n ddigon am y tro. +Does dim ap arall yn gwneud eto. +Gair Ffrengig ydoedd yn wreiddiol. +Mae'r olwyn sy'n troi'n creu diweddglo. +Nofel am griw o bobl ifanc sy'n aelodau o fand cyffrous iawn. +Mae hyn yn groes i adio a lluosi. +Mewn defnydd mwy modern, mae hefyd yn golygu hyd y llinell hon. +Roedd y datblygiad mewn teithio yn un effeithiol a pwysig +Gadawsom y felin, ond gwelem hi o bob pen bryn gyrhaeddem. +Bydd hyn yn ehangu geirfa ac yn creu brawddegau mwy estynedig +Prin iawn yw'r esiamplau disglair yn fy mhrofiad i +Pwy enillodd Ras yr Wyddfa y llynedd? +Mae tiwtor gwych ar y cwrs yma. +Lle wyt ti eisiau mynd am bryd o fwyd? +Roedd ganddo fe lais newydd ffres. +Methent wybod oddi wrth fy iaith o ba ran o Gymru y deuwn. +Rydych yn cydnabod heriau ac yn dangos sut wnaethoch ymateb +Aethom i mewn, i'r lle tawelaf fu erioed. +Dw i ddim yn cofio fy enw defnyddiwr. +Yr oedd gweled Llythyrdy Lannion fel dihangfa rhag marwolaeth inni. +Mae hon yn stori am gawr oedd yn byw ar ben Cader Idris. +Mae'n holl bwysig eu bod nhw ddim yn ildio cic gosb. +Bydd angen gwrando, siarad yn glir a dilyn cyfarwyddiadau. +Fe rown ni un cynnig arall arni. +Rwy wedi colli fy llais ar ôl canu gormod. +Mae'n amser mynd i odro'r gwartheg. +Daeth dim bws am awr, wedyn daeth dau fws gyda'i gilydd. +Dan lofft yr organ yr oedd plant yr ysgolion, mewn dillad gweddus. +Dyma'r glustog rydw i wedi dewis creu yn yr arholiad +Rhaid i mi gael sgidiau glaw newydd. +Roedd pobl yn rhoi sylwadau ar y cyfryngau cymdeithasol. +Rho drefn ar y llyfrau yna wir. +Fe gollon ni'n cyflenwad trydan. +Canwch y gân yna i ni unwaith eto. +Holai'r merched ni, er mawr foddhad i'r dyrfa oedd yn y gegin. +Efo phob damcaniaeth derbynnir beirniadaeth, boed yn llym neu'n ysgafn +Mae'r coed yn dechrau blaguro. +Lleoedd i'w gochel fel rheol ydyw gwestai y siaredir Saesneg ynddynt. +Ar lawr yr oedd y tân, a chrochanau o bob math bob ochr iddo. +Ie, oes ryfedd ydyw'r oes hon. +David Cameron benderfynodd gynnal refferendwm ar Brexit. +Rhaid trawsnewid yr economi a'r gymdeithas i amddiffyn ac adfer natur. +Mae'r defaid i gyd yn ddiogel yn y cae top. +Maen nhw wedi'n rhybuddio i symud y defaid i dir uwch. +Dyma hi'n baglu dros ei sgert hir. +Y mae'n eithaf clyd a glân, er mai bychan iawn yw ei ffenestr. +Bydd hi'n gwawrio toc. +Dan Biggar sydd am gicio. +Hon yw'r seremoni i agor y pumed Cynulliad ers i ddatganoli ddechrau +Daethom at ddwy felin droir gan y môr. +Dylech chi weld haen wen linynnog yn ffurfio ar ben y sylwedd +Roedd Denzil Davies yn aelod seneddol dros Lanelli. +Meg a Fflos y enwau'r cŵn defaid. +Gallwn weld bod y set yn broffesiynol iawn +Tybiwn fyd mod yn gwybod pa beth oedd yn blino ei meddwl. +Saif ar graig red allan i'r môr. +Ni ddaethom oddi yno unwaith ar ein cythlwng nac yn waglaw. +Yr oedd pawb gyfarfyddem yn awyddus am sgwrs. +Yr oedd yn synnu mwy fod neb wedi cymryd yr ysmaldod o ddifrif. +Mae tiriogaeth bele'r ffawydd yn lledaenu drwy'r wlad. +Mae naw parth amser gwahanol yn Rwsia. +Gwnaent y gorau o'r ardd a'r cut mochyn. +Gwyddem fod ei dad a'i fam yn dalentog. +Bydd rhyw ddeucant yn mynd i'r capel. +Dododd ei dwylaw un o boptu i'w genau a gwaeddodd. +Ydech chi yn cofio'r lle fel yr oedd o? +Yden ni wedi colli'r ffordd, dywed, Elin? +Amddiffynnir y cwrel yn y lagŵn rhag tonnau gwyllt y môr. +Cafwyd sawl llongddrylliad ar y creigiau hyn. +Os gwelid Dafydd yn unman, gellid bod yn sicr fod Pero yn agos. +Roedd y gwiwerod wrthi yn cuddio'r cnau. +Yr oeddynt rywsut fel pe buasent wedi mynd yn gymysg. +Mae angen tiwnio'r delyn. +Dododd yr het o'r neilltu ar y dresel dderw. +Os wyt ti'n oer gwisga gardigan arall. +Roedd y lle yn bwysig iawn i'r hen Bictiaid. +Byddai yn eistedd wrth ffenestr oedd gyferbyn â ffenestr siop weithio'r cryddion. +Defnyddid y mygydau mewn seremonïau. +O'r diwedd yr oedd yr hen forwr cadarn ar y lan. +Does yma ddim englyn i'r Ysgol Sul, meddwn, gan edrych ar y bardd. +Mae llawer o lygredd yno. +Mae wedi'i hyswirio rhag llifogydd. +Prin y disgwyliai fedru gwneud dim ond edrych ar Wil yn ei berygl. +Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch yw enw'r pentref. +Mi wn erbyn hyn. +Ond yr oedd rhywbeth yn falch yn yr eneth erioed. +Roedd olion paent o gwmpas cegau'r cerfluniau. +Yn eu plith yr oedd amryw yn berchenogion eu tai eu hunain. +Wnaiff e ddim gweld pobl. +Doedd neb yn meddwl y byddai hi'n ei briodi, ond fe wnaeth hi. +Bellach, daeth y cyfle. +Y noswaith honno cafwyd hyd iddo ar y traeth. +Doedd hi erioed wedi malio rhyw lawer am neb. +Wnes i ddisgyn i gysgu pan oedd gan bawb y colera. +Pam nad oes neb ar ôl? +Cymru yn cadw'u siâp yn dda yn fan 'na. +Glywais i dad a mam yn siarad amdano. +Ni chlywswn ef yn siarad yn gyhoeddus erioed o'r blaen. +Bydda i'n ganol oed cyn bo hir. +Yn y naill boced byddai cen cerrig ac yn y llall byddai Beibl mawr. +Wedyn dw i'n mynd adra ac yn 'llnau i mam. +Caem aml olwg bell brydferth ar y môr. +Fydd e bob amser yn dod pan fyddwch chi'n galw arno? +Dw i ddim yn gwybod beth ydi bod yn llwglyd. +Ni fedd y mynyddoedd hyn fawredd mynyddoedd y gogledd. +Edrychodd heb ddim diddordeb ar y plât cyntaf i Martha osod o'i blaen. +Tydi'r ehedydd ddim yn cuddio'u nyth rhagddo. +Pam oedd yna feudwy Pabyddol yn y llun? +Fedri di ddim dysgu'n ddigon buan. +Wedi cinio, dringasom y bryn yr ymnytha'r ddinas dano. +Gyrrodd Ben ei raw yn ddwfn i'r ddaear. +Daeth y ffarmwr â gwellt glân i roi o dan y defaid. +Rhoed coler am wddw Pero, a rhwymwyd ef wrth gadwyn yn ddi-oed. +Dw i'n unig fy hun 'blaw pan fydd o efo fi. +Cafodd effaith dda ar Mary. +Wn i ddim sut y dois i yma. +Rwy mor hapus dy fod ti wedi dod. +Maen nhw bron mor gyfeillgar â chŵn. +Ac yr oedd Siôn yn y dŵr yn nofio yn braf ers hanner awr. +Rŵan, aros di lle rwyt ti fod. +Mae stryd yn ei dref enedigol wedi ei enwi er anrhydedd iddo. +Roedd yn uniaith Gymraeg tan yn wyth oed. +Byddai hi'n cerdded rownd a rownd y gerddi. +Parhaodd yn Llanelwy hyd ei farwolaeth. +Roedd yn gefnder i'r bardd a'r emynydd William Ambrose. +Roedd y teulu a'i wreiddiau yn Sir Ddinbych. +Ei unig addysg yn blentyn ifanc yng Nghymru oedd yn yr Ysgol Sul. +Mae'n plant ni yn chwarae gyda phren a cherrig. +Mae o ganddo fo gartre rŵan. +Bu yn ennill arian ychwanegol i'r teulu trwy ganu mewn priodasau a chynebryngau. +Does dim sail hanesyddol na ieithyddol i'r myth. +Mae hynny'n drueni, meddai Martha. +Aeth llawer o bobl i'r angladd. +Edrychodd ar y tân coch a gwrando ar y gwynt yn bugunad. +Mae'r safle bellach yn amgueddfa, ac mae hefyd yn grochendy sy'n gweithio. +Er hynny llwyddodd i ysgrifennu nifer fawr o ddramâu llwyddiannus. +Roedd e'n goridor hir ac yn fforchio yn goridorau eraill. +Bu farw ei wraig gyntaf yn Aberdaron wrth esgor. +Gwrthododd y ddau deulu fynychu'r briodas. +Ti'n lwcus fod gen ti fwyd yn ogystal ag archwaeth. +Claddwyd ei weddillion ym mynwent gyhoeddus y Rhyl. +Hoffwn i weld eich bwthyn chi. +Un o'i nodweddion pennaf yw abnormaleddau yn lliw'r croen. +Yn gyffredinol, mae diagnosis yn seiliedig ar archwiliad, profion gwaed a delweddu meddygol. +Roedd hi'n weithgar yn wleidyddol o'i hieuenctid. +Achosodd y Rhyfel Byd Cyntaf oedi pellach. +Mae cofeb iddo yn Eglwys y Santes Fair Magdalen, Cerrigydrudion. +Ddaru ti sglaffio hwnna go iawn bore 'ma on'd do? +Dychwelodd i Gymru i wasanaethu fel athro Saesneg a hyfforddwr rygbi. +Ers ei dienyddiad, bu ymdrechion i adfer enw da Morgan. +Cafodd ei hannog gan ei athrawon i geisio am hyfforddiant llais. +Y mae muriau eglwys y mynachdy'n aros eto. +Roedd Morris yn ddynwaredwr naturiol. +Bu'n mynychu dosbarthiadau nos i ddysgu economeg wleidyddol a chadw llyfrau cyfrifon. +Adeiladodd yno dŷ, siediau a buarthau stoc. +Agorodd ddrws yr ystafell a mynd allan i'r coridor, ac yna dechreuodd grwydro. +Roedd hi'n dechrau hoffi Martha hefyd. +Roedd o hefyd yn siomedig efo ymateb y mwyafrif i'r adroddiad. +Roedd yn fab i William Thomas Davies, cyfreithiwr, ac Anne Elizabeth ei wraig. +Roedd Evans yn Anghydffurfiwr pybyr. +Roedd ei dad yn asiant tai ac yn henadur Rhyddfrydol ar Gyngor Sir Forgannwg. +Cydsyniodd, yn bennaf er mwyn pwyso am ddiwygio'r deddfau mwyngloddio. +Rwy wedi bod i'r gerddi eraill. +Heb driniaeth gall marwolaeth ddigwydd o fewn ychydig ddyddiau. +Roedd y robin goch mor ddel a chrand a phrydferth. +Ei hunig fwyd oedd pecyn o fferins. +Gosodir yr elfennau mewn colofnau a rhesi. +Darluniau a ffotograffau du-a-gwyn sydd yn y gyfrol. +Bu'n aelod o Blaid Gomiwnyddol Ffederasiwn Rwsia a Phlaid Gomiwnyddol yr Undeb Sofietaidd. +Os na fyddwch yn gadael i mi fynd gyda chi, ni fyddaf yn hapus. +Nofel ddirgelwch am garchariad un gŵr ar gam am lofruddiaeth honedig ei ffrind. +Llyfr yn cynnwys astudiaeth o enwau afonydd Môn ynghyd â manylion eu tarddiadau. +Ar ba sianel deledu mae e? +Mae hi'n gyn-ddisgybl Ysgol Uwchradd y Gorllewin, ysgol i ferched. +Mae hi mor boeth mae'r planhigion wedi gwywo. +Ni siaredir ei Chymraeg yn ei hysgolion na'i llysoedd cyfraith na'i chynghorau. +Yn y fynwent honno gorwedd Ap Vychan hyd ganiad yr utgorn. +Mab i löwr o Gymru oedd Roy Jenkins. +Pa draw sydd yn cael ei ddefnyddio yn y darn yma? +Yr oedd y merched wedi cael addysg llawer gwell na'r cyffredin. +Croesawyd yr adroddiad gan lefarwyr ar ran pob plaid +Clywir arogl y rhedyn sy'n llosgi dan y crochanaid tatws. +Allwn ni gael fforc lân os gwelwch yn dda. +Tynasom sgwrs â dwy Ffrances oedd wedi dod o'r ddinas i'r môr. +Yn y coleg bu'n chwarae i dîm y Brifysgol ac i Gymru Llundain. +Fe'i saethwyd ar leoliad yng Nghymru. +Derbyniodd ei addysg elfennol yn ysgolion cyffredin ei Gymru frodorol. +Ymosodwyd ar Gaerwrangon yn gynnar yn y rhyfel a difrodwyd yr eglwys gadeiriol. +Cafodd y testun ei gyfieithu i'r Saesneg nifer fawr o weithiau. +Roedd hi'n mynd i helpu ei mam gyda'r golch. +Pam oedd e'n ei chasáu hi? +Ni phriododd ac ni fu iddi blant. +Cerddodd i'r pen arall, gan edrych eto. +Ychwanegwyd ystafelloedd gwisgo hefyd. +Er gwaethaf ei yrfa wleidyddol hir, cofir amdano yn bennaf fel arweinydd dirwest. +Penododd Penn ef yn feistr y rholiau. +Yr oedd ganddo ddigon o arian i fyw yn gysurus o ran hynny. +Wedi hynny profodd ryddid wrth lefaru a nerth o weddïo. +Bu'n un o gyd-sylfaenwyr Plaid Genedlaethol yr Alban. +Roedd y gwylanod wedi bod yn rhwygo'r bagiau plastig. +Gweithredir un gan Awyrennau Brenhinol Gwlad Iorddonen ar gyfer teithwyr busnes a dosbarth cyntaf. +Roedd y planhigion parhaol wedi cael eu torri nôl i orffwys dros y gaeaf. +Nawddsant pentref ac eglwys Llansanffraid Gwynllŵg yw'r Santes Ffraid. +Rhoddodd ei llaw yn ddamweiniol ar y tapestri yn ei hymyl. +Fe'i hystyrir yn dad llawdriniaeth orthopedig ym Mhrydain. +Roedd ei lygaid yn goleuo gan lawenydd ac athrylith. +Dywedodd yn ddifrifol ei fod wedi ysgrifennu'r englyn ar ddarn o bapur te. +Llusgodd y rhan fwyaf o'r maen i'r ail gar. +Dyma'r ail ynys hygyrch. +Y nod yw ennill sgôr penodol. +Er gwaethaf y ddeddf parhaodd y gwylliaid wrth eu hanfadwaith. +Gwnaed gwelliannau eraill perthnasol i fywyd y ddinas hefyd. +Cyfrol ragorol gyda llaw; difyr, treiddgar, cyfoes. +Aeth yntau yn ddistaw a hurt ei olwg. +Erioed wedi deall sut gafodd Islwyn Ffowc Elis get-awê efo'r peth. +Roedd y gwarchodwyr yn byw yn barhaol yn y tŵr. +Dylid gwneud fersiynau digidol o bob llyfr Cymraeg nad yw mewn hawlfraint. +Eisteddodd Mary yn syllu arni ac yn edrych ar ei bonet crand. +Dim ond yn ystod y gwyliau oeddwn i'n mynd. +Dim ond un gwarchgeidwad oedd yn gallu ymadael ar y tro. +Y tu mewn mae le tân a dau agoriad bach, hanner ogrwn. +Bu'n aelod o gynghorau lleol ac yn gwasanaethu fel ynad heddwch. +Achosodd peth fel hyn gryn helynt lawer tro, wrth gwrs. +Ar ôl dwy flynedd bu anghydfod rhwng y gweinidog a blaenoriaid y capel. +Gweithiwch allan y patrwm ac yna llenwch y bylchau. +Da dy weld yn hybu Saunders yn rhengoedd y Blaid. +Petaech yn fodlon, fyddai modd i chi fy nilyn i, os gwelwch yn dda? +Penderfynodd ganolbwyntio ar bêl-droed gan chwarae i dîm merched y Bari. +Mae'r gêm yn cael ei chwarae gan edrych o'r brig i lawr. +Wedi bod mewn ambell un o'u cyfarfodydd. +Wir yn gwerthfawrogi. +Bu farw ei dad trwy foddi yn yr afon Cothi. +Penderfynodd geisio codi ymwybyddiaeth genedlaethol trwy gynnal ac annerch cyfarfodydd cyhoeddus parhaus. +Siawns am sgwrs ffôn, Dewi? +Enghraifft hefyd o drafod gwâr ar wrthwynebydd. +Sedd canol dde naturiol yw hi. +Yr oedd Wil yn ei elfen, chwarddodd drachefn. +Mae wedi ei ddynodi yn ymddiriedolaeth brifysgol sy'n gysylltiedig â Phrifysgol Abertawe. +Yn Lerpwl bu'n frwd dros achosion cymdeithasol. +Myfyrdod byrfyfyr ar yr hanner can nofel orau yn y Gymraeg, yn nhrefn teilyngdod. +Myfyrdod byrfyfyr beunyddiol ar nofelau gorau'r Gymraeg, yn nhrefn teilyngdod. +Rwy'n falch o weld hyn, Adam. +Mae pencadlys y bwrdd wedi ei leoli ym Mae Baglan. +Mae'r chwaraewyr yn cymryd tro i agor can o dan eu trwynau. +Mae modd gwylio rhaglenni ar y teledu. +Mae pob lefel yn cael ei gychwyn mewn blwch ffôn. +Defnyddir cyfryngau cymdeithasol i hyrwyddo a marchnata'r digwyddiad +Mae'r ddau gyn-gariad yn troi'n elynion pennaf. +Estynnwyd gwahoddiad i Price sefyll fel ymgeisydd gan rai o anghydffurfwyr Aberhonddu. +Ond mae'r perfformiad efo Covid wedi bod yn druenus. +Wedi cael llawer o fudd a mwynhad o'i darllen. +Mae'r pwyntiau wedi dod un ar ôl y llall i Gymru. +Bychain a budron oedd y rhan fwyaf o'r tai. +Byddai efallai yn eithaf costus, ond yn werthfawr iawn +A wnewch chwi fy nysgu i? +Tra yn fachgen yng Nghwmgïedd mynychodd Rees ddosbarthiadau tonic sol-ffa Phylip Thomas. +Bydd adar yn cario hadau i'r ynysoedd. +Clywn sŵn canu distaw yn y cefndir. +Mae'r darlun bellach yn rhan o gasgliad yr Oriel Bortreadau Genedlaethol yn Llundain. +Llyfrau fel hyn ydi ceinion coll y gwareiddiad Cymraeg. +Gwraig Wil oedd hi. +Roedd fel petai'n bugunad yn uwch nag erioed. +Cynhaliodd Roberts weithdai ar ragamcaniad canu a llais. +Wedi hyn bu cynnydd yn y nifer o weinidogion anghydffurfiol ar gyrff cyhoeddus. +Honnwyd ei fod wedi derbyn rhai pleidleisiau annilys ac wedi gwrthod rhai dilys. +Y mae ei tho yn anwastad a llwyd. +Rwy'n hoffi'r caffi yn y Warchodfa Natur. +Meddyliodd am saethu'r ci, druan, yn y fan. +Bu Doctor Price unwaith eto yn cymryd rhan weithredol ym materion y plwyf. +Roedd yn Gymro ymroddedig iawn, yn angerddol dros ei wlad a hawliau ei gydwladwyr. +Dylai'r athrawes atgyfnerthu dealltwriaeth y disgyblion o'r eirfa gywir ar lafar +Gallwn i hefyd ofyn i'r darlithwyr am gyngor i wneud y penderfyniad cywir +Mae'r car yn rhy hir i ffitio drwy'r bwlch. +Maent yn cwrdd pan fydd hi'n gweini brechdan iddo. +Bu farw ym Marnes, Llundain. +Mi oedd o'n cychwyn teimlo'n chwil ar ôl yfed y gwin. +Mae hyd ei effeithiau yn para am tua phedair i chwe awr. +Cynhelir yr ŵyl ar y pedwerydd Dydd Iau ym mis Tachwedd. +Mynychodd ddarlithoedd, astudiodd ieithoedd tramor, ac ysgrifennodd ddramâu. +Helpa fi gario'r bagia siopio i fewn i'r tŷ. +Llwydda i fychanu'r byd llenyddol dyrchafedig Cymreig mewn ffordd wreiddiol a doniol. +Dewis da o lyfr Amelia! +Yn yr ysgol cafodd ei chywilyddio'n gyhoeddus am wrthod canu carolau Nadolig. +Rhaid i'r glwydd droi'n felyn cyn hel y tatws. +A gwell na ffraeo ar Twitter. +Mewn cylch, gyda'i grymedd yn gyson, mae pob pwynt yn fertig. +Pam mai ond bore yma ydw i'n dysgu hyn? +Cau y drws ar dy ôl plis. +Mae'n awdures nifer o lyfrau, yn bennaf am iaith ac addysg. +Mae'r hemisffer dominyddol yn rheoli iaith, swyddogaethau mathemategol a dadansoddol, a chyflawnder. +Hapus am y beichiogrwydd. +Ma hi'n sgortshar 'ma heddiw fyd. +Dyma'r nofel fwyaf personol o'i eiddo hyd yma. +Mae'r ochr ddwyreiniol iddo wedi'i ddifetha. +Rhag ofn bod pobl yn meddwl ein bod wedi rhannu rhyw brofiad rhyfedd. +Gelwir siart bar fertigol weithiau'n graff llinell. +Nid ydy'r rhestr ganlynol yn gynhwysfawr. +Tyd efo fi i siopio p'nawn 'ma. +Does dim rhaid bachu'r ddau ben, dw i'n cymryd? +Dyma'r cyfle i ddweud eich dweud. +Treuliodd y rhan fwyaf o'i oes yn dafarnwr yn Llundain. +Yn ifanc iawn dysgodd grefft y saer, cyn prentisio mewn peirianneg ym Mirmingham. +Yr ydych yn pleidio rhyddid ar bob ystâd heblaw eich ystâd eich hun. +Dwi'n defnyddio cau fewn am lock down. +Tybed os fydd 'na gytundeb heddiw? +Ef a adeiladodd Plas Nantclwyd yn Llanelidan, rhyw ddwy filltir o dref Rhuthun. +Dymunai fy nghyfaill fod yn gi. +Pentref a phlwyf yn Sir Benfro ydy Eglwys Wythwr. +Gall salwch neu wenwyn achosi cramp hefyd, yn enwedig yn y stumog. +Aeth ffrog Thomas ar dân. +Sut maen nhw'n mynd i gael y ffrwythau, tybed? +Mae'n bosibl bob amser rhannu polygon ceugrwm yn set o bolygonau amgrwm. +Cyflwyniad dwyieithog yn llawn ffeithiau a lluniau lliw am Glawdd Offa. +Dyma un o'r pwyntiau ro'n i'n gwneud bore 'ma. +Nofel datrys a dirgelwch i'r arddegau hŷn ac oedolion. +Drama epig farddonol a chwareus. +Ti'n rhoi stwff i fyny. +Ti 'di gadel gwydr ar y ford tu fas. +Mae hi'n ddydd Llun. +Ydy hi'n normal i ymennydd dwyieithog darllen un iaith fel y llall? +Llyfr sy'n amlinellu'r egwyddorion Cristnogol ar gyfer y teulu. +Wi wedi prynu bag lledr gwyrdd. +Fysach chdi'n meindio llnau y car heddiw? +Gyda darluniau du a gwyn gan Jac Jones. +Roedd dwy gath yn ei hambygio ar ochr y ffordd. +Mae gan ddadansoddi data sawl agwedd a thechnegau amrywiol. +Gellir diffinio geometregau meidraidd hefyd fel gwirebau, a dim arall. +Dyma chi ddatrysiad i broblem go iawn. +Casgliad o erthyglau gan Emlyn Evans yw Rhwng Cyfnos a Gwawr. +Mae'n gallu cysgu dros y gaeaf mewn coed bytholwyrdd neu lwyni. +Llongyfarchiadau i'r holl awduron ar restrau byr Llyfr y Flwyddyn eleni. +Ti 'di bod yn y bar newydd yn dre? +Man pwysig iawn yn yr Oesoedd Canol oedd Castell Dinas Emrys. +Gall gymryd rhai wythnosau iddo ddiflannu. +Mae o wedi marw wedi iddo gael ei drywanu yn y ddinas neithiwr. +Mae hi am gwcio bwyd figan i swper. +Mae hi'n fwdlyd yng ngwaelod y cae. +Fel diolch, gwnaed ef yn Arglwydd Siambrlen. +Gall gael ei achosi gan chwydu neu beswch. +Mewn trapesoid anghyfochrog, ni cheir dwy neu ragor o linellau o'r un hyd. +Ceir olion aredig yma ac acw dros y crug hwn. +Ysgrifennodd atodiad i Hanes y Merthyron, ysgrif ar Helynt y Degwm, ac ati. +Roedd stêm yn codi oddi arno, yng nghanol y llyn. +Dyna'n union beth maen nhw'n ddweud hefyd. +Dydyn nhw ddim yn codi tariff ar gig oen. +Gall y claf hefyd deimlo'n benysgafn ac yn flinedig. +Y mae'r gerdd i'r noddwr anhysbys hefyd yn dilyn yr un confensiynau. +Roedd yn filwr ac yn wleidydd Cymreig. +Ar ddechrau glasoed mae'r thymws yn dechrau proses araf o fynd yn llai. +Mae gan y cortecs ardaloedd synhwyraidd, modur a chymdeithasu. +Gellir ei weld hefyd mewn rhai llynnoedd yng ngorllewin yr Alban. +Un o'r dulliau o brofi datganiad mathemategol yw prawf trwy ollwng. +Lle prysur yw'r dref. +Llyfr stori i blant gyda lluniau gan Elwyn Ioan. +Honno oedd yr allwedd i'r ardd gaeedig. +Ymhlith y deunyddiau eraill a ddefnyddir y mae alwminiwm, titaniwm a charbon ffibr. +Hafaledd, oddi mewn i fathemateg, yw'r berthynas rhwng dau faint. +Nid yw ei ddefnydd yn cael ei argymell ar gyfer plant. +Cyhoeddodd Cyngor Sir Ddinbych eu bwriad i aildrefnu addysg yn y cylch. +Gobeithio wneith pobl bwysig Twitter wrando. +Druan â Wyn a Nia Norm. +Mae cyfnod hedfan yr herald rhwng Mehefin a Thachwedd. +Yng Nghaerhirfryn y cafodd ei eni. +Mae Modryb Magi wedi diflannu! +Daeth ei yrfa ysgol i ben yng nghanol y Rhyfel Byd Cyntaf. +Mae'n fath o brawf anuniongyrchol sy'n sefydlu gwir neu ddilysrwydd cynnig. +Wedi cymhwyso symudodd i Gastellnewydd Emlyn i gychwyn cwmni cyfreithiol. +Bu ei waith mwy diweddar yn tueddu i ganolbwyntio ar broblemau cymdeithasol. +Cyfeirio rydym yn y term hwn at ddyfeisiadau megis y cyfrifiadur llaw. +Ymgynghorwyr ceir oeddent i ddechrau, ac nid oedden nhw'n cynhyrchu ceir. +Hi oedd y pedwerydd o saith o blant. +Dyluniadau, diagramau a mapiau du-a-gwyn. +Nofel am fyfyrwyr sy'n cychwyn yn y brifysgol yn Aberystwyth. +Felly gofynnon nhw iddi ei rannu rhyngddynt. +Mond oedd ei gadeirydd cyntaf. +Mi oeddan nhw ar fin ennill gêm. +Bydd o wrthi eto heddiw. +Gellir ystyried y silindr yn storfa ddata. +Gwneith hwnna'r tro. +Diddorol iawn wir. +Heddwch i'w lwch. +Ond, nid oedd yn cynnwys Gogledd Iwerddon. +Lleolir y nofel mewn pentref gwledig ar ddechrau'r saithdegau. +Am ei fod yn fwy ariannog, ac hefyd yn dwy didoriad. +Dw i'n teimlo 'mod i wedi'n nhwyllo. +Mi oedd ymladd yn erbyn y gwynt wedi stwyrian ei gwaed hi. +Roedd teulu ei dad yn hanu o Benygraig, Sir Gaerfyrddin. +Ym Mhrifysgol y Met, Caerdydd bu'n astudio Gwyddoniaeth Feddygol. +Mae nifer o luniau du a gwyn yn y nofel. +Ac mi ddeudis i y baswn i. +Bu hefyd yn Gymrawd o'r Gymdeithas Archeolegol. +Mae'r gacen ferw ma' yn neis nain. +Mae antipasti yn debyg i hors d'oeurves. +Ond beth sydd wedi digwydd iddi? +Eryri 'di'n swyddfa i heddiw. +Mae'r coridor yn rhy gul. +Rhywun allan yn cael trafferth ffeindio rwla i aros? +Paid defnyddio'r dacteg yna efo post wyt ti actiwali eisiau, wrth gwrs. +Beth bynnag eu natur rhaid iddynt fod yn ddiddorol yr olwg ac yn flasus. +Amgueddfa yw'r adeilad, bellach. +Testun ac astudiaeth lenyddol o waith Siôn ap Hywel. +Astudiodd ffrwydron yng Nghaergrawnt adeg yr Ail Ryfel Byd. +Y ffurf debyg i'r paralelogram, mewn tri dimensiwn yw'r paralelepiped. +Ceir craig anferthol ar y copa. +Gall hydoddi'n hawdd mewn dŵr ac mae'n asid gwan. +Stori antur i blant yn y gyfres Gari Tryfan. +Wi angen golchi dillad heddi. +Amcanion sylfaenol yr astudiaeth o geometreg algebraidd yw amrywiaeth algebraidd. +I mi, yn anffodus, mae'n rhy hwyr erbyn hyn. +Ni wyddom pa bryd oedd ei ddydd Gŵyl. +Â llygaid Cymro Cymreig yr wyf i yn dewis edrych ar y cwestiwn hwn. +Roedd Rhys hefyd yn gyfoethog iawn. +Newyddion trist o'i golli. +Wir i ti, wnaeth llygaid John bron rowlio allan o'i ben. +Newydd anfon Lowri i nôl bara o'r Co-op yn Rhos. +Ysgol ddwyieithog, wledig yn Sir Ddinbych ydy Ysgol Bro Famau. +Mae'n hedfan rhwng Ebrill a Mehefin. +Y gair cyferbyniol iddo yw newidyn. +Ymunodd tri o gefnogwyr yr herwgipwyr â hwy. +Felly hefyd De Affrica, a bu'n lladmerydd huawdl iawn yn erbyn apartheid. +Ti 'di trio llyfrgelloedd y sir? +Mae hynny'n agwedd rhy nodweddiadol yno dwi'n credu, yn anffodus. +Dywedir fod gan linell sy'n gostwng gynnydd negyddol. +Dw i 'di peintio 'y ngwinadd yn las gola'. +Mae'n clera Cymru benbaladr yn darllen ei waith. +Yn ei llythyrau, mae'n trafod y manteision niferus a gynigiwyd gan y Sefydliad. +Rwy'n hoffi'r syniad o fyrgars cig oen Cymreig. +Gweithiodd Beti a'r lleill yn galed mewn amgylchiadau anodd iawn. +Llyfr rhyngweithiol sy'n cyflwyno profiadau newydd ac yn hybu sgiliau sylwi. +Pwy yn hollol yw Liw? +Dwi'n byw mewn byd bach fflwfflyd diniwed. +Oedd o'n sbïo arna i. +Bu'n aelod o Academi Gwyddorau Hwngari am rai blynyddoedd. +Saif llawer o adfeilion yn dyst i hyn ledled y dalaith. +Ceir amrywiaeth eang o ran cynllun a maint yr abacws. +Felly mi feddyliodd y byddai'n mynd ychydig ymhellach ar y beic. +Yn ddiweddarach, defnyddiwyd y crug gan y Rhufeiniaid, fel tŵr. +Nath y gath ddu groesi'r ffordd. +Enw'r fam fynydd yw Aran Fawddwy. +Mae Magi'r iâr yn mynd am dro ar draws fuarth y fferm. +Stori i blant bach sy'n Gymry Cymraeg, wedi'i throsi o'r Almaeneg. +Arllwyswch ychydig o'r purée a'i guro gyda chwisg. +Mae hi hefyd yn awdur ar gyfres o lyfrau ffiseg i fyfyrwyr ysgol uwchradd. +Yr ymennydd yw canolfan reoli'r corff cyfan. +Pam y gorfu'r Undebwyr yn yr Etholiad Cyffredinol diwethaf? +Teimlai Mistres Mary ychydig bach yn lletchwith wrth fynd allan o'r ystafell. +Ceir sawl crug yn yr ardal hon. +Yr ail gyfrol yng Nghyfres Beibl a Chrefydd. +Mi wnaeth y plant beintio llun enfys. +Mae wedi'i anrheithio dros y blynyddoedd. +Yna llithrodd drwy'r drws, a'i gau y tu ôl iddi. +Enw'i dad oedd Hywel Selau a'i fam oedd Mali. +Yn rhyfedd iawn, mae'r blodyn sych yn fwy lliwgar nag un ffres! +Dwi'n gwylio lot o stwff isdeitlau. +Gall ormod ohono fod yn angheuol. +Adargraffiad o'r clasur o hiwmor Cymreig. +Mae gên lân 'da ti. +Hynny yw, nid yw'n sero o unrhyw bolynomial gyda chyfernod cymarebol. +Stori gan Emily Huws ac Elfyn Pritchard yw Yr Eira Mawr a'r Rhew. +Yr oedd gan Humphreys-Owen ddiddordeb mawr mewn addysg. +Mae wedi ei amgylchynu bron yn gyfan gwbl gan goedwigoedd. +Mae'n gopi llawer mwy agos i Efrog Newydd. +Roedd ei chysylltiadau gwleidyddol cynharaf â chenedlaetholdeb Gwlad Groeg. +Dw i 'di bod yn watsiad fideos ar Youtube. +'S dim modd ei ddweud e heb godi ysgwyddau. +Gweinwch y cawl yn boeth, gyda Parmesan wedi'i ratio. +Ar fy ffordd drwy Gaerdydd wlyb. +Gwelir lafa a lludw folcanig o'r cyfnod hwn yn Sir Benfro. +Mewn car trydan, gall y modur trydan weithredu i symud. +Codwyd cofeb iddo ar y tŷ lle'i ganed gan y Sefydliad Ffiseg. +Fe'i cysylltir i'r cyhyrau a'r meinwe cysylltiol. +Bu'n aelod o Gymdeithas Genedlaethol dros Hawl Merched i Bleidleisio am rai blynyddoedd. +Beth yn y byd mawr sy wedi digwydd iddi? +Mi gafon ni ddiwrnod difyr ddoe ar y trip. +Dadleuodd y dylai'r ysgolion cyhoeddus gynnig rhaglenni gwasanaethau cymdeithasol i blant difreintiedig. +Newydd gael sgwrs bositif gyda pheiriannydd sy'n codio ap bancio. +Casgliad o wyth o ganeuon gan Tecwyn Ellis yw Canu Cynnar. +Nath o ddringo fyny'r graig. +Mae ar gael i'w lawrlwytho yma. +Dy gyflog di oedd hwnna? +Hanai ei theulu o'r Almaen ac o Rwsia. +Doedd o byth yn gofyn i bobl hŷn am bethau. +Dyma stori o gyffro, herwgipio, brwydro a chwedloniaeth. +Mae'r rhain yn cynnwys grwpiau, cylchoedd, meysydd, modiwlau, gofod fector, dellt ac algebrâu. +Mae tynnu yn dilyn nifer o batrymau pwysig. +Dw i ddim yn coelio hynna. +A allwch chi ddychmygu byd y tylwyth teg heb y lliw pinc? +Mae'n siŵr o ddigwydd yn fuan. +Wythnosolyn ydoedd a gyhoeddwyd bob dydd Sul. +Oedd hi'n sgwennu lot o erthyglau i'r papur newydd. +Casgliad amrywiol o ddywediadau a hanesion ffraeth a bachog. +Caniateir i gôl-geidwaid i wisgo trowsus tracwisg yn hytrach na siorts. +Mae'n hynod bwysig, felly, nad yw hyn yn amharu ar y darllediad. +Crynodeb o hanes datblygiad mynydda gan Dewi Jones yw Ar Drywydd y Dringwyr. +Nofel ddirgelwch i oedolion yw hon. +Claddwyd ei gorff ym Mhriordy'r Santes Fair, y Fenni. +Mae'n perthyn i gerbyd Ford disel llwyd. +Fe'i magwyd ym Mhorthyrhyd ger Caerfyrddin. +Mi oedd 'na lwyth o blanhigion ar y silff ffenast. +Roedd e'n gwisgo cap stabal. +Dw i 'di codi hyn droeon ar eu cardiau adborth cwsmeriaid. +Ganwyd David Morris yng Nghaerfyrddin yn fab hynaf William Morris, bancwr. +Gellir ei adnabod heddiw fel Sir y Fflint. +Roedd ei mam sengl yn wael, yn gweithio fel gweinyddes a chogydd. +Mae'r rhain yn cynnwys heintiau'r amrantau, cyfbilennau, a'r gornbilen. +Cedwir ei gwaith yn Llyfrgell Genedlaethol yr Almaen. +Iawn, felly, dwi newydd glywed am hyn. +Maen nhw i gyd yn fetelau trosiannol gwyn neu lwyd golau eu lliw. +Caneuon modern i unawdydd, grŵp neu gôr. +Llus ydy prif fwyd y lindys. +Cyhoeddiad rhannol Gymraeg, rhannol Saesneg. +Roedd modd comisiynu milwyr y Gwasanaeth Cenedlaethol a oedd yn dangos addewid. +Bu'n aelod o Ferched y Chwyldro Americanaidd am rai blynyddoedd. +Ef oedd y cyfieithydd ac awdur yr Argraff a'r Nodiadau. +Y fam fynydd ydy Craig Portas. +Am restr o faneri Cymreig, gweler yma. +Mae ei gwaith sinema bron i gyd yn weithiau sy'n ymwneud â ffeministiaeth. +Arweinlyfr i ffynonellau hanes lleol ac achau teulu. +Hwn yw'r côn golau gyda dimensiwn amser. +Dyma bedwaredd nofel Manon Steffan Ros yng nghyfres yr Onnen. +Yn aml, mi wnân nhw ddiflannu a dychwelyd am rai blynyddoedd. +Roedd hefyd yn aelod o Academi Llythyrau Brasil. +Mae hi'n cael ei hadnabod fel ysbrydoliaeth i lawer o artistiaid. +Gliniaduron Windows Deg ydyn nhw. +Nadolig Llawen i chi i gyd. +Casgliad o ganeuon gan Eilir Owen Griffiths. +Aethon ni i adra ar y trên. +Ar adegau, nid oes angen symbol i ddangos hynny. +Yng Ngwledydd Prydain mae'n gyffur sydd ar gael trwy bresgripsiwn meddygol yn unig. +Bydd yn troelli am ddwy filltir o'r traeth i'r môr. +Be' ti'n 'neud heddiw 'ma? +Dw i ddim yn dallt 'i hiwmor o i fod yn onest. +Mi gerddon nhw am filltiroedd cyn cyrraedd y maes gwersylla. +Nofel sy'n dal gafael hyd at y diwedd. +Mae pobl yn ciwio am sglods yn Y Dafarn Datws. +Mae cyfres ddrama Swedeg newydd ar Netflix yn dda iawn. +Fe'i gweinir trwy'r geg neu chwistrelliad i mewn i wythïen. +Ni newidir unrhyw bwynt o fewn y cylch. +Roedd yn Grynwr, o ran crefydd. +Dyma nofel Gymraeg gyntaf Eiddwen Jones. +Mae hi bellach yn ddinesydd Americanaidd. +Copïau o brintiau hanesyddol yw'r darluniau. +Stori i blant am fachgen o'r enw Arwyn sydd wedi gwirioni ar bysgota. +Ni wn pa beth a wnaf â thi. +Llwyddodd i gadw'r sedd i'r achos Rhyddfrydol. +Gellir canfod yr oedolyn ar ei adain rhwng Mai a Gorffennaf. +Meddyliodd Mary ychydig am hyn. +Mae nodweddion topolegol pwysig yn cynnwys cysylltedd a chrynhoi. +Mae'n cwmpasu'r ddynol ryw a natur y ddynol ryw. +Mi ddaethon nhw i fyny hefo cynllun i atal llifogydd yn y dref. +Mewn rhai ieithoedd, er enghraifft yr Almaeneg, fe'i gelwir yn asgwrn y groes. +Y mae llawer ohonynt wedi ymuno â'r blaid. +Lle fase orau? +Ceir cyfuniad delfrydol o hiwmor iach a deunydd mwy dwys a chyffrous. +Ei nai John a etifeddodd ei ystâd. +Ffotograffau lliw trawiadol o'r gofod, a darluniau lliw. +Wnes i losgi 'y ngwynab yn yr haul. +Bydd angen bwrdd torri go fawr arnoch, a rholbren mwy na'r arfer. +Y mae'n nhw'n lluosocach o lawer na'r lleill. +Mae'r deifwyr yn archwilio ogof o dan y môr. +Gormod o haul sy'n achosi llosg haul. +Caiff ei adnabod fel pla mewn fforestydd conifferaidd. +Ei gynefin arferol yw afonydd a nentydd, gyda phridd tywodlyd yn wely iddo. +Gweinwch y cawl gyda croûtons a Parmesan wedi'i gratio. +Dangoswyd golau i fod yn gymorth i longau cyfagos. +Y system fwyaf cyffredin yw'r dull a elwir yn gofnod dwbl. +Aethon ni draw i'r Bala i gwrdd â chriw o ferched heini iawn. +Yr athro, yr Aelod Seneddol, yr entrepreneur a'r fam sengl. +Ysgol gynradd Gymraeg yn Rhuthun, Sir Ddinbych, yw Ysgol Rhewl. +Gellir ei weld ar adain rhwng Gorffennaf ac Awst. +Nid wyf chwaith am erfyn arnoch leihau'r trethi eraill. +Ystyr y gair maeth yw cynhaliaeth, lluniaeth, porthiant, ymborth neu fwyd. +Ceir cryn amrywiadau ar y modd y gellir cyflwyno'r math hwn o siart. +Rhwydwaith dargludo trydan foltedd uchel yw'r Grid Trydan Cenedlaethol. +Mae pwls yn cyfeirio at unrhyw guriad neu ddirgryniad rhythmig. +Dw i'n mynd allan i neud yoga bob bora. +Gyda'n gilydd rydym yn gryf. +Wedi'r coleg, gweithiodd fel artist masnachol. +Fe wnaeth bopeth oedd yn medru, ond mi oedd hi'n rhy hwyr. +Mae'n gaeafgysgu fel lindys. +Y trydydd llyfr sy'n dilyn helyntion Maw, y gath fach sinsir. +Wnes i ddim ei weld e. +Mae'r rhain yn cynnwys ei cherddoriaeth wreiddiol a cherddoriaeth artistiaid Brodorol Americanaidd eraill. +Mae'n ddigon bach i gael ei gario o gwmpas yn ddidrafferth. +Cyfrol am flodau a phlanhigion gan Gareth Maelor yw Ystyriwch y Lili. +Mae pob pennod yn ymdrin â mis o'r flwyddyn. +Dydyn nhw ddim hanner call! +Tyd â phapur newydd o'r siop. +Ni fydd taliad nes bod y banc yn newid ei arfer. +Sbïa ar y fideo 'ma. +Mi oedd llond y cwpwrdd o ffeiliau a gwaith papur. +Fe'i lluniwyd i nodi deucanmlwyddiant ei farw. +Allwch chi ofyn pam? +Mae'n un metr o uchder. +Y rheswm dros hyn yw bod cysgod y Lleuad yn llawer iawn llai. +Dylai claf sydd yn dioddef o unrhyw un o'r effeithiau hyn osgoi gyrru. +Prif fwyd y lindys ydy gweiriau a brwyn, gan yfed barrug y bore. +Mae'r cig yn rhy anodd ei gnoi. +Prif fwyd y lindys ydy ffwng, cen carreg a dail sy'n pydru. +Dwi'n hynod brysur fy hun. +Er iddo ail a thrydydd ganu, nid oedd diwedd ar alwadau'r dorf. +Nofel gyfoes sy'n llawn cynllwyn, sbin a dychan. +Ma'n wha'r i wedi prynu beic newydd. +Gwelais fod y postmon yn gallu ei ffitio mewn trwy'r blwch llythyrau. +Cafodd ei gladdu ym mynwent Llandderfel. +Tynnais i mewn a gadael pres mewn bocs. +All y tylwyth teg ddim dychmygu bod yn y côr heb Mali. +Nath y tarw redeg ar ôl yr hogyn bach. +Rhowch o drwy ogor, ac yna ei ail-gynhesu. +Dw i'n licio dy ffrog di. +Ddo i acw fory, iawn. +Gall ddarganfod pellter, uchder, cyfeiriad a chyflymder y gwrthrych. +Ffisegydd oedd Rhisiart Morgan Davies a anwyd yng Nghorris, Gwynedd. +Mae hi'n gwisgo sbectol goch. +Mae'n rhaid bod rhywbeth rhyfedd wedi digwydd iddi yn ystod deng mlynedd. +Rhan o gyfres o nofelau byr, syml i blant. +Asid organig, crisialaidd gwyn ydy asid tartarig. +Ceir cysyniadau eraill, gwirioneddol a briodwyd yn ddiweddarach. +Darluniau doniol du-a-gwyn. +Sgwenna atyn nhw i beidio trin y Gymraeg yn llai ffafriol na Saesneg. +Yn draddodiadol, arferai dadansoddi real gyfeirio at theori ffwythiannau newidynnau real. +Wedi'i gwahardd rhag ymarfer meddyginiaeth yno, gwnaeth ddadansoddiadau bywyd drwy archwilio'r llaw. +Testun mewn orgraff ddiweddar ac aralleiriad, nodiadau a geirfa ar gyfer pob cerdd. +Mae'n cynllunio, ystyried, beirniadu, ac yn trefnu lleferydd a gwybodaeth. +Mae'r llyfr hwn yn edrych ar fywyd yn y dref. +Beth oedd ei henw? +Roedd hi'n byw ar ei phen ei hun mewn tŷ. +Ymadawodd a'r naill brifysgol a'r llall heb ennill gradd. +Lle brynist ti'r mwclis 'na? +Pridd neu waddod rhydd yw Llifwaddod. +Does fawr o fathemateg yma, yn hytrach dibynnir ar synnwyr cyffredin a phrofiad. +Mae'r etholaeth yn ne-ddwyrain Ucheldir yr Alban. +Dydi'r printar ddim yn gweithio achos bod 'na rywbath yn styc ynddo fo. +Nes bod ei bochau yn eithaf coch. +Ymladd dros urddas ac iechyd gweithwyr a phobl Cymru. +Mae'r math yma o löyn byw yn ymwelydd prin â gwledydd Prydain. +Cyhoeddir y traethawd gorau yn y Boy's Own Paper. +Dw i heb ddarllen am y fath beth eto. +Mae yma hefyd ganolfan dwristiaeth o fewn y ganolfan. +Mae hwn yn dda. +Mae llwyth o stwff da sy'n swnio'n dda mewn maes pêl-droed. +Rhwng Mehefin ac Awst mae'r oedolyn yn hedfan, a hynny mewn un genhedlaeth. +Yn ddiweddarach bu yn Gyrnol ar Ail Fataliwn Gwirfoddolwyr Cyffinwyr De Cymru. +Cafodd hi addysg farddol bellach gan Ioan Madog a'r Prifardd Emrys. +Mae Wicpedia yn lle da i ddechrau. +Rhaid eu darganfod cyn y gêm fawr yn erbyn Lloegr. +Rhan o gyfres o nofelau byrion, syml i blant. +Ti'n hen beth bach rhyfedd hen ffasiwn. +Gwyddent mai effaith hyn fyddai cynnydd mewn pris olew drwy'r byd. +Ceir cymysgedd o gychod pysgota a chychod pleser. +Roedd ei fam, y Frenhines Victoria, yn ffafrio Elisabeth fel darpar ferch-yng-nghyfraith. +Mae o'n cadw malwod mewn tanc. +Wnes i weld nhw'n fyw flwyddyn dwytha. +Mae'r ffrwyth yn edrych fel grawnwin bychain ac yn llawn rhinweddau. +Mae'n tyfu i oddeutu un metr o uchder a lled. +Enwodd ei fab cyntaf ei ôl ei hun. +Ceir hefyd adran faith yn ymwneud ag Arthur. +Bu Davies yn gysylltiedig â'r cwmni am weddill ei oes. +Radiws mewnol cylch, tiwb neu wrthrych gwag arall yw radiws ei geudod. +Mae petryal yn bedair ochr â phedair ongl sgwâr. +Mae'r cymwysterau angenrheidiol yn amrywio o wlad i wlad. +Teitl yn y gyfres o gyfrolau byr a chyflym Stori Sydyn. +Straeon hunangofiannol eu naws sy'n llawn o naws y gorffennol. +Mae dy fam yn wraig garedig. +Lladdwyd pum athro yn y trychineb. +Wi'n edrych ar luniau ohonat ti yn fach. +Dyma sut y cafodd yr enw Lladin. +Mae arwynebau'r polyhedronau hyn yn rheolaidd. +Roedd yn ddigon cryf i ysgwyd canghennau'r coed. +Geiriadur termau sy'n ymwneud a'r diwydiant coedwigaeth. +Lluniwyd arddangosfa a'r llawlyfr dwyieithog hwn ar y pwnc. +Mae'n gynghorydd ar Gyngor Dref Dinbych. +Mae rhai pobl yn mynnu mai'r geiriau'n unig a ysgrifennwyd ganddynt. +Ac oherwydd hynny, fe'i gelwir yn Taffi hyd y dydd hwn. +Wna i gysylltu â ti am fanylion amdanat. +Wi wedi peinto 'ngwinedd i'n binc tywyll. +Mae hwnna'n handi iawn. +Ceir nifer helaeth o henebion tebyg ar yr un llethr. +Ma' fe wedi bod yn cysgu tu fas. +Roedd hi'n amlwg nad oedd llawer o nerth ym mreichiau a choesau Sali. +O hynny ymlaen, cyfeiriwyd ei diddordebau yn bennaf at atal cenhedlu. +Mi oedd yna botyn o fêl yn y cwpwrdd. +Cyfrol gryno am lwybrau beicio mynydd yng Ngogledd Ddwyrain Cymru. +Mae'r peiriant coffi 'di malu. +Lwyddes i i godi'n fore am unwaith. +A fydd Elwyn yn darganfod yr ateb cyn iddi fynd yn rhy hwyr? +Plant sy'n ei ddal fel arfer. +Dw i'n gweithio ar ffarm odro. +A sblit-sgrin hefyd. +Ystyrir y ddrama hon y fwyaf o ddramâu'r awdur. +Sathrodd i lawr ar yr wy. +Dechreuodd ymarfer Myfyrdod Trosgynnol yn chwech oed. +Mi oedd yna ddeigryn yn llifo lawr ei gwyneb. +Dyma'r erthygl oedd dan sylw yn y seminar. +Chafon ni ddim llawer o lwyddiant yn adeiladu'r ddesg. +Llyfr bwrdd lliwgar gyda geirfa elfennol ac yn llawn darluniau o fyd natur. +Un o foelydd Clwyd. +Arferai'r Rhufeiniaid ei fwyta, ar ôl ei besgi gyda blawd. +Un ystafell ydy'r gell. +Mae'r gyfrol ddarluniadol ddwyieithog hon yn ddathliad o hanes y dref. +Mae hefyd yn gyffredin drwy Loegr yn enwedig yn y De Ddwyrain. +Mae'n un newydd pwrpasol o'i olwg. +Ceir dwy ffordd o ddisgrifio aelodau o set. +Maent yn gwasanaethu i drosglwyddo seiniau o'r awyr i'r cochlea. +Nid oedd gan Michelle fawr o ddiddordeb mewn gwleidyddiaeth tan y refferendwm. +Mae'r adeilad yn cynnwys fflatiau erbyn heddiw. +Ges i ganiau seidr am bunt o'r sdesion. +Pum stori am anallu criw brith o gymeriadau pentrefol i gyfathrebu â'i gilydd. +O'dd e'n lico ca'l mwgyn ar ôl gwaith. +Ysgrifennai ei hemynau ar ochr dudalennau ei Beibl a llyfrau crefyddol eraill. +Fel arfer mae'n cael ei gymryd trwy'r genau. +Mae'n hynod am ei siapau syml, Canoldirol, gyda'i waliau gwynion. +Gallwch ychwanegu mwy o stoc os ydy o'n rhy drwchus. +Brynes i beth heno a meddwl bod y pris yn uwch. +Roedd o'n prynu cerdyn pen-blwydd. +Ysgarwyd ei rhieni pan oedd yn ei harddegau. +Mi oedden nhw i fod i briodi wythnos nesaf. +Mae rhai o'i nofelau eraill wedi archwilio polaredd rhyw a hunaniaeth rywiol. +Defnyddir y term o fewn meysydd megis geometreg dafluniol, lluniadau technegol, ac ati. +Cafwyd gwrthwynebiad cryf yn erbyn ymosodiad Israel ar y llongau cymorth. +Pwrpas hyn ydy tynnu sylw'r gwyliwr at y grocbren. +Mae lladron wedi difetha'r crug dros y blynyddoedd. +Diolch ti boi. +Dyw saethu ffesantod heb ei wahardd yng Nghymru, dim ond ar dir cyhoeddus. +Mae'r haenau mewnol yn cynnwys y mater gwyn, a'r ganglia sylfaenol. +Tref yn Swydd Amwythig, Lloegr ydy Ellesmere. +Does 'na ddim angen poeni am ddim byd. +Ceir cryn amrywiaeth yn lliw'r gwyfyn hwn. +Stori gan Haf Llewelyn yw Stwffia dy ffon hoci. +Beth fyddai'r term Cymraeg? +Mae 'nwylo i'n oer. +Efo'r llyfrgelloedd ar gau, mae rhywun yn llwyr ddibynnol ar wroniaid fel hyn. +Ceir maen enfawr ar y copa. +Cafodd Andreas ei fagu gan ei fam, ei fodryb a'i nain. +Carwn pe bai rhywun yn recordio'r Pedair Cainc. +Hwnna 'di'r te gorau. +Daeth hyn ag enwogrwydd mawr iddi. +Mae ar gael fel meddyginiaeth generig ac mae'n gymharol rad. +Pliciwch y madarch a thynnu'r coesau, gan roi'r coesau i un ochr. +Efallai bod Huw yn iawn. +Mae glöyn y perthi, hefyd, ychydig yn llai. +Rho dy ben nôl. +Beth a wnaeth Iesu? +Magwyd hi yn Swydd Gaer, Lloegr. +Dyma gyfrol sy'n cyflwyno ymdriniaeth fanwl o'r Diwygiad. +Ymddangosai y diwrnod cyhyd ag wythnos. +Cafodd ei addysgu yn Ysgol Genedlaethol Llanfechell. +Bu i'r ddau ymwahanu ac yna ysgaru. +Prif fwyd y lindys ydy'r dderwen. +Rwy'n methu ffeindio'r gwreiddiol. +Ysgol newydd, ardal newydd, pobl newydd a dim byd ond trafferth a phoen. +Mae un o'r ffenestri'n cynnwys hen wydr o ffenestr liw cynharach. +Mae'n digwydd ar dywydd oer a phan fo diffyg yng nghylchrediad y gwaed. +Mae 'na fleiddiaid yn yr ogof. +Mae sgil-effeithiau yn gyffredin iawn. +Ges i sgwrs efo aelodau o'r gymuned yma dro yn ôl. +Canlyniad yr etholiad oedd bod y ddau ymgeisydd yn gyfartal. +Mae gan wledydd y byd gytundebau ynglŷn â phatentau a gwarchod hawliau'r dyfeisiwr. +Gwell bod yn onest efo pawb. +Mae'r tri mochyn bach ar fin dechrau adeiladu eu tai eu hunain. +Yng Nghaerdydd y ganwyd Lloyd-Jones a chafodd ei fagu yn Llangeitho, Ceredigion. +Drama ar fydr ac odl ydyw ac mae'r awdur yn anhysbys. +Fe fu yn Gadeirydd Cymdeithas Fyddin Diriogaethol Swydd Amwythig. +Dwi'n ama fod o'n cadw wbath gwerthfawr iawn yn ei locar personol. +Ceid fath ddistawrwydd ar wyneb y ddaear fel byddai Thomas Carlyle farw o lawenydd. +Nath o wylltio fi 'sdi. +Mae yna olion o feddrodau o Oes yr Haearn. +Ni wyddys y rheolau'n iawn ac mae'n bosibl nad oedd llawer ohonynt. +Mae De Glynebwy yn gymuned ym Mlaenau Gwent. +Doeddan ni heb i weld o ers misoedd. +Gall steroidau hefyd fod yn ddefnyddiol. +Neu ynteu, cymysgent y ddwy ynghyd, a byddai hynny'n waeth fyth. +Ai mater o hap a damwain yw cariad? +Gest ti lond trol o hwyl? +Ni ellir ei weld o bell, oherwydd maint y derw sydd o'i amgylch. +Bydd rhaid i chi socian y bara mewn llefrith. +Safodd am swyddi cyhoeddus bedair gwaith. +Ymgyrchodd dros hawl merched i bleidleisio, sef yr hyn a alwyd yn etholfraint. +Mae'n ddiwrnod y gêm fawr rhwng Ysgol Cwmbwrla ac Ysgol Bronaber. +Mae'r ap diweddaraf i mi ei leoleiddio bellach ar gael yn Gymraeg. +Planhigion a ddefnyddir i roi blas, arogl neu liw ar fwyd yw perlysieuyn. +Nofel gyfoes i bobl ifanc ac iddi flas hud a lledrith y Preselau. +Yn y cerebrwm, mae rhanbarthau penodol ar gyfer pob math o ysgogiad ac ymateb. +Mae'n gynllun gwych ac fe gewch chi hyfforddiant o safon. +Nid oedd hi wedi mynd yn bell pan welodd bod y ffordd ar gau. +Roedd aelodaeth o'r blaid yn anghyfreithlon yn Awstria. +Roedd ei rhieni'n ddarllenwyr mawr, a oedd yn meithrin ei thueddiadau academaidd. +Hang on, dydi hynna ddim fel chdi. +Plygwch y blawd dros y wyau a'r dŵr a'i dylino. +Hed mewn un genhedlaeth a hynny rhwng Mai i ganol Hydref. +Mi oedd 'na lot o gerrig ar y traeth. +Casgliad o ddeg stori antur wir ar gyfer plant. +Mae'r ci yn cweithi ar y postman. +Ei ŵyr oedd sylfaenydd y Ffiwsilwyr Brenhinol Cymreig. +Mae'r elfennau sydd ag ymddygiad tebyg, felly, o dan ei gilydd, mewn rhesi. +Mae 'na lot o loerennau o gwmpas y ddaear. +Cafodd yr anrhydedd fel cydnabyddiaeth am ei waith yn trin cleifion. +Ei dderbyn a wneuthum am ei werth. +Os yw baban yn y groth yn ei ddal, gall fod yn ddifrifol. +Dw i methu stopio byta siocled. +Diddymwyd yr etholaeth flwyddyn yn ddiweddarach. +Roedd yn ferch i ddau Iddew cyfoethog. +Ei arbenigedd oedd anianeg. +Od iawn oedd hynna. +Wedi cyrraedd y maes awyr mae'n darganfod bod y Cartel wedi ei dwyn. +Mae hi'n arddangos ei gwaith celf yn yr oriel. +Ni wyddys pwy oedd ei fam. +Daeth y babi hwnnw yn frenin Ffrainc maes o law. +Nid oes unrhyw olion o'r tŵr wedi goroesi. +Mae gan y prif banciau wasanaethau ffôn Cymraeg. +Casgliad o atgofion gan Amrywiol yw Modryb. +Dilyniant i Olion Hen Elwyn ac I'r Tir Tywyll. +Wi wedi plannu tato yn yr ardd. +Gellir defnyddio'r blodau sychion fel perlysieuyn i roi blas ar fwyd. +Ac oherwydd hynny gelwir ef yn Bully; hynny ydyw, Bygylwr. +Dw i'n credu eu bod nhw ar ganol ychwanegu enwau Cymraeg yn raddol. +Ar ôl ei farwolaeth, rhoddodd y gorau i ysgrifennu ffuglen. +Yn ddiweddarach yn ei bywyd, teithiodd i Brydain a chynorthwyo'r mudiad etholfraint yno. +Torcha dy lewys cyn i chdi olchi'r llestri. +Er iddi wrthod talu'r ddirwy, gwrthododd yr awdurdodau gymryd camau pellach. +Mae'n fwy cyffredin ymhlith pobl hŷn a menywod. +Ti yng Nghaerdydd dydd Sadwrn nesa? +Yn ei barn hi, ofn oedd yn gyfrifol, oherwydd bygythiad Llywodraeth Sbaen. +Casgliad o ddeugain dawns gan Eddie Jones yw Hwyl y Ddawns Werin. +Oddet ti'n ei nabod e o'r blaen? +Ac ie, wastad wedi meddwl beth sy'n digwydd i'r holl fwyd. +Ydych chi'n barod am antur? +Fe argyhoeddir pob gwleidydd o gyfreithiwr mai ofer fydd iddo mwyach lefaru a gweithredu. +Mae gan adio sawl nodwedd bwysig. +Mae o'n licio rasio ceir. +Gyda syndod a dig y clywais di yn cablu urddas, ac yn diystyru llywodraeth. +Mae rhan o'r etholaeth o fewn rhan ganol Ucheldir yr Alban. +Mae adwaith cemegol wastad yn broses sy'n cyfuno deunyddiau cemegol. +Wedi gwneud yr ymarfer corff pan oedd yr hysbysebion ymlaen. +Planhigyn lluosflwydd byrhoedlog ydy llygad llo mawr neu weithiau llygad-llo mawr. +Geith o swper yn munud. +Wedi sgwrs fer danfonodd yr heddwas y ddau ar eu ffordd. +Dyma restr o lyfrau Cymraeg sy'n ymwneud ag Atgofion a Hunangofiannau. +Dwi'n hoffi espionage a stwff amlwg fel yna. +Ceir portreadau byrion o enillwyr. +Myneged ei alar bod cynifer o Gymry mor rhyddfrydig i ddygymod ag iau caethiwed. +Mae egni gwres yn cael ei drosglwyddo drwy ddarfudiad a phelydriad. +At hynny, gellir rhannu rhifau cymhleth hefyd gyda rhifau cymhleth di-sero. +Er gwaethaf yr uchelgeisiau hyn, daeth llenyddiaeth i'r amlwg fel ei phrif ddiddordeb. +Llyfr ac astudiaeth lenyddol, Gymraeg gan Sioned Davies yw Crefft y Cyfarwydd. +Cyfrol sy'n cynnwys cyflwyniadau i wyrthiau Iesu. +Golygai hyn y gallai cyfandiroedd gael eu ffurfio. +Plwyf enfawr, nad oedd yn ddinas ar y pryd. +Mae nifer o baramedrau yn gysylltiedig â thrychiad conig. +Rhyfel ydoedd rhwng taleithiau Protestaniaid a Chatholig. +Fydd canlyniadau Rhyl ddim yn cyfri, rwy'n tybio. +Does dim cysylltiad rhwng cael heigiad o lau a glendid neu lanweithdra. +Mae'r llyfrgell yn arbenigo mewn llyfrau prin ac yn gweithredu hefyd fel archifdy. +Anodd iawn oedd dweud pa un ohonyn nhw oedd yn cwyno fwyaf. +Ŵyr Rhys oedd Rowland Ellis a aned yma. +Teithlyfr gan Alun Ifans yw Swyn Sir Benfro. +Ceir siambr gladdu o'r Oes Efydd o fewn y muriau. +Mae'n nefoedd go iawn yntydi. +Ie, fel fflwff, gwaddol petalau am wn i. +Roedd y sŵn yr wylo am y colera wedi codi ofn arni. +Mae dy sbectol di'n gam. +Ni siaredir Llydaweg yn y dref, ond ceir ef yn y wlad oddi amgylch. +Diolch Siân am yr enwebiad. +Prin y gallasai bwled fy ngoddiweddyd. +Mae cylch o oleuni disgleiriach ar dy aflwyddiant di nag ar lwyddiant eraill. +Dydi hi ddim yn licio gwisgo sgerti. +Pa liw ydi'r bloda'? +Tra yn y ddalfa, aeth ar streic newyn a syched. +Ydyn nhw'n cytuno neu'n anghytuno gyda threfn y stori? +Cynhwysir yma gerddi amrywiol iawn sy'n adlewyrchu rhychwant eang o bynciau. +Ond angen i unigolion greu cyfri Wicipedia a gallwch lwytho ffotos chi 'di tynnu. +Adeiladodd fwthyn un llawr hygyrch fel cartref ar gyfer ei fab anabl. +Yn ddiweddarach siaradodd â chynrychiolwyr Democrataidd yn unig. +Casgliad newydd o ryseitiau gan Gareth Richards yw Prydau Pum Peth. +Mae ei llinach yn tarddu o'r Ffindir. +Ysgrifau gan ddeuddeg o ysgolheigion ar y deuddeg diwygiwr Protestannaidd. +Wnes i ollwng 'y mhanad ar y llawr. +Ges i gyfarfod hefo'n narlithydd p'nawn 'ma. +Bydd hyn yn atgyfnerthu driblo a rhoi i'r disgyblion yr hyder i ddriblo +Golyga datblygiadau meddygol diweddar fod disgwyliad oes yn cynyddu, a chyfraddau marwolaethau yn lleihau. +Diolch o galon i ti am y manylion. +Mae'n rhyfedd be ma' rhywun yn dod ar ei draws dramor. +Gallai hefyd olygu hefyd gydymaith person, ei gymar, ei gymydog neu ei elyn. +Dyma gronicl y ddinas breifat. +A fydd copïau gennych? +Yn llawn dychan o sefydliadau a phobl Cymru, dyma nofel lawn difyrrwch. +Es i i redeg dros Fynydd Gellionnen bore 'ma. +I ni, y Gymraeg yw'r unig wrthglawdd rhyngom a diddymdra. +Rhoddais i ddogfen ar Google Docs ddoe. +Mae o'n gymaint o gîc. +Ystyr y gair rhwyll ydy rhwyd. +Dw i 'di bod yn rhostio tomatos yn y popdy efo olew a halen. +Cyfrol o ddeg o straeon byrion gan Eigra Lewis Roberts yw Oni Bai. +Mathau o wermod ydy prif fwyd y siani flewog; mae'n gaeafgysgu fel chwiler. +Mi ddaeth hi adref yn fyw ac yn iach. +Na, dw i heb gael fy mharashiwtio yma. +Fe'i canfyddir yn y rhan fwyaf o Ewrop. +Mae ein pasbortau yn datgan ein hunaniaeth. +Mae canran yn rhif di ddimensiwn. +Roedd hi'n nyrs yn y Rhyfel Byd Cyntaf. +Mae'n rhaid bod gair Cymraeg am hyn? +Mwynhaodd y profiad, cymaint, rhoddodd ei fryd ar fod o flaen y camera. +Gwasanaethodd fel gweinidog mewn gweinyddiaethau Torïaidd a Chwigaidd. +Pa ap Android sy'n dda ar gyfer lluniau awyr nos a'r sêr? +Mae gweddill ei agenda'n un eitha cymedrol er enghraifft hawliau hoywon ac erthylu. +Lluniau lliwgar gan Jac Jones. +Mewn geometreg hyperbolig, gelwir y pwyntiau anfeidredd yn aml yn bwyntiau ideal. +Roedd yn arbenigwr mewn gwydr lliw canoloesol. +Dyma bedwaredd nofel Alun Jones. +Dilyniant i'r nofel Lleuwen gan yr un awdur. +Nid oes consensws ynglŷn â beth yw'r gwahanol ganghennau o fewn mathemateg gymhwysol. +Ceir yma heneb llawer hynach, sef siambr gladdu ger coedwig Goed Parc Garw. +Dim byd i'w weld yno. +Comedi tywyll yw'r ddrama hon. +Ystyrir y papur hwn yn garreg filltir hanesyddol o fewn y maes. +Wnes i droi fy ffêr wrth drio neidio dros y wal. +Ceir llun ohono'n blentyn a chofeb iddo yng Ngholeg yr Iesu. +Mor falch bod Non ddigon call i sylwi bod rhywun yn tynnu'i choes. +Gorwedd gwreiddiau'r canu arbennig hwn yn ôl ym myd y Celtiaid. +Gofynnodd beth oedd yn bod. +Llyfryn o gerddi amrywiol ac argraffiadau, rhai yn ymwneud â Llanfairpwllgwyngyll a Garndolbenmaen. +Mae doniolwch ac eironi'n nadreddu drwy ei cherddi. +Un o arweinwyr y Mormoniaid yn Unol Daleithiau America oedd Daniel Jones. +Gwasanaethodd fel Ynad Heddwch ar fainc Sir Feirionnydd. +Casgliad o gywyddau grymus gan amryw o feirdd. +Beth ydy hi? +Bu farw o drawiad ar y galon ar y fferm flwyddyn yn ddiweddarach. +Pa ddiwrnod mae'i ben-blwydd o? +Be' sy' yn y bocs ar waelod y grisia'? +Ychwanegwch nionyn wedi'i dorri a'i goginio nes ei fod yn frown euraidd. +Wedi gadael yr ysgol mynychodd Adran Iaith a Sefydliad Amddiffyn. +Dw i angen rhoi lliw yn 'y ngwallt. +Mae'n fwy amlwg mewn merched nag ydyw mewn dynion. +Dilyniant i Dawnsio Gwirion a'r Duw Rhyw. +Brenhinwr o Frycheiniog a anwyd yn y Drenewydd. +Rhoddwyd ei weddillion i orwedd yng mynwent teulu Nanteos yn Eglwys Llanbadarn. +Mae geometreg algebraidd yn gangen o fathemateg, sy'n astudio seroau polynomialau aml cyfeiriol. +Llyfr cyfri yn cynnwys ffeithiau am anifeiliaid, map ac arweiniad. +Rhaid i ffermwyr sefyll ar eu traed cyn bod y fferm deuluol ar ben. +Ac yna cymerodd anadl ddofn. +Yng ngwledydd Prydain fe'i ceir yn yr Alban yn unig. +Gan mai pobl anaml ydym, yn preswylio parth bychan o Ynys Brydain. +Roedd rhywun wedi rhoi yr ocsiwn ymlaen am un o'r gloch y bore. +Gwerth i bob tad a dyn ddarllen hwn. +Y gangen o fathemateg sy'n ymwneud â thebygolrwydd yw damcaniaeth tebygolrwydd. +Mi oedd Mari'n cerdded yn ei chwsg bob nos. +Siaradodd gyda theimlad a gyfansoddid o dosturi, o syndod ac o ddigofaint. +Toriad drwy'r bilen ludiog ddynol. +Arhoson ni mewn gwesty reit ar lan y môr. +Mi aethon ni ar goll ar ôl dilyn y llwybr anghywir. +Tra'n casglu madarch yng nghaeau Tŷ'n Ffridd caiff Endaf fraw ofnadwy. +Ei hedyn symbolaidd yw ceirch. +Roedd yn ferch i raglaw ac roedd ei brawd yn Nhŷ'r Arglwyddi. +Dim ond un plentyndod 'dan ni'n ei gael. +Hynny yw, mae creithio yn rhan naturiol o'r broses o fendio'r croen. +Rwyt wedi mynd yn un garfaglach wrth ostwng dy arre i ddiolch amdano fo. +Gyda Ffrainc y cysylltir y gair fel arfer. +Defnyddiodd ei swydd fel modd o ganfod gwybodaeth am fecanweithiau diogelwch ei gleientiaid. +Dwi'n byw ger Wrecsam. +Mae'n Is-Reithor Prifysgol yr Haf, Catalwnia. +Dwi'n siŵr bydd cefnogaeth unfrydol i'r syniada' 'ma. +Ond mae'r plastig eisoes yn ein dŵr. +Dyma'r gyfrol gyntaf erioed i drafod crefft y gynghanedd yn unig. +Bu raid i'r gŵr ofyn rhyw gwestiwn i un o'r fforddolion brodorol. +Mae'n etholaeth amrywiol a gwahanol i etholaethau eraill yr Alban. +A phwy yw'r dyn a chanddo wyneb melyn yn llun pasbort Peter? +Bu Heulwen yn cydweithio gyda Hywel Gwynfryn ar y radio. +Fodd bynnag, ni allent gytuno ar enwebai ar gyfer olynydd iddo. +Nid hon oedd yr ardd oedd wedi'i chau. +Mae plentyn yn sgwatio y tu ôl i wagen gyda dau bwmpen ynddo. +Ni wnaeth y Dug ei benodi i'r Gonffederasiwn ei hun. +At hynny, mae rhai o ysgolion Israel hefyd yn cynnig cyrsiau Rwsieg. +Dedfrydodd swyddogion o Bacistan bob swyddog i flwyddyn mewn carchar ym Mhacistan. +Maent wedi eu cyfieithu i sawl iaith arall. +Y diod y byddwch yn ei gael pan fyddwch chi ddim yn cael diod. +Mae dawnsiwr yn dawnsio mewn dillad glas pryfoclyd yn y strydoedd. +Gallai ei gŵr fod yn wyllt ac yn awdurdodol. +Mae'r erthygl bresennol yn delio â disgyn rhydd Newton yn unig. +Roeddent wedi bod yn pentyrru bwyd a chyflenwadau at y gaeaf. +Yn nodweddiadol, cânt eu canfod mewn coedwigoedd collddail, llaith. +Mae'r genws hefyd yn Awstralia, De Asia, Môr y Canoldir, a Gogledd America. +Defnyddir y cnewyllyn fel olew, bran, startsh, glwtamadau, bwyd anifeiliaid, a thoddyddion. +Menyw yn Asia yn edrych ar rywbeth. +Ei grynodeb o'r digwyddiad oedd bod llwyddiant a methiant yn cydweithio. +Mae'n amlwg fod angen gwahanol gymhareb gêr ar gyfer y cyflwr hwn. +Mae angen newid y ffordd yma o gynhyrchu tê perlysiau Tsieineaidd, mewn ffordd flaengar. +Nid yw dofednod sy'n pori wedi'u cyfyngu i ieir a thyrcwn. +Ac rwyf yn ei chusanu i basio fy egni ymlaen iddi. +Mae ganddo raglenni busnesau hefyd fel "trio ymlaen rhithwir" a "mesurydd". +Mae'r holl beilotiaid yn gyn-filwyr Llynges Frenhinol ond hefyd Corfflu'r Llu Awyr. +Hyrwyddai gerddoriaeth newydd mewn ffyrdd eraill hefyd. +Mae'r bwyty wedi'i leoli mewn delwriaeth Ford wedi'i addasu. +Gôl-geidwad hoci yn deifio. +Roedd rhai awduron yn galw hyn yn “fodel” symlach newydd o bensaernïaeth gyfrifiadurol. +Cyn hynny roddent yn aml wedi eu gwahanu i'w pennau eu hunain o'r injan. +Mae'n nhw'n tueddu i golli canghennau mawr mewn stormydd gwynt. +Moriasom rhwng dwy res o goed poplys. +Bydd hysbysu yn y papur bro leol ar gyfer y gweithgareddau hyn +Hi oedd gêm ryngwladol ola'r tymor. +Ond wyddwn i ddim ar y pryd. +Roeddynt yn barod iawn i roi pob cefnogaeth iddo. +Paid gwastraffu trydan, diffodd y golau. +Ni fwytâi Dafydd byth bryd o fwyd heb ei rannu â Phero. +Ti a fi'n debyg iawn i'n gilydd. +Gall plant arbrofi gyda golosg neu bensil ar bapur i greu tonau gwahanol +Ydw i'n cael mynd i'r gerddi? +Heddiw, rydych am werthuso a dadansoddi nodweddion bisgedi +Mae'r Iarll yn cydsynio. +Yn yr etholiad cyffredinol llwyddodd Thomas i gadw'r sedd dros y Rhyddfrydwyr. +Fy niwrnod rhydd i ydi o heddiw a dw i'n mynd adre. +Bu'n gweithio mewn pyllau yn Nowlais, Aberdâr, Cwm Twrch ac Ystalyfera. +Roedd y ffau yn llawn dŵr a gweddill y c'nawon yn farw. +Roedd hyn yn galluogi defnyddio sbotoleuadau i dynnu sylw at berfformwyr llwyfan. +Wedi dychwelyd i Loegr roedd wedi dod yn ffigwr enwog ymysg Catholigion y wlad. +Bydd y ddiod hud, yn ôl y pedler diegwyddor, yn datgelu ei gwir gariad. +'Dan ni'n chwilio am luniau ar wahanol bynciau +Sefydlwyd Comisiynydd yr Iaith Gymraeg yn lle hynny. +Gwasanaethodd fel capten a rheolwr Cymru. +Credaf nad ydyw yn rhy ddiweddar apelio atoch chi i amddiffyn eich dinasyddiaeth. +Rhydd hyn bwysau cynyddol ar y galw am fwyd a dŵr. +Myfyrdodau byrfyfyr ar y nofelau Cymraeg gorau. +Claddwyd ei weddillion ym mynwent capel Calfaria. +Mae rhai arwyddion o adeiladau mewnol yn goroesi. +Mi fydd hyn a hyn am Borthmadog. +Nawr doedd neb yn ei dilyn hi. +Roedd hi wedi gweld bythynnod gwyngalchog a goleuadau tafarn. +Yr oedd rhyw geinder a heddwch rhyfedd wedi gorffwys ar yr hen fangre annwyl. +Wnes i ddim gwasgu'r botwm iawn. +Stori gan Mair Wynn Hughes yw Trip a Hanner. +Gall y claf gael twymyn a theimlo'n flinedig. +Agorodd y drws i fynd allan. +Mae rhannau ohono'n greithiau aradr. +Mae'r ceffyl yn y cae. +Syrthiodd mam feichiog Meilir i lawr y grisiau gyda chanlyniadau pellgyrhaeddol. +Mae'r llong 'na 'n anferth. +Yn ôl traddodiad bu yma frwydr waedlyd yn ystod Rhyfel Cartref Lloegr. +Ddaru fi 'm i weld o. +Mae sgil-effeithiau difrifol eraill yn cynnwys adweithiau alergaidd a phwysedd gwaed isel. +Mae'r term esgyrnyn yn golygu asgwrn bach. +Casgliad o ganeuon i blant gan Robat Arwyn yw Miwsig y Misoedd. +Yn yr ysgol uwchradd doeddan ni byth yn cael mynd allan. +Mae'r Unol Daleithiau yn anferth. +Awdur Cymreig yw Aled Richards. +Y chweched mewn cyfres am ferched cynradd sy'n gwirioni ar ddawnsio. +Stori i blant oed cynradd gan Ceri Wyn Jones yw Nawr Te, Blant. +Mae rhywun eisoes wedi gyrru yma i nôl fi. +Mae arlunydd yn aros yno a gŵr o Firmingham sy'n dipyn o ddirgelwch. +Nofel wedi'i lleoli yng nghefn gwlad Sir Frycheiniog adeg helynt y Rhyfel Cartref. +Bu farw yn Llundain. +Gwasanaethai fel trysorydd yr Amgueddfa Genedlaethol; a thrysorydd y Bwrdd Penodiadau Cymreig. +Fodd bynnag, gall hinsawdd dymherus olygu tywydd na ellir ei ddarogan. +Ac yna dechreuais i or-feddwl a meddwl mod i'n gor-dreiglo! +Dw i 'di sgwennu i Wicipedia. +Mae cwsg yn caniatáu i'ch ymennydd brosesu gwybodaeth yn eich cof +Mae'n well gen i gorau meibion. +Joe Biden fydd arlywydd nesaf yr Unol Daleithiau. +Dw i ddim am roi gwaith cartref i chi yr wythnos hon. +Maen nhw wedi dadbacio pob dim ond y lluniau ar gyfer y waliau. From 9426cea71afa6c0fafe5fd259db0c320afa9993f Mon Sep 17 00:00:00 2001 From: Anastasia Kuznetsova Date: Wed, 15 Jan 2025 12:42:21 -0500 Subject: [PATCH 52/61] upd .gitignore --- benchmarks/DASB/cache/31_char.model | Bin 238564 -> 0 bytes benchmarks/DASB/cache/31_char.vocab | 87 - benchmarks/DASB/cache/train.txt | 7953 --------------------------- 3 files changed, 8040 deletions(-) delete mode 100644 benchmarks/DASB/cache/31_char.model delete mode 100644 benchmarks/DASB/cache/31_char.vocab delete mode 100644 benchmarks/DASB/cache/train.txt diff --git a/benchmarks/DASB/cache/31_char.model b/benchmarks/DASB/cache/31_char.model deleted file mode 100644 index 66178dd35c6b7d8182910cee125db7ea5755d42b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 238564 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

mx< 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�s0Gt3cvMqQyg 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 z{D1iW@c-fe!~ci>5C0$jKm33A|M36e|HJ=>{}2Bk{y+SG`2X<#;s3+`hyM@%AO1i5 zfB66K|Kb0`|A+q%{~!K8{D1iW@c-fe!~ci>5C0$jKm33A|M36e|HJ=>{}2Bk{y+SG z`2X<#;s3+`hyM@%AO1i5fB66K|Kb0`|A+q%{~!K8{D1iW@c-fe!~ci>5C0$jKm33A z|M36e|HJ=>{}2Bk{y+SG`2X<#;s3+`hyM@%AO1i5fB66K|Kb0`|A+q%{~!K8{D1iW z@c-fe!~ci>5C0$jKm33A|M36e|HJ=>{}2Bk{y+SG`2X<#;s3+`hyM@%AO1i5fB66K z|Kb0`|A+q%{~!K8{D1iW@c-fe!~ci>5C0$jKm33A|M36e|HJ=>{}2Bk{y+SG`2X<# z;s3+`hyM@%AO1i5fB66K|Kb0`|A+q%{~!K8{D1iW@c-fe!~ci>5C0$jKm33A|M36e z|HJ=>{}2Bk{y+SG`2X<#;s3+`hyM@%AO1i5fB66K|Kb0`|A+q%{~!K8{D1iW@c-fe z!~ci>5C0$jKm33A|M36e|HJ=>{}2Bk{y+SG`2X<#;s3+`hyM@%AO1i5fB66K|Kb0` z|A+q%{~!K8{D1iW@c-fe!~ci>5C0$jKm33A|M36e|HJ=>{}2Bk{y+SG`2X<#;s3+` zhyM@%AO1i5fB66K|Kb0`|A+q%{~!K8{D1iW@c-fe!~ci>5C0$jKm33A|M36e|HJ=> z{}2Bk{y+SG`2X<#;s3+`hyM@%AO1i5fB66K|Kb0`|A+q%{~!K8{D1iW@c-fe!~ci> z5C0$jKm33A|M36e|HJ=>{}2Bk{y+SG`2X<#;s3+`hyM@%AO1i5fB66K|Kb0`|A+q% z{~!K8{D1iW@c-fe!~ci>5C0$jKm33A|M36e|HJ=>{}2Bk{y+SG`2X<#;s3+`hyM@% zAO1i5fB66K|Kb0`|A+q%{~!K8{D1iW@c-fe!~ci>5C0$jKm33A|M36e|HJ=>{}2Bk z{y+SG`2X<#;s3+`hyM@%AO1i5fB66K|Kb0`|A+q%{~!K8{D1iW@c-fe!~ci>5C0$j zKm33A|M36e|HJ=>{}2Bk{y+SG`2X<#;s3+`hyM@%AO1i5fB66K|Kb0`|A+q%{~!K8 z{D1iW@c-fe!~ci>5C0$jKm33A|M36e|HJ=>{}2Bk{y+SG`2X<#;s3+`hyM@%AO1i5 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 z0gMJP8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U z0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|o zz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQt zFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)D zj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1( zqXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn1~3}H zXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP z8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn z1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y z0gMJP8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U z0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|o zz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQt zFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)D zj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1( zqXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn1~3}H zXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP z8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn z1~3}HXaJ)Dj0P|oz-R!Y0gMJP8o+1(qXCQtFdD#U0HXnn1~3}HXaJ)Dj0P|oz-R!Y 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 Axc~qF diff --git a/benchmarks/DASB/cache/31_char.vocab b/benchmarks/DASB/cache/31_char.vocab deleted file mode 100644 index e7ce7b137..000000000 --- a/benchmarks/DASB/cache/31_char.vocab +++ /dev/null @@ -1,87 +0,0 @@ - 0 - 0 - 0 -▁ -1.74721 -d -2.53055 -a -2.61418 -y -2.76667 -e -2.76814 -n -2.7718 -i -2.89511 -r -2.93808 -o -3.11776 -l -3.22858 -w -3.39486 -h -3.53487 -f -3.63673 -g -3.6499 -t -3.83412 -s -3.92351 -u -3.96273 -c -4.0488 -. -4.0938 -m -4.10907 -b -4.43112 -' -4.54289 -p -5.23272 -M -5.28445 -, -5.46129 -D -5.8771 -C -5.90703 -R -6.10721 -G -6.20168 -Y -6.33222 -A -6.37426 -B -6.58809 -N -6.77213 -S -6.88324 -P -6.91365 -â -6.94012 -L -6.9774 -E -6.98247 -F -6.98247 -ô -7.09835 -T -7.1244 -? -7.21008 -W -7.28985 -O -7.34681 -- -7.44689 -H -7.49245 -ŵ -7.65796 -I -7.97267 -ê -8.17716 -J -8.30232 -U -8.49037 -ŷ -8.56183 -" -8.66582 -v -8.82915 -ï -8.94895 -! -9.19508 -j -9.2674 -î -9.49055 -“ -9.49055 -” -9.49055 -k -9.55508 -á -9.96055 -; -10.1837 -K -10.4714 -V -10.5584 -z -10.5584 -x -10.6537 -é -10.7591 -ö -10.8768 -û -11.3468 -à -11.57 -q -11.8577 -ë -11.8577 -‘ -11.8577 -: -12.2631 -X -12.2631 -Ŵ -12.2631 -¬ -12.9563 - -12.9563 -Ô -12.9563 -ä -12.9563 -ò -12.9563 -– -12.9563 -— -12.9563 diff --git a/benchmarks/DASB/cache/train.txt b/benchmarks/DASB/cache/train.txt deleted file mode 100644 index 05a44aab1..000000000 --- a/benchmarks/DASB/cache/train.txt +++ /dev/null @@ -1,7953 +0,0 @@ -Mae cysylltiad ystadegol cryf rhwng tlodi a chyrhaeddiad addysgol isel -Yr oedd pobl y llofftydd uwchben, hefyd, yn medru cymryd rhan yn y sgwrs. -Beth am fynd am dro i lan y môr. -Oes gen ti blwg sbâr? -Gellir cysylltu â gorsaf heddlu Casnewydd neu Crimestoppers yn ddienw. -Ydych chi angen unrhyw hyfforddiant neu gyngor ynglŷn â darllen? -Un o ffilmiau gorau America oedd One Flew Over the Cuckoo's Nest. -Nid anerchiad politicaidd a fwriadaf fi heddiw. -Gwisga dy sanau gwlân cynnes. -Mae'r llyfr yma wedi bod ar goll ers amser maith. -Cynhaliwyd Ffair y Byd yn Chicago yn un naw wyth tri. -Mae cynllunio statws yn broses fwriadol o osod statws ar iaith neu ieithoedd penodol. -Bydd hyn yn cael ei drafod yn ddyfnach nes ymlaen. -Rydym o hyd yn awyddus i helpu busnesau i arloesi -Daeth gwraig, darlun o lanweithdra a chynildeb, a glasiaid inni. -Mae'r dyddiau yn dechrau ymestyn. -Bydd hi'n dywyll cyn bo hir. -Mae'n gwneud marciau i gynrychioli rhifau wrth chwarae -Er hyn byddai'n derbyn y math yma o eiriau mewn cerddi llai mawreddog -Mae dilyniant penodol yn dewis siâp y protein -Byddwch yn medi'r hyn rydych yn hau -Aethom i gaffe i gael coffi a llaeth a bara menyn. -Sicrhaodd hyn bod y dysgwyr yn ffocysu ar batrymau perthnasol -Wnaiff y dillad ddim sychu ar y lein heddiw, mae'n rhy wlyb. -Cul iawn ydyw'r ystryd, oer a budr. -Mae'r ffermydd wedi eu rhannu mor fân yno. -Ffrainc yw'r ffefryn i ennill, yna'r Unol Daleithiau, yr Almaen a Lloegr. -Gall esiampl dda fod yn athro, rhiant neu ffrind -Mae tri chwarter o dir y byd wedi cael ei newid gan weithgaredd dynol. -Mae angen cychwyn ar dasgau'n syth er mwyn eu cwblhau'n brydlon -Dangosir y ddau syniad allweddol hyn yn y gerdd. -Cyfres deledu Americanaidd am wleidyddion oedd The West Wing. -Diolch yn fawr iawn i'r ddau ohonoch chi am ddoe. -Mae cymhelliant yn ffactor bwysig wrth ddysgu ail iaith -Podlediad Dim Rwan Na Nawr plîs -Rwy'n chwilio am garafán ail-law ar gyfer y Steddfod. -Gellir plotio'r bariau yn fertigol neu'n llorweddol. -Mi oedd hi wedi gweithio fel nyrs ers pymtheg mlynedd. -Gyda defnydd hirdymor efallai y bydd angen dosau mwy am yr un effaith. -Cafodd y sir weinyddol ei rhannu'n fwrdeistrefi trefol a rhanbarthau trefol a gwledig. -Gall brics gynnwys pridd, tywod a chalch, neu ddeunyddiau concrit. -Gall paratoadau trwy'r genau effeithio ar ddatblygiad y babi. -Mae gofod dau ddimensiwn, fel yr awgryma'r enw, yn fath o ddimensiwn. -Mi oeddan nhw'n hunan-ynysu ar Ynys Enlli. -Be' mae'r gair yna 'n feddwl? -Prif fwyd y siani flewog ydy coed conifferaidd megis Sbriws Norwy. -Erbyn roedd yn naw oed, ni allai ddarllen mwyach. -Mesuriad byr o amser ydy eiliad. -Gallai rhai elwa o reolaeth dynn lefelau siwgr yn y gwaed gydag inswlin. -Dw i'n siarad o brofiadau hunllefus ges i hefo nhw. -Dw i angen brwsio 'y ngwallt achos mae o'n flêr. -Wedi dod ar draws hwn wrth ddarllen ar gyfer traethawd ar ieithoedd. -Beth a wnawn ni? -Penodwyd Moelwyn Hughes i arwain ymchwiliad i'r trychineb. -Mi fydd angen camau cryfach. -Roedd Myrddin yn gwybod yn iawn ei fod yn wahanol i'r bechgyn eraill. -Dwi angen gwybod mwy amdano. -Roedd chwarae cardiau ac yfed cwrw. -Mae'r carped yn frwnt. -Oce dwi'n deall rŵan. -Roedd gan y reiffl hon bellter dair gwaith hirach na'r mysged. -Dyn gwlatgar ac annibynnol ei ysbryd yw Paddy, a dweud y gwir amdano. -Ond 's dim lot o siâp arno fe, druan. -Dim maddeuant i unrhyw un efo jyst twtsh o fol cwrw! -Hanodd o deulu dosbarth canol, Catholig. -Am ysbaid, mynychodd yr ysgol feddygol a dechreuodd addysgu dosbarthiadau iechyd cymunedol. -Wnes i erioed feddwl am hynny. -Nid oedd o yno. -Ymunodd hefyd â Phlaid Gomiwnyddol Japan. -Arferid defnyddio'r mesuriad modfedd yn yr hen drefn Imperialaidd o fesur. -Hyd hynny, ysgrifennai a siaradai'n bennaf yn yr Almaeneg. -Gellir cyfrifo cyfaint solid afreolaidd drwy ddadleoliad. -Ni phriododd hi erioed. -Cymunedau gwasgaredig yn sir Benfro yw Mynachlog-ddu, Llangolman a Llandeilo. -Cafodd adroddiad ardderchog, yn adlewyrchu ei ymdrech a'i bresenoldeb gwych -Mae wedi bod yn bleser cydweithio gyda rhywun mor gefnogol a chyfeillgar -Yr oedd wedi darganfod fod y llong yn agos iawn i'r porthladd. -Wedi cyrraedd, eisteddai'r dynion ar fur y fynwent. -Gofynna i Wicipedia Cymraeg beth yw Mwyalchen Y Mynydd? -Mae'n gyffyrddus yn y naill safle neu'r llall. -Mae hyn yn dangos sut i ychwanegu pennyn neu gynffon i'r cynllun argraffu. -Mae'r cyfleusterau addysgol yn cynnwys celf a chrefft -Sypyn ydoedd mewn papur llwyd, ac wedi ei lapio yn daclus. -Maen nhw'n byw yn y gogledd ers blynyddoedd maith. -Wedi noson fawr peidiwch â cheisio coginio o dan ddylanwad alcohol -Gobeithiaf y caf y cyfle i ymhelaethu ar yr uchod mewn cyfweliad -Gofynnodd Wil Ifan beth oedd yr helynt rhwng y ddau. -Ga i fynd â fy nghi gyda fi i'r nefoedd yma? -Ci oedd Sam. -Rhwng popeth, gŵr go ddigyfaill ydoedd Dafydd Tomos. -Rwy o leia yn cael gwaith cyson ar hyd y blynydde ynte. -Dywedodd wrth ei fam pa beth oedd wedi digwydd. -Bydd cawodydd trymion ar y tir uchel. -Ni byddent hwy yn mynd i lawr i'r traeth bob dydd. -Roedd ein symudiadau yn adlewyrchu ein cymeriadau -Diolch am roi'r cyfle imi geisio am y swydd -Wedi ymddiddan byr, aeth Dafydd ymaith â gwn Siôn Huws ar ei ysgwydd. -Wyt ti'n clywed y durtur yn y coed? -Hwyrach mai y cinio oedd heb fod wrth ei fodd. -Yn ogystal, pwysleisiaf bwysigrwydd cydweithrediad ar gyfer y dasg hon -Sut mae modd gwneud cartref diogel i ni a'r trychfilod? -Gawn ni ddod â ffrind gyda ni i chwarae? -Wedi ei gladdu, bu'n sefyll yn hir uwch ben ei fedd. -Cafodd fraw pan welodd Pero yn dod tuag ato a chwningen rhwng ei ddannedd. -Roedd yr oergell yn wag. -Does neb call yn mynd ar eu gwyliau ar hyn o bryd. -Mae wedi rhoi'r gorau i ddawnsio. -Meddyliodd hefyd tybed pwy fyddai'n edrych ar ei hôl hi. -Aeth ac eisteddodd ar gadair wrth y tân. -Chwifiai ei gap, a'r llaw arall yn pwyso ar ei ystlys, yn ddidaro. -Gan dy fod yn chwarelwr rhaid i ti ymddwyn fel chwarelwr. -Roedd plant eraill fel petaen nhw'n perthyn i'w mamau a'u tadau. -Y mae adeiladau o'i gwmpas bron ym mhob cyfeiriad. -Pam ges i'n anghofio? -Yr oedd mam Siôn Morys yn ofni'r môr yn arw. -Dydi e ddim yn gallu darllen eto. -Roedd y wifren i dynnu'r mellt ati a'u harwain i'r ddaear. -Roedd Mary wedi hoffi edrych ar ei mam o bell. -Pam na wnei di roi pentwr o gerrig yn fan 'na? -Safai'r coed yn fud ac yn llonydd o'i chwmpas. -Hen beth bach diniwed oedd y neidr. -Gweithiai mewn siop lle cedwid amryw gryddion. -Pan ddaeth, nid oedd ganddo syniad yn y byd am Gymru na dim Cymreig. -Rwyf wedi atodi posteri sydd yn hysbysebu'r sesiynau -Wrth deithio ymlaen, daethom at dŷ newydd rhyw ddegllath o'r ffordd. -Gellir troi i edrych ar ffactorau allanol, megis mewnfudo ac allfudo. -Yr oedd yr hen greadur wedi cael ergyd o'r parlys. -Mi sylwais ryw ddiwrnod fod cyfarfod i'w gynnal yn y dref. -Cerddodd drwy'r orsaf i'r cerbyd trên gyda'i phen yn uchel. -Fe gafodd hi ei gadael ar ei phen ei hun. -Cyhoeddir y Western Mail yng Nghaerdydd. -Roedden nhw'n meddwl nad oedd Mary yn gwrando. -Peidiwch fyth â chymryd dognau mwy neu fwy aml -Bydd gweithredu argymhellion yr adolygiad yn ceisio sicrhau rheolaeth achosion barnwrol gadarn -Roedd hi mor dal, main a phrydferth ac yn gwisgo dillad mor hyfryd. -Adeiladodd y tylwyth teg bont o dywod. -Doeddwn i ddim yn meddwl i chi ddeud hanes eich teulu. -Amcanion y wers oedd addysgu sut i gyfrifo gwerth arwynebedd siapau cyfansawdd -Mae angen i ni ddadansoddi effeithiolrwydd cost a model gweithredu'r ddarpariaeth hon -Craidd prydferthwch y pili-pala yw dycnwch y lindysyn -Mae angen gofal mawr gyda phreifatrwydd a materion hawlfraint wrth gasglu corpora. -Bydd rhaid iddyn nhw ddilyn y gerddoriaeth er mwyn creu dilyniant o symudiadau -Dewiswch eich hoff artistiaid a ffotograffau o'u gwaith -Nid yw'r pleidiau eto wedi oeri. -Cafodd ei anghofio gan bawb. -Gellir cynnwys rhestrau geiriau helaeth sy'n rhestru pob ffurf bosibl. -Roedd hi'n darllen yn ddistaw yn y gornel. -Roedd y canu cefndir yn dda hefyd. -Roedd ei mam hi mor brydferth. -Yr oedd yn ddyn cyffredin go anghyffredin hefyd. -Pwy yw chwaraewr y gêm? -Rwyf bellach yn gyfrifol am asesiadau risg tripiau ysgol hefyd. -Nid ydyw'r hen arferion ofergoelus wedi eu halltudio o'r wlad. -Roedd yn digwydd go iawn, ac roedd yn erchyll -Roedd Gwynfor yn ymgeisydd dros Feirionnydd. -Gallai unrhyw un ohonyn nhw fod wedi ennill. -Mae yna reswm ac achos y tu ôl i bob profiad. -Y term Cymraeg am ‘odd number' yw odrif. -Rhaid i chi fynd i Lundain eich hun i'w chasglu hi. -Cyn hir roedd hi'n teimlo'n gysglyd iawn. -Roedden nhw yn agor drysau ac yn edrych mewn i stafelloedd. -Roedd hi'n gwybod nad oedd hi'n mynd i aros. -Wrth odre y creigiau mae digonedd o fôr lysywod. -Diolch byth fod y gwanwyn wedi cyrraedd. -Rwyt ti'n mynd at dy ewythr. -Prin y gwrandawai arnom ni, yr hogiau eraill, yn siarad. -Dw i ddim eisiau fe. -'Dan ni'n dod o'r un brethyn. -Doedd hi'n methu gweld unrhyw beth, dim ond tywyllwch dudew o boptu. -Mae o'n gwybod ein bod ni'n siarad amdano fo. -Byddai Mary wedi hoffi gofyn rhagor o gwestiynau. -Yn ei syndod siaradodd gydag acen lydan Swydd Efrog. -Aeth hi drwy'r drws i ardd gyda wal o'i hamgylch. -Edrychodd Martha fel petai ar fin gwylltio. -Dyro mymryn o driog neu bach o siwgr arno fo. -Welsoch chi erioed y fath gyfnewidiad. -Y cyfle cyntaf a gafodd, aeth ati i ddal cwningod drachefn. -Edrych arno'n pigo o gwmpas fan 'na ac yn edrych aton ni. -Hoffet ti fod yn ffrind i fi? -Cododd ei llaw yn serchus arna i wrth fynd heibio. -Roedd hi'n berson heulog, braf a serchog yr olwg. -Dw i wrth 'y modd gydag o. -A dyna lle yr oedd dillad Siôn yn swp ar y traeth. -Ar y dechrau doedd ganddi ddim diddordeb o gwbl. -Merch gyffredin oedd hi wedi cael ei magu mewn bwthyn ar y rhostir. -Ti 'di'r hogan fach o India? -Mae dylanwad technoleg a systemau cyfrifiadurol wedi cynyddu nifer y myfyrwyr yn bendant. -Arferai fod ganddi gymdogion, nawr mae ar ei phen ei hun. -Cyn bo hir daeth hen ŵr gyda rhaw dros ei ysgwydd drwy'r drws. -Roedd nifer o bobl yn siarad am eu gwyliau. -Ceisiodd obeithio na ddaliai Pero ddim rhagor o gwningod. -Ci fy mrawd oedd o. -Roedd eu gwaith cerfio yn gywrain iawn. -Cnociodd ar y drws cyn mynd i fewn. -Rydych wedi dŵad yr holl ffordd o'r America i weld yr hen gartre? -Dangoswyd nifer o brojectau da i amddiffyn bywyd gwyllt. -Byddwch chi'n cael mynd adre yfory. -Welis i erioed ddim byd neilltuol iawn ynddo fo. -Mae'n gais arall i orffen y gêm. -Wnei di gau'r llenni os gweli di'n dda. -Mae gen ti ormod o gynffon i bethe'r Plas 'na o lawer. -Aeth y trigolion yn benben, er na wyddai neb yn iawn pam. -Drysau glas oedd i bob ystafell. -Ei ddifyrrwch pennaf fyddai mynd i chware i'r llyn mynyddig. -Teithiai llawer o bererinion at y ffynnon sanctaidd. -Yr oedd hi yn noswaith hyfryd ym mis Medi. -Roedd wedi torri pob potyn oedd yn ei gyrraedd o yn yfflon mân. -Wyt ti am ei wneud o yn llyfr? -Geneth hardd anghyffredin oedd hi, dal a syth. -Roedd yno deisen lemon, bara brith a threiffl mefus. -Mae daearyddiaeth yn bwysig iawn. -Prin y bu ddeuddydd nad oedd o wedi'n credu ni. -Yr oedd Siôn yn ddeg oed cyn gweld y môr o gwbl. -Cadarnhawyd dau achos arall o'r coronafeirws yng Nghymru heddiw. -Prynodd Siôn rewgell newydd. -Mae'n edrych am y bwlch. -Maen nhw newydd ddarganfod cerfiadau allai fod yn ysgrifen. -Cerddodd drwy'r drws a'i chael ei hun mewn perllan. -Rwyf yn deall hyn ac yn dymuno'r gorau i bawb -Faint o bysgod sydd yn y môr? -Yr oedd hithau yn sefyll ar y darn pren a'i breichiau ymhleth. -Trwy'r ffenestr yr oedd llecyn gwyrdd bychan i'w weled. -Rwyf yn gwerthfawrogi ei chyfraniad i'r dosbarth. -Mae'r mwyafrif o entrepreneuriaid yn rhannu'r un rhinweddau. -Bu allan ohoni am amser hir. -Yr oedd y gwasanaeth yn rhy faith o lawer gennyf. -Os byddech chi'n ymweld â'r castell byddai'n tawelu eich meddwl. -Hyd y gwyddom ni mae'r dyddiadur yn llawn -Cyn y rheilffordd, dŵr oedd y dull mwyaf effeithlon o gludo. -Mae anhawster mynediad hefyd yn ddewisol iawn. -Llwgodd nyddwyr a'r gwehyddion yn ystod y newyn. -Gall plant bach adeiladu strwythurau cadarn a chymhleth. -Tractor lliwgar yn y cae. -Y gweinyddwr taleithiol sy'n arwain y fiwrocratiaeth daleithiol. -Fodd bynnag, gellir gwerthuso a mynegi economi'r byd mewn llawer mwy o ffyrdd. -Mae'r mwng, cynffon a bacsiau yn syth, sidanaidd a niferus. -Un ffordd oedd bod yn byw ar y tir yn weithredol. -Mae'n gyrchfan poblogaidd iawn i dwristiaid ac yn fan pererindod yn y wlad. -Wrth adael, estynnodd Abraham sofren felen i mam. -Nid oedd haul yn tywynnu arno am rai wythnosau yn nyfnder y gaeaf. -Trois ar y dde hyd ffordd a'm denai i'w chysgodion. -Roedd e'n sioc darllen hwn ac yn awr rwy wedi newid fy marn. -Bydd raid i fi yrru neges atyn nhw yn dweud fod Gwen i ffwrdd. -Mae'n rhaid gwneud ymdrechion arbennig i'w diogelu yn y byd digidol. -Dim ond tipyn i jips a grefi gafodd o i ginio. -Daeth trefn newydd i rym, sef Safonau'r Gymraeg. -Safle caer yw safle mynwent Llanfihangel yng Ngwynfa. -Er syndod iddi, nid oedd y rhisgl garw yn brifo'i chefn. -Does dim rhyfedd iddo orfod cael triniaeth i wella mewn ysbyty. -Roedd yn rhaid i bawb siarad Lladin er mwyn cyfathrebu â'r llywodraeth imperialaidd. -O ganlyniad, mae'r Amason yn ecosystem lai dwys sy'n peryglu'r fioamrywiaeth. -Y rheswm am hyn yw bod cyfle i ennill lle ym mhencampwriaeth yr Ewros. -Beth ydych chi'n credu sydd angen i chi weithio mwy arno? -Bwthyn bach cerrig oedd gan y teulu, a thair ystafell iddo. -Wnes i ddefnyddio'r meini prawf asesu trwy gydol y prosiect. -Byddaf yn gorfod arfer cyfrwystra mawr i guddio fy anwybodaeth. -Er mor flasus oedd y bwyd, y gweinyddion a wnaeth y profiad yn bleserus. -Mae llythrennau syml, plaen, yn fwy darllenadwy na llythrennau ffansi. -Yr oedd gennyf ddu neu dri cae i fyned drostynt ar fy ffordd adref. -Wrth gyrraedd y gwesty, cawsom de rhosyn a phwdin traddodiadol. -Dyma'r cyfarwyddiadau fydd yn cael eu rhoi gyda'r gêm. -Arhoson nhw'n llonydd iawn rhag i'r arth ymosod arnyn nhw. -Nid ydyw Awst wedi darfod. -Rwy'n barod am baned arall erbyn hyn. -Mwy nag unwaith bu bron iddi faglu ar y tir anwastad. -Rhybuddia adroddiad y Cenhedloedd Unedig bod hyd at filiwn o rywogaethau mewn perygl. -Daethom at le yr oedd yr afon a'r ffordd yn ymrannu'n ddwy. -Clic ar glic bob awr o'r gloch. -Mae tair lefel yn cael eu gweld yn y persbectif clasurol. -Yn ogystal rwyf yn mwynhau chwarae pêl-rwyd yn fy amser rhydd. -Cadarnhawyd fi yn y syniad fod ganddo ryw gynllun i'n gwaredu. -Cytunodd awdurdodau India i gyd-weithio â'r Swyddfa Dramor i'w helpu. -Cyfarwyddodd torrwr cerrig fi i ffordd gul oedd yn gadael y ffordd fawr. -Carlamai trwy'r coed fel hydd fach ofnus. -Ond nid hon yw'r unig agwedd bosibl. -Ni fynnwn i er dim i chwi fy nghamddeall yn y peth hwn. -Oddi wrth y llyn arweiniai ffordd dywodlyd i fyny at y tŷ gwyn. -Na feddylier fod Ap Vychan wedi byw'n fachgen gwyllt. -Gallai rhywbeth ddigwydd i ti, a thithau'n bell o gartre. -Ochrau rhedynog oedd yno, a gwartheg duon. -Beth yw'r peth gorau i mi wneud? -Rhedais drwy'r glaw bras trysfawr i'r hen westy hwn, a dyma fi. -Yr oedd y bechgyn oll yn bresennol, ac am unwaith yn ddistaw a llonydd. -Defnyddid y cen i lifo dillad, ac nid oes bosibl cael lliw prydferthach. -Gwelsom lawer hafan brydferth, ac aml gip ar y Traeth Mawr a Chastell Harlech. -Dywedir ei fod yn trechu planhigion ac anifeiliaid brodorol. -Ni chlywir sŵn symudiad y diferyn dŵr gan y glust feinaf. -Roedd y delyn yn canu ac arogleuon hyfryd yn y gwynt. -Roedd systemau diogelwch hanfodol wedi methu, cafwyd ffrwydradau a rhyddhawyd ymbelydredd. -Effeithia llygredd plastig yn sylweddol ar fywyd môr hefyd. -Bwyteais datws pob ddoe ac roedden nhw'n iachus. -Cododd o'i gwely a tharo siôl o'i chmwpas. -Cawsom gerydd lawer gwaith gan Abel Hughes am adrodd ein hadnodau mor wael. -Ymddiheuriadau, yn anffodus, dydi'r toiled yma ddim ar gael. -Nid oes digon o ddŵr croyw i gwrdd â'r galw am ddŵr. -Yn hwyr nos Iau tarodd awyren fynydd yn Sbaen, gan ladd ugain o bobl. -Dw i ddim yn gwybod beth sydd ganddyn nhw mewn golwg. -Y mae teimlad yn arwydd fod y genedl yn fyw. -Y mae'r dyffryn ymysg y culaf o ddyffrynnoedd Cymru. -Credaf fod yn y thema hon ystyr gwaelodol cryf megis llawenydd neu euogrwydd. -Roedden nhw wedi gadael y car yn y maes parcio. -Ganwyd Robert Thomas, Ap Vychan, yma mewn tlodi mawr. -Dwedwch os oes angen cywiriadau neu ychwanegiadau ar y daflen. -Cardodasant yn Sir Aberteifi, a chawsant lawer o ŷd. -Y thema ganolog ydy'r economi, tlodi a gormes. -Dyma bennill clo'r gerdd fuddugol sy'n sôn am brofiadau erchyll y rhyfel. -Dyma ffordd yn croesi ein ffordd ni, ac yn rhedeg ar draws y cwm. -Rwy'n hoffi chwarae yn y cornel chwarae rôl ac yn y toes. -Yr oedd ganddo rhyw allu rhyfeddol i newid gwedd ei wyneb. -Mae hyn yn dangos y gwymplen yn y ddogfen. -Rydym wedi gweld agweddau mwy cymhwysol ar wyddor ieithyddiaeth. -Dylet ti gael e-bost yn cadarnhau hyn. -Ni welwn o'm blaen ddim, cyfannedd nag anghyfannedd. -Gyda golwg ar fy ngwybodaeth, nid wyf nac yma nac acw. -Y dydd o'r blaen edrychwn ar ddau geiliog ar y domen. -Dyma gyfle, felly, i weld at beth y medrwn anelu. -Ofni yr oedd i fy mrawd ei dynnu ei hun i helynt. -Diolch am gysylltu, ond yn anffodus byddaf i ffwrdd yr wythnos dan sylw. -A ydyw teulu Ann Griffiths yn yr hen gartref o hyd? -Mae hefyd yn dylanwadu ar sut mae ymennydd plentyn ifanc yn datblygu. -Serch hynny, mae'r trafodaethau wedi methu hyd yn hyn. -Ceir rhai ardaloedd o siopau lleol a siopau cornel. -Mae'r digwyddiad yn tynnu sylw at y pwysau a roddwyd ar fenywod. -Dau brif raniad o fewn geiriaduron yw rhai disgrifiadol a rhai rhagnodol. -Mi fydda i'n meddwl llawer sut y bydd hi arnom ni. -Mae rhai llwybrau traddodiadol yn cynnwys gyrfaoedd mewn therapi iaith a lleferydd, a newyddiaduraeth. -A diolch am y sylw i'n gwaith. -Mae gennyf fi barch hyd yn oed at y rhai sydd yn eich camarwain. -Yr oedd arnaf frys am weled amser gwely. -Rhaid adnabod ymddygiad gwirion ac ymddygiad call y bobl sydd ar y stryd fawr. -Yn y cwch dywedodd rhywun tirion ei fod yn talu dros y plant bach. -Annwyl ffrindie, dyma adroddiad sydyn i chi am y gweithgareddau. -Mae llawer o seigiau poblogaidd yn cynnwys y ddau fath yma o gig. -Beth allech chi ei wneud gydag ieithyddiaeth neu bwnc cysylltiedig arall? -Gadewch i ni gan hynny droi ein holl feddwl ar y mater pwysig hwn. -Serch hynny mae ei berthynas agosaf wedi cael ei hysbysu. -Yn gyntaf bwydwch hadau a ffrwythau i'ch parot ddwywaith y dydd. -Nid rhosynnau na blodau gardd sy'n tyfu yno, ond blodau gwylltion Cymru. -Cymharodd y plant y lluniau mewn ffordd effeithiol. -Tybiai ar y dechrau fod y coed eu hunain ar dân. -Diddymwyd Bwrdd yr Iaith Gymraeg o dan y ddeddfwriaeth newydd. -Deuai lleisiau hudol tuag ati ar awel y nos. -Cyrcha bechgyn a genethod yr ardaloedd cylchynol yno ar nawniau Iau i ddawnsio. -Bydd angen cynrychiolwyr o bob dosbarth wrth y byrddau er mwyn gwerthu'r cwcis. -Ysgrifennwch gan greu brawddegau yn ymdrin â'r person cyntaf a'r trydydd person. -Yng nghongl yr ardd cafodd fy nau gyfaill a minnau ymgom faith a chyfrinachol. -Os edrych y teithiwr ar ei aswy, gwêl gofgolofn o wenithfaen. -Mae'n gwneud i mi feddwl am y darlun ehangach. -Ffeindiodd hi'r allweddi o'r diwedd yn cuddio yng ngwaelod ei bag. -Clywn y defnynnau'n rhedeg i lawr rhwng fy nghrys a'm croen. -Yn wyf yn ddiolchgar dros ben i chwi am eich teimlad da tuag ataf. -Roedd y strydoedd yn llawn sbwriel a fandaliaeth ac roedd thor-cyfraith yn cynyddu. -Yr ydw i yn gobeithio nad oes eisio llawer o nyrsio arna i. -Dylid ystyried cefndir plant a phrofiadau dysgu cynnar gartref fel dechreubwynt wrth gynllunio. -Roedd y gacen yn eithaf plaen ar phen ei hun. -Byddaf yn gofyn i unigolion holi ei gilydd o flaen y dosbarth. -Mae'r corpws bellach yn cynnwys tua chant a hanner o filiynau o eiriau. -Ni ddylid cynnwys plant â byddardod dros dro yn yr ymarferiad. -Roedd y cwpan wedi torri'n deilchion ar lawr. -I ffeindio'r trwynau coch mae angen i chi ddarllen map o'r ysgol. -Beth ydych chi'n ei feddwl pan rydych chi'n edrych dros y lluniau. -Yr oedd awelon oerion y gogledd a'r dwyrain yn ymosod arno yn ddidrugaredd. -Digon tebyg y cewch rywun y gallwch dynnu sgwrs ag ef. -Gwelwyd datblygiadau gan gyrff rhynglywodraethol y Cenhedloedd Unedig, yr Undeb Ewropeaidd a Chyngor Ewrop. -Roedd ei fam yn annog ei phlant i gael diddordeb yn y theatr. -Ysgrifennwch lythyr adref, gan ddisgrifio eich brofiadau a sut rydych yn teimlo. -Pan fydd ynadon wedi gwneud camgymeriad, dydyn nhw byth yn ceisio cywiro'r camgymeriad. -Roedd hi'n pwyso yn erbyn hen dderwen ar ymyl y goedwig. -Bwytaent oddi ar yr un bwrdd, ac yr oedd eu bywyd yn hawddgar. -O'n blaenau dacw Foel Llyfnant a'r Arennig. -Y mae Tŷ'r Ficer yn hen dref Llanymddyfri. -Digon tebyg ei fod ef yn brysur tua Chalanmai yn chwilio am nythod adar. -Mae'r rhain yn rhesymau pam mae'r heddlu yn arestio rhywun. -Hen le cas, digysur, digroeso ydi'r goedwig yna. -Wedyn, cefais lifft i'r stadiwm gan fy ffrindiau. -Ond y mae'r cerbyd wrth y drws yn disgwyl. -Weles i erioed ddaioni o gadw plant yn rhy hir heb ddechre gweithio. -Ymguddia y bywyd yn rhywle yng nghalon yr hedyn bychan. -Diolch o galon am adael i mi ddod atoch. -Doedd hi ddim wedi arfer gyda'r math yma o beth chwaith. -Mae'r gwryw cryn dipyn yn fwy o ran maint. -Aeth yn athrawes yn y clasuron i Ysgol y Sant Paul. -Ac yno, choeliech chi fyth, oedd y robin goch ar gangen hir o eiddew. -Bu'n aelod o'r Academi Brydeinig am rai blynyddoedd. -Roedd yn un o brif noddwyr llenyddiaeth Gymraeg y cyfnod. -Roedd hefyd yn undebwr llafur ceidwadol. -Sgrifennodd hi lot o erthyglau i'r cylchgrawn. -'Dan ni angen cneifio'r defaid. -Cafodd ei addysg uwchradd yn Ysgol Brynhyfryd, Rhuthun. -Ganwyd John yn Rhiwlas Isaf, Llanrhaeadr, ger Dinbych. -Mae unrhyw nifer o bwyntiau'n bosibl. -Mae'n bosib fod ei dad yn gefnder i John Roberts. -Cyhoeddir casét i gyd-fynd â'r gyfrol. -Nid yw pob merch yn gallu bwydo ei babi yn ddiogel. -Dwi'n cofio pobl yn cyfeirio at y lle yn yr wythdegau. -Dydy o ddim yn yr erthygl. -Rwy'n paratoi i redeg. -Byddi di'n falch i glywed bod siop figan wedi agor. -Mi oedd yr arholiad yn sialens arthrol. -Dwi jyst isie tanlinellu nad rhyw brawf yw e. -Mae'n bosibl mai Geraint Saer o Iwerddon oedd ei dad. -Ti 'di codi'n gynnar iawn heddiw. -Bu'n aelod o Gymdeithas Frenhinol Canada am rai blynyddoedd. -Dwi heb ddarllen y darn eto. -Cyfrannodd at archwilio a chadw celf gwydr lliw canoloesol dros sawl degawd. -Dywedir fod y fflam yn dal i losgi ddwy ganrif yn ddiweddarach. -Nath o gostio lot o bres. -Defnyddir y capel heddiw fel amgueddfa i'r creiriau hynafol. -Cyfrol amrywiol, a dadlennol. -Oddi fewn i'r adeilad ceir darlun gwydr o'r hen garchar. -Yn dilyn hynny, ymunodd ag Undeb Cymdeithasol a Gwleidyddol y Merched, grŵp milwriaethus. -Bu yn ynad heddwch ar feinciau Sir Forgannwg, Sir Gaerfyrddin a Sir Frycheiniog. -Mymryn lleiaf erioed sydd ei angen i newid metaboledd y gell. -Cafodd ei eni ym Mangor a chafodd ei fagu ym Mhorthaethwy. -I ble'r ai popeth? -Lleoliad maes y gad. -Gellir gweld ei waith ar wefan y Llyfrgell, yma. -Gwelir y siani flewog rhwng Mai a Medi. -Petai gen i frân neu lwynog bach byddwn i'n gallu chwarae gyda nhw. -Yn yr un flwyddyn, aethpwyd ymlaen â'r gwaith o ddiffinio litr. -Be' 'sa chdi'n gael i fyta yna? -Roedd ei mam yn athrawes. -Am ryw reswm, o fewn y gwyddorau cymdeithasol, cyfeirir atynt fel archifdai data. -Dwi jyst yn dweud. -Dyw'r ddwy wefan ddim yn llwytho o gwbl. -Mynychodd y merched Ysgol Sant Henry, lle buont yn actio mewn dramâu ysgol. -Mae hi'n hoff o ista yn y cae gyda'r nos. -Mae Wil yn cysgu. -Mae'n ffrind i'n byw yn Rwsia. -Mae'r adar yn canu tu fas i'r ffenest. -Gwelir yng nghorff y llyfr mor ddiymadferth yw bechgyn yn y gymdeithas. -Casgliad llenyddol i oedolion gan William Owen yw Yr Un Mor Wen. -Ar yr un pryd, cafwyd gwarchae ar y Fenni. -Dw i 'di bod yn witsiad amdanach chdi trwy dydd. -Mi oedd y tywydd yn boeth ofnadwy tro dwytha i ni fynd yno. -Mae bellach yn amgueddfa ac ar agor i'r cyhoedd. -Nofel ar gyfer plant a'r arddegau gan Emily Huws yw Ned. -Mae'r hen draddodiad hwn yn parhau mewn rhai ardaloedd yng Nghymru. -Roedd ynddo ran ar gyfer golchi dillad a man storio. -Mae germaniwm, fodd bynnag yn hynod brin. -Dydi hi ddim wedi dod adra heno. -Wnest ti drio macarŵn yn y caffi posh 'na? -Mi fedrwch hefyd ddefnyddio finegr gwin gwyn. -Mae'n un o westai mwya'r dref. -Mae'n frown ei liw a'i enw, ac mae ganddo adenydd efydd. -Nofel arswyd i oedolion gan Dyfed Edwards yw Y Syrcas. -Mae'r gaer wedi ei rannol ddifetha gan chwarela. -Stori am y Frenhines Ddu, sef y wraig ddirgel sy'n byw drws nesa. -Wnes i weld ysgyfarnog yn cae. -Casgliad o ysgrifau gan Islwyn Ffowc Elis yw Naddion. -Daeth y ddau ddyn yn bartneriaid busnes gan sefydlu cadwyn o siopau groser. -Fe'i croesawyd mewn eisteddfodau a chyngherddau bychan ledled Cymru, fel gwestai arbennig. -Mae'n dangos be ma buddsoddi mewn diwylliant yn gallu'i wneud. -Felly, mae e'n penderfynu chwilio am dad newydd ar wefan y Tadau Hud. -Darluniau du-a-gwyn doniol, niferus. -Sgen ti hen ffôn Android? -Ni ddefnyddiwyd y ddyfais hon yn eang ar y dechrau. -Ffotograffau a darluniau du-a-gwyn. -Mae sgil-effeithiau cyffredin y gwm yn cynnwys cyfog, hylif, a llid y geg. -Mae'n tarddu o'r gair mudo sydd yntau'n tarddu o symud. -Mae yn rhan flaen yr ymennydd. -Astudir gweithrediadau deuaidd sy'n parhau â'r patrymau hyn mewn algebra haniaethol. -Mae ganddo ddau o blant. -Mae'r ymgyrch yn beirniadu diffyg gweithredu'r awdurdodau cyhoeddus. -Ysgrifennodd yn helaeth ar ddirfodaeth ac athroniaeth gwyddoniaeth, yn enwedig athroniaeth bioleg. -Wyt ti am dorri'r ardd? -Mae ebay yn cymryd eu rhan, mae'n siwr. -Dyma restr o rai o'r llongddrylliadau ar arfordir Cymru. -Dw i ddim eisiau athrawes bersonol. -Hynny ydi os ddewch chi nôl i Gymru rhyw ben. -Mae'r fenyw yn llefen. -Neu rhywun sa'n fodlon cyfarfod am sgwrs yn Gymraeg? -Mae Dei'r gwas a Greta'r forwyn yn cynllwynio i etifeddu'r fferm. -Yna gweithiodd yn y sector preifat a chyhoeddus. -Cyfrol arall yn sôn am un ar bymtheg o heddychwyr Cymru. -Nath o brynu blodau iddi ar 'i phen-blwydd. -Mae ystyr arall i'r gair, sef brychni haul. -Dos â'r parsal 'ma at dy chwaer. -Dylunnir dwy echelin berpendicwlar sy'n croesi ei gilydd ar y tarddiad. -Roedd Martha wastad yn ddirgelwch iddi hi. -Treulia'r gaeaf mewn hen adeiladau neu mewn coed. -Mae 'i wallt o'n 'lyb. -Cynhyrchwch daflen wybodaeth i annog pobl i ailgylchu ffabrig -Yr eiddew oedd y peth mwyaf dryslyd. -Fe aeth â phicnic efo hi i'r traeth. -I bob pwrpas, mae'n cyffredinoli'r polyhedron tri dimensiwn. -Dw i'n gwybod sut ti'n licio dy de. -Mae'n dibynnu ar osodiadau'ch porwr. -Does gan dechnetiwm ddim isotopau sefydlog. -Gweler fy sylwadau isod. -Dyddiadur yn ystod chwedegau'r ganrif ddiwethaf. -Saif ym mhlwyf a chymuned Llanbedr Dyffryn Clwyd. -Gwneir hyn naill ai drwy atgenhedliad anrhywiol neu atgenhedliad rhywiol. -Coginiwch y tagliatelle, a chofiwch, bydd pum munud mewn dŵr berwedig yn ddigonol. -Pwy all newid pethau? -Ai hen addoldy yw'r lle i wneud hynny? -Ystyr egr yn Gymraeg ydy sur. -Mae'n gaeafgysgu fel chwiler. -Piti dy fod di methu teithio o gwmpas Cymru. -Person o Gaernarfon ydy cofi. -Mae rhywfaint o'r ddrama hon yn Gymraeg. -Cynhwysir lluniau ohonynt a manylion am eu llinach. -Tywallt banad o de i fi plis. -Mae'n cael ei ddefnyddio i drin rhwymedd, yn arbennig rhwymedd gan gleifion hŷn. -Dymchwelwyd hefyd galeri'r eglwys yn y rhan ddeheuol. -Gellir cymhwyso a chyffredinoli'r astudiaeth o wrthdroad i ddimensiynau uwch. -Mae hi wedi ysgrifennu rhai llyfrau ffeithiol, a dwy nofel. -Golygir y perfformiadau hyn ganddynt a'u postio ar y we. -Mae'r un systemau i raddau hefyd yn bresennol mewn anifeiliaid eraill. -Mae tynnu niferoedd bach iawn o fewn cyrraedd plant ifanc iawn. -Mae thymws ŵyn a lloi yn cael eu cyfrif yn ddanteithfwyd. -Fe aeth yn ei flaen nes iddo gyrraedd tŷ ei nain. -Fe demtid ni i gredu nad oes Creawdwr. -Ni ddylai fod yn waith caled. -Syniad Aneurin Jenkins Jones oedd cyhoeddi'r cylchgrawn ysgafn a doniol hwn. -Gelwir y ddau ddimensiwn yn hyd a lled. -Darlith am draddodiadau cerdd Cymru gan Stephen Rees yw Traddodiadau Cerdd Cymru. -Rhestr o dermau sy'n ymwneud ag economeg ac econometreg. -Ni fynn y rhan fwyaf ohonynt gymaint ag ychwanegu iaith estronol at eu hiaith. -Eirin gwlanog yw prif gnwd ffrwythau'r ardal bellach. -Mae cyn perchenogion y bwthyn i gyd wedi marw o dan amgylchiadau rhyfedd. -Mae 'i ddillad o i gyd yn rhai lliw tywyll. -Ar adegau defnyddiai efydd a phren. -Mi aeth yr hogan am dro hefo'i ffrind. -Nathon ni gael barbeciw efo'r teulu i gyd. -Tybed pa flas Cymreig fyddai mwyaf addas? -Gruffudd enillodd y frwydr gan fynd â gwraig Hywel adre gydag ef. -Ymhlith ei olygyddion bu Hugh Edwards ac Owen Edward Jones. -Tynnodd hi allan o'r ras cyn dydd y bleidlais. -Mae'n sbwylio prydferthwch atyniadol yr ardal. -Gwesty bach dymunol ym mhentref Glan-y-môr yw Glas y Don -Eisiau clip o'r canu, boi. -Rhaid dewis ar gyfer Ewrop. -Mae'r gwyfyn corn carw'n cael ei denu at olau, fin nos. -Dinistriwyd llawer o'i gynnyrch yn ystod y cyfnod hwn gan dân. -Ar wahân i'r math hwn, ceir nifer o restrau poblogaidd eraill. -Mae bellach yn byw yn Troon yn yr Alban. -Ymladdodd mewn sawl brwydr yn Rhyfel y Rhosynnau. -Cyfrol o gerddi gan Gareth Ffowc Roberts yw Mae Pawb yn Cyfrif. -Yn wreiddiol, roedd yn swydd o statws a grym. -Ni chyhoeddwyd dim o'i hemynau yn ystod ei bywyd. -Mae'n dangos bod enghraifft yn bodoli, i sicrwydd, trwy ddefnyddio dulliau theori tebygolrwydd. -Ond y cynghorau sir yw'r unig awdurdod â chyfrifoldeb dros enwau lleoedd. -Ydach chi angen r'wbath o'r siop? -Nofel arall yn y gyfres i ddarllenwyr yn eu harddegau. -Yn Llanrwst mae Eglwys Sant Crwst. -Dyma'r ail yn y drioleg o nofelau gan Wiliam Owen Roberts. -Ffotograffydd Cymreig oedd John Thomas. -Mae Trefaldwyn o fewn y Bowys bresennol a cheir rhestr o'r safleoedd yma. -Mae'r testun ar ffurf mydr ac odl. -Mae llawer o'r dadleuon yn ddilys. -Dwi'n ffan o'r sgarff newydd. -Ef hefyd a gasglodd ynghyd ei barddoniaeth, mewn sawl cyfrol. -Roedd y newid yn y tywydd fel petai wedi gwneud lles iddo. -Mae hi'n siaradwr Cymraeg. -Beth fyddet ti'n gwneud pan mae'n bwrw glaw fel hyn? -'Di o erioed di gweld merch fach yma o'r blaen. -Roedd ci wedi bod yn ceisio cloddio am wahadden. -Yng Nghaernarfon ail gydiodd mewn pregethu ond fel lleygwr nid weinidog. -Roedd Mary yn ei gasáu. -Gadawodd y gang y dref yn gyflym gan fynd i guddio. -Hogan o'r Clas-ar-wy oedd Morgan. -Fodd bynnag, profodd straen y sioe yn ormod, ac arweiniodd at chwalfa nerfol. -Mae o'n beth bach balch. -Wnaiff rhain ddim tyfu mewn noson. -Fe gymerodd hi gerfydd ei braich a hanner ei gwthio hi, hanner ei thynnu. -Recordiad cyntaf y Tri Thenor yw'r albwm clasurol mwyaf poblogaidd erioed. -Fe wnaeth y robin sboncio, ysgwyd ei gynffon a thrydar. -Mae'n nabod pob bonyn cabaets yn yr ardd, heb sôn am y bobl. -Dros y silff ben tân roedd yna bortread arall o'r ferch fach stiff. -Wnaeth hi ddim crio, ond gwasgodd ei dannedd yn dynn. -Roedd y ddau yn gwrthwynebu Ail Ryfel y Böer. -Pa sgidie wyt ti am wisgo i fynd i'r dre? -Mae dal lot i'w wneud. -Caneuon i soprano neu denor gyda chyfeiliant piano. -Edrychodd o'i chwmpas ac anadlu yn eithaf cyflym mewn cyffro. -Ddaru o aros efo'i gert wrth ein drws ni. -Fy merch newydd holi, beth yw'r gwahaniaeth rhwng ydy ac ydi? -Dalia ati i chwarae'r piano. -Lluniau du-a-gwyn ar bob tudalen. -Saif i'r gogledd o bentref Y Transh. -Pecyn o hadau ymhob cyfrol. -Yr wyt yn proffesu bod yn garwr rhyddid. -Nid fy mai i oedd e! -Mae'r ddynes yn gwisgo masg. -Chwythodd un o'r hyrddiadau bach hyfryd o wynt i lawr y rhodfa. -Stori fydryddol i blant sy'n adrodd hanes teulu o ddreigiau. -Mae Kev yn dipyn o gymeriad yn tydi. -Arwydd indy Wales arall yn y gwyllt yn Aberystwyth. -Mae'n cario Beibl a sach, ac yn y sach ceir draig. -Ma' hi wedi bod yn gweithio'n galed iawn druan fach. -Bu'n ynad heddwch dros Sir Forgannwg. -Coffa da amdano. -Gwych, y sŵn yn dod lawr y cwm. -Ti'n medru 'i ffrio fo mewn sbeisys a ballu. -Rhowch halan a rhosmari ar y tatws rhost. -Mi oedd ganddi anhwylderau bwyta. -Hafaliad mathemategol yw hafaliad differol, sy'n ymwneud â ffwythiant a'i ddeilliadau. -Defnyddid y gair Hindŵ gan yr Arabiaid yr adeg honno. -Mae'n hedfan yn y nos rhwng Gorffennaf a Medi. -Mae'r oedolyn hwn yn hedfan rhwng Mai a Medi. -Dw i'n licio gwrando ar fiwsig o'r wythdega'. -Mae ei lyfr yn hynod ddifyr. -Mewn gwledydd cynnes, gall yr oedolyn gael ei weld drwy gydol y flwyddyn. -Heb glywed y gân ers blynyddoedd. -Tu ôl i'r diacon parchus roedd cymeriad cwbl wahanol yn llechu. -Dal di ati. -Ond mi oedd cynnwrf ac aflonyddwch yn y dorf. -Y diwrnod nesaf fe wnaethon nhw gerdded ymhellach. -Tisio sôs coch ar dy jips? -Dw i prin iawn yn prynu alcohol. -Nofel ar gyfer plant a'r arddegau gan Rhiannon Ifans yw Paul. -Ond mae eu cŵn bach yn waeth o lawer. -Ceir llawer o henebion megalithig yn yr ardal. -Pa bryd bydd safonau ar gyflenwyr dŵr, nwy a thrydan? -Ychwanegwch ddŵr a dod â'r cyfan i'r berw. -Ond mae Sara'n gallu ei gweld hi. -Teyrnged i Emrys Jones gan Robin Gwyndaf yw Teulu, Bro a Thelyn. -Mae'r thymws yn cyrraedd ei bwysau mwyaf erbyn cyfnod y glasoed. -Llyfr dwyieithog sy'n olrhain hanes y Ddresel Gymreig. -Brysia wella yn llawn. -Bydd hyn bron yn sicr o arwain at ddolur rhydd. -Roedd John James yn aelod o'r orsedd gan ddefnyddio'r llysenw Brychan. -Mae prifddinasoedd y taleithiau yn cael eu dangos mewn print trwm. -Mi oedd un yn Wrecsam ac un yng Nghaerdydd. -Mae'r ail grug tua chan metr i'r dwyrain ohono. -Wnest ti fynd mas neithiwr? -Mae traw uchel i sain sydd ag amledd uchel. -Mae cyfrifiadureg yn elfen hanfodol bwysig o fewn y byd technolegol, diwydiannol modern. -Mae'n chwaer i 'di prynu car newydd. -Cafodd ei haddysgu gan diwtor preifat. -Pwy neu beth sydd wrth y ffenestr? -Yn yr hydref mae'r dail yn troi'n goch. -Tisio fi beintio dy winadd di? -Felly, mae cyfanswm dau eilrif yn rhoi ateb sy'n eilrif. -Nid yw'n cofio sut y cyrhaeddodd yno. -Mi oedd pawb yn ofidus yn y dref y noson honno. -Proffwyd rhyfeddol a anwyd yn Llangelynnin ger Tywyn, Gwynedd yw Rhys Evans. -Roedd o'n hel cregyn ar y traeth ac addurno'r ardd hefo nhw. -Mae ynddo hefyd asid tartarig ac asid sitrig ac eraill. -Yr hen enw arno oedd hirsgwar, ond mae creu sgwâr hir yn amhosib! -Rhyddid personol yw ei freuddwyd. -Serch hynny, parhaodd â'i gweithgareddau i amddiffyn hawliau dynol. -Byth 'di clywed neb yn dweud tom. -Straeon Guto Gwningen a'i Gyfeillion. -Wna i brynu cwpwl mwy o baneidiau i ti. -Hi oedd yr unig aelod o'i theulu i oroesi'r Holocost. -Cysgwch ac yfwch yn dda. -Mae llem ac aflem yn cyfeirio at onglau mewnol dau fath o drionglau. -Cyhoeddwyd gan Bwyllgor Cerdd Esgobaeth Bangor. -Y dail sy'n cael eu bwyta ac nid yr hedyn caled. -Mae'r elfennau sydd ag ymddygiad tebyg, felly, o dan ei gilydd, mewn colofnau. -Cysgant fel chwiler dros y gaeaf. -Dyna ydy fy marn personol i beth bynnag. -Heddiw, yn ogystal â bod yn fan i addoli, mae hefyd yn amgueddfa. -Rhys Davies, ynad heddwch, oedd ei thad. -Mae hi'n meddwl bod 'na ysbryd yn yr atig. -Dw i am drio'u ffonio nhw yn lle. -Shwd ath hi gyda ti? -Roedd ganddi ei barn ei hun, barn radical o flaen ei hoes. -Mae'n bresennol ym mhob ymlusgiad, aderyn a mamal gwrywaidd. -Enw brand a chwmni yw Twitter. -Gymerodd hi flwyddyn mas a mynd i deithio. -Roedd y teulu'n Iddewon. -Bydd popeth ar gau a phob sefydliad ar gau. -Mae 'na lwynog yn byw yn y goedwig. -Mi oedd y ffilm yn bril. -Mae Gwyndaf Evans yn yrrwr rali Gymreig ac yn ŵr busnes. -A fydd hi'n gallu dod o hyd iddo? -Mae gan bob rhan ohono oglau garlleg cryf iawn. -Ond mi rwyt ti yn codi 'nghalon i. -Mae'n llawer haws gweld patrymau ar siartiau bar. -Mi fydd yn priodi merch y brenin. -Mae'n werth ei wylio. -Gerllaw, ceir hen gapel Canoloesol. -Gadewch i'r gymysgedd oeri. -Yn Rhydychen dysgodd Ffrangeg, Eidaleg a Sbaeneg. -Mae pobl yn hapus. -Pe treulient rai blynyddoedd ar y Cyfandir, fe ddysgent am hen lenyddiaeth. -Gweithiai'n ddieithriad i gomisiwn. -Dilyniant i'r nofel Byth Ffarwél. -Ond mae gen i nawr fwy o gwestiynau yn fy mhen. -Mae addysg yn golygu mwy na dim ond cyflwyno cwricwlwm. -Os felly, byddai'r un uchod yn dewis da. -Ond mae hi wedi gwella. -Pa helynt fyddan nhw'n tynnu am eu pen y tro hwn, tybed? -Ni fedrai lacio'r cwlwm. -Mae'n tyfu yn Ewrop, gorllewin Asia a gogledd Affrica. -Diolch i chi am sefyll yn y bwlch. -Pam na ches i ddim un? -Gethon ni dywydd braf wythnos ddiwetha'. -Diolch am fod mor onest Esyllt. -Dydy o ddim yn deall fy mod i'n siarad Cymraeg. -Ydy tîm gemau gymanwlad Cymru wedi dod adref eto? -Hoff fwyd y siani flewog ydy dail y Ddraenen Wen a'r Ddraenen Ddu. -Gall hefyd ei gwneud hi'n anodd anadlu. -Aethon ni i syrffio bora 'ma. -Mae'n cynnwys y pentref Pentywyn. -Dyn yn rhoi ei amser i gadw eraill yn iach. -Maen nhw, fodd bynnag, yn brin, ar wahân i garbon a silicon. -Mae 'na ddwy soffa yn y stafell fyw. -Ti 'di gadael gwydr ar y bwrdd tu allan. -Mae'n crwydro'r strydoedd yn chwilio am ffrind ac am gartref newydd. -Roedd eu cegau ar agor. -Mae'r rhain yn fathau gwahanol o ddadansoddi data. -Nofel gyfoes, sy'n codi nifer o gwestiynau. -Ma' fe wedi mynd bant yn 'i fan lwyd. -Nid oes gan fabi newydd anedig badell pen-glin, ond mae ganddo gartilag meddal. -Mi welon nhw sloth yn y jyngl. -Roedd eu llygaid yn rhythu. -Mae'n biwt, wir i ti. -Bore braf arall yn Llandudno. -Aeth yn ôl i dŷ ei ffrind. -Ond angerdd pennaf Lydia oedd llenyddiaeth, yn enwedig barddoniaeth. -Wedi hynny bu am gyfnod byr yn Tsiecoslofacia a Rwmania. -Ydi toriadau'n bygwth ein Parciau Cenedlaethol? -'Di'n iPad i yn fan 'na? -Ar ddiwrnod y gêm bêl-droed fawr, mae problemau'n codi. -Mae dy sanna' di'n drewi. -Rhowch y hufen a'r menyn mewn dysgl bwrpasol. -Bu galwadau seneddol i egluro'r gyfraith. -Cyfrol o ganeuon dwyieithog gan y gyfansoddwraig o'r Rhondda. -Mae gwrych yn ei groesi; ar wahân i hynny mae mewn cyflwr da. -Dyna'n union beth mae Lenni Dafis yn ei wneud. -Yn ôl yr hyn dw i'n darllen, mewn cyflwr diymateb parhaol mae o. -Ceir craig ar y copa. -Mae ofn uchder yn ofnadwy ar Dafydd. -Cyrhaeddon nhw dŷ ei chwaer. -Mae'n hedfan yn y nos a hynny rhwng Mehefin a Gorffennaf. -A wyddost ti beth fy ffrind, y mae'n well gennyf i ti. -Wnes i gau'r cypyrdda i gyd. -Mae nodiant mathemategol yn system ysgrifennu a ddefnyddir ar gyfer cofnodi cysyniadau mathemategol. -Casgliad cyflawn o gerddi cyfoethog un o feirdd gorau'r ugeinfed ganrif yng Nghymru. -Gall crawniad ddatblygu unrhyw le yn y corff. -Nathon ni beintio'r ddresal yn wyn. -Wedi gadael yr ysgol mynychodd Brifysgol Caeredin a Phrifysgol Glasgow. -Ond mi fydd e braidd yn boring. -Ond un diwrnod caiff ei gipio gan long ofod. -Ffotograffau lliw o olygfeydd yng Nghymru. -Hi oedd yr hynaf o saith o blant. -Dw i ddim yn teimlo dyletswydd o gwbl i roi arian iddyn nhw. -Ganwyd Evans yn Nolgellau, yn fab i David Evans, a Jane ei wraig. -Mae angen cael hwn yn trendio. -Ond heb yn wybod iddi, mae cadno llwglyd yn ei dilyn. -Roedd mewn hwyliau da iawn. -Mae'r amgueddfa hon yn cynnwys llawer iawn o arteffactau diddorol o India. -Mae hi wedi derbyn nifer o wobrau am ei gwaith llenyddol a newyddiadurol. -Fodd bynnag, ar hyn o bryd, roedd Cefnfor yr Iwerydd yn gymharol gul. -Ar yr oedolyn ifanc mae'r smotyn yn frown golau. -Pedair stori sydd yn cludo Morgan Wyn i fyd dychmygol. -Mewn geometreg eliptig, mae pob dwy linell berpendicwlar i linell benodol yn croestorri. -Mae ei straeon yn ymddangos mewn blodeugerddi ledled y byd. -Maent yn gadael i dynged benderfynu ac yn gadael i ddwy arth ymladd drosto. -Ystyr ei enw yw "wedi'i falu ag wyau" yn Sbaeneg. -Y prif gnydau amaethyddol yn y rhanbarth hwn yw pomgranadau, grawnwin, eirin a mariwana. -Gelwir unrhyw fath sydd ddim yn gyfan yn fath rhannol. -Adeiladwyd nifer o antenau, seigiau, cromenni a chyfleusterau eraill yn ystod y blynyddoedd canlynol. -Dim ond rhannau o'r ffos fyddai'n dal yn weladwy. -Yn dioddef o iselder difrifol, aethpwyd ag ef i'r ysbyty eto yn fuan. -Y prif ddulliau o godi arian yw trethi a ffioedd defnyddwyr. -Lladdodd eirlithriad lawer o'r cŵn oedd yn cael eu defnyddio i fagu. -Ymddangosodd dwy bennod ym mhob sioe. -Methodd â chyrraedd unrhyw le yn y siartiau. -Ar ôl dychwelyd adref, dysgodd chwarae gitâr a ffidil. -Mae'r brifysgol yn cynnig rhaglenni i israddedigion. -Mae'r ardal yn dueddol o brofi sychder. -Mae'r fenyw'n dodwy ei hwyau rhwng drain llaethlys y coed. -Rwyf eisiau fy mywyd preifat yn ôl a dydw i byth am gael hynny. -Roedd hi hefyd yn bianydd wedi'i hyfforddi'n glasurol. -Plentyn ifanc yn bwyta pastai gyda'i wyneb. -Yn aml cyfeirir at yr uned "n"-sffêr fel "y" "n"-sffêr. -Roedd awdurdodau lleol i ofalu am gyfranogiad torfol mewn chwaraeon. -Daeth y gwasanaeth hwn i ben yn ddiweddarach oherwydd anawsterau ariannol a derbyniad gwael. -Roedd dŵr yn diferu o'r gwely, ac roedd y bwced wedi rowlio i gornel. -Mae'r gymuned hefyd yn cynnwys llawer o fflatiau, condos a thai trefol. -Mae'n cwmpasu modelu Cefnfor a Modelu Atmosfferig. -Defnyddir goleuder yn aml i nodweddu allyriad neu adlewyrchiad o wynebau fflat, tryledol. -Gweithiodd ochr yn ochr â'i fab hynaf, Germain, a rannai ddoniau mecanyddol ei dad. -Mae sirbysgod yn cael eu dal gan amlaf gan ddefnyddio bachau a llinyn. -Mae'r llawr cyntaf yn fwaog mewn carreg, gyda dau dyred yn ymwthio allan. -Defnyddir dadansoddi meintiol yn helaeth gan reolwyr asedau. -Yn ddiweddarach daeth y menywod hyn yn nymffau. -Ni dalwyd cyflogau'r staff hyd yn oed. -Mae ci gwyn a brown yn neidio i fyny am ffrisbi gwyn. -Ni chafodd y teitl ei benderfynu hyd at fis ar ôl cyflwyno'r llawysgrif. -Yn anffodus, ychydig iawn sy'n weddill o'r addurniadau mewnol artistig helaeth gwreiddiol. -Mae enw'r band yn hen air Norwyeg sy'n golygu “Dicter”. -Caffaelodd De Mol, personoliaeth adnabyddus yn yr Iseldiroedd, ei ffortiwn trwy gynhyrchu rhaglenni teledu. -Cynhyrchodd waith celf hefyd ar gyfer nifer o galendrau. -Mae aelodau o bedair urdd grefyddol Gatholig wedi cael yr enw hwnnw. -Er mwyn y gwahaniaethiad hwn, mae'r solidws yn gallu cael ei gyferbynnu â'r hylifedd. -Mae'r dref wedi ei hamgylchynu gan fynyddoedd. -Mae'r breninllwyth wedi meddiannu'r orsedd Denmarc ers hynny. -Daeth ei neges yn un o brif ddogfennau'r “symudiad ethnig”. -Un o achosion cyffredin symudiadau carbwl yw diffyg profiad. -Does dim y byddwn i'n troseddu rhai egwyddorion drosto. -Yno, gwnaeth drin llosgiadau dwfn iawn ac anffurfiadau difrifol i'r wyneb fel colli amrannau. -Nid yw'r llinell drawsyrru yma'n rhedeg mwyach. -Sylweddolwyd anhawster yr awdurdodiad hwn, gan nad oedd swyddogion dymunol ar gael bob amser. -Nid oes unrhyw gysylltiadau ag ethnigrwydd neu hil i coccydnia. -Mae ei ogwydd gogledd-de yn amddiffyn y dyffryn o lawer o olau haul uniongyrchol. -Mae'r twr coch a gwyn yn strwythur delltwaith agored. -Enillodd pedwar o feibion yr iarll cyntaf ragoriaeth. -Masgot yr ysgol yw'r gath wyllt, a lliwiau'r ysgol yw glas a gwyn. -Yma, mae'n dadlau bod cyfraith gyffredinol hanes dynol yn gynnydd. -Gellir eu clywed yn ymarfer ar ffliwtiau bambŵ o filltiroedd i ffwrdd. -Mae'r tragws yn nodwedd allweddol mewn llawer o rywogaethau ystlumod. -Mae mwyafrif y teuluoedd yn byw ar ffermio. -Mae llawer o'u perfformiadau ar gyfer elusen. -Bwrdd yn llawn bwyd mewn marchnad awyr agored llawn. -Mae ychydig o enghreifftiau o bysgod sy'n hunan-ffrwythloni. -Mae'n bosib mynd i weld yr adfeilion o hyd. -Mae'n byw yng nghanol Llundain ac wedi ysgaru. -Ystyriwyd yr arbrawf yn fethiant ac nis ceisiwyd fyth eto. -Yn raddol fe wnaethant gynnwys pwyslais pentecostaidd. -Yng nghefn y tŷ mae'r ystafell fyw a'r gegin. -Aeth yn alltud i'r Swistir, lle graddiodd o Brifysgol Genefa. -Mae defnyddiau eraill yn cynnwys ffynonellau golau tiwnadwy, systemau adnabod delwedd ac optegau addasiadol. -A hyd yn oed yn y gaeaf rwy'n gallu dod adref ar ddydd Gwener. -Mae llawr yr arena'n cynnwys nodweddion gofodol. -Defnyddir yr un ymadrodd gydag arwyddocâd cwbl gadarnhaol mewn rhan o Loegr. -Roedd ei llygaid hi'n ddisglair yn sgil y dagrau oedd heb eu gollwng. -Mae'r rhan esgyrnog yn ffurfio'r ddau draean mewnol. -Mae ffyngau ym mhob prif ddosbarth yn ffurfio hawstoria. -Mae tensiynau rhyngddynt a phoblogaeth weddilliol yr Almaen wedi lleddfu dros y degawdau. -Yn yr achos hwnnw, mae'r buddion traddodiadol yn berthnasol. -Gallaf ddeall sut mae sêr roc yn teimlo. -Mae dynion mewn festiau oren llachar yn defnyddio offer o flaen stryd. -Ar ôl i'r Undeb Sofietaidd chwalu, syrthiodd yr arsyllfa i amseroedd anodd. -Sgriniwyd y ffilm yn Singapore a Tsieina. -Bryd hynny cafodd addasiadau eu gwneud i wella safonau'r moduron. -Mae rhai prosiectau yn parhau. -Fel arfer, mae gan ddamcaniaethau gydag uwch-gymesuredd estynedig sawl gweithredydd o'r math hwn. -Gellir defnyddio math arbennig o laparasgop ar gyfer diagnosis gynaecolegol, o'r enw ffrwythlonosgop. -Yna sylweddolais y gallai fy man gwylio fod mewn gwirionedd yn fagl. -Gellir cynyddu gwrthiant i rwd trwy neu blatio â chadmiwm neu ffosffadu. -Mae llwch calch yn arbennig o gyrydol. -Ond yn ei ffordd ei hun ar raddfa fach, ffilm fwy o lawer. -Fel arfer bydd y cyrsiau'n defnyddio rysetiau traddodiadol yr Alban. -Bellach mae eglwysi yn cerdded mewn grwpiau eciwmenaidd o bob ardal. -Mewn un fersiwn o'r act arferol yma, mae pob enw yn double-entendre. -Y ganolfan weinyddol yw Pont-y-pŵl yng nghanol y fwrdeistref sirol. -Dyma hefyd y tro cyntaf y cyflwynwyd dosbarth darnau arian yn Tajikistan. -Gelwir y porthladdoedd hynny sy'n llwytho cargo mewn cynwysyddion yn borthladdoedd amlwytho. -Fe drodd hi ei hwyneb tuag at wydr ffenest cerbyd y trên. -Dawnsiodd o'i hamgylch a thynnu wynebau a chanu a chwerthin. -Digwyddodd pethau rhyfedd nad oedd hi'n gwybod dim amdanyn nhw. -Wrth i'r gromen oeri, mae'n codi'n uwch. -Roedd ei mam wedi bod yn wraig hardd eithriadol. -Roedden nhw wastad yn gadael iddi hi gael ei ffordd ei hun. -Roedden nhw bob amser yn ffraeo ac yn cipio teganau oddi wrth ei gilydd. -Cafodd gymaint o fraw fel y bu bron iddo fe neidio am yn ôl. -Gwaeddodd y dynion ar lawr dair hwrê egnïol i'r hen wraig. -I ddechrau'r gwaith bydd angen creu ffeil electronig -Yr oedd y nos yn dod, a'm ffordd innau i'm llety yn hir. -Cyn hir, angorasom yn hafan dawel Pedr Sant. -Mae'r argyfwng gyda gorgynhesu'r byd yn gwaethygu. -Gwnaed y bwrdd bach gan grefftwr medrus. -Roedd hi wastad yn gwneud hyn pan gâi hi siawns i'w gweld. -Doedd e ddim yn gwneud i Mary deimlo'n hapus. -Wel wir, mae'n ferch fach ddiolwg iawn. -Cofiwch gadw'ch teganau yn daclus cyn mynd i'r gwely. -Ar ôl y diwrnod neu ddau gyntaf doedd neb yn fodlon chwarae gyda hi. -Fe geisiodd hi esgus ei bod hi'n gwneud gwely blodau. -Bydd yn rhaid i ti chwarae ar dy ben dy hun. -Wrth i ni droi gyda'r ffordd gwelem lwyn o goed o'n blaen. -Camgymeriad arall yn y fan yna. -Roedd e'n felys, a wyddai hi ddim pa mor gryf oedd e. -Roedd y tŷ fel petai'n mynd yn fwyfwy tawel. -Waeth i mi heb geisio f'amddiffyn fy hun. -Fe roddodd hi roi'r gorau i'w swydd ar ôl tri mis. -Ond roedd hi'n ifanc iawn. -Gan ei bod hi'n wraig siaradus, aeth ymlaen gyda mwy o ddiddordeb. -Mae'n swnio fel petai neb yn y byngalo ond fi a'r neidr. -O leiaf, yr oedd ei ddwylaw yn rhy grynedig. -Mae'r gic olaf wedi bod yn llwyddiannus. -Yna cerddodd y ddau ymlaen yn ddistaw eilwaith. -Roedd ei goesau fel plwm a methai deimlo'r gwaed yn ei draed. -Cynghorem yr awdur i beidio â cholli rhagor o amser gyda'r gelfyddyd. -Gallant ymddiried ynddynt eu hunain. -Aeth Mary i ffit biws a'i churo a chicio. -Roedd ei dillad hi i gyd yn denau ac yn llac. -Yr oedd ganddi lygaid gleision prydferth. -Efallai y byddwch yn dymuno cadw llungopi i chi eich hun -Does neb ar ôl. -Roedd gan y sinema'r grym i lunio'r amhosib a'r annhebygol -Ni chlywais fod yr un bardd erioed wedi canu i goffi du Arabia. -Yr oedd yno gysgod coed ac awel. -Rhaid i ni dynnu at a chefnogi ein gilydd. -Parhaodd gyda gwaith rhyfel trwy ddod yn swyddog gyda'r Bwrdd Glanweithdra. -Dyma'r anrhydedd uchaf y mae Llywodraeth Cymru yn ei roi i Gymry. -Maen nhw wedi cicio un ar bymtheg o weithiau yr un. -Dw i'n cynnal cyngherddau cerddoriaeth a chân mewn cartrefi gofal ac ysbytai -Dyma ddau ŵr ieuanc yn dod o'r tŷ i'n cyfarfod. -Cydiodd ym mraich y dyn ifanc. -Roedd ganddi ffordd mor brydferth hefyd. -Fe'i defnyddir yn aml gyda set data o bobl neu ddosbarthiad tebygolrwydd. -Cafodd ei wrthod gan bob un ohonynt. -Edrychai'r aber mor brydferth o'r bont. -Roedd hyn yn rhoi cyfle i fusnesau annibynnol dderbyn mwy o arian -Y canfyddiad poblogaidd oedd mai Saesneg oedd iaith briodol bywyd cyhoeddus. -Roedd Mary wedi diflasu braidd ar yr hen straeon. -Oxwich yw un o'r traethau mwyaf poblogaidd ym Nghymru. -Cawsom ein hunain mewn hen amddiffynfa adfeiliedig. -Dylai'r disgyblion fynd ati i gwblhau'r asesiad darllen tan ddiwedd y wers. -Hefyd mae yna gyfleoedd gwych i fynd i ddeifio -Y mae pob carreg yn heneiddio yn y mur. -Ydy'r dyn efo neidr yn y ffair drwy'r dydd -O gyffiniau'r eglwys cerddasom i orsaf y ffordd haearn. -Ysgydwodd ei phen, ond gyda gwên garedig ar ei hwyneb. -Maen nhw'n gofyn am gacennau ar gyfer y parti ddydd Sadwrn. -Rho'r teledu i ffwrdd -Nawr defnyddiwch y dechneg yma wrth drafod atomau -Roedd yr ynys gyfan bron o dan ddŵr. -Ni chollodd ei dad ei ddylanwad ar ei gymeriad. -Does dim byd fel dŵr i dorri syched. -Y mae'r dyfyniad hwn yn dangos ei arwyddocâd ar y pryd. -Gŵr ydyw Evan a gwreiddyn y mater ganddo. -Does dim angen dawn mewn daearyddiaeth i wneud map o'r ymennydd -Roedd Cymru'n gryf iawn yn y sgrym gyntaf. -Ni fedrir eu troi ymaith tra bônt yn talu'r rhent arferol. -Nid oes rhaid prynu bwyd i fynychu'r digwyddiad yma -Fe wasgara hi y tywyllwch, fe ymlid ymaith nos anwybodaeth. -Felly, nid wyf yn siŵr o'm marc a'm camgymeriadau -Roedd y môr yn arw iawn. -Mae parotiaid yn mwynhau cwmni ac yn dda am ddynwared y llais dynol. -Gawson ni brynhawn braf, dioglyd yn y tŷ. -Prysurais adref gyda chalon drom. -Rho neges trydar ar Twitter iddyn nhw. -Gwelais y llyn lle y bu ond y dim i Ieuan Gwynedd foddi. -Mae fy mhasio arferol hefyd fel rheol yn eithaf cyson a cryf -Maen nhw wedi codi pris alcohol yng Nghymru. -Roedden nhw'n anghytuno ar bopeth. -Roedden nhw'n hapus iawn i gael glaw ar ôl y sychdwr. -Gall diwylliannau gwahanol hefyd ddylanwadu ar ein cerddoriaeth -Teimlwn yn wan a digalon, ond ceisiwn dreulio yr amser yn darllen. -Mae angen rhoi min ar y bensil yna. -Mae'r dorf yn wenfflam. -Yn y tyllau nytha miloedd o wylanod. -Gall achos hefyd cael ei wneud ar gyfer hawlio treuliau fesul pythefnos -Gawn ni fynd i'r sinema yfory? -Dyfnhaodd y distawrwydd pan oedd yr offeiriad yn cymuno. -Cyn i ni ymadael yr oedd y ddinas yn dawel. -Mae bŵts lliwgar yn ffasiynol iawn eleni. -Rydyn ni'n mynd i Gernyw ar ein gwyliau haf eleni. -Rhai pethau heb newid dim ym mywyd Cymru. -Bellach, yr oedd yno ffordd lydan, a thai mawrion o boptu iddi. -Oherwydd mae'n dangos ar unwaith beth syn digwydd. -Llywodraeth Lafur yn nwy fil a dau ddeg un sy' fwya' tebygol erbyn hyn. -Mae'n amser nawr ar gyfer rhagolygon y tywydd. -Dyma fy nghyflwyniad, nodiadau a meini prawf. -Oedd yna gant go wir? -Teimlodd hi fwlyn y drws yn troi heb drafferth. -Roedd hi'n meddwl yn gyfan gwbl amdani hi ei hun. -Roeddwn i'n teimlo'n freintiedig a deud y lleia. -Hi oedd enillydd y gystadleuaeth. -Bu'n aelod o Undeb Chwarelwyr Gogledd Cymru. -Cafodd ei benodi yn union deg yn ohebydd lleol i'r papur enwog hwnnw. -Tra yr oedd hyn yn digwydd, galwodd y wraig ar yr hogyn. -Yr oedd y gwynt mewn heddwch â hwy. -Roedd y gwaith yn parhau i ddioddef. -Mae'n rhaid i'r fwydlen gynnwys cost ar gyfer pob pitsa -Chwarddodd y ddynes, ond doedd o ddim yn fater chwerthin ychwaith. -Dwn i'm a fyddai modd iti fy nilyn os wyt ti'n fodlon? -Mae Elisabeth yn llewygu ac mae'r brenin yn galw am gymorth. -Mae'n adnabod, yn defnyddio ac yn gwneud patrymau sy'n ailadrodd -Ie, tala dy hun am nawr a hawlia'r gost yn ôl. -Mantais defnyddio Word i fi ar hyn o bryd yw bod gwirydd sillafu ynddo. -Gofynnodd y Maes Awyr am gael benthyciad arall. -Roeddwn i'n gobeithio dy weld y tro nesaf y byddwn yn y de. -Erbyn hyn bargen rhwng dau ŵr rhydd yw bargen y meistr a'r gwas. -Dangosir trosodd enghraifft o sut y gallai'r tabl edrych. -Dwi wedi creu amserlen ffilmio ddrafft ar gyfer y tri lleoliad -Y mae'r hen fynwent wedi ei gwneud yn ardd ddymunol. -Sioe gerdd yw My Fair Lady a addaswyd o'r ddrama lwyfan Pygmalion. -Wedi codi i gynnig yr ymateb aeth i wewyr. -Mae hi'n marw wrth eni plentyn. -Gwaeddodd y dynion ar lawr hwrê yr un modd. -Mae rhai ohonoch eisoes wedi dweud eich bod yn dymuno dod -Bydd cau'r ffatri hefyd yn ergyd sylweddol i economi de Cymru. -Pan hedfanodd y robin i goeden wrth ymyl estynnodd ei llaw. -Treuliodd ei phlentyndod yn nwyrain yr Unol Daleithiau. -Edrychodd Martha arni mewn penbleth. -Dydyn nhw ddim yn siŵr sut i ddathlu'r canmlwyddiant. -Daeth adref i'w ginio, y cinio cyntaf iddo yn ei dŷ newydd. -Sori, anghofiais y ddolen. -Roedd y ddau riant yn droseddwyr a fu mewn carchar yn Ne Cymru Newydd. -Cefais brofiad gwych ac fe wnes i fwynhau fy nghyfnod hefo chi -Gwelwn fynyddoedd pell, fel breuddwyd gŵr ieuanc, yn ymgodi'n brydferth a gwyrdd. -Gobeithio y bydd y berthynas yn gwella rhwng y ddwy wlad. -Mae ganddi hanner chwaer, hanner brawd, a dau frawd iau. -Byddaf yn cyflwyno'r cwestiynau i'r disgyblion -Mae unrhyw gynllun gofal iechyd unigol yn disodli'r polisi hwn. -Y Frenhines fydd yn ei groesawu i Balas Buckingham trwy gynnal gwledd y wladwriaeth. -Newidiadau i ddyddiadau talu yw'r rheswm am hyn. -Ystyried ef yn un o'r glowyr medrusaf a mwyaf profiadol yn y wlad. -Erbyn heddiw, gwyddom fod unrhyw beth poeth megis tywel gwlyb, cynnes yn dda. -Tyfodd y gyfres o lyfrau'n sydyn iawn o drioleg i saith llyfr. -Gwelir yn y gerdd dylanwad y Lladin. -Mi fedran ni helpu hyd yn oed os jyst trwy godi ymwybyddiaeth. -Yn Wuhan fues i'n gweithio am bedair wythnos cyn 'Dolig. -Ond cawn weld be fydd y canlyniadau swyddogol. -Dyma'r ddeiseb i chi arwyddo. -Mae 'na siarc o dan y cwch. -Roedd yn Rhyddfreiniwr bwrdeistrefi Caerdydd a Chasnewydd. -Drwy ddod o hyd i gartref newydd, wrth gwrs! -Aye dyna welis i. -Roedd ganddi bwerau goruwchnaturiol. -Ysgrifennwyd a darluniwyd gan bobl ifanc lleol. -Roedd y plant yn alluog ac roedd y teulu'n llewyrchus, yn ariannol. -Felly, mae'n bolygon lle mae ei du mewn yn amgrwm. -Nofel ramantus, gyfoes sy'n symud rhwng y gororau, Llundain a'r Eidal. -Ceir yma unawdau, deuawdau, partïon unsain, deulais a thri llais. -Cyhoeddwyd ar y cyd gydag Amgueddfa Werin Cymru. -Gwelon nhw hebog yn hedfan uwch eu pennau. -Prif fwyd y lindys ydy hopys fel yr awgryma'r enw. -On i methu cysgu, oedd 'y mol i'n brifo. -Dyma bencadlys y Rhufeiniaid yn eu hymgyrch i orchfygu brodorion De Cymru. -Mae gobaith erbyn hyn bydd y cynllun fymryn bach gwell. -Symudodd Margaret i Fanceinion i fod yn feddyg teulu. -Jyst meddwl, ydy hyn yn saff? -Mae e'n cadw nadredd mewn tanc. -Ni all wneud dim i rwystro hyn, sy'n dipyn o niwsans. -Yn ei chanol oed, ymwelodd hefyd â Pharis, Llundain a Rhufain. -Bu'n briod â dau lenor enwog yn Seland Newydd. -Pob lwc nos Sadwrn. -Fe ruodd y gwynt. -Doedd Mary Lennox erioed wedi gweld rhaff sgipio o'r blaen. -Gall y cyfrifiadur prif ffrâm redeg sawl system weithredu ar yr un pryd. -Gobeithio'ch bod chi gyd yn iawn acw. -'S dim erthygl am y clwb ar Wicipedia. -A byddai mwy o fynegiant ar eu gwep pe baent heb iaith. -Paladr yr englyn ydy'r ddwy linell gyntaf. -Y tu fewn y chwaraeir y gêm fel arfer. -Roedd Gareth yn hel atgofion am y dyddiau cynnar a rôl arloesol yr ysgol. -Oes angen rhywbeth parhaol i gofio am y dreftadaeth? -Hyd yn oed fel plentyn bychan ymddiddorai mewn llyfrau ac ysgrifennu. -Cyfrol o englynion gan wahanol feirdd dienw yw Englynion Piws. -Ar adeg ei farwolaeth ef oedd aelod hynaf Tŷ'r Cyffredin. -Dydi Elin ddim yn cyrraedd adref o'r ysgol un diwrnod. -Mae sgil-effeithiau difrifol yn cynnwys gwenwyno gan nicotin a dibyniaeth barhaus. -Yr Apocryffa i'r Beibl Cymraeg Newydd, argraffiad diwygiedig. -Roedd yn ferch i weinidog lleol. -Mae Wil Bach Saer yn sâl. -Y berthynas rhwng ochrau'r triongl a'i onglau yw sail trigonometreg. -Mae wedi'i leoli i'r de o Foel Famau a Moel Fenlli. -Mae'r capel ar agor o hyd. -Dyma restr o esgyrn y sgerbwd dynol. -Dw i'n meddwl bod o'n gyfle da i rhywun yn fama. -Cyfrol ddwyieithog yn adrodd hanes y bardd a'r heddychwr Waldo Williams. -Roeddynt yn hawlio mae eu heiddo cymunedol hwy oedd yr adeilad a'i diroedd. -Er i feirniaid ei dderbyn yn ffafriol, ni chafodd ganmoliaeth gan y cyhoedd. -Ac maen nhw wrthi bron drwy'r amser. -Y bumed gyfrol o farddoniaeth ar themâu cyfoes. -Nofel wedi'i seilio ar atgofion plentyn yn Nhrefor, Pen Llŷn. -Nofel am Gymru heddiw a enillodd Wobr Goffa Daniel Owen. -Y diwrnod wedyn fe aeth i weld y castell. -Cafodd ei addysgu yn Ysgol Ramadeg y Rhyl a Choleg y Brifysgol Rhydychen. -Mae'r cyfrifiadur yn araf iawn heddiw. -Erbyn heddiw, fe all y nyrs ennill gradd doethuriaeth, gan fynd yn feddyg. -Mae'r ynysoedd mawr wedi'u rhannu'n sawl ardal. -Ceir yma ddwy gyfrol mewn un. -Roedd ei mam yn swffragét, yn llwyrymwrthodwr ac yn ymgyrchydd dros ddiwygio cymdeithasol. -Ymosodwyd arnynt gan yr heddlu wedi hynny. -Gellir nodi'r amserydd aros am gludwr wrth ffurfweddu'r map deialwr. -Llwyddodd i ganfod amser i addysgu hyd yn oed. -Gwasanaethodd yn Ail Ryfel De Affrica a soniwyd amdano mewn adroddiadau. -Cedwir llawer o'i weithiau bellach mewn amgueddfeydd a chasgliadau preifat. -Mewn cyferbyniad â chownter pefrio mae'r cynhyrchiad golau yn digwydd yn syth. -Mae pump o bobl ar fin perfformio dawns. -Ar y llaw arall, cydnabyddir cywirdeb adolygiad y cyfeirlyfr ar drwyddedau. -Mae gor-weithio'r toes hefyd yn risg. -Mae cocên yn blocio ail-dderbyn dopamin ac felly'n cynyddu ei effeithiau. -Ni all cyllyll arferol eraill fodloni'r amodau hynny. -Ni chaiff ddiwyllio ei dir ar ei delerau ei hun. -Cofnodi gwybodaeth a'i chadw dros gyfnod o amser yw storio data. -Stori gan Alys Jones yw Straeon Cornel y Stryd. -Beth amdanoch chi? -Edrych mlaen at ddarllen y cerddi'n iawn. -Mae'r gyfrol yn ddathliad o oleuni a lliwiau Llŷn. -Gweinir trwy'r genau unwaith y dydd. -Mae rhan o'r etholaeth o fewn y sir Ynysoedd Erch a Shetland. -Ti 'di pacio dy betha? -Yma, mae sgwario canlyniad y rhagflaenydd drwy adio nifer odrif o bwyntiau. -Ti heb sgwennu digon yn y traethawd yma. -Wrth i Now feddwl am rywbeth, mae'n digwydd go iawn. -Er gwaethaf hyn, mae datblygiadau modern y system yn dileu'r tybiaethau hyn. -Gwelwn gapel Methodist bychan yn ymnythu rhwng torlan ac afonig. -Oh waw, digwydd gyrru drwy Aberystwyth a gweld rhain. -Oherwydd hyn, ystyrir y canolrif yn wirioneddol bwysig i'r ystadegwr go iawn. -Prynodd dŷ tafarn yn Llundain. -Wedi hynny astudiodd Hanes ym Mhrifysgol Glasgow. -Mae tua hanner cilometr i'r de o Foel y Waun. -Ceir eglwys Santes Fair yn y pentref. -Anfonodd y Met ef i'r Eidal yr haf hwnnw gyda grant astudio. -Mae ei llyfrau'n llawn dychan, a gelwir yr arddull yn realaeth ledrithiol. -Wedi gorffen gwylio trydydd cyfres y ddrama Israelaidd wych. -Gwyddfid ydy prif fwyd y siani flewog. -Cyfrol o erthyglau ar Daniel Owen wedi'i golygu gan Urien Williams. -Dw i'n deall eich pwynt ac mae'n un da. -Mae'n anodd dweud pa bryd y daeth y ffonograff yn fenter fasnachol lwyddiannus. -Disgwylir i ymgynghoriad gael ei lansio yng Ngorffennaf i drafod y cynlluniau. -Ond nid yw bywyd yn fêl i gyd yno ychwaith. -Mynd i Toulouse dydd Iau am wino, piwo a ffwti. -Addysgwyd Williams yng Ngholeg Llanymddyfri a Choleg y Trwyn Pres, Rhydychen. -Mae'r cregyn yn help i adeiladu tir newydd. -Fyswn i'n cael camembert i ddechra a wedyn tarten nionyn fatha prif gwrs. -Dwi'n gorfod rhoi mwy o fanylion amdan y pethau dwi'n gwerthu -Mae 'na olwg wyllt yn 'i llgada fo. -Mae cyfyngiadau crefyddol ei magwraeth yn chwarae rhan allweddol yn rhai o'i gwaith. -Datblygwyd radar yn gyfrinachol gan sawl gwlad ychydig cyn yr Ail Ryfel Byd. -Ehangodd y brodyr y banc o dan yr enw David Jones a'i Gwmni. -Pryd fydd y siop fara yn agor yn y bore? -Fe welson ni haid o wyddau yn hedfan heibio. -Rydyn ni angen prynu bocsys newydd ar gyfer storio pethau. -Does dim mwy o le ar ôl yn yr atig. -Llongyfarchiadau i'r Ffindir am guro Ffrainc mewn gêm gyfeillgar. -Roedd hi'n wyntog iawn ar y pier, ond roedd yr olygfa yn hardd. -Mae'r lluniau ysgol newydd yn barod. -Bydda i yma eto yr un amser bore fory. -Wnaiff pawb yn y gynulleidfa ddiffodd eu meic os gwelwch yn dda. -Peidiwch anghofio rhoi dŵr i'r planhigion. -Roedd y traeth yn wag, ond roedd ambell i forlo yn y môr. -Rhaid i mi fynd i gadw'r car yn y garej gyntaf. -Rwy'n hoffi corau cerdd dant. -Mae'r plant yn hoffi'r llwybr beics yn Llanberis. -Mae hen oleuadau'r goeden wedi torri. -Mae'r tonnau yn uchel iawn yn torri dros y morglawdd heno. -Mae'n drueni mawr na chawsom ni gwrdd yn y Steddfod eleni. -Os cymysgwch chi las a melyn fe gewch chi wyrdd. -Doedd hi ddim yn blentyn oedd wedi cael ei dysgu i ofyn caniatâd. -Parhaodd hyn nes i'r system deligraff gyrraedd. -Hanes bachgendod cefn gwlad yw asgwrn cefn y nofel hon. -Roedd Martha a'i mam wedi gwnïo clytiau ar ddillad oedd wedi'u rhwygo. -Y differiad yw'r ffwythiant hwn. -Yr oedd yr amser yn hir i aros am ryddhad fy mrawd. -Maddeuwch i mi. -Roedd rhaid i fi 'i brynu fo. -Mae'r amgylchedd a chadwraeth yn themâu pwysig. -Mae hyn ar ôl iddo ddefnyddio technoleg arbennig i astudio'r gwaith -Nathon ni gyrraedd yr y stesion yn hwyr ac roedd y trên 'di mynd. -Ystyriai ei hun radd yn uwch na gweithwyr, ffermwyr a labrwyr cyffredin yr ardal. -Dw i wedi 'nghalonogi yn darllen am yr ymgeiswyr. -Gofynna i Wicipedia Cymraeg pwy yw Alffa? -Roedd Martha yn amlwg heb ddeall ei bod hi'n bod yn ddigywilydd. -Detholiad hyfryd o rai o sonedau ac ysgrifau un o gewri llenyddiaeth Cymru. -Mae'n enedigol o dref Rhuthun, Sir Ddinbych. -Dyma ni, amser cerdded ar y llwyfan -Mae'r car angen 'i olchi. -Toriad drwy chwarren laeth. -Roedd e'n gwmni da, hoffus. -Edrychai drwy ei ffenest ar y glesni yn y pellter. -Bwyd y siani flewog ydy amrywiaeth o goed collddail a llysiau. -Mae'r wobr wedi dyblu i drideg miliwn o ddoleri ers y twrnamaint diwethaf. -Dydi hi ddim yn gwybod lle mae gartre. -Mae Dilys Ddwl wedi diflannu. -Ifor ap Glyn oedd cynhyrchydd gweithredol y ffilm. -Byddai wrthi yn hwyr ac yn fore. -Prif fwyd y siani flewog ydy coed derw. -Planhigyn lluosflwydd, unionsyth, blewog ydy blodyn menyn neu flodyn ymenyn. -Gyda'i bod hi yno, mi glywn rhyw ebychiad o syndod. -Bydd hi'n Ddydd Gŵyl Dewi fory. -Cerddon nhw am filltiroedd cyn cyrraedd y traeth. -Mae diweddglo'r nofel yn rhagweld ffurfio undeb Geltaidd, Gatholig Rufeinig. -Drwy'r ugeinfed ganrif cynyddwyd y nifer yng ngwledydd Prydain. -Ar ddiwedd pob llinell mae'r brifodl. -Gall hyd yn oed merch fach annymunol fod yn unig. -Y gyntaf mewn trioleg o nofelau gan Wiliam Owen Roberts. -Bu'n aelod o Academi Gwyddorau a Chelfyddydau Croasia am rai blynyddoedd. -Mae e'n teimlo'n well erbyn hyn. -Yn y Pwyllgor Sir un tro buom yn trafod enwau llefydd. -Roedd cyflwr y ffyrdd yn gwaethygu'n raddol. -Bydd rhaid siarad am hyn mewn mwy o fanylder dwi'n meddwl. -Sut mae olew craidd yn cael ei ffurfio? -Yr oedd un dyn ar ben y simnai. -Fel ei dad, roedd ganddo ddiddordeb mawr mewn hynafiaethau, archaeoleg a herodraeth. -Gwasanaethodd fel Ysgrifennydd a Llywydd Undeb yr Annibynwyr Cymreig. -Roedd pob math o sbwriel yn y ffos. -Cymru yw hi wedi ennill ymreolaeth ac wedi colli ei chrefydd Brotestannaidd. -Sbïa yn y drôr 'na am 'y mhres i. -Felly o dan y polisi ni chaiff y cadeirydd fod yn ymchwilydd -Mae gan y maes awyr dair lolfa. -Daeth y ddrama ar y teledu i ben. -Dyna fo, mae gen ti gystadleuaeth. -Pentre bychan ym Maldwyn ydy Tal-y-bont. -Lle unig a thywyll. -Weithiau roedden nhw'n dirluniau tywyll, dieithr. -Mae'n ysbyty Gwasanaeth Iechyd Gwladol o dan reolaeth Bwrdd Iechyd Prifysgol Betsi Cadwaladr. -Ond mae bodau amlgellog yn defnyddio systemau llawer iawn mwy cymhleth. -Roedd cant o stafelloedd dirgelaidd dan glo. -Beth ar y ddaear ydech chi wedi wneud, deudwch? -Gyda i ni gyrraedd glan y môr, disgynnodd y niwl gwyn trwchus. -Ond roedd rhywbeth llawer gwaeth na gweld cysgod dieithr ar fin digwydd. -Roedd ciw hir am y tŷ bach. -Mae ei gwaith yn archwilio themâu twf a chreu. -Yn Denmarc mae'n nodedig am ei chyfrol Saith Chwedl Gothig. -Cafodd ei magu yn Llundain, Rhydychen, Seland Newydd a Fiji. -Pa fath o le oedd e, a sut ddyn fyddai e? -Erbyn iddo symud i Flaenau Gwent bu galw rheolaidd arno i feirniadu traethodau eisteddfodol. -Mae symud i lawr yr un peth â symud i fyny pellter negatif. -Yr oeddem yn ystyried cryfderau a diddordebau pawb -Mae'r nyrs yn galw enwau allan mewn llais uchel. -Mae yna le i fathemateg ar y cwricwlwm am resymau amlwg -Dy ddwy geiniog di oedden nhw go wir. -Ni wrthodaf ddyrchafiad. -Mae ganddo flodau glas sy'n blodeuo yn yr haf hwyr a'r hydref. -Mae'n cysgu drwy'r gaeaf ac yn creu chwiler yn y gwanwyn. -Awdur Cymreig yw Caren Wyn Jones. -Roedden nhw wedi llwytho gormod o wair ar y trelyr. -Rydym wrthi yn ffilmio ein cyfres cyngor i blant -Cerddodd yn araf ar hyd y galeri a syllu ar y wynebau. -Rhisgl y dderwen a'r fedwen ydy prif fwyd yr oedolyn. -O'nd ydi popeth yn braf? -Dymunaf gyflwyno fy nghais i leihau fy nyddiau. -Pwy 'di 'i chariad newydd hi? -Fasat ti wir yn gwneud hynny Mary? -Awn gyda Tesni i weld ei modryb yn perfformio mewn bale. -Maen nhw wrthi'n adeiladu pont newydd. -Cliciwch ar y botwm 'Home' i ddychwelyd i'r dudalen gartref. -Dwi'n falch iawn clywed fod gennych ddiddordeb mewn ymuno -Gwadodd y cyhuddiad yn gryf ar y dechrau. -Mae pethau yn mynd o chwith. -Mae dros hanner wedi'u cyfri yn barod. -Ceir craig enfawr ar y copa. -Ymosododd Caradog arno a'i ddinistrio, ac yna anrheithio'r ardal. -Ychwanegwch yr wyau a'r blawd. -Roedd un lle roedd hi'n mynd iddo yn amlach nag unrhyw un arall. -Ceir golygfa o fynydd y Breiddin i'r gogledd-ddwyrain o'r pentref. -Mae clychau'n canu ac yn tarfu ar y stori. -Caiff polenta ei fwyta yn aml yng Ngogledd yr Eidal. -Wn i ddim pwy oedd The Bishop of Bath and Wells bryd hynny. -Dangosed ef yn gall pe newidiai ei iaith, ei grefydd, a'i Dduw hefyd. -Stori ysbryd lawn arswyd yn y gyfres Ysbrydion ac Ati. -Dyfais mewnbwn ar gyfer y cyfrifiadur yw'r bysellfwrdd. -Dos i fewn o fy mlaen. -Defnyddia'r raca i lefelu'r pridd. -Diolch i Osian am ei gais. -Llyfryn dwyieithog yn cynnwys lluniau lliwgar a ffeithiau diddorol am fynydd uchaf Cymru. -Doedd o ddim wedi medru dal llawer o bysgod wythnos diwethaf. -Pen y morthwyl yw'r adran fawr sy'n cysylltu â'r eingion. -Mae pobl yn gallu plannu coed mewn anialwch tywodlyd. -Gall y prinder anadl gadw'r claf yn effro yn y nos. -Arweiniodd hyn at yr hyn a wyddom ni heddiw am Eneteg. -Y mae yn amlwg nad ellir bardd ohono. -I nodi canmlwyddiant ei eni dechreuwyd casgliad cenedlaethol i roi cofadail ar ei fedd. -Ceir effaith arwyddocaol ar feddwl y darllenydd o ganlyniad i hyn -Gwasanaethodd fel ysgrifennydd mygedol i Gymdeithas y Gyfraith a'r Gymdeithas Addysg Gyfreithiol. -Dilyniant o straeon byrion yn ymwneud ag atgofion Mari, y prif gymeriad. -Digwydd bod wedi ffeindio fy hun yn sgwennu am gynadleddau. -O wastadedd hen Faelor, troesom i'r de. -Yr oedd y pellter tua milltir, a chynt nid oedd ond ffordd wledig, gul. -Gall pobl wylio'n fyw ar Facebook. -Bu hefyd yn chwarae i dîm cenedlaethol Cymru. -Maent yn cael eu cysylltu gan aelodau blaen ac ôl. -Torrwch y moron a seleri yn fân cyn eu ffrio. -Nath hi ddympio'i chariad wythnos dwytha. -Yr oedd golwg iach ar ei dalcen. -Cymuned a phentref ym Mro Morgannwg ydy'r Bont-faen a Llanfleiddan. -Mae'r gerddorfa yn elusen gofrestredig o dan gyfraith Lloegr. -Mewn lock-down, wrth gwrs. -Diolch am dy hyder ynof. -Ystyr y gair rhiain ydy merch. -Y mae nwyf a melyster ieuenctid yn ei chân, a mawredd tragwyddoldeb hefyd. -Roedd hi wedi meddwl ei bod hi'n dlws iawn. -Roeddent yn canu yn fwy calonnog o lawer nag y buont. -Mae e'n gweithio yn Aberystwyth. -Hon oedd eu buddugoliaeth ddiwethaf hyd yn hyn. -Ar drai gellir cerdded yn droedsych i ambell un ohonynt. -Anelir yma at gynnig atebion syml, clir ac uniongyrchol. -Cafodd ei addysgu yn ysgol ramadeg Pontnewydd ar Wysg. -Beth yw'r gwahaniaeth? -Mae Sara'n casáu ei llysfrawd newydd, Mat, sy'n Goth. -Pwy a ŵyr na chei di a dy deulu olau newydd. -Dyna oedd ei awgrym heddiw. -Mae'n cymryd rhan yn annibynnol mewn gweithgareddau chwarae ar y cyd -Y mae arnaf ddiolch mawr i chi, f'arglwydd, am y wybodaeth gywir. -Cyfieithiad William Morgan a Richard Parry yw Llyfr Ruth. -Ydych chi wedi dal llawer o bysgod heddiw? -Wi wedi bod yn pobi tomatos yn y ffwrn gydag olew a halen. -Wedi bod trwy fy Facebook yn ddiweddar yn dileu hen sgyrsiau. -Dim ond dwy awr sydd ar ôl gyda ni. -Mi oedd y siop yn gwerthu paent a papur wal. -Fe gododd ei ben ac edrych arni gyda chywreinrwydd ar ei wyneb. -Oes rheswm pam na allwch chi wneud ymdrech i barchu'r Gymraeg? -Rwy'n credu ei fod wedi gollwng. -Nid yw hyn yn newid y gwerth a gynrychiolir gan y degol. -Wi wedi bod yn edrych lot ar Youtube. -Gweiriau ydy prif fwyd y siani flewog ac mae'n gaeafu fel lindysyn. -Bu hefyd yn aelod o Gynghrair yr Eglwys ar gyfer Etholfraint Merched. -Daeth yn blentyn jyngl a dysgodd dechnegau goroesi. -Doedd fy lle parcio arferol ddim ar gael yn Lerpwl heddiw. -Mae'n cysgu'r gaeaf fel chwiler. -Gellir eu defnyddio mewn stoc neu saws tomato. -Mae'r ciwb hefyd yn giwboid hafalochrog ac yn rhombohedron de. -Cododd Llywelyn a'r Cymry lleol mewn gwrthryfel ym Mlaenau Morgannwg. -Roedd y teulu'n fasnachwyr adnabyddus. -Anturiaethau Sam Tân mewn print. -Stori wedi'i seilio ar gyfres Tomos y Tanc. -Ydych chi wedi cofrestru? -Mae Twm a Jac yn cael gwyliau sgïo bendigedig. -Dwi isio copi â llofnod a sws mewn lipstig. -Mae hwnna'n ddarn o hanes nad o'n i'n gwybod amdano. -Dw i wedi gorfod adeiladu fersiwn fy hun. -Stori ddoniol i blant am deulu o ysbrydion direidus. -Y lluosog yw radiysau. -Ar farwolaeth ei dad, etifeddodd ystâd a buddiannau diwydiannol a masnachol sylweddol. -Dw i 'di edrych mewn i hyn. -Sori ga'i jyst deud 'wbath yn sydyn. -Wedi ei marwolaeth fe'i gwnaed yn santes. -Mae nhw angen arweinyddiaeth sydd â chyfeiriad a blaenoriaethau amlwg. -Dyna beth oedd mam yn dweud. -Mae'n cael ei hystyried yn un o'r prif ddeallusion ôl-trefedigaethol. -Casgliad newydd toreithiog a gwallgof. -Mae mam Lisa newydd farw, a'i thad yn wyddonydd dwl. -Ymunodd Paul Powell gyda nhw ar y banjo a'r llais. -Fel arfer, ysgrifennir y rhain fel pâr trefnedig. -Ond yr egwyddor sy'n bwysig. -Mae'n wyfyn prin iawn. -Cymraeg-Lladin-Saesneg, Lladin-Saesneg-Cymraeg a Saesneg-Lladin-Cymraeg. -Ni bu erioed wrthryfelwr mwy aflwyddiannus na thi. -Tafla'r syniad am ymlywodraeth i blith y pethau Utopaidd. -Mae'r mesur yn cynnwys un brifodl drwyddo. -Mae sgil-effeithiau yn anghyffredin. -Heddiw oedd y tro cynta' i mi fod i Gastell Dinbych. -Yno ysgrifennodd ei cherddi cyntaf a breuddwydiodd am ddod yn fardd. -Mae ei cherddi'n hynod bersonol a chyffrous. -Mae ei lygad yn wastadol ar y sach wlân yn Nhŷ'r Arglwyddi. -Mae'r testun wedi'i olygu. -Ydy o'n gulfarn? -Wrth gwrs fe ddywedaf hynny wrtho. -Casgliad o gerddi gan un o brif lenorion Cymru. -Gofod topolegol yw'r gromlin, sy'n homomorffig, yn lleol, i linell. -Agora'r ffenestri yn y stafell wely, mae'n rhy dwym yna. -Mae Draig a Gwich yn deffro yn y fforest dan orchudd o eira. -Prif fwyd y siani flewog ydy derwen, bedwen a choed helyg. -Rhowch fwy o halen a phupur fel y mynnwch. -Dw i'n licio dipio bisgedi yn 'y nhe. -Methiant fu eu hymdrech. -Mae'r pentref oddeutu tair milltir i'r gogledd-ddwyrain o Ruthun. -Derbyniodd Urdd y Faner Goch dros Lafur ddwywaith. -Faint yw'r cyfanswm sy'n aros i astudio yng Nghymru? -Mae hefyd yn aml yn dechrau ar ôl dioddef pwl o gastro-enteritis. -Roedd ganddi naw brawd a chwaer a chafodd ei haddysgu gartref. -Dw i'n dechrau teimlo dros Dave druan. -Gelwir canlyniad tynnu yn wahaniaeth. -Rhaid cofio bod eraill yn gwneud rhywbeth tebyg a llawer mwy cyson na fi. -Fe ŵyr y darllenydd hyn bellach. -Gwnewch â mi fel y gweloch yn orau. -Dechreuodd ei yrfa mewn gwaith cemegolion yng Nglyn Ebwy, cyn symud i Lundain. -Ysbrydolodd y profiad hwn hi fel awdur. -Nofel sy'n cyfuno stori, dychan craff ac adloniant pur. -Ia ma' hynny'n gwneud sens. -Mi oedd y cerrig yn llithrig. -Unig fwyd y siani flewog ydy'r fedwen. -Mi oedd y cyfarfod cyhoeddus yn llawn dop. -Dilynwyd ef gan ei ddyweddi ym mis Rhagfyr. -Y dderwen a'r fedwen ydy prif fwyd y siani flewog. -Dyma restr o Aelodau Seneddol Plaid Genedlaethol yr Alban. -Mi oedd y tractor yn swnllyd. -Mae'r te 'di mynd yn oer. -Mae'r Pwyllgor hwn yn amrywio o flwyddyn i flwyddyn. -Tybed faint o waith golygu sydd wedi ei wneud yn y misoedd ers hynny? -Cofio lle oddan ni'n arfar yfad fel llancs ifanc? -Saith darn o gerddoriaeth gan John Hywel yn seiliedig ar Suo Gân. -Amgylchir y gymuned gan nifer o goedwigoedd. -Un mewn cyfres o lyfrau sy'n dilyn anturiaethau criw o blant. -Nofel ar gyfer yr arddegau am anturiaethau gwaedlyd Nic yng nghanolbarth America. -A dyma fi heddiw yn eu gweld ymhlith coed eraill ar brom Llandudno. -Storïau ar ffurf cartwnau lliwgar yw Cyfres Cyffro. -Weithiau mae'n rhaid gwahaniaethu rhwng segmentau o linell caeedig ac agored. -Mae rhai'n credu eu bod yn dda at asma. -Cyd-ddigwyddiad yw hyn yn ôl Ben. -Casgliad o ganeuon gwerin Cymraeg gan Arfon Gwilym yw Caneuon Traddodiadol y Cymry. -Wedi methiant yr ymgyrch i greu trydedd blaid ymunodd â'r Torïaid. -Ti'n gwybod am unrhyw un ym Marcelona sy'n rhoi gwersi Cymraeg? -Cuddiodd y swyddog y llyfr yn y ddesg. -Mi gafodd o gyfle i fynd ar gynllun hyfforddi ar gyfer newyddiadurwyr. -Nofel hanesyddol anturus i'r arddegau, wedi ei gosod yn y ddeuddegfed ganrif. -Ganwyd ef ym Madrid a'i fagu yng Nghatalwnia. -Byddai'n braf petaech chi'n gwneud mwy o ymdrech. -Ma'r gwynt wedi bwrw pethe drosodd tu fas. -Daw'r wybodaeth yma o lyfryn i ymwelwyr. -Ei wrthwyneb yw amgrwm. -Yr enw arferol ar y beirdd darogan yw daroganwyr neu frudwyr. -Mae yma nyddu delweddau, cerddoriaeth a stori wir. -Mae dau ohonynt yn geidwaid nid anenwog ar fy helwriaeth. -Roeddwn i eisiau i bethau fod fel ro'n nhw cyn i Dad adael. -Dyluniad hyfryd gan Kappa. -Addas i ddarllenwyr yn eu harddegau. -Yna gweithiodd ar raglenni plant am ddwy flynedd ac ysgrifennodd ar benwythnosau. -Ar un cyfnod, bu'n garchar. -Mae 'na lwynog yn y goedwig. -Cyfrol am adferiad yr Hebraeg gan John Emyr yw Sut I. -Cen carreg ydy prif fwyd y siani flewog, fel yr awgryma'r enw. -Hwy ydyw un o'r ddwy genedl fwyaf uniaith yn Ewrop. -Cafodd ei enw oherwydd y lliw oren ar flaen adain yr oedolyn gwrywaidd. -Darluniau lliw llawn a du-a-gwyn godidog. -Yn ddiweddarach, ymrwymodd i'r hyn a alwodd yn drosedd berffaith. -Peiriant sy'n trawsnewid egni trydanol yn egni symudol yw'r modur trydan. -Roedd Gwen yn ferch i'r Brenin Brychan, o Deyrnas Brycheiniog. -Ffurf ar seliwlos wedi'i addasu yw asetad seliwlos. -Ah, reit, wedi camddarllen! -Ar wahân i hynny, doedd dim ffordd i fewn beth bynnag. -Mwy o syniadau dwl y bachgen bach direidus. -Cemegydd organig a ffeindiodd radicalau rhydd mewn toddiant. -Ceir sawl math o halwyn. -Roedd mor agos at yr ardd ac eto'n methu mynd mewn. -Ar fath arall, drwy glicio ar y gair, gall lwytho fideo neu raglen. -Mi oedd dau ddeg chwech o blaid a dau ddeg chwech yn erbyn. -Defnyddiwyd yr olion fel chwarel i'r trigolion cyfagos. -Cafodd yr albwm ei ardystio'n aml blatinwm ledled y byd. -Rho'r teisenni ar y bwrdd. -Fflachiadau o olygfeydd dwi'n eu cofio, nid ffilmiau cyfan. -Dyma un o'r rhannau mwyaf unigryw a gwahanol. -Nid oes gan y fenyw adenydd. -Cerddoriaeth a gomisiynwyd ar ran Côr Ieuenctid Cenedlaethol Cymru. -Oes ap tywydd ar gael yn Gymraeg? -Mae'r chwarennau parathyroid yn gwneud hyn trwy secretu'r hormon parathyroid. -Mae'n arian-gwyn o ran lliw. -Diolch yn fawr iawn, Tom. -Cafodd hefyd lwyddiant gyda dramâu radio. -Yn yr ysgol, roedd yn adnabyddus am ei chyflymder a'i gallu i sbrintio. -Saif o fewn esgobaeth Llanelwy. -Bu'n aelod o Gartref y Swedeg a Chymdeithas Cyhoeddwyr Sweden. -Dyma restr o ddinasoedd a phrif drefi Armenia yn ôl eu poblogaeth. -Coginio Groegaidd ac Eidalaidd sy'n defnyddio'r perlysieuyn hwn fwyaf. -Byddwn yn trafod tai, gofal cymdeithasol, ysgolion y blaenoriaethau. -Mae'r iaith yn goeth, mae angen canolbwyntio weithiau ond mae'n wych. -Darluniau du-a-gwyn doniol. -Ma' batri fy ffôn i yn fflat. -Ti'n meddwl bo fi'n becso am gwestiwn mor dwp? -Ceir un genhedlaeth pob blwyddyn, fel rheol. -Piti wnaeth e ddim para, o leiaf roedd pobl yn canu yn eu mamiaith. -Dysgodd ei thad Ladin a Groeg i Margaret a'i brodyr. -Priododd Lleucu ferch Ieuan ap Siencyn Llwyd a bu iddynt o leiaf un mab. -Ei ddiddordebau yw coginio a darllen. -Dywed traddodiad ei bod yn perthyn i'r Brenin Arthur. -Arferai sefyll yn Sir Feirionnydd cyn newid y ffiniau. -Nid oes gofod i sôn am Mistar Herbert Roberts. -Poblogeiddiodd y byd botaneg ar raglenni radio am rai blynyddoedd. -Teithlyfr gan Geraint Thomas yw Cyfrinachau Llynnoedd Eryri. -Teimlo fel twtsh bach o'r annwyd cyffredin. -Mae ei gwaith yn cael ei ddisgrifio fel brand unigryw o swrealaeth. -Meddwl buasai llysiau a ffrwythau yn ddiogel. -Cymered yr hanesyn hwn fel cynllun. -Mae'n aelod o Blaid Weriniaethol. -Mae hwn yn gymorth da iawn. -Mab Ieuan a ddechreuodd ddefnyddio'r enw Mostyn fel cyfenw'r teulu. -Trigodd mewn ogof syml ychydig yn uwch na phentref Llangrannog heddiw. -Ystyrir mai hon yw'r eglwys leiaf yn Nyffryn Clwyd. -Mae Bedwyr a Dwynwen yn edrych ymlaen at gael mynd i sglefrio. -Roedd hi'n dda gweld cyfweliad Cymraeg gydag Angela. -Un genhedlaeth sydd bob blwyddyn. -Am fy mod yn Ymreolwr cywir a chyson, yr wyf yn parhau i lefain. -Mae hi 'di bod mor boeth yn ddiweddar. -Dwi'n cymryd mai eilbeth fuodd o erioed. -Ond nid dyma'r tro cyntaf iddynt ddod ynghyd i wrthwynebu'r drefn. -Dw i'n mynd am wâc ddyddiol. -O'r diwedd mae rhywun ar y cyfryngau yn siarad yn blaen -Prif fwyd y lindys ydy helyg a phoplys. -Mae pob elfen sydd yn y cyfnod hwn yn ymbelydrol. -Bu yma harbwr ers yr Oesoedd Canol. -Falle hynny'n rhy uchelgeisiol i ddechrau? -Chi yw'r dyn gorau yn y byd. -Roedd lafa yn gorchuddio rhan eang o Gymru ac Ardal y Llynnoedd. -Injan neu beiriant sy'n llosgi tanwydd oddi fewn iddo ydy peiriant tanio mewnol. -Wedi canu Calon Lân heno. -Mae'n edrych yn dda. -Ddown nhw draw yn y funud i gael paned o de. -Ceir y Duw Arddu, hefyd, sef Duw'r Gaeaf. -Pam nad oedd gennym senedd Gymreig? -Ystyr parhaol yma yw am oes y cerflun neu'r gwaith. -Fin nos roedden nhw i gyd wedi eistedd o gwmpas y tân. -Mae'r pennawd yn gamarweiniol ac yn anghywir. -Mae anwybodaeth barnwyr o'r iaith Gymraeg yn ennyn parchedigaeth yn enaid pob Cymro. -Rhoddodd rhywun reid imi yn ei gert a ddaru mi fwynhau fy hun. -Eto ni byddai'n foneddigaidd i Gymro eu galw hwynt yn rhagfarnllyd. -Casgliad o ddeugain o ganeuon heddwch gan Lleucu Roberts yw Caneuon Heddwch. -Dyma gasgliad hyfryd o gerddi mewn amrywiaeth o wahanol fesurau a chyweiriau. -Does dim cofnod o unrhyw weithgaredd yn y Senedd gan Hugh Lewis Owen. -Mae'r etholiad diwethaf wedi dangos eu bod i gyd yn unfarn. -Wnes i ei fwynhau, er mod i prin yn darllen nofelau. -Mewn geometreg elfennol, ochr yw polygon ar ffin polyhedron. -Cafodd gorfodogion y ddeddf hyfforddi eu hamsugno i'r fyddin. -Mae ganddo dri chopa arall. -Llyfr ac astudiaeth lenyddol, Gymraeg gan Alan Llwyd yw Crefft y Gynghanedd. -Enillodd y nofel hon Fedal Ryddiaith Eisteddfod yr Urdd. -Bydde'n dda cael dewis o raglenni Cymraeg ar bnawn Sadwrn. -Bu'n aelod o Academi Ewropeaidd Celf a Gwyddoniaeth am rai blynyddoedd. -Mae Dave yn ôl! -Bu hefyd yn cyfrannu nifer o erthyglau ar gyfer cyhoeddiadau cyfreithiol. -Os 'da chi'n adio gwynnwy i'r coctêl bydd ewyn da arno. -Gwelir y llythyren hon yn sillafiad Ffrengig ei enw ef ei hun. -Yn ystod hinsawdd sych y cyfnod ffurfiwyd y Tywodfaen Coch Newydd. -Cafodd ei diswyddo o'r Weinyddiaeth Crefydd ac Addysg yn yr un flwyddyn. -Pan nad yw'n hydoddi, gall yr asid hwn grisialu gan greu cerrig. -Lluosog y gair dynes yw merched neu wragedd. -Roedd gan Evans diddordeb mawr yn hanes Methodistiaeth Galfinaidd. -Crwydrai'r ci i fyny ac i lawr glannau'r llyn, ddydd a nos. -Casgliad o astudiaeth lenyddol, Gymraeg gan Owen Thomas yw Llenyddiaeth Mewn Theori. -Credir fod ymlyniad cenedl wrth ei hiaith yn ddim angen na rhagfarn. -Bedair blynedd yn ddiweddarach derbyniodd ei gradd Doethuriaeth mewn Llawfeddygaeth Ddeintyddol. -Cymysga'r menyn a'r siwgr cyn ti adio'r wy a'r blawd. -Mae'n llai cyffredin yn Asia ac Affrica. -Mae o'n cael uwd i frecwast. -Treuliodd y diwrnod yn garddio. -Mewn gwirionedd, dwy blaid wleidyddol sydd yno. -Oedran a dinasyddiaeth, fel arfer, yw'r prif feini prawf cymhwysedd. -Roedden nhw eisiau gwybod popeth am y bobl frodorol yn India. -Ei diriogaethau pennaf yw Seland Newydd ac Awstralia. -Fe'i defnyddir fel man cychwyn ar gyfer rhesymu a dadleuon mathemategol pellach. -Roedd y teulu yn perthyn i enwad y Crynwyr. -Mae Cymru mewn trafferthion. -Ond mae'n seiliedig ar adwaith go iawn i fygythiad gwirioneddol. -Ym Mecsico, gweithiodd fel cyfieithydd yn swyddfa'r llywodraeth ac fel newyddiadurwr masnach. -Roedd perthynas y ddau yn fwy o gyd-fyw na phriodas. -Disgwylid amcangyfrif gwell, yma, na'r amcangyfrif un-cam. -Wi'n hoffi gwrando ar hen fiwsig. -Byddai absenoldeb yr esgyrnynnau clywedol yn golygu colli clyw cymedrol neu ddifrifol. -Dyma'r broses ble mae celloedd yr epil yn derbyn nodweddion ei rieni. -Dyma'r gwaith papur i ti. -Mae gan y fodrwy, fel arfer, elfen unfathiant, ond nid gan bob awdur. -Mae'r plant yn cyrraedd lefel dda yn barod. -Athon ni am ddêt noson o'r blaen. -Yng ngwledydd Prydain mae'n bryfyn eithaf prin. -Mae prinder anadl fel arfer yn gwaethygu gydag ymarfer corff ac wrth orwedd. -Yn enw rheswm, pa beth sy decach? -Gweiriau amrywiol yw prif fwyd y siani flewog. -Ewch chi'ch dwy i ista'n fan 'na. -Ar adegau mae'n cydredeg o fewn ychydig fetrau i Glawdd Offa. -Cymuned a phentref ym Mhen-y-bont ar Ogwr ydy Y Castellnewydd. -Mi oedd hynny yn wastraff amser. -Awduron Cymreig yw Bob Morris, Bob Gruff Jones a Bleddyn Owen Huws. -Tybed a fydd gan un ohonynt y priodoleddau sydd eu hangen? -Mae cymuned wedi bod yno ers y cyfnod Rhufeinig. -Mynychodd ysgol ferched Almaeneg breifat. -Mae epilepsi yn dod yn fwy cyffredin wrth i bobl heneiddio. -Siâp hirgrwn sydd i'r dail, a'r rheiny yn wyrdd tywyll. -Mae hi'n werth cofio rhybudd arbenigwr am yr effaith bosib. -Sefydlwyd y cylch yn gynharach 'leni. -Sucan gwyn yw enw arall arno. -Mae'r swyddfa'n oer er 'i bod hi'n boeth tu allan. -Mae'n trefnu teithiau cerdded ar gyfer ei haelodau. -Casgliad o ddwsin o geinciau telyn newydd gan ddeg o gyfansoddwyr cyfoes. -Oes rhywun yn gwybod am unrhyw erthygl neu drafodaeth am drychinebiaeth? -Bacteriolegydd o Dywyn, Meirionnydd oedd Griffith Evans. -Stori ysbrydion hwyliog, llawn dychymyg ar gyfer plant. -Yfory yw Diwnrod Neges Ewyllys Da yr Urdd. -Mae ganddynt ddau o blant, mab a merch. -Tua diwedd Mehefin hyd at fis Medi mae'r oedolyn yn hedfan. -Dw i'n caru Cymru. -Mae bomiau'n disgyn a chriwiau awyrennau'n mynd ar gyrchoedd awyr bob dydd. -Yn gyffredinol, fodd bynnag, nid yw'n gyflwr difrifol. -Be sydd o'i le? -Cadwodd yr heddlu eu llygad arni am rai blynyddoedd. -Yn aml, defnyddir botiau i gywiro'r gwaith gyda sgriptiau a chod pwrpasol. -Doeddach chdi ddim yn licio'r lle bwyd Mecsicanaidd? -Yn union, dwed di. -Elisabeth oedd y ferch gyntaf i dderbyn gradd mewn meddygaeth yn America. -Ledled y byd amcangyfrifir fod anorecsia'n effeithio ar oddeutu dwy filiwn o bobl. -Mae negeseuon mewn dros ugain o ieithoedd. -Nid yw hi'n iawn i mi dalu rhent am ddarn o'm etifeddiaeth. -Roedd gyda Joseph Smith, sefydlydd Mudiad Saint y Dyddiau Diwethaf pan lofruddiwyd ef. -Oes rhywun yn dweud y drefn wrthoch chi yn yr ysgol weithiau? -Yn fuan wedyn, dechreuodd deithio. -Caiff y sepalau eu diosg wrth i'r petalau agor. -Mae o 'di mynd i chwarae rygbi heno. -Gwasanaethodd fel Chwip y Blaid Ryddfrydol yn y ddau dŷ. -Ond mae'n derbyn neges destun sy'n bygwth ei bywyd. -Menna Elfyn yw'r awdur o Gymru. -Mae Tomos yn mynd ar ei wyliau i fferm Ewythr Sam. -Arni y mae'r enghraifft gynharaf sydd ar gael o Gymraeg. -Cysyllta os am sgwrs. -Daeth i ben oherwydd y sgandal hacio ffonau. -Oes problemau gyda'r ap ar lechen Samsung Galaxy Tab? -Mae Mistar Tedi'n methu cysgu. -Defnyddiodd ei ymchwil i olau o'r math hwn i greu meddygaeth newydd. -Teithlyfr gan Eirwyn George yw Meini Nadd a Mynyddoedd. -Mae ganddyn nhw eliffantod a theigrod a chamelod. -Mae'r cysyniad o blân cymhlyg yn caniatáu dehongliad geometrig o rifau cymhlyg. -Ailymgynnull ar gyfer diwrnod olaf yr achos yfory. -Fe ddychwelodd am y goriad. -Dim ond y Llywodraeth sy'n ceisio rhoi sbin positif ar y peth. -Fe ddringodd e lan y graig. -Hi yw'r ieuengaf o bedwar o blant. -Cynhwysir portreadau a cherfluniau o bob unigolyn a drafodir. -Detholiad o gerddi gan y cyn-archdderwydd Dic Jones. -Dw i'n meddwl bod coffi'n well mewn cwpan a sosar. -Yn anffurfiol, gelwir unrhyw linell ymylol yn groeslin. -Ymledodd y system, yn ddiweddarach, i Ewrop ganoloesol. -Piti ydi bod y bobl ddylai fod yn gwrando ar hyn ddim yma. -Mae wedi gweithio i gylchgronau Almaeneg eraill ac wedi ysgrifennu nifer o lyfrau. -Calchfaen golau yw gwneuthuriad y waliau, gyda pheth tywodfaen coch yma ac acw. -Mae hwnna'n ffoto gwych. -Comisiynwyd y gwaith gan Gôr Ieuenctid Cenedlaethol Cymru. -Nodwedd arall yw ffeirio tinboeth heb amharu ar y system reoli. -A dylet ti fod â dynes i edrych ar dy ôl di. -Cyfrol ddwyieithog, lliw llawn drwyddi. -Dyma'r brotest fwyaf a welwyd yng Nghatalwnia. -Stopia roi'r stwff 'na ar dy wallt, dw i'n mygu. -Dyma'r teimlad o ofnadwyaeth fod rhywbeth erchyll fel marwolaeth ar ddigwydd. -Un mewn cyfres o lyfrau i blant. -Mae'n asid cryf y gellir ei gymharu gydag asid sylffwrig neu asid nitrig. -Chdi sydd bia'r ci bach? -Wnes i weld y ffilm yna yn y sinema. -Pump o ganeuon o wahanol wledydd yn Ewrop gyda geiriau Cymraeg a Saesneg. -Pan weles i ti tro cynta' roeddet ti'n gwisgo cot goch. -Print bras a darluniau du a gwyn. -Trigai yng nghwmwd Nant Conwy. -Ceir nifer o henebion eraill o Oes yr Efydd gerllaw. -Gelwir yr ochrau cyfagos i'r ongl sgwâr yn goesynnau. -Ond mae'n amlwg na lwyddodd hynny, a'r Cymry oedd yn fuddugol. -Mae'n cynnwys lluniau du a gwyn. -Mae sglerosis y glust yn fwy tebygol mewn pobl ifanc a menywod. -Nofel yn ymwneud a thân a bwrlwm y diwygiad. -Falch iawn ei fod yn cael ei sortio. -Cynheswch y menyn mewn padell drom. -Cynorthwyodd y twyll Owain i ddianc. -Mewn mathemateg, rhif negatif yw rhif real sy'n llai na sero. -Roedd Guto'r Glyn yn hoff iawn o'r mesur hwn. -Yn dilyn llunio'r rhestr, cafwyd cyfarfod i drafod dyfodol y llyfrgell. -Enwyd y ffatri yn Ffatri Dŵr Mwynol Bryniau Cymru. -Dw i wedi sylwi ar hwnna. -Toriad saethol drwy'r pelfis dynol gwrywaidd. -Mi oedd y parti yn smonach llwyr. -Nid anfuddiol fyddai rhoi pwnc dadleuol iddynt i ysgrifennu arno. -Nid hen awel fain, ond un ysgafn braf. -Doeddwn i ddim mor dew bryd hynny ag ydw i rŵan. -Yr wyf fy hun yn barnu y dylai dyn gael rhyddid crefyddol. -Roedd yn lladmerydd dros hawliau merched o fewn Dwyrain yr Almaen. -Hwn yw degfed mynydd uchaf gwledydd Prydain. -Nofel yn sôn am gi bach direidus sy'n mynd ar goll. -Cofnodwyd ei bod yn edrych yn fain ac esgyrnog. -Mae'r darganfyddiadau hyn yn cael eu cadw gan Amgueddfa Cymru. -Mae'r gwynt 'di nocio petha' drosodd tu allan. -Dro arall, defnyddir y gair am odre sgert. -Cafodd ei alw yn gynhyrfwr, yn wrthryfelwr, ac yn fradwr. -Effaith finegr yw'r term poblogaidd ar ddirywiad negyddion ar sylfaen ffilm asetad seliwlos. -Ni wyddai'r ym¬geisydd ei hun ddim amdano, er bod ei enw wrtho. -Oes raid i fi wneud hwn hefyd nawr? -Dyma gipolwg ar rai o Gymry enwog drwy'r canrifoedd. -Ges i gyfarfod pobl ddifyr a dweud y straeon 'da chi isio'u dweud. -Mae'r neges yn newid bywyd Leusa. -Mae cyfrifo ffactorau cysefin, fel arfer, yn cymryd llawer hirach! -Mynychodd ysgol y Cenhedloedd Unedig ac yna Prifysgol Islamaidd Gasa. -Mae'r adenydd yn ymestyn yn llorweddol ar bob achlysur. -Mae'n adnabyddus am y gyfrol A Wnaiff y Gwragedd...? -Ond buasai'n gwneud dim drwg gofyn. -Bu i fab John Lloyd ac un o ferched Trefor briodi ei gilydd. -Fel be, tybed? -Wyth stori o blith goreuon awdures sy'n fyd-enwog ym maes llenyddiaeth plant. -Rhan o gyfres o lyfrau stori antur i blant gyda darluniau lliw. -'So hi'n cytuno gyda defnyddio lledr achos mae hi'n figan. -Llongwr oedd ei dad, prif beiriannydd ar longau masnachol. -Gelwir perimedr cylch neu elips yn gylchedd. -Mae'r adar yn canu tu allan i'r ffenast. -Etifeddodd Cadwallon ap Cadfan deyrnas Gwynedd ar farwolaeth ei dad, Cadfan ap Iago. -Olynwyd ef gan ei fab, y trydydd Barwn. -Sgyrsiau a draddodwyd ar y radio yw mwyafrif yr ysgrifau. -Wnes i fynd â'r ci am dro i'r parc. -Homilïau gyda chyflwyniad gan Ieuan Wyn a cherdd gan Dafydd Glyn Jones. -Mae'r gwryw yn hedfan yn y dydd a'r nos. -Roedd gan Syr William fab anghyfreithlon hefyd, Richard. -Mae'r canlyniad yma yn sefyll yn y categori cyfartaledd ar y tabl normadol -Bydd y cwrs yn cynnwys gwersi ffurfiol yn ogystal ag astudiaethau annibynnol -Edrychwn heddiw ar yr ochr ysgrifenedig theatr mewn addysg -Roedd hi'n canolbwyntio, a llwyddodd i orffen ei llyfr -Dwi hefyd wedi gwirfoddoli i helpu athrawon rownd yr ysgol -Mae rhai busnesau'n dewis bod yn fusnesau cydweithredol -Mae angen iddo ddatblygu'r gallu i ddrafftio a golygu'n effeithiol -Ella buasai'r model yma o ddiddordeb i chi hefyd -Mwynhaodd defnyddio chwyddwydr i astudio'r wahanol batrymau olion bysedd -Defnyddiwyd cynllun dull cymysg gan gynnal astudiaethau meintiol ac ansoddol -Fy argraff gyntaf o'r darlun oedd ei fod ei yn ymwneud â rhyfel -Byddwn yn ddiolchgar am unrhyw rodd, boed fach neu fawr -Diolch am y gwahoddiad, rwyf ar gael i ddod i'r cyfarfod. -Hwn oedd y canfyddiad pwysicaf o adolygiad diweddar ac awdurdodol o'r dystiolaeth -Bu menywod dosbarth canol yn ymgymryd â gwaith elusen a lles -Mae'r unigolyn yma hefyd yn fyfyriwr ym mhrifysgol Bangor -Yn ogystal, rwyf nawr yn deall pwysigrwydd cydnabod cefndir diwylliannol disgyblion -Mae gan y gwerthwyr allanol offer penodol ac arbenigedd technegol -Yn dilyn ein sgwrs prynhawn yma, atodaf y canlynol i'ch sylw -Cyn gwneud trefniadau pellach, beth yw'r amserlen o ran y gwaith -Mae'r gweithiwr siop yn gweini ar y cwsmer ac yn cwblhau'r pryniad -Mae'r plant wedi ysgrifennu rheolau dosbarth ar y cyd -Dylen nhw farcio ar y cyd mewn asesiad -Nid oes bwriad cynnal adolygiad manwl o'r swyddogaeth -Mae'r llywodraeth yn annog busnesau mawr i gynorthwyo elusennau gwahanol -Alli di e-bostio'r cytundeb diwygiedig draw ata i -Bydd y rhan fwyaf yn gallu creu brawddegau estynedig gan ddefnyddio ansoddeiriau -Dull demograffig arall o gategoreiddio dinas yw ei dwysedd poblogaeth -Mae'r ardal o bwysigrwydd rhyngwladol ar gyfer yr adar i fagu -Parhaf i sôn am bwysigrwydd oedolion yn natblygiad plant -Bydd disgwyl i'r dysgwyr yna ailadrodd y frawddeg a chyflwyno eu henwau -Mae'r hyn yr ydych yn ei wneud yn cyfri -Mae ein cystadleuaeth barddoniaeth i bobl ifanc yn agor yn fuan -Mae'n bwysig dilyn canllawiau priodol er mwyn ateb dibenion y cwricwlwm -Ymddiheurwn, mi fydd y stiwdio ar gau yn y pnawn ar gyfer cyfweliadau -Mae cadeirydd y blaid wedi rhoi ei farn y dylwn i barhau -Soniai am yr effaith mae straen yn ei gael ar arweinyddiaeth -Defnyddiwyd gwahanol strategaethau i hybu ymddygiad da a chreu amgylchedd dysgu pwrpasol -Ar hyn o bryd, nid oes llawer o astudiaethau o sianeli creigwely -Diolch am arweinyddiaeth greadigol a thechnegol -Wnes i dorri coed hefo bwyall. -Y fo yw llysgennad dysgu awyr agored Cymru. -Cymhwysodd yn fargyfreithiwr gan ymarfer yng Nghylchdaith Cymru a Chaer. -Casgliad o ddarluniau'r artist Cymreig Aneurin Jones gan Emyr Llywelyn yw Aneurin. -Ar gyfer lladd uchelwyr Lloegr cafodd ei grogi yn fyw. -Delfrydol ar gyfer pobl sy'n cyfathrebu mewn mwy nag un iaith. -Er ei holl bwerau ychwanegol, dyw fy ymennydd dwyieithog i methu gweld hwnna. -Dau ddotyn yn unig sydd gan y fenyw. -Nofel gan Gwawr Eilian Williams yw Tafarn y Gŵr Drwg. -Dyma'r dull arferol o gyflwyno hafaliad y plân. -Fel ysgrifennydd cyntaf y gangen, cymerodd ran ym mhrotestiadau Dydd Gwener Du. -Arnaf i baned yn dre pan fydd yr haint 'di clirio! -Yn syml, gellir diffinio tameidiau o ddata fel darnau o wybodaeth. -Cred rhai mai fersiwn wedi'i Seisnigeiddio o Arthur yw'r trydydd. -Roedd ei bochau yn fwy gwritgoch nag erioed. -Dilyniant i'r nofel boblogaidd, Gwyn eu Byd. -Mae hynna'n ddatrysiad posib. -Gair tebyg yw amcangyfrif. -Mae ar batrwm croes, gyda'r tŵr yng nghanol y groes. -Nid yw'r tŵr ar agor i'r cyhoedd. -Pan oedd yn ei harddegau, hoffai fod yn filfeddyg neu'n dditectif. -Yr ynyswyr mwyaf effeithiol ydy'r defnyddiau hynny sy'n trapio pocedi o aer. -Gellir cyfrifo canolduedd set feidraidd o werthoedd neu ddosbarthiad damcaniaethol. -Roedd gan Price cysylltiadau ag Aberhonddu o'i ieuenctid. -Credir mai hwn yw'r unig fedal swffragét gyda chysylltiad i Seland Newydd. -Efallai fod tuedd i ystyried cyrris ac ati'n ecsotig ar un adeg? -Dw i isio darllen y llyfr cyn i'r ffilm ddod allan. -Arferai Byddin Imperialaidd yr Almaen ddefnyddio'r enw yma hyd at y Rhyfel Mawr. -Mae Llywelyn yn benderfynol o fynd at wraidd y mater. -Cyfrol o ddeunydd ffeithiol ar gyfer dysgwyr gan diwtor Cymraeg profiadol. -Cafodd ei sedd ei ddal gan John, ei frawd. -Cynhwysir darluniau o rai o'r esiamplau mwyaf prin a diddorol. -Soprano Gymreig oedd Ceinwen Rowlands. -Mae arbrofi gyda disgyrchiant yn rhan anhepgor o'i fagwraeth. -Codwyd o dywodfaen lleol, coch ond gwyngalchwyd drosto. -Dw i 'di sgwennu cerdd am farwolaeth. -O'n i'n lwcus iawn i ffeindio'r fodrwy. -Ef a fu'n gyfrifol am gryfhau Castell Caerdydd. -Yn Nyfnaint y cafodd ei eni, ac yng Nghaergrawnt y graddiodd. -Basan nhw'n dwli ar gael stori. -Cyfraniad oes a fu'n arloesol, ac yn hanesyddol ei ddylanwad hefyd. -Dwi'n edmygu'r genhedlaeth yna fwy fwy bob dydd. -Cyfarwyddwr cynta'r cwmni oedd Dylan Euros Lewis. -Roedd o'n dweud bod ganddyn nhw fwy o aelodau yn y grŵp. -Mi oedd yr hen ddynes yn dod yn fwy ac yn fwy gofidus. -Roedd yn Rhyddfrydwr mewn gwleidyddiaeth ac yn rhugl ei Gymraeg. -Mae'r gweision neidr hyn yn paru wrth hedfan. -Cerddodd at balas Mistar Bully, a sefyll o flaen ffenestr agored y ddawnsfa. -Ond ar y diwrnod hwnnw, pan ddaeth yr amser yn agos, doedd neb yno. -Ym mhob unigolyn, mae un hemisffer yn flaenllaw. -Dwnim, rili, beth amdanat ti? -Y mae gennyf ormod o gariad atat i'th ollwng yn rhydd. -Byddai buddsoddi mewn cynhyrchu mwy o ffilmiau Cymraeg yn gam da. -Roedd ganddi bedair chwaer, gan gynnwys dwy hanner chwaer, a phedwar brawd. -Roedd e'n union fel yr un yn ei breuddwydion. -Wel, dwi yn chwilio am joban. -Fe wnaeth e gadarnhau hynny. -Edmygu pawb ar y rhaglen am roi eu hunain ar y sgrîn deledu. -Dw i'n rili joio fo. -Mae achosion yn amrywio o heb fod yn ddifrifol i fod yn angheuol. -Eu tymor hedfan, fodd bynnag ydy rhwng Ebrill a Thachwedd. -Yn y cyfamser cynheswch gynnwys tin bychan o ansiofis. -Mae'r Ddaear mewn perygl. -Adeiladodd y sefydliad neuadd gyhoeddus, llyfrgell a chwe bwthyn i dlodion y dref. -Wedi cyfieithu Android i'r Gymraeg ydw i. -Ceir carnedd yn gysgodfa ar y copa. -Mae'r antipasti wedi'i wneud gyda reis. -Mae rhifau sengl yn aros fel ag y maent. -Cymhwysodd fel Ysgolor Teilyngdod Cenedlaethol. -Bu'n llywydd Anrhydeddus Gymdeithas y Cymrodorion. -Dyfarnwyd sawl medal iddi hefyd. -Ceir gwared llwyr o'r pregethau hirwyntog, yr areithiau llywyddol, y cylchlythyrau, yr hysbysiadau. -Mae'n dafell gyfoethog o hanes Caerdydd. -Llyfryddiaeth sy'n gyflwyniad i faes cerddoriaeth draddodiadol yng Nghymru. -Mi oedd y bwthyn i lawr y dyffryn. -Ceir tystiolaeth o byllau tanddaearol hefyd i gadw'r grawn. -Mae'r ymennydd eiddil yn cael ei warchod gan esgyrn y benglog. -Ceir lliain pinc wedi'i osod dros fwrdd arall yng nghefndir y llun. -Sawl gwaith sy' raid fi ddeud hynna wrtha chdi? -Mae ar gael ar ffurf tabledi, hufen, eli llygaid ac ar gyfer chwistrell. -Yn ystod ei hoes bu'n aelod o'r Blaid Radical Weriniaethol. -Mae gan yr hogan llgada gwyrdd. -Y tu allan, roedd maes bowlio ac roedd stablau gerllaw. -Mae rhai ieithoedd tagio'n cynnwys cystrawen a ddiffiniwyd ymlaen llaw. -Roedd y robin goch yn dal i ganu a thrydar a gwyro'i ben. -Cyfeirir ati fel morwyn. -Tyddynwr tlawd o Gricieth oedd tad Edward David Hughes. -Enghraifft o segment o linell yw llinellau triongl neu sgwâr. -Daw ei ddymuniad yn wir pan ymddengys cysgod ysbryd i gadw cwmni iddo. -Dwi'n gweld buddugoliaeth yn annhebygol. -Mae rhan helaeth o'r deunydd ar gael hyd heddiw wedi'i archifo. -Person sy'n hoff o fod heb ddillad yw noethlymunwr. -Mae cyn-lywydd Plaid Cymru, Dafydd Wigley, yn berthynas iddo. -Disgwyl bod yno am rhyw ugain munud ond aeth hi dros awr. -Mewn cân gorawl, ceir mwy na tua dwsin. -Mae'n hoff o dywydd braf. -Bu'n aelod o Bwyllgor Cenedlaethol ar gyfer Almaen Rhydd am rai blynyddoedd. -Ond mae iddo ei beryglon hefyd. -Roeddwn i'n ymarfer lot fawr. -Nofel i oedolion gan Mari Ellis yw Ystyriwch Lili. -Roedd yn fab i Dafydd Goch, mab Dafydd ap Gruffudd. -Geith e swper yn y funud. -Casgliad o straeon byrion a modern. -Mae'n un o'r Aelodau Seneddol ieuengaf erioed. -Mae'n adeilad nodedig gyda hanner ohono'n ffrâm bren. -Sawl estrys sydd ei hangen i ddifrodi ysgol? -Yna symudodd i Efrog Newydd i ddechrau ei gyrfa broffesiynol. -Ni fyddaf i yn rhyfygu barnu neb, na dim, drosof fy hun. -Goroesodd dau gywydd i Meurig a'i deulu a sgwennwyd gan Guto'r Glyn. -Mi nath o danio'r gannwyll ar y bwrdd. -Mae'n byw ym Methel, Gwynedd. -Yn ddiweddarach cawsant dri mab. -Prif fwyd yr oedolyn ydy dail helygen a phoplys. -Problem arall gyda heintiau firaol yw pa mor gyflym gall y firws luosogi. -Mi oedd y siarc yn rhy agos i'r traeth. -Oedd dathliad o ryw fath? -Llyfr bwrdd lliwgar i'r ifanc gyda geirfa o gwmpas y lluniau. -Pentrefan yng nghymuned Llaneilian, Ynys Môn, Cymru yw Cerrig-mân. -A fydd yn derbyn anrheg gan Siôn Corn? -Pa un ai mantais ai anfantais i ddynion fyddai bod heb iaith o gwbl? -Ga i rew yn y ddiod 'ma plis? -Gobeithio eu bod nhw'n bloeddio fel bod y neges yn atseinio. -Nath o gwcio ratatouille. -Llyfr stori a llun sy'n ymdrin â thema bwlian. -Gwaith Llywarch Ap Llywelyn Prydydd y Moch. -Mae ganddi beil o lyfra wrth ymyl y gwely. -Dyma a wneir mewn geometreg Ewclidaidd. -Doedd genna i ddim signal felly wnes i 'im cael dy decst di. -Ti 'di dwyn y ffrog newydd o'n i 'di feddwl gwisgo heddiw? -Wnes i weld seren wib neithiwr. -Rhoddwyd addysg breifat iddi. -Rho'r miwsig 'na ffwrdd. -Y cyfrwng a ddefnyddiwyd yw paent olew ar bren, gyda brwsh impasto. -Handi cadw pethe'n syml weithiau 'fyd! -Hi yw sefydlydd a chadeirydd Cymdeithas Merched Asiaidd yr Alban. -Nofel am fywydau amrywiol aelodau o gôr merched. -Llyfr yn cynnwys gwybodaeth adloniannol. -Nid yw amgryptio disg yn disodli amgryptio ffeiliau ym mhob sefyllfa. -Ond dwi'n lyfio fo. -Daeth yn arweinydd naturiol o ymgyrch y siartwyr yn Ne Cymru. -Casgliad o ysgrifau gan Dyfed Evans yw Cyfaredd Eifionydd. -Does dim dianc i Dylan Rees. -Mae angen iddynt fod heb drawiad am beth amser cyn y gallant yrru car. -Yr wyf yn coelio, bellach, na'th foddlonir byth. -Bu'n aelod o Gynghrair Ryngwladol Menywod dros Heddwch a Rhyddid am rai blynyddoedd. -Hi oedd cyd-sylfaenydd meithrinfa gyntaf y dalaith. -Yn ei llyfr, archwiliodd effeithiau'r gosb eithaf ar bawb dan sylw. -Roedd Gavin yn hogyn clên ac mae colled mawr ar ei ôl. -Fydd y mwnci'n ffeindio'i fam? -Nid yw'r fenyw yn medru hedfan. -Stori ddoniol a byrlymus ar thema rygbi. -Cyfeirlyfr Cymraeg yw Llawlyfr y Theatr yng Nghymru. -Croeso nôl i chi. -Mae 'na wersi yoga am ddim ar-lein. -Lle bach cwtshlyd, braf. -Mae yn gefnder i mi, ac yn debyg i mi mewn llawer o bethau. -Mae pwyntiau yn un o'r gwrthrychau mwyaf sylfaenol o fewn fframwaith geometreg Ewclidaidd. -Bu'n aelod o Urdd Merched y Bleidlais am rai blynyddoedd. -Saif Castell y Fenni yn nhref farchnad y Fenni, yn ne-ddwyrain Cymru. -Byddai'n dda dilyn person blaengar a medrus fel ef. -Marciau melyn golau sydd gan y gweision ieuanc. -Drygionus tu hwnt; clyfar dros ben. -Yr oedd yr holl deulu wrth eu bodd. -Rhan o gyfres o ddramâu byrion Cyfres y Llwyfan. -Mi wnes i dy drin yn deg, ond aneffeithiol fu pob triniaeth. -Yn flynyddol ceir rhwng dau a phum diffyg rhannol ar y lleuad. -Mi oedd hi'n sych ac oer yn gyffredinol. -Torrwch y wyau, gan ychwanegu halen, a dwy lwy fwrdd o ddŵr llugoer. -Cyfrol o ysgrifau ar agweddau amrywiol ar lenyddiaeth mewn theori. -Caiff ei gysylltu gyda dolur gwddw. -Gogledd-ddwyrain a Hanes Cymru gan John Davies. -Bu'n ynad heddwch ar feinciau siroedd Caerfyrddin a Cheredigion. -Mae Dwyrain Rhisga ym mwrdeistref sirol Caerffili ac yn rhan o dref Rhisga. -Mewn pobol, mae'r ffaryncs hefyd yn bwysig yn y broses o greu sain. -Cymuned yn Sir Gaerfyrddin ydy Treflan Lacharn. -Fedra' i ddim helpu meddwl weithiau ei fod o'n fwriadol anodd ffeindio pethau. -Roedd fel bod potel bop wedi'i hagor. -Mae'r dorth 'di mynd yn stêl. -Y fam fynydd ydy Cadair Berwyn. -Gellir gwrando ar y gerddoriaeth ar ddyfais, yn ffôn, tabled, cyfrifiadur ac ati. -Cyfrol gan Dafydd Davies ac Arthur Jones yw Enwau Cymraeg ar Blanhigion. -Mae'r castell wedi'i gofrestru fel Adeiladau rhestredig Gradd Un Sir Gaerfyrddin. -Mae Alys a Glain wedi bod yn ffrindiau gorau erioed. -Ceir ffos o'i amgylch a dwy gistfaen dal lludw dynol o'i fewn. -Mae'n treulio'r gaeaf fel chwiler. -Mae 'na wenoliaid 'di nythu yn y cwt. -Fel rheol mae'n gweithio o fewn un i dri diwrnod. -Ystyr biswail ydy baw gwartheg, neu dom da. -Flwyddyn yn ôl roedd rali annibyniaeth Caerdydd. -Helo, ydy hynna'n dal yn rhywbeth pwysig? -Arweinydd newydd ydi'r peth nesaf ar yr agenda. -Mae'n was neidr eithaf hir, ac mae o faint mwy na'r cyffredin. -Diolch i'r gwasanaeth iechyd. -Stori gan Catherine Jones yw Straeon Bobi Blaidd. -Parhaodd y cam-drin hwn am saith mlynedd. -Caiff ei gynhyrchu drwy greu adwaith cemegol rhwng amonia a hydrogen clorid. -Nes i brynu top hefo sequins arno fo i fynd allan. -Ysgol ddwyieithog yng nghanol tref Rhuthun, Sir Ddinbych ydy Ysgol Stryd y Rhos. -Mae'n is faes rhyngddisgyblaethol o fewn gwyddoniaeth gyfrifiadurol ac ystadegaeth. -Mae'n hawdd canfod yr achos. -Atgoffa fi o fod yn Budapest yn un naw naw un. -Cawn bortread byw o'r dre a'r cymeriadau trwy lygaid y tri. -Un ar ddeg o straeon byrion. -Yn eironig iawn, mae'n llawer gwaeth mewn oedolyn nag ydyw mewn plentyn. -Stori gan Alan Davies yw Y Belen Iorwerth. -Dw i'n berffaith iach hyd y gwn i. -Mae'r cloc yn tician. -Mi aeth y ferch fach am dro gyda'i ffrind. -Oherwydd problemau gyda'i chefn, nid ydyw bellach y chwarae tenis. -Cafodd hyfforddiant mewn adrodd gan David Thomas Jones ar awgrym ei gweinidog. -Llyfr ar gyfer plant yn bwrw golwg smala ar wahanol ddulliau o deithio. -Mae'r dail yn fwytadwy yn yr haf a'r hydref. -Mae'r ddynes yn hen a mae'i chefn wedi crymu. -Sgwenna bethau gwreiddiol neu addasa a chyfieitha erthyglau eraill. -Mae'r geg yn cynnwys dau ranbarth, y cyntedd a'r ceudod llafar. -Ni cheir nodweddion amlwg ar y copa. -Mae iddo dair rhan, pob un yn bedair sillaf yr un. -Casgliad o wyth o straeon byrion gan Meinir Eluned Jones yw Sylfeini Llithrig. -Pan maen nhw'n cael seibiant nid yw eu hadenydd ar agor. -Nofel ar gyfer plant a'r arddegau gan Gwenno Hywyn yw Gwerfyl Gam. -Caiff gartref gyda hwy ar ôl cael ei hachub o blith y biniau. -Es i i nôl torth o'r becws. -Mae mam yn mynd am dro yn y car heb do. -Mae hi 'di bod yn gweithio'n galed iawn bechod. -Mae'r ardal yn lled fynyddig gyda llawer o gymoedd bach, dwfn a chul. -Dyma restr o ardaloedd llywodraeth leol yn Nhalaith De Cymru Newydd Awstralia. -Nofel ar gyfer plant a'r arddegau gan Eirug Wyn yw Powdwr Rhech! -Mae'r dystiolaeth mai metaboledd araf ydy'r achos yn wan iawn. -Ond chi'n iawn bod colli ein gorsafoedd lleol yn drist. -Llyfr wedi ei ddarlunio mewn lliw a du-a-gwyn. -Roedd Jenkins yn daclwr cryf ac yn rhedwr hynod o gyflym o ddechrau stond. -Dilyniant i Rhwng y Cŵn a'r Brain a Rhyw Chwarae Plant. -Rhieni fydd yn penderfynu os ydi plant yn mynychu ysgol, nid y wladwriaeth. -Cysegrwyd yr eglwys i Dewi Sant a'i fam Non. -Mae'n treulio llawer o'i hamser yn byw yng Ngorllewin Cymru. -Stori gan Stephen Jones yw Y Saethau Duon. -Mae India'n lle gwahanol iawn i Swydd Efrog. -Fe ddaeth ar draws car wedi ei adael wrth ymyl y ffordd. -Dwi'n ymwybodol o fudiadau sydd wedi derbyn llythyr fel hwn yn Saesneg. -Ti 'di gweld y lein-yps? -Aeth i fyny un rodfa ac i lawr rhodfa arall. -Mae'r erthygl hon yn cynnwys diffyg maeth a gor faeth. -Blodeugerdd o gerddi gan Alan Llwyd ac Elwyn Edwards yw Gwaedd y Lleiddiad. -Tarodd hoelan i fewn i'r pren hefo mwrthwl. -Gafaelodd yn y dillad gwely a'u hysgwyd unwaith neu ddwy. -Mae hi'n gwisgo mwclis efo sêr arno fo. -Hyd yn hyn, nid yw'r esgyrn wedi eu dyddio. -Un o'r cylchoedd hyn ydy'r cylch cerrig mwyaf yn Ewrop. -Rhestrir Ilar fel un o seintiau'r Eglwys Geltaidd mewn sawl dogfen. -Er enghraifft, un o'r symptomau cynharaf o lid y freithell ydy cur pen. -Gwell fyth, dyma gyfle i wneud hynny wrth ddysgu caneuon meithrin Cymru. -Wedi bod yn bach o slob dros y gaeaf. -Geiriadur idiomau Cymraeg gan Ceri Jones yw Dweud eich Dweud. -Bu'n aelod o Blaid y Merched Rhyddfrydol am rai blynyddoedd. -Does dim posib ei newid, oherwydd strwythur y rhan yna o'r cod. -Uned arferol dwysedd yw cilogram pob metr ciwb. -Meddwl rhoi bet arno fo yn arweinydd nesa'r Toris. -Mae'r gwynt wedi newid cyfeiriad. -Y megalodon ydi'r siarc mwyaf i fodoli erioed. -Tylinwch y toes, gan roi blawd ar eich dwylo o dro i dro. -Mae modd eu prynu o fferyllfeydd, archfarchnadoedd neu ar-lein. -Rho'r cartŵns mlaen iddyn nhw ar y teli. -Cyfeirlyfr poced i lefydd i ymweld â hwy yn Sir Benfro. -Saif mewn stryd o'r un enw yn Nhrefynwy, Sir Fynwy, de-ddwyrain Cymru. -Ar y dechrau, roedd saith mynach a phrior. -Ddaru mi godi am bedwar y bore. -Pa mor ofalus bynnag fyddai hi'n edrych allai hi ddim gweld dim byd. -Dywed rhai mai dyma leoliad gwreiddiol Dinbych. -Arferid defnyddio pren ywen ar gyfer y bwa hir. -Ar doriad yr Ail Ryfel Byd ymunodd â'r Llynges Frenhinol fel codiwr. -Mae'n perthyn i'r un teulu â blodyn ymenyn. -Yn India roedd hi wastad wedi bod yn rhy boeth a diegni. -Yr ail o dair nofel fywgraffyddol. -Er hyn, mae'r set o rifau cysefin yn un enfawr. -Roedd yn ymddangos bod y briodas yn un berffaith. -Haia Sioned, dwi'n gweithio iddyn nhw. -Prif fwyd y siani flewog ydy'r llarwydden. -Ychwanegwch flawd a'u cymysgu gyda'i gilydd, yna ychwanegwch domatos. -Blawd ceirch wedi'i ferwi mewn dŵr neu laeth ydy uwd. -Nofelig aeddfed am deulu Cain gyda pherthynas a gwreiddiau'n llinyn arian drwyddi. -Yn yr achos hwn, nid oes diffiniad cytûn o ddull. -Os ydynt yn gyfochrog yna gelwir hwythau'n sylfaen. -Dengys ymchwil gwyddonol fod ei olew yn cynnwys rhinweddau gwrth-ffwng. -Fel arfer mae pedair chwarren barathyroid. -Dechra t'wllu wedi glaw, cenllysg a thamed o heulwen ym Mrwsel. -Trydar yw tweet ac felly retweet yw aildrydar. -Ar y dechrau doedd hi ddim wedi'i hoffi hi o gwbl. -Yn aml, mae'r canghennau'n llydan a'r rhisgl wedi cracio. -Lle gest ti'r 'sgidia 'na? -Mae'n perthyn i deulu llygad y dydd. -Cafodd gryn ddylanwad ar ei ddilynwyr. -Casgliad o fyfyrdodau a gweddïau cryno sy'n canolbwyntio ar natur Duw. -Ysgrifau am gymeriadau a digwyddiadau diddorol ym Mhenllyn. -Ceir yma ymdriniaeth ag ansawdd a tharddiad y canu rhydd. -Eich job fel newyddiadurwyr yw rhannu'r gwir. -Naddo, ydyn nhw'n gwneud hyd a lledrith neu Excel hefyd? -Dwi gam yn agosach o ran bod â chopi a medru gweld ei gynnwys. -Cyfrol wedi'i pharatoi gan hanesydd bocsio uchel ei barch. -Ceir yn bennaf o gwmpas y Môr Canoldir a thiroedd isel Gogledd Affrica. -Ni fedraf gysoni fy holl ymddygiadau â'i gilydd. -Ceir un genhedlaeth yn unig bob blwyddyn. -'Di o rioed wedi gweld un o'r blaen. -Mae hwn yn blanhigyn gwenwynig a gall achosi briw ar y croen. -Mae pecynnau diderfyn ond mae cyfyngiadau ym mhrint bach y cytundebau. -Mae'r tymheredd hwn, fodd bynnag, yn is na thymheredd yr ymbelydredd cefndirol. -Ar ôl y gwaith pobi roedd yna dân da. -Mae'r clust fewnol yn cynnwys y cochlea a'r nerf clywol. -Mae nain yn licio mynd i'r capal ar y Sul. -Ffôn diwifr, cludadwy a ddefnyddir i drosglwyddo llais neu ddata i ffôn arall. -Mae'r meinwe byw yn llosgi oherwydd pelydrau uwchfioled yr haul. -Cyfrol newydd ar gerddoriaeth draddodiadol Cymru gan Meredydd Evans yw Hela'r Hen Ganeuon. -Hi oedd y ferch gyntaf i gael ei derbyn i'r Gymdeithas Frenhinol. -Mae dy anti di yn wych! -Daeth yn ail yn y ddwy flwyddyn gyfamserol. -Mae'n digwydd yn aml ar draed neu ddwylo. -Ceir cyhyr ac amlinelliad math o ddail o'r enw rhomboid hefyd. -Caiff weithiau ei alw'n ffactor cyffredin mwyaf neu ffactor cyffredin uchaf. -Ceir pennaeth ar ysgolion cynradd ac uwchradd. -Ond a all y tŷ ei hun fod yn ddrwg? -Fodd bynnag, roedd llawer o'i berthnasau yn ddioddefwyr yr Holocost. -Arferai fod yn rhan ar gyfer gwasanaethau'r amryw denantiaid yn yr adeilad. -Ceir hefyd yn Lloegr, de-orllewin yr Almaen ac yn y Swistir. -Mae'r gair rhudd yn Gymraeg, wrth gwrs, yn golygu coch. -Wedi cael jinsen bach gyda'r cordial heno paid becs! -Dw i ddim yn siŵr iawn pwy oedd o. -Daethant ynghyd yn wythnosol i drafod materion cymdeithasol y dydd. -Mae'r gynrychiolaeth yma'n unigryw hyd at drefn y ffactorau. -Rhoddodd yr hen ddyn y llyfr i'w fab. -'Da ni'n bobl fusneslyd! -Mae'n sylweddoli bod rhywbeth sy'n bwysig iawn iddi ar goll. -Nofel ar gyfer plant a'r arddegau gan Mair Wynn Hughes yw Caleb. -Ychydig iawn o ddeunydd litwrgaidd sydd wedi goroesi yng Nghymru. -Hyfryd ond melys iawn iawn. -Bu'n aelod o Bwyllgor Materion Mewnol am rai blynyddoedd. -Mae mislif yn medru bod yn boenus iawn. -Mae'n bosib mai o'r cyfnod yma y daw'r to bwaog hefyd. -Gelwir y rhain yn gyfryngau digidol. -Diolch am eich gwaith. -Casgliad o ddeuddeg cainc ar gyfer y delyn gan nifer o wahanol gyfansoddwyr. -Mae'n perthyn i deulu'r fresychen. -Heddiw ymhlith ei aelodau mae llawer o bobl nad ydynt yn arddel crefydd benodol. -Yr oedd Thomas yn aelod cenedlaetholgar o'r Blaid Ryddfrydol. -Gall cyson hefyd gyfeirio at ffwythiant cysonyn, neu ei werth. -Roedd Robert Roberts yn amaethwr, melinydd, bardd, eisteddfodwr a chanwr gwerin Gymreig. -Nofel i ieuenctid yn eu harddegau. -Ddylsen ni chwarae rygbi yn yr Haf? -Edrychir ar y tair arall gan nifer o fudiadau fel carcharorion gwleidyddol. -Mi oedd hi'n bleser cael cyfarfod Elsi fach a'i theulu ddoe. -Mi oedd y felin yn troi. -Ychydig a wyddent fod blaidd mawr blin yn dynn ar eu sodlau. -Mae rheoli data yn ymgorffori pob disgyblaeth academaidd parthed data fel adnodd defnyddiol. -Ceir craciau fertig, oren yn y rhisgl. -Ysgrifennai nofelau, pamffledi, cerddoriaeth a dramâu. -Nid yw anifeiliaid eraill, megis cathod a chŵn, yn chwarae rhan wrth drosglwyddo. -Nofel ar gyfer plant a'r arddegau gan Emyr Hywel yw Dyddiau'r Drin. -Fues i ym Maracesh flwyddyn ddiwethaf. -Os daw gwrthryfelwr i'ch tiriogaeth, caiff ei noddi a'i foethi gennych. -Prif fwyd y siani flewog ydy cen carreg a mwsogl. -Mae rhai mathau sydd bellach yn imiwn i sebon golchi dwylo gwrthseptig. -Gwrthododd gynnig i ddod yn Brif Weinidog ar dri achlysur. -Mae e'n methu siarad Cymraeg. -Bwyd syml, traddodiadol wedi'i wneud gyda bara a llaeth ydy bara llaeth. -Gellir darllen ei gwaith ar sawl lefel, fel pob llenyddiaeth fawr. -Cafwyd sawl perchennog dros y canrifoedd. -Pumed casgliad o farddoniaeth ysgolhaig a beirniad llenyddol Cymraeg cydnabyddedig. -Nofel i blant yn ymwneud â byd ceffylau a marchogaeth. -Mae o hefyd ar gael mewn glas neu ddu. -Rhoddwyd ei weddillion i orffwys yn Eglwys Sant Afan, Llanafan, Ceredigion. -Pan fydd y madarch wedi'u coginio, rhowch ansiofi tu fewn i bob un. -Erbyn yr arddegau cynnar, mae'r thymws yn dechrau arafu. -Tirfeddiannwr pwerus, gwleidydd a milwr oedd Syr Richard Trefor, Trefalun, Maelor. -Mae'r ymwybyddiaeth ei bod yn brifddinas yn treiddio yn araf i'r boblogaeth. -Roedd yn gyffrous medru gweld y bwyd yn cael ei goginio hefyd. -Roedd Ymerodraeth Awstria yn niwtral, ond chwaraeodd ran flaenllaw yn y rhyfel. -Mae'r dyn yn gyrru'r lori. -Myfi a'i piau i gyd oll. -Ymddangosodd gweithiau ganddi mewn sawl cylchgrawn a phapur newydd. -Mae Dewi a Siriol yn blant arbennig. -Mae Ardal Ymchwil Brycheiniog, bellach, o fewn Ardal Ymchwil Powys. -Does ganddon ni ddim stamps. -A oes modd achub Llechen? -Hi yw Aelod o Lywodraeth yr Alban dros Glasgow. -Cafodd ei addysgu yn ysgol ramadeg Caerfyrddin. -Diolch Einir, dyna garedig. -Un i chi y tro yma. -Tair taith a thri llai, ond pwy sy'n gwrando? -Dyma un o'r rhywogaethau mwyaf niferus drwy Ewrop. -Roedd Yma o Hyd a Bob yn y Ddinas wedi cystadlu, yn aflwyddiannus. -Llyfr am ddraig fach sy'n achosi anrhefn ar y fferm. -Os na ddaw ateb i dy gwestiwn, bydd hyn ar agenda'r cyfarfod nesaf. -Mewn mathemateg, mae'r ansoddair cysonyn yn ddisgrifiad o rywbeth nad yw'n amrywio. -Dw i 'di gadael yr ysgol ers saith mlynedd erbyn hyn. -Stori arall am helyntion Rhian Mai a'i theulu. -Y blodau, y llwybr, y staff a hyd yn oed yr awyr yn binc! -Antur amlddewis i blant gan Eleri Davies yw Tro i'r Castell. -A yw'n llwyddo, tybed? -Dwsin o garolau i lonni'r Ŵyl. -Safodd Law fel ymgeisydd plaid Annibynnol Llais Pobl Blaenau Gwent gan gipio'r etholaeth. -Almaeneg oedd iaith y teulu. -Cymerwyd mantais o hyn gan rai i siarad heb wahoddiad. -Caiff ei achosi drwy orfwyta, diffyg cadw'n heini a rhesymau etifeddol. -Poen yn y geg oherwydd dant drwg ydy'r ddannodd. -Fe'i gwelir mewn llawer o wledydd Ewropeaidd ac yn Asia. -Yn aml, mae pobl hŷn yn datblygu effeithiau andwyol. -Does na'm amheuaeth o hynny. -Mae asennau gyddfol yn gyffredin mewn rhai anifeiliaid megis ymlusgiaid. -Daeth y digwyddiad yn adnabyddus fel Y Dydd Gwener Du. -Ma'r blode yn gwynto'n ffein bore 'ma. -Efallai nad yw rhai o'r awgrymiadau dilynol yn apelio. -Gwyn yw lliw eu hwyau. -Saif ym Mro Morgannwg. -Mae gan drychiadau conig y plân Ewclidaidd amryw o nodweddion. -Mae'n cael ei weini yn fewnwythiennol. -Dengys y gyfrol hon ddarlun newydd, cyfoes o holl amrywiaeth yr arfordir. -Mae fforiwr yn berson sy'n chwilio am rywbeth. -Dw i jyst yn rhoi'r fath lythyron nôl yn y post. -Cymuned ym Mhenfro yw Abergwaun a Wdig. -Mae hyn yn wir! -Y mae rhai o'r ymgeiswyr yn dangos llai o wladgarwch. -Daeth yn aelod o Gapel Libanus, Y Methodistiaid Calfinaidd, ym Maesteg. -Nid oedd ganddi unrhyw blant a bu farw yn Awstralia. -Pwrpas yr arbrawf yw canfod neu gadarnhau'r berthynas achos-effaith rhwng y newidynnau. -Dywedodd ei thad wrthi mai mater rhyngddo fo a'r perchennog oedd o. -Cefais wybod dros y ffôn nad oedd trên na chwaith bws o'r Amwythig. -O ddydd i ddydd mae hi'n ddarlledwr ac yn athro ysgrifennu creadigol. -Y bwriad oedd ei gyflwyno ar yr un pryd i holl seneddau'r byd. -A dyna ddiwedd yr alwad. -Ddim yn dod yn agos at gyrraedd hynny. -Serch hynny, dychwelodd rheithgor ei threngholiad reithfarn o lofruddiaeth. -Mae hyn yn bwysig iawn i mi. -Maen nhw'n blodeuo rhwng Mehefin ag Awst. -Mae hefyd eisiau buddsoddi llawer mwy mewn datblygu technolegau iaith. -Mae rhai o'th feibion yn llenwi swyddau anrhydeddus yn fy nhŷ. -Roedd ganddynt fab o'r enw Dafydd. -Planhigyn bwytadwy yn nheulu'r fresychen ydy brocoli. -Dyma'r gyfrol olaf yn y gyfres bwysig a diddorol hon. -Roedd hefyd yn heddychwr cadarn. -Yr wyf yn awyddus i'th gael yn gyfaill ac yn gydweithiwr. -Roedd ei chefn tuag at y drws. -Mae ei thŵr sgwâr canoloesol hefyd yn nodwedd hynod o drawiadol. -Cyfrol ar sut i adnabod blodau gwyllt a dysgu mwy amdanyn nhw. -Ond meddylia mae 'na ddoethuriaeth i'w sgwennu. -Mae'r canlyniad bob tro yn rhif real. -Fe ddaeth i lawr oddi ar y mynydd fel yr oedd hi'n nosi. -Ychydig yn ddiflas yw prifathro newydd Ysgol y Bryn. -Mae triniaethau eraill yn cynnwys albwmen a thiamin, a defnyddio dialysis. -Nathon ni ffendio madarch yn tyfu tu fewn i'r adfail. -Maen nhw angen rhoi'r cyfrwy ar gefn y ceffyl. -Trist iawn i glywed hyn. -Fe'th fagwyd yn rhy dyner i orwedd mewn daeardy. -Llyfr lliwgar yn adrodd hanes y Nadolig i blant ifanc. -Ceir yma hefyd gywydd mawl a nifer o englynion. -Gwyddys, bellach, fodd bynnag fod y dyddiad geni hwn yn anghywir. -Mae llongau o'r gofod ar eu ffordd i ddwyn dŵr y Ddaear. -Cyfansoddyn organig yw fitamin, sydd yn angenrheidiol i lawer o organebau byw. -Lluniau du-a-gwyn gan Angharad Tomos. -Fel hyn y mae llawer ohonynt yn siarad. -Mae'r gyfrol yn cynnwys awdl Y Cynhaeaf gan y Prifardd Dic Jones. -Mae bys bach 'yn nhroed i'n 'nafu. -Gweithiodd am gyfnod fel beirniad diwylliannol ar gyfer papurau newydd a chylchgronau. -Y nofel ôl-drefedigaethol gynta' yn y Gymraeg. -Ond hoffodd hi sgipio gymaint fel nad oedd hi eisiau stopio. -Dilyniant i Siani'r Shetland. -Sut fuasech yn disgrifio'r ystum yma? -Llyfr lliw llawn drwyddo yw hwn. -Maent yn cynnwys rhwydwaith o diwbiau a sachau bach. -Ymgorfforodd llawer o'r llefydd a welodd ar ei theithiau yn ei gwaith llenyddol. -Mae nhw'n chwarae gêm ar yr Xbox. -Cafodd, felly, ei magu yng nghartref ei mam-gu. -Mae'n dewis iaith estronol yn lle ei iaith ei hun. -Newyddion da iawn. -'S rhywun wedi gwneud ymchwil tebyg eisoes? -I bob pwrpas, gellir ei ystyried i fod y gwerth yn y canol. -Ond trist gweld darn arall o'r gorffennol yn diflannu. -Os bernwch y gwnai ddyrchafiad niwed i mi, rwyf yn fodlon parhau yn wastrodyn. -Mae'r wledd priodas yn mynd rhagddi. -Cynhwysir yn y gyfrol hon holl gerddi'r bardd o Rosllannerchrugog. -Dw i'n hoff o gadw'n ffit. -Mae creigiau Llanymddyfri Isaf yn cynnwys cruglwythau, tywodfaen a gwlâu o lechi. -Joben fach i rywun ei drwsio. -Buodd yr ap yn adnodd hynod werthfawr i mi allan yn Tsieina yn ddiweddar. -Bydd bonws yn cael ei wobrwyo am gyflawni'r tasgau. -Roedd yn rhan o sefydlu'r Gymdeithas Genedlaethol er Hyrwyddo Pobl Liw hefyd. -Ond ni'n gwylio pob symudiad. -O ble daw'r holl sôn bod Kim Jong-un wedi marw? -Caiff ei neithdar o blanhigion llysieuog. -Un mewn pedair o astudiaethau yng Nghyfres y Meddwl Modern. -Cafodd addysg breifat cyn mynd i astudio'r gyfraith. -Daeth mor sâl nes iddi gael ei rhyddhau bythefnos ar ôl hyn. -Wnest ti weld rywun odda chdi'n nabod? -Roedd yr enwadau anghydffurfiol yn gandryll yn erbyn y syniad. -Mae gen i datŵ o ysgyfarnog a lleuad. -Mae'r oedolion yn byw rhwng Mehefin ac Awst. -Ceir dau fath topolegol gwahanol. -Hi oedd yr hynaf o bedwar o blant. -Hinsawdd Môr y Canoldir Dwyreiniol yw hinsawdd yr ardal. -O dan adio, maent yn adio fel fectorau. -Bu dyfalu bod Jack wedi symud yno ac wedi lladd y ddwy. -Mi gafodd o swper mawr y noson honno. -Mae'n hoff iawn o greigiau cynnes i orffwys arno. -Teithiodd i Wlad Groeg gan astudio'r hen adfeilion. -Cangen o fathemateg gymhwysol yw geodedd a gwyddorau daear. -Wnes i weld hi'n croesi lôn, wn i ddim lle mai 'di mynd. -Pwy sydd bia'r gôt ar waelod y grisia? -Mae'r Fantell felyngoch yn hoff iawn o ymylon coedwigoedd, llennyrch a llwybrau cerdded. -Wedi arbrofi a chymreigio ap tywydd yn ddiweddar. -Dyma'r cwbl y mae o'n dadlau drosto. -Mi oedd hi'n gwisgo siaced goch. -Ef hefyd oedd arweinydd y gymuned ddarlledu yng Nghymru. -Ond penderfynu aros yn ddyn, a mynnu hawliau dyn, a wnaeth. -Casgliad o wasanaethau yn seiliedig ar adrannau'r llyfr emynau, Caneuon Ffydd. -Mae o'n licio chwarae ar yr Xbox. -Roedd Syr Robert John Thomas yn berchennog llongau ac yn Aelod Seneddol Rhyddfrydol. -Mae'n odli gyda'r ail linell naw sill. -Dylai creu llwch hyd y tylwyth teg fod yn llawer o hwyl. -Ges i'r pasta gora 'rioed pan es i i'r Eidal. -Llyfr sy'n amlinellu'r egwyddorion Cristnogol gan Isaac Thomas yw Trosom Ni. -Bydd mwy am ddatblygiadau diweddaraf y cwmni ar y newyddion heno. -Gallai fynychu oherwydd iddi ddefnyddio beic tair olwyn wedi'i addasu. -Dw i angen golchi dillad heddiw. -Dyma'r diffiniad anghynhwysol, sydd yn eithrio'r paralelogramau. -Saif ychydig i'r gogledd o Landegfan. -Ti 'di gorffan y coffi. -Sylwer mai carnedd yw disgrifiad Comisiwn Brenhinol Henebion Cymru o'r mwnt hwn. -Gwmpes i wrth drio mynd ar 'y meic. -'Swn i'n gallu sgipio mwy na hyn. -Cofnodai hanes lleol a chyffredinol. -Llu o luniau difyr. -Nid yw'r ffocws yn gorwedd ar y cyfeirlin. -Dydi'r tatws ddim yn barod i'w hel. -Mae homeopathi yn feddyginiaeth gyflenwol neu amgen. -Hanes Llŷr, sy'n darllen stori arswyd yn ei wely. -Pa bryd gawn ni raglenni Cymraeg? -Mae caneuon lot gwell fel Gwybod yn Iawn ac Yn yr Ardd. -Mae drws y wardrob wedi disgyn i ffwrdd. -Pasia'r teclyn ar gyfer y teli. -Y dydd Iau cyn dydd Gwener y Groglith yw Dydd Iau Cablyd. -Tref yn Swydd Efrog, Lloegr ydy Hedon. -Ffilm oedd wedi ei thynnu trwy glymu gŵr camera ar flaen trên. -O ffermdy Plas yn Iâl, Llandegla, Dyffryn Clwyd y deuai ei rieni. -Dyma sy'n creu'r amrywiaeth y soniwyd amdano'n gynharach. -Ti 'di gweld y rhaglen newydd 'na ar y teli? -Caiff ei hadnabod hefyd fel eiriolwr dros hawliau sifil. -Dw i heb weld y canyniadau llawn. -Mae'r plentyn wedi rhoi sticers ar 'i gas penseli. -Ai Meilir oedd yn gyfrifol? -Fel merch swyddog milwrol, symudodd y teulu'n gyson. -Pwynt dilys ganddoch chi a dw i'n cydymdeimlo. -Handi iawn i bawb. -Roedd hyn yn cadarnhau eu cyfeillgarwch. -Gallai hynny fod yn hynod niweidiol i'r ymgyrch o blaid. -Dw i'n cofio mynd ar drip ysgol i amgueddfa. -Meddyliwn fod fy nghyfaill yn gystal dyn â chithau. -Cedwir llawer o'i lawysgrifau yn Llyfrgell Genedlaethol Cymru. -Be' gest ti i frecwast? -Mae methanol yn hylif anweddol, fflamllyd, di-liw, diarogl. -'S dim angen tractor. -Mae gan bob ochr arwyneb. -Ceir crug crwn arall ychydig fetrau i'r de. -Yr ochr arall i'r briffordd mae hen Reithordy. -Dyna'r broblem, pa enw newydd i'w ddefnyddio? -Ymhlith ei hoff themâu roedd mamolaeth a dirgelion hil ac etifeddiaeth. -Edrych ar ôl natur. -Dyma, mewn gwirionedd, gychwyn y colon mawr. -Yr hyn sy'n groes i duedd yw niwtraliaeth neu feddwl agored. -Roedd Ilar hefyd yn gantref. -Dw i angen mwy o goffi. -Yn gyffredinol mae'n ddiogel yn ystod beichiogrwydd. -Mae hi'n anodd cario'r cerrig am 'u bod nhw mor drwm. -Mae'n arian o ran lliw ac mae'n ocsideiddio'n sydyn. -Dw i angen hwfro'r carpad. -Mae'n ymwneud â'r astudiaeth o ffwythiannau rhifau cymhlyg. -A nawr mae fy mywyd yn wag. -Rhaid i ni fynd â'r gath at y ffariar. -Dw i 'di cysidro hynny hefyd. -Cyflwyniad o ymadroddion Cymraeg, Gaeleg, Gwyddeleg a Llydaweg ar gyfer defnydd pob dydd. -Roedd hi'n defnyddio naill ai baglau neu feic dair olwyn wedi'i addasu. -Gwyrdd, glas neu wyrddlas yw lliw'r llygad. -Defnyddir canrannau i fynegi rhan gymarebol o gyfanswm. -Llyfr dwyieithog ar gyfer y Nadolig. -Ychwanegwch bupur du, halen os oes angen, a llond llwy fwrdd o sudd lemwn. -Gellir dweud fod yr hecsagon rheolaidd yn bolygon hafalochrog ac yn bolygon hafalonglog. -Cŵl, dyma'i lun e lan ger Parc y Llyn. -Casgliad amrywiol o ddywediadau gan Dewi Jones yw Fesul Tamaid. -Pum stori ysbrydol ac arallfydol. -Dw i methu deall bod pobol yn gwirioni gyda rhywbeth fel 'na. -Mae'r tu fewn yn wyn. -Dwi 'n gwisgo coch, gwyn a gwyrdd i gefnogi'r Urdd heddiw. -Mae 'na lot o chwyn y tyfu yn yr ardd. -Gwyrdd yw lliw'r llygad. -Mae fersiwn clawr meddal hefyd ar gael. -Mae Hefin, ffrind gorau Dan, yn cael syniadau mawr a rhyfedd yn aml. -Mi oedd ganddi lot o fodrwya' aur ar 'i bysadd. -'Dan i'n byw mewn lle braf. -Bu'n fardd yn Llundain ac yn golygu llyfrau. -Dwi'n sibrwd wrth ddweud ond roedd yn braf smwddio crys hefyd. -Does gan Mr. Craven ddim athrawes bersonol ar ei chyfer hi? -Ceir rhagymadrodd ysgolheigaidd gan y golygydd, nodiadau testunol a geirfa. -O fewn pob un o'r rhain ceir cannoedd o flasbwyntiau. -Nofel ramantus yn sôn am ferch ifanc yn ennill serch ac enwogrwydd annisgwyl. -Maen nhw'n gweddu i dir gwastad y dyffryn yn ogystal â thir mynydd. -Mi oedd yna raeadr enfawr i'w gweld drwy'r coed. -Yr oeddwn yn fwy o hen ben nag y tybiai fy mam fy mod. -Gwelwn oddi wrth eu duwch fod ywen ymysg y coed. -Gwas y wlad ydyw'r aelod Seneddol. -Cafodd dwy ddynes ifanc eu hachub gan Wasanaeth Tân ac Achub Gogledd Cymru. -Nid un ymffrostiai yn ei dlodi oedd Ap Vychan. -Mae yna ddrws cefn cul i'r chwith yn y darlun hwn. -Roeddem wedi bod gydol y dydd yn canfasio yn ardal Henllan Amgoed. -Ffermdy ar lethr mynydd Epynt, wedi gweld dyddiau gwell, yw Cefn Brith. -Ehedai ei meddwl ymhellach bellach oddi wrthynt at bethau byd a bery byth. -Taflodd ei chot amdani a cherdded tua'r ddesg wybodaeth. -Efallai felly wnes i ddim amseru fy hun yn iawn -Hoffwn i fedru cymryd rhan yn The Great British Bake Off. -Dewisais y rhain oherwydd bod edrychiad y gwefannau yma wedi apelio ataf -Cynydda newid hinsawdd y risg o danau coedwig mewn ardaloedd fel Lisbon ym Mhortiwgal. -Dangosodd ymwybyddiaeth o sut i amrywio ei iaith lafar yn ôl y gynulleidfa -Dwi'n edrych ymlaen at glywed yn ôl wrthych chi. -Mae dolen sain ar gael ar gyfer defnyddwyr cymhorthion clyw -Ddylet ti fod wedi gadael y ffeil gartref -Albert oedd gŵr y frenhines Victoria. -Maent yn darparu amrywiaeth o gyfleoedd i bobl y ddinas ddefnyddio'r iaith -Hefyd fe ellir labelu ffigyrau a hafaliadau -Nodwch beth ydych yn archebu ac yn cyfrifwch y cyfanswm -Buasai amcan o'r niferoedd yn ddefnyddiol ar gyfer cael pris cystadleuol -Mae nifer o ddangosyddion i gael er mwyn mesur datblygiad erbyn heddiw -Mwynheais y sesiwn hon o rannu cerddi a phrofiadau yn arw -Parhewch i ymarfer er mwyn rhoi hwb i'ch sgôr -Gall amcanion yr ymchwil ddod o dan un allan o bedwar categori -Yn anffodus dim ond pennaeth adran sy'n gallu awdurdodi hyn -Mae gan Uruguay dîm rygbi cenedlaethol. -Curais wrth y drws, a daeth merch ieuanc i'w agor. -Ni chredaf fi hynny, beth bynnag. -Bydd Angharad hefyd yn gyfrifol am farchnata'r gwasanaeth newyddion -Defnyddiwch y dŵr yma i olchi ac ymolchi yn unig -Dyma fi'n mentro ateb ar ran y ddau ohonom. -Mae'r Roma neu'r Romani yn bobl grwydrol sy'n tarddu o India. -Mae grwpiau hwb wedi eu sefydlu i roi cymorth ychwanegol i rai dysgwyr -Mae hyn yn dangos sut mae'r ddogfen yn edrych cyn ei hargraffu. -Christine James oedd y ferch gyntaf i fod yn Archdderwydd Cymru. -Mi wnes i ddatblygu fy sgiliau rhesymu wrth ddadansoddi a dehongli gwybodaeth -Y mae tinc melys yr hen brofiad gorfoleddus i'w glywed ynddynt hyd eto. -Roedd ymchwil newydd yn annog artistiaid i arbrofi -Yna, byddent yn creu graff gyda'r canlyniadau -Roedd hi'n bleser eich cyfarfod wythnos diwethaf -Ni fyddai'n bosib cynnal bywyd ar y ddaear hebddo. -Disgwyliwn o hyd iddo dewi, ond nis gwnâi. -Elin yw'r bwli'r flwyddyn yn fy nhyb i -Atodaf bris newydd sydd yn cynnwys y lluniaeth -Byddai'r cynllun yn amharu ar gynefinoedd bywyd gwyllt. -Yng ngwythiennau'r graig acw y mae aur. -Rydym yn mynd i ddefnyddio geirfa i ddisgrifio ble mae cwningen. -Mae'r amseru hyn yn hynod o bwysig -Defnyddiwch lu o dermau daearyddol a chofiwch gyfeirio at enghreifftiau -Mae hi'n ddogfen ddefnyddiol, ac af ati i'w rhannu ag eraill. -Pwy sy'n edrych ymlaen at benwythnos gŵyl y banc? -Peidiwch â rhoi gormod o ddŵr neu bydd y mwydod yn boddi. -Mae'n gyffredin bod teuluoedd tlotach yn deuluoedd un rhiant -Symudodd yn ofalus tuag at y goeden fach ac edrych i fyny. -Maen nhw'n trio cario o'u dwy ar hugain. -Roedd hi wedi chwarae gyda'r eliffantod ifori. -Byddaf yn mesur hyn trwy gadw dyddiadur bwyd -Dyma be ddwedodd fy hyfforddwr amdan fy ngêm -Chwythwyd drws yr ystafell lle roedden nhw'n eistedd ar agor. -Y mae y dull hwn yn fwy rhesymol, ond y mae iddo ei anfanteision. -Mae'r llifogydd wedi gadael llanast difrifol ar eu hôl. -Roedd rhai ohonyn nhw yn lluniau o blant. -Harri oedd y brenin olaf i ennill y goron wrth frwydro -Mae'r mwyar duon a blodau'r grug yn ei nabod o. -Dydi o ddim yn mynd i drwblu'i hun yn dy gylch. -Dwi'n cysylltu i gael arweiniad ar fater cyfreithiol -Dechreuodd Mary chwerthin, a rhedodd ar ei ôl. -Mae batri fy ffôn i'n fflat. -Mae hyn yn rhan annatod o'i ymrwymiad i'r swydd -Sylwem hardded a chryfed oedd y merched. -Roedd Keith Joseph yn un o benseiri Thatcheriaeth. -Roedd rhaid aros yn hir yn yr Adran Ddamweiniau. -Mae'r llyswennod mawr yn hela'r crancod. -Rhaid i mi frysio adre. -Bydda i'n dechrau rhedeg yn yr haf. -Roedd angen miloedd o bryfed sidan i greu'r edafedd. -Yr oedd yn amlwg fod y ddynes mewn cryn gyffro. -Mae'r gŵr wrthi yn clirio'r llestri. -Dowch yma erbyn amser te. -Edrychai ei llygaid yn dreiddgar, llawn cywreinrwydd. -Mae'n amlwg nad ydyn nhw'n barod i reoli cymaint o bobl -Roedd wedi clywed ei fod yn swyddog ifanc iawn oedd newydd ddod o Loegr. -Bu'n rhaid i filoedd o filwyr ffoi o Dunkirk yn ôl i Brydain. -Amcan y Llywodraeth yw cynyddu'r nifer o siaradwyr i filiwn o bobl. -Pam mae copr yn ddefnydd da ar gyfer pibellau dŵr? -Rydych wedi ymateb yn gadarnhaol i'r holl dargedau a osodwyd i chi -Edrychodd ar y got wlân wen drwchus a'r ffrog. -Gadawodd pawb eu chwarae pan ddeallasant fod yno Gymry. -Rwy wedi addo copi o'r adroddiad ar ddoe iddyn nhw hefyd. -Cyhoeddodd nifer o emynau yng nghylchgronau a llyfrau emynau Eglwys Lloegr. -Dychrynwyd hwy i gyd ar y cyntaf. -Mae gwellt plastig yn ddrwg i'r amgylchedd. -Ond mae rhaid cofio fod anfanteision i'r cynllun yma hefyd -Bydd rhaid i fi brynu helmed neu bydda i'n cael dolur. -Caiff ei ddefnyddio i roi profiad o lefydd gwahanol i'r defnyddiwr. -Cyhoeddodd sawl nofel ac mae wedi cyfrannu straeon byrion at flodeugerddi amrywiol. -Yn y bôn ni sy'n gyfrifol. -Yn hytrach na disgrifio trais mae ei nofelau'n canolbwyntio ar gymeriadu. -Cyn y rhyfel bu'n gweithio fel llafurwr. -Ar ôl siopa ar-lein, cofiwch roi'ch adborth. -Ceir un genhedlaeth ac mae'r oedolyn yn hedfan rhwng Mehefin ac Awst. -Defnyddir y ffurf anadlu i reoli asthma yn y tymor hir. -Nodwedd arbennig o'r dirwedd a chymeriad cyffredinol arwyneb y tir yw tirffurf. -Anturiaethau digrif y Parchedig Eilir Thomas, yng Nghyfres Carreg Boeth. -Mae'r siani flewog yn byw yn nail y dderwen. -Roedd yn swm sylweddol ond llawer llai na'i hawliad. -Saif yr etholaeth hon ar ochr ogleddol glannau Afon Clud. -Casgliad o englynion cyfoes sy'n dangos yr englyn yn fyw heddiw. -Mae'n un o ddau ddeg pedwar adeilad sydd ar y Llwybr Treftadaeth. -Dywedodd o wrthi am fynd adra. -Sut aeth dy apwyntiad 'di? -Lliw hyfryd, crys glas, trwsus gwyn a sannau glas. -Blwyddyn Newydd Dda i chwi! -Maent yn cynnwys yr ên uchaf a'r ên isaf. -Mae hwn yn gyfarfod allweddol, dybiwn i. -Gelwir hyn yn ddeddf gymudol lluosi. -Daw'r gair sgwâr o'r siâp o'r un enw, sef y sgwâr. -Nid y ffasiwn diflas o wisgo un lliw i gyd. -Rhoddodd y dyn ddarn o bapur i fi. -Stori am ysbryd hen fôr-leidr yn aflonyddu ar drigolion Plas Nant Esgob. -Gwelodd fwystfil yn nghanol y llyn. -Pa wobr sydd yna ar gyfer yr enillydd? -Dywedir iddynt ddioddef anafiadau seicolegol. -Stori am Ferwyn, y bachgen mwyaf barus yn y byd. -Pe ceisient gadw'r ddwy, anghofient y ddwy. -Olrheinir eu perthynas gyfrinachol a ddigwyddodd flynyddoedd yn ôl. -Nath hyn groesi fy meddwl i heddiw. -Gan hynny mae o'n casáu'r pentrefwyr gyda chas perffaith. -Tybed pwy gaiff pa ran? -Mi fuon ni'n siarad â phlant yng Nghaerdydd. -Ie mae hynny'n swnio fel term mwy agos ati. -Hi oedd llywydd ei dosbarth graddio. -Cyfrol ddwyieithog am y gwleidydd o Gymru. -Dywedir fod yr heddlu'n llawer rhy lawdrwm yn eu hymateb. -Gwelir hyn yn aml, yn enwedig mewn print, gyhoeddiadau, a'r cyfryngau. -Fe wasanaethodd fel Aelod Seneddol a nifer o etholaethau eraill. -Tref fwyaf yr ynys yw Tre Huw. -Wel, pawb ond Tiwdor Rees. -Ar wahân i ryddiaith ysgrifennodd hefyd farddoniaeth a dramâu. -Sut mae dyn i ddelio â'r grymoedd hyn? -Pan ddeallodd ei thad, fe anogodd hi i fynd gam ymhellach. -Mae eu harbenigwyr hefyd yn cynnig cyngor i'r cyhoedd. -Teithlyfr yw Yn ôl. -Fel arfer ceir dau, ac maent yn gweithio fel pâr. -Mae trawsffurfiad geometrig yn dafluniad o set geometrig. -Llyfr ydyw ar addysgu ieithoedd gyda ffocws arbennig ar ddwyieithrwydd ac addysgu ail iaith. -Os dydi o ddim yn cyrraedd mewn pryd fydda i mewn trwbl. -Roedd Margaret yn ddysgwr araf, ac roedd yn casáu mathemateg yn yr ysgol. -Maen nhw'n nodi y dylid ei sgwennu mewn llythrennau bras. -Am weddill ei hoes, byddai'n gwisgo hetiau neu fonedau i orchuddio'i chreithiau. -Sôn am ran o'r cyfrifiadur ydym ni yma. -Mae'r siani fach hefyd yn cysgu dros y gaeaf. -Mae'r hogan bach yn chwythu bybls. -Ceir plac ar y cerrig sy'n cofnodi'r hanes. -Caiff y gwryw ei ddenu gan olau. -Dw i heb wisgo siwt ers dros mis. -Gyda dyfodiad y rheilffordd, tyfodd y dref i fod yn gyrchfan glan môr. -Casgliad o gerddi i blant yw Llais y Berth. -Mae'r ysgrifau wedi ymddangos yng ngholofn olygyddol wythnosolyn y Bedyddwyr, Seren Cymru. -Prif fwyd y siani flewog ydy ysgall a gweiriau. -Wlser ar aelodau pellaf y corff ydy llosg eira sy'n effeithio rhai pobl. -Mi oedd y lle mor llwm. -Byddai'n blaenoriaeth buddsoddi ym meysydd tai a gofal cymdeithasol. -Mae gennym ni'r Cymry bob hawl i waradwyddo ein hunain. -Fyddai neb yn gwybod ble roedd hi. -Cyfrol ar win cartref gan Medwyn Roberts yw Gwinoedd Cartref. -Carw bychan ydy ewig. -Mae wedi dysgu Cymraeg. -Nid ydynt eto wedi ymgyfuno'n blaid wleidyddol. -Gall alcohol gynyddu effaith tawelydd y cyffur. -Neidiodd ar gefn y ceffyl, ac fe aeth i chwilio amdano. -'So fe moyn cawl i swper. -Prin oedd y disgwyl i Davies ennill y sedd yn y lle cyntaf. -Cyfrol sy'n cyflwyno'r ddadl dros ddeddfwriaeth Gymraeg. -Nodir mesur pob emyn, ac awgrymir emyn-dôn addas i bob un ohonynt. -Mi nath y llong suddo. -Yn cynnwys barddoniaeth a darluniau lliw. -Roedd brawd John, David, yn rhagflaenydd iddo fel Cynrychiolydd Ceidwadol Sir Gaerfyrddin. -Ni'n mynd i ga'l te prynhawn. -Fasa fo fath â'r sioe anifeiliaid gwyllt yna yn Efrog unwaith. -Ond nid yn y modd fyddai pawb yn hoffi. -Gall y cerrynt fod yn gerrynt union neu'n gerrynt eiledol. -Mae wedi dadlau dros ddiddymu'r gosb eithaf drwy gydol ei hoes. -Ydi'r cathod wedi cael bwyd? -Roedd yn aelod o Undeb Cymdeithasol a Gwleidyddol y Menywod. -Ond, darganfu glo yno, a gwnaeth ei ffortiwn yn ei fwyngloddio. -Deunydd ar gyfer ei ddefnyddio yn y dosbarth neu'n unigol. -Mae llif clocwedd yn aml yn golygu pwysedd uchel yn Hemisffer y Gogledd. -A oes unrhyw un yn fodlon helpu Siencyn a Dan Draed druan? -Mae modd trosglwyddo'r cyffur i faban trwy laeth y fron. -Ceir cyflwyniad manwl a nodiadau gan y golygydd. -Aeth How-Martyn ar daith o amgylch India yn siarad am reoli beichiogrwydd. -Gall technegau ymlacio hefyd brofi'n ddefnyddiol. -Ychwanegir diwrnod naid ym mis Chwefror bob pedair blynedd. -Oddi yma, yn aml, dedfrydwyd yr oedolion i ailsefydlu yn Awstralia. -Ydych chi'n un da am wneud toes? -Ceir sawl mynydd o'r enw yma. -Ble a'th y gath 'na? -Llyfr taith ar gyfer y Wladfa, Patagonia. -Mae nhw ar gael i staff a stiwdants. -Stori ddoniol yn addas ar gyfer darllenwyr yn eu harddegau cynnar. -Nofel dditectif gan awdur sydd eisoes yn gyfarwydd fel awdur straeon arswyd. -Roeddwn i'n siarad am eich rhagrith chi ar y mater. -Mae'r llyfr hefyd yn cynnwys ugain o weithiau eraill o'r cylch hwn. -Dwnim i fod yn onast 'sa well ti sbïo yn y geiriadur. -Mae gan ffrind Mali, Aled, gi bach newydd o'r enw Titw. -Pob nerth a dymuniad da i ti, dy dad a'r thylwyth. -Mae anadlu hefyd yn cael gwared â charbon deuocsid allan o'r corff. -Gwrthiant hylif ydy gwasgedd. -I ariannu'r cylchgrawn agorodd fwyty llysieuol ym Manceinion. -Tywysydd yn teithio ar hyd rhan o'r Ynysoedd yn gwisgo camera. -Nath y dyn saethu cwningen. -Mae'r arferiad yma, bellach, yn anghyfreithlon. -Ysgrifennodd ar gyfer papur y coleg. -Fe rannodd y deisen rhwng y tri. -Mae'n aelod blaenllaw o symudiad ysbrydolrwydd y menywod. -Bydd y risotto yn llawer gwell os ydych chi'n ychwanegu gwin. -Daeth Cymry eraill ato i'r Eidal, gan gynnwys Gruffydd Robert. -Nofel hanesyddol gan un o brif nofelwyr y Gymru gyfoes. -Sglods hyfryd yn Badell Aur, Y Bala, ar y ffordd fyny i Wrecsam neithiwr. -Arferid defnyddio'r blodau bach melyn fel siampŵ i felynu gwallt merch. -Mae 'y nghefndar i 'di symud i Awstralia. -Yr oedd dy waed yn rhy bur i'w leipio gan y cŵn. -Codwyd y llawr chwe modfedd er mwyn gosod system gynhesu. -Hyd yma, methodd ymchwil gwyddonol â phrofi effeithiolrwydd y llysiau hyn. -Gwnaeth y rhaglen redeg am bedair cyfres. -Cerbyd 'mond blwydd oed. -Yn ogystal, ceir cyflwyniad gan yr awdur ei hun. -Wrth gwrs, Cen oedd ei enw go iawn. -Y cerebrwm yw'r darn fwyaf o'r ymennydd. -Mae'r deisen blât ma'n ffein mam-gu. -Un ffynhonnell ar gyfer geometreg dafluniol, yn wir, oedd theori persbectif. -Mae nhw'n gwneud pasta efo blawd a wyau. -Bu'n gynghorydd ar Gyngor Sir Gwynedd ers blynyddoedd. -Y bore wedyn fe agorodd y ffenest. -Gall pobl sy'n cael ffit epileptig wynebu nifer o broblemau. -Casgliad olaf o gerddi'r diweddar R. Bryn Williams. -Roedd y teulu o gyff Rhys ap Gruffydd, Arglwydd Deheubarth. -Diolch o galon. -Ystyrir grwpiau yn un o brif nodweddion defnyddiol y tabl cyfnodol. -Defnydd posibl arall yw creu tanwydd. -Fe'i haddysgwyd yng Ngholeg Penrhos yng Nghonwy. -Byddaf yn ennill fy mwyd heb wneud drwg i neb. -Mae'n gath annwyl ond swnllyd iawn, ac mae hi eisiau sylw o hyd. -Bu'n aelod o Gymdeithas Frenhinol Llenyddiaeth am rai blynyddoedd. -Dim chwarae teg iddo fo chwaith. -Bydd Michael, Hugh a Matthew yn y cyfarfod hefyd. -Cafodd ei addysg gan diwtoriaid preifat ac yng Ngholeg Eglwys Crist, Rhydychen. -Mae'r iâr ar y nyth yn y stabl. -Roedd eiddew trwchus yn tyfu yn erbyn y waliau. -Roedd yr ystafelloedd dosbarth ar ochr y tirlithriad. -Mae ganddo'r potensial i fod yn gam mawr ymlaen i'r iaith. -Ond fel pob un tro arall, aeth pethau o chwith. -Hanes y Tuduriaid a'r Stiwartiaid wedi ei ddehongli a'i ddarlunio'n gyffrous. -Wi angen glanhau'r llwch gyda dwster. -Mae'n gymrawd Cymdeithas Frenhinol Llenyddiaeth -Y peth cyntaf wnaeth hi oedd rhedeg ddeg gwaith o gwmpas yr ardd flodau. -Drama gan athrawes ddrama yw Hap. -Troes ei wyneb yn goch fel y tân. -Blas yr Haf, cordial ysgawen o flodau Llanbadarn. -Gallwn feddwl fod yr is-olygydd yn rhy ddiog i'w ddarllen. -Dim ond un ffordd sydd i ddianc o'i afael -Doedd hi ddim yn gwybod fod hyn yn wir amdani hi ei hun. -O'n i'n arfer sgwennu llythyrau i Siôn Corn. -Cawsom ni glap mawr ar ôl i'r araith orffen -Mae rhai o'i hymddangosiadau yn y coleg wedi ysgogi dadlau rhyngwladol. -Bydd yn rhaid codi'n gynnar bore fory i ddal y trên i Gaer. -Roedd yn aelod o'r Blaid Arian. -Testun bachog mewn odl, a lluniau lliwgar iawn. -Dilynwyd yr erthyliadau hyn gan afiechyd meddwl dwys a barodd am ddegawd. -Er ei anabledd, ef, y brawd ieuanc, a etifeddodd allu gwleidyddol ei dad. -Effaith hyn yw rhoi argraff o soffistigeiddrwydd i'r araith -Cyhoeddwyd peth o'i cherddi yn y cylchgrawn Y Dysgedydd a olygid gan Emrys. -Newidiwyd hynny gan yr Ail Ddeddf Uno pan roddwyd cyfansoddiad statudol i'r cyngor. -Roedd hi'n fraint gweld y garreg nadd. -Cyn pen y mis, yr oedd ganddo wallt a fuasai'n gredyd i Archdderwydd. -Mae print swyddogol gan artist eleni ar gael yma -Roedd golygfeydd hyfryd dros y penrhyn. -Creadur bychan a rhyw draed drwg ganddo ydoedd Dico. -Yr oedd yr afon yn llydan a'i dŵr yn hallt tan y dyfrddor. -Mae gwahanol fathau o driniaeth yn bodoli, felly. -Llwyth o bobl yn ymuno gydag Yes Cymru. -Roedd ar denantiaid stad y Gaer ofn y meistr tir a'i stiward. -Bu'n aelod o Ganolfan Cywirdeb a Gonestrwydd Cyhoeddus am rai blynyddoedd. -Beth am gerdded o gwmpas yr ystafell a chynnig help os oes angen? -Gyda lluniau'n unig, yn sôn am ddyfodiad babi newydd. -Ymestynnodd y gath cyn ista yn ôl i lawr. -Llyfr gyda lluniau yn egluro'r symudiadau. -Ganwyd Richards yn Nolgellau yn blentyn i Thomas Richards, cyfreithiwr, ac Elizabeth ei wraig. -Daeth awel oer, a meddyginiaeth ar ei hadenydd, o'r môr. -Gobeithio na fydd hi ddim yn rhy boeth yr haf yma. -Claddwyd ei weddillion ym mynwent Glanadda, Bangor. -Atodaf y ddogfen i'r e-bost hwn i chi gael ei darllen -Cafodd yr atgofion am ei thad a'i fywyd trasig effaith fawr ar Lena. -Dyw hwn ddim yn arian nac yn grantiau newydd. -Hoffwn wylio'r gêm heno. -Daeth rhywfaint o'i thymer groes yn ôl iddi wrth iddi gerdded. -Y testun yn orgraff heddiw, aralleiriad o'r cerddi a nodiadau testunol. -Mae nhw'n yn cynnig eu hoffer yn Gymraeg. -Defnyddir rhanbarthau Gwlad yr Iâ yn bennaf at ddibenion ystadegol. -Mi oedd yr hen adfeilion yn dal yno. -Mae cyfraddau clefydau wedi bod yn cynyddu. -Gefais i hoe am rhyw dri mis. -Gallaf ei defnyddio tu fewn yn ogystal â thu allan -Byddaf yn bwriadu edrych arno heddiw a'i addasu -Yr oedd yr hanes wedi ymledu yn gyflym. -Cefais hefyd wythnos o arsylwi yn y cyfnod sylfaen -Dwy ddim yn gwybod dim byd am lefydd felly. -Mae hyn wedi bod yn gymorth i ddatblygu sgiliau adio ac adnabod rhifau. -Rhennir yr iaith ar sail swyddogaethau, er enghraifft gofyn am rywbeth neu ymddiheuro. -Golygwyd y testun ac ychwanegwyd nodiadau, geirfa a mynegai llawn. -Mae fy swydd yn fy ngalluogi i ysbrydoli'r genhedlaeth nesaf o beirianwyr -Fe wnaeth hi sgwrsio, a siarad, a denu'r robin goch. -Cwynai nad oedd ganddo unlle ar y ddaear las i droi iddo. -Roedd hi'n byw yn Abertawe. -Trowyd hwy ymaith ac ychwanegwyd y tir at ffermydd eraill. -Dyna'r fantais roedd Lloegr eisiau cyn yr egwyl -Os wnei di ymarfer, byddi di'n gwella. -Mae'r coed i gyd yn dechrau blaguro. -Roedd y cwningod wedi bwyta'r letys yn yr ardd i gyd. -Mab arall iddo oedd y bardd Gwilym Caradog, William Caradog Evans. -Mae llawer o ynysoedd yn y môr yn gyforiog o fywyd. -Argraffodd yr enw ar lain hir o bapur. -Roedd dau heddwas arall ar gefn y cerbyd. -Maent wedi mynd trwy ormod gyda'i gilydd i dorri fyny. -Cerddasom ill dau yn ein blaenau. -'Swn i'n gwerthfawrogi unrhyw awgrymiadau eraill -Roedd arogl lludw a dŵr golchi lloriau yn llenwi'r awyr o'u cwmpas. -Nofiai o gwmpas er gwaethaf anystwythder ei goes a'i fraich chwith. -Fodd bynnag, ni allai ymarfer fel cyfreithiwr, gan na chaniateid hynny. -Roedd fy wyneb i mor wyn ag eira yn gwylio'r fyddin. -Bydd angen i ni olchi'r ffenestri hefyd. -Gofynnais i ŵr y botymau a fedrai siarad Llydaweg. -Dylech chi fod wedi mynd i'r bryniau bythefnos yn ôl. -O achos yr arglwyddes bu'n fuddugol. -Toc, troes at y doctor. -Cafodd ei addysg yn Ysgol y Cwm, Bron y Maen. -Byddwch yn ymwybodol bod siawns y gall amseroedd y prynhawn rhedeg drosodd -Mae llawer o gyrsiau golff yn yr Alban. -Nid aethom dros y rhiniog y diwrnod hwnnw, a llusgai yr oriau yn araf. -Yr oedd Sam gydag ef yno ar hyd yr amser. -Galwyd ei enw ond wnaeth e ddim clywed. -Gallesid meddwl nad oedd neb yn byw yno. -Mae'n bleser darllen dy fod yn gwneud cynnydd yn y mwyafrif o bynciau -Yn India byddai'r brodorion yn siarad tafodieithoedd gwahanol. -Codai drewdod ofnadwy o'r pydew. -O mor drist oedd hynny. -Ceir ansicrwydd mawr ar hyn o bryd. -Dacw fur y fynwent lle mae'r hen Ann wedi ei chladdu. -Ceir yma aralleiriad o wyth testun, nodiadau manwl a geirfa ddefnyddiol. -Dywedodd toc mai o ddeheudir Ffrainc y daeth. -Dyn mewn siaced frown yn helpu bachgen bach i ddringo i fyny polyn. -Mae'n dal teitl Llywydd Emeritws ar hyn o bryd. -Nod y rhaglen yw dod o hyd i lawer o systemau rhif deuaidd cyffredinoledig. -Gemau eraill oedd yn cael eu chwarae yn Stadiwm R. Stadiwm. -Mae'n darparu prosesu, storio a logisteg i'r diwydiant pysgota. -Mae'r ddau yma'n cael deuawd yn perfformio ar y llwyfan, Maen nhw'n cael hwyl. -Defnyddir amgodio hyd rhediad yn gyffredin i gywasgu'r ffrydiau hir hyn. -Roedd Ann ei hun hefyd yn fam erbyn hyn. -Roedd gerbocsys 'llaw' pedwar a phump gêr ar gael. -Ysgubodd ar draws yr haen ogleddol i Michigan trwy deithwyr ar y dyfrffyrdd. -Rydym wedi bod yn gefnogol erioed o adael y cyfan allan "yn llwyr". -Fe'i gosodwyd yn wreiddiol ar fformat arddull gwrando hamddenol. -Ni chafodd y ffilm ei rhyddhau'n llawn yn sgil adolygiadau gwael. -Mae meddalwedd porwr llais yn cael ei ddanfon mewn amrywiaeth o fedelau gweithredu. -Mae cyllyll ffliwt yn ddelfrydol ar gyfer tasgau bach fel addurno a philio. -Fel arfer, mae llinellau trosglwyddo foltedd uchel yn defnyddio dyluniadau ynysyddion crogiant modwlaidd. -Mae cyffur cyffredin, diazepam, yn ymddwyn fel cynyddwr alosterig yn y safle rhwymo hwn. -Fodd bynnag, gwelwyd cynnydd mawr mewn gwerthiannau ym mhob un o'r teitlau. -Mae llawer o artistiaid wedi recordio eu dehongliadau o'r gân. -Mae nifer o frechlynnau geneuol diogel ac effeithiol ar gael ar gyfer colera. -Mae'r twyni wedi cynnwys arteffactau brodorol. -Mae'r pentref yn honni bod yn man geni Diwrnod Coffa. -Yn yr achos hwn, mae angen i gyfrifwyr ddatgelu'r sefyllfa hon i fuddsoddwyr. -Ar ben hynny, mae'r Sefydliad yn ymestyn y gwasanaeth archwilio clefydau i'r milfeddygon maes. -Cafodd ei haraith ei gefnogi gan chwe Gweriniaethwr rhyddfrydol i gymedrol. -Yn yr un modd, gall cau chwarel neu wella ardal wella prisiau. -Yn ôl y sôn, roedd Della Chiesa wedi cael ei hethol o un bleidlais. -Mae menyw benfelen yn brwsio ceffyl. -Dengys y llyngesau ar gyfer yr holl wledydd sy'n bresennol isod. -Fe'i hystyrir fel cwrt tennis enwocaf y byd. -Mae'n anodd cael gwybodaeth ddibynadwy am yr arf hwn. -Mae myfyrwyr Caerefrog yn symud ymlaen at raddio ar wahanol gyfraddau. -Yn ystod y frwydr hon cafodd ei drywanu â bidog. -Mae ffurfio wyau yn ganlyniad cyplu. -Mae'n amgáu gweriniaeth bresennol Liberia. -Pysgodyn haul mawr yw un o'r prif atyniadau. -Cyn mynd i faes gwleidyddiaeth roedd yn athro ysgol uwchradd. -Mae cemeg asid deugloroasetig yn nodweddiadol o asidau organig halogenaidd. -Cyfeirir at diwbiau â phennau marmor fel “tiger-tops” mewn rhai clinigau hefyd. -Mae iddi'r defnydd o dorri gwrthrychau a darnio moleciwlau cyfagos. -Cafodd ef ac eraill oedd ynghlwm eu crogi gan y Prydeinwyr. -Gall natur y wybodaeth hon amrywio rhwng arbrofion. -Derbyniodd radd meistr mewn cyfraith ryngwladol hefyd. -Mae gŵr Cawcasaidd yn chwarae'r ffidil. -Does dim enw eto i'r deunaw lloeren afreolaidd. -Mae'r gaeafau yn wlyb, yn oer a llwm. -Defnyddiwyd y tevah hwn ar gyfer gwyliau ac achlysuron unigryw. -Cafodd cyfeiliornadau rheolaidd y sgriw eu hystyried. -Eich hen fethiant. -Mae cylchdröwyr yn troi'r cymeriad o gwmpas i gyfeiriad ar hap. -Mae'r weledigaeth hon yn rhan o sylfaen llawer o Academïau Cenedlaethol. -Rwy'n sicr y byddwn yn cofio hynny. -Dilynodd rhagor o dreialon, archwiliadau, a phrofion parodrwydd. -Roedd yn briod bedair gwaith ac wedi magu deunaw o blant. -Mae'i gynhyrchion yn cefnogi cyfathrebu unedig, defnydd o dechnoleg symudol, gemau a cherddoriaeth, -Hefyd, cyflwynwyd yr Unawdwyr archtop. -Defnyddiodd proseswyr cynnar wifren ar gyfer pob darn o led y cyfeiriad. -Roedd hi'n het ffelt feddal, drwsiadus. -Ef yw'r unig ysgrifennydd i'r wasg i wasanaethu dau dymor arlywyddol llawn. -Fe'i ganwyd i deulu cerddorol Americanaidd o dras Iddewig. -Nid oes ganddynt geudod mantell. -Yr un peth yw hyn. -Defnyddir cylchedau gwthio-tynnu yn helaeth mewn llawer o gamau allbwn mwyhäwr. -Ar y llwybr mae model maint llawn o brachiosaurus. -Y canwr yw'r un mwyaf amlwg a lleisiol yn y grŵp. -Nodwyd sawl mwtaniad sy'n achosi afiechydon. -maent wedi bod yn ffyrdd cyffredin o arddangos prydau arbennig mewn tai bwyta. -Mae croeso i bobl ifanc, hen, gwrywaidd a benywaidd yn y ddinas estron. -Daeth y Brifddinas eto yn fan anarchiaeth o'r newydd. -Drwy gydol y daith, chwaraeodd y band yr albwm yn ei gyfanrwydd. -Mae modd cyfnewid tocynnau'n llawn rhwng y ddau weithredwr. -Tâl gan gleientiaid i weithwyr cyflogedig am wyliau swyddogol. -Chi'n gwybod, y gwir fachgen soprano gyda llais mawr a phwerus iawn. -Roedd gan y ddau ddiddordeb brwd mewn seryddiaeth amaturaidd. -Mae ganddo gefndir amrywiol mewn gwaith Gwylwyr y Glannau. -Maen nhw wedi gwneud hynny'n bennaf trwy Sbaeneg. -Roedd rhai awdurdodau lleol yn benderfynol o gadw ysgolion gramadeg. -Yn groes i ddisgwyliadau'r heddlu, ni ddigwyddodd unrhyw gythrwfl o unrhyw fath. -Roeddwn i'n meddwl ei fod yn mynd i fod yn Big George arall. -Mae hefyd yn cefnogi'n frwd integreiddio rhanbarth Gogledd-ddwyrain Asia. -Mae'r ffrâm yn gogwyddo'r injan yn ôl rywfaint. -Defnyddir y term "tâl cyflenwi" mewn achosion eraill, a gall fod yn ddryslyd. -Mae organebau aero-oddefol yn gwbl eplesol. -Mae argae hirgrwn wedi'i adeiladu o graig ddu, gref a soled. -Mae'r ysgol yn rhan o'r fenter "Dinasoedd yn Rhagori". -Dyma'r safle milwrol uchaf ei radd yn y wlad. -Aeth at ei ddyletswyddau newydd mewn ffordd fethodolegol. -arian ac eiddo. -Roedd fel arfer yn gyfwerth â phymtheg rwpî arian. -Rydych chi'n sgriwio mwncïod gwyrdd a'i roi i'n jyncïod. -Cofnododd ddyrchafiad cychwynnol o ddefnyddio barmedr merchyriol. -Cyhoeddir teitlau'r Nadolig bob blwyddyn. -Cymerwch er enghraifft yr osgiladur cwantwm harmonig. -Mae boliau gwyn yn dal i fod gan y llyffantod bychain hyn. -Nid yw sail y "tonalpohualli" yn hysbys. -Cafodd y Terfysgoedd Colera eu hatal yn ymosodol gan y llywodraeth tsaraidd. -Mae gan yr orsaf ei blatfform ynys gwreiddiol a'i adeilad gorsaf hyd heddiw. -Gosodwyd cleddyf uchod. -Gwrthdroad y pedwerydd ostinato cromatig o'r symudiad agoriadol ydyw. -Mae grŵp o bobl ifanc ag offerynnau ar lwyfan. -Yn gyffredinol, nid ydynt wedi cael eu harestio am wneud hynny. -Mae menyw yn cerdded gyda beic glas ar draws ffordd. -“A faint fydd hynny?” “Tua un bunt ac un ar ddeg,” meddai. -Mae effeithiau nwyon nerfau yn para'n hir ac yn cynyddu gydag amlygiad parhaus. -Ystyr yr enw yw "un melltigedig" neu "un dieflig". -Mae plant yn ymgynnull yn hapus o amgylch tegan. -Roedd yr adleoliad anferth hwn yn bosibl ar ddiwedd y Rhyfel Oer. -"Ac rydw i eisiau iddo roi dewrder i mi," meddai'r Llew Llwfr. -Dyma lle y cynrychiolodd ef Sweden, -Fe'i cysylltwyd â'r Tueddiad Sosialaidd Rhyngwladol. -Trwy ei hanes, gwisgodd y cwmni ei hunaniaeth Albanaidd ar ei lawes. -Llun priodas, y morwynion mewn porffor, a phob un o'r gweision priodas yn neidio. -Rydym wedi cael cocên, llwgrwobrwyo ac Arsenal yn sgorio dwy gôl gartref. -Er enghraifft, gallai fod gan sefydliadau milwrol heddlu milwrol. -"Ydych chi?" holodd Tom Smart. -Mae ein penderfyniad yn y mater hwn yn ddisyflyd. -Maen nhw'n cael eu meithrin yn bennaf yng nghanolbarth a dwyrain y Môr Tawel. -Am saith mis cynhaliodd brofion helaeth o'i chyfarpar newydd. -Dywed y rhagair y bu'n casglu'r wybodaeth yma ers pan oedd yn fachgen ifanc. -Dyma'r dosbarth sydd ar y cyfan yn cael ei labelu'n anwahanadwy. -Ar y bore cyntaf, deffront a syllu ar donnau cwbl berffaith. -Diddymwyd y bwrdd cyfarwyddwyr a sefydlwyd cyngor ymgynghorol. -Byddent yn dwyn eich eiddo. -Ymhlith y rhain, peswch yw'r effaith andwyol fwyaf cyffredin. -Collodd un palfaliad hefyd. -Mae'n weladwy i'r llygad noeth o dan amodau da iawn. -Fe wnaeth nifer y myfyrwyr wedi'u cofrestru gynyddu'n raddol. -Gwelir brwydr ddramatig rhwng y ddau. -Mae'r glöyn byw hwn yn dangos ymddygiad mudol heidiol yn ne India. -Fodd bynnag, cadwodd Henry deyrngarwch ei ddeiliaid. -Ymatebodd y Milwyr â'r mor-filwyr drwy ddod a thanciau ac hofrenyddion. -Offer glanio sefydlog, gyda rhaff rwber â sbring mewnol, gyda sglefren ôl. -Mae beicwyr yn cario'u beiciau i fyny llethr glaswelltog serth. -Cafwyd adolygiad cadarnhaol arall gan Allmusic. -Yna mae'r un peth yn cael ei wneud gyda'r tomato. -Maent i gyd yn dal i gynnal gweithrediadau ar wahân. -Mae'r llwybrau ar gael at ddibenion cerdded, mynydda, beicio mynydd a marchogaeth. -Roedd ei wrthwynebwyr yn ei ddisgrifio yn ddyn aflonydd â thuedd ynddo i ddadlau. -Mae'r siop hefyd yn cynnwys y swyddfa weinyddol ar gyfer gwerthu tocynnau ac ymholiadau. -Roedd llawer o'r darluniau yn ei weithiau wedi'u seilio ar sbesimenau yn ei gasgliad. -Gwerthu dillad yr oedd ef. -Cynhyrchon nhw belenni traul a gafodd eu defnyddio ar gyfer hediadau trawsatlantig cynnar. -Roedd ar gael drwy archeb ar-lein sawl blwyddyn cyn iddo gael ei ryddhau'n gyffredinol. -Dyma ei bumed nofel a'r olaf, a gyhoeddwyd dwy flynedd cyn ei farwolaeth. -Hefyd mae'r teulu gwag o setiau yn ddigyswllt fel pâr. -Mae un newydd yn cael ei adeiladu. -Mae'r ysgol annibynnol ddyddiol a phreswyl Coleg Llanymddyfri hefyd wedi'i lleoli yn y dref. -Roedd y rhaglen yn cynnwys gweithgareddau arbennig, cyrsiau trwyadl, darlithoedd a chyfres colocwia. -Roedd yr ysgrifen yn dathlu dyfeisgarwch Americanaidd a'r ffordd seml o fyw. -Mae'r Ddeddf wedi'i diwygio sawl gwaith yn ogystal. -Heddiw, mae galw mawr am gychod couta ac maent yn cystadlu'n frwd mewn rasys. -Mae'r Cwmni hefyd yn sefydliad elusennol ac addysgiadol. -Defnyddir miligram am bob litr yn aml mewn meddygaeth ac mewn presgripsiynau meddygol. -Mae'r canlynol yn ymdrin â rheolau sylfaenol chwarae'r gêm. -Fodd bynnag, mae sawl un o ganghennau'r delta wedi eu cysylltu yn ddirwystr. -Ond yn fwy tebygol mae'n perthyn i;r Almaeneg "mahlen" sydd yn golygu "melynu". -Roedd ei rieni ill dau yn aelodau cynnar o'r Blaid Lafur. -Caiff pren y goeden ei ddefnyddio i wneud cribau. -Cynrychiolir cludiant cyhoeddus yn y ddinas gan dramiau a llinellau bysiau'r ddinas. -Gellir clywed samplau sain yma. -Mae eu hymddangosiad yn amrywio yn ôl y tymor. -Ni ddywedir unrhyw beth pellach amdani yn yr hanesion swyddogol. -Roedd ei gerddoriaeth yr un mor addas i wrando arni'n weithredol neu'n oddefol. -Gwadiad o ran swyddogaeth wirioneddol ein milwyr yn Irac. -Ceir hefyd reilffordd fach gul a rheilffordd fodel yn y Ganolfan. -Mae hyn yn ffenomenau ôl-tsunami. -Mae'n debyg i fugail sy'n bugeilio defaid. -Edrychai preswylwyr cyfagos ar y tir hwn fel ffordd o bori eu hanifeiliaid fferm. -Dyma restr o alaethau a ddaeth yn brototeipiau ar gyfer dosbarth o alaethau. -Mae archwiliwr tocynnau rheilffordd mewn trên olif yn gwenu ar gyfer llun -Roedd gwobrau cenedlaethol yn amrywio, ond roeddent o werth ariannol tebyg. -Mae Ardal Ysgol Gorllewin Ada yn cynnig amrywiaeth o ysgolion magnet ledled yr ardal. -Mae'r ddau gampws yn cynnig blwyddyn o astudiaethau ôl-raddedig. -Fe greodd yr haul, y lleuad, a'r sêr. -Mae nifer o Iddewon yn y boblogaeth. -Unwaith eto, nid y cynhyrchydd sy'n defnyddio'r nwydd yn y pen draw. -Dwi wedi tyfu'n fedrus iawn o ran cuddio pethau. -Mae gwersyll tebyg i farics wedi'i lleoli ar ochr ogleddol y maes awyr. -Dyma enghraifft bosibl o ffurfio tafodiaith mewn cân adar. -Ei arbenigedd yw Oes Haearn Ewrop. -Mae'r Archesgob hefyd yn goruchwylio nifer o esgobaethau swffraganiaid Manila. -Llwyddodd i gyrraedd Lloegr yn gyntaf gyda'i gyfrif ef o ymosodiad Prwsia. -Llwyddodd y llyncdwll hefyd i lyncu dau gar gwag wedi'u parcio. -"Da," meddyliodd yr hen fonheddwr. -Mae llawer o ffermwyr yn byw yn llwybrau digwyddiadau dinistriol posibl o'r fath. -Teitl nad oedd yn ei dderbyn. -Fodd bynnag, ni wireddwyd cynlluniau i ddyroddi gorchmynion post Prydeinig ledled Canada. -Roedd pobl yn cael eu stopio hefyd am droseddau sy'n effeithio ar ansawdd bywyd. -Mae tri gŵr yn gweithio ar jobyn weldio. -Mae'r cyngor wedi mabwysiadu codau cynllunio sirol a pharthi cynhwysfawr. -Wir, nid yw hynny'n bosibl. -Roedd gan lawer fowntiau ar longau dariannau torri yn ysgyrion. -Roedd y rhan fwyaf o'r drafnidiaeth dros ddŵr, felly defnyddiwyd cwch trac yn aml. -Mae ci du a chi brown yn rhedeg ar hyd llwybr lludw. -Dechreuodd dynion hefyd wisgo topiau byr, beth bynnag oedd y gamp. -Dyn mewn crys-t gwyn yn glanhau ysgyrion. -Rhywun mewn siaced felen yn eirafyrddio. -Arweiniodd hyn at arestiadau torfol a dienyddiadau cyhoeddus gan yr awdurdodau. -Cynigir gwybodaeth ynglŷn â threnau drwy gyfrwng posteri a ffôn. -Mae gan y brifysgol gampysau mewn sawl lleoliad ym Mhacistan. -Mae hefyd yn rhanbarth poblogaidd ar gyfer mynd mewn llongau pleser. -Fodd bynnag, ar ôl sawl dydd o ymladd, caiff y Cydweithfa ei ddinistrio. -Mae nentydd y cwm yn rhai tymhorol, nid yw'n ddiogel i yfed y dŵr. -Mae'r achos hefyd yn brif ffynhonnell cyfraith yswiriant. -Beth oedd hynna? fe ofynnodd hi, yn ofnus. -Ar ôl y rhyfel, ymsefydlodd gwladychwyr o wahanol rannau o gyn-Iwgoslafia yr ardal hon. -O, na, dim byd felly! -Roedd ei waith yn bennaf ym maes plastigau a chatalyddion. -Coeden fytholwyrdd gonifferaidd yw hi, sy'n tyfu i uchder penodol. -Roedd gan y dref eglwys Gynulleidfaol Almaenaidd ac eglwys Fethodistaidd. -Mae gan y Ganolfan Fasnachu Forwrol bellach gyfran cynulleidfa, cyfradd a chyfraddiad bach, minimol. -Roedd ei mam, Georgette, y cafodd ei henw llwyfan ohoni, yn Babydd Ffrengig. -Mae'r rhisomorffau'n ddu yn y rhywogaeth hon. -Dim ond difetha fy mywyd a wnaeth a doedd gen i ddim cynorthwywyr. -Erbyn hyn mae'n gwneud ymddangosiadau corfforaethol ac areithiau ysgogiadol. -Mae gwrywod yn unweddog. -Mae'r dyn yn y crys pinc yn chwarae'r gitâr ac yn ysmygu sigarét. -Blodyn cenedlaethol yr Alban ydyw. -Gallant gael eu creu o gwmpas cofeb, dynodwr hanesyddol neu brosiect celf. -Ar ôl iddo orffen ymddeolodd o actio. -Gweithiodd hefyd ar opteg a dileu egwyriant golau. -Dwy fenyw mewn trowsus byr sy'n eistedd ar risiau fflat neu dŷ. -Mae yna wahaniaeth mawr. -Caiff yr holl gymhleth ei roi gan yr Adran Amddiffyn. -Newidiodd y ddau liw, edrychodd un yn wyn, y llall yn goch. -Dilynodd ymfudwyr diweddarach i Galiffornia yr un llwybr yn ystod misoedd y gaeaf. -Roedd e'n dal i fod yn agos at yr arlunwyr hyn, fodd bynnag. -Mae tân yn berygl sylweddol mewn trefi cytiau a'r cytiau'n agos i'w gilydd. -O'r cyfnod hwn ymlaen, roedd dylanwad y Salon yn ddiamheuol. -Roedd hefyd yn Llywodraethwr Ynysoedd Sili. -Mae man lansio cychod ac ardal nofio i anifeiliaid anwes yno hefyd. -Mae'r amgueddfa'n cael ei rhedeg yn gyfan gwbl gan aelodau gwirfoddol. -Mae gweithiwr adeiladu yn sefyll ar ben adeilad pren. -Mae'r peilonau'n cynnwys dau gerfwedd maint llawn o benaethiaid Brodorol America. -Gellir tynnu'r sgiliau hyn a gellir eu gwerthu i chwaraewyr eraill. -Yn ddi-rym o drefn broffesiynol, mae ei baentiad yn gwneud argraff lem, soniol. -Roedd hefyd wyliau balŵn awyr poeth a ffeiriau sirol. -Dyn yn cerdded a dynes yn cerdded yn gafael mewn merch fach. -Myfyriwr yn dathlu yn yr eira. -Mae'r “pusilla” penodol yn golygu “bach iawn” yn Lladin. -Rhoddwyd y ffurfweddiadau un prosesydd a dau brosesydd ar waith. -Y cynllun hwn oedd y cynllun olaf ar gyfer annibyniaeth. -Achosodd y digwyddiad hwn orffwylledd yn y cyfryngau. -Ar gorneli, gosodir “meini cornel” i nodi eu hunion leoliad ar y tir. -Oherwydd gwelson nhw eu bod yn rhy hwyr. -Mae pŵer hefyd yn sylweddol ac yn hygyrch. -Mae'r penrhyn yn adnabyddus am ei ynysfor hardd a'i draethau tywodlyd hir. -Gellir chwarae'r fersiwn hwn o'r gêm am ddim. -Yn lle, fe'i defnyddir yn bennaf yn lle ôl-lenwi cywasgedig. -Mae'r Sefydliad Siartredig wedi'i ymgorffori gan Siarter Frenhinol. -Trwy gydol y gyfres mae cymeriadau amrywiol yn medru sgwrsio gyda neu ddeall anifeiliaid. -Yn chweched gystadleuaeth saethyddiaeth yr Almaen, enillodd tîm merched yr Almaen y fedal arian. -Ci du a gwyn ger ci llwyd a gwyn ar garped llwydfelyn. -Gair Lladin ydyw am “morthwyl” neu “gordd”. -Rhyw feddwl mai dyna sut y mae sefydliadau oeddwn i, dyna'r oll. -Gellir adnabod hyn yn hawdd drwy'r staen melyn yn y goleubwyntiau. -Efallai y bydd hefyd yn cynnal profion straen, gan ddefnyddio sefyllfaoedd andwyol. -Maent hefyd fel arfer yn fwy ac yn ddrutach. -Yna fe adferais fy hun. -Yn dair oed, dechreuodd Jones chwarae pêl-fasged mewn parc lleol. -Dwy ddynes oedrannus gyda gwalltiau wedi britho yn sgwrsio. -Mae gan y ddau blatfform fynediad di-ris trwy rampiau o'r ffordd gyfagos. -Mae gan y llyfrgell le yn awr. -Cyfeiriodd yr erthygl olygyddol sawl gwaith at ailuno Korea. -Mae'r orsaf hefyd yn gwasanaethu'r rhai sy'n gweithio yn y ffatrïoedd i'r dwyrain. -Roedd Gweinyddiaethau eraill hefyd wedi'u lleoli ym mhlastai preifat yr ardal. -Estheteg a dyluniad cas gwreiddiol gan Robert Ellis. -Maent yn adnabyddus am eu dygnwch gwych a'u cotiau "metalaidd". -Fe wnaeth ef ysgrifennu, cyfarwyddo, cynhyrchu a chynnal ystod o raglenni dogfen hanesyddol. -Mae'r safle'n gysylltiedig â dadleuon lleol oherwydd llygredd yn ystod gweithrediadau'r ffatri. -Nid yw'r tir fel arfer yn weladwy o'r basleoedd allanol. -Mae'n ffynnu mewn amgylchedd golau, llaith, megis wrth ymyl pwll. -Roedd ei berthynas â Llafur Newydd yn fwy cythryblus. -Mae wedi cael ei gynnal gan Blaid Ryddfrydol Awstralia am ei bodolaeth gyfan. -Mae'r paentiadau hyn yn disgrifio casglu treth am nwyddau penodol, fel olew coginio. -Cafodd ei ymgeisyddiaeth ei blagio bron yn syth gan nifer o gamsyniadau cysylltiadau cyhoeddus. -Yn ddiweddarach bu'n rheoli cwmni buddsoddi preifat. -Dydyn nhw ddim yn gallu byw os rhoddir dŵr ffres i mewn. -Mewn plant, mae gwahanu yn cynnwys amddifadedd mamol. -O ganlyniad, cafwyd sawl brwydr yn yr ardal. -Mae eu pren hefyd wedi'i alw yn “mahogani cnawd ceffyl” ar wahanol amseroedd. -Mae'r term “idu” yn cael ei ddefnyddio mewn dwy ffordd. -Mae pedwar ymddiriedolwr ychwanegol yn cael eu hethol i'r Bwrdd. -Roedd tebygrwydd arall yn ei boeni. -Mynychodd Brifysgol Caergaint a graddiodd gyda Diploma mewn Addysgu. -Mewn sianeli llydan hirsgwar, mae'r radiws hydrolig yn agos at ddyfnder y llif. -Mae pob term yn pwysleisio elfennau fymryn yn wahanol. -Mae'n dal yn aneglur faint ysgrifennodd a golygodd ei fyfyrwyr. -Mae'r erthygl hon yn defnyddio ar gyfer cyflymder golau mewn gwacter un unig. -Mae swyddi eraill i'w cael mewn busnesau lleol ac yn y sector gwasanaethau. -Yr amcan mwyaf cyffredin yw trechu'r holl elynion neu gymeriad giaffer penodol. -Olynwyd ef gan ei fab hynaf, Thomas. -Dywedaf gymaint â hyn wrthych. -Cynorthwyodd i sefydlu'r hyn sydd bellach yn Brifysgol Gregori yn Rhufain. -Y mae'r digwyddiadau yma yn Ddehongliad Doniol, Dehongliad Deuawd, a Rhaglen Dehongliad Llafar. -Mae'r casgliad hwn yn dibynnu ar gael digon o byllau. -Mae dros gan mil o bobl yn cymryd rhan. -Mae'n ffurfio cyfres toddiant silid gyda magnesioriebecid. -Mae dyn gwallt tywyll yn eistedd ar floc colsyn o flaen wal wedi'i baentio. -Fe'i henwyd ar ôl prifddinas Cymru. -Fodd bynnag, perfformiodd Awstria yn well na'r disgwyl. -Bachgen a sgerbwd ar ei grys yn chwerthin. -Roedd yr awdurdodau yn cymryd rhifynnau o bryd i'w gilydd. -Mae safonau ardystio sy'n berthnasol i addasrwydd aer awyren yn cynnwys llawer o ofynion. -Ar lawer o systemau mae'n rhaid nodi'r ddwy i nodi'r diogelwch yn unigryw. -Mae'r nofel yn ymwneud â goruchafiaeth yr unigolyn a “herwriaeth fetaffisegol”. -Ar ôl derbyn statws Parc Naturiol, cafwyd gwared ar y moch. -Ni ailsefydlwyd yr ynys erioed. -Gellir ethol aelodau am nifer amhenodol o delerau. -Mae'r dechnoleg hon yn defnyddio signalau'r ymennydd i reoli swyddogaethau'r cyfrifiadur. -Merch fach yn ymarfer gymnasteg ar drawst cydbwysedd. -Mae hanes byr o'r ysgolion yn dilyn isod. -Nid oes cyngor sefydlog fel gyda chymdeithas Bar Cymru a Lloegr. -Nid oes dim o ardal y pentref wedi'i gorchuddio â dŵr. -Cafod y gêm adolygiadau cymysg yn gyffredinol gan feirniaid. -Mae hi'n hŷn na'i gefell, Lisa, o un munud. -Cefnogodd ymyrraeth Suez hefyd. -Mae siwtiau bolier gyda hwd cysylltiedig ar gael. -Mae'n gallu ysgogi'r economi. -Wedi hynny daeth yn gyfrannwr i sawl cyfnodolyn Americanaidd. -Merch mewn pinc yn mwynhau ei hun yn y parc. -Gellir rhannu'r rhain i ddangosyddion aciwt neu gronig. -Ar un adeg, roedd gan y dref glafdy, siop groser ac ali fowlio. -Mae gan y ddau ryw fil du a thraed pinc. -Mae grŵp o fyfyrwyr crefft ymladd yn ymarfer eu symudiadau. -Mae'n bumed sir leiaf yng Ngogledd Carolina. -Mae ei enwau lleol yn cynnwys "somlatha". -Gwnaed cynlluniau i sefydlu anheddiad yn y dyfodol yn y fan honno. -Darparwyd stêm ar gyfer y tyrbinau gan dri boeler tri-drwm Morlys. -Roedd yn hysbys bod ganddo deyrngarwch "â gwreiddiau dwfn" ei filwyr. -Mae'r llyfr hefyd yn manylu ynghylch eitemau hudolus newydd a bwystfilod newydd. -Fe ysgarodd bedair blynedd yn ddiweddarach. -Daeth Arthur, a enillodd y frwydr, yn ymwybodol o gasineb Morgan tuag ato. -Weithiau bydd edifeirwyr yn penlinio wrth ddweud eu cyffes wrth offeiriad. -Mae'r brifysgol yn cynnig graddau mewn peirianneg ddiwydiannol, fecanyddol, systemau, sifil, drydanol ac electronig. -Roedd ei ymdrechion yn ystyried llawdriniaethau isgroenol megis tenotomeg, sef llawdriniaeth i rannu tendon. -Roedd goroesiad cryfder crai, yn y tymor hir, yn ddymunol. -Mae'r llyfr hefyd yn cynnwys llawer o ddelweddau a ffotograffau yn darlunio'r llyn. -Mae ynni niwclear wedi ei gysylltu'n hanesyddol â materion o ddiogelwch cenedlaethol. -Gwasanaeth Fferm y Gorllewin yw'r unig gwsmer ar y rheilffordd. -Fe wnaeth rhifyn clawr caled y llyfr ddileu'r gwall hwn. -Mewn dosbarthu deuaidd, mae manwl gywirdeb yn gydwedd â gwerth rhagfynegol positif. -Newidiodd i'r allfaes ddwy flynedd yn ddiweddarach. -Mae'r digwyddiad wedi dwyn anfri ar Fwslimiaid ym Malaysia. -Dau ddyn gwallt du yn siarad ar soffa. -Uniongred Gwlad Roeg oedd ef. -Roedd y dylanwad Cristnogol hwn yn amlwg yn llawer o'u harferion hudol. -Gwnaeth gornest nos Lun wireddu ei restriad. -Mae'r rhai sydd â statws amhenodol wedi'u marcio â ? -Gwelodd fymryn o syndod yn ei llygaid. -Methodd yr albwm â dychwelyd y band i'w ogoniant masnachol. -Mae gan bob pennod thema benodol, un gymdeithasol neu amgylcheddol yn arferol. -Daeth y ffermwr o hyd iddi bron yn farw'r bore wedyn. -Roedd gan y ddinas hyd at dair ffwrnais ar gyfer mwyndoddi. -Gwarantodd y gystadleuaeth raglen y tymor i'w holl glybiau sy'n aelodau. -Mae awdur y gân yn anhysbys. -“Helo fenyw fach” meddai ef, a “helo ddyn mawr” atebodd hithau. -Chwaraeodd yn y tîm a gynrychiolodd y Gynghrair Bêl-droed. -Yno y bu hi yn sefydlog am sawl blwyddyn. -Morgrug yw un o hoff fwydydd y frân goesgoch. -Mae gan eraill wifrau sy'n dod o'u cyrff “yn rheiddiol" yn lle hynny. -Felly mae'r gell yn cael ei hyperpolareiddio. -Roeddwn i'n barod i roi cynnig ar unrhyw beth. -Ar yr un pryd roedd Dolin wedi'i gyflogi fel cyfarwyddwr gweithredol dros wasanaethau teulu. -Ychydig yn ddiweddarach, cafodd y rheolau eu diwygio'n ffurfiol i egluro cyfraniad cyhoeddiadau ar-lein. -Ac roedd y dodrefn yn hen a hysig. -Ymosodiad cyffredin ar dystiolaeth ddigidol yw y gellir newid cyfryngau digidol yn hawdd. -Ddiwrnodau'n hwyrach, ceisiodd hunan-laddiad. -Dechreuodd ei gyrfa actio fel plentyn mewn cynyrchiadau llwyfan rhanbarthol a hysbysebion. -Ef oedd hyrwyddwr cyntaf y rheilffordd, y coffi a'r grefft o wehyddu brwyn. -Mae ei waith wedi cael ei berfformio'n fyd-eang. -Mae pump stondin i gyd. -Mae nifer o fenywod mewn mentyll yn cerdded drwy adeilad teiliedig. -Mae hyn yn cyfeirio at y tri chorn a welir ar bennau'r gwryw. -Mae hyn yn debyg i'r defnydd o stôl drochi. -Mae'r ynys tua o'r lan ger pen deheuol y llyn. -Mae'r dyn sy'n eistedd wrth y bwrdd yn posio am lun. -Mae a wnelo'r testun uchod â cham cyntaf ffactorio cromlin eliptig. -Weithiau mae e'n awgrymu'r ffilm y byddai'n well gyda chi fod yn ei gwylio. -Cytunodd swyddogion yr Adran Gyfiawnder bod ei darllediadau yn "ddiniwed". -Roedd gan y naill fersiwn a'r llall yr un rhestr draciau. -Felly dilynir prosesau apeliadol dyladwy i sicrhau rheolaeth y gyfraith. -Mae'n dal i sefyll. -Ni chynhyrchwyd y ffilm erioed. -Mae ar eich stepen drws gydag amseroedd teithio byr -Hefyd llongyfarchiadau i bawb a wnaeth mor dda yn y gystadleuaeth eleni -Os oes gennych unrhyw gwestiwn, mae yna groeso ichi ofyn i mi -Crëwch adroddiad ar fanteision ac anfanteision un ffynhonnell egni adnewyddadwy -Mae siartiau cylch yn weledol gryf ac maent yn cyflwyno'r data yn effeithlon -Yn ei arddegau dechreuodd wneud celf yn ei dref enedigol -Fel arall, gallent weithio ar eu pen eu hunain yng nghartrefi cleifion -Sut allwn wella hyn os cawn siawns eto i gynnal y clwb? -Mae'n gallu cymryd dros wythnos i wrando ar bawb -Cyhoeddodd bethau fel beirniadaeth lenyddol, atgofion a chyfieithiadau -Rydw i wedi bod eisiau astudio celfyddydau perfformio erioed -Bydd newidiadau yn y dyfodol yn dibynnu ar sawl ffactor -Teimlaf yn fwy hyderus i ddelio â sefyllfaoedd amddiffyn plant -Credaf fod y wefan yn ddibynadwy gan ei bod wedi'i hysgrifennu gan arbenigwyr -Hoffwn i gael pizza i swper heno. -Ni all y cyfranogwyr eraill weld y wybodaeth bellach -Ond, mae nifer o gyfansoddiadau yn gadael allan rhai adrannau -Mae darllen gartref yn cael ei gysylltu gyda llwyddiant addysgol -Rwyf yn ddeunaw oed a newydd orffen fy nghyfnod yn yr ysgol uwchradd -Mae angen cyflwyniad i'r traethawd sydd yn esbonio'r cwestiwn -Ditectif dychmygol yw Sherlock Holmes yn nofelau Arthur Conan Doyle. -Mae'r mapiau isod yn dangos canran y toriadau i gyllid pob sir -Ni all colegau gael enwau defnyddwyr a chyfrineiriau ar hyn o bryd -Mae gwybodaeth yn hanfodol er mwyn adnabod bygythiadau a chymryd y camau angenrheidiol -Defnyddiwch y bocs yma i ddangos eich gwaith cyfrifo -Mi ddylech chi ymddiheuro drwy lythyr yn y papur bro -Rho sianel pedwar Cymru ymlaen -Cofia, nid oes angen alcohol i gael hwyl -Mae'r plant yn hoff iawn o chwarae gyda'u teganau Lego. -Disgwylir i boblogaeth y byd gynyddu o bron i bedwar biliwn. -Mi fydd arholiad ymarferol yn rhan o'r dasg yma -Mae Graham yn enw mynydd yn yr Alban yn ogystal ag enw dyn. -Canodd Parry-Williams am y ferch ar y cei yn Rio. -Yn gyntaf, penderfynais i edrych ar fathau gwahanol o fwlio -Dyma ddatganiadau cenhadaeth a nodau ac amcanion gwahanol fusnesau -Ewch ati i greu poster am bwysigrwydd ailgylchu -Ers hynny daeth yn fwy penderfynol i lwyddo yn y celfyddydau -Gall y plant ddewis yr adnoddau gwahanol a wneud cerdyn unigryw eu hun. -Mae'r hysbyseb yn defnyddio ffactor sioc i gael sylw pobl -Rwyt wedi ail ysgrifennu'r stori yn y drefn gywir -Gwnewch allwedd yn eich llyfr i ddangos beth mae'r cylchoedd yn eu dangos. -Diolch i bawb a wnaeth y daith a phrofiad yn llawer mwy pleserus -Felly, mae'n bwysig ar gyfer adeiladu a chynnal dannedd ac esgyrn -Torrwch o amgylch y lluniau a'u lleoli yn yr adran gywir -Gwnaeth deisen hyfryd allan o'r bananas oedd bron â throi'n ddu. -Dewch â dillad addas ar gyfer y gweithgareddau awyr agored -Canmoliaeth yw dweud yn benodol beth maen nhw wedi gwneud yn dda -Mwynheais ddarllen ac astudio'r gerdd yn fawr iawn -Gofynna i Wicipedia Cymraeg pwy yw Arlywydd Yr Unol Daleithiau? -Rydyn ni'n croesawu ymwelwyr i'n hysgol -Mae modd dweud cynnau a diffodd am ‘switch on' a ‘switch off' yn Gymraeg. -Canolbwyntiwch ar y dasg er mwyn creu'r gwaith gorau posib -Pan gyrhaeddais adre, cefais fy mam yn mwmian canu. -Dylai adrannau prifysgol ganolbwyntio ar ddysgu ac addysgu yn lle ymchwil -Gŵyl diolchgarwch yw un o uchafbwyntiau'r flwyddyn -Mae angen gwirio dy waith gan fod un ateb yn anghywir -Mae bore'r nawfed yn iawn - croeso i chi ddod draw. -Sawl hysbysiad sgen i yn Twitter? -Roedd yr awdur yn mynegi barn o blaid arbrofi ar anifeiliaid -Faint o filltiroedd fyddan nhw wedi eu teithio pan fyddant yn stopio? -Mae hyn wedi cadarnhau'r atebion canlynol i gwestiynau'r adolygiad -Bydd sgwariau o ffabrigau gwahanol ar gael er mwyn arbrofi gyda nhw -Nodwch unrhyw syniadau o bethau hoffech ei wneud yn y clwb celf -Rwy'n adnabod sawl dyn o'r enw John Roberts. -Bydd costau teithio a lluniaeth yn cael eu cynnwys -Sori doeddwn i ddim yn gwybod hyn pan ofynnais am yr amserlen -Penderfynais ymchwilio ymhellach i'r agwedd yn dilyn fy adolygiad llenyddiaeth -Edrychwch trwy gatalogau, cylchgronau, gwefannau, hysbysebion neu ewch i siop -Bydd y rhain yn cael eu dewis yng nghyfarfodydd cyntaf y clwb -Rwyt ti'n rhy fach, byddi di dan draed pawb. -Doeddwn i ddim yn gyfarwydd â'r gerdd na'r dôn -Mae wedi bod yn dymor hir -Trafodir y tair strategaeth eto, a diolch i'r llywodraethwyr am ddod -Os gwelwch yn dda, dilynwch y prosiect cymunedol yma -Mae siarad cyn ysgrifennu yn strategaeth fuddiol tu hwnt i blant -Mae disgyblion yn cyfrannu at nifer o elusennau -Heddiw rydw i am siarad hefo chi am fy nheulu -Hefyd mae rhaid iddyn nhw oruchwylio rheolwr y ffair -Roedd Iddewon a charcharorion yn cael eu gweithio i farwolaeth yn y ffatrïoedd -Fel y nodwyd, rydym yn croesawu dulliau arloesol o asesu -Rôl y dyn camera yw rheoli a gweithredu'r camera fideo yn broffesiynol -Ydi hyn yn rhywbeth fedra i wneud drwyddo chdi? -Mae'r cyfuniadau canlynol wedi eu rhestru yn nhrefn darllenadwyedd. -Nid wyf yn ailgylchu na'n ailddefnyddio bagiau plastig -Mae bwydlen sylweddol gan y clwb gyda darpariaeth o'r safon uchaf -Bydd angen tywod, lythrennau mawr, a bwrdd gwyn bach. -Diolch o galon am y sgwrs yn gynharach heddiw -Gofynna i Wicipedia beth yw Deallusrwydd Artiffisial? -Gŵr cydnerth ydoedd ef, ac mewn gwth o oedran. -Am fwy o wybodaeth am sut i gael eich cofnod credyd gweler drosodd. -Er hyn, nid oedd yn hollol lwyddiannus -Llusga'r brawddegau i'w lleoliadau cywir i gymharu celloedd planhigion ac anifeiliaid -Roedd Martin Luther yn un o brif ffigurau'r Diwygiad Protestannaidd. -Diolch i ti Dduw am deulu i'n helpu a rhoi cariad -Roedd tri phwynt o blaid a thri phwynt yn erbyn. -Daethant i adnabod beth yw cerdd acrostig a cheisio ysgrifennu enghraifft eu hunain -Yn sicr y mae wedi denu ein sylw ni i gyd -Digwyddodd i ni gael ychydig o faip, a berwai ein mam y rhai hynny. -Fe lwyddon ni i ddal yr awyren yn y diwedd. -Mae'r National Theatre ar y South Bank yn Llundain. -Bydd tasg estynedig yn cynnwys graffiau bach gyda chwestiynau i fynd efo nhw -Amcan y bardd yw cofnodi'r profiadau fel ffotograff mewn geiriau -Mae'r manylion cyswllt ar gyfer y cwmnïau bws hefyd wedi eu cynnwys isod -Mae'n anghyfreithlon trin myfyriwr yn llai ffafriol oherwydd ei anabledd -Mae'r model yma wedi'i greu gan bobl sydd ag anabledd yn barod -Nid oedd damweiniau i'w cofnodi ar y cae chwarae -Rwy'n hoff iawn o ddramâu Shakespeare. -Gwnewch siart gylch gan ddefnyddio'r data yn y tabl -Faint wyt yn codi am wneud gweithdai gyda phlant? -Rydyn ni'n ceisio datrys cwynion mor gyflym â phosib ar sail anffurfiol -Rwy'n gwybod bod pwyllgorau rhyngwladol yn penderfynu ar enwau gwyddonol -Teimlaf boen iasoer yn saethu lan fy nghefn -Mae actio yn arf er mwyn gwella dychymyg a dyfeisiau a ddefnyddir mewn barddoniaeth. -Y mae gwlad agored brydferth Llanfair a Llanbedr o'n blaenau. -Rhowch wallt a thrwyn doniol ar y wynebau. -Pwrpas y llun oedd cefnogi'r ystadegau a dangos erchyllterau'r digwyddiad -Gofynnir i bawb wisgo'n addas ar gyfer y tywydd -Mae'r cyllid a rhoddwyd fan yma -Rwy wedi newid y dyddiad yn fy nyddiadur. -Gwelir calendr cyfredol ar wefan yr ysgol neu drwy law'r pennaeth -Mae'n bleser cyflwyno'r adroddiad hwn ichi -Diolch am eich e-bost diweddaraf gyda'r manylion diwygiedig -Defnyddiwyd y cyfryngau cymdeithasol i hyrwyddo a marchnata'r digwyddiad -Nid oeddem yn gallu creu cyfrif gyda'ch cyfeiriad e-bost -Dylai tystiolaeth sydd yn cael ei chyflwyno yn yr adran yma adlewyrchu hyn -Diolch yn fawr am wrando ar fy araith -Ysgydwais ei llaw a cheisio mynegi mewn symudiadau mor ddiolchgar y teimlwn -Cymysgir caws trwy hufen, melynwy a meringue i greu gwead unigryw i'r gacen. -Atodaf gopi o'r anfoneb ar gyfer y cneifio -Yna gosodwch haen o'r defnydd dros y twll yn y bocs -Mae hwn yn faes sydd yn symud yn ei flaen yn gyflym. -Roedd pensaernïaeth hynod i'r dref. -Mae'n debyg eu bod nhw wedi llusgo'r cerrig ar geir llusg. -Cleciodd Dic ei chwip gan wenu. -Aethom ymlaen at y tŷ. -Torrodd Catrin i wylo, yn fwy o ddigofaint na dim arall. -Dyna oedd fy uchelgais ers pan oeddwn i'n ddeg oed. -Mae'r dymheredd yn uchel iawn am fis Mawrth. -Mae tymheredd y cerrynt oer yn peri i'r lafa ffrwydro. -Ym mhen eiliad neu ddau, yr oedd Pero wedi marw. -Pan godai'r fflam, gwelem ninnau'r ystafell. -Dw i ddim yn meddwl y galla i ddod allan gyda chi heno. -Eu hunig bwrpas yw tynnu sylw at bŵer y brenin -Mae hyn yn cefnogi'r data sydd i gael yn y tabl amlder -Roedd cyfleoedd i ddatblygu sgiliau cyfathrebu, cofnodi a chydweithio â'r plant -Arferai Jessica fynd â'i chi am dro bob bore. -Roedd het wellt goryn isel gantel mawr a ruban am dani am ei ben. -Roedd Ray Gravell yn chwaraewr rygbi poblogaidd iawn. -Bydd rhaid i ni brynu pabell newydd. -Y peth olaf welwn oedd y wraig unig, yn gwylio ei buwch. -Roedd yn codi hiraeth am lefrith melys y gwartheg sy'n pori ochrau mynyddoedd. -Bydda i hanner awr yn hwyr i'r cyfarfod. -Y cewri oedd Tudur Jones, Pennar Davies, Dan Thomas a Gwynfor. -Clywai leisiau anniddig yn sibrwd wrthi. -Ymddiswyddodd dros ei gred a chafodd ei garcharu am weddill y rhyfel -Dydi plant ddim yn gallu chwarae'n dawel. -Roedd yn rhaid i'r bobl symud oddi yno i fyw. -Mae'n car yn mynd i gostio'n ddrud i'w drwsio. -I gloi, hoffwn gadarnhau prif neges y ddwy gerdd -Nhw yw'r côr gorau yn y gystadleuaeth. -Byddwn ni'n hwyr i'r cwrdd plant. -Rwy'n atodi fy sleidiau ar gyfer y cyfieithwyr. -Mae angen tywelion glân yn y stafell ymolch. -Gwelsai Dafydd ap Gwilym lawer Morfudd yma. -Rhaid nawr wneud newidiadau a cheisio dileu gwallau iaith -Agorir y llif-ddorau pan fo'r môr yn dod i mewn. -Siaradai am ei senedd, am y cyfreithiau wneir gan yr ynyswyr eu hunain. -Gobeithio y gwelwn fwy o'n gilydd yn y gwasanaeth nesaf ar y cyd -Byddai casgliad byr wedi bod yn dda fan hyn -Cafodd Pws Pwdin bump o gathod bach. -Awn ni i Tesco i brynu bwyd. -Wrth i'r dŵr anweddu mae'n lleihau'r tymheredd y corff -Byddwn ni yn glyd iawn yn ein cartref newydd. -Mae'r plant yno fel arfer gyda'u rhieni. -Cyn bo hir, cefais ergyd yn fy mraich. -Mae cawl tomato yn dda at annwyd. -Tyn yr ede allan dipyn. -Y ferch a lefarodd gyntaf. -A daeth hithau yno rhag blaen. -Aeth yntau o'm blaen. -Yr oedd dail y coed eisoes yn dechrau troi eu lliwiau. -Roedd gan Marian fusnes allforio bagiau croen crocodeil. -Roedd rhai pobl yn cnoi eu hewinedd. -Roedd ganddi wallt hir brown. -Roedd clwt bach o awyr las i'w weld drwy'r ffenest. -Roedd tipyn o chwerthin yn y cefndir. -Y munud nesaf, dyna fo yn i ôl, a gwningen yn i geg. -Mae'n cael hufen iâ i bwdin bob nos. -Pentref bychan ydoedd gynt, a rhyw ddeucant o dai ynddo ar y gorau. -Defnyddia lai ar y car a cherdda mwy. -Roedd y mwclis wedi bod ar goll am chwe chan mlynedd. -Maen nhw wedi darganfod y gloddfa gerrig wreiddiol. -Byddent gyda'i gilydd bob amser. -Cymer ofal, rwan, y penbwl! -Yr oedd Dafydd ar fedr chwibanu arno pryd y gwelodd bwff o fwg. -Roedd hi'n ddiwrnod poeth arswydus yn yr haf. -Bu felly am rai wythnosau, heb gael bod yn rhydd. -Mae tri pot iogwrt yn yr oergell. -Dim ond rhimyn cul o dir sydd rhwng y lagŵn a'r môr mawr. -Deallais innau ei feddwl. -Doedd neb yn edrych ar y teledu. -Safodd y ddynes o'r neilltu, yn syn. -Erbyn hyn, y mae o yn berchen busnes mawr a llawer o arian. -Clywodd sŵn traed yn rhedeg. -Nid oedd chwaith y dilyniant ar draws yr unedau yn ddigon cydlynnus -Rwy'n asesu ac yn rhoi cyngor ariannol i'r cyhoedd -Mae asesu anffurfiol yn gallu cael ei wneud bob dydd yn y dosbarth -Dydi e ddim yn malio am neb. -Roedd ganddi wyneb bach main, corff bach main a golwg sur arni. -Ond yr oedd yn rhaid prysuro ymaith. -Tynnodd gyfres o gartwnau digri. -Ni fynnai Pero fynd ymaith. -Doedd hi ddim eisiau cael merch fach o gwbl. -Tu ôl i ni gwelais gysgod du pigfain ar y prysgwydd. -Daeth y lili yn wrthrych edmygedd y byd. -Rydyn ni'n gwisgo cennin neu gennin Pedr ar Ddydd Gŵyl Dewi. -Mwyaf blin fyddai Mary yn mynd, mwyaf y bydden nhw'n canu. -Heddwch y mynyddoedd, dyna feddyginiaeth meddwl pryderus. -Cawsom hamdden i edrych o'n cwmpas cyn i'r gwasanaeth ddechrau. -Iawn, dim probs, ddylai nhw i gyd fod yno rŵan. -Teulu crwydr oeddynt, ac nid oedd y plentyn yn mynd i'r ysgol. -Rwyt ti wedi defnyddio teitl diddorol i ddenu llygad y darllenydd -Yn aml, pan fydd angen mwy o ddŵr, caiff dŵr daear ei bwmpio. -Bydd yn rhaid i bawb yn y grŵp gymryd eu tro. -Dyma'r rhan ohonom sy'n chwilio am bleser -Dyna lle mae Cymru'n mwynhau'r meddiant. -Gofynnais a oedd ganddynt lyfr yn y tŷ. -Dim ond saith mlwydd oed oedd Delyth. -Cyn hir bydd dau ar yr ystyllen groes, mewn trol glonciog, ar ffordd Llanfyllin. -Pam nad wyt ti'n trwsio'r twll yna yn dy hosan? -Mae o'n lle mawr gwych mewn rhyw ffordd dywyll. -Ydi e mor wael â hynny? -Clywai synau rhyfedd a brawychus. -Dewiswch un lleoliad, gwlad neu ranbarth, gyda dwysedd poblogaeth isel -Mae'r ansawdd adeiladu yn broffesiynol ac yn daclus iawn -Aml y teithia enaid Cymro i fynyddoedd ei wlad. -Penderfynodd ddychwelyd i'r ysgol er mwyn gwella ei gyfleoedd mewn maes arall. -Roedd pobl yn gwisgo dillad rhyfeddol o dan y coed. -Roedd y Parch John Roberts, Llangwm, yn frawd hynaf iddo. -Does ganddyn nhw unman i fynd. -Cof gennyf fod arnaf ofn myned adref wrth feddwl am brofedigaeth fy mam. -Roedd cemegau ac offer electroneg ym mhlith ei brif allforion. -Ddaru o ffeindio cenau llwynog bach wedi hanner boddi yn ei ffau. -Er nad oeddwn yn llwgu rhagor, nid oeddwn yn medru gadael heb gael pwdin! -Gwelodd wal hir, gydag eiddew yn tyfu ar hyd-ddi. -Daeth o â'r llwynog bach adre y tu fewn i'w grys. -Gyrron nhw ymlaen ac ymlaen drwy'r tywyllwch. -Mae o'n syrthio mewn cariad â hi y tro cyntaf iddo ei gweld. -Roedd dynion bach glas rhyfedd yn y ffilm. -Bu Cymru'n fuddugol yn y ddwy. -Pwy fydd yn mynd gyda fi? -Yn ugain mlwydd oed dychwelodd i Lanwrtyd gan ddechrau mynychu Ysgol Sul yno. -Dyna lle'r oedd y goeden yr ochr arall i'r wal. -Ar hyn o bryd nid oes manylion pellach am gyflwr y teithwyr hyn. -Roedd y llygaid disglair yn perthyn i lygoden fach lwyd. -Mae o'n dweud na fydd hi byth yn cael gwared arno. -Mae gwiwerod llwyd yn cario llawer o afiechydon. -Mae hefyd restr gyda pharagraff am holl drefi a phentrefi Meirion. -Maen nhw wedi dymchwel y sgrym eto. -Roedd ar y pryd yn aelod o Blaid Gomiwnyddol Prydain Fawr. -Ysgrifennodd ei hunangofiant, ond ni chafodd ei gyhoeddi. -Toc gwelwn feudy megis pe'n edrych arnaf dros ochr rugog y ffordd. -Beth ydi'r lle 'ma? -Cynrychiolir ei waith yn rhyngwladol mewn nifer o gasgliadau cyhoeddus, corfforaethol a phreifat. -Mae'r gyfrol yn adrodd hanes Daniel Owen. -Rydwyf am ddefnyddio'r alcan ethan i'w gymharu gyda'r alcohol ethanol -Fasat ti'n methu cerdded pum milltir. -Pentrefan yng nghymuned Penmynydd, Ynys Môn, Cymru yw Ceint. -Mae'r etholaeth o fewn Dinas Glasgow. -Helo Emyr, sut hwyl? -Tisio cyfarfod yn y caffi? -Nawr, doedd dim ffordd o gyrraedd yr ynys, am fod y llanw i fewn. -A heb fod yn ddiofal am ddim oddieithr yr un peth angenrheidiol. -Mae lliw'r fenyw hefyd ychydig yn fwy gwelw. -Mae hi'n colli ei thymer ac yn rhedeg i ffwrdd. -Mae hi'n disgwyl babi. -Roedd Gwylliaid Llwyni Awstralia yn lladron oedd yn byw ar dir prysglwyn. -Astudiaeth ysgolheigaidd yn ymdrin â phob agwedd ar ddiwinyddiaeth yr Hen Destament. -Symudodd y fyddin Gymreig i ogledd Efrog. -Ewch i'r efail, a gadewch i'r efail wneud pedolau i chi. -Eglwys Newydd yw'r lle i fod. -Hedfana'r gwryw rhwng Mawrth ac Ebrill. -Prif fwyd y lindys ydy coed pîn, cedrwydden a llarwydden. -Ddois i ag anrheg i ti. -Mae 'na frain yn y goedan fawr. -Mae Mali Huws yn caru anifeiliaid. -Mae 'na bentwr o fagasîns ar y bwrdd. -Mae'n gydawdur y gyfrol Eleni Mewn Englynion. -Ffilmiodd, am y tro cyntaf erioed, luniau o wyneb comed. -Ti 'di bod yn Paris erioed? -Llu o bwyntiau trafod yn fama. -Dyma'r bedwaredd gyfrol yng nghyfres Y Derwyddon. -Chwaraeodd rhan flaenllaw yn natblygiad rheilffyrdd De Cymru, Dyffryn Nedd, Llanelli a Llanidloes. -Mwy o ddyddiadur Delyth Haf, a dilyniant i Tydi bywyd yn boen! -Teithia o amgylch y byd ar noswyl Nadolig yn dosbarthu anrhegion i bobl. -Mewn geometreg sylfaenol, defnyddir y gair cyfath fel a ganlyn. -Gwnewch bentwr gyda'r blawd ar eich bwrdd, gan wneud pant yn y canol. -Maen nhw'n peintio y bwrdd yn yr ardd. -Mae hi hefyd wedi ysgrifennu llyfrau i blant, a derbyniodd rai gwobrau rhyngwladol. -Mi gafodd hi andros o fil ar ôl ar bod at y deintydd. -Ganwyd Gwilym Prys Davies yn Llanegryn, Meirionnydd. -Roedd ei mam yn feddyg. -Ceir etholaeth Senedd yr Alban o'r un enw. -Derbyniodd Wobr Cylch Beirniaid y Llyfr Cenedlaethol am Fywgraffiadau. -Mi oedd o'n bencampwr ers talwm. -Wi'n lico'r gân yna. -Profer y byddai mwy o naturioldeb ar eu hysgogiadau. -Penderfynodd ddod yn weithiwr cymdeithasol. -O'dd y blode yn felyn ac yn las. -Ceir carreg o'r enw Carreg Rhian ar bwys y pentref. -Blaswch a phrofwch, ac mae'n debyg y dewch yn ôl am fwy. -Gellir ystyried lluosi rhifau cyfan yn fath o adio ailadroddus. -Mae'r llyfr cyffwrdd a theimlo hwn yn llyfr rhyngweithiol. -Mae'r solidau gwastraff yn teithio drwy'r coluddion mawr. -Mae 'na jac y do yn eistedd ar ben y simne. -Mae coes y gadair 'di torri. -Peidiant â chyfrannu arian tuag at godi a chynnal yr eglwysi. -Darluniwyd Non a Dewi hefyd mewn ffenestr liw cywrain. -Doedd neb wedi gweld nac wedi clywed unrhyw beth. -Bu'n aelod o Gymdeithas Y Naw am rai blynyddoedd. -Cyhoeddodd nifer o nofelau, straeon byrion, traethodau, ac un llyfr ffeithiol. -O'r diwedd daw cyfle i ddial. -Mae hi am goginio bwyd sbesial i swper. -Diolch am yr awgrymiadau, a'r rîtwîtiau. -Mae arwynebau gwrthwynebol yn gyfath. -Fel un sy'n pryderu am fusnesau bach, dw i'n edrych ymlaen. -Mae'n ddydd Nadolig ac mae Berwyn wrth ei fodd! -Mae'r pen-glin yn gymal cyfansawdd cymhleth iawn. -Hwn yw ei gyfweliad cyntaf fel arweinydd. -Roedd ei thad yn beiriannydd ar reilffyrdd yr Almaen. -Pob nerth i bob busnes preifat. -Roedd hefyd yn Arglwydd Lywydd Cyngor Cymru a'r Gororau. -Ceir sawl cenhedlaeth pob blwyddyn. -Wedi i mi gyrraedd yr Amwythig, roedd bws wedi'i drefnu. -Cyhoeddwyd nifer o'r cerddi eisoes mewn amryw gylchgronau. -Yr hyn sy'n gyffredin rhwng y ddau ystyr, yw'r syniad o ochr. -Dyma beth arall hefyd gall y cystadleuydd ei haeru heb ofni cael ei wrthddywedyd. -Parhewch yn yr un modd gyda'r ail hanner. -Cyfrol sy'n adrodd atgofion Griff, y cyn ditectif o Benygroes, Sir Gaernarfon. -Fe aeth y cyfarfod yn ei flaen. -Yr Awdurdod Refeniw Cymreig fydd yn gyfrifol am gasglu'r arian. -Yr oedd Chamberlain yn Rhyddfrydol hyd at fod yn eithafol. -Addas ar gyfer disgyblion uwchradd ac oedolion sy'n dysgu Cymraeg. -Cofiwch ddefnyddio'r hashnod. -Mae llawer o'r darnau a strwythurau cysylltiol yn goesau sydd wedi eu haddasu. -Oddach chdi'n 'i nabod o cynt? -Dŵr am ddim i ti ac i'r ci! -Mae ei garreg fedd yn adeilad rhestredig. -Byrhoedlog fu'r sefyllfa hynny. -I'r de o'r bryncyn mae pentref Rhuallt. -Hedfanodd y robin o'i gangen frau o eiddew ar dop y wal. -Rhan o gyfres o lyfrau i blant. -Sut oedd hi'n gallu amddiffyn creaduriaid rhag gelynion cas? -Croeso i chi ychwanegu gwybodaeth a ffotos. -Stori i blant am ddyn eira. -Yn hytrach, gweithiai gyda'i mam yn swyddfa cofrestru genedigaethau, priodasau a marwolaethau Manceinion. -Credir eu bod yn dyddio yn ôl i Oes Newydd y Cerrig. -Dw i ddim yn ei ddefnyddio mewn llythyr, traethawd neu ddogfen ffurfiol. -Canolbwynt y gymuned ydy pentref bychan Llanfechell. -Mi wneith hefyd hydoddi mewn asid gwan. -Mae ganddyn nhw'r arian. -Dyna fi pan mae rhywun yn trio esbonio sut i ddefnyddio Excel. -Dyma'r swyddogaethau meddyliol uwch. -Tyd 'laen wnei di, 'dan ni'n hwyr. -Rwy wedi gwglo ychydig am y pwnc. -Mae'n bosib troi pethau mlaen a ffwrdd gyda'r symudiad. -'Sgwn i beth yw effaith y lockdown ar fyd natur? -Mae'n nodedig am y gyfrol Nansi Dolwar. -Llyfryddiaeth ysgolheigaidd yn ymwneud â'r iaith Gymraeg o'r cyfnod cynnar ymlaen. -Yn anffodus, archwiliodd am fwy o olew a chollodd ei arian. -Mae Blaidd yn teimlo'n ddig ac mae wedi cymryd ato'n arw. -Rhaid i ni groesi'r afon er mwyn cario 'mlaen ar y llwybr. -Ni welir hi nes dod i'w hymyl, oherwydd mewn pantle y mae. -Yn ôl undeb y gweithwyr, nid ydynt wedi cael eu talu ers dau fis. -Codais fy mhen wrth i'r dagrau ddawnsio i lawr fy wyneb. -Yn y man dechreuodd y dynion ddyfod o'r pwll bob yn llwyth. -Gyda'r gair daeth gwraig ieuanc i'r drws. -Y peth mwyaf anghysurus i'r gweision fyddai cynnau tân yn yr ysgoldy. -Popeth yn iawn, gawn ni sgwrs ar ôl cinio. -Mae'n fwy nag ailgylchu dodrefn a siopau elusen -Ar ôl hynny byddaf yn cyflwyno'r syniad o roi newid o bunt -Mi obeithia i y ca i eto fy nghadw rhag mynd ar y plwy. -Fel menter gymdeithasol, ein nod yw bod yn hunangynhaliol yn ariannol -Maen nhw wedi helpu nifer o siopau lleol a busnesau bach -Nodir hefyd bod cysylltiadau cryf rhwng sgiliau meddwl a dysgu'n seiliedig ar ymholi -Sŵn i fyny -Hyn yw'r diogelwch cyfreithiol uchaf sydd ar gael i adar -Ddylech chi fyth rannu dyddiad geni rhywun heb ei ganiatâd -Cofnodwyd rhai o'r datblygiadau hwyrach yma o fewn y casgliad -Oedd gennych chi amser i gywiro'r testun? -I ba raddau gellir dadlau bod y swydd yn fwy arwyddocaol na hynny -Byddaf yn gofyn am yr atebion ar ôl iddynt orffen. -Rwyf hefyd wedi mwynhau treulio amser gyda phobl mor frwdfrydig ac ysbrydoledig -Mae cadw gwybodaeth bersonol y cyfranogwyr yn gyfrinachol yn holl bwysig -Beth am gymharu màs bwyd arferol â bwyd y gofod? -Rwyf wedi atodi ein costau diwygiedig yn dilyn y newidiadau -Rhyddhaodd Llywodraeth Cymru strategaeth i gynyddu nifer y siaradwyr Cymraeg i filiwn. -Mae'r atgofion afiach yn aros fel gwaddod ar waelod gwydr peint -Roedd hi'n fardd da iawn. -Gwelir patrymau pendant o ran cyflenwad a chymeriant bwyd y byd -Mae nifer o ddulliau neu dechnegau y gall ymarferwyr eu defnyddio yn ddyddiol -Mae'n rhoi ymdriniaeth o le a chynefin fel elfen arwyddocaol, ddylanwadol -Digwyddodd y fyrgleriaeth rhwng dau a phedwar fore Sadwrn. -Mae gweinyddwr cronfa ddata yn cynllunio a chynhyrchu system cyfrifiadur -Fe welwch chi goeden fach hyfryd yn tyfu yng nghanol y llannerch yna. -Pob lwc i'n cadeirydd ar ei noson agoriadol -Rwyt wedi dangos dilyniant clir yn y broses dylunio -Llawn o ddyfroedd oedd Llanymddyfri pan welais i'r lle gyntaf. -Mae bechgyn yn ymateb yn bositif i sialens -Adwaenir Shakespeare fel The bard of Avon. -Rhaid aros am dawelwch, bod yn bwyllog a chymryd amser -Mae hyn yn pwysleisio eto bod bwlch rhwng theori ac ymarfer. -Rwyt ti wedi astudio llawer o drychinebau naturiol sy'n digwydd ledled y byd -Ni chafwyd anafiadau nac unrhyw effeithiau hirdymor arwyddocaol -Hoffwn weithio fel cyfrifydd yn y cyfryngau -Byddaf yn paratoi taflen barod ar eu cyfer yn esbonio natur y prosiect -Gelwid Margaret Thatcher weithiau yn Ddynes Ddur. -Diolch am ateb mor gloi, yn enwedig a chithau ar eich gwyliau -Byddai gan Ap Vychan got laes a dwy boced fawr y tu mewn iddi. -Beth ydi cyfanswm y tatws sydd eu hangen? -Mae rygbi yn fwy cyffrous, gyda gemau rhyngwladol ffyrnig -Mae'r Times, y Guardian, a'r Daily Telegraph yn bapurau newydd o Brydain. -Wyt ti'n gallu dal y drws ar agor am eiliad? -Wedyn, fydd yr hysbyseb yn barod i gael ei chyhoeddi -Datblygodd gwleidyddiaeth llawer yn ystod y chwyldro hefyd -Mari ydw i ac rydw i'n bedair oed -Rwy'n edrych ymlaen at gyfarfod â Dave. -Gall dy fanc lleol hefyd roi cyngor am ddim i ti. -Cyfeiriwch at ffocws llythrennedd yn eich amcanion dysgu os yn bosibl -Gadewch i ni ddynesu ato. -Mae'n caniatáu i chi anfon e-byst marchnata ac ymgyrchoedd wedi'u targedu -Gobeithio eich bod chi a'r plant wedi mwynhau'r ymweliad -Gall hyn ddarwagio'r cyflenwad yn barhaol. -Sipsiwn diwylliedig oedd teulu Abram Wood. -Os oes gennych chi ddiddordeb, cliciwch yma am fwy o wybodaeth -Y mae'n defnyddio'r trosiad i ddisgrifio'r hydref -Mae hyn oherwydd iddi fynychu ymarferion pêl-rwyd yn rheolaidd -Nodwyd na ddylid trin y Gymraeg yn llai ffafriol na'r Saesneg. -Awgrymaf yn gryf ei bod yn ystyried cwblhau tasg arall -Mae'r amserlen hon yn dy siwtio di -Diolch am y cyfle i fynegi fy safbwynt -Helpwch ni i leihau tomenni gwastraff drwy ailgylchu -Rwyf yn deall bod arholiad gyda chi wythnos nesaf -Rheolwr pêl-droed proffesiynol yw Lee Johnson. -Wedi'r clefyd, bu'r tad a'r fam yn ddedwydd lawer awr. -Cwis bach ar ddiwedd y cyfnod er mwyn sicrhau dealltwriaeth y disgyblion. -Mae rhaid cwestiynu effeithiolrwydd y dulliau cymorth a roddwyd yn eu lle -Canwr a chyfansoddwr o Loegr yw Nik Kershaw. -Roedd Ballet Rambert yn gwmni dawns mentrus iawn. -Gwahoddwyd y cadeirydd i ginio gan y Cyngor Sir -Mae yna botensial i fusnesau bach gychwyn ond dim mwy na hynny -Mae'n mynegi barn ar storïau, cerddi a deunydd ffeithiol -Roeddwn i wedi oedi ychydig rhag ofn y byddai modd cynnig rhywbeth mwy sylweddol. -Enwau poblogaidd oedd Claire, Angela a Charlotte. -Erbyn diwedd yr arholiad, yr oedd batri fy ffôn wedi diflannu -Eu hymateb oedd galw ar y stadau cyffredinol -Cwblhawyd deuddeg o holiaduron cleifion cyn dyddiad yr arolygiad -Roedd e'n rhy feirniadol o'r cynnyrch terfynol -Arosasant gyda ni am oriau lawer. -Roeddent felly yn rheoli cynnwys y rhaglenni radio -Dyma rai esiamplau o sut fedra i gefnogi rhieni -Byddai prifysgol yn fwy addas na phrentisiaeth yn yr achos yma -Felly trigolion bro fy mebyd a ddylanwadodd arnaf, nid yr athrawon -Defnyddir iaith gyfoes, ffeithiol, gan ddyfynnu arbenigwyr adnabyddus -Rydw i'n caru yn fawr iawn chwaraeon a gweithgareddau corfforol yn gyffredinol -Enw arall ar yr Almaen dan y Natsïaid oedd y Drydedd Reich. -Gofynnir ichi beidio â cheisio addasu'r ffurflen mewn unrhyw fodd -Mae copi wedi'i anfon i'ch adrannau hefyd -Ond pan gyrhaeddon ni'r car roedd e'n drewi o alcohol -Yng nghanol y goedwig cefais bleser o wrando ar yr eos -Mae hi'n creu ffordd o ehangu busnesau ardraws y byd -Y gân Saesneg gyntaf i mi ei dysgu oedd London Bridge is falling down. -Rydw i'n cofnodi'r disgybl yn y dosbarth ac yn unig -A throstynt oll gwelem y mynydd yn dawel a thlws. -Yr oedd y dydd yn mynd, a'n ffordd eto'n hir. -Mae'r saethiad yn parhau, cyn torri allan. -Beth yw'r technegau mwyaf addawol i hybu'r diwylliant hwn? -Defnyddir thema bywyd gwyllt yn y gyfres o sesiynau. -Mae Tesco, Waitrose, Sainsburys, Asda, Morrisons, Aldi a Lidl yn archfarchnadoedd mawr. -Llwyddodd i sylweddoli bod modd cyfri unrhyw beth -Dyma nhw'n chwarae gemau i helpu datblygu geirfa yn y stori -Nid dim ond barn yr arbenigwyr sy'n cyfri -Bydd eich bywyd yn ddiflas heb cael pethau crefyddol i'w gwneud pob dydd. -Mae'n bwysig cysidro holl opsiynau costau rhedeg, nid yn unig cost prynu -Bydd nyrs ysgol yn mynd i'w thŷ, fel bo angen hefyd -Roedd yr orsaf drenau yn agos i'r gwesty. -Hollywood yw canolfan diwydiant ffilmiau America. -Ond, teimlaf fod hygrededd a defnyddioldeb y ffynhonnell yn gorbwyso'r anfantais yma -Mae yna lawer o gyfleoedd gwirfoddoli amrywiol ar gael -A allwch dorri a gludo'r anifeiliaid yma ar y grid? -Disgwylir i Corbyn annerch y protestwyr yn Llundain. -Edrychai fy mam yn isel o ysbryd a digalon. -Teimlais golli ei ymddangosiad gwrol, ei lais soniarus a'i ffraethineb dihysbydd. -Mae Washington yn enw dinas a thalaith yn America. -Bwriadaf gasglu amrywiaeth o ddata gan gynnwys data safonol a meintiol -Fe fyddaf yn trafod hyn ymhellach yn yr aseiniad -Anadlai gwynt braf o'r Wyddfa arnom wrth i ni deithio ymlaen. -Bydd dyddiadur yn cael ei gyflwyno i'r dysgwyr -Trefnwch y papurau yn ôl y marc uchaf i'r marc isaf -Mae hefyd wedi cael y profiad o ddarllen thermomedr y dosbarth yn ddyddiol -Ynot ti y gorwedd Dewi Sant a Gerald Gymro a William Morris. -Dyna'r union gwestiwn sy'n cael ei ofyn yn y Cynulliad -Mae angen newid y bit ar flaen y dril. -Dyma rai o'r cwestiynau y dylem eu hateb er mwyn datrys y broblem. -Siaradwch am y gair parch a beth mae hyn yn ei olygu -Mae hi hefyd wedi helpu yn y clwb pêl-rwyd ar ôl ysgol -Chdi ydi honna o dan y fan yna -Dyma ddôl wastad eto, a choed o boptu iddi, lle hyfryd ddigon. -Gweithgaredd dynol sy'n achosi'r dirywiad hwn. -Roedd holl olau'r lloer a'r sêr wedi'i gronni'n dân gwenfflam. -Yr adnodd olaf wnes i ddefnyddio oedd yr holiadur -Mae sŵn dychrynllyd gan y motobeics yn sgrialu heibio. -Rhagor o gyfenwau poblogaidd yng Nghymru yw Rees, Price a Richards. -Mae eisiau archwilio ym mhellach er mwyn creu darlun cyflawn -Tynnwch lun o stribed cartŵn am brif ddigwyddiadau'r stori -Symudais ei law yn araf, a chyfodais ar fy nhraed yn grynedig. -Ganed Shirley Bassey yn Tiger Bay, Caerdydd. -Teimlaf fod y profiad yma o fudd i mi ar gyfer y dyfodol -Cyflwynir gwaith yn y dosbarth sy'n cyd-fynd â'i darged -Ffurf ar ap Richard yw'r cyfenw Pritchard. -Mae angen datblygu eich gwerthusiad, a cheisio peidio disgrifio yn unig -Ni chlywir sŵn y plant sydd yn yr ysgol lwyd gerllaw. -Diffiniwyd sawl math o anabledd yn ystod y blynyddoedd diweddar -Anaml, yn sicr, y bydd neb yn torri ar unigedd y fan. -Gellir dosbarthu proteinau yn ôl eu hadeiledd -Hefyd byddaf angen mynediad at drydan er mwyn defnyddio'r sganiwr -Mae'r cysyniad o dalent yn un pwysig yn ein cymdeithas heddiw. -Drafft ydy hwn wrth gwrs i'w drafod, nid y fersiwn terfynol -Rwy'n falch iawn clywed bod 'na ddysgwyr brwd newydd -Cafodd yr albwm adolygiadau da ond ni werthodd lawer o gopïau. -Cafodd amrywiaeth o gyfleoedd i gyflawni pob math o waith celf -Gwrandawais ar dâp myfyrdod gan neud ymarferion anadlu -Meddyliwch am bwy rydych chi'n sôn a pham -Ni wyddai i ble roedd hi'n mynd. -Fydda i lawr mewn munud i ni gael trafod y lluniau. -Mae'n annhebyg fod y celloedd yn gwbl ar gau -Gad fi wybod os ydi'r dyddiadau yna yn gyfleus gyda chdi -Felly dewch i gefnogi'r digwyddiad a rhannwch y neges -Hefyd mae camerâu yn gallu bod mewn ffonau symudol a thabledi -Gwaith cartref eich plentyn yw cwblhau cwestiynau yn ymwneud ag arian -Fe wnes i ddysgu pwysigrwydd cyfathrebu gan ystyried teimladau ac emosiynau'r cleifion -Roedd stad Wynnstay yn un o stadau mwyaf gogledd Cymru. -Mae coginio gan ddefnyddio gwahanol gynhwysion a ryseitiau yn boblogaidd gan bobl gyffredin -Mae nifer o ddatblygiadau gwyddonol a thechnolegol wedi cael effaith ar berfformwyr -I baratoi, torrwch yr orenau yn eu hanner -Mae athletwyr yn eu camddefnyddio i dawelu eu nerfau cyn rhyw achlysur mawr -Roeddet ti wedi blino'n lân erbyn diwedd yr arolwg. -Bydd gwobrau ariannol ar gyfer y ddau bapur gorau a'r poster gorau -Yma, mae'r wladwriaeth yn ceisio annog neu orfodi aelodau cymdeithas gyfan i integreiddio. -Bydd angen i chi fod yn gyfathrebwr hyderus a medrus -Fe dderbyniais gyngor ar gyfer fy nghyfansoddiad oddi wrth fy athrawes cerddoriaeth -Ofnaf mai gwastraff llwyr o arian fydd hyn eto. -Cawn ddefnyddio sawl adnodd neu ychwanegu rhai ein hun -Mae hyn yn fwlch enfawr ac yn ystadegau syfrdanol yn fy marn i -Mae hefyd wedi dechrau egluro patrymau yn y canlyniadau -Byddaf yn mynychu'r cyfarfodydd perthnasol yn ôl yr angen -Rhed llwybr hir rhwng mangoed at ddrws yr eglwys. -Dwi wedi creu amserlen ffilmio ddrafft am y tri lleoliad -Tasg nesaf y ferch yw gorffen ei gwaith dosbarth -Ceid digon o danwydd o fawnog oedd yn y mynydd uwchlaw'r tŷ -Llenwch waelod y botel blastig fawr gyda thywod. -Anaml y bu neb mor hoff o gartref ag Ap Vychan. -Ffoniai eto er mwyn trafod yr adroddiad a cheisio eu perswadio -Mae hwn yn lle perffaith i werthu'r ffilm i gynulleidfa newydd -Rydw i bob tro yn anelu yn uchel ac eisiau'r canlyniad gorau -Wel, mae'n gyfnod cyffrous ar hyn o bryd -Dyma'r broses lle caiff egni ei ryddhau yn y celloedd -Nid yw'r corff wedi cael ei enwi yn ffurfiol. -Er hyn, nid dyma oedd prif fwriad yr ymyrraeth -Ond mae'n rhaid iddo hefyd wneud rhaglenni sy'n cyrraedd cymdeithas fawr. -Wnaeth hi a'i phartner anghytuno gyda sawl parot oedd yn y llun -Mae Deio yn gweithio ar ei liwt ei hun. -Yr oedd ffair mewn cae a oedd yn fendigedig i bawb -Defnyddiwch gwpan sy'n newid lliw wrth i ddŵr poeth gael ei ychwanegu. -Angharad, pa bryd fydd hi'n gyfleus i drafod hyn -Dyma'r cyfnod hapusaf ym mherthynas y ddau ers geni eu plant -Dydi Jean ddim yn hoffi llygod bach. -Rhaid cyflwyno asesiad risg cyn mynd ati i wneud arbrawf -Bydd ugain eiliad i bob person yn y grŵp -Ar y cyfan rwy'n credu bod ein syniadau yn arloesol ac yn greadigol -Seiat ydi lot o bobl dda yn meddwl eu bod nhw yn ddrwg. -Yn y byd amlddiwylliannol hwn roedd cyfnewid diwylliannol yn anorfod -Roedd y syniad yma ar ddiwedd cerdd yn un o gonfensiynau canu'r cyfnod. -Bydd rhaid cymryd hyn i ystyriaeth wrth feddwl am ddulliau casglu data -Un o'm hoff awduron i yw Jane Austen. -Bydd y gwregys yn mynd o gwmpas y wast. -Mae'r cwricwlwm cenedlaethol yn rhoi esiamplau o hafaliadau -Dewiswch eiriau yr ydych yn gyfarwydd â nhw -Os oes genych unrhyw gwestiwn neu broblem, cysylltwch â'r ysgol. -Y cyfrwng a ddefnyddiodd i greu'r ddelwedd oedd acrylig ar gynfas -Mae hwn yn enghraifft o aseiniad o safon dda iawn -Y mae tas o hen wair yn y gadlas yn ymyl, a llwybr glaswelltog. -Dacw fynydd yn codi o'n blaenau; daeth awydd canu drosom. -Mi wna i faddau i chdi, wir yr -Hoffai Gwen rodio ar ei phen ei hun yn y goedwig. -Bydda i'n trio defnyddio bagiau papur yn lle bagiau plastig erbyn hyn. -Mae gwirydd sillafu Microsoft i gael yn Gymraeg. -Nid oes ganddynt gyswllt hawdd â chyflenwad thrydan, y we, ac angenrheidiau eraill. -Collais fy helm ofod, esgidiau gofod, fy nhedi a fy mhêl -Nid yw anghymeradwyaeth yn golygu bod diffyg cariad. -Dylid sicrhau eu bod yn cyfeirio at y dasg wrth drafod eu dewisiadau -Rwy'n gyfforddus iawn wrth weithio gydag unrhyw oedran yn yr ysgol gynradd. -Toc gadawodd yr afonig a minne gwmni ein gilydd -Mae'r adnodd yma yn cynnwys y brif eirfa ar gyfer y thema -Teimlaf fod yna fanteision ac anfanteision o wneud hyn -Diolch anferthol i bob aelod o'r côr am eu cyfraniad neithiwr -Mae'n mynd i fod yn gystadleuaeth frwd rhwng y ddau -Aethon ni am baned i Starbucks tra oedden ni yn y dre. -Pa sgiliau ydych chi wedi ennill yn ystod y cwrs? -Cafodd pedwar disgybl ddau ddarn o waith cartref -Mae'r Daily Mail yn bapur poblogaidd iawn. -Diolch yn fawr am yrru'r dogfennau hyn ymlaen atom. -Does dim cost, ac mae'n hawdd ymuno -Mae hyn yn sicr yn golygu manteision economaidd -Cysylltwch ar bob cyfri ynghylch unrhyw agwedd ar yr achlysur -Roedd y cig yn llawn sudd a blas felly'n werth ei ganmol. -Os hoffech gael y manylion pan fyddant yn barod, cysylltwch â mi -Mae Kevin Costner yn actor, cerddor, cynhyrchydd a chyfarwyddwr ffilmiau o America. -Nid oedd ynof yr awydd lleiaf i fyned i'r gwaith. -Gwelwn yr eglwys yn diflannu o'm golwg yn y pellter ac yn y glaw. -Dim ond Carl, Matt, Jo a Scott oedd ar ôl erbyn diwedd y noson. -Parodd eu hymweliad ollyngdod mawr i mi. -Mae hyn yn dangos sut i ddatguddio colofn yn y ddogfen. -I leihau unrhyw ansicrwydd, penderfynais y byddai cwestiwn enghreifftiol yn fuddiol -Diolch am eich e-bost yn esbonio'r trefniadau -Ydw i wedi ateb fy nghwestiwn neu esbonio'r teitl -Defnyddiwch y penawdau o'ch tabl canlyniadau fel labeli i'r graff -Yr oedd yn disgwyl ei fab adre o Loegr. -Sut fyddech chi'n disgrifio eich hunan o ran eich corff? -Es i â'r dillad i gyd i'r siop ail law. -Mae'r gweilch wedi cyrraedd nôl i Gymru yn gynnar eleni. -Mae'n dal i hercian ar y cae. -Doedd dim digon o eira i sgïo. -Yr oedd seindorf filwrol yn chware alawon pruddglwyfus. -Brysiwch, mae'ch swper chi'n oeri. -Cafodd y biniau i gyd eu chwythu drosodd. -Hoffwn i fynd i'r Eidal am ein gwyliau eleni. -Roedd y drymiau yn amlwg iawn yn y gân. -Cawsom gyfle i sylwi ar wisg y Llydawesau. -Hoffais i'r dawnsio yn fawr iawn. -Gadawodd y plant ddarnau Lego dros y llawr ym mhob man. -Doedd dim llawer o bobl yn y ddarlith. -Does dim angen i ti sibrwd chwaith. -Mae'r ras wedi'i gohirio am fis. -Fydd dim awyrennau yn hedfan fory. -Wyt ti'n meddwl fod y fodrwy yna yn rhy ddrud i ni? -Gymra i goffi os oes gen ti goffi iawn. -Daeth y llun yn enwog yn Ulster. -Dyw hi ddim wedi dod nôl o'r siop eto. -Rwy wedi rhoi'r gorau i gymryd llaeth yn fy nghoffi. -Roedd yr ieir yn pigo hadau ar fuarth y fferm. -Paid siarad mor uchel. -Bydd y siop yn cau mewn hanner awr. -Mae'n pabell ni'n gollwng dŵr. -Fe geision nhw olchi'r adar oedd wedi cael eu dal yn yr olew. -Fe wnaethon nhw ailargraffu Llyfr Mawr y Plant. -Syrthiodd y teledu oddi ar y wal. -Mae yna ddau brif fath o deulu estynedig -Oes yna ffilm newydd yn y sinema? -Ydych chi eisiau tyfu eich busnes gan harneisio holl botensial eich tîm? -Dewch â llond bag o sglodion i mi. -Gellir gweld cynnwys pob tŷ wrth fynd heibio. -Cofiwch fod croeso i chi yma unrhyw bryd. -Doeddwn i ddim yn hoffi'r gân gyntaf. -Fydda i byth yn gwylio'r teledu bellach. -Gwelem y merched a'u crymanau'n dod o'r caeau gwenith. -Pryd mae Dechrau Canu Dechrau Canmol? -Roedd yn rhaid i Gymru fod yn berffaith yn amddiffynnol. -Defnyddion nhw lawer o offer gwyddonol modern yn eu gwaith. -Ers talwm doedd gan bobl ddim gwres canolog yn eu tai. -Cafodd hi frwsh dannedd trydan newydd. -Dim ond brocoli a jeli coch oedd e'n bwyta. -Mae'r esgidiau yma'n rhy fach i mi. -Mae torf Twickenham yn syn, maen nhw'n gegrwth. -Ddo i gyda ti os nad wyt ti eisiau mynd dy hun. -Bydda i'n gwneud teisen sbwng i de. -Mae angen iddo ofalu nad yw'n cael ei ynysu. -Roeddwn i'n hoff iawn o'r rhaglenni Steptoe and son. -Bydd hi'n benllanw am wyth bore fory. -Mae wedi mynd yn ddistaw iawn yn ddiweddar. -Yr oedd y clychau yn canu cnul, a llawenydd priodas yno. -Synnem at uchder y tai, pob un yn bedwar neu bum uchder llofft. -Ar ddau achlysur mae wedi mynd ar goll eleni -Yn fy mhrosiect bydd ymchwil eilaidd yn cael ei defnyddio -Arlunydd o Borthmadog yw Rob Piercy. -Troesom ar y dde i lawr hyd stryd gul uchel. -Diolch byth ein bod ni i gyd wedi cyrraedd adre'n ddiogel. -Roedd y llinellau daearol yn brysur iawn. -Aeth y ffarmwr heibio ar gefn ei dractor coch. -Hoffwn i gael blodfresych gyda saws caws. -Mae'r wybodaeth sy'n dilyn y prifair yn dibynnu ar natur y geiriadur. -Pryd wyt ti'n mynd i osod y gawod newydd? -Daethom i'r côr, dan oleuni lliwiau hen wydr. -Byddai cyfarwyddwr neu reolwr swyddfa yn mynd i'r afael â'r materion hyn -Roedd Stan a Steve yn ddau aderyn digon brith. -Mae Paul yn darlledu o'r tu allan i'r Senedd. -Hwy'n unig sy'n aros o feddiannau Ffrengig brenhinoedd Normanaidd Lloegr. -Mae yna erwau iddo roi'r gic i fewn iddo fe. -Gas gen i goffi powdr. -Wnes i ddim mwynhau'r ddrama rhyw lawer. -Dydi'r dôn yna ddim yn gyfarwydd i fi. -Dychmygwn fod y lloer yn edrych yn ddyfal arnaf. -Rhedodd yn ôl ac ymlaen ar y lan gan chwilio am le i groesi. -Mae Cymru'n dal o fewn trosgais i ennill. -Dyw e ddim yn hoffi i neb ei feirniadu. -Ail ddechreuodd y tonnau luchio'r llong. -Egyr y llyfr trwy gyflwyno chwarae fel modd o ddysgu. -Y mae'n hawdd gweld fod llawer storm wedi bod yn curo arni. -Toc, daeth rhywun i mewn, a gorchymynnodd oleuo cannwyll mewn tôn awdurdodol. -Meddyliwn wrth gysgu'r noson honno fy mod wedi cael Sul hir a llawn. -Daeth y llanw i mewn yn gyflym iawn. -Mae gwin da ar werth yn Lidl. -Gwyddant ym mha farchnad i werthu eu cynnyrch. -Yr oedd hen wraig yn malu siwgr yn brysur. -Gwelsom dŷ teiliwr, a deg neu ddeuddeg o feibion a merched yn gweithio ynddo. -Deffro'r meddwl ddylai addoliad iawn wneud. -Roedd y blodau yn dechrau gwywo. -Bu yno am flynyddoedd heb i neb syllu ar ei thlysni. -Clywn ru'r dyfroedd wrth i'r llong ymdreiglo fel peth meddw drwyddynt. -Dengys ei allu ar faes y gad ei fod yn arweinydd da -Pan ddistawodd y delyn, aethom allan i grwydro drwy'r ystrydoedd. -Felly mae llwyddiant y clwb yn hollol bwysig -Bydd y cwch i Ddulyn yn cyrraedd cyn bo hir. -Os gall hyn aros tan fory Gwener gall Gwen wneud bryd hynny. -Hoffwn i ddod i'ch gweld chi ar ôl gwaith. -Os gwell gennyt ti, yr Undebwr, yw annibyniaeth, cymer dy annibyniaeth. -Sut beth oedd yr awyrgylch gefn llwyfan? -Chwiliem am westy cysurus, lle mae popeth dan lygad y pen-teulu. -Gobeithio i chi dderbyn fy neges ffôn yn gynharach -Rhwng y colofnau yr oedd darluniau mawrion o olygfa ddwyreiniol. -Daeth awel ysgafn i suo trwy'r coed oddi tanom. -Dywedodd fod ganddo'r ddau geffyl gorau yn Llydaw. -Aeth yn nos dywyll arnaf a chollais bob ymwybyddiaeth. -Byddaf yn codi'n fore ac yn gweithio'n galed bob dydd. -Felly fe wnes gyflwyno'r biliau ffôn iddo -Ni wyddent fawr am Lydaw, ond edmygent y dodrefn Llydewig yn fawr. -Mae rhan o'r casgliad yma yn yr amgueddfa -Yr oedd wedi cael tri mis o wyliau i fendio. -Dacw feddrod a chadair garreg sy'n perthyn i'r cyfnod hwnnw. -Diolch am yrru newyddion diweddaraf amdan y tywydd yn eich ardal chi -Eisteddasom ym mhen blaen y llong wrth iddi forio i fyny'r afon. -Yr oedd y llong ar gychwyn, a'u celfi hwythau heb ddod. -Gwelsom lawer o longau Prydeinig wedi dod yno i gael llwyth o datws. -Byddwn i hefyd yn coginio gyda'r cogydd ac yn paratoi pwdinau -Atodaf restr o'r eitemau sydd ar yswiriant yr ysgol -Gwelsom fod mur uchel cadarn yn amgylchu'r ddinas. -Teimlaf lawer mwy cyfforddus gyda safon yr adolygiad llyfr yr wythnos hon -Clywais wrth rywun arall fod yn rhaid gwahanu'r pâr priod. -Nid yw y môr yn brydferthach yn unlle. -Rhaid creu tabl er mwyn cofnodi pa dai bwyta sydd ar y brif stryd -Gwyddem am ŵr yfodd drochion sebon unwaith mewn camgymeriad am laeth enwyn. -Pam oeda chdi isio cymryd rhan yn y gyfres -Nid oedd gwely yn ein hystafell, dim ond blancedi ar y llawr! -Byddai hyn yn annog gweithgaredd corfforol dyddiol rheolaidd i'r plentyn -Yr oedd golwg brydferth ddigymar ar yr ochrau coediog oddi tanom. -A fedrwch chi atgyfnerthu'r neges yma hefyd os gwelwch yn dda? -Cofnodwyd teimladau cadarnhaol a negyddol am ddyfodol yr ardal -Felly, mae hyn yn gysylltiedig â'r model meddygol o anabledd -Cymru heb ei Diwygiad ydyw Llydaw. -Yr oedd mantell y simdde'n ddigon mawr i gysgodi dwsin o bobl. -A oes modd i chi danfon ffurflen gais ac unrhyw fanylion pellach ataf. -Ni thelir rhent na threth ar y môr. -Oherwydd dyna beth mae papurau newydd yn gwneud hefyd -Yr oedd rhywun beunydd yn cynnig i ni bapur newydd. -Gŵr bychan a wyneb hir oedd hwn. -Nid oedd y gyrrwr yn un siaradus. -Rydw i wedi cynnwys y dyddiad ar frig y dudalen. -Clywon ni'r bomiau yn mynd bant wrth ein hochr ni -Y mae'r awyr yn drom ac yn llethol, a'r golygfeydd yn undonog. -Mae disgyblion yn cwblhau'r tablau o swyddogaethau yn eu llyfrau -Yr oedd yn y tu mewn iddi gadwyni wedi eu gwisgo â huddygl canrifoedd. -Rydym yn adolygu caneuon a wnaed mewn gwersi blaenorol. -Credir i dri chant o dunelli o blwm doddi yn y tân. -Gallai eiliad o amynedd fod wedi arbed llawer o ddrwgdeimlad a lletchwithdod -Ar gornel ddeheuol y mur mae castell gyda thŵr dros gan troedfedd o uchder. -Mae'n amlwg fod ganddi wir gariad a brwdfrydedd tuag at y pwnc -Yr oedd mawredd y colofnau'n dylanwadu arnom ninnau er ein gwaethaf. -Gyda'r gair yr oedd y ddau geffyl gwyn ar garlam gwyllt. -Mae'r canlyniadau yn ddiddorol i ddeall arferion ieithyddol y cyhoedd -Dilynwyd ni o'r pentre gan dyrfa o blant. -Tra'r oeddym ni'n sgwrsio, clywem droediad ysgafn ar y llofft uwchben. -Disgwylir i'r disgyblion ddefnyddio rhifau atomig a màs er mwyn cyfrifo -Dechreuodd y trên redeg yn chwyrn gyda godre mynyddoedd Cymru tua Henffordd. -Bore drannoeth yr oedd cerbyd wrth ddrws y gwesty, a gyrrwr ynddo. -Gwanhau ein meddyliau a wnâi, gwneud i'n heneidiau suddo i ddiogi. -Mae hynna wir yn siomedig. -Mae pob picsel yn gynhwysydd gyda haen o hylif ynysol rhwng yr haenau. -Fe ellir disgwyl iddynt ymladd yn erbyn y gelyn cyffredin. -Cyfres mewn cartwnau lliwgar. -Gelwir hyn yn buro wraniwm neu buro plwtoniwm. -Roedden nhw wrth eu bodd yn clywed amdanat ti. -Doeddwn i ddim yn gallu dweud digon wrthyn nhw. -Mae deilliadau Senna yn fath o garthydd ysgogol. -Ar ôl iddo ymddeol ymddiheurodd iddi am ei ymddygiad. -Fel arfer, er bod y pris am ddim, codir am rannau atodol, ychwanegol. -Casgliad o gerddi gyda lluniau lliwgar. -Fe welai ferch ddewr a phrydferth ar gefn ceffyl gwyn. -Oherwydd ei fychander, caiff ei ddefnyddio fel trosiad am rywbeth bychan. -Mae wedi'i ddifrodi gan aredig diweddar. -Roedd yr awel yn cario arogleuon ffres pridd newydd ei droi gydag hi. -Buasai'n dda pe bai'r llinell darged yno hefyd elle. -Gadawyd creigiau anferthol ar y copa ar ddiwedd Oes y Rhew. -A phwy yw ei rhieni? -Aeth y gair allan am y bwyty. -Ond gwneud cawlach wrth beidio gwasgu botwm recordio'r ffôn. -Mi oedd hi'n tresio bwrw glaw. -Enghraifft gyfarwydd yw'r cysyniad o graff ffwythiant. -Cofiwch hefyd i lawr lwytho hwnnw ar gyfer bysellfwrdd Cymraeg. -Yna gyda cyllell finiog torrwch y rholyn yn ddarnau chwarter modfedd neu lai. -Be oedd enw'r grŵp nath sgwennu'r gân? -Blodeugerdd o gerddi i blant yw Mae Modfedd yn Llawer Mewn Trwyn. -Bu'n aelod o Gyngor Cenedlaethol Menywod Seland Newydd am rai blynyddoedd. -Mewn oedolion dynol mae rhwng chwech a saith metr o hyd. -Felly, mewn geometreg, astudir y planau Ewclidaidd a gofod Ewclidaidd. -Bu'n gapten ar y tîm cenedlaethol ar ddau achlysur. -Mae hyn yn sicrhau cydweithio a chysondeb llwyr. -Llyfr syn ymwneud â hanes Llanegryn yw Hanes Plwyf Llanegryn gan William Davies. -Ysgogodd y symudiad hwn hi hefyd i ddechrau ysgrifennu eto. -Cer o 'ma. -Gofynnaf i chi ddatgan yn eich rhaglen nesaf bod honiadau'r dyn yn anghywir. -Mae'n ddiogel ei ddefnyddio mewn beichiogrwydd ac wrth fwydo ar y fron. -Difrodwyd y cwch yn arw a bu'n rhaid angori yn Libanus. -Ydy, mae'n brysur ond yn wych. -Mae'r cyfarwyddiadau isod yn cyd-fynd â'r diagram ar y chwith. -Mae wedi'i orchuddio gyda meini o gwarts. -Llyfryn am gymunedau Cymraeg yw Mewnfudo, Ie; Gwladychu, Na! -Ond dwi wedi clywed canmol ac hoffwn ei weld. -Nid oes gennyt achos i gwyno hyd yn oed yn awr. -Casgliad o ganeuon i blant gan Margaret Lloyd Hughes yw Miri Meithrin. -Gwasanaethodd fel un o lywodraethwyr Coleg Prifysgol Cymru Aberystwyth. -Natur oedd y diddordeb mawr i fi, nid bod yn sdyc mewn dosbarth. -Wnaeth Martha ddim eu gweld nhw o gwbl. -Mae'r gath yn cysgu ar y gwely. -Gall y morter sy'n eu cadw at ei gilydd amrywio'n fawr. -Daliwch i ddarllen. -Weithiau mae elfennau allanol megis crefydd yn effeithio ar ddiet person. -Hyd yma, nid oes tystiolaeth o unrhyw ddifrod i'r eglwys. -Mae llawer iawn o'r cylchoedd hyn yn ymwneud â chladdu gweddillion dynol. -Newyddion trist, newydd glywed ei fod wedi marw. -Maent hefyd wedi comisiynu cabined i ddal y casgliad o Feiblau. -Fe'i haddysgwyd gartref oherwydd ei hiechyd bregus. -Roedd yn arweinydd Seindorf Arian Trefor am flynyddoedd ac yn brifathro'r ysgol leol. -Pan oedd yn blentyn ifanc, roedd hi'n ddarllenydd brwd, ac yn awdur talentog. -Stori i blant am helyntion Mr Arth wrth iddo geisio gwarchod plant. -O'dd 'na lestri brwnt yn y sinc. -Mae'n nofel am glytwaith o berthnasau. -Llyfr dwyieithog yw Y Ddresel Gymreig gan Trefor Alun Davies. -Nofel ddiweddaraf y Prif Lenor o Ynys Môn. -Mae'n dibynnu ar y driniaeth, unrhyw gymhlethdodau ac iechyd cyffredinol y claf. -Mae gan gylch y trac bedwar rhwystr cyffredin ac un naid dŵr. -Lluniwyd gan arbenigwyr ar feicio mynydd. -Gelwir set nad yw'n feidraidd yn anfeidraidd. -Diolch byth ges i sgidie newydd ddoe a dyw sefyll heb fod yn boenus. -Paradwys oedd yr addewid, ond anialwch a gafwyd. -Mae'n debyg mai clawdd a ffos fyddai yma'n wreiddiol. -Fe'i ceir fel arfer ar draed neu ar y dwylo. -Gwsbris oedden nhw yn fy mhlentyndod i. -Y rhif sy'n digwydd amlaf mewn rhestr neu set o rifau yw modd. -Portread o'r bardd o Langollen. -Nawn ni gychwyn y bennod yma drwy ddiolch i pawb am wrando. -Llyfryn dwyieithog am y bardd a'r eicon o Gymro, Dylan Thomas. -Dipyn o record. -Cawsant ddau o blant. -Rhan o dir Ymerodraeth Awstria oedd Pilsen, lle'i ganed, tref ddiwydiannol, lewyrchus. -Ffoaduriaid ydy lluosog ffoadur. -Dydyn nhw eu hunain ddim yn gwybod be maen nhw'n neud. -Ceir cydbwysedd rhwng trafodaethau testunol manwl ac ymdriniaethau cysyniadol. -Rhaid sgriwtineiddio o hyd a chodi ymwybyddiaeth a diddordeb. -Gyrra'r llun 'na i fi plis. -Dyna syniad difyr. -Blodau'r fiaren a chawod fêl ydy prif faeth yr oedolyn. -Yma sefydlodd ei hun fel cyfarwyddwr llwyfan a dechreuodd ddenu sylw rhyngwladol. -Ar ôl colli ei gwaith fel athrawes trodd at yrfa lenyddol. -Faint o arian ti moyn? -Mae pob un o'r gyfres wedi'i enwi ar ôl tafarn. -Treuliodd ei flynyddoedd cyntaf yn farbwr; mae ganddo briod a dau o blant. -Daw allan o'r chwiler ar ôl rhai wythnosau. -Dechreuodd Awen grio yn y car. -Wedi darfod ei brentisiaeth aeth i weithio fel argraffydd yng Nghaernarfon. -Dyma enghraifft sut mae sefydliad yn cydnabod, ymddiheuro a gwneud yn iawn am gamgymeriad. -Wi'n hoffi eu coctêls nhw. -Ceir hefyd fywgraffiad byr o'r arlunydd, a rhestr o'i gasgliadau. -Mae hyn yn rhan o rifyddeg, cangen o fathemateg. -Ti'n nabod fi'n rhy dda Mistar Jones. -Gafon ni salad hefo'n swpar. -Yn ei hamser rhydd, ysgrifennodd farddoniaeth Almaeneg. -Mae'r llinell bron yn Lladin pur. -I Glyn, roedd cwm coll Nant Gwrtheyrn yn lle o atgofion rhyfeddol plentyndod. -Yn anffodus, dyw pob sefydliad heb newid arferion. -Dyma fan cychwyn yr injan. -Fe oedd yn gyfrifol am ei ollwng yn rhydd. -Mae'r cynnwys yn pontio dau ddegawd. -Mewn rhai gwledydd, mae angen gradd bellach i gymhwyso fel therapydd ffisiotherapi. -Na, dw i ddim yn meddwl. -Aroglau yw'r hyn y gellir ei arogleuo. -Cyhoeddodd hefyd nifer o lyfrau a dramâu eraill. -Saif ar y briffordd rhwng Rhuthun a Llangollen. -Ceir craig noeth ar y copa. -Dyna'r tegan calla all plentyn ei gael. -Ar un cyfnod, gwyddom iddo gynllunio i ddianc o'r cyfandir. -Cyfrol yn tynnu sylw at ddigwyddiadau hanesyddol ac arwyddocaol yw Rhywbeth Bob Dydd. -Pan fyddant yn dod ar draws ffrigad Ewropeaidd byddent yn ffoi. -Yr oeddent nawr yn briod, ond doedd hi ddim yn hapus. -Ydy'r cyhoeddiadau traffig yn cael eu cydnabod o gwbl? -Mae'r gair mafon cochion yn cyfeirio at y ffrwyth a'r planhigyn. -Mae'r ddiod yn bigog. -Mae hen fenyw fach Cydweli yn gwerthu losin du. -Felly mae'r ddyled wedi parhau i gynyddu trwy gydol tymor y llywodraeth. -Fe'i canfyddir yng nghanol a de Ewrop a'r Dwyrain canol. -Mae'r rhain yn cael eu hadnabod fel Llys Tretŵr. -O'n i'n meddwl bod yr orsaf radio yn fyw bob bore? -Nid yw'n cofio pwy yw e, hyd yn oed. -Roedd fel petai'r robin mor gyffrous ag oedd hi. -Bu'n aelod o Academi Norwy am rai blynyddoedd. -Mae'r caws ar hyd y llawr. -Yn achos y gofod hyperbolig, mae gan bob llinell ddau bwynt ideal neilltuol. -Mae blodau'r math hwn yn borffor tywyll ac yn felfedaidd. -Dydy'r opsiwn ddim ar gael ar bob dyfais, yn anffodus. -Bu'n aelod o Academi y Gwyddorau a'r Celfyddydau Almaeneg am rai blynyddoedd. -Gelwir hwn yn hylif uwch gritigol. -Fe'i disgrifiwyd gan rai gwyddonwyr fel defnydd realaeth. -Maen nhw bron i gyd yn llysysol. -Bydd y cerbydau hyn yn ymddangos ym maes parcio'r garej. -A'i henw yw Dilys Ddwl. -Mae damcaniaethau ffiseg clasurol yn disgrifio tri dimensiwn ffisegol. -Roedd hi'n gweithio fel llysieuydd traddodiadol. -Mae ei waith yn datblygu ymhellach i'r geometreg solat o dri dimensiwn. -Bu ei brawd Robert Lloyd yn rheithor Aber. -Addaswyd gan Emily Huws. -Ceir carnedd ar y copa. -Os gwneir hyn am gyfnod hir, mae'r ysgarthion yn eithaf caled. -Dail y boplysen ydy prif fwyd y siani flewog. -Mae gen i sychad ofnadwy. -Bu iddynt bedair merch. -Beth yw eich polisi? -Ond un diwrnod roedd yn rhaid iddo fod yn ddewr. -Mae'n effeithiol i ladd llyngyr mewn plant hefyd. -Cyfrol am gynllunio preswylfeydd yw Tai a Chynllunio yng Nghynulliad Cenedlaethol Cymru. -Flwyddyn yn ddiweddarach cyhoeddwyd ei hail lyfr. -Cafodd ei chyhuddo, ei dyfarnu'n euog a'i dirwyo am hyn. -Mae'r cysyniad o newidyn hefyd yn hanfodol mewn calcwlws. -Yr oedd y briodas yn mynd yn ei blaen beth bynnag. -Dywed i Cadog ei hannog i ddychwelyd i Gymru o Gernyw. -Bu hefyd yn byw gyda theulu Thomas am dair blynedd. -Mae ysbryd bach cas a pheryglus yn mynnu aros yn nhŷ Siân a Dafydd. -Gall y problemau sylfaenol hyn gynnwys trawma, heintiau, neu strôc ymhlith eraill. -Mae hi wedi cael cam yn ei hadroddiad o'r feithrinfa heddiw. -Enw arall y teulu hwn o elfennau ydy'r Grŵp Boron. -Am ei drafferth, derbyniodd Rhys lawer o diroedd gan y brenin newydd. -A'th yr awyren ar goll. -Y mae hefyd yn anfantais yn y cynghorau plwyfol a threfol. -Mae geirfa'r gân hon yn nhafodiaith Bro Morgannwg. -Ar gyngor ei deulu a'i gyfeillion penderfynodd torri'r dyweddïad. -Gyda hi fe saethodd gyfanswm o naw ffilm deledu. -Maen nhw'n deud ei fod yn sybsideiddio torri swyddi'n Lloegr. -Mae angen tair gwraig a dau ŵr ar gyfer y cymeriadau. -Cer i gau cwt yr ieir. -Un enghraifft ydy Penisilin. -Dyma'r cowboi cynharaf, wrth gwrs. -Ceir ystyr ychydig yn wahanol mewn rhifyddeg ac algebra. -Daw'r teitl allan o gân werin draddodiadol. -Wi'n meddwl ei bod hi fod i gyrredd am whech. -Cododd Siân o'i chadair gan ddechrau teimlo'n gyffrous ei hun. -Mae'r gostyngiad graddol hwn yn parhau trwy weddill bywyd yr unigolyn. -Mi wnaeth pob peth ddigwydd fel y dywedodd hi wrth y fôr-forwyn. -Adroddiad dwyieithog yn trafod y berthynas rhwng Cymru a sefydliadau'r Undeb Ewropeaidd. -Ceir hen heol Rufeinig gerllaw. -Ond pam mae Lisa'n casáu canhwyllau gymaint? -Dilynodd un ohonynt ei dad yn llywiawdwr Castell Dinbych. -Dyw hi ddim 'ma heno ti'n gw'bod. -Casgliad o ganeuon i blant gan Hawys Glyn James yw Hwyl a Mawl. -Oddan nhw'n ista rownd bwrdd crwn. -Roedd ei mam yn un o'r siaradwyr. -Nath y greindar dorri felly es i'n syth i brynu un arall. -Chwe stori am bum cymeriad brith mewn pentre diwydiannol yng Nghwm Tawe. -Smwddio crys â choler, a gwisgo siaced a sgidiau go iawn. -Bu hefyd yn aelod o'r Academi Awyr a Gofod am rai blynyddoedd. -Darluniau lliw-llawn a du-a-gwyn ar bob tudalen. -Mae'r dyn yn gwisgo tei melyn. -Mae'r crug yma mewn cyflwr arbennig o dda. -Cwmwd yng ngogledd-ddwyrain Cymru ar lan aber afon Dyfrdwy oedd Cwnsyllt. -Enw'r fam fynydd yw Rhobell Fawr. -Roedd y llyfr yn cyflwyno'r syniad o esblygiad drwy ddetholiad naturiol mewn bioleg. -Mae grwpiau papur wal yn categoreiddio'r patrymau yn ôl eu cymesuredd. -Dw i 'di dechra' swydd newydd. -Ti'n clywad sŵn y fan eiscrîm? -Pan fo person wedi colli ei glyw'n llwyr, dywedir ei fod yn fyddar. -Saif Castell y Waun ger y Waun, Wrecsam. -Mae'r gyfrol yn cyflwyno hanes eu tystiolaeth dros dair canrif a hanner. -Y bumed gyfrol yng Nghyfres y Meistri. -Doedd dim byd ond dail gwyrdd tywyll, sgleiniog yn tyfu'n drwch. -Mi oedd yr hen bysgotwr yn edrych yn druenus. -Mae yma ffynnon o'r enw Ffynnon Oswallt. -Gadawodd yn bymtheg oed i gychwyn ei hyfforddiant fel deintydd. -Nofel i'r arddegau am gerddor yn cynorthwyo'r heddlu i ddal gwerthwr cyffuriau. -Fedrai 'im byta'r sŵp am 'i fod o'n rhy boeth. -Roedd yn cefnogi'r sefydliad ac yn gwrthwynebu newid i'r drefn. -Darparodd barciau, ffyrdd, amgueddfeydd, ysgolion a thai ar gyfer pobl dlawd y ddinas. -Gelwir dyfeisiau cyfannol yn ficro reolyddion neu systemau ar sglodyn. -Mae hyn yn caniatáu i bob ymholiad archwilio'r gronfa ddata berthnasol yn uniongyrchol. -Gorchuddiwch y cawl a'i adael i goginio'n ysgafn am rhyw awr. -Cynhwysir astudiaethau ar bynciau sy'n adlewyrchu diddordebau ymchwil eang yr Athro Gwyn Thomas. -Doedd o ddim isio mynd at y deintydd er bod 'i ddannedd yn ddrwg. -Gweithiodd ar y cyd gyda Llywodraeth Catalwnia i hyrwyddo iaith a diwylliant. -Gall hyn fod o ganlyniad i bris uchel y bwyd, a thlodi. -Fel arfer mae ardal yr haint yn boenus. -Cofion i ti o'r pen yma hefyd. -Ceisiwch ddod o hyd i'r prif lythrennau yn y twb tywod. -A fyddech chi mor garedig â chadarnhau bod hyn yn gywir. -Nath y dyn ddeud bod y tŷ ar fin cael 'i werthu. -Mae'n dŵr a adeiladwyd yn bennaf o gerrig. -Dw i 'di dweud wrthat ti fod yr adar i gyd yn ei hoffi. -Yr oedd rhyw ledneisrwydd boneddigaidd ynddynt yn gymysg ag awydd anniwall i siarad. -Fe'i ganed yng Nghasnewydd, a chafodd ei fagu yng Nghaerfyrddin. -Yr oedd yn aroglus, yn flasus, a deffrodd ni. -Maent yn awyddus i gael gwybod beth yw fy nhrefniadau. -Fe gei di bach o gnawd ar yr esgyrn yna. -Cefais lawer gwahoddiad gan y ffermwyr caredig i droi i mewn i gael tamaid. -Penderfynodd gyhoeddi llyfr fyddai'n gymorth i Gymry Cymraeg ddysgu sut i siarad Saesneg. -Sylwais fod gennych chi ddiddordeb mewn gwleidyddiaeth ac yn bwriadu pleidleisio ymhob etholiad -Ac yn y môr y bu ar hyd ei oes. -Eisteddai y gwas a'r meistr ochr yn ochr yn y gweithdy. -Edrychodd yn syn pan welodd Mary, yna cyffyrddodd â'i gap. -Beth yw gwaith curadur mewn amgueddfa? -Mae'r naill a'r llall yn arwain i'r gamlas longau. -Ar ôl hyn, dechreuodd dreulio amser gyda gangiau a dwyn ceir. -Byddai'n dda cael rhannu fy syniadau gyda chi. -Llwyfan rheoli dysgu agored yw Moodle. -Llwyfan rhannu fideos ar y we yw YouTube. -Dyna pam dewisais i Astudiaethau Celtaidd ym mhrifysgol Aberystwyth -Cofiwch gofnodi unrhyw bwyntiau ychwanegol a gwefreiriau sydd ar goll -Gweler yr adrannau unigol am fwy o fanylion -Yn yr un modd, byddai artist angen brwsh, paent a chynfas -Cai'r ardd ei chynnal a'i datblygu yn ystod y gaeaf -Mae'n rhaid meddwl am y ffordd rataf ond mwyaf effeithiol i'w dosbarthu -Rhaid cofio mai canran yw ffracsiwn o gant -Mae gennym wythnos brysur wythnos yma, gyda'n holl ddigwyddiadau i fabis -Edrychai yn dawelach na phan aeth allan, ond yn llawer mwy prudd a gofidus. -Yr oedd yr hen wraig yn dlawd iawn. -Bore drannoeth yr oeddem yn gorfod ail gychwyn i'r môr. -Mae Evans, Lloyd, James a Hughes yn gyfenwau cyffredin eraill. -Fel marc allan o ddeg mi roddaf wyth -Yr oedd ganddo lyfr dan ei gesail, llyfr y llywodraeth. -Mae plant yn debyg i'w gilydd ym mhob man. -Defnyddiwch hyn i'ch helpu chi amcangyfrif canran y siâp sydd wedi'i liwio -Byddaf yn dweud wrth y plant y byddwn yn coginio yn y wers nesaf -Edrychai'r heolydd yn gulach a duach yng ngoleuni egwan y lampau. -Boed i mi bob amser fod yn barod ac yn ddisgwylgar -Yr oeddem yn flinedig iawn, a gorffwysasom mewn distawrwydd. -Mae'r cyfarfodydd hyn i gyd yn canolbwyntio ar y plentyn -Cyn i ni orffen esbonio Calfiniaeth iddynt, canodd y gloch ginio. -Mae'r disgyblion yn tynnu llun a labelu celloedd yn eu llyfrau -Canolbwyntia'r diffiniad o allu ar y nifer o ieithoedd mae unigolion yn siarad. -Does dim dail ar y coed eto. -Teifl pawb yr hyn nad oes arno ei eisiau i'r heol. -Mae pob tref yn Llydaw naill ai ar ben bryn neu wrth enau afon. -Arhosem amser direswm ym mhob gorsaf wledig. -Mae'r sacsoffonydd yn dda iawn. -Yfwyd ato gyda hwyl a chymeradwyaeth fawr. -Mae'r bardd hwn wedi ysgrifennu ei rigwm ar lun englyn. -Gadawodd yr alwedigaeth yn gynnar. -Mae'n bwydo'r bêl o'i afael. -Teneuodd yn arw, a chrymodd ei gefn. -Ond wedi cael blas arni, nid oedd Pero am roi'r gorau iddi. -Pryd fydd swper yn barod? -Digwydd cyrraedd mewn pryd ddarfu mi i'w achub rhag boddi. -Roedden nhw'n dewis yr enillwyr drwy bleidlais bost. -Rwy'n byw ar Ffordd y Coleg. -Rhoes gost o chweugain ar honno cyn darfod â hi. -Mi fynnodd gael cwpan de. -Chwerthynai'n ddi-baid a llawen. -Weithiau mae hanes naturiol a hanes pobl yn cydblethu. -Yr oedd rhai eisoes yn dechrau teimlo ei fod yn haerllug iawn. -Dechreuasant ddod a'r coed a'r rhaffau at fôn y simnai. -Eu gobaith oedd y byddai modd arddangos y bwrdd yn yr arddangosfa. -Ni buasai dim yn y byd yn ei argyhoeddi i'r gwrthwyneb. -Ymollyngodd i'r tonnau gan geisio nofio fel o'r blaen. -Cododd a chariodd Pero yn dyner yn ei freichiau adref. -Y mae acw bwyllgor bob yn eilddydd. -Mae twneli lafa yn ffurfio ogofeydd tanddaearol. -Mae o ar lawr, ac yr ydym ninnau yn mynd i'w gicio allan. -Chwarddodd y Philistiaid gennym. -Os bydd hi'r un fath eleni cheiff hi ddim croeso yma. -Clywodd Dafydd ef toc yn cyfarth yn y pellter a throes ei ben. -Croesais ar draws y corstir at lan y môr. -Awn at ei waith yn ysgrifennu hanes helynt y dref. -Doedd dim lle yn y maes parcio. -Dyma'r mwclis cyntaf o'i fath i'w ddarganfod yn Lloegr. -Yr oedd ei wraig wedi marw ers blynyddoedd. -Welais i erioed mo'r tŷ yn anhrefnus ganddi. -Bûm yno tan amser cau. -Caiff llawer o bysgod loches ymhlith y cwrel lliwgar. -Yr oedd arni ofn ei bod wedi gwneud rhywbeth i'w ddigio. -Aeth blynyddoedd heibio, ac aeth Gruffydd yn ei flaen. -Roedd gan fy nhad gi a'i enw Pero. -Yn sydyn, daeth rhywun drwy'r penwar ac i fyny'r llwybr. -Tybed mewn difrif y byddai englyn y bardd yn y papur. -Yr oeddwn yn cerdded tuag adref gan feddwl am y peth. -Feddyliais i erioed fod y fath beth yn bosibl. -Gwelodd ei lygaid yn cau a'r chwythad olaf bron a'i adael. -Bydd angen glanhau'r mwclis yn drylwyr. -Mae yna le bwyta newydd wedi agor yn Y Bae. -Ar hyd y blynyddoedd, ymdrochai bob bore. -Roeddwn i yn dechrau mynd i anobaith. -Yna bu distawrwydd llethol. -Roedd balchder y perchnogion yn amlwg. -Edrychasant ar ei gilydd. -Roedd hi'n rhy stormus i gyrraedd yr ynys. -Mae'r tonnau yn sgubo'r tywod i ffwrdd. -Ni wnaeth well defnydd o'i ryddid nag o'r blaen. -Prynais i lyfr newydd o ganeuon adar yr ardd. -Byddai popeth bob amser yn lân ac yn daclus. -Ydi'r bêl wedi mynd yn farw – nac ydi. -Aeth yn helynt mor erwin fel yr aeth y bobl yn benben. -Yr oedd Dafydd Morgan wedi ei blesio yn fawr. -Dechreuodd fwrw glaw yn drwm. -Siomodd bawb yn fuan. -Heb sylwi ar y blodau na dim arall, agorodd Morris y penwar. -Fe wnaeth yr amddiffyn sefyll yn gadarn, yn ddi-ildio. -Waeth i mi heb ddeud chwaneg. -Mi fydd fy ngwraig yn methu dallt lle'r ydw i. -Plygwch y blawd i mewn i'r gymysgedd yn ysgafn. -Wylodd Dafydd uwch ei ben. -Euthum â gweddillion y gath allan. -Fe godon nhw bont bren newydd ar draws yr afon. -Fe wthiodd hi flodau hibiscus coch llachar mewn i bentyrrau bach o bridd. -Roedd hyn yn un ffordd o dreulio'r amser, beth bynnag. -Rhedodd adref ar ei gyfer. -Ond fe wnaeth hi feddwl drosto fe llawer iawn wedyn. -Edrychai cadeiriau fel eu bod nhw wedi cael eu gwthio nôl yn sydyn. -Cafodd hi ei chadw allan o'r ffordd. -Cer amdani tra dy fod ti'n gallu. -Does neb eisiau byw yno bellach. -Buasai fyw yn dda ar hyd ei oes. -Ni wyddai Dafydd ddim am y trefniadau. -Mae yno barcdir o'i gwmpas gyda gerddi a choed. -Roedd ambell i un yn darllen hen gylchgronau. -Gwelodd ddyn a dynes yn rhedeg nerth eu traed tua'r gwrych. -Bu raid i mi wneud swper fy hun. -Gwnaeth y gwin iddi deimlo'n gysglyd. -Doedd neb am eistedd yn rhy agos at ei gilydd. -Roedd ganddi le cysurus, da ei byd fel howscipar. -Daeth o'r diwedd at groesffordd. -Cymerodd ei llwy a dechrau bwyta'r uwd. -Bwyteid pedwar neu bum pryd sylweddol bob dydd. -Cafodd Jenkins a Williams eu cyhuddo o fethu sgrymio. -Sawl gwaith aeth y cerbyd dros bont fach gyda dŵr yn rhuthro dani. -Mae Clawdd Coch yn bentref bach ym Mro Morgannwg. -Roedd yn ŵyr i'r bardd Rolant Huw. -Roedd y sioe yn llwyddiant ysgubol. -Yn gynddeiriog, mae'r Iarll yn ei herio i ymladd gornest hyd farw. -Roedd coed ffrwythau yn tyfu a'u canghennau wedi'u clymu ar hyd wal. -Mi wnaeth hynny iddi feddwl am sawl peth hollol newydd. -Fel arfer roedden nhw'n bortreadau o ddynion a merched mewn dillad hen-ffasiwn. -Bu iddynt dair merch. -Bu iddynt ddau fab a thair merch. -Y flwyddyn ganlynol codwyd y gwaharddiad a dechreuodd arwain eto. -Aeth Mary at y drws gwyrdd a throi bwlyn y drws. -Mae e yn yr ardd, rwy'n siŵr ei fod e. -Cafodd ei addysgu yn Ysgol Sir Llanelli. -Mae'n cael ei ddefnyddio yn ogystal fel canolfan addysg a hyfforddiant hedfan. -Ymadawodd â'r ysgol gan ddod yn fugail ar y fferm deuluol. -Bu hefyd yn ymwneud â grymuso menywod ym mywyd economaidd Iorddonen. -Rown i'n meddwl efallai ei bod hi wastad yn bwrw glaw. -Mae o'n deall ei ystyr. -Mae un o'r gerddi wedi'i chloi. -Yn ei dymor cyntaf fel ysgrifennydd daeth â gweinyddiaeth glir ac ymdeimlad o broffesiynoldeb. -Mae'r orsaf mewn lleoliad anarferol sy'n croesi rhan gromlin o'r trac. -Mae'n ddadl sy'n parhau hyd heddiw. -Pan edrychodd hi ar y gwely blodau iddi dyna lle roedd y robin goch. -Mae'n sylweddoli bod rhaid iddo bellach ddod yn ffermwr. -Ddeuddydd ar ôl hyn, agorodd Mary ei llygaid ac eistedd i fyny. -A doedd 'run o'r garddwyr yn cael mynd i fewn. -Gydag ysbryd brawdgarwch Cristionogol byddai modd ail greu'r nefoedd eto ar diroedd Lloegr. -Bu iddynt pum mab. -Theimlodd hi ddim yn ddig pan oedd Martha yn parablu'n ddiddiwedd. -Roedd hi'n meddwl efallai mae dyma'r ffordd Seisnig o drin plant. -Roedd yna luniau ar y waliau. -Mae'r uwd yn blasu'n dda bore 'ma. -Addysgwyd ef yn Ysgol Rhuthun. -Roedd ei dad yn beiriannydd ac yn ffitiwr mewn gwaith haearn. -Gall amlygu mewn bechgyn a merched. -Roedd yn gapten ar dîm Cymru ar chwe achlysur. -Gwasanaethodd hefyd yn y Gwarchodlu Cartref. -Ganwyd Morgan yng Nghaerdydd. -Os ydi'r botymau ar y cefn fedri ddim eu cau nhw dy hun. -Yna rhedodd i lawr y llwybr drwy'r drws arall. -Edrychodd Mary o'i chwmpas. -Bu iddynt dau o blant. -Mae'r ysgol gyfan yn galaru am ei cholled. -Roedd yn gyfrifol am sicrhau darparu addysg grefyddol ac addysg paratoad at waith. -Argraffwyd y traethawd yn ddiweddarach. -Parhaodd i chwarae i Gymru ac i Swydd Efrog. -Gorweddodd Mary ac edrych arni am rai munudau. -Yn ystod yr Ail Ryfel Byd daeth y Tŷ Opera yn neuadd ddawns. -Aeth allan i'r ardd cyn gynted ag y gallai. -Bu'r teulu wedyn yn byw yn Llwyn-y-Brain, Llanrug. -Ychydig ddyddiau'n ddiweddarach, fe wnaethant ddwyn ceffylau o ddwy fferm. -Mae wedi cael ei ehangu ddwywaith ers hynny. -Wrth iddi edrych gwelodd rywbeth oedd bron wedi'i gladdu yn y pridd. -Parhau i fwyta'i huwd nes bod ei bowlen hi'n wag. -Roedd pedwar peth da wedi digwydd iddi. -Cyflogodd giwrad gyflawni holl ddyletswyddau'r plwyf. -Doedd Mary erioed wedi breuddwydio am awyr mor las. -Rhaid oedd treulio'r ddwy noswaith yn y trên. -Ni wyddys fawr o fanylion hanes y Crynwyr. -Ni all merched ddianc rhag eu rolau ystrydebol yn y gymdeithas. -Roedd e wastad yn pryfocio ei chwiorydd. -Doedd yr un ferch fach arall erioed wedi treulio'r fath fore rhyfedd. -Roedd e'n swnio mor annhebyg i India. -Roedd William Owen yn gerddor, yn arweinydd côr ac yn awdur emyn-donau Cymreig. -Mae'n mynd allan yr un fath â phetai'r haul yn gwenu. -Pam na wnei di ddarllen rhywbeth? -Lledodd gwên araf drosto ac edrychai'r garddwr yn eithaf gwahanol. -Oddi yno symudodd i Gaernarfon gan barhau yn yr un fasnach. -Wnes i droi'r cornel anghywir, esboniodd Mary. -Mae'r cyrch awyr yn dechrau fel y disgrifiodd Rhys. -Ef yw arweinydd y grŵp ac mae'n amddiffynnol iawn tuag at Anne. -Rydw i yn ddiolchgar iddo fo am ei air da. -Roedd ei lyfrau yn ymwneud â chymorth i bregethu yn bennaf. -Clywodd hi drydar bach sionc. -Wnaeth Mary ddim gofyn ble roedd y llyfrgell. -Pryd fu Dewi Emrys farw? -Efallai ei bod hi'n cysgu yma ar un adeg. -Ceir cymeriad sy'n gweld y byd o safbwynt gwrth-semitaidd. -Does neb arall wedi bod yno ers deg mlynedd. -Dymunwn yn dda hefyd i Mabon ap Gwynfor a fydd yn olynydd teilwng. -Mae gan rai o'r cartrefi garej ynghlwm iddynt. -Mae Angharad Edwards yn awdur Cymreig. -Mae ganddo lygaid brown a gwallt du, byr. -Rydym yn trin cleifion gydag urddas trwy gadw at reolau cyfrinachedd -Mi fydd y cyfrif yn wahanol i'r cyfrif diwethaf. -Ystyriodd fod yn newyddiadurwr. -Roedd yn ŵr o dras Gymreig a'i wreiddiau yn ddwfn yn nhir Eryri. -Bu hefyd yn cynrychioli Cymru yn chwarae pêl-rwyd a phêl-fasged. -Debyg ei bod yn fath o ddogfen hanesyddol erbyn hyn. -Doedden nhw'n cofio am ddim ond amdanyn nhw eu hunain. -Dim ond rhan o'r sylfaen sydd wedi goroesi. -Arhosodd yr awditoriwm ei hun, ond mae dros hanner y safle yn newydd. -Ni bu iddo ef a'i wraig ond un mab. -Nid oedd y dodrefn yn hollol wrth ei bodd ychwaith. -Strydoedd yn cael eu cau. -Bu Price yn gyfrifol am ehangu achos y Bedyddwyr ar hyd Cwm Dâr. -Ei wrthwynebydd oedd y bardd Eingl-gymreig Syr Lewis Morris. -Mae Tommy yn ŵr Americanaidd o dras Eidalaidd. -Mae mewn cyflwr cadwraeth da. -Mae dwsinau o gyhoeddiadau Cymraeg yn gwneud hynny. -Myfyrdodau beunyddiol ar y nofelau Cymraeg gorau, yn nhrefn eu teilyngdod. -Daeth dynion di-grefft i'r ardal hefyd oherwydd yr addewid am waith. -Mae'r tŵr yn eiddo preifat. -Rhedodd i fyny'r llwybr at y drws gwyrdd. -Beth wyt ti'n gwneud yma? -Mae'n defnyddio cerrig o bob cwr o'r byd i greu ei cherfluniau. -Clywodd sŵn piwis, plentynnaidd, aneglur. -Mae'n anodd dweud, efo sicrwydd, pa bryd y dyfeisiwyd y gêm fideo gyntaf. -Ond mae'r berthynas â theulu Leone yn suro. -Ond roedd natur y gwaith a gyflwynwyd i Flaenafon yn wahanol. -Un o lyfrau gorau ail genhedlaeth Gymraeg Lloegr. -Rhaid mod i yn breuddwydio yn effro. -Jôc sy'n werth ei darllen. -Gobeithio fod petha'n iawn acw yn Stiniog. -Bu ddarllen yn gyhoeddus yn un o'i ddoniau. -Chafon nhw ddim caniatâd cynllunio i godi archfarchnad newydd. -Does dim mynyddoedd yno i fod yn rhwystr naturiol. -Gadawsom yr afon yn Llangadog, a chroesasom i ddyffryn afon arall. -Heb betruso o gwbl, troes o'r ffordd fawr. -Nid sôn am gaethwasiaeth ydw i rŵan, ond am y cannoedd eraill. -Nid oeddwn erioed wedi gweled tref gymaint o'r blaen. -Isio dy holi am Lundain ers talwm! -Mae Maria yn ymddangos mewn ffilmiau rhagarweiniol i ddwy o'r tasgau. -Aeth ati i wneud y lle yn siriolach fyth. -Isio holi am Gapel Salem, Penbedw ydw i; yn sgwennu yn ei gylch. -Wnewch chi ddod gyda fi os gwelwch yn dda. -Cychwynnodd y tri i adeiladu'r gwaith haearn ar unwaith. -Torrodd ei goes ar y gwyliau sgïo. -Gofynnodd i'w mam fynd i'r siop a chael ffrog arall iddi. -Sut ti'n cymryd dy goffi? -Taflunnir y llinellau syth fel bwa crwm ar y sffêr. -Dydi Siân byth yn defnyddio'r soffa. -Fel arfer mae'n dechrau gweithio o fewn awr. -Mae'r ddaear 'di rhewi. -Heddiw, defnyddir y term mathemateg gymhwysol mewn ystyr eang iawn. -Mae cyfeiriad llinell naill ai'n cynyddu, yn lleihau, yn llorweddol neu'n fertigol. -Mae nhw wedi torri'r coed yn y goedwig. -Derbyniodd Radd Meistr ym Mhrifysgol Caeredin. -Hanner y Ddaear sydd i'r de o'r cyhydedd yw Hemisffer y De. -Daeth y ffydd Gristionogol i'r ardal yn y bedwaredd ganrif. -Hunangofiant crefyddol gan Aled Jones Williams yw Oerfel Gaeaf Duw. -Y degfed llyfr yng Nghyfres y Corryn. -Cyfrol yn sôn am fywyd yn oes Victoria wedi ei ddehongli a'i ddarlunio. -Ni wyddwn ai merch real ynteu ferch ddychmygol ydoedd. -Ceir ffurflen enwebu ar-lein. -Wyt ti wedi rhoi'r dillad ar y lein? -Profer, os mynner, mai mantais ydyw iddynt. -Roedd yr awyr yn glir a'r haul yn codi. -Dywedir fod dail cypreswydden yn help i atal y person rhag gwlychu'r gwely. -Gall ymyl fod yn air gwrywaidd neu fenywaidd. -Rhoddodd ei law yn ei boced, estyn ceiniogau a'u taflu ar y bwrdd. -Mae'r erthygl hon yn rhestru rhai arfbeisiau hanesyddol Cymru. -Mae hi'n wyntog iawn heddiw 'ma. -Mae wedi'i gysylltu ag arwyneb mewnol drwm y glust. -Rwy wedi ail diwnio'r radio ac mae popeth nôl i'r arfer. -Sgwenna am beth bynnag sy'n cymryd dy ffansi. -Dy gyfrinach yn saff gyda fi Richard. -Mi oedd hi'n arfer gweithio yn y syrcas. -Mae'r rhain yn anodd. -Mae yn neoniaeth Yr Wyddgrug, ac yn perthyn i'r Eglwys yng Nghymru. -Mae syniad Annibyniaeth allan yn y gwyllt. -Mewn geometreg, math o byramid yw pyramid sgwâr, gyda'i sylfaen yn sgwâr. -Mae clo y drws wedi malu. -Mae ei theulu o darddiad Iddewig. -Diwrnod penigamp i chi i gyd. -Y glust fewnol yw'r rhan fwyaf mewnol o'r glust fertebraidd. -Y dyddiad cau ydi dydd Llun nesa'. -Llythyr i chdi di hwn 'li. -Ond yr union adeg daeth ymwared i'r hen frawd. -Dechreuodd wylo, a chladdu ei hwyneb yn ei ffedog. -Ynys sy'n perthyn i wlad Groeg yw Corfu. -Ar ôl cwblhau'r adnodd, byddwn yn mynd trwy'r atebion -Y mae y llanw wedi dod i mewn eto. -Podlediad Beti a'i phobl os gwelwch yn dda -Mae hefyd llawer nad ydym ni fel cymdeithas yn ymwybodol ohono -Yn dilyn y sefyllfa uchod, dyma restr o'r prif beryglon posibl -Maent yn edrych fel casgliad o rosynnau -Mae hyn yn gallu arwain at iselder a phroblemau anadlu -Ac yma y bydd o, am byth. -Mae'r llywodraethwyr eisiau sicrhau eu bod wedi cael hyfforddiant priodol -Rydyn ni'n gobeithio paratoi'r dosbarth cyfan cyn yr arholiad -Roedd yn rhoi clod arbennig i ŵr o Landdeusant, wrth siarad â mi. -A chyn bo hir daeth awel eilwaith o'r de. -Ganwyd John Penri yng Nghefn Brith. -Ffurfiwyd National Power wedi preifateiddio'r farchnad ynni ym Mhrydain. -Mae hi'n mwynhau chwarae gemau a gwneud gweithgareddau i atgyfnerthu ei dysgu -Roedd Robert Kennedy yn frawd i'r Arlywydd John F. Kennedy. -Ar gyfer y llenni mewnol, defnyddiais ffabrigau llwyd tryloyw -Dyma yw'r lle gorau i aros yn y wlad i brofi ei thraddodiadau. -Byddaf yn disgwyl i chi atgyfnerthu a chyfoethogi eich dealltwriaeth o gyfesurynnau -Nodwch unwaith eto pa alcohol rydych yn meddwl yw'r tanwydd gorau -Ian Fleming oedd awdur nofelau James Bond. -Beth yw'r gwahaniaeth rhwng pynciau craidd a dewisol? -Teimlai fod canghennau'r coed yn lapio'n famol amdani. -Yr unig anabledd mewn bywyd yw agwedd wael -Trwy wrando ar gerddoriaeth a chreu cerddoriaeth, mae'n adnabod seiniau cyfarwydd -Ymhen rhyw ddwy awr a hanner gwelem Lydaw'n ymestyn ymhell i'r gorllewin. -Y mae Llydaw'n wlad sychedig iawn, gwlad lawn o lwch. -Cerddasom am oriau yn ôl ac ymlaen ar hyd y mur. -Angharad, pam mae pawb yn drist -Pris pymtheg swllt y dydd, heb gyfri gwin a gwasanaeth. -Yr oedd golwg urddasol arno, er gwaethaf ei henaint a'i dlodi. -Roedd Tony ac Aloma yn ddeuawd pop poblogaidd yn ystod y chwedegau. -Cerddasom o borth Mair dros dywod a cherrig at droed yr ynys. -Wedyn bydd ein grŵp yn mynd ati i baratoi ar gyfer yr ymgyrch -Rheolant eu haddysg a'u masnach yn ôl eu hewyllys. -Yr oeddem yn newynog a sychedig, ac yfasom ddiod felen oedd ar y bwrdd. -Mae astudiaethau yn dangos bod llygredd sŵn yn arafu datblygiad corfforol -Ar farwolaeth y perchennog, rhennir y tyddyn rhwng ei ferched a'i feibion. -Rydw i'n anghytuno gyda'r penderfyniad yma oherwydd amryw o resymau gwahanol -I chwarae'r darn yma defnyddiais y piano -Yr oedd y ddau geffyl gwyn yn mynd yn brydferth hyd y ffordd wastad. -Dyma'r mis Chwefror gwlypa erioed. -Rwy'n mynd i brynu car trydan. -Roedd hi'n gân oedd yn sefyll ar ei thraed ei hun. -Gan ddefnyddio technoleg arbennig, mae arbenigwyr wedi sganio waliau'r bedd -Dyna drychineb, mae'r tin bisgedi yn wag. -A dyma finnau bererin wedi cael edrych ar dy degwch. -Llyfr am antur yn y gofod oedd e. -Doedd dim llawer o ddifrod ar ôl y storm. -Meysydd cysylltiedig yw polisi a chynllunio iaith. -Bum yn synnu droeon pam y mae gwin yn destun i'r beirdd. -I'ch helpu, gweler ynghlwm dempled amserlen a chynnig o rai syniadau -Anelon nhw am y gornel bellaf. -Mae'r marchnadoedd stoc yn disgyn yn gyflym. -Aeth i'r llyn i ymdreiglo, a bu yno'n hir. -Ond waeth heb fynd y ffordd yna heno. -Gwyddent am orchestion y dyn. -Does mo'r help, rhaid gwneud hynny. -Welais i erioed blentyn mwy surbwch yn fy myw. -Ymaith â hwy drwy ganol y twr pobl. -Aeth hi nôl i'w stafell a chau'r drws eto. -Roedd ei gwallt fel sidan cyrliog ac roedd ganddi drwyn bach del. -Roedd yn amser rhoi'r plant eraill yn eu gwelyau. -Doedd hi ddim yn gwybod ei bod hi'n annymunol. -Bydd blodau newydd yn dechrau coloneiddio'r ynys. -Roeddwn i yn dotio ato. -Aeth Mari Huws i'r tŷ i wylo yn ddistaw. -Un tro, sut bynnag, digwyddodd lwc i'r hen fochyn. -Chawn nhw ddim teithio i Hong Kong ar hyn o bryd. -Nid anghofiaf byth amdano. -Doedd hi ddim yn gweld ei cholli o gwbl a dweud y gwir. -Fe geision nhw fod yn garedig wrthi. -Bydd yn rhaid i mi fynd i'r gwaith yn gynnar bore fory. -Fe wnaeth y beirniaid jobyn eitha da arni. -Unwaith cripiodd i'r ystafell fwyta a'i chael yn wag. -Clywais y geiriau hyn. -Mae 'ngwallt i'n dal yn wlyb. -Dechreusai Mary wrando ar ei gwaethaf ei hun. -Oedodd am funud a chymryd anadl arall. -Daeth hen deimlad ei ieuenctid yn ôl iddo. -Doedd hi ddim eisiau gwrando dim rhagor. -Roedd pobl yn dweud ei bod hi wedi'i briodi am ei arian. -Mae'r adar wedi dechrau canu cyn iddi wawrio. -Rhaid i ti beidio disgwyl y bydd yno bobl i siarad gyda ti. -Roedd e'n swnio fel rhywbeth allan o lyfr. -Ymddangosai'n gwbl naturiol fod y glaw wedi dechrau tywallt i lawr. -Yr oedd yn noddwr cyson i'r Corn ar hyd ei oes faith. -Chawsom ni ddim ein gweld am yn hir. -Mae pris tanwydd wedi gostwng yn sylweddol. -Yn y diwedd disgynnodd i gysgu. -Dechreuodd chwarae ar ei phen ei hun. -Roedd llwch folcanig yn gorchuddio pob man. -Mae'n anodd dianc o afael y siarcod. -Dygais hwy adref. -Rwy'n prynu fy nillad i gyd o siopau ail-law. -Cyn pen yr awr yr oedd wedi torri ei benderfyniad drachefn. -Cerddai yn araf, gan grymu tipyn ar ei gefn. -Yn sydyn, clywsom dinc prudd ar y gloch fawr. -Ddaw hi byth yn ôl. -Byddwn ni adref cyn hanner nos. -Mae'r dyfyniad hwn yn cyfiawnhau hyn yn dda. -Defnyddid blociau bach i gadw'r bonet i fyny. -Pryd fydd fy nhro i'n dod? -Rhaid i bob teulu gael o leiaf un heliwr. -Dyna lle roedd yr aderyn gyda'r fron goch yn hedfan atyn nhw -Ble mae'r allwedd i gloi'r drws? -Rhaid i mi fynd. -Mae'r berllan y tu hwnt i'r ardd. -Canodd y gloch a daeth y wers i ben. -Fe gafodd hi gipolwg ar y pethau roedden nhw'n eu pasio. -Doedd hi ddim yn gallu penderfynu rhwng y sgarff goch neu'r un flodeuog. -Mae arnoch chi eisio bwyd; dowch at y bwrdd i gymryd tamed o ginio. -Gwelir hefyd ambell i feillionen a llygad y dydd. -Paid ti â bod yn ferch fach fusneslyd rŵan. -Prin y cai ei chwaer ddigon o fwyd a dillad ganddo. -Cawsom ein hunain ar y mur, yn edrych ar olygfa ogoneddus. -Roedd y broses wisgo yn un ddysgodd rywbeth i'r ddwy ohonyn nhw. -Mae wedi hedfan dros y wal. -Hufennwch y siwgr a'r menyn gyda'i gilydd. -Cawsom ni gyfweliad trylwyr iawn gyda'r fferyllydd. -Doedd hi ddim yno mwyach. -Pan aeth hi drwy glwyd fe'i cafod ei hun yn y gerddi mawr. -Mae'n amser i ti godi rŵan. -Doedd neb wedi bod yn yr ardd ers deng mlynedd. -Mae wedi cael ei wneud yn ail stafell i ti. -Yr oeddem yn uchel yng ngolwg pawb wedi i ddyn y llywodraeth wenu arnom. -Yn India roedd y gweision brodorol yn wastad yn codi ac yn cario pethau. -Gwelodd rhywrai fod yno gyfle i wneud arian. -Nid dyna yw ein harfer ni. -Roedd yr aderyn fel petai wedi'i gweld hi ac yn galw arni. -Roedd hi'n cofio brig y goeden roedd e'n clwydo arni. -Nid stafell plentyn oedd hi ond stafell oedolyn. -Teimlai Mary ei bod hi yn y goedwig gyda nhw. -Rydyn ni'n cynghori pawb i aros yn y tŷ. -Na, dw i'n ei gasáu. -Mae'r rhain yn cael eu disgrifio mewn ugain nofel. -Mae'r ddau yn bidio yn ffyrnig ar ei gyfer. -Ond roedd hi'n gwybod ei fod e wedi'i dilyn hi. -Mae hi mewn cariad ag ef. -Roedd Martha yn edrych fel petai hi'n meddwl ei bod hi'n dwp. -Fel adeiladwr bu'n gweithio ar adeiladu'r eisteddle ym Mharc yr Arfau. -Cyrhaeddodd yr heddlu a chafodd y gang eu herlyn i'r llwyni. -O ganlyniad bu ymchwiliad swyddogol i bennu arddull safonol i'r Anthem. -Mae'n dweud wrth Davies ei fod wedi bod yn ei ddisgwyl. -Mae o wastad yn dod i weld beth dw i'n plannu. -Dydi'i drafferthion o yn ddim busnes i'r gweision ddeudodd o. -Roedd galw mawr arni fel siaradwr ffeministaidd. -Bu farw cyn iddo gael ei ddiswyddo. -Fel Esgob Caer, roedd yn poeni am dwf Anghydffurfiaeth yn ei ardal. -Wnaeth Mary ddim hyd yn oed ceisio rheoli ei dicter a'i chywilydd. -Mae'r rhai mwyaf yn mynd allan i'r beudy ac yn chwarae yno. -Pan oedd yn wyth oed symudodd ei deulu i fyw i Fecsico. -Doedd hi ddim yn gwybod yn iawn ble roedd hi. -Caeodd ddrws y cabinet. -Ond does dim byd i'w weld. -Mae mam Anne yn ddynes glên iawn. -Ganwyd Morris yng Nghasnewydd, yn fab i bostfeistr. -Derbynient gyflog plwyf heb fod yn bresennol yn y plwyf. -Y funud honno roedd rhywbeth da iawn yn digwydd iddi. -Yn sydyn fe gafodd hi syniad newydd. -Amlosgwyd y ddau, a chladdwyd eu lludw ym mynwent Rhosan. -Bu hefyd yn feirniad rheolaidd mewn nifer fawr o eisteddfodau cenedlaethol. -Gallai hi weld brig y coed dros y wal. -Doedd y wasg ddim yn llwyddiannus iawn. -Lle wyt ti'n byw nawr, meddai Mary yn uchel wrthi. -Pan edrychodd hi lawr fe welodd hi neidr fach yn llithro yn ei blaen. -Cafodd ei adnabod fel dyn stoc gweithgar a gonest. -Bu iddynt bump o blant. -O'r diwedd lledodd ei adenydd a hedfan i ben coeden. -Llwyddodd yr heddlu i amddiffyn y wagen. -Wyt ti'n clywed rhywun yn crio, meddai. -Claddwyd ei weddillion ym mynwent Capel Salem, Blaenau Gwent. -Doedd y gweision a'r morynion brodorol ddim byd tebyg i hyn. -Yndw, mi ydw i. -Mae popeth mor llonydd yma. -Doedd hi'n gwybod dim byd am awdurdod. -Roedd yn actor a dramodydd Cymreig. -Tydi o ddim yn foel. -Efallai mai hon yw'r allwedd i'r ardd. -O ganlyniad, daeth perfformio yn fwyfwy anodd i'r tenor. -Aeth allan o'r ystafell a chau'r drws yn glep tu ôl iddi. -Roedd hi wedi crwydro'n ddigon hir. -Mae papurau newydd yn y dafarn yn flwydd oed hefyd. -Dihangodd y criw i mewn i'r llwyni. -Mae'r ddau yn gweld goleuadau car heddlu yn nesáu at y tŷ. -Teimlai fel petai hi wedi bod ar daith hir. -Dywedasom ein bod yn synnu nad oedd cyfarfod cyhoeddus yn unlle. -Mae cofeb iddo hefyd yn Nant-y-glo. -Mae'r gwanwyn ar ei ffordd. -Roedd Parry hefyd yn ddarlunydd. -Adeiladodd gwt a dechreuodd ffermio gwartheg. -Sgin i ddim mwy o amser. -Roedd e mor newydd a mawr a bendigedig a'r fath liw nefolaidd. -Mae erydiad yn lleihau maint y mynydd yn gyson. -Crwydrodd plant Llŷr drwy Iwerddon am naw can mlynedd. -Dechreuasom gerdded ffordd wastad drwy gaeau gwenith eang. -Beth wnei di o'r tacl yna? -Doedd Mary ddim yn ei hoffi o gwbl. -Cafodd llawer o'r golygfeydd eu ffilmio ar leoliad yn yr Eidal. -Aeth y ddau ymlaen am ysbaid i ymgomio am grefydd a'i chysuron. -Mae o am gael gwybod popeth amdanat ti. -Mae'r un peth yn digwydd gyda'r arfau mae'n eu defnyddio. -Dyma'r manylion ar gyfer y datganiad i'r wasg. -Aeth Mary ac eistedd ar y mat o flaen y tân. -Doedd dim byd i'w wneud. -Ond doedd mo'r help bellach. -Bu hefyd yn olygydd Y Goleuad. -Mae llawer o olew yn dal ar y traeth. -Roeddwn i fod i hedfan i Genefa heddiw. -Ond erbyn hyn, y mae hi yn wyllt ulw. -Tynnodd Wil ei esgid a thaflodd hi i lawr. -Cyflwynwyd llawer o eitemau gwerthfawr i'r amgueddfa. -Mae hefyd restr gyda pharagraff am brif drefi a phentrefi'r siroedd. -Dewi a'i feibion oedd bron y cyfan o aelodau'r band. -Yr hen gnawes ag wyt ti. -Daeth dwy lechen oddi ar y to. -Methiant truenus ydoedd. -Ond roedd y robin i weld yn ddigon bodlon. -Defnyddiais bensil, pensil lliw, inc a beiro -Mae'r enwau a darllenir yn cael eu cofnodi yn Rôl Anrhydedd yr ysgol. -Mae dy gerbyd yn disgwyl amdanat ti y tu allan. -Agorodd i gynted anferth. -Roedd y pridd wedi'i droi. -Yr oedd yno gynulleidfa o bobl yn barod i siarad a chwerthin. -Byddai'n prynu a gwerthu ceffylau ac yn eu rhoi i gystadlu mewn rasys. -Roedd y cadeiriau yn y stafell aros wedi torri. -Byddent yn ffraeo yn barhaus. -Gyda phob dymuniad da posibl i chi yn unigol -Mae mewn tymer dda yn paratoi i dyfu pethau. -Dewiswyd thema tlodi plant a datblygiad llythrennedd am amryw o resymau -Mae bywyd yn anodd ar hyn o bryd. -Roedd yna ergyd i'r pen gyda'r ysgwydd. -Cafodd y pridd ei olchi i ffwrdd gan y tonnau. -Byddaf yn mynd dros y cyfieithiadau a gofyn am enghreifftiau gan bobl. -Mae gynno fo feddwl ei hun, a dawn i'w ddeud o. -Safodd Mary ar ei thraed a cheisio cadw'i llygaid ar agor. -Ga i sôs coch gyda fy tsips? -Dwi'n methu coelio fy mod ar fin cychwyn ar fy mlwyddyn olaf yma -Os ei di rownd y ffordd yna fe ddei di at y gerddi. -Mae hanes cynharach y castell yn ansicr. -Bu'n angerddol dros y Gwasanaeth Iechyd Gwladol a sosialaeth. -Oes siawns am sgwrs ffôn plîs? -Does dim o olion y tŵr wedi goroesi. -Gobeithio y bydd modd gwneud y pwynt yn glir. -Mae'r tŵr ar dair lefel. -Mi fydd na filoedd o ymgeiswyr ar gyfer hynny! -Does dim tystiolaeth ei fod wedi gwireddu ei fygythiad. -Roedden nhw'n crwydro'r ardal gyda'r Fari Lwyd. -Anghofiais i eu hatgoffa i olchi eu dwylo. -Daeth Dafydd Morgan yn sydyn i sylw mawr. -Mae hi'n gwrthod ei ddatganiad yn ddidwyll. -Mae'n sefyll i'r dwyrain o orlifdir yr Afon Gwy. -Wrth i'r gêm fynd yn ei blaen, mae cwpwrdd dillad Tommy yn ehangu. -Deffrodd un bore yn gwybod beth oedd hi i fod yn llwglyd. -Cafodd Carmel ei drosglwyddo i achos Saesneg ac adeiladwyd capel newydd, Calfaria, gerllaw. -Byddai'n absennol o gartref am gyfnodau maith yn dilyn ei hoffter o geffylau. -Heddiw, cyfrol ddylanwadol newyddiadurwr mwya'r diwylliant Cymraeg erioed. -Nes i fwynhau. -Mae hi'n ymddangos mewn tair gêm. -Doedd dim byd tebyg i hwn yn America gyfan. -Dododd ei wasgod o tan ei grys un bore. -Bu ei fab arall, John, hefyd yn aelod o Senedd De Awstralia. -Dyfarnodd rownd derfynol Cwpan Cymdeithas Pêl Droed Cymru ar chwe achlysur. -Ysgrifennodd gofiant i'r capel sy'n glasur digymar. -I ble wnaeth gweddill y nythaid hedfan? -Mae peth dryswch parthed ei gyfnod fel myfyriwr. -Dyma blaned y Ddaear. -Nofel dda er gwaetha'r llên-ladrad. -Cynddaredd cyfiawn un o rebels mawr llenyddiaeth Gymraeg yn erbyn y drefn. -Trafod y profiad Cymraeg fel rhan o'r byd go-iawn. -Erbyn gêm nesaf y gyfres bydd y ddau yn briod. -Atgoffodd hynny Mary o'r tro cyntaf iddi ei weld. -Mae nhw'n gorfod mynd nôl am sgrym. -Y gweinidog cyntaf oedd William Lewis. -Mae'r llythyr yn darllen, Dyma glust cyntaf Paul. -Mae e'n dal i gysgu'n sownd. -Mae bargeinion i gael ar y sêl. -Yr oedd ganddo ddarn mawr o wlad tan ei ofal. -Roedd hi am wneud yn siŵr ei bod hi wedi ffeindio'r ardd ddirgel. -Aeth y ddau ymlaen mewn distawrwydd am dipyn. -Dyma fy ail syniad wrth i mi ddatblygu'r logo -Dyma lle mae'r Iwerydd a'r Môr Celtaidd yn cydgyfarfod. -Dim ond dau ddiwrnod sydd ar ôl tan y gwyliau. -Yr oedd y rhosynnau gwylltion ar bennau'r gwrychoedd yn orlawn o oleuni. -Y fath iechyd sydd yn ei hesgyll. -Mae darnau bach o blastig wedi mynd i mewn i'r gadwyn fwyd. -Mae'r tywydd yn dal yn oer iawn. -Mae Georgia yn enw ar un o daleithiau Unol Daleithiau America. -Teimlwn eu bod yn barod i wrando, gwyn fyd na fedrwn siarad. -Wnei di gynnau'r golau i mi. -Moriasom gyda glan yr ynys, cyn troi i'r môr agored. -Gwelsom ddwy o ferched ein gwesty ymysg y lliaws. -Maen nhw'n casglu sbwriel bob yn ail ddydd Iau. -Gawn ni wneud jam gyda'r mwyar yma? -Un ffynhonnell o egni adnewyddadwy yw biomas. -Mae'n amser bwydo'r moch. -Wnei di droi'r golau ymlaen. -Dyna biti iddi ddod i'r glaw. -O noswaith yn yr haf, yr oeddem wedi cael mordaith stormus. -Rho'r neges i gadw yn y ffridj. -Y mae ôl dwylo pobl gynt ar lawer peth yn yr eglwys hon. -Ga i de du os gwelwch yn dda. -Ai'r cerrig yn fwy ac yn amlach fel yr elem ymlaen. -Dwy elfen sydd efallai yn absennol i fyfyrwyr -Mae'r gwenoliaid yma, ond does dim pryfed iddyn nhw fwyta. -Rhaid i bobl fod yn fwy caredig wrth ei gilydd. -Dydw i ddim yn defnyddio bagiau plastig mwyach. -Dw i ddim yn hoffi hwfro. -Rwy'n ofni bydd fy het yn chwythu i ffwrdd yn y gwynt. -Paid â ngadael i ar fy mhen fy hun. -Ar y cyfan, roedd adborth y cleifion yn gadarnhaol iawn -Mae'r plant wedi cael ci bach newydd. -Nodir hefyd y cysylltiadau rhwng asesu a chydweithio gyda'r gymuned -Mae'n fwy o hwyl mynd ar y trên. -Yr oeddem yn unigedd gwlad ffrwythlon dlos. -Dyma diwtor a fydd yn gyfarwyddwr canolfan mewn dim o dro -Wyt ti wedi gorffen dy waith cartref? -Awn ni i bigo afalau o'r goeden. -Mae lot o bryderon gan y genhedlaeth ifanc heddiw. -Druan ag e, mae e wedi cael ei gosbi am dynnu i lawr. -Mae wedi bod yn diogi'n y gwely drwy'r bore. -Hoffai dîm Lerpwl ddymuno'n dda iddo yn rhan nesaf o'i yrfa gyffrous. -Edmygem ei thŵr ysgafn uchel a'i lliaws ffenestri crynion. -A chododd ehedydd bach uwchlaw'r coed. -Dengys y bardd ei werthfawrogiad o fyd natur -Mae angen pedair teiar newydd ar y car. -Trown ar y chwith ar hyd-ddi, a dyma ni wrth Hafod y Bibell. -Doedd hi ddim yn gêm dda iawn. -Ar ôl hynny mynnodd gael dŵad i lawr o'i gadair. -Yr oedd y ffordd yn llydan a thai o boptu yr un fath. -Bu raid i mi ei gwadnu hi i chwilio am y lleill. -Yr oeddwn i a'm brawd yn y ffarm newydd ers rhai dyddiau. -Mae'r tegell wedi berwi. -Cafodd yr hanes fel yr adroddir ef uchod. -Mae'n bryd i'r gwalch ddychwelyd i'r Ddyfi. -Cai Pero fwy o ryddid drachefn. -Roedd o yn crio yn arw. -Yr oedd y ddau erbyn hyn wyneb yn wyneb a'i gilydd. -Mae eisiau i'r bêl ddod mas o'r sgrym bach yn gynt. -Erbyn hyn roedd hi'n annioddefol o boeth yno. -Yr oedd pawb wedi synnu ato. -Disgynnai tipyn o oleuni gwan o'r tân ar lawr. -Bore Sul hyfryd ym mis Gorffennaf ydoedd. -Mae ystlumod yn hela drwy wrando. -Mae'r gwenoliaid yn paratoi i adael. -Hwn oedd y pyramid hynaf yng Nghanol America. -Rhedai tarw cynddeiriog ar eu holau. -Cafodd yr ymddiriedolwyr weld y bwrdd yn yr arddangosfa. -Ni welodd y cnafon yn dda gymryd gofal gyda'i gopi. -Yr oedd hynny yn pwyso ar ei feddwl yn fawr. -Ond nid oedd Hannah yn fodlon. -Byddai rhyw ddwsin o'r bobl yn mynd i'r eglwys. -Dyw'r penderfyniad ddim wedi'i wneud eto. -Roedd hi'n amser gweld y meddyg. -Perthyn i'r oes o'r blaen yr oedd hi, rywsut ym mhob peth. -Aeth hithau i'r llofft i weled sut olwg oedd ar y lleill. -Alun Wyn Jones yw'r arwr o hyd. -Nid oedd unrhyw goll arbennig arno, ond yr oedd yn rhyw ddiniwed. -Dangosodd ei falchder drwy roi rhyw gyfarthiad a dechrau rhedeg o gwmpas. -Roedd wal uchel o boptu iddi, ac nid gwrychoedd. -Er holl ofal ei fam, yr oedd wedi rhedeg i'r môr. -Sonient am ormes dynion a'r cam yr oeddynt yn ei wneud â merched. -Yr oedd Elin yn ddynes gall, gyda'r gallaf yn y wlad. -Beth arall wnawn ni? -Wrthi hi y llefarodd y geiriau a ddyfynnwyd ar y dechrau. -Tri chais yr un oedd hi. -Clywodd weiddi mawr yn un o'r caeau ar y dde iddo. -Peidiwch â meddwl mod i am daflu'r hen rai heibio. -Doedd y llawr ddim yn lân iawn. -Bydden nhw'n paentio'r cerfluniau mewn lliwiau llachar. -Yr oedd ofn a gwaseiddiwch yn eu gwaed, megis. -Mae pryfed cop yn byw yn y tywyllwch dudew. -Dw i ddim yn deall beth aeth o'i le. -Ond dyma fi yn mynd i siarad gormod, mi wn. -Y mae hi'n ofnadwy acw. -Byddent yn ymladd weithiau. -Torrwch y llysiau i gyd yn fân. -Welis i rioed y fath beth. -Roedd y bwlch yn ddau bwynt ar bymtheg. -Bu wrthi gyda'r llyfr hwnnw am fisoedd, sut bynnag. -Siaradai am y sylwadau negyddol a gafodd. -Cerddais innau tuag adref. -Na, rydw i am gofio mai hen chwarelwr oeddwn i. -Drannoeth, aeth ein gohebydd i'r dref i wneud ymchwiliadau. -Y mae mis er hynny bellach. -Ni chlywodd mo'r enw erioed ei hun o'r blaen. -Roedd y dŵr yn yr afon islaw yn llwyd-ddu. -Rhedais fy llygaid i lawr hyd y golofn. -Roedd y teledu ymlaen yn ddistaw yn y gornel. -Yr oedd arni eisiau pob math o bethau. -Ni fedraf ddweud mai myfi biau fy nhŷ fy hun. -Dygwyd y rhaff iddi rhag blaen. -Mae'r llif lafa yn llifo bob cam i'r môr. -Da gweld fod Cymru yn gallu sgorio ceisiau. -Yr oeddwn i yn sefyll ar y buarth ym mrig yr hwyr. -Y bwrdd oedd y distawaf o'r tri a'r hawsaf i'w drin. -Y peth gorau y gallai efô ei wneud fyddai ei gwadnu ymaith rhag blaen. -Ni wyddai y meddyg pa beth a ddygodd y fath beth i'w ben. -Dim ond gwydraid o ddŵr gafodd hi. -Doeddwn i ddim yn disgwyl am yr arian yma. -Cefais gryn drafferth i'w cael i'r tŷ. -Fyddai hi byth yn dweud gair cas. -Roedd y babi hefyd wedi gwneud cryn alanas. -Hanner blwyddyn cyn hynny, yr oeddwn yn y ffarm gyda fy nhad. -Gwneud hetiau a boneti oedd ei gwaith. -Does dim llawer o amser cyn i'r llanw ddychwelyd. -Un o blant y môr oedd Siôn Morys. -Mae'n awyrgylch cynhwysol a charedig. -Cymer dy gyllell a datod flaen yr hosan. -Erbyn iddo ddeffro, dyna lle yr oedd y ci yn gorwedd yn ei ymyl. -Dywedodd y doctor ef yn bwyllog a difrif fel o'r blaen. -Safodd a'i gap yn un llaw a'r rhaff yn y llall. -Rhyw blant diarth ydi'r lleill! -Ceir llosgfynyddoedd effro yn Ynysoedd y Galapagos. -Yr oedd gan yr hen greadur fath o law fer at ei wasanaeth. -Arhoson ni yn hir iawn i weld y meddyg. -Bwriodd olwg arnaf, golwg cymysg o awydd a phoen. -Penderfynodd Hannah wneud un ymdrech arall. -Roedd difrod sylweddol ar ôl y tân. -Mae wedi colli pob sgrym hyd yn hyn. -Wel, mae hynny yn wir, os oes rhyw ddaioni ynddo. -Diolch byth bod yswiriant gynnon ni. -Roedd yno degell a phethau gwneud paned. -Dywedodd yn urddasol fod ei englyn ef yn sicr o gael ei brintio. -Mae'r ffesant yna yn cymryd ei hun ormod o ddifri. -Roedd yn sicr o fod wedi gweld Pero yn cario cwningen i'r tŷ. -Llwyddodd amryw o fasnachwyr y dref i gael gwahoddiad i'r cinio. -Yr oedd yn gorffen gosod y wifren. -Mae rhai pysgod hefyd yn bwyta'r llygaid meheryn. -Nid hynny, sut bynnag, oedd yn ei phoeni fwyaf. -Rwan, cymer dy gyllell a rhwyma hi wrth flaen yr ede. -Nid dyna oedd y gic orau. -Cyfrifai fod hynny yn ei godi uwchlaw ei debyg. -Roeddwn yn gosod tasgau lle bu rhaid i'r plant gydweithio a chyfathrebu hefyd -Rhoddodd ef y bwrdd. -Dyma fynydd mwya gorllewinol ucheldir Swydd Perth. -Ble mae'r hen dafarn? -Byddai'n rhywbeth i'w wneud gan na allai hi fynd allan. -Lewis William Lewis sy'n ennill y gadair. -Roedd yn chwarae yn safle'r hanerwr. -Mae e yn yr ardd heb ddrws. -Fe'i hetholwyd i Academi'r Celfyddydau Ymerodraethol ychydig fisoedd cyn ei farwolaeth. -Doedd Martha ddim wedi gwrthwynebu o gwbl. -Chymerodd e ddim sylw ohoni. -Mae'n dweud, oherwydd ei natur farus, nad oedd ganddo unrhyw ddewis arall. -Yn fuan wedyn, mae blaidd mawr, llwyd yn dod allan o'r goedwig. -Yn wreiddiol defnyddiwyd hufen go iawn; bellach mae defnyddio hufen chwisg yn gyffredin. -Wedi dwy flynedd o astudio cafodd ei ordeinio'n weinidog gan yr Annibynwyr. -Mae 'na ardd arall ar ochr arall y wal. -Roedd y weriniaeth newydd yn cael ei llywodraethu gan saith conswl. -Roedd ei wraig a'i blant bach wedi marw o salwch. -Gwilym Hiraethog oedd y dyfarnwr. -O fethu, bydd pob un ohonynt yn cael eu lladd. -Mae Elisabeth yn ei halltudio hi o'r llys. -Cydiodd yn ei raw a throi i ffwrdd. -Gweithiodd pawb yn galed ac roedd yr ysbryd cymunedol yn gryf iawn -Mae'n anodd cael llaeth mewn poteli gwydr. -Adeiladwyd estyniad i wasanaethu gwaith haearn Rhymni yng Nghwm Rhymni. -Tybed oedden nhw i gyd dan glo go iawn? -Doedd dim byd hardd amdani ar hyn o bryd. -Cafodd ei urddo fel cydnabyddiaeth am ei waith yn hyrwyddo astudiaethau dwyreiniol. -Dair blynedd yn ddiweddarach, ef oedd â gofal dros y labordy. -Gwisgai ffrog frocêd werdd a daliai barot gwyrdd ar ei bys. -Os na wnei di, mi fyddi di'n cael dy roi dan glo. -Defnyddiwyd yr adeilad hefyd ar gyfer pantomeim, datganiadau a chyfarfodydd gwleidyddol. -Fedri di ddarllen? -Mi wnaiff les i ti a rhoi stumog i ti am dy fwyd. -Yn yr ysgol cafodd ei lygad ei anafu pan daflodd bachgen garreg ato. -Bu hefyd yn un o arholwyr ymgeiswyr am urddau'r orsedd. -Wnaeth hi ddim meddwl am droi bwlyn unrhyw ddrws. -Mae'r llyfrau yn frith o ffotograffau, mapiau a graffiau. -Roedd y Ddeddf Stamp yn amhoblogaidd ymhlith y gwladychwyr. -Roedd ffenestr lydan gyda gwydr plwm ynddi yn edrych allan ar y rhostir. -Dyma yw'r ddamwain mwyngloddio waethaf yn y Deyrnas Unedig o hyd. -Roedd ganddo lais tenor. -Roedd y sŵn yn bell i ffwrdd, ond roedd yn y tŷ. -Fe fu Ambrose yn gystadleuydd brwd mewn eisteddfodau a chyfarfodydd llenyddol. -Hi oedd y ferch aristocrataidd gyntaf i ddilyn yr hobi honno. -Paid â becso am y llanast, bydda i'n clirio'r cyfan. -Jones oedd capten Llanelli ar gyfer yr ornest. -Cyhoeddodd lawer am gerddoriaeth. -Awyr y rhostir sy'n rhoi blas i ti at dy fwyd di. -Wnei di ddim gweld llawer am eu bod hi'n noson dywyll. -Cyhoeddodd nifer fawr o bamffledi tebyg. -Roedd deiliad y swydd yn gyfrifol am Weinyddiaeth yr Awyr. -Cafodd ei addysgu yn ysgol wirfoddol Victoria ac ysgol elfennol Trehopcyn. -Roedd popeth yn llonydd ac eto'n ddisgwylgar. -Mae yno luniau a hen ddodrefn. -Mae'r Hebreaid ar fin cael eu dienyddio. -Danfonodd y tîm sgowt i lawr i Forgannwg i gael golwg ar ei berfformiad. -Nod y gwarchodlu oedd hyfforddi menywod i wasanaethu mewn unrhyw argyfwng cenedlaethol. -Ond nid tasg syml sydd yn eu hwynebu. -Mae'n honni iddi gael ei magu yng nghanolbarth gorllewinol yr Unol Daleithiau. -Wna i dy helpu di gyda dy ddillad os wnei di godi. -I Gymro nid oes ynddi unrhyw beth nad yw'n ei wybod eisoes. -Magwyd Walter gan ei ewythr a'i hen ewythr. -Mae rhywun yn crio, ac nid person mewn oed ydi e chwaith. -Roedd Idwal Jones yn nofelydd ac yn awdur llyfrau ffeithiol Americanaidd Cymreig. -Mae Afon Conwy yn rhedeg i'r gogledd ar hyd y ffin orllewinol. -Gwelodd hi glwt o sgarlad a chlywed trydar llachar. -Roedd pawb mewn gormod o banig i feddwl am ferch fach. -Maent yn helpu portreadu llawer o storïau gwahanol. -Ei farchnadoedd mwyaf yw'r Deyrnas Unedig, Canada a'r Unol Daleithiau. -Mae Lloegr lawr ond dydyn nhw ddim am ildio. -Hafan fach ddymunol sydd yma, ac y mae gwedd gyfoethog a llewyrchus ar bopeth. -Yna mae Dan yn agor y sêff ac yn dwyn yr arian. -Dyw hi ddim yno ond ers tua wyth deg o flynyddoedd. -Roedd y rhostir bron wedi'i orchuddio gan niwl a chymylau llwyd. -Y mae'r Tŷ Croes ar gyfer yr orsaf agosaf yng nghyfeiriad Dolgellau. -Mae'r pedwar cefnder yn hoff iawn ohoni. -Y sgerbwd echelinol yw craidd canolog y corff dynol -Mae'r uned ddeintyddol symudol yn ymweld yn rheolaidd -Wedi i'r syniad hwn ddyfod i'w feddwl, bu Dafydd yn llawer tawelach. -Yr oedd mynd i'r dref yn beth pwysig. -Wedi cyrraedd Bethlehem bu'n chwilio am le i aros. -Bob bore byddai'n deffro yn ei hystafell gyda'r tapestrïau. -Y mae gwobr llafur bob amser yn dibynnu ar effeithiolrwydd y llafur hwnnw. -Aldi yw'r siop agosaf at ein tŷ ni. -Roedd yr howscipar yn wraig reit nobl, gyda bochau coch iawn a llygaid du. -Mae'n defnyddio ei ddeallusrwydd ac yn achub y pump mewn sawl antur. -Roedd John Thomas Rees yn gerddor, cyfansoddwr ac athro cerddoriaeth Cymreig. -Mary oedd enw ei ail wraig a bu iddynt dwy ferch a mab. -Gan hynny swyddi cyfochrog oedd ei dri phenodiad fel esgob. -Erbyn i mi gyrraedd, yr oedd y siop yn llawn. -Mae mam wastad yn deall beth mae rhywun yn ei feddwl. -Torrodd yr Ail Ryfel Byd ar draws gyrfa academaidd Newton-John. -Yn y gerdd hon, y mae'r bardd yn pwyso a mesur bywyd. -Adolygir operâu cynharach, gan gynnwys cyfieithiadau gyda newidiadau cerddorol perthnasol. -Cyhoeddodd Gwilym Hiraethog mai awdl gan Emrys oedd yr orau. -Fodd bynnag, nid yw'r math yma o wirydd yn medru adnabod pob gwall. -Mae nhw wastad ar y droed ôl. -Rwy'n mynd i liwio 'ngwallt yn goch tro nesa. -Dyw Cymru ddim wedi gwneud llawer o gamgymeriadau. -Doedd hi erioed wedi meddwl rhyw lawr am sut oedd hi'n edrych. -Yr oedd yntau mewn gwirionedd wedi dotio ato ei hun. -Tybed a oedd yna unrhyw flodau yn dal yn fyw yno. -Eisteddasom ar wal y fynwent tan i'r cloc daro dau. -Bu hefyd yn gwasanaethu fel cadeirydd is-bwyllgor celf Prifysgol Cymru. -Bydd dawns werin yn cael ei chynnal y noson honno. -I ymlacio roedd yn hoffi garddio a cherddoriaeth siambr. -Roedd yna dapestrïau wedi'u brodio yn hongian ar y wal. -Dyma oedd lladrad aur mwyaf Awstralia. -Dw i'n hoffi dy fam di. -Penodwyd ef yn gurad Helygain. -Pryd wnest ti molchi ddiwetha? -Roedd llawenydd bywyd wedi mynd. -Mae llysiau gwyrdd yn dda i ti. -Mae rhaid i bob ffurflen gael ei hystyried gan diwtor modiwl y myfyriwr -Arweiniwyd ni trwy lawer cyntedd i ystafelloedd eithaf cysurus. -Roedd Paul yn honni ei fod yn parhau i garu ei wraig. -Gobeithio fod pethau'n iawn ym Morfa. -Mae gen i grys T pinc newydd ond mae'n rhy fach i fi. -Blaenoriaid y capel yma oedd yn bennaf gyfrifol am ei chomisiynu. -Bellach, gellir yn ddiogel gyhoeddi'r hanes. -Dywedodd fod croeso inni weld y tŷ. -Pawb at y peth y bo ydi hi mewn gwirionedd. -Roedd ei thras Albanaidd ar ochr ei mam. -Doedd hi erioed wedi gweld plentyn yn sefyll mor llonydd. -Yr oedd ei wallt yn ddu a'i wyneb yn goch. -Cyfarfu â hen gariad yn y dre. -Ydi'r gwaith 'di gweld golau dydd, ta ar gael yn electronig? -Nid oes gwell addysg at fasnach yn bod na dysgu dwy iaith. -Nid yw hyn yn wir bob tro, gyda rhifau cymhlyg, fodd bynnag. -Fel rheol, y mae ynddi hi un gwasanaeth Cymraeg bob Sul. -Hyn sy'n dda. -Ar ôl cael ei hethol, cynhaliodd y swydd hyd ei marwolaeth. -Pymtheg o deithiau cerdded yn ardal bryniau Clwyd. -Lot pertach na phorfa gwta sy'n edrych fel AstroTurf. -Bu'n aelod o Undeb Ysgrifenwyr Rwmania am rai blynyddoedd. -Ail deitl y drioleg am daith enbyd ac anturus Dylan Rees. -Llyfr i blant am olwynion gan Catrin Hughes yw Argyfwng! -Nath o gychwyn ffeit ar y stryd. -Yn anarferol iawn, nid oes gan y fenyw adenydd. -Ydy eraill wedi cael yr un broblem yn ddiweddar? -Mae hi 'di bod yn gyrru negeseuon at ryw foi newydd. -Ti angen dwsto'r silffoedd llyfre. -Maen nhw'n pleidleisio ar y cynnig rŵan. -Teimlad o normalrwydd nid rhyw burdan hanner gwyliau hanner gwaith. -Dyma erthygl ddifyr ar ddwyieithrwydd. -Mae hefyd yn enw ar gawl, pan ychwanegir ychwaneg o ddŵr ar yr uchod. -Yr enw cyffredin ar yr ardal ble gorwedd y pelfis yw'r iau. -Nofel ar gyfer plant a'r arddegau gan Emrys Roberts yw Rheinallt yr Hofrennydd. -Gall fod yn ganlyniad i ryngweithiad prosesau geomorffolegol a phrosesau tectonig a folcanig. -Dihangodd tri ohonynt am eu bywydau ac i fyny i'r wyneb. -Gall cadair gael breichiau, ond does dim rhaid. -Mae'n derm hyblyg ei ystyr, a cheir sawl diffiniad o'r term. -Roedd hyn wedi dechrau rhoi ei meddwl segur ar waith. -Tynnwch y croen a'r hadau os yw'r tomatos yn rhai amrwd. -Mae ar gael fel anadlydd, hufen, pils, a chwistrell drwynol. -Am flynyddoedd, roedd hon yn ardal a bleidleisiai i'r Blaid Lafur. -Mae 'na densiwn, cymeriadau da, stori gref. -Roedd y diddordeb a'r cywreinrwydd yn wyneb Mistres Mary yn ei llonni hi. -Nofel am wrthdaro a'r bwlch rhwng y cenedlaethau. -Cyfrol yn cofnodi straeon am gymeriadau Ffestiniog, wedi eu casglu gan awdur adnabyddus. -Dylid trin llau pen cyn gynted ag y byddant yn cael eu gweld. -Gelwir cod meddalwedd perchnogol, fodd bynnag, yn ffynhonnell gaeedig. -Dim diddordeb o gwbl. -Dw i'n weipio hen ffonau a gosod Android Cymraeg arnyn nhw. -Rhaid i mi wybod beth ydy o. -Daw'r gair Omnibws o air Lladin sy'n golygu at ddefnydd pawb. -Ddaru o dy ddilyn di ddoe? -Roedd hi'n aelod o frawdoliaeth golegol. -Gwariodd ffortiwn yn gwella ac ehangu'r ystâd gan blannu coedwigoedd a chreu gerddi. -Yn ystod y Rhyfel Byd Cyntaf gweithiodd fel nyrs yn Serbia. -Mae ganddi ddwy chwaer iau. -Roedd Mrs. Medlock wedi gadael i Martha aros dros nos yn y bwthyn. -Mae 'na benbyliaid yn y ffoes. -Felly hefyd mannau eraill yng Nghymru. -Dyma'r cysglyn mwyaf cyffredin. -Dw i 'di cychwyn gwrando ar y podcast newydd. -Ffotograffau du-a-gwyn a disgrifiadau o flodau gwyllt Cymru. -Neidiodd y ci ar y wal. -Roedd ei thad yn ffermwr Gwyddelig, yn fasnachwr stoc ac yn berchen caethweision. -Dw i o blaid Cymuned Ewropeaidd ble dw i'n rhydd i deithio. -Os medra i ddyfynnu rhannau yn gwbl gywir, cael fersiwn Cymraeg yw'r nod. -Rhoddant gipolwg unigryw ar grefydd ym Môn yn yr Oesoedd Canol. -Dangoser y medr dynion eisoes wneud y ddau beth pwysicaf heb yr un iaith. -Fel arfer cysylltir y gair gyda defodau claddu Oes Newydd y Cerrig. -Digwyddais ddod ar draws ffrind wythnos yma a chael paned a sgwrs hynod bleserus. -Ceir ffotograffau lliw trawiadol ar bob tudalen. -Bydd rhaid gofyn ar ein rhan ein hunain. -Mae'r Afon Ceri'n rhedeg drwy'r gerddi. -I ba gyfeiriad nath o redeg. -Caiff ei gyfri'n bla mewn caeau cotwm. -Mae'r arweinydd wedi ei ddisodli. -Dyw'r llythyr heb gyrraedd. -Aeth ymlaen i ddysgu dylunio a chrefft yn Ely a Rhydychen. -Un o'i brif swyddogaethau yw cadw organau'r abdomen yn eu safle priodol. -Cadwch yn iach ac yn saff. -Pwy sgwenodd hwn? -Llyfr fydd o ddiddordeb i bawb sy'n ymwneud â byd addysg. -Mae'n hynod o debyg i wyfyn arall o'r enw'r Seffyr Sgolpiog -Dw i 'di cael un rŵan. -Roedd yn aelod o'r Blaid Ryddfrydol. -Detholiad o erthyglau byrion gan Hafina Clwyd yw Clust y Wenci. -Ychwanegir at naws y gwaith gan luniau pin ac inc. -Mae'r hwfer yn y cwpwrdd o dan grisiau. -Dros ddeg ar hugain o ddarluniau du-a-gwyn. -Nath 'na hofrennydd ddod i achub nhw. -Yno mae'n cyfarfod ag Elwyn ac yn gweld yr Ysbryd Arian. -Diolch i bawb sydd wedi ymateb i fy ymholiad. -Daeth y llythyr gyda bocs bach yn cynnwys hanner aren. -Weles i hi'n croesi'r hewl. -Mae'r ddynes yn crio. -Dwi eisiau chwarae rygbi dros Gymru. -Un bore, mae Siencyn yn sylweddoli bod Dan yn sâl iawn. -Ymunodd â'r mudiad heddwch a rhoddodd loches i wrthwynebwyr cydwybodol. -Mae'r casgliad yn cynnig detholiad cynhwysfawr o waith y bardd. -Yn ôl a ddeallaf, wnaeth ei dad ddim pasio'r iaith ymlaen iddo. -Yn aml, mae'r claf yn ei ddal heb sylwi ar hynny. -Nathon nhw chwarae golff trwy'r penwythnos. -Pa raglen oedd hon? -Yfodd wydriad o brosecco. -Braf cael gwisgo rhywbeth gwahanol. -Prif fwyd y siani flewog ydy gweiriau amrywiol. -Mae ei ochr gogledd dwyreiniol wedi cwympo yn rhannol. -Oes yna rywun yn dy boeni? -Wyt ti'n dweud bod eisiau gweithredu'n uniongyrchol yn ei erbyn? -Bach o hwyl a miwsig da. -Dyma restr o Aelodau Seneddol Plaid Cymru. -Yn gyffredinol, ystyrir bod y ffurf anadlu yn ddiogel yn ystod beichiogrwydd. -Oes 'na rywbeth ddylsem ni wybod? -Mi aeth yr awyren ar goll. -Penderfynais na rown byth bleidlais i ymgeisydd oedd yn caru'r genedl fawr. -Cyfres o astudiaethau Beiblaidd yn canolbwyntio ar y Drindod. -Nid yw'n cael ei argymell at ddefnydd plant. -Ond ta waeth am hynny, syrpreis teimladwy a hyfryd. -Cymerodd ei dwy law i fedru troi yr allwedd, ond fe wnaeth hi droi. -Mae nhw'n galw am streic cyffredinol wedi digwyddiadau heddiw. -Ydy'r fformat yma'n iawn? -Drama ddigri mewn dwy olygfa yn portreadu cymhlethdod bywyd teuluol. -Mae olion llithrennau geudy yn y tyrau dwyreiniol. -Dos i gau cwt yr ieir. -Ie, mae'n blincin oer! -Ond y mae'n hawddgar iawn yr olwg. -Yn dilyn, fe welir gwledydd nad ydynt yn aelodau. -Mae'n cymryd llai o amser ac ymdrech. -Mae hyn yn ymwneud â phrofiad ei theulu ei hun. -Dw i ddim yn dweud hynny. -Gall gymryd diwrnod neu ddau i'r symptomau ddiflannu'n llwyr. -Cyfweliad dewr iawn gan Arwel yn fa'ma. -Bu'n aelod o Urdd Meudwy'r Wawr Aur am rai blynyddoedd. -Claddwyd ei weddillion yn Llansadwrn. -Nofel antur i blant. -Chwedlau o Gymru, mewn cyfres o chwedlau a storïau i blant. -Dw i wedi ail ymuno â'r mudiad heddiw. -Fe'i hadroddir yn y person cyntaf. -Bu'n aelod o Gyngor Cyffredinol Cyngres yr Undebau Llafur am rai blynyddoedd. -Dyma'r nodweddion i edrych amdanynt wrth geisio gwahaniaethu rhwng y ddau. -Fedri di ddychmygu rhyw gelwydd newydd amdano? -Gwelwyd merched y ffrwythau'n prysuro i'r lan. -Roedd yn rhaid ei bod yn wahanol i lefydd eraill. -Dydd Mawrth Ynyd yw'r diwrnod sy'n ei ragflaenu. -Cafodd Jones yn ei addysgu yn Ysgol Ramadeg Penarlâg a Choleg Normal Bangor. -Mae hi'n pluo eira. -Cysyllta os oes rhywbeth yn rong neu angen ychwanegu. -Roedd wedi teithio gyda phum menyw arall o Gaeredin. -Dach chi isio dilyn fi? -Astudiodd y falwoden ar gyfer ei doethuriaeth. -Mi oedd y gangen yn chwifio yn y gwynt. -Yn gyffredinol caiff ei gymryd trwy'r genau. -Y genre a ddefnyddir ganddi gan amlaf yw'r rhamant hanesyddol. -Neidiwch ar y trên i Lundain, plîs. -Gellir gweld Moelydd Clwyd o du blaen yr ysgol. -Nôl ati nawr. -Cafodd unedau eu tynnu'n ôl gan eu bod yn disgwyl archwiliadau mawr. -Parhaodd y frwydr nes iddi dywyllu, pan ymgiliodd y Ffederalwyr o'r ardal. -Y tu allan i bob un o'r gwrthgloddiau roedd ffordd tan orchudd. -Roedd disgwyl i fyfyrwyr ysgrifennu nodiadau a thraethodau gradd yn y Saesneg. -Rydyn ni'n mynd ar ôl gemau eraill ar hyn o bryd, er hynny. -Protestiodd y dylai dedfrydau oes gyfan fod yn berthnasol i blant sy'n lladd hefyd. -Dyn yn eistedd ar graig yn y mynyddoedd. -Nid yw'r trawsyriant i gyd yn weladwy i'r defnyddiwr. -Mae'r ymyl ddeheuol yn fwy bas nag mewn mannau eraill. -Roedd ei gefndir artistig a diwylliannol yn gymysgedd o gerddoriaeth a chelfyddyd. -Mae'n gwneud synnwyr i'w wneud y ffordd honno. -Yr hyn a gynigiwyd gennyn ni oedd “Ti'n gwybod beth dw i'n ei olygu”. -Unwaith yn unig y caniateir i weithiwr dynnu arian yn y dull hwn. -Achosodd y gweithrediadau hyn i epidemigau o'r pla dorri allan. -Nid yw'r Bwrdd yn rheoleiddio gwasanaethau cystadleuol yn y sector nwy naturiol. -Mae hafau'n boeth a sych gyda llai o leithder. -Mae dyn a baban yn edrych ar bysgodyn gwyrdd mewn pwll bach. -Fodd bynnag, nid yw cryfder ei wenwyn yn hysbys ar hyn o bryd. -Mae gan y dref sawl onsen poblogaidd. -Roedd y diffynnydd yn honni bod ei wraig wedi llewygu yn y baddon. -Y bwriad oedd creu un wladwriaeth ac awdurdodaeth cyfreithiol. -Nid oes gan fomiau diwerth synhwyrydd, felly nid ydynt yn rhyngweithio â'r ffotonau. -Mae'r casgliad yn parhau i gael ei ddatblygu. -Mae newid hinsawdd yn cynyddu amlder a dwysedd digwyddiadau naturiol. -Ond cododd Catrin ei thrwyn i'r awyr. -Syrthiodd y ci gwerthfawr wrth draed y cipar, a bwled drwy ei galon. -Dringodd rhai o fynyddoedd uchaf y byd. -Dyn bychan, arafaidd a gochelgar dros ben oedd Dafydd Tomos. -Efallai y bydd yn rhaid i ni ohirio'r briodas. -Y mae'n debyg mai oddi wrth ei thad y cafodd ei balchder. -Dyna redeg penderfynol gan George North. -Roedd yna adolygiad swyddogol ar y teledu. -Edrychodd y bobl ar y ddau mewn syndod. -Rhaid i'r siarcod gael bwyta hefyd. -Troes yn ohebydd papur newydd. -Roedd rhai o'r prif ddynion yn awyddus am fynd i'r cinio hwnnw. -Dyw'r pryfed a'r trychfilod byth yn gadael yr ogofeydd. -Un diwrnod, cafodd Pero flas ar ddal cwningod. -Daeth gŵr dieithr yno un diwrnod, ac aeth o gwmpas i weld y lle. -Cododd o'i wely yn y bore wedi penderfynu. -Mae 'na guddfan adar wrth lan y llyn. -Ceir eira ar gopa mynydd uchaf Hawaii. -O'r diwedd, cododd ar ei draed yng nghornel y set fawr. -Doedd yr ystafell aros ddim yn gyfforddus iawn. -Mae'r band yn bwriadu ailffurfio ar gyfer y Steddfod. -Mae'r ynys yn bell o bob man. -Dyna'r bêl yn cael ei hennill yn yr awyr. -Aethant ymlaen tua'r hen bentref. -Y mae llawer yn ofni i'r helynt ail dorri allan. -Nid oes ynddo na synnwyr na chynghanedd. -Yr oedd ganddo raff oddi mewn i'r simnai i fynd i lawr. -Gweithiai yn y chwarel fechan oedd gerllaw. -Cyrhaeddodd y car yr amgueddfa yn ddiogel. -Crafangai bob ceiniog ynghyd o bob man y gallai. -Yr oedd ganddo dŷ bychan glanwaith a chyfleus. -Edrychodd arnaf fi wrth glywed y cloc yn taro tri. -Paid â meddwl mai dy galon di yn unig sy'n drom. -Doedd o ei hun ddim wedi meddwl i fod yn fardd cyn hynny. -Pagan oedd Ffinn, wyddost, ac yr oedd yn gwrando'n astud. -Buont yn siarad yn hir am yr hen amser. -O dipyn i beth, aeth ofnau Dafydd yn llai. -Nid oes hyd heddiw gof golofn ar fedd fy ewythr. -Roedd o wedi rhoi'r gore iddi yn rhy fuan o lawer. -Yr oedd yn cysgu yn drwm o hyd. -Gwelodd yntau ei fod yn rhoi braw iddynt. -Clywodd glec, a gwelodd Pero yn rhoi naid i'r awyr. -Yn fuan wedyn, yr oedd tai eraill yn y farchnad. -Yr oedd hynny yn torri ei galon. -Ni bu gyfarfod canu erioed er pan gychwynnwyd y côr na bu Dico yno. -Fase hi ddim yn cael mis o rodio fel mae hi yn cael. -Roedd hynna'n bendant yn garden goch. -Cafwyd golygfeydd trist o lygredd yn y môr. -Mae Capten Lennox a'i wraig wedi marw o'r colera. -Toc, daeth yn ei hôl i'r gegin, a'r gannwyll yn ei llaw. -Buan y trechwyd ei siomedigaeth gan gywreinrwydd. -Mae hi'n darllen y newyddion ar y radio. -Ond doedd neb yn fodlon dweud dim wrthi. -Hi oedd y plentyn mwyaf surbwch roedden nhw erioed wedi'i weld. -Mae ambell i un yn edrych yn sigledig y tu ôl i'r sgrym. -Roedd hynny'n wir hefyd. -Yr oedd y llanw'n prysur guddio'r tywod pan adawsom yr ynys. -Daeth y ci i'm canlyn. -Dechreuodd siarad mewn llais cras, parablus. -Edrychai ar yr aderyn bach gyda'i wasgod sgarlad fel petai'n falch ohono. -Maen nhw'n chwarae allan ar y rhostir drwy'r dydd. -Buon nhw'n hel llus ar y mynydd drwy'r dydd. -Methodd y dringwyr i ddychwelyd i ganolfan ddydd Mawrth. -Mae'n dipyn o frwydr o ran y gêm gicio. -Wedi i'r cerbyd fynd drwy gatiau'r parc roedd yna rodfa goed. -Doedd hi ddim wedi bod eisiau mynd i Lundain. -Maen nhw'n dweud mai'r ci a gerddiff a gaiff. -Falle fod yna broblem fach gydag Owen Farell. -Gwnaethant hwythau bopeth yn drefnus. -Rhaid oedd i mi dynnu fy nghot. -Teimlai Mary na fyddai'r daith byth yn dod i ben. -Daeth y fam ataf i ofyn a daflwn ddernyn arian drosti i'r het. -Fedri di ddim gwisgo dy ddillad dy hun? -Yr oedd y cnafon bach wedi tawelu erbyn hyn. -Ddwy flynedd ar ôl hynny, roedd yn fforman y shifft nos. -Mae'n bum milltir i'n bwthyn ni. -Fedri di wnïo? -Fysan nhw erioed wedi gadael i fi weini yn y tŷ ei hun. -Roedd y ffilm yn llwyddiant beirniadol ond nid yn llwyddiant ariannol. -Wrth wneud y recordiadau daeth yn rhugl yn yr iaith lafar. -Mewn gwewyr esgor hir ac anodd, mae hi a'r babi yn marw. -Mae copi o'r hunangofiant wedi ei gadw fel llawysgrif yn Llyfrgell Prifysgol Bangor. -Bu'n briod dair gwaith. -Clywir bachgen o fugail yn canu yn y pellter. -Bu iddynt dau fab a dwy ferch. -Meddyliai am y robin fel un o'r bobl. -Cynhelir gwasanaethau'r capel yn y Gymraeg. -Mae chwaraewyr yn defnyddio'r padlau i daro pêl yn ôl ac ymlaen. -Bu yno nes iddo ymddeol ar ôl diwedd yr Ail Ryfel Byd. -Gadawodd fab, John, a'i holynodd fel barwnig, a dwy ferch. -Mae hefyd restr gyda pharagraff am holl drefi a phentrefi Brycheiniog. -Serch hynny, mae hi'n parhau i ffieiddio'r syniad o orfod priodi. -Dechreuodd wrando ar rywbeth arall. -Roedd yr awyr las ddofn, uchel yn ffurfio bwa dros y rhostir. -Hoffai hi wybod a oedd hi'n mynd i fynd at bobl neis. -Bu i Lewis ac Anne ddau fab a chwe merch. -Mae rhaglen newyddion yn adrodd bod diffyg tystiolaeth wedi arwain at fethiant yr achos. -Wrth iddynt symud heibio i ddrws ysgubor, dechreuodd y gang saethu atynt. -Symudodd y teulu i Fryste o herwydd gwaith y tad. -Doedd y gwely blodau ddim yn hollol noeth. -Ar y dechrau, mae pethau'n ymddangos yn ddigon diniwed. -Gweithwyr oedd yn byw yn y tai y soniwyd amdanynt. -Roedd hi'n awdur a ysgrifennodd nifer o erthyglau a phamffledi ar hawliau merched. -Mae angen diet cytbwys arnom i'n cadw'n iach -Rhydd i bob gweithiwr ei farn, ac i bob barn ei gweithrediad. -Rwy bron â gorffen darllen y llyfr. -Teimlai'r ferch fach nad oedd neb ar ôl ond hi'i hun. -Does gen i ddim unrhyw lyfrau, meddai Mary. -Mae nofelau ffantasi yn boblogaidd iawn. -Mae ganddo gasgliad o bortreadau o bobl Brydeinig enwog o bwys hanesyddol. -Mi faswn yn rhyw gadi ffan garw petaswn i yn eu hanghofio nhw. -Bore da, o'nd ydi'r gwynt yn braf? -Gymra i baned arall os gwelwch yn dda. -Myfyrdodau byrfyfyr ar y nofel Gymraeg, yn nhrefn teilyngdod. -Wedi newid cyfrif Twitter. -Er bod y tŵr crwn hwn yn adfeilion mae modd mynd i mewn iddo. -Roedd ystafell gromennog ar y llawr cyntaf. -Methodd ei dad gael cyflogaeth reolaidd oherwydd meddwdod. -Mae'r adeilad bellach yn adfail. -Dyma nodweddion a oedd yn gyffredin mewn capeli Cymraeg y cyfnod. -Dim ond dau gymeriad sydd yn y bale, un dyn ac un fenyw. -Prif Weithredwr cyntaf y bwrdd oedd Paul Williams. -Dywedodd y data bod dosbarthiad y boblogaeth wedi arwain at ddiflaniad cyffiniau America. -Roedd eu lleoliadau ynysig yn eu gwneud yn brif dargedau ar gyfer môr-ladron. -Ysgrifennodd nifer o lyfrau ac erthyglau gwyddonol. -Y tro yma, nofel am gariad a chasineb mewn un teulu yng nghefn gwlad. -Sut yn union ydyn nhw wedi dyddio? -Yn llawer difyrrach yn aml na'r hyn a geir yn y canon llenyddol. -Roedd Griffith yn gasglwr hen lythyrau ac ysgrifau. -Y brifddinas ranbarthol yw Galena. -Yn ystod diwrnodau cyntaf bywyd mae plant yn dechrau caffael iaith -Awdl gan Walchmai fu'n fuddugol. -Yr oeddym oll yn dal ein gwynt bron. -Doedd yr awdurdodau dim yn rhoi digon o arfau i warchodwyr y tyrau. -Nodweddir gan afreoleidd-dra pigmentiad yn y croen a phroblemau'r system nerfol. -Rwy'n hoffi ffuglen wyddonol. -O'r diwedd cyrhaeddodd ei llawr ei hun eto. -Aeth i ben y gwrych i edrych a gwrando. -Yn y llythyrdy yr oedd ganddynt hen arfer o godi dwbl ar bobl ddieithr. -Cartref Ieuan Gwynedd, pa Gymro na theimla ei galon yn cynhesu wrth feddwl amdano? -Rhwng y cerrig, gwelem feysydd gwenith aeddfed, a llwybrau glaswelltog. -Mae gwreiddiau'r dosbarthiad hwn, fodd bynnag, yn nwfn yn y ganrif ddiwethaf. -Ni wyddai Catrin pa beth i'w ddweud -Roedd y ffurf hon o farddoniaeth yn ffefryn gan feirdd Lladin. -Hon oedd y blaid wleidyddol gyntaf a gofrestrwyd yn swyddogol ar ôl cwymp Comiwnyddiaeth. -Maent o faint coed gyda boncyffion cadarn a dail stiff, llydan. -Mae dyn yn tynnu cymeriadau â'i draed ar y stryd. -Oherwydd y llwyddiant, cafodd y gêm bedwar dilyniant pellach dros y blynyddoedd. -Mae dau o weithwyr mewn festiau oren yn gwneud eu swydd. -Roedd y Phariseaid wedi bod yn bleidgar. -Am y rheswm hwnnw, roedd yr amserlen ffilmio ar gyfer “Paranoia” yn un ddirgel. -Mi wnaf i edrych ar ei ôl. -I'r gwrthwyneb, gellir deillio'r achos cyfartal o'r achos anghyfartal. -Roedd cynllun newydd ar gyfer y cronadur gwasgedd wedi cynhyrchu canlyniadau amlwg. -Honnodd mai hunanamddiffyn ydoedd. -Mae'n amlygu cyfresi o ystyron ar draws y gweithiau. -Yna mae'r penodiad yn sefyll mewn grym tan yr etholiad nesaf. -Mae hynny'n fy nychryn. -Roedd yr ardal ar y pryd yn rhan o Swydd Caerhirfryn. -Mae metaddadansoddiadau wedi canfod perthynas arwyddocaol rhwng braster dirlawn a lefelau colesterol serwm. -Yn ogystal, anafwyd naw o gasglwyr hopys yn ddifrifol. -Disgrifiodd adferfau gwmpas datganiad neu berthnasoedd amserol amrywiol. -Oherwydd datblygu, prin y gwelir y rhywogaethau hyn yn yr ardal bellach. -Mae'r Brifysgol yn cynnig cyrsiau ar wahanol lefelau: Ôl-raddedig, Israddedig, Diploma a Thystysgrif. -Priodolwyd y lleihad i adeiladu cronfeydd dŵr, mwyngloddio a dyfrhau amaethyddol. -Mae'r enw'n fyr am “goncrit sy'n trawsyrru golau”. -Beth am fynd allan i de. -Mae'r is-ymddygiadau hyn yn cael eu trefnu i hierarchaeth o haenau. -Roedd barn y cyhoedd yn gymysg. -Rhwng Cyngresau, y Pwyllgor Canolog oedd yn rhoi cyfreithlondeb i'r arweinyddiaeth Sofietaidd. -Mae'n un o ddisgynyddion mewnfudwyr Indiaidd. -Ni wnaeth eu priodas gynhyrchu unrhyw plant a oroesodd. -Dim ond un derfynell a ddefnyddir ar gyfer gwasanaethau domestig a rhyngwladol. -Mae'r Bathodyn Athro Academi'r Awyrlu yn fedal barhaol. -Sicrhawyd diogelwch gan gynlluniau llofnod digidol allweddol cyhoeddus. -Mae partneriaethau strategol hefyd wedi datblygu i ddatrys nifer o broblemau busnes cwmnïau. -Priodolir sawl rheswm i hyn. -Yn ddiweddar, mae prosiect dŵr mawr wedi'i gwblhau. -dyn yn ceisio cyffwrdd dolffin neu forfil neu rhyw fath o anifail môr -Roedd ei wyneb yn arw, ond yn edrych yn garedig ac yn eithaf dymunol. -Mae'r nofel fer yn nodedig am ei strwythur naratif deuol. -Roedden nhw'n gwarantu bod y pecynnau yn mynd i gyrraedd o fewn pedwar mis. -Dau ffrind yn aros i fynd i ar y bws teithio. -Ychwanegwyd rhai o'r lefelau cyfagos i hyn, ond nid yn gyfan gwbl. -Mae'n dal ei bortffolio ar hyn o bryd. -Defnyddiodd, er enghraifft, ddadansoddiad ffactor, dull ystadegol, i gefnogi ei fodel personoliaeth. -Maent yn dod yn aeddfed llawn yn eu hail flwyddyn. -Fodd bynnag, gallant feddiannu tiriogaethau sydd wedi'u gwagio pryd bynnag mae'r cyfle yn codi. -Nodir enwau Almaeneg mewn llythrennau "italig". -Mae'n storio amrywiadau byd eang. -Mae'r amodau mewn gwersylloedd llafur yn amrywio'n fawr yn dibynnu ar y gweithredwyr. -Mae pwerau hudolus y dŵr yn ei gwneud hi'n bosibl iddi oroesi'r gosb. -Mae dadlau ynghylch cyd-destun yr ymadrodd hwn. -Dywedwyd iddo gael ei ysbrydoli gan gariad yn ystod y frwydr. -Ar yr un pryd mae'n rhyddfrydol yn ddiwylliannol ac yn gymdeithasol. -Cynlluniwyd yr iaith i “hwyluso” datblygiad rhaglenni cyfochrog. -Mae ganddi hefyd linell dywyll sy'n mynd yn llorweddol ar draws ei llygaid. -Yn y ddelwedd honno, dangoswyd Mary hefyd yn pwyntio at ei "Chalon Bur". -Mae ganddyn nhw Gyngor deuddeg person. -Mae Archer yn galw hyn yn ddilyniant morffogenetig. -Tref yn gwasanaethu'r ardaloedd cyfagos ydyw. -Dyn a dynes yn cerdded heibio i arwydd gofal. -Plentyn ifanc yn dechrau ei yrfa pêl fas -Bachgen ifanc yn ymarfer camp ymladd. -Arhosodd yn ffrindiau gyda'r awdur ar hyd ei oes. -O'th “lyfr” di! -Y Palas yw canolfan cangen weithredol y llywodraeth fwrdeistrefol. -Mae'r tai eu hunain yn cynnwys dewisiadau pensaernïol yn gyffredinol yn unol â'r gymdogaeth. -Mae deltoidau'n codi mewn amryw o feysydd mathemateg. -Roedd y gyfres hefyd yn boblogaidd yn Seland Newydd. -Cafodd ei ddiarddel o'r ysgol ganol am ymddygiad gwael a meddwl yn rhydd. -Mae hi wedi bod yn actio ers pan oedd hi'n ifanc. -Mae planhigion delfrydol wedi'u tyfu o doriad coesyn ac o hadau. -Roedd crysau tebyg yn cael eu defnyddio gan dimau Cynghrair Pêl-droed Americanaidd y Byd. -Mae beicwyr yn reidio drwy goedwig wrth i wylwyr eu cymeradwyo -Mae'n beryglus iawn. -Mae'n cynnig pêl-fasged dynion, pêl fas, trac a chae, a thraws gwlad. -Mae'n saig boblogaidd iawn yn Iran a Gweriniaeth Azerbaijan gyfagos. -Y canlyniad oedd colli'r siarter. -Methodd y ddau gyntaf yn eu hymosodiadau a chawsant eu saethu yn eu hymdrechion. -Roedd hi'n awdur ar gyfer papurau newydd a chylchgronau. -Mae gan y gymuned nifer o israniadau o amgylch llyn preifat. -Golygfa stryd gyda cheir wedi'u parcio a siop fwyd fechan -Defnyddir cynhwysion eraill hefyd. -Mae'n cynnig ystod lawn o gyrsiau o gyfleusterau cyn-ysgol feithrin i Ddiploma Bagloriaeth Ryngwladol. -Felly, arhosodd y gwaith yn gyfan fel y'i trefnwyd yn wreiddiol. -Ni wnaethant ailadrodd eu llwyddiant cynharach ar ôl y newid. -Mae'r Hen Llynges yn adnabyddus am eu steil denim sydd byth yn newid. -Fe wnaeth nifer aelodau'r Rhyddfrydwyr ostwng i saith. -Dyn a menyw yn eistedd ar ben car wedi ei barcio. -Cyhoeddodd ei hymddeoliad y flwyddyn honno. -Mae cynnwys y rhaglen yn cael ei newid bob blwyddyn. -“Metro” oedd ei gystadleuydd. -Mae coets gwersylla ger y platfform tua'r gorllewin yn cynnig llety gwyliau. -Roedd yna hefyd Eglwys Annibynnol Bresbyteraidd. -Gall bar hario wedi'i gysylltu â strap tynnu fod yn angheuol. -Ychwanegodd yr adran gaffeteria newydd, llyfrgell a llefydd ystafell ddosbarth agored. -Nid yw ei linach wedi ei sefydlu'n bendant gan haneswyr, fodd bynnag. -Yn ei destament, rhoddodd ei lyfrgell breifat fawr i'r ddinas. -Fe'i defnyddiwyd yn bennaf ar gyfer fersiynau offerynnol trosleisio, yn aml ar ochr-b recordiau. -Roedd yn Bresbyteriad gweithgar ac yn aelod o'r Seiri Rhyddion. -Nid oes unrhyw blaid wedi ennill y mwyafrif o seddi ar ôl hyn. -Rhedodd y plentyn ifanc yn y crys du a jîns i lawr y llwybr. -Mae dyn hŷn yn gweithio ar brosiect gwaith coed. -Mae amgodwyr a datgodwyr yn defnyddio'r graffiau hyn yn helaeth. -Mae cyfraith gyffredin yn derm gyda gwreiddiau hanesyddol yn system gyfreithiol Lloegr. -Creodd yr iaith raglennu Perl. -Dyma yw ymddangosiad olaf y cymeriad. -Mae hwn ar gyfer rhamant ... ! -Merch ifanc â rhubanau gwallt yn dylyfu gên. -Adenydd neu ddim adenydd, mae'n ymddangos fod ganddo libido sy'n debyg i gardd-amrywiaeth cwrcyn. -Mae newid anfeidrol fach y fector yn fesur o'r crymedd. -Datganodd yr erthygl fodolaeth y gêm i fod yn "amhendant". -Mae ci brown a gwyn yn rhedeg gyda'i geg ar agor. -Maen nhw hefyd yn cael eu gwahanu yn ôl lliw. -Yn gyffredinol, mae'r risgiau'n isel iawn os nad oes unrhyw ffactorau risg eraill. -Am gyfnod, serch hynny, roedd y cyflenwad o "ffyliaid mwy" wedi bod yn rhagorol. -Mae gan y maes awyr hediadau i Ganada, Mecsico, Caribî ac Ewrop. -Gweler y llenyddiaeth sydd ar gael ar gyfer damcaniaeth parth. -Mae'r diagram ar y dde yn darlunio naid. -Dynes mewn gwisg binc a dynes mewn crys oren yn cerdded ar draws stryd. -Mae'n hy ac yn rhodresgar ac yn dod yn gyfreithiwr. -Felly addawodd fynd â hi i'r gwylnosau ar ôl swper. -Teulu yn eistedd allan ar eu bwrdd. -Dyn yn bwyta ac yn dal babi â het wen. -Canlyniad y cynllunio manwl oedd ymosodiad bron yn ddiwrthwynebiad i mewn i'r amlwg. -Mae'r gêm yn rhoi tri bywyd a thri pharhau i'r chwaraewr. -Bu'n rhaid iddo lwyddo mewn prawf arall o'i fawredd trwy gario yn y ras. -Na; ond mae ganddo lawer o ffrindiau mynwesol. -Ef hefyd oedd y person olaf a enwebwyd yn Gyfarwyddwr Cynorthwyol i farw. -Mae grŵp o bobl wedi ymgasglu mewn ardal gyhoeddus. -Aeth yn dywyll, chwibanodd y gwynt, gwichiodd a griddfanodd y coed. -Gwrthododd yr awdurdodau'r cais hwn fel twyll. -Mae dynes yn sefyll mewn twll draenio mawr. -Daeth yr adeiladau hynny yn Neuadd Gerdd a Sefydliad y Mecanyddion. -Tarian goch gyda latis aur yw hwnnw. -Mae dyn ar feic modur yn perfformio camp yn yr awyr. -Cymerir bwledi ac arfau ar gyfer paru clwyfau a balisteg. -Cath wen yn eistedd ar wal garreg. -Roedd ei lywodraeth wedi cefnogi'r Unol Daleithiau yn rhyfel Irac. -Y dull arall cyffredin yw llinellu, sy'n defnyddio llinellau yn lle dotiau. -Mae menyw hŷn yn defnyddio dringwr grisiau mewn dillad nad ydynt yn rhai chwaraeon. -Nododd ei fasnachwyr ei greadigaethau fel rhai gwreiddiol gan gerflunwyr eraill. -Mae'r twnnel tua o hyd, yn cynnwys ffordd o dan ddŵr. -Mae ei waith wedi cael ei gyfieithu i Saesneg, Ffrangeg, Sbaeneg, Eidaleg ac Almaeneg. -Mae mwy o heddlu yno i chwalu'r dorf gyda phibelli dŵr tân. -Mae'r mynediad cyntaf i'r cyfeiriadur o leiaf yn cael ei berfformio -Mae'r radd ôl-raddedig mewn perfformiad deuawd piano yn unigryw yn Ewrop. -Ar lefel yr ail lawr roedd cyfres o lefydd wedi'u cerflunio a ffurfiai heulfan. -Etholir swyddfeydd llywodraethwr ac is-lywodraethwr ar yr un tocyn. -Dechreuodd y rhan fwyaf o'r labeli oedd wedi eu rhestru yn y paragraff blaenorol. -Mae ci du a gwyn yn llamu drwy'r rhwd gwenith tal. -Mae'r ferch yn y ffotograff i weld yn mwynhau chwarae badminton. -Rydym wedi bod yn gefn i'n gilydd erioed. -Mae cydamheuon yn arwain at ysgariad. -Ac yn ddryslyd iawn. -Mae'r term "bath" yn cyfeirio at siâp y car. -Gellir ei rigio i gael ei hwylio'n unigol. -Mae ganddo isffram olwyn gynffon sefydlog gyda sbats ar y prif olwynion. -Roedd ei ail erthygl y flwyddyn honno yn darlunio model stocastig o symudiad Brownaidd. -Mae ci'n rhedeg ar eira a chanddo belen eira yn ei geg. -Mae'r gro hefyd yn ffurfio dyfrhaen sylweddol ar gyfer yr ardal. -Claddwyd ei gweddillion yn y fynwent Iddewig. -Mae llawer o bobl ar y stryd yn dal balwnau. -Maent hefyd yn cael eu hadnabod fel “siroedd hynafol”. -Mae gan bob un o'r adrannau hyn nifer o is-rannau neu unedau. -Ychwanegwyd pocedi cudd at y dillad a wisgwyd yn ystod y negeseuon cyfrinachol hyn. -Miloedd o bobl yn mynychu rali neu ddigwyddiad. -Mae'r gân ar gael i'r cyhoedd. -Mewnfudwyr o'r Almaen oedd ei ddau riant ac roedd y ddau ohonyn nhw'n alcoholig. -Roedd y tryc llusgo yn cario'r un llwyth echel â'r gyrwyr, oedd yn anarferol. -Dirywiodd ei iechyd yn gyson. -Fe ymddiswyddodd ddwy flynedd yn ddiweddarach, pan ganfuwyd nad oedd hyn yn wir. -Nid oedd dogfen ffurfiol. -Rwy'n deall y teimlad hwn. -Mae ganddi liw bron golau yn y ffilm. -Profodd aelodaeth y band yn broblem drwy gydol ei yrfa. -Roedd economi Llyn Melville yn ymwneud â physgota a ffwr. -Mae'r algorithm sy'n cynhyrchu cardiau angen system-gudd gyda dwy briodwedd allweddol. -Byddaf yn eistedd yn fy ystafell weithiau ac yn llefain. -Danfonodd y wlad dau ffensiwr. -Yn ogystal â gwaith yn digwydd i baratoi wyneb chwarae'r cae. -Hefyd dim gwasanaeth ffôn symudol. -Bachgen gwallt melyn mewn crys coch a siorts glas yn peintio ar gynfas. -Mae'r baneri'n cael eu llwytho i lawr o'r gyfnewidfa. -Mae'r corff yn cwympo ymlaen gan ollwng nid gwaed ond olew peirianyddol gradd uchel. -Fe'i nodweddwyd gan wrthdrawiad damcaniaethu ar ddull gwareiddiadau. -Mae'n aeddfedu'n gynnar, ac mae'n wydn i'r oerfel ac yn gwrthsefyll afiechydon ffyngaidd. -Mae amrywiadau yn lleol i reolau. -Defnyddir cynwysyddion yn aml mewn cymwysiadau amlgyfrwng. -Dyma haneswyr a chroniclwyr mwyaf a mwyaf arwyddocaol y cyfnod. -Mae pwyslais cryf ar berfformio styntiau. -Mae bachgen yn gorwedd ar fainc bwrdd picnic. -Mae'r ardal drefol mewn rhan arbennig o wyrdd o Wlad Pwyl. -Roedd y gwn yn parhau i fod yn ei feddiant. -Mae'r effaith yn gryfach yn y nos am yr un rheswm. -Neu efallai y gwnawn ni'r model yn fwy realistig byth. -Mae hi o dras Tsieineaidd. -Mae'n awdur nifer o werslyfrau cyfreithiol. -Gŵr pryd tywyll yn chwarae rygbi. -Mae'n brin o sugnydd cefnol atalbysgodyn ac mae ganddo gorff mwy cadarn. -Ar ôl swper, roedd William eisiau ysgrifennu llythyr. -Yn ein dydd ni, cafwyd sïon bod rhai gangiau yn gwneud cyfamodau gwaed. -Roedd y model hwn yn cynnwys ffyrc gwrthdro a llyffu arddull rasio wedi'i ddiweddaru. -Yn anffodus dydyn ni ddim ar ein pennau ein hunain yn y byd hwn. -Mae'r cyfansoddyn yn crisialu motiff ciwbig o'r enw strwythur fflworit. -Arhosodd y criwser gwarchodedig yn segur am yn agos i dair blynedd. -Fodd bynnag, mae llawer o eithriadau. -Mae ei gŵr bob amser i ffwrdd ar deithiau busnes neu yn y gwaith. -Cafodd ei erthyglau a'i alw i'r Bar, ond ni wnaeth ymarfer y gyfraith. -Cymerodd dair blynedd cyn y gallai ddechrau gwerthu am bris agosach at bris llawn. -Mae bellach yn byw ger Bonn. -Yn y diwedd, dechreuodd ychwanegu lliw at ei phrintiau â llaw. -Yn Cannes roedd hi gyda ni trwy'r amser. -Grŵp cerddorol yn perfformio o flaen cynulleidfa fyw. -Mae hwn bellach yn safle abseilio poblogaidd. -Cafodd y tywydd gwael ei restru fel ffactor cyfrannol. -Ar gyfer bosonau, fel ffotonau a glwonau, mae "n" yn eilrif. -Pa mor gryf ydych chi? -Bum mlynedd yn ddiweddarach daeth yn brifddinas daleithiol a derbyniodd statws dinas. -Cafodd wersi gitâr am bedair blynedd ar ôl hynny. -Mae'r gyfraith newydd yn gosod safonau ar wahân ar gyfer rheoleiddio cwmnïau buddsoddi. -Addawodd ymladd yn erbyn diweithdra, dirywiad economaidd a llygredd. -Mae'n arlliw canolig disglair marŵn hanner ffordd rhwng brown a rhosyn. -Ni ddangoswyd i mi fedd fy mam erioed. -Mae'n agored am ddim ar ddydd Sul, Gwyliau Cyhoeddus ac ar gyfer digwyddiadau arbennig. -Ar adegau, mae hefyd yn llwfr ac yn rhagrithiol. -Dau ddyn yn gwisgo helmedau beic modur, un yn dal darn o bapur. -Mae rhywun yn dringo wal dringo cerrig. -Roedd yn cynnwys cyfres o sgarmesoedd dinistriol ac ymgyrchoedd awyr bron yn ddyddiol. -Mae gan fy llais rhyw fath o sŵn digynnwrf. -Roedd gan y grŵp ei ganolfan yn Ne Gwlad Thai. -Mae hyn yn golygu amser cyfartal ar gyfer pob ymgeisydd ar bob rhwydwaith darlledu. -Llawer o ffenomenau corfforol wedi eu hastudio ar y strwythurau hyn. -Mae'r gôl-geidwad yn cyrcydu o flaen y gôl. -Nid yw amserlen gadarn ar gyfer adeiladu wedi'i gwireddu eto. -Gweithiodd a chyhoeddodd waith ar anifeiliaid di-asgwrn-cefn, amffibiaid, ymlusgiaid, mamaliaid ac adar eraill hefyd. -Mae'r safle yn cael ei gynnal fel parc ar hyn o bryd. -Mae'r bachgen côr wedi dychwelyd i ganu yn eglwys ei dad. -Dyma le mae'r llyfr yn symud i mewn i stori Khan. -Etifeddiad trechol awtosomaidd yn cael ei adrodd hefyd. -Dyfarnwyd yn wreiddiol fod y gic yn fethiant. -Defnyddir monoglyseridau yn bennaf fel gwlychwyr, fel arfer ar ffurf emylsyddion. -Mae'n debyg bod y condemniedig wedi gwrthod yr holl gynigion o'r fath. -Hedfanodd Ann i'r llawr, ei wyneb yn loyw a'i llygaid yn pefrio. -Dyn yn rhawio eira o flaen tŷ. -Roedd perfformiadau corawl yn draddodiad cyffredin ym mhob dinas-wladwriaeth yng Ngroeg. -Rwyf am ddechrau'r swydd ar garlam. -Crwydryn yw Sri Lanka, wedi ei gofnodi mewn amser unigol. -Gall fod cysylltiadau trydanol ychwanegol ar hyd y dirwyniadau; tapiau yw'r rhain. -Mae'r ci brown bach yn llamu dros y wal frics. -Mae'n llai o ymrwymiad. -Mae'r strwythur hwn o gyfaint cyfyngedig. -Nid yw'n lladd chwain llawn dwf. -Ymhlith ei ddaliadau mae cofnodion Rhyfel Cartref ac achyddol. -Yn ddiweddarach, daeth yn hyfforddwr sglefrio ffigur. -Mae llawer o'r cerddi unigol hyn yn boblogaidd mewn antholegau. -Llafn gwthio dwylafn pren neu fetel. -Mae e'n gyd-drefnydd cenedlaethol yn Sri Lanka ar gyfer Cyfrifiad Adar Dŵr Asia. -Daeth twf gydag oes y “Bŵm Babanod” ar ôl yr Ail Ryfel Byd. -Mae rhai â chysylltiad agos â dathliadau Swedaidd. -Mae ei brif gyfraniadau gwyddonol ym maes symud cyrff nefol bach. -Mae dau ddyn yn gweithio ar ffenestr gron gan sefyll ar gadeiriau. -Maen nhw'n ffrwydro allan o'r ystod fridio pan fydd y cnwd o gonau'n methu. -Mae gennyf fusnes sy'n gadarn yn ariannol. -Roedd y blaid hefyd yn wynebu anawsterau ariannol a gorfod gwerthu asedau'r blaid. -Meddyliais, gall y dyn hwn ei chwarae. -Mae'r gweithredwr yn llywio'r taflegryn â llaw gyda ffon reoli fach. -Mae'r ganolfan niwmotacsig yn ei rwystro. -Roedd y set hon yn cynnwys adeiladau a gorsaf drenau, ymysg pethau eraill. -Mae Neo-Ryddfrydiaeth yn Gyfalafiaeth ymosodol. -The Roots sydd wedi derbyn y mwyaf o enwebiadau heb ennill, gyda phump. -Fodd bynnag, mae sawl Prif Weinidog yn y gorffennol wedi bod yn Gristnogion. -Y thema oedd heddwch, democratiaeth, a datblygu. -Bu farw Molson wrth ymladd yn y Rhyfel Byd Cyntaf. -Denodd lliw anarferol y mwg fwy o wylwyr. -Mae'r warchodfa yn ardal o goedwig law, coetir a glaswelltir arfordirol. -Aethoch chi i Baris? -Ni ddatgelwyd telerau ariannol y caffaeliad. -Fel gyda'r Atlas Manceinion, roedd yn defnyddio cydrannau arwahanol, yn enwedig transistorau germaniwm. -Cyn troi'n actor pornograffig, bu'n gweithio fel gyrrwr tryc. -Mae'n bosibl mai dyma'r record bwysicaf ym myd seiclo. -Cofnodir iddo gael ei drywanu i farwolaeth yn ei addoldy. -Mae'r doctor yn cytuno y bydd y syniad yn gweithio. -Mae hyn yn esbonio'r gwahaniaeth rhwng y ddau dabl. -Mae'r bennod ynghylch claddu yn arwyddocaol. -Ceir rhestr gyflawn o ganlyniadau yn yr erthygl am brif bencampwriaethau hŷn. -Mae'n cael ei ddefnyddio'n aml mewn coginio Japaneaidd, fel topin ar gyfer “sekihan”. -Cynhelir y seremoni wobrwyo yn Llundain. -Mae amheuaeth gan lawer bod pob un yn llym. -Mewn anobaith, hedfanodd Thor i mewn i'r bod ynni, gan amharu ar ffurf Ymosodiad. -Roedd hi hefyd yn etholfreintiwr gweithredol. -Cyn iddo gael y gorchymyn symud, cafodd ei alw'n ôl i Tsieina. -Mae gan lawer o bobl y ddau fath. -Mewn gwirionedd, defnyddir y systemau anghlasurol mwyaf cyffredin mewn mathemateg adeiladol. -Tri pherson yn bwyta mewn caffeteria. -Mae cynlluniau ar gyfer adeiladu pont newydd i leihau traffig drwy'r canol. -Y maes awyr yw un o'r unig gyflogwyr ar ôl yn y gymuned. -Dydy'r gwaith cynnar ddim yn dangos unrhyw wrthrychau heblaw pibell yn cael eu defnyddio. -Cynigiai dechnoleg arloesol yn ei fotor a steil trawiadol. -Mae nifer o'u gemau bellach yn cael eu cario gan gyhoeddwyr eraill. -Dyma'r eicon y mae Cristnogion Uniongred fel arfer yn cyffesu eu pechodau. -Hi oedd ffefryn y bwcis cyn y gystadleuaeth i ennill, ynghyd â Ffrainc. -Parhaodd y gwaith adeiladu er gwaetha'r gwrthwynebiad. -Enghraifft o'r fath iaith yw set o rifau cysefin. -A hithau mewn lleoliad strategol, roedd y dref yn amddiffyn dinasoedd i'r de. -Gellir ei ddefnyddio ar gyfer rhai profion gweithredol hefyd. -Mae'r cyngor yn pleidleisio ar gynigion, penderfyniadau a threfnolion ac yn eu pasio. -Am gyfnod byr rhoddodd y gorau i'r llynges ac ymunodd â'r musketeers. -Nid oes neb yn gwybod dim am yr awdur. -Nifer o ddynion yn cerdded heibio i babell yn sylwi ar arwydd. -Mae ci brown yn ceisio dal Ffrisbi. -Y Dwyrain Canol, De-ddwyrain Asia ac Affrica. -Chwarterwr yn taflu'r bêl i chwaraewr cefn. -Yn ystod y Rhyfel Byd Cyntaf, trosodd ei ffatrïoedd i gynhyrchu pelenni ffrwydrol. -Roedd rhwydweithio cymdeithasol yn greiddiol i'r sefydliad. -Mae lleihadaeth gynnil-damcaniaeth systemau, er enghraifft-yn cynnwys lleihau'r tu mewn i'r tu allan. -Mae dau o bobl yn reidio mewn car rasio oren. -Ond mae'r achos yn dibynnu'n gyfan gwbl ar dystiolaeth fewnol a beirniadaethau goddrychol. -Dyma sy'n cyfateb i addysg gyrwyr ar gyfer gyrwyr ceir. -Mae ci bach gwyn gyda'i dafod allan yn neidio er mwyn dal tegan. -Faint o liwiau sydd yn sbectrwm yr enfys? -Roedd hi'n hyfryd gyda mi. -Mi gei di wybod pa mor galed ydw i. -Mae bachgen bach heb grys yn neidio yn y dŵr sy'n llawn malurion. -Ar ôl cau'r gloddfa, arhosodd rhai siafftiau a mynedfeydd ar agor. -Sut allwn ni wneud iawn i chi? -Felly'r cyfan a welwch chi fydd y fi'n chwerthin. -Nid yw patholeg methiant awtonomig pur wedi'i ddeall yn llwyr eto. -Mae adipocytau'n rhyddhau leptin mewn ymateb i'w dognau o fwyd. -Bellach, mae ganddo bum cangen yn Nigeria. -Roedd y peiriant tân ar ei ffordd i argyfwng. -Ar ôl ei farwolaeth dyfarnwyd iddo Groes Lawryfog Sant Ferdinand, anrhydedd filwrol uchaf Sbaen. -Heddiw mae wedi cael ei adfer yn safle archeolegol. -Hwn yw'r corff llywodraethu ar gyfer y myfyrwyr. -Yna byddai'r Ca yn mynd ati i leihau'r catod. -Mae symptomau dechreuol yn cynnwys anoddefiad, gweddillion gastrig cynyddol, chwydd abdomenol a charthion gwaedlyd. -Mae glawiad yn amrywio'n fawr yn Nicaragua. -Fel ei frawd hynaf, ni chymerodd unrhyw ran weithredol yn y Rhyfeloedd Cartref. -Gall tynnu gynnwys trychiad syml, tynnu endosgopig, neu liposugno. -Ychydig o bobl yn cerdded wrth drac rasio cyn ras. -Mae'n edrych i'r drych ac yn ymuno â'r parti wedyn. -Mynnodd hefyd ni ddylai diwylliant fod yn llonydd. -Yng ngorllewin yr Unol Daleithiau, mae rhai adar yn breswylwyr parhaol. -Dwy ddynes yn eistedd wrth fwrdd ac yn gweithio â chlai. -Eisteddai â mwyafrif gweinidogol yn y siambr uchaf hyd ei farwolaeth. -Mae ei ddefnydd ar gyfer byrddau cownter mewn ceginau yn ehangu'n gyflym. -Meddiannir y safle bellach gan Glwb Brenhinol y Modurwyr. -Mae dyn mewn siaced felen a du yn eistedd ar feic melyn. -Rhoddwyd i'r llong ddistryw bedwar lansiwr taflegrau Safonol, gyda'r gallu i lansio wyth taflegryn. -Mae defnydd y tasel yn awr yn addurniadol yn bennaf. -Mae'r ddau gorff yn cynorthwyo ei gilydd ar adegau. -Rhoddodd y gem y gallu iddo delegludo i leoedd y mae'n gwybod amdanynt. -Nid yw hyn wedi ei wneud eto. -Mae tri gweithiwr yn cerdded allan o'u hadeilad diogel ar ddiwedd y dydd. -Felly trodd gwladychiaeth yr Almaen at gyfandir Ewrop. -Nid oes unrhyw drenau bellach yn rhedeg ar y darn hwn o'r llinell. -Ar hyn o bryd, mae'n agored i'r cyhoedd. -Mae'r ci brown yn rhedeg tuag at diwb glas a melyn. -Roedd yn cael ei ystyried yn un o beintwyr noethluniau gorau Ewrop. -Roedd system gyfathrebu lawrydd ar gael hefyd. -O fewn y genom ceir hefyd chwe genyn ffug. -Cwpwl ifanc yn chwarae mewn ffynnon. -Cedwir ei phapurau yn Archif Ryngwladol Menywod mewn Pensaernïaeth. -Dechreuodd penseiri llyngesol a pheirianwyr sifil ystyried y dimensiynau hyn ar gyfer llongau cynwysyddion. -Mae elfennau o reolyddion yr awyren yn cynnwys rhyngwynebau sgrîn cyffwrdd. -Yma y gwnaethant gyfarfod â chydweithwyr y dyfodol, yn gantorion a chyfansoddwyr caneuon. -Fodd bynnag, mae hi'n dehongli ei gymhellion ac yn gwrthod. -Mae'r rhan fwyaf o daflegrau gwrth-long yn defnyddio radar-lywio gweithredol ar gyfer llywio terfynol. -Mae'n darparu gwasanaethau lles proffesiynol i bobl hŷn, plant a mewnfudwyr. -Mae'n ymddangos bod y pum person yma sydd y tu allan wrthi'n pysgota. -Ond nid dyma'r flwyddyn newydd i'r holl Hindŵiaid. -Bu farw ei dad, a oedd yn athro ysgol, ddwy flynedd yn ddiweddarach. -Dynes yn crafu ei hwyneb. -Mae'r enw “funitel” yn gyfansoddair cywasgedig rhwng y geiriau Ffrangeg "funiculaire" a "telepherique". -Mae plentyn yn ysgubo y tu allan i adeilad. -Mae cylchoedd clir ond cul o flew du o gwmpas y llygaid. -Gweithiodd y rhan fwyaf o'i oes yn Ffrainc a'r Almaen. -Nis cynhwysir yn unrhyw restr ar y dudalen, felly. -Mae pedwar math o Hadau Ynni: Melyn, Oren, Glas a Gwyrdd. -Mae dau ŵr mewn iwnifform yn reidio ar gwch modur. -Merch fach wallt golau'n yfed gwydraid o sudd. -Mae'n alegori o fywyd ymneilltuol Cristnogol rhag Iachawdwriaeth trwy aeddfedrwydd. -Cafodd yr arf ei adeiladu'n rhy gynnar i ddefnyddio dyfais ddiogelwch cyswllt gweithredu caniataol. -Maent yn aml yn gofyn am lefelau uchel o hyfforddiant ac addysg. -Dyn ar feic modur gwyrdd llachar, ger marchnad brysur. -Mae'r Pegwn Anhygyrchedd Affricanaidd wedi'i leoli yma. -Mae tirlithriadau a chwymp cerrig yn nodwedd barhaus o esblygiad yr arfordir hwn. -Ac, ar yr un pryd, ei glymu i'w fan genedigol. -Pobl yn ymlwybro mewn ardal laswelltog gyda choed. -Mae dyn â llif yn creu cerflun iâ. -Yn y ddau o'r achosion hyn, bydd y tebygolrwydd yn sero bob amser. -Ond rwy'n dal i geisio cael y geneteg yn iawn. -Daw'r "cyflymiad disgyrchol" ar y cyhydedd o reol disgyrchiant cyffredin Newton. -Mi fydd - mae'n sicr y bydd yn ddyrys. -Mae Martin yn gwneud ei ffordd yn ôl i'r orsaf betrol. -Heddiw, mae gweddi barhaus yn arfer cyffredin mewn llawer o eglwysi. -Gwelwyd bod dulliau traddodiadol o gyflwyno'r data hyn yn annigonol. -Roedd yr amgylchedd yn debyg i'w gwlad enedigol yn yr Alban. -Y Tad Badin oedd yr offeiriad cyntaf a ordeiniwyd yn yr Unol Daleithiau. -Roedd cadwyn allweddi harmonica wedi'i gynnwys gyda'r fersiwn cyfyngedig a ryddhawyd. -Pam ar y ddaear? -Ni chafodd y llofruddwyr, oedd yn weision iddo, eu darganfod am bum mlynedd. -Er bod dilëwyr ar y pennau hyn, bydd unrhyw ddilëydd yn ddigon da. -Dyn ar sglefr-fwrdd yn neidio o sil fach i'r palmant. -Yn ogystal, roedd ef yn genedlaetholwr blaenllaw ac yn eiriolwr dros hawliau dynol. -Ei brif nodweddion yw maes awyr bach a phwerdy. -Yn hyn mae fel y Mudiad Celf a Chrefft. -Mae'r rhain yn weddillion o'r diwydiant mwyngloddio heli a ffynnai yn yr ardal. -Llongwyr a chrefftwyr oedd y boblogaeth, yn wreiddiol. -Dyfarnwyd iddo'r teitl Tun hefyd fel gwobr am ei wasanaeth. -Cynhaliodd yr orsaf nifer o ddigwyddiadau byw hefyd, yn cynnwys cerddorion blaenllaw. -Ond daliodd y swydd honno am flwyddyn. -Dyn mewn crys gwyrdd olewydd yn defnyddio morthwyl i gerfio gwrthrych euraidd. -un ferch a bachgen yn cael parti cwrw gartref. -Nid yw ei waith yn gwerthu am gymaint o arian. -Yn nhw yw'r prif wrthwynebwyr. -Mae nifer o eglwysi Efengylaidd a Phentecostaidd hefyd. -Mae'n cludo pobl Affricanaidd fel ei gargo. -Roeddent yn aml yn darlunio eu hunain mewn arlliw ysgafnach na'r llygoden. -Mae mwnci ym man A mewn labordy. -Cyn diwedd ei dymor, roedd Uruguay wedi adennill statws rhydd o'r afiechyd. -Gan anwybyddu'r gorchmynion hyn, parhaodd y môr filwyr i wrthsefyll. -Mae modd i'r offeryn gael ei daro ar yr ymyl weithiau. -Bydd y rôl ar gyfer pum pennod. -Cafodd y lloeren ei hadeiladu o alwminiwm ac ategion graffit wedi'u defnyddio. -Roedd cyllid yn broblemus o'r cychwyn cyntaf. -Mae'r model hwn yn cysylltu diagnosis o anabledd â chorff unigolyn. -Rwy'n ofni anarchiaeth. -Solomon Smith oedd y ffermwr cyntaf i ymgartrefu yno. -Mae minisatellite yn ffordd arall o ddweud rhanbarthau arbennig o'r loci. -Mae Neuadd y Pentref, sy'n cael ei rhedeg eto gan wirfoddolwyr. -Nid yw'r twrnamaint blynyddol wedi dychwelyd i Utica ers hynny. -"Ie, ie," meddai, mewn llais lleddfol. -Symudodd yn raddol at weithiau comedi, a brofodd yn fwy llwyddiannus yn fasnachol. -Maen nhw'n pasio pwynt mewn gwahanol fomentau mewn amser. -Mae'r Siglen Fraith a'r Pysgotwr penddu'n fudwyr prin. -Chwaraeodd ei cherddoriaeth fwyaf poblogaidd ran bwysig yn y sin clybiau disgo. -Mae rhubanau'n cael eu defnyddio mewn rhai seremonïau, fel mewn seremoni torri rhuban. -Mae canlyniadau cyffredinol o'r gyfres wedi bod yn gadarnhaol. -Daw'r ffotograff ei hun yn fodd o weddnewid a datgelu pethau. -Mae'n pwyso ar ben ei hun, ac fel rhan o'r system gyfan. -Ar gymeriad y boneddigion cynharaf hyn mae'r cofnodion yn taflu golau erchyll. -Mae'n cymryd cannoedd o flynyddoedd ar ôl i'r gyfres orffen -Mae'n rhaid iddo ddweud y gwirionedd. -Y ddawns a'r rhythm Groegaidd mwyaf adnabyddus yw hasapicos. -Mae'n dal i fod ar waith. -Ystyrir bod teimladau'n briodol os ydyn nhw'n gweddu i'r sefyllfa bresennol. -Ni ddaeth i'm meddwl i unwaith. -Defnyddiodd datblygwyr enw eu hinjan er mwyn comedi mewn nifer o gemau. -Gellir storio rhagor o awyrennau arnofio ar y glaswellt wrth ymyl y doc. -Mae hi'n byw yn Ninas Efrog Newydd er mwy na dau ddegawd. -Mae bachgen bach yn reidio car bach wedi'i ddylunio fel car heddlu mewn cartref. -Mae dyluniad estynadwy yn ei gwneud hi'n hawdd uwchraddio. -Dyn yn sglefrfyrddio mewn parc sglefrfyrddio sydd wedi'i orchuddio â graffiti. -Safbwynt y gwyliwr yw'r dyn sy'n cysgu gyda hi. -Mae'r ddolen gron y tu hwnt i'r orsaf. -Mae salfinorin yn neoclerodan-deuterpenoid “trans”. -Bydd yn costio doler ichi. -Mae cyflymder hedfan uchel yn caniatáu iddo fachu targedau yn gyflym. -Gwnaeth y clwb yn llwydiannus wrth y gât hefyd. -Yn ei fag dogfennau roedd rendradau o'r gofeb, y cynllun olaf a gwblhawyd ganddo. -Arweiniodd datblygiad efelychwyr consol at fynediad i gemau fideo tramor. -Mae menyw'n sgïo i lawr llethr. -Mae'r gellesgen yn lliw coch rhydlyd cryf. -Pobl yn sgïo ar fryn wedi'i orchuddio ag eira. -Cafodd y Senedd ei hailgorffori i gynnwys Senedd a Chynulliad Cenedlaethol. -Gellir disgrifio grwpiau mewn gwahanol ffyrdd. -Yn anarferol felly, gall y larfau yn aml fod yn fwy na'r oedolyn. -Mae llawer o lwybrau olynol yn dilyn patrwm datblygu pedwar cam sylfaenol. -Mae'r ffowntenni dŵr yn olion arbennig o bwysig o'r gymuned hanesyddol. -Roedd penodiadau amhlwyfol o'r fath yn eithriadol o anarferol ar y pryd. -beiciwr yn reidio heb ddwylo mewn ras. -Gall myfyrwyr ag anableddau wneud cais am grant ychwanegol i dalu costau anghyffredin. -Byddai'r rheolau hyn yn caniatáu defnydd heddychlon yn unig o ynni atomig . -Goroeswyd ef gan chwech o wyrion. -Dadleuodd dros wahanol fathau o realaeth a chredai fod ei ddull gweithredu yn unigryw. -Symudasant yn araf oddi wrth ei gilydd. -Newidiodd y gymdeithas ei henw yn Gymdeithas Sgowtiaid Malta. -Mae'n ymestyn am dros mewn cyfeiriad gogledd-orllewinol. -Maent yn cael eu diffinio yn ôl math y toriad a'r addasiad a wnaed. -Ni ddylai'r rhestr hon gynnwys cyhoeddwyr academaidd eraill. -Roedd yn edrych fel porthdy saethu gŵr bonheddig. -Mae hyn i gynrychioli bod Sweden mor gyson â seren sydd byth yn machludo. -Maen nhw wedi'u rhestru uchod mewn cromfachau. -Mae'r bwâu cefn a gweddill y prif fwa o goncrit. -Mae basnau gwaddodol yn ffurfio safleoedd cydgyfeiriol, dargyfeiriol a trawsnewidiol yn bennaf. -Y thema gyson yw dyhead Edna am bartner rhamantus. -Taniodd y milwyr i'r dorf a lladd nifer o bobl. -Mae'r llifwaddod cwaternaidd i'w gael yn ne a chanolbarth Gordon. -Rydyn ni'n cymryd ein hamser, yn datgymalu pethau. -Mae patrôl y ffin wedi darfod oherwydd gweithgareddau eithafol. -Mae glanhau ethnig yn arwain at ladd torfol. -Ystyrir y tîm i fod y tîm gorau a welodd Michigan erioed. -Mae'r stori yn llawn o gymeriadau lliwgar, digwyddiadau ystyrlon, a charwriaethau. -Ceir hefyd brywes dŵr. -Nofel sy'n llawn datblygiadau annisgwyl. -Mae rhai yn gydradd ail neu drydydd. -Ac, ar ran fy mhlant, diolch anferth. -Mae'n cael ei nodweddu gan ffitiau. -Gwasanaethodd am un tymor yn Senedd Lloegr fel Aelod Seneddol Meirionnydd. -Mae hi'n twyllo ei hun. -Wn i ddim os mai cyfnewid cod oedd e chwaith. -Gellir gwasgu'r had, er mwyn cynhyrchu olew ar gyfer y gegin. -Tisio mynd allan heno? -Mae criw yn Sir Benfro wedi codi dwy fil yn lleol. -Dewiswyd Edwards fel yr ymgeisydd Rhyddfrydol ar gyfer etholaeth newydd Castell Nedd. -Benyw wedi gadael ei glasoed yw dynes neu wraig. -Roedd yr wynebau rhyfedd yn yr hen bortreadau fel petaen nhw yn syllu hefyd. -Gafo' ni dywydd braf wythnos ddwytha'. -Edrychodd Mary yn fwy stiff nag erioed. -Gofynnodd y mab wrth ei dad am feic newydd. -Hi, ynghyd â'i gŵr, a greodd y corff pleidleisio barn Almaeneg cyntaf. -Dylai fod ddwywaith gymaint o bwysau na'r un arall. -Mae hefyd yn cynnwys cartwnau safonol. -Mae'r môr yn beryg. -Ystyrir y teledu yn un o brif nwyddau traul y byd. -Gellir, hefyd, ddefnyddio Theorem Pythagoras fel sail i lunio ongl sgwâr. -Merch y Tywysog Dafydd ap Gruffudd oedd Gwladys. -Wedi hynny, cynlluniwyd rhagor o fandaliaeth a llosgi bwriadol gan y merched. -Mae'n un o faestrefi Ellesmere Port. -Fodd bynnag, ysgrifennodd yn gyson drwy gydol ei bywyd fel oedolyn. -Rwy wedi sgwennu darn amdano. -Roedd hi eisiau gweld beth oedd tu fewn i'r waliau. -Cafwyd protestio brwd ac yn y pen draw, llwyddwyd i oresgyn y bygythiad. -Cyhoeddodd eu Siarter wreiddiol eu hawl i gymryd y tiroedd oddi wrth Israel. -Afalau Enlli, coeden afal oedd ar un cyfnod bron wedi diflannu. -Llyfryn dwyieithog yn cyflwyno cynigion y Llywodraeth ar gyfer Cynulliad Cymreig. -Ni chred chwaith fod rhediad amser yn troi eiddo lladrad yn eiddo cyfreithlon. -Mae lleiandy gerllaw'r safle yn dal i sefyll. -Mae'r ffurfiau anadlu yn gyffredinol ddiogel yn ystod beichiogrwydd. -Edrych yn grêt ac yn arwrol yn y gwynt. -Erbyn hyn y mae'r Blaid yn Lloegr agos wedi diflannu. -Bu ymdrech anhygoel ganddyn nhw. -Pam fod Prydain yn dal efo'r system wirion yma? -Gellir eu lliwio dro ar ôl tro, gan ailddefnyddio'r cardiau lliwio pwrpasol. -Ceir hefyd giwboid sgwâr, lle mae dau arwyneb yn sgwariau. -Mae hi nawr yn nos Wener. -Roedd yn Gymro Cymraeg ac fe'i ganed yn Abertawe. -Ond un diwrnod mae popeth yn newid. -Mae 'na ddwy stôl. -Dos o'r gegin plis. -Dyma brif gerbyd y cwmni. -Mae pobl eraill mwy technegol am greu fformat Cymraeg. -Fe wnest ti ddangos i mi lle roedd yr allwedd ddoe. -De Orllewin Prydain yw'r enw ar Gymru bellach. -Gwnaeth dechrau'r Rhyfel Byd Cyntaf ymyrryd ar addysg brifysgol a gyrfa rygbi Evans. -Yr ateb i'r cwestiwn cyntaf yn amlwg yw nac oes. -Casgliad o sgyrsiau radio gan John Roberts Williams yw Ffarwel i'r Sbectol. -Does gennym ni ddim syniad. -Mi oedd yr heddlu 'di arestio rhyw foi yn dre neithiwr. -Ti'n gallu gweld Pen y Fan o'r ffenest yma. -Nes i fynd i redeg dros y garn bore 'ma. -'Sa i'n gwbod yr ateb, edrycha yn y geiriadur. -Mi oedd hynny sawl blwyddyn yn ôl. -Dyma gychwyn dirwasgiad byd-eang. -Dw i 'di gweld rhywbeth dw i eisiau ar ebay yn yr Almaen. -Nid yw'r tŷ, mwy na'r tir, yn helaeth. -Ymddangosodd y fôr-forwyn. -Mae'n rhan, felly, o'r system dreulio. -Mae arwyddion a symptomau cyffredin yn cynnwys diffyg anadl, gorflino a chwyddo'r coesau. -Trwy ei hysgrifennu medrus a'i siarad cyhoeddus argyhoeddiadol, llwyddodd i hyrwyddo pleidlais menywod. -Wel ie, iawn 'de. -Ychwanegodd ei bod wedi credu bod y pafiliwn yn eiddo i Frenhines Lloegr. -Dyna paham y mabwysiadodd y llysenw Llaethferch yn nes ymlaen. -Cyhoeddwyd bod y dyfarniad yn derfynol heb unrhyw bosibilrwydd o apelio. -Bydd croeso i'r caneuon cyfoes hyn mewn cartrefi ac ysgolion. -Ond o'r diwedd fe dorrodd y clo. -Mae tri chant o gleifion Covid wedi cofrestru am dreialon. -Am arwydd stiwpid. -Casgliad o straeon byrion i ddysgwyr am fywyd cefn gwlad ym Mannau Brycheiniog. -Treuliodd ychydig amser gyda'r teulu yn Llundain, pan oedd yn fachgen. -Droies i 'migwrn wrth neidio dros y clawdd. -Cafodd ei eni yn Llandybie. -Mae'n warthus eu bod yn caniatáu i hyn ddigwydd. -Ond dw i ddim yn credu dy fod ti'n gwybod. -Ac roedd hyn mewn gwirionedd yn deffro ei dychymyg. -Mi oedd yr hen wrach yn cuddio tu ôl i'r goeden. -Mae angen i ti drwsio dy sanau. -Ganwyd pob un o'i phedwar taid a nain yn yr Eidal. -Rhaid i ti iwsio rhaw i symud y pridd. -Dim syniad lle rydych chi na beth fydd yn digwydd nesa. -Mae'n arbenigwraig ym maes datblygiad plant ac wedi teithio ar draws y byd. -Tisio mynd i fowlio nos fory? -Addasiad Cymraeg o Mad Iris -Roedd ganddynt un gannwyll, i bara am bythefnos. -Mae Eglwys Fihangel Sant, neu Llanfihangel, yn hen iawn. -Ond ni ddychwelodd i'r Eidal am weddill ei oes. -Dim ots gen i. -Ffafr gan fy ffrindiau sy'n siarad Almaeneg a Rwsieg plîs. -Caiff ei ddenu gan olau a blodau. -Roedd hi'n gyrru yn araf iawn. -Mae nhw'n sôn am rôl bwysig dysgu Cymraeg mewn ysgolion cyfrwng Saesneg. -Mae'r lipstic ar waelod y bag. -Prif fwyd y siani flewog ydy'r helygen. -Dim mwy o handbags. -Mi fyddai unrhyw gwch a fyddai'n ceisio mynd ar y llyn yn suddo. -Mae hynny'n dda i glywed. -Y lluosog ydy delweddau. -Mae pob curiad pwls yn cyfateb i guriad y galon. -Ffynonellau eraill o'r nwy ydy llosgfynyddoedd, coedwigoedd a thanau. -Darluniau lliw a du-a-gwyn. -Stori fywiog sy'n ddilyniant i Campau Siani'r Shetland. -Helpa fi i gario'r bagiau siopa mewn i'r tŷ. -Mae'n nhw'n rhagweld pegwn Covid yn y gogledd ddiwedd Mai. -Nac ydyw, gyfaill, nac ydyw. -Yn draddodiadol, mae'r flwyddyn yn dechrau ac yn gorffen ar Nos Galan Gaeaf. -Casgliad o ysgrifau gan William Owen yw Methu Peidio. -Yn ôl traddodiad, ymladdwyd y frwydr ar safle ger Yr Wyddgrug. -Mae hefyd restr gyda pharagraff am holl drefi a phentrefi Sir Gaernarfon. -Addasiad Cymraeg o stori ddoniol am gar arbennig a'i bum perchennog gwahanol. -Ni'n lico gwylio ffilmiau dwl. -Cadwodd ei sedd am weddill ei oes yn gwbl ddiwrthwynebiad. -Yn ôl rhai, hi oedd y gyflwynwraig fenywaidd cyntaf yng ngwledydd Prydain. -Yr enw ar yr ochr sydd gyferbyn yr ongl sgwâr yw hypotenws. -Ewch ati i gofnodi holl lefydd y byd. -Mae'r cysyniad o set yn un o feysydd craidd mathemateg. -Nofel ar gyfer plant a'r arddegau gan Dyfed Glyn yw Llygad y Ddraig. -Roedd yn gorwedd ar y ddaear ger drws yn yr iard gefn. -Fe'i defnyddir yn aml gyda lens gwydr neu blastig tryloyw. -Parhaodd y cyfweliad am hanner awr. -Wrth weithio yn Efrog Newydd, fe'i chyflwynwyd gan ffrind i gyfarwyddwr asiantaeth hysbysebu. -Llyfr lliwgar gyda thestun syml ar gyfer plant bach. -Ddwy flynedd yn ddiweddarach cafodd ei benodi'r Archesgob Caer. -Y brif stori yn y llyfr yw marwolaeth y fam. -Hwnna wedi'i sgwennu ddoe ond dim ond rŵan wasgais i'r botwm cyhoeddi. -Gwneir hyn o fewn gwahanol fathau o dirffurfiau, patrymau gofodol, ymchwil a pholisi. -Mae'r dyn yn dreifio'r tractor. -Gan pwy gest ti'r hufen ia 'na? -Mae Ardal Ymchwil Ceredigion yn cyfateb yn union â ffiniau sir bresennol Ceredigion. -Mae sawl rheswm dros fwydo ar y fron. -Dyna'r rheswm pam nad aeth o yno. -Mae 'na fwrdd ar gael am chwech o' gloch os dach chi isio. -Dw i eisiau gweld fy ngŵr unwaith eto. -Y flwyddyn ddilynol dychwelodd Jones i Gymru yn genhadwr Mormonaidd. -Detholiad o dros ugain o hwiangerddi Cymru, wedi eu darlunio. -Mae cariad dyn at iaith ei dadau yn un o'r teimladau mwyaf cysegredig. -Ar ben hyn y mae siâp darnau cymalog yr esgyrnynnau yn gweithio fel lifer. -Gwnaed hyn yng Ngwlad Roeg, pan oedd mathemateg yn ei ddyddiau cynnar. -Diffinnir gofod affin fel dimensiwn gofod fector ei drawsfudiad. -Roedd y tapestri yn gorchuddio drws. -Mae bellach yn gartref i Amgueddfa Trefynwy. -Mae 'na grocodeil yn y ffos. -Tybiaf mai cyfieithiad de facto yw'r Cymraeg. -Ond teilsen llawr ydy honno, nid bricsen. -Mae'n hyrwyddo dull trochi, cyfannol a rhyngweithiol i addysgu ieithoedd. -Yn ne Ewrop ceir dwy genhedlaeth y flwyddyn. -Prif fwyd y siani flewog ydy coed llwyfen, poplys a helyg. -Nid oes un ohonynt wedi dygymod â'i chyflwr. -Eu slogan oedd dim treth heb gynrychiolaeth. -Mae glanio yng ngwlad Pwyl yn chwip o olygfa. -Wedi gadael yr ysgol mynychodd Brifysgol Glasgow a Phrifysgol Ystrad Clud. -Mae'r organau atgynhyrchu yn medru amrywio o blanhigyn i blanhigyn. -Prif fwyd y siani flewog ydy'r ffawydden. -Mae'n selog iawn. -Casgliad o straeon arswyd i oeri'r gwaed ac i rwygo'r nerfau. -Gall droi'n glocwedd neu'n wrthglocwedd. -Mae hefyd yn gallu effeithio ar bobl sydd â phroblem sylfaenol yr ymennydd. -'Swn i yno taswn i adra'. -Yno, fe'i gosodwyd ar gofeb Edward y Cyffeswr. -Roedd e'n edrych yn flinedig ac yn boenus. -Doedden nhw ddim yno yn hir cyn i'r goleuadau gael eu diffodd. -Cyfrol gan amryw o lenorion yw Ar hyd y Flwyddyn. -Fe'i gwelir yn ne a chanol Ewrop, gogledd Affrica a chanol Asia. -Roedd hi'n ddrwg iawn gen i glywed y newyddion, Ffred. -Mae'r cysyniad o ofod yn hanfodol er mwyn deall y bydysawd. -Seremoni i uno dau berson ydy priodas. -Ystyr yr enw yw gwlad wastad agored. -Nid yw Aelodau Senedd yr Alban na Senedd Ewrop yn cael eu rhestru. -Ni welem na golau llusern llety na neb a'n cyfarwyddai. -Rhoddir yr esgyrn sy'n cyfateb i rif cyntaf y broblem ar y bwrdd. -Beinties i lun o wyneb. -Mae pob rhombws yn baralelogram ac yn farcud. -Dyma gasgliad o straeon sy'n rhychwantu cyfnod o hanner canrif. -Y mynegiant arferol ar gyfer onglau yw naill ai gradd neu radian. -Stori gan Len Evans yw Y Trywydd Du. -Casgliad o ysgrifau gan Robert Rhys yw Y Patrwm Amryliw. -Ceir crug crwn arall gerllaw. -Cafodd ei godi i'r Cyfrin Gyngor ar ei apwyntiad. -Yna cymysgwch gydag un o'r dilynol, neu gyfuniad o ddau neu dri ohonynt. -Gwasanaeth Tân ac Achub De Cymru. -Cymry Cymraeg o Garno oedd ei rieni. -Nid oedd y borfa gystal yn y fferm newydd. -Mae'n un o ddau ddeg pedwar adeilad sydd ar y Llwybr Trefedigaeth. -Bu'n aelod o Academi Iaith a Barddoniaeth Almaeneg am rai blynyddoedd. -Angen nhw rhoi cyfarwyddiadau ar blincin teclyn plicio moron nawr. -Debyg mai achos o lwcus y trydydd tro oedd hynna. -Ai o ran agwedd maen nhw'n dangos esiampl? -Mi oedd yna beiriant ar gefn y tractor. -Mae'n ymdrin â chyflwr celfyddyd yn y Gymru gyfoes. -Y tro nesaf y bydda i'n prynu car, car trydan fydd e. -Mae hi'n tywyllu'n gynnar fin nos erbyn hyn. -Does dim rhaid i chi ysgrifennu brawddegau llawn, mae pwyntiau bwled yn ddigon. -Gall y plant fynd ar ei beics ar y prom yn Llandudno. -Mae'r ysbytai yn orlawn unwaith eto. -Os cymysgwch chi goch a gwyn fe gewch chi binc. -Paid becso, fydd e wedi anghofio am y cyfan erbyn heno. -Cofiwch ddod â fflasg a dillad cynnes gyda chi. -Dyna ddiwrnod arall wedi dod i ben, nos da i chi gyd. -Aethon nhw i fyw y tu hwnt i'r afon. -Ydych chi wedi ymuno â'r côr eto. -Rhaid i ni gyd gofio cadw pellter cymdeithasol y dyddiau hyn. -Chewch chi ddim eistedd wrth y bar i gael diod. -Mae'r ceir Tesla newydd yn smart iawn ond yn ddrud i'w hyswirio. -Mae'r afon wedi gorlifo yn dilyn y glaw diweddar. -Mae'r melinau gwynt yn y môr yn cynhyrchu llawer o drydan erbyn hyn. -Does dim byd gwell na thost a marmalêd i frecwast. -Dim ond dau oedd yn y ras, a dim ond un enillydd oedd yna. -Beth yw dy farn di am y datblygiadau diweddaraf? -Doedden nhw ddim yn cofio lle roedden nhw wedi gadael y car. -Mae llawer o lefydd braf i gerdded ar lan y môr ym Mangor. -Codwch eich llaw os ydych chi eisiau gofyn cwestiwn. -Wedi taith flin gadawsom y môr, a daethom at lyn ar ochr y ffordd. -Dydi o ddim yn licio cael tynnu 'i lun. -Ond nid oedd unrhyw beth oedd ganddo o unrhyw werth masnachol. -Daeth yn awdur i dri deg a naw o lyfrau. -Yn gweithredu fel y brif ffynhonnell o gyfathrebu ar gyfer poblogaeth wledig yn bennaf. -Ar ôl y rhyfel, astudiodd economeg a hanes gwleidyddol yn Rhydychen. -Roedd elw'r llyfr o fudd i sawl elusen. -Yn ddiweddarach rhyddhaodd ddatganiad yn ymddiheuro i'r clwb a'r cefnogwyr. -Fodd bynnag mae rhai plant bach wedi byw am gyfnod gyda cymorth meddygol dwys. -Roedd yr hawliad yn honni torri contract a thwyll. -Mae'n cynnwys lloches picnic sy'n dyddio'n ôl i gyfnod y Weinyddiaeth Gweithiau Cyhoeddus. -Cafodd y ffilm ei rhyddhau o dan ei theitl gwreiddiol yn Ewrop. -Wrth dyfu i fyny, datblygodd dalent cynnar mewn peintio a thynnu lluniau. -Efallai bod rhai o'r papurau a restrir wedi peidio â chael eu cyhoeddi. -Ar ôl taith genedlaethol arall, bu sawl newid mewn personél. -“Rydw i wedi dy ddewis di,” meddai'r Llais. -Yn aml, ni chaiff chynnig o'r fath ei gyflawni'n ymarferol. -I gychwyn, roedd teithiau'r band wedi eu cyfyngu i safleoedd Gwyddelig. -Yn ystod y cyfnod hwnnw, roedd hefyd yn aelod o'r Cyngor Diogelwch Cenedlaethol. -Mae'r amcan hwn yn canolbwyntio'n benodol ar “ddylunio, datblygu a pheirianwaith System Systemau”. -Parhaodd i gynnal digwyddiadau achlysurol dros y blynyddoedd ond ni wnaeth erioed gystadlu eto. -Mae'r rhannau uwch o'i gorff yn llwydfelyn a'i adenydd a'i gynffon rywfaint yn ddu. -Menyw yn cysgu ar ei phen ei hun mewn gwely. -Pam wnaeth y cyw iâr groesi'r ffordd? -Mae grŵp o bobl ar y palmant yn mynd ar fws dau lawr. -Beth sy'n bod arnat ti? -Lliw swyddogol ei linell yw melyn. -Gyferbyn â'r sgwâr mae dau balas. -Gellir addasu "Y Parchedig" i adlewyrchu statws a rheng eglwysig. -Mae'n ymgyrchu'n frwd dros yr achos o blaid bywyd. -Mae hon yn sefyllfa gyffredin iawn ymhlith prifysgolion addysgol De Corea. -Fredi oedd yr ail o'u pum plentyn. -Mae'r planhigyn yn ymddangos yn ganghennog a phluog. -Dawnswyr yn perfformio mewn gwisgoedd lliwgar. -Bu'n plannu cotwm a thybaco. -Mae'r ysgol gynradd hefyd yn cynnig dosbarthiadau arbenigo mewn Gwyddorau Naturiol a Thechnoleg. -Defnyddir systemau cyfrif canolog yn gyffredin hefyd i brosesu pleidleisiau absennol. -Yna mae'n cael trawiad ar y galon ac yn marw. -Mae dyn a dynes mewn cotiau labordy glas yn edrych drwy ficrosgop. -Ychydig flynyddoedd ar ôl iddo gael ei eni, symudodd ei deulu i'r Ffindir. -Mae'r coesau a'r traed yn goch llachar. -Mae dyn â bag cefn yn croesi stryd brysur. -Ymwelodd â hi yn fuan wedyn yn Awstria a gofyn am ei phriodi. -Rwy'n ystyried un fel cynnwys y llall. -Mae'r ci tenau gyda'r gynffon hir yn teithio trwy'r cae. -Gellir gweld cofnod ffotograffig ar-lein o'i briodas a'i daith fyd eang. -Gelwir un neu fwy o ddogfennau cydberthnasol sy'n defnyddio'r gramadeg hwn yn fap pwnc. -Ond roedd hefyd yn mwynhau mynd yn ôl i'w long. -Mae'n aelod o Glwb yr Archwilwyr. -Mae'n fatiwr llaw dde ac weithiau'n fowliwr cyflymder canolig braich dde. -Dim ond aelodau amlwg, dethol sy'n cael eu dangos. -Ni chafodd arddangosfa oriel yn ystod ei oes. -Clwb Pêl-droed yr Heddlu Metropolitan yw clwb pêl-droed Gwasanaeth yr Heddlu Metropolitan. -Mae'r Pedwar Llys yn parhau i gael eu defnyddio ar gyfer materion sifil. -Fodd bynnag, roedd llawer o'r sioeau a fu'n llwyddiannus o ansawdd braidd yn ymylol. -Adeiladau dibreswyl yn unig sydd ar brif ran y campws. -Yr ail fersiwn a'r lleiaf derbyniol yw "man y neidr aur". -Mewn gwirionedd, mae digwyddiadau pwysig hefyd yn cael eu darlledu'n fyw ar y rhyngrwyd. -Gellir dosbarthu tonnau ymhellach yn ôl y mathau osgiladol. -Daeth y term “trawsgroesi” i'r amlwg fel offeryn marchnata. -Dyma drawslythreniad enghreifftiol. -Fe'u rhyddhawyd ar barôl ar ôl gwasanaethu am wyth mis. -Er ei fod yn fyr, roed y cyfnod yn un dylanwadol. -Mae teithiau tywys ar gael. -Mae'r Dywysoges yn gadael. -Mae'r ymateb hwn ar gyfer ailddosbarthu ei sylffwr i wneud protein newydd. -Gweinir bwydlen ginio hefyd. -Derbyniodd trigolion lleol brofion. -Mae'n dalach na fi! -Mae'r ddinas yn croesawu marchnad awyr agored bob bore Mercher a Sadwrn. -Daeth systemau holl-electronig yn boblogaidd gyda chartrefi ar ôl yr Ail Ryfel Byd. -Mae gwasanaethau cludo nwyddau yn gweithredu saith diwrnod yr wythnos. -Roeddent yn swil iawn ac yn hynod anodd i'w dal. -Bardd Prydeinig, a anwyd yn Llundain, a addysgwyd yng Ngholeg Iesu, Rhydychen. -Mae ci du a brown gyda phêl goch uwchben yn chwarae yn y glaswellt. -Mynnodd felly bod graen ffug a staen yn cael ei osod. -Tybed nad oedd hi'n mynd i aros yma mewn gwirioedd! -Roedd dau fath o'r rhain ar y cyfan. -Mae'r teitl Ffrangeg wedi cael ei sillafu ychydig yn wahanol dros y blynyddoedd. -Gwnaethon nhw ei dorri allan. -Roedd Morris hefyd yn awdur. -Mae grŵp o ferched mewn gwisgoedd brown a sandalau cyfatebol yn dawnsio gyda'i gilydd. -Hefyd fe chwaraeodd bêl-droed ysgol uwchradd a rhedeg ar y trac. -Mae'n achwyn am amodau carcharu ei fab, sy'n fethedig. -Mae astudiaethau a gyfansoddwyd yn rhagddyddio ffurf fodern gwyddbwyll. -Mae bachgen bach yn edmygu car chwaraeon gwyrdd. -Yn ddiweddar, mae'r ddinas wedi dod yn brif anheddiad i Gristnogion yn Iraq. -Dyn mewn siwmper las yn gwylio rhywbeth sy'n cael ei daflunio o'i flaen. -Gall nifer o gyflyrau a chlefydau patholegol arwain at waedu mewnol. -Cafodd ei chyfweld a rhoddwyd plac iddi am ei chefnogaeth dros ffoaduriaid Fietnam. -Yna aeth allan, ac a thuthiodd i lawr y pentref. -Mae Algeria a Singapore yn mwynhau perthynas agos mewn meysydd economaidd a gwleidyddol. -Mae'r cyfansoddiad yn perthyn i'r traddodiad democrataidd rhyddfrydol. -Rwyf wedi meddwl y cyfan drosodd. -Ar hyn o bryd mae yna ganolfan feddygol, ac ysbyty hefyd. -Y rhai sydd â model economaidd sy'n gweithio. -Gwelais y corsydd unwaith,” meddai Phil, gan fwyta'i frecwast yn fodlon. -Roeddent yn edrych yn debyg i fleiddiaid, er yn arwynebol. -Mae nifer o stondinau sy'n cynnig gwahanol fwydydd. -Chwech o bobl yn eistedd wrth gilfach bas yn gwneud cestyll mwd. -Mecanydd mewn ofyrols glas yn gweithio ar fys. -Yn naturiol ni fyddai, o dan yr amgylchiadau heintus hynny. -Mae PowerShell yn defnyddio ôl-dic yn lle. -Aethom drwy eu cyfarwyddiadau, cyfrifiaduron, ystafelloedd dirgel ac ati. -Fe wnes i ddangos y drws iddyn nhw. -Mae grwpiau merched yn flaenllaw yn y mudiad defnyddwyr. -Daeth y sengl i frig y siartiau ym Mhrydain, Iwerddon, yr Iseldiroedd a Norwy. -Y blendiau sy'n cael eu defnyddio ehangaf yw blendiau ffibr cotwm-polyester a gwlân-acrylig. -Mae'r ystâd yn fusnes ffermio gan fwyaf, bellach, gan fagu cnydau a defaid. -Mae gan rai streipen las ar y wasg, ac eraill streipen wyrdd. -Enillodd Michael y Gwpan Gyfandirol gyda'i dîm a daeth yn ffefryn gyda'r cefnogwyr. -Mae dyn yn loncian ar y traeth o flaen marchnadfa brysur -Yn ogystal maent wedi dod yn offeryn cyffredin ar gyfer profi cyffuriau. -Mae pobl yn trin gerddi bychain gan ddefnyddio dŵr o ffynhonnau dyfnion. -Gall pedwar rhif cwantwm ddisgrifio electron mewn atom yn llwyr. -Os oes capasiti wrth adael, gall teithwyr "normal" ddod ar fwrdd. -Mae pump o blant yn chwarae yn yr eira. -Roedd ei hysgoloriaeth yn canolbwyntio'n bennaf ar y cysylltiadau rhwng gwyddoniaeth, llenyddiaeth, a thechnoleg. -Roedd yn cynnwys nifer o siopau print bach a mawr ledled y byd. -Mae dyn yn gweithio ar y trên -Mae'r nodwedd hon yn gwneud dadlwytho a llwytho'n gyflymach ac yn haws. -Gall yr injan adlamu, gan achosi cylchdroi croes sydyn. -Ganed Owen yn Hwlffordd, Sir Benfro. -Achubodd y llywodraeth leol y clwb rhag methdaliad. -Mae preifatrwydd yn wahanol i anhysbysrwydd o ran ei gymhwyster a'i ddefnydd. -Yn ogystal â meddalwedd roboteg at ddefnydd personol a phroffesiynol. -Mae llawer o bethau ar goll o'r llawysgrif. -Dyn mewn dillad glas a melyn yn gwylio sgrin fawr. -Cerddorion a dyn mewn gwyn yn chwarae ar lwyfan. -Roedd y fargen i bara pum ras. -Pan gyrhaeddodd, fodd bynnag, gofynnwyd iddi a allai ddechrau gweithio'n syth. -Mae'r ci ar y traeth wedi gafael yn rhywbeth. -Yn fwy cyffredinol, gallwch ganiatáu mwy na dau ffang. -Mae yna hefyd lwybrau addysgol, troeon cerdded thema, llwybrau cerflunwaith a llwybrau dehongli hanesyddol. -Yn y rownd gyntaf, roedd tri rhagbrawf. -Ers hynny, mae methodoleg addysgu gyda llyfrau darllen graddedig ysgolion wedi symud yn rheolaidd. -Nid yw'r gyfres o ddigwyddiadau yn arwain at y gwrthdrawiad yn gwbl glir. -Roedd yr adran ddeheuol yn amaethyddol iawn o ran cymeriad. -Roedd y jwg yn sefyll ar y fantell tân, i bawb ei gweld. -Mae'r stori wedi'i rhannu'n bum pennod. -Maen nhw hefyd yn gwirfoddoli'n aml mewn mudiadau lles anifeiliaid. -Gweithiodd hefyd fel sgowt a swyddog gweithredol pêl-droed y swyddfa flaen. -Fe allwn ni wneud pethau felly. -Grŵp o bobl yn eistedd wrth fyrddau ger y traeth. -Gellir dod o hyd i oedolion rhwng Gorffennaf a Thachwedd. -Yna rydych chi'n hoffi'r cynllun? -Ni lwyddodd yr ystâd erioed i wneud elw cyson a sefydlog. -Cystadlodd y timau yma yn erbyn timau o Japan hefyd. -Fe allai fod yn fflat neu'n gondominiwm. -Gwelir dyn yn peswch mewn stryd a thorf ynddi. -Mae mwyafrif y gweithiau a enwir wedi'u cyfieithu i'r Saesneg. -Menyw mewn glas yn gorffwys ar fainc o flaen murlun crefyddol enfawr -Mae'r rhisgl yn frown cochlyd tywyll ac yn llyfn. -At hynny, mae'n ymddangos bod angen cysylltiad â'r system wobrwyo. -Mae'n gerddor llaw chwith ac yn chwarae ei gitâr gyda'r tannau wyneb i waered. -Mae'r goedlan yn cysylltu llawer o atyniadau ac adeiladau o bwys ym Merlin. -Dechreuodd Roberts chwarae hoci yn Victoria pan oedd yn dair ar ddeg mlwydd oed. -Dau ddyn mewn siacedi ar y traeth yn gwneud arwyddion. -Mae'r rhestr yn cynnwys cwmnïau nodedig sydd â phrif pencadlys yn y wlad. -Dywedir iddi gael ei henwi yn ôl preswylydd lleol, Peter Dennis. -Ar y dechrau, dim ond pum plentyn lleol a oedd yn mynychu'r ysgol. -Fodd bynnag, rhaid i ddyluniad ymarferol hefyd gyfyngu radiws niweidiol y belen dân. -Yn Japan, mae teitl y sioe'n golygu “Y Bachgen Hapus a'i Deulu.” -Mae'r ci blew byr yn rhedeg ar draws iard laswelltog. -Arhosodd gyda'r gorfforaeth drwy gydol ei yrfa. -Mae dulliau sefydledig eraill yn bodoli, gan gynnwys Mentrau Trefi Marchnad. -Mae person mewn crys brown yn gwthio babi mewn coets fach ger y môr. -O ganlyniad, cafodd ei wahardd am chwe mis yn unig. -Mae dyn yn plygu drosodd wrth ymyl gôl hoci -Maent yn dechrau ymdrechu i'w clirio o'r ardal. -Caiff ei ddeall fel "drwy gyfrwng" ac "ar ran". -Defnyddiwyd yr un peth wrth ddiffinio syndrom metabolig. -Band yn gorymdeithio gan chwythu eu trympedi. -Yn ôl y traddodiad, dinistriwyd yr ysgubor gan dân. -Mae ei gŵr a'i phlant yn ei goroesi. -mae saith o ferched yn dawnsio gan ddal eu breichiau i fyny. -Pwyllgor Doc Cyngor Cyffredin Lerpwl oedd yr awdurdod porthladd gwreiddiol. -Felly fe'u gelwir hefyd yn eiriau a dderbyniwyd. -Roedd y diwydiant awyrennau Americanaidd yn gallu addasu i ofynion rhyfel. -Yn aml yn 'shaka brah'. -Caiff ei adnabod dim ond o gorpws bach iawn. -Hefyd, mae wedi ymddangos mewn sawl drama teledu ynghyd â hysbysebion. -Er enghraifft, mae'r digid sero ar gyfer y pwysau yn cynrychioli pwysau canolig. -Gwnaed llawer o'r gwaith ysgrifennu hwn yn ystod un sesiwn a ddarparodd barhad naturiol. -Cododd ffortiwn enfawr fel brocer yn y farchnad siwgr ym Mharis. -Mae dyn sy'n gwisgo top tanc gwyn yn reidio beic coch ar hyd naid. -Yn hwyrach, derbyniodd y bai am y digwyddiad. -Mae gan eu priffyrdd ategol cysylltiedig rifau tri digid. -Ysgrifennir pob erthygl gan arbenigwr yn y maes hwnnw. -Mae ci ar dennyn yn iard gefn cartref rhywun. -Ymhellach, mae'r rhwydwaith yn cynnwys dwy linell fysiau, -Ie, ond pwy yw e? -Mae'n gweithio mewn cysylltiad agos ag ysbyty'r brifysgol. -Dwi'n ei gael fy hun. -Cyn gwmni hedfan siarter a oedd yn canolbwyntio'n bennaf ar hedfan i gyrchfannau gwyliau. -Ar ôl dychwelyd i Wlad Belg dechreuodd yrfa newydd fel contractwr adeiladu. -Ar hyn o bryd mae'n perthyn i dalaith Gorllewin y Ffindir. -Nid yw'r tymhorau'n newid yn ddrastig iawn. -Ar ddiwedd y corff roedd cynffon tebyg i badl. -Mae swyddogion etholiadol a llywodraeth wedi gwadu cyhuddiadau o'r fath. -Wrth iddo dyfu'n hŷn syrthiodd i mewn i ddistryw araf. -Mae gan y pentref glwb criced. -Mae'r Senedd hefyd yn cynllunio gweithgareddau cymdeithasol a gwasanaeth cymdeithasol yn ystod y flwyddyn. -Gellir storio gellyg ar dymheredd ystafell nes eu bod yn aeddfed. -Roedd ei llwybr olaf o amgylch Môr y Gogledd. -Mae ganddi frawd hŷn, Jeff. -Mae John yn cael ei roi ar brawf am ddinistrio ei gwch. -Mae rhes o bobl yn aros y tu allan i adeilad. -Lladdodd y tornado un ac anafu wyth ar hugain o bobl. -Gwrthodwyd y cynnig wedyn gan yr actores. -Mae dyn â fest goch a dici-bô du yn siarad mewn i feicroffon. -Mae gan y ffilm dro tebyg yn y gynffon tua'r diwedd. -Mae'r fideo yn cynnwys terfysg, baneri ac agweddau o bropaganda. -Roedd yn gyfeiliant safonol i'r farddoniaeth farwnadol angerddol. -Mae'r holl daleithiau ac eithrio'r Ardal Ffederal yn gweithredu rhwydwaith ffyrdd. -Fodd bynnag, nid oedd yn cynhyrchu unrhyw raglenni newyddion ar benwythnosau. -Cafodd pwll nofio trefol cyntaf y dalaith ei adeiladu yn y sir. -Gorffennodd y sioe gyda'r cerdyn teitlau hyn. -Gwahanodd y gŵr a gwraig gyda chusan. -Hebddo, pa werth sydd i weddïo? -Mynychodd gyrsiau canu, dawnsio clasurol, a marchogaeth yn blentyn. -Fel yr Ysbrydion blaenorol, mae'n byw yn yr hynafol Ogof y Penglog. -Mae llawer o bobl yn dod yma ar ôl iddynt ymddeol. -Mae pobl yn siopa mewn marchnad awyr agored. -Ymddiswyddodd ei chynorthwyydd ac felly hefyd y gwnaeth metron cartref y nyrsys. -Roedd hefyd wedi astudio pêl-fasged a thrac. -Mynychodd yr ysgol uwchradd yno a pherfformio yng Nghwmni Theatr Plant. -Roedd yr ysgythriad yn aml yn cael ei wneud yn fras ac yn frysiog. -Dechreuwyd prosesau difeddiannu ar gyfer caeau cyfagos. -O dan eu llywodraeth draddodiadol, roedd penaethiaid etifeddol yn gwasanaethu am oes fel arfer. -Roedd y dieithryn yn ifanc, ac roedd y wraig weddw wedi'i swyno. -Mewn gwirionedd, sêr yw jetiau optegol. -Roedd hefyd yn awdur nifer o lyfrau. -Nid oes unrhyw fynediad cadeiriau olwyn i'r platfform. -O fewn blwyddyn, roedd ei wyneb bron yn ôl i normal. -Mae'r ddau fersiwn ar gael mewn siopau candi ac archfarchnadoedd. -Mae nifer o bobl yn cofleidio ei gilydd y tu mewn i far -Fodd bynnag, ni ddefnyddiwyd yr arddull wrth argraffu am rai blynyddoedd eto. -Mae'r canlynol yn rhestr o holl reolwyr y tîm cenedlaethol. -Gelwir hyn yn broblem dynameg ymlaen. -Mae'n gwasanaethu fel meddyg ar gyfer y tîm Almaenig. -dwi efo dim ffudd yn glwedyddiaeth -Y mae ei heddwch fel yr afon, a'i thangnefedd fel y môr. -Ni chafodd hi erioed diwrnod o ysgol ac eithrio Ysgol Sul. -Y mae y dyfroedd yn ennill rhywfaint bob tro. -Cyfaddefir nas gall y gwyddorau i gyd esbonio un o ffeithiau symlaf natur. -Mae yna hefyd dair ffordd dderbyniol arall i siarad yn ystod dadl. -Mae angen parhau â'r ymchwil er mwyn arfogi addysgu mwy effeithiol. -Mae'n debyg mai'r gaeaf oedd yr adeg ar y flwyddyn. -Dylanwadau distaw yr holl bethau hyn. -Cyndyn iawn oeddwn i i ddysgu adnod. -Aeth y trên ymaith, gan adael dim ond meistr yr orsaf a minnau. -Calon yn hiraethu am weled deddfau teg ydyw calon y dyn da. -Gallai hyn beryglu mathau o blanhigion brodorol ac adar. -Yr oedd gennyf obaith gwan o hyd fod gan Wil gynllun i'n gwaredu. -Efallai y bydd rhai banciau yn codi tâl am y gwasanaeth. -Mae'r tylwyth i gyd wedi mynd ar ddisberod. -Roedd hi wedi bwrw glaw gymaint nes bod yr afon wedi gorlifo'i glannau. -Felly credaf fod y gwrthgyferbyniad rhwng y delweddau yn ffantastig iawn yma. -Ceir geiriadur hanesyddol cynhwysfawr ar gyfer y Gymraeg, sef Geiriadur Prifysgol Cymru. -Bydd streiciau eraill yn cymryd lle mewn meysydd awyr ar draws y wlad. -Rwyf yn hoff o gerddoriaeth ac yn chwarae amrywiol offerynnau. -Roedd Dôl Gamedd yn debycach o bell i dŷ Elizabethaidd neu fynachlog. -Dafydd, mab y Garreg Wen, meddir, yw awdur yr alaw Codiad yr Ehedydd. -Mae gan arolygydd hawl i roi cyfarwyddiadau i'r rhingyll. -Cefais fy hun ar ffordd fryniog, gan syllu ar aeddfedrwydd cyfoethog y wlad. -Carreg fawr ydyw, ar ben cae glas. -Saif yng nghysgod y graig aruthrol goronir gan adfeilion castell Carn Dochan. -Mae blas drwg iawn ar y moddion peswch yna. -Dylanwadodd Piaget ar sut mae meddyliau plant yn gweithio ac yn datblygu. -Bydd disgyblion yn mynd ati tan ddiwedd y wers i gwblhau'r dasg. -Cymhlethdod arall yw nad ydw i'n hedfan nôl tan fory. -Nid oes gwahaniaeth dinesig rhwng gwreng a bonedd. -Y mae Glasynys rhyw ddwy filltir o Harlach i'r gogledd. -Toc dois at groesffordd ar waelod cwm. -Bydd popeth yn barod erbyn iddyn nhw gyrraedd. -O ddrws y fynwent rhed y ffordd i lawr rhwng ychydig o dai. -Wedi mynd i mewn i'r buarth, gwelwn o'm blaen dŷ newydd. -Ar yr un pryd teimlwn law denau ysgafn Seth ar fy mhen. -Mae hyn yn dangos i'r defnyddiwr sut i newid cyfeiriadaeth y dudalen. -Y mae llaw amser wedi rhoddi prydferthwch digymar arno. -Pam fyddech chi eisiau astudio ieithyddiaeth? -Mewn datganiad gan gwmni ceir rhyngwladol, datgelwyd bod cannoedd o swyddi mewn perygl. -Mae disgwyl i deithwyr maes awyr Manceinion wynebu oediadau diogelwch oherwydd streic staff. -Peth digon rhyfedd fod y bobl yn ei galw'n hen Ann. -Oes gennych chi unrhyw syniadau neu sylwadau pellach? -Oni ddylai ffeministiaid roi cymeriad benywaidd cryf yn ganolog i'w llyfr? -Yr wyf yn cofio fy mod yn dychmygu fy hun yn ddyn mawr tew. -Fe gafodd y plant hwyl fawr wrth fynd allan yn y cwch. -Temtiwyd ef i yfed ei lasied cyntaf o gwrw mewn cyfarfod beirdd. -Caiff fforestydd eu torri i greu mwy o ofod ffermio ac adeiladu. -Byddwch yn parhau i ddatblygu eich sgiliau ymarferol yn y gweithdy. -Roedd hi'n gwisgo sgidiau bach coch del am ei thraed. -Byddwch yn dysgu cynllunio, monitro, datblygu a gwobrwyo perfformiad. -Sori, o'n i allan o'r swyddfa pnawn ddoe a bore 'ma. -Yn y capel fel yn y tŷ yr oeddynt yn ddirodres a chartrefol iawn. -Beth yw'r gobeithion ar gyfer y sioe? -Wedi gadael cysgod coed, dois i gaeau agored, ar ben y gefnen. -Ni bûm erioed hyd hynny mor gyfoethog. -Y fath wastraff, teithio'n gyson ac wedi pwyllgora, cychwyn yn ôl adref. -Mae crefydd y dyddiau hyn yn fwy o ffasiwn nag o fater bywyd. -Wna i jyst aros rhag ofn bod rhywun eisiau newid rhywbeth eto. -Bydd hi'n wyliau haf cyn bo hir. -Mae gen i awydd paentio'r stafell yma yn lliw piws golau. -Gwisgai got las a botymau gloywon arni, a chlos a legins llwydion. -Dangosir tlodi ym mhob prif ddigwyddiad yn y stori. -Mae hyn yn dangos y golofn rydw i eisiau'i fformatio'n amodol. -Ond mi rydw i am fod yr un fath â chi. -Rhaid cymryd y chwerw gyda'r melys. -Gorchuddiwyd yr hwyaden mewn saws eirin, a'i gweini gyda reis a llysiau. -Samplwyd dŵr yr Afon Ystwyth yng Nghwm Ystwyth, Ceredigion. -Dylech fanteisio ar y cyrsiau sydd ar gael -Gwleidydd Ceidwadol adain dde yw Jacob Rees-Mogg. -O fewn eich grwpiau cyfansoddwch ddarn sy'n adlewyrchu rhan o'r afon -Byddai hyn yn annog gweithgaredd corfforol dyddiol a rheolaidd i'r plentyn -Yn ogystal â chyfansoddi ac addysgu, roedd hefyd yn actor brwd. -Roedd yn gyson uchel ei barch gan ei gydweithwyr a'i fyfyrwyr -Ysgrifennwch eich enw a rhif arholiad ar y top -Daeth Caffe'r Dolwar ar y sgwâr yn fan cyfarfod pwysig i ni. -Rwyf yn caniatáu i'm plentyn gymryd rhan yn y clwb criced -Roedd yn ymateb yn gwrtais ac yn frwdfrydig -Dyn tawedog iawn oedd Anthony, neu Tony fel y galwai ei ffrindiau ef. -Roedd y siart hwn yn dangos rhywbeth cadarnhaol. -Roeddwn i'n sâl ar y cwch drosodd i Iwerddon. -Tair blwydd ar ddeg oed oeddwn pan garcharwyd fy mrawd. -Yr oedd yr haul yn dechrau goreuro'r mynyddoedd gogoneddus acw. -Ella gawn ni ymweliad ar y cyd eto os ydi hynny'n iawn -Mae hyn yn creu problemau alcohol a chyffuriau -Bydd cyfnod swydd y cadeirydd yn dod i ben yn syth -Ystyriwch faint mae technoleg yn gallu eich helpu chi mewn bywyd. -Yn ail rhowch ddŵr oer a glân i'ch parot bob dydd. -Fodd bynnag, mae'n parhau i wneud lymffocytau trwy gydol oes oedolion. -Dyma nofel arall gan awdur sy'n gwthio'r ffiniau llenyddol. -Dywedir ei bod yn wraig o bersonoliaeth gref ac addysg breifat. -Fyddet ti'n meindio glanhau'r car heddiw? -Gellir ymestyn geometreg hyperbolig i dri dimensiwn ac uwch ddimensiwn. -Gweithiodd fel athrawes am beth amser. -Tybed beth sy'n gwneud i Siriol Swyn deimlo mor ddigalon? -Fe'i lleolir yn y gwddf, ychydig o dan gartilag y thyroid. -Drama gyfoes ddychanol gan Geraint Lewis yw Dosbarth. -Mae'n gwneud synnwyr a fedra'i ddim meddwl am reswm arall. -Arbrofi ydw i. -Bu'n fyfyriwr israddedig mewn cymdeithaseg, seicoleg a gwyddoniaeth droseddol. -Caiff ei ddenu gan flodau, mêl a golau. -Mae'n diffinio'i hun fel mudiad democrataidd, poblogaidd ac unol. -Mae pob llinell yn cynnwys yr un odl. -Yr oedd yn dda gennyf fod Morgan wedi colli. -Tir isel sydd yn Sir Fynwy gan fwyaf. -Ffraeodd y ddwy chwaer. -Caiff ei ystyried yn system o nodiant sy'n dibynnu ar leoliad y glyff. -Mae pob un yn ymbelydrol. -Mae 'na ogla' da ar y bloda' yn y bora. -Mae'n hedfan rhwng Mawrth ac Ebrill. -Mae symud i fyw yn brofiad anodd. -Felly, pwy sy'n rong, fi neu'r genod. -Astudiaeth arloesol o gelfyddyd y Celtiaid gan John Morris yw Y Weledigaeth Geltaidd -Cysylltodd ei hun gyda'r Blaid Ryddfrydol. -Awgrymaf sgwennu atynt a gweld os a sut maen nhw'n gallu helpu. -Mae ganddo groen gŵydd. -Fe'i lleolir ger pentref bychan Tretŵr yn ardal Brycheiniog, de Powys. -Llyfr bach lliwgar am gath fach sinsir o'r enw Maw. -Caiff hefyd ei ddefnyddio mewn amaethyddiaeth. -Cracrwydd am ddiffyg offer diogelwch. -Ni chafodd y roced ei lansio. -Ffriwch y madarch mewn menyn poeth. -Bu'n aelod o'r Undeb Cymdeithasol a Gwleidyddol y Merched am rai blynyddoedd. -Cydweithiodd â hi a chynlluniodd y siacedi ar gyfer llawer o gloriau ei llyfrau. -Mathau o rosyn ydy prif fwyd y siani flewog. -Ceir dau grug arall ar gopa'r mynydd hwn. -Nath o stopio wrth ymyl y llyn i dynnu llun. -Am ein bod yn fwy haelfrydig, neu am ein bod yn ffolach? -Mae bywyd rhy fyr. -Dyna peryg gofyn barn y bobol am unrhyw beth dyddie 'ma. -Mi wnaiff les i ti dendio tipyn arnat ti dy hun. -Mi fuasai'n dda pe bai rhywun yn gallu rhoi trefn ar y sefyllfa. -Cafon nhw fuddugoliaeth swmpus yn yr etholiad. -Pa les yw i ti wingo yn erbyn yr anocheladwy? -Mae'n sgwennu colofnau ac adolygiadau i bapurau newydd Ewropeaidd. -Pwy sydd wedi sarnu lla'th ar y llawr? -Mae ar Restr Meddyginiaethau Hanfodol Sefydliad Iechyd y Byd. -Ganwyd Brown yng Nghaerfaddon. -Does gen i ddim llawer o ddim i'w sbario. -Dyna fy syniad i. -Roedd yno lawntydd eang a llwybrau troellog gyda borderi wedi'u clipio'n dwt. -Un cyfle i ennill. -Gest ti'r tecst nesi yrru i chdi ddoe? -Priododd ddwywaith, a hynny i ddwy Elizabeth. -Gwelsom lawer genethig yn codi'r llen sy'n cuddio'r gyffesgell. -Saethodd y dyn gwningen. -Ceir gwreiddiau dyfnion yn y cysylltiad rhwng Cymru a Swydd Amwythig. -Wi moyn mynd am dro yn car. -Trethi isel oedd thema ymgyrch y Ceidwadwyr, gydag economi a byddin gref. -Ceir sawl crug yn y clwstwr hwn. -Cymerodd arni beidio â'u clywed. -Doedd hi ddim yn bàs wych cofia. -Closiodd fy mam ei chadair yn nes at y tân. -Ysgrifennwch fformiwla ar gyfer cyfanswm cost galw plymar allan -Roedd yr ymgeiswyr i gyd wedi llwyddo i ateb holl ofynion y dasg -Mae hyn yn rhwystro cyfathrebu rhwng ffoaduriaid a phobl leol -Mae batri fy ffôn i'n isel. -Disgleiriodd y tywod, a gwridodd y grug. -Roedd y llanw'n mynd allan ar y pryd. -Bydd y tabl yn hyrwyddo sgiliau rhifedd hefyd -Yr oedd y llong yn dal i godi a syrthio yn y tonnau aflonydd. -Wnei di glirio lle i mi ar y top yn y gegin. -Gellir casglu bod hyn felly yn creu amgylchedd addysgol mwy positif -Aeth y ci gydag ef adref. -Roedd y chwe hynaf yn chware yn yr ardd. -Gwnaeth Wil fel y gorchmynnwyd iddo. -Pan ddeffroem yn y bore, dyna lle byddai yn darllen y llyfr o hyd. -Does dim llawer o ganu o gwmpas y cae. -Euthum i geisio clirio tipyn ar y llawr. -Yr oedd pobl yn byw yn weddol daclus yn y tai hynny. -Roedd rhai yn pleidio'r Rhyddfrydwr ac eraill yn pleidio'r Ceidwadwr yn selog. -Rwyt ti wedi gyrru'r eneth i ffwrdd am byth. -Darllenai'r papur newydd o glawr i glawr. -Yr oedd yno gynulliad mwy nag arfer. -Buom yn ddistaw am ennyd, ac yna dechreuodd fy mrawd drachefn. -Yr oedd Catrin wedi rhoi iddo ergyd ar draws ei war â'i hymbarél. -Bydd hi'n noson fwyn iawn am yr adeg o'r flwyddyn. -Cerddodd yn ei flaen nes daeth at fwthyn bychan to gwellt. -Yr oedd yn adnabyddus fel dyn go ddigrif ers blynyddoedd. -Y mae'n debyg fod fy ewythr wedi digio a chadw ei gopi. -Agorwch y ffenest i ni gael oeri ychydig. -Rhaid i mi ddweud gair neu ddau am fy ewythr. -Cafodd hi ganlyniadau calonogol iawn. -Yr oedd ei wyneb yn rhychau dyfnion, a'i ddwylaw yn gelyd fel haearn. -Roeddynt yn byw yn gynnil ac yn syml. -Chewch chi mo'i weld o chwaith nes bydd o mewn print. -Bu ar led ei hun am flynyddoedd wedi hynny. -Rhaid parchu pawb yn ddiwahân. -Prin y cawswn amser i feddwl. -Be wnewch chwi rwan, ynte? -Doedd neb yn cael yfed dim cyn eu triniaeth. -Roeddwn i yn disgwyl yn eiddgar am weld Elin. -Gobeithio y byddi di'n well yn fuan. -Wnawn ni ddod â'r anrhegion draw fory. -Yna, tynnodd ei het oddi am ei phen, gan ryw fwmian canu yn isel. -Dyw Lloegr ddim ar eu gorau heddiw. -Y mae yn ustus heddwch ac yn un o ddynion blaenaf y sir. -Lle bynnag y byddai Pero, ni byddai Dafydd byth ymhell. -Llafur mawr, a hynny o achos gwrhydri gwyllt y dyn ar y brig! -Ar y môr mewn gwirionedd y bu farw y rhan fwyaf o hynafiaid Siôn. -Ond bellach nid oedd amheuaeth am ei dduwioldeb. -Dyma'r lle cyntaf welsom yn Llydaw. -Mae'r ffyrdd wedi'u claddu o dan dri deg metr o graig. -Bwyd pwysicaf yr ardal oedd India corn. -Roeddwn yn rheoli eu gwaith a chynnig arweiniad a chefnogaeth iddynt -Fe fydd hi'n fisoedd cyn y byddan nhw'n medru symud nôl mewn. -Roedd yn dal ati o hyd i ymlusgo i lan y môr bob dydd. -Mae wedi colli lot o waith yn ddiweddar. -Pa beth bynnag yr ymaflai Dico ynddo, byddai yn selog dros ben gydag o. -Mae techneg gwneud y ffilm wedi mynd yn angof erbyn hyn. -Gosododd y dyn ei ddryll i orwedd ar y clawdd. -Yr oedd y meddyg un noswaith yn sefyll wrth erchwyn ei wely. -Yr oedd y dynion wrthi yn brysur yn paratoi at ail godi'r sgaffaldiau. -Fy hoff bryd o fwyd yw pys a ffagots. -Yr oedd y môr yn agos, ac yr oedd yr ardal yn un iach. -Wyt ti 'run mymryn mwy dy barch wedi'r cwbwl ganddyn nhw. -Mae'n nabod ei ffyrdd e. -Bwytaodd y plentyn ychydig o ffrwythau a bisgedi. -Collodd yr is-olygydd hwnnw ei gyfle. -Roedd ei gwallt yn felyn, ac roedd ei hwyneb yn felyn. -Roedd ganddi esgidiau gwyn glân. -Canai'r fwyalchen yn beraidd yn yr ardd. -Yr oedd gydag ef ddynes tua'r un oed ag yntau. -Medrwyd ei berswadio i dorri ei wallt drannoeth. -Roedd pryd o fwyd ar ei hanner ar y bwrdd. -Pam mae'n rhaid i ni fod yn ofalus? -Bachgen Hugh Bryan ydi'r gwaetha ohonyn nhw i gyd. -Mae Lloegr yn trio newid momentwm y gêm. -Pan anwyd Mary, fe'i rhoddwyd i ofal mamaeth. -Roedd y gwres yn gwneud i arogl annioddefol godi o fudreddi'r strydoedd. -Mae'r rhaff wedi rhedeg i lawr. -Fe wnaeth hi ddeffro yn teimlo'n flin iawn. -Roedd Mary yn casáu eu byngalo blêr. -Yr oedd yn hoff iawn gan ei gydweithwyr. -Doedd hi erioed wedi'i weld mor dawel o'r blaen. -Does dim byd da ar y teledu heno. -Stopiodd hi'i hun fel petai newydd gofio rhywbeth mewn pryd. -Edrychodd y forwyn yn ofnus. -Allwn ni gael ein harian nôl os gwelwch yn dda. -Chwaraeai'r dyfrgwn yn nŵr yr afon. -Yr oedd o yn ddistaw a digalon cyn amser cinio. -Wedi iddo gael pen y llinyn i'w law, stopiodd. -Mae Môr y De i weld yn ddiddiwedd. -Roedd panig ar bob llaw. -Eisteddai Mary yn ei chornel o'r cerbyd trên yn edrych yn boenus. -Daeth amser cadw noswyl, ac aeth Morris allan o'r offis. -Yr oedd yn rhaid iddi fynd i weini. -Roedd Lloegr ddau ddyn yn brin ar y diwedd. -Cymerwyd hi'n sâl yn ystod y nos. -O dipyn i beth, gwnaed ef yn ohebydd arbennig i'r papur clodwiw. -Gwnaeth Mary y daith hir i Loegr dan ofal gwraig rhyw swyddog. -Rhoddwyd pob dylanwad ar waith i ladd y bywyd Celtaidd. -Roedden ei llygaid hi'n fawr ac yn ofnus. -Ymestynnai gwlad goediog fryniog mor bell ag y gallai'r llygad weld. -O'r diwedd, meddyliodd un ohonom am ddull i geisio symud tipyn arno. -Cafwyd y dodrefn yn ddiogel i'r llong cyn iddi gychwyn. -Roedd hi gyda dyn ifanc pryd golau. -Mi ddylase'r hen dafarn fod draw yn y fan acw. -Gweinwyd y bwyd â chatwad mango syml ond blasus iawn. -Roedd Sobyn a'r Smeiliaid yn fand anhygoel. -Yr oedd ei dad heb fod adref ers tair blynedd. -Mi fûm mewn pwyllgor ar ôl y cyfarfod. -Fydda i ddim eisiau mynd i fusnesa o gwmpas y lle. -Sut mae hyn yn gwneud i chi deimlo? -Cyn hir dechreuodd y dynion ddylifo i mewn. -Talai grogrent am ei dipyn tir. -Mae'r chwarae yn siomedig iawn. -Mae haul y bore yn tywynnu ac yn ei oleuo ef a'r bwrdd. -Rhyddhaodd albwm newydd ddoe. -Mae hiraeth arna i am y de. -Mae hi'n dymor wyna. -Mae tarddle wedi cael ei leoli ar fynydd ble mae llawer o law -Paid â mynd i feddwl gormod ohonot dy hun. -Nid oedd fawr o gamp ar y pentref ei hun. -Hogyn deg oed oeddwn, ac yn ddieithr yn yr ardal. -Gwthiai'r ci ei drwyn i'm llaw, tynnwn innau fy llaw hyd ei ben. -Mae'r disgyblion yn creu graff bar o'r data ar dabl amlder -Y mae ei dillad yn wael, nid iddi ei hun y mae wedi byw. -Oni bai am drymder yr awyr, gallem feddwl mai yng Nghymru yr oeddem. -Gwelem groes garreg o gerfiad tlws ryfeddol. -Mae hi hefyd yn cymryd diddordeb proffesiynol mewn datblygiadau addysgol -Mae'r awyr yn edrych mor uchel. -Doedd Mary erioed wedi cael anifail anwes ei hun. -Wnaeth Mary ddim ateb. -Nid fi piau fo. -Bydda i nôl yn y gwaith ddydd Llun. -Dw i'n rhy goman ac mae gen i ormod o acen Swydd Efrog. -Aeth at y gwely a phlygu drosti. -Anadlodd anadl hir o ryddhad. -Fedra i weld hynny'n iawn. -Mi fyddi di'n fwy unig byth cyn y diwedd. -Pam nad ei di ag e iddyn nhw? -Mae fy nillad i yn ddu. -Fe gawson nhw de poeth i'w yfed. -Lapia di dy hun yn gynnes a dos allan i chwarae. -Rhoddodd hyn deimlad rhyfedd i Mary yn ei chalon. -Gymaint neisach yr oedd rhywun yn edrych wrth wenu. -Roedd coetsh ysgafn yn sefyll ar y ffordd gyferbyn â'r platfform bychan. -Edrych drwy'r ffenestr ymhen rhyw ddeg munud ac fe gei di weld. -Rwyt ti wedi cysgu'n hir. -Edrychodd i fyny arno gyda'i lygad disglair meddal. -Edrychodd o'i chwmpas, yn enwedig ar y tân. -Phrioda i byth, gwnes fy meddwl i fyny ers blynyddoedd. -Yna roedden nhw ar y ffordd fawr ac fel welodd gloddiau a choed. -Rhaid eu bod nhw wedi tynnu'r lle i lawr, Dafydd! -Does gen i ddim 'mynadd efo pobol sydd 'mond yn eistedd a syllu. -Er syndod iddi newidiodd ei hen wyneb, garw, sur ei olwg ar unwaith. -Dyma'r robin, oedd newydd orffen ei gân, yn ysgwyd ei adenydd. -Roedd y gwynt yn codi ac yn gwneud sŵn rhuo isel, gwyllt, unigryw. -Dw i'n cael fy niwrnod i ffwrdd unwaith y mis fel y lleill. -Mae peryg i'r hufen iâ doddi. -Un ffordd i ennill ambell geiniog oedd hel cen oddi ar gerrig. -Cyfrol yn cyflwyno rhestr o dermau a ddefnyddir yng ngwahanol adrannau llywodraeth leol. -Erbyn heddiw, goddiweddwyd y syniadau hyn parthed gwirebau. -Bywgraffiad John Elwyn Davies gan John Emyr yw Porth yr Aur. -Cafodd ei ethol yn ddiwrthwynebiad. -Gall heintiau ymledu drwy beswch. -Tybed a all Mali wneud hynny a chael mam-gu newydd yr un pryd? -Argraffiad o gerddi Tudur Penllyn a'i fab Ieuan ap Tudur Penllyn. -Awduron Cymreig yw Beti Rhys, Bethan Wyn Jones, Bethan Mair Hughes a Bet Jones. -Da iawn, pob dymuniad da ichi ar y gwaith. -Mae saethyddiaeth yn un o'r gemau Olympaidd modern. -Agorodd y robin ei big a chanu'n hyfryd, er mwyn dangos ei hun. -Bachgen o Ddyffryn Clwyd oedd Gwilym Owen. -Gall dolur rhydd neu rwymedd ei achosi. -Mae ar gael fel cyffur generig. -Mae rhai yn poeni y bydd pryder ôl-drawmatig ymhlith staff. -Treulia'r gaeaf fel chwiler. -Roedd y fenter yn llwyddiant, ychwanegwyd warws ac ehangwyd y siop. -Yn aml iawn, cânt eu coginio ar Ddydd Mawrth Ynyd. -Ceir carreg enfawr ar y copa. -Mae pwynt tebyg wedi'i godi gan y bòs. -Gweld postiad gan Carl ar Facebook, wnes i. -Llyfr i gofnodi'r dyddiadau hollbwysig yw Y Llyfr Penblwyddi. -Bu'n athro prifysgol mewn ysgrifennu creadigol am rai blynyddoedd. -Bu'n astudio pensaernïaeth yng Nghaergrawnt ond methodd ei arholiadau terfynol. -Gwell ymladd hyd at waed na bod yn gaethion. -Fe aeth i ffwrdd gyda'r dyn newydd. -Ceir pum math o gell wen. -Comedi newydd mewn cyfres o ddramâu byrion. -Ceir graig enfawr ar y copa. -Mwynha'r lawnsiad heno. -Eglwys Anglicanaidd ydyw ac mae ei drysau ar agor yn wythnosol. -Does 'na neb yn byw yn y bwthyn. -Ni bu i'r gorthrymedig erioed amddiffynnydd mwy dihunangar, mwy hawddgar, a mwy huawdl. -Casgliad o farddoniaeth gan sylwedydd treiddgar ar bobl ac iaith, natur a bywyd. -Dw i'n cofio rywun yn dod i'r tŷ un noson. -Mae nhw 'di mynd am dro fyny'r lôn. -Ond nawr roedd hi'n hoff iawn ohoni. -Casgliad o deithiau cerdded yn ardaloedd Dyffryn Conwy. -Wedi ei ddarllen a defnyddiol iawn. -Mae ganddi bentwr o lyfre wrth ochr y gwely. -Daeth yn un o gymeriadau mwyaf dylanwadol y byd ffasiwn, yn rhyngwladol. -Mi oedd ceffyl du ei dad yn y cae. -Gellir gweld ôl y cynllunydd ym mhob cwt a chornel. -Beth tybed oedd cynllun Mrs Mochyn? -Gôl fawr i Joe bach. -Sut ddyfodol fydd gan Elen gyda'i bywyd bellach ar chwâl? -Mae strydoedd Llundain yn lle peryglus i fachgen bach geisio byw. -Magwyd ef yn Perth yn yr Alban. -Casgliad o ganeuon meithrin ar gyfer y gaeaf, y gwanwyn a'r haf. -Histoleg ydy'r enw ar yr astudiaeth o'r meinwe. -Gallai chwarae'r ffidil a snwcer i safon uchel iawn. -Fe ddywedir mai mantais fyddai hynny. -Bydd ei ddefnyddio yn ystod beichiogrwydd yn debygol o niweidio'r babi. -Mae hefyd o blaid diddymu Brenhiniaeth Lloegr. -Geiriadur termau Cymraeg-Saesneg a Saesneg-Cymraeg yn ymwneud â therapi galwedigaethol. -Ei hoff dirwedd ydy caeau agored a gerddi. -Wi moyn darllen y llyfr cyn i'r ffilm ddod mas. -Wedi rhoi'r swm faswn i'n gwario mewn pythefnos iddyn nhw. -Dyma gyfrol gyntaf Owain Owain, un o arweinwyr cynnar Cymdeithas yr Iaith. -Os am wneud saws béchamel gwerth chweil, rhaid ei gymysgu yn gyson. -Mae'r pysgodyn hwn yn mynd yn dda iawn gyda gwin gwyn sych. -Mi oedd 'na lestri budr yn y sinc. -Mi aeth y goleuadau i gyd i ffwrdd. -Casgliad o ysgrifau gan Geraint Talfan Davies yw Y Brifddinas, Diwylliant a'r Genedl. -Mae golosg actifedig yn gweithio trwy arsugno'r tocsin. -Gwasanaethodd fel ynad heddwch ar feinciau Sir Gaerfyrddin a Sir Frycheiniog. -Cerddi yn tarddu o brofiad y bardd fel mynach mewn mynachlog gaeedig. -Faint o gloch ti am ddod yma fory? -Cyfeirir at y rhain hefyd fel y radiws a chanol y cylch. -Darlith ar Lewis Jones gan Dafydd Tudur yw Lewis Jones a'r Wladfa Gymreig. -Bydd defnydd yn ystod beichiogrwydd yn debygol o arwain at niwed i'r babi. -Mae'r nodweddion canlynol yn gymwys am bolygonau amgrwm a pholygonau serennog. -Wedi gadael yr ysgol mynychodd Brifysgol Efrog a Phrifysgol Ddwyrain Anglia. -Dwi'n ail adrodd y cwestiwn yn arafach ond heb fod yn ymosodol. -Cafodd ei wobrwyo drwy ei benodi'n aelod o nifer o bwyllgorau seneddol. -Casgliad o bum drama gan Emyr Edwards yw O Achos y Mab Bychan. -Os cânt eu dychryn, fodd bynnag, gallant hedfan ar gryn gyflymder. -Er mor drwchus oedd yr eiddew yn hongian, roedd bron i gyd yn rhydd. -Ffêc niws, bois. -Mae llawer o'r rhai yr effeithir arnynt yn marw cyn eu geni. -Dwy linell o gyhydedd hir sy'n gwneud un pennill fel arfer. -Os felly, gystal â bod yn farw, sbo. -Mae'r nofel yn llawn cymeriadau brith, ac Aberystwyth yn gefndir i'r digwyddiadau. -Gwleidydd dros Blaid Cymru a Chomisiynydd yr Heddlu a Throseddu ydy Arfon Jones. -Ef a'i hanogodd i ysgrifennu barddoniaeth. -Negesydd cemegol ydyw mewn gwirionedd, sy'n cludo negesau o gell i gell. -Mae'r beicwyr 'ma'n sôn am neud cylchdaith. -Yr oedd yn ddrwg gennyf fod Hywel wedi ennill. -Da iawn Rhys! -Ceir crug arall gerllaw. -Mi oedd rhaid iddi fynd at y doctor. -Bara ceirch mewn dŵr poeth neu mewn llaeth poeth ydy brywes neu briwes. -'Di Ken ofn gwlychu'i wallt? -Mae angen i'r ddau osodiad o amgylch y cymal hwn fodloni ei gilydd. -Ges i freuddwyd ryfedd iawn neithiwr. -Gellir dewis ei yrru gyda'r naill danwydd neu'r llall. -Mae o'n cadw crwban fatha anifail anwes. -Parhaodd yn y swydd hyd ddymchwel y llywodraeth y flwyddyn ganlynol. -Claddwyd ei weddillion ym mynwent capel yr Annibynwyr, Soar, Talsarnau. -Roedd pawb ym Mlwyddyn Pump yn edrych ymlaen at y trip i gastell. -Mae hi'n ymarfer corff yn y llofft gefn. -Mae 'y ngwddw i'n brifo, mae raid bo' fi 'di cysgu'n gam. -Roedd nifer yn honni eu bod wedi eu hysgrifennu gan y llofrudd ei hun. -Cyhoeddwyd gan y Cylch Catholig. -Pwy sy' 'di colli llefrith ar lawr? -Fe'i ceir mewn mamaliaid yn unig. -Gwasanaethodd fel Prif Stiward Arglwyddiaeth Machen, Casnewydd a Gwynllŵg. -Cyfrol am rai o arwyr chwaraeon Cymru gan Gary Pritchard yw Arwyr Chwaraeon. -Mae lot wedi'i gwblhau a dim ond tua mil o eiriau'n weddill. -Stori ar gyfer plant gyda lluniau lliw yn llawn hiwmor. -Yn ne Ewrop a gogledd Affrica maen nhw'n bridio drwy'r flwyddyn. -Pan roddir yn fewnwythiennol, dylai'r claf gael ei fonitro'n agos. -Dwi'n disgwyl dim cysondeb ganddo. -Ceir un ffotograff o lawysgrifen y bardd. -Mae o allan yn fan 'na yn ista ar y wal. -Ti angen y mwgwd llygaid a phlygiau clustiau sydd ar hediadau dros nos. -Daliwch ati i ysbrydoli. -Y dyddiau hyn gellir ychwanegu cwrw gyda'r cynhwysion, a brandi drosto. -Ers hynny mae'r nofel wedi'i chyfieithu i Ffrangeg a Hwngareg. -Mae'r glöyn byw, pan fo'n oedolyn yn goblyn o gyflym. -Roedd Martha wedi sôn wrthyn nhw am y ferch fach o India. -Bryn yn Sir Ddinbych ydy Moel Gyw, sy'n rhan o Fryniau Clwyd. -Do, fues i yna ryw ddwy waith cwpl o flynyddoedd yn ôl. -Cyfeirlyfr taith Cymraeg gan Penri Jones yw Byd y Cymro. -Yna daeth argraffu llinell, parhaus. -Mae'r llyfr yn gyfuniad o destun Harri Parri a ffotograffau proffesiynol, trawiadol. -Ewch adref, mae hi'n tywyllu tu allan. -Iwsia'r cribin i lefelu'r pridd. -Ie, fi yw'r gynulleidfa darged, fel ti'n gwybod. -Teimlo'n reit emosiynol. -Mae'r siani flewog yn wyrdd gyda llinellau melyn a smotiau gwynion. -Ei diriogaeth yw Ewrop a Llychlyn. -Mae triniaeth yn dibynnu ar ddifrifoldeb ac achos y clefyd. -Mi roddaf gyfarwyddyd bras iddynt o dan bob pwnc. -Ma' mwng Richards yn edrach yn ysblennydd. -Addasiad ar gyfer plant o stori'r bugeiliaid ar y Nadolig cyntaf. -Roedd ganddo ofn pethau mawr. -Dyna mae o'n ddeud ar flaen y siop. -Ydy hyn ar yr agenda? -Mae enwau'r gwyliau hynny yn dod o wyliau pagan Almaenaidd ac amldduwiol Geltaidd. -Ymgyrchai hefyd dros hawliau ymfudwyr. -Mae'n gynhenid Gymraeg ac nid Lladin. -Gellir disgrifio gwrthrychau a ffurfiau sy'n cynnwys onglau sgwâr gyda'r ansoddair sgwaronglog. -Gellir deud mai un ffordd o frasamcanu yw drwy ddefnyddio llai o ddigidau. -Dyfais electronig i wneud symiau ydy'r cyfrifiannell. -Mi fuasai hynna'n hollol hurt. -Ymsefydlodd y ddau yng Nghydweli. -Wedi hynny, defnyddiwyd yr adeilad fel marchnad anifeiliaid. -Fodd bynnag roedd hylifedd y busnes yn anwadal. -Mi fydd yn ddwyieithog yn y pen draw, dw i'n cymryd? -Nid oedd gan yr ymgeiswyr ddim i'w gynnig. -Nid yw ar gael yn syth bin pan rydych ei angen. -Credu bod y bachan yma'n edrych yn fwy cŵl 'na fydden i ynddo. -Parhaodd ei dylanwad drwy'r degawdau nesaf. -Mae'r theorem yn ganlyniad rhesymegol i'r gwirebau hyn. -Gorchuddir y copa gan rug. -Neu ella bod o fan hyn. -Beth Yw'r Haf i Mi? -Fe'i ceir yn Ewrop, Asia a Gogledd Affrica. -Canlyniad y toriad hwn oedd creu Cefnfor yr Iwerydd. -Fe brynodd e flode iddi ar 'i phen-blwydd. -Rwy wastad yn pigo un neu ddau darn o sbwriel. -Dw i'n ffan mawr o hynna. -Saif Caer Bach yn Nyffryn Conwy, nid nepell o Rowen. -Mae ganddo dwll yn 'i 'sgidia. -Welist ti'r newyddion bora 'ma? -Fydda i'n siarad mewn odla am w'snosa i ddod. -Stori i blant gan Alys Jones yw Storïau Cornel yr Ardd. -Faint o'r gloch chi moyn mynd sha thre? -Roedd Elizabeth yn chwaer i David Ellis twrnai cyffredinol gogledd Cymru. -Toddaid hir y gelwir y ddwy linell olaf mewn hir a thoddaid. -Castell yn nhref Aberhonddu, Powys yw Castell Aberhonddu. -Ydych chi yn y papur wythnos yma? -Mae sgil-effeithiau cyffredin yn cynnwys cyfog, poenau'r abdomen, a chur pen. -Mae pobl yn ei defnyddio wrth gynhyrchu amonia, ac wrth greu tanwydd. -Mae màs yn wahanol i rym ac yn cael ei fesur mewn cilogramau. -Dyma'r symbol a ddefnyddir fwyaf ledled y byd. -Dyma'r chweched cylch mwyaf yn y rhan hon o Ogledd-orllewin Ewrop. -Yn saith oed, gallai ddal pen rheswm am faterion gwleidyddol y cyfnod. -Ceir hefyd ddiffyg rhannol ar y lleuad. -Mae gan y ddynes wallt cyrliog melyn. -Mae'r gair ar led nad ydych yn llywodraethu yn rhy dda. -Maent yn gysylltiedig â'i gilydd a chyda'r nerfau yn y corff. -Dysgodd Gymraeg a chafodd wersi ar y delyn gan Alwena Roberts. -Dwi'n cytuno gyda Morgan. -Roedd yn weithredwr gwleidyddol asgell chwith a ddaeth yn gomiwnydd ymroddedig. -Mae'r machlud mor hardd. -Pumed teitl y gyfres am y ceffyl bach direidus. -Lle y cynigir iddynt y fargen orau? -Dydi hi ddim yn cytuno hefo iwsio lledr achos bo' hi'n figan. -Caiff ei gysylltu'n agos gyda thebygolrwydd. -Doedd byth yn sylwi eu bod nhw'n gwneud pethau drosti. -Does neb yn teimlo'n saff yn yr Almaen cyn yr Ail Ryfel Byd. -Wyt ti moyn i fi beintio dy winedd di? -Nath hi benderfynu dod yn Fwdydd. -Yn aml, caiff ei ddenu at olau. -Roedd ei rhieni yn Weriniaethwyr Rhyddfrydol cyfoethog. -Wyt ti'n meddwl byddwn i byth yn medru sgipio fel yna? -Priododd y ddau wedi hynny. -Pleidlais gudd ar bapur fydd hon. -Nid cyfeiriad at y sant gwrywaidd Cadog yw hyn yn ôl yr haneswyr. -Roedd y cam hwn yn graith seicolegol a barodd gweddill ei hoes. -Ni fynn ei ddiwyllio ar delerau ei ysbeilwyr. -Sgwenna'r rhestr i lawr ar bapur. -Mae hefyd yn awdur gweithiau sylweddol. -Tecwyn Ifan oedd yn sgrifennu'r rhan fwyaf o ganeuon Ac Eraill. -Casgliad o ysgrifau gan Sioned Puw Rowlands yw Byd y Nofelydd. -Llyfr sy'n adrodd hanes y newyn yn Affrica mewn dull syml. -Chi moyn i fi lanhau'r llawr fan hyn hefyd? -Fe'i ceir ar ei adain o Fai hyd Orffennaf. -Nid ci cyffredin yw Clem! -Roedd y cyfieithiad o Gymraeg i Saesneg yn rhyfeddol o dda. -Dydi o ddim yn gweithio ar fy ffôn. -Copa llyfn heb garnedd. -Drama ysgafn gan John Evans yw Gormod o Ddewis. -Nofel gyntaf yr awdures a'r gantores o Landysul. -Bu farw yn Salvador. -Mi oedd yna lot o bysgod yn yr afon. -Mae nain, mam a merch yn byw o dan yr unto. -Mae'r olion ar lethr gorllewinol, gyda golygfa fendigedig o'r môr. -Daeth tri o aelodau'r teulu'n frenhinoedd ar Loegr. -Roedd y ddau riant yn Gristnogion defosiynol gyda chydwybodau cymdeithasol cryf. -Mae'r traethawd yn llawn dadansoddi treiddgar. -Astudiaeth ddiwinyddol ar ddiwinyddion rhyddhad o Dde Amerig. -Fel ei chwaer, ychydig iawn a wyddom amdani. -Bydd rhaid i fi fynd yno. -Mae graddfa'r cymesuredd yn fesur o'r cylchdro hwnnw. -Ceir darlleniadau, gweddïau, myfyrdodau ac anerchiadau. -Ysgrifeniadau byrion Morgan Llwyd. -Cedwir y llun yn y Galeri Cenedlaethol yn Llundain. -Casgliad o fyfyrdodau gan Elfed ap Nefydd Roberts yw Y Duw Byw. -Y chwe gwlad oedd Iwerddon, Lloegr, Cymru, Ffrainc, Yr Alban a'r Eidal. -Stori wedi'i lleoli yn y dyfodol. -Planhigyn bychan a dyf yn y cloddiau ydy camri, neu gamil. -Mae'r fflag yn chwifio. -Nofel i blant gyda darluniau du-a-gwyn. -Beth am Abercraf, hefyd? -Gwell ei adael felly, dw i'n meddwl. -Pan fo'n cael seibiant mae'r adenydd yn gorgyffwrdd ar fôn coeden. -Teg deud nad ydi gweddill y teulu mor ecseited â fi. -Mae'r llabed blaen yn gweithredu ar sail mewnbwn synhwyraidd a ffactorau eraill. -Lle 'dach chi bois? -Pam ddim ei drafod yma yn gyhoeddus? -Coda dy ên. -Ges i frechdan efo salad i ginio. -Mae ei gopa'n eitha gwastad. -I ddarganfod y gyfradd rifo, rhaid mesur y rhifiad cefndirol yn gyntaf. -Y term swyddogol yno yw strwythur wedi'i warchod. -Credent mewn ymgyrchu'n uniongyrchol, drwy dor-cyfraith, ymprydio ac yn y blaen. -Prif fwyd y lindys ydy'r onnen. -Mi wnaeth yr amgylchiadau eu gorfodi i ganslo. -Nofel am wewyr dyn yn yr oriau mân. -O dde-orllewin Asia a gogledd Affrica y daeth yn wreiddiol. -Bydd croeso i Pete alw heibio'r stondin yn y 'steddfod i gael sticeri. -Roedd yn wleidyddol iawn ei natur, ac roedd yn aelod o'r Blaid Ddemocrataidd. -Gall y patrymau ar ei gorff amrywio cryn dipyn. -Gall effeithio chwyddiant gwledydd a gall codiad aruthrol yn ei bris greu dirwasgiad. -Casgliad o emynau modern i blant wedi eu trefnu'n llawn. -Hwynt yw ein harglwyddi — ein duwiau a ddylaswn ddweud. -Ond mae bedd y brenin yn cynnwys cyfrinach arswydus. -Fe'i defnyddir ers cyn hanes, gan bron pob diwylliant yn y byd. -Dw i'n sbïo ar luniau ohonach chdi yn blentyn. -Pryddest mewn pedair rhan gan Rhydwen Williams. -Ac roedd y bwthyn i gyd yn ogla'n dda. -Mae'n hedfan yn y nos yng Ngorffennaf ac Awst. -Gan iddo farw yn ddibriod daeth yr is-iarllaeth i ben. -Mae triniaeth yn dibynnu ar yr achos sylfaenol. -Mae eisiau rhaglenni fel Pawb a'i Farn a Newsnight yn arbennig i Gymru. -Yr astudiaeth wyddonol o sut mae'r corff dynol yn gweithio ydy anatomeg ddynol. -Caiff ei werthu'n ffres ac yn sych. -Erbyn heddiw, tŷ preifat ydyw, gyda thyddyn bychan yn y cefn. -Mae i'r gogledd o Lyn Gweryd ac i'r de o Foel Llanfair. -Ma 'na genhedlaeth goll sy' 'di colli allan ar ddarganfod byd natur. -Daeth ei dad adref gyda'r bagiau siopa. -Perchennog y mynydd ydy Ymddiriedolaeth Genedlaethol yr Alban. -Rhoddodd y pysgodyn ei ben i fyny at wyneb y llyn. -Roedd gwreiddiau'r teulu yn Llanrwst. -Galwodd am weithredu yn erbyn newid yn yr hinsawdd. -Saif yn Awdurdod Unedol Cyngor yr Ucheldir. -Maent yn gwrthod gwerthu eu heiddo ac yn rhwystro'r cynllun boddi. -Doedd neb ond hi'i hun fel petai byth yn dod yma. -Oh, grêt, heb glywed amdanynt o'r blaen. -Mae saith sillaf ym mhob llinell. -Rhedodd y defaid i ffwrdd. -Un diwrnod wrth bysgota, meddyliodd ei fod wedi gweld môr-forwyn wrth ei gwch. -Pasia'r llysia' i fi plis. -Dyw motor y sment micsar ddim yn troi, jyst yn hymian. -Mae'n löyn llwyddiannus iawn a'r niferoedd yn cynyddu. -Dyma restr o ddinasoedd Albania. -Mae'n hedfan yn y nos a chaiff ei ddenu gan olau. -Nes i lwyddo i godi'n fuan bora 'ma. -Caiff ei goginio'n araf ac felly mae ei liw'n eitha tywyll. -Mae gwyddoniaeth yn hwyluso'r gwaith o ragfynegi'n gywir. -Nid yw Aelodau'r Cynulliad na Senedd Ewrop yn cael eu rhestru. -Roedd yr hyrddiad yma yn gryfach na'r lleill. -Ganwyd John William Thomas yn Allt Isaf, Pentir. -Nofel feistrolgar, gynnil ar gyfer oedolion, wedi'i lleoli ym mhentref Aberdaron yn Llŷn. -Profodd yn hynod boblogaidd fel perfformiwr lleol. -Ymhyfryda llawer o bobl leol heddiw eu bod yn perthyn iddo. -Mae'n nodedig hefyd am ei gwaith ymchwil manwl ac ystod eang ei llyfrau. -Mae'n nodedig am ddosbarthu a disgrifio rhywogaethau newydd. -Glaniwyd ar y lleuad yn yr ardal a fedyddiwyd yn Fôr Gwybodaeth. -Ti'n gallu 'i ffrio fe mewn menyn. -Ond mae'n well cael gwybodaeth swyddogol yn hytrach na bod sïon yn cylchredeg. -Cywilydd oedd anurddo corff mor hardd; gresyn oedd torri ymaith fywyd mor ieuanc. -Wi wedi gosod y cloc larwm am bump bore fory. -Wedi marw Capten Davies bu Mair yn cynorthwyo ei mam i redeg y dafarn. -Mae'n mawrygu cenedl elynol yn fwy na'i genedl ei hun. -Argraffwyd taflen Gymraeg a gellir cael copi ohoni. -Adnabyddir ymarferwyr cyfrifeg fel cyfrifwyr. -Mae'r diffyg yn llai ond yn dal i fodoli. -John Bully, Ywain Taffi, a Daniel Paddy yw enwau llawn y tri penteulu. -Maen nhw'n debyg ond ddim yr un peth. -Rhoddwyd ei weddillion i orwedd yn Eglwys Petersham. -Cymerodd e ddwy flynedd i wneud y gwaith. -Cafodd ei ethol yn ddiwrthwynebiad ar bob achlysur. -Dim ond Bell ac un fenyw arall a aeth ymlaen i dderbyn gradd brifysgol. -Dilyniant i'r nofel Rhannu'r Tŷ gan Eigra Lewis Roberts. -Dyna sut ddysges i. -Ydych chi'n dal yn aelod o'r cylch? -Mae'n cael ei weini drwy chwistrelliad i mewn i wythïen. -Roedd hefyd yn awdur cyfres o werslyfrau gramadeg. -Mi oedd y lori laeth wedi troi drosodd ar y ffordd. -Fe wnaethon nhw weiddi'n hapus. -Dim syniad am unrhyw stwff 'mond be mae'r plant yn chwarae. -Ardal yng nghymuned Bodffordd, Ynys Môn, Cymru yw Heneglwys. -Fe aeth y ferch at lan y llyn. -O'dd y môr yn gynnes braf. -Defnyddir y term gan fwyaf o fewn daeareg, bywydeg ac ecoleg. -Testun ail gainc y Mabinogi gyda rhagymadrodd ysgolheigaidd, nodiadau eglurhaol a geirfa fanwl. -Erthygl ddiddorol ar yr angen i gyfathrebu gyda pobl yn eu priod iaith. -Dyma ydy sail prosesau bywyd ei hun. -Gelwir y ddau is yn chwarennau parathyroid israddol. -Defnyddiwyd iaith theori categori i ffurfioli cysyniadau megis setiau, cylchoedd a grwpiau. -Gwyddom fod y Rhufeiniaid yn meddwl cryn dipyn o'r planhigyn hwn. -Yna fe'i galwyd yn Garchar Dinas Dulyn. -Mae yma ddau os nad tair heneb, sydd o bosibl yn garneddau. -Ti eisiau i fi roi sws i ti? -Y rhan o fathemateg lle astudir rhifedd gan fwyaf ydy algebra. -Gwrthododd ei rhieni ei chais i fynd i'r brifysgol. -Ceisiais i ffonio ddoe. -Fe afaelodd yn ei llaw. -Rho'r ffwrn mla'n cyn i fi ddod nôl o'r gwaith. -Angen edrych ar ôl y bobl sy'n edrych ar ein hôl ni. -Mae dim ond i bobl gyda chorff athletaidd. -Rho'r popty mlaen cyn i mi ddod adra. -Mae'n cynrychioli Plaid Genedlaethol yr Alban yn Nhŷ'r Cyffredin. -Miwsig ymlaen, ymlacio a dysgu rhywbeth newydd. -Enw copa'r mynydd yw Bryn y Bol Mawr. -Aeth gŵr a gwraig uniaith o Loegr i Ffrainc. -Gellir hefyd adeiladu amrywiadau geometrig gydag wynebau afreolaidd. -Mi deithion nhw ar gefn ceffylau ar draws y dyffryn. -Ei thad oedd Brychan, sefydlwr teyrnas Brycheiniog yn ôl traddodiad. -Y llyfr cyntaf o'i fath yn y Gymraeg. -Casgliad o deithiau cerdded o gwmpas Henffordd. -Cwm Tawe, o'i ddechreuad ym mhedwardegau'r ganrif ddiwethaf hyd heddiw. -Daeth wagenni a cheffylau Corona yn olygfa gyffredin a phoblogaidd ledled Cymru. -Casgliad o geinciau telyn gan ddeuddeg cyfansoddwr o gyffiniau Llŷn ac Eifionydd. -Roedd y llongau mewn dyfroedd rhyngwladol ar y pryd. -Mi oedd na ddwy orsaf bleidleisio yng Nghymru ar gyfer etholiadau Gwlad Pwyl. -Diolch i ti am ateb. -Cymerodd ran mewn sawl sioe deledu. -Cyfrol fydd yn gwneud i chi gywilyddio a gwenu! -Cyn hir, graddiodd ym Mhrifysgol Llundain. -Dw i ffansi cwcio cinio dydd Sul. -Be' fysach chi'n licio i yfad? -Yr ail reswm yw i fynychu clyweliad ar gyfer ysgol piano. -Hi hefyd yw Bardd Llawryfog cyntaf yr Americanwyr Brodorol. -Ti moyn mynd mas heno? -Casgliad o straeon byrion doniol ac amrywiol sy'n addas ar gyfer dysgwyr. -Un mewn cyfres o astudiaethau ar feddylwyr amlwg, yng Nghyfres y Meddwl Modern. -Ysgol ddwyieithog, wledig dwy filltir o Ruthun ydy Ysgol Llanbedr Dyffryn Clwyd. -Yn anffurfiol, mae theori categori yn theori gyffredinol o ffwythiannau. -Rheibiwyd sawl pentref ac eglwys ar y ffordd, mae'n debyg. -Bu lot o waith ar y bont yn dilyn y llifogydd diweddar. -Mae'r erthygl amdanoch chi ar y wefan rŵan. -Emosiwn cryf a deimlir mewn perthynas â pherson arall ydy cariad. -Rhaid cwblhau ambell i dasg er mwyn datgloi rhai lleoliadau. -Dyw'r ddolen i'r ap ar Google Play ddim yn gweithio chwaith. -Mae ceisio dod o hyd i ddogfen wrth chwilio gwefannau'r Llywodraeth yn anobeithiol. -Roedd agwedd y wasg tuag at ei anabledd yn gymysglyd. -Nofel gyntaf yr actores o bentref Llanfair ger Harlech. -Cath fach frech oedd hi. -Ar ôl pump awr o gerdded oeddan ni wedi blino. -Yn y rhestr ganlynol, nodir y math o ddangosydd mewn cromfachau. -Pan ddychwelodd atynt roeddent wedi troi'n niwlog. -Roedd nifer o'r teulu dros y blynyddoedd yn gyfreithwyr. -Bu'n aelod o Academi Celfyddydau a Llythyrau America am rai blynyddoedd. -Rhaid golchi dwylo wedi cyrraedd y tŷ. -Casgliad o gerddi a rhyddiaith i blant gan Mari Siân Stevens yw Brasluniau. -Doedd ganddi ddim syniad fod ei ffrindiau wedi trefnu parti. -Dw i wedi colli gwaith oherwydd hyn oll. -Mae nhw'n rhegi ar ei gilydd. -Daeth yn rhugl mewn Ffrangeg, Saesneg ac Almaeneg. -Dwi braidd yn nerfus. -Roedd yn Radical brwd ac yn weithgar gydag ymgyrch y Siartwyr hefyd. -Pwy yw'r ysbrydion sy'n llechu yng nghornel yr atig? -Mewn pobl iau, gellir ei achosi trwy wrando ar ormodedd o sŵn uchel. -Mae hynny'n ddigon am y tro. -Does dim ap arall yn gwneud eto. -Gair Ffrengig ydoedd yn wreiddiol. -Mae'r olwyn sy'n troi'n creu diweddglo. -Nofel am griw o bobl ifanc sy'n aelodau o fand cyffrous iawn. -Mae hyn yn groes i adio a lluosi. -Mewn defnydd mwy modern, mae hefyd yn golygu hyd y llinell hon. -Roedd y datblygiad mewn teithio yn un effeithiol a pwysig -Gadawsom y felin, ond gwelem hi o bob pen bryn gyrhaeddem. -Bydd hyn yn ehangu geirfa ac yn creu brawddegau mwy estynedig -Prin iawn yw'r esiamplau disglair yn fy mhrofiad i -Pwy enillodd Ras yr Wyddfa y llynedd? -Mae tiwtor gwych ar y cwrs yma. -Lle wyt ti eisiau mynd am bryd o fwyd? -Roedd ganddo fe lais newydd ffres. -Methent wybod oddi wrth fy iaith o ba ran o Gymru y deuwn. -Rydych yn cydnabod heriau ac yn dangos sut wnaethoch ymateb -Aethom i mewn, i'r lle tawelaf fu erioed. -Dw i ddim yn cofio fy enw defnyddiwr. -Yr oedd gweled Llythyrdy Lannion fel dihangfa rhag marwolaeth inni. -Mae hon yn stori am gawr oedd yn byw ar ben Cader Idris. -Mae'n holl bwysig eu bod nhw ddim yn ildio cic gosb. -Bydd angen gwrando, siarad yn glir a dilyn cyfarwyddiadau. -Fe rown ni un cynnig arall arni. -Rwy wedi colli fy llais ar ôl canu gormod. -Mae'n amser mynd i odro'r gwartheg. -Daeth dim bws am awr, wedyn daeth dau fws gyda'i gilydd. -Dan lofft yr organ yr oedd plant yr ysgolion, mewn dillad gweddus. -Dyma'r glustog rydw i wedi dewis creu yn yr arholiad -Rhaid i mi gael sgidiau glaw newydd. -Roedd pobl yn rhoi sylwadau ar y cyfryngau cymdeithasol. -Rho drefn ar y llyfrau yna wir. -Fe gollon ni'n cyflenwad trydan. -Canwch y gân yna i ni unwaith eto. -Holai'r merched ni, er mawr foddhad i'r dyrfa oedd yn y gegin. -Efo phob damcaniaeth derbynnir beirniadaeth, boed yn llym neu'n ysgafn -Mae'r coed yn dechrau blaguro. -Lleoedd i'w gochel fel rheol ydyw gwestai y siaredir Saesneg ynddynt. -Ar lawr yr oedd y tân, a chrochanau o bob math bob ochr iddo. -Ie, oes ryfedd ydyw'r oes hon. -David Cameron benderfynodd gynnal refferendwm ar Brexit. -Rhaid trawsnewid yr economi a'r gymdeithas i amddiffyn ac adfer natur. -Mae'r defaid i gyd yn ddiogel yn y cae top. -Maen nhw wedi'n rhybuddio i symud y defaid i dir uwch. -Dyma hi'n baglu dros ei sgert hir. -Y mae'n eithaf clyd a glân, er mai bychan iawn yw ei ffenestr. -Bydd hi'n gwawrio toc. -Dan Biggar sydd am gicio. -Hon yw'r seremoni i agor y pumed Cynulliad ers i ddatganoli ddechrau -Daethom at ddwy felin droir gan y môr. -Dylech chi weld haen wen linynnog yn ffurfio ar ben y sylwedd -Roedd Denzil Davies yn aelod seneddol dros Lanelli. -Meg a Fflos y enwau'r cŵn defaid. -Gallwn weld bod y set yn broffesiynol iawn -Tybiwn fyd mod yn gwybod pa beth oedd yn blino ei meddwl. -Saif ar graig red allan i'r môr. -Ni ddaethom oddi yno unwaith ar ein cythlwng nac yn waglaw. -Yr oedd pawb gyfarfyddem yn awyddus am sgwrs. -Yr oedd yn synnu mwy fod neb wedi cymryd yr ysmaldod o ddifrif. -Mae tiriogaeth bele'r ffawydd yn lledaenu drwy'r wlad. -Mae naw parth amser gwahanol yn Rwsia. -Gwnaent y gorau o'r ardd a'r cut mochyn. -Gwyddem fod ei dad a'i fam yn dalentog. -Bydd rhyw ddeucant yn mynd i'r capel. -Dododd ei dwylaw un o boptu i'w genau a gwaeddodd. -Ydech chi yn cofio'r lle fel yr oedd o? -Yden ni wedi colli'r ffordd, dywed, Elin? -Amddiffynnir y cwrel yn y lagŵn rhag tonnau gwyllt y môr. -Cafwyd sawl llongddrylliad ar y creigiau hyn. -Os gwelid Dafydd yn unman, gellid bod yn sicr fod Pero yn agos. -Roedd y gwiwerod wrthi yn cuddio'r cnau. -Yr oeddynt rywsut fel pe buasent wedi mynd yn gymysg. -Mae angen tiwnio'r delyn. -Dododd yr het o'r neilltu ar y dresel dderw. -Os wyt ti'n oer gwisga gardigan arall. -Roedd y lle yn bwysig iawn i'r hen Bictiaid. -Byddai yn eistedd wrth ffenestr oedd gyferbyn â ffenestr siop weithio'r cryddion. -Defnyddid y mygydau mewn seremonïau. -O'r diwedd yr oedd yr hen forwr cadarn ar y lan. -Does yma ddim englyn i'r Ysgol Sul, meddwn, gan edrych ar y bardd. -Mae llawer o lygredd yno. -Mae wedi'i hyswirio rhag llifogydd. -Prin y disgwyliai fedru gwneud dim ond edrych ar Wil yn ei berygl. -Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch yw enw'r pentref. -Mi wn erbyn hyn. -Ond yr oedd rhywbeth yn falch yn yr eneth erioed. -Roedd olion paent o gwmpas cegau'r cerfluniau. -Yn eu plith yr oedd amryw yn berchenogion eu tai eu hunain. -Wnaiff e ddim gweld pobl. -Doedd neb yn meddwl y byddai hi'n ei briodi, ond fe wnaeth hi. -Bellach, daeth y cyfle. -Y noswaith honno cafwyd hyd iddo ar y traeth. -Doedd hi erioed wedi malio rhyw lawer am neb. -Wnes i ddisgyn i gysgu pan oedd gan bawb y colera. -Pam nad oes neb ar ôl? -Cymru yn cadw'u siâp yn dda yn fan 'na. -Glywais i dad a mam yn siarad amdano. -Ni chlywswn ef yn siarad yn gyhoeddus erioed o'r blaen. -Bydda i'n ganol oed cyn bo hir. -Yn y naill boced byddai cen cerrig ac yn y llall byddai Beibl mawr. -Wedyn dw i'n mynd adra ac yn 'llnau i mam. -Caem aml olwg bell brydferth ar y môr. -Fydd e bob amser yn dod pan fyddwch chi'n galw arno? -Dw i ddim yn gwybod beth ydi bod yn llwglyd. -Ni fedd y mynyddoedd hyn fawredd mynyddoedd y gogledd. -Edrychodd heb ddim diddordeb ar y plât cyntaf i Martha osod o'i blaen. -Tydi'r ehedydd ddim yn cuddio'u nyth rhagddo. -Pam oedd yna feudwy Pabyddol yn y llun? -Fedri di ddim dysgu'n ddigon buan. -Wedi cinio, dringasom y bryn yr ymnytha'r ddinas dano. -Gyrrodd Ben ei raw yn ddwfn i'r ddaear. -Daeth y ffarmwr â gwellt glân i roi o dan y defaid. -Rhoed coler am wddw Pero, a rhwymwyd ef wrth gadwyn yn ddi-oed. -Dw i'n unig fy hun 'blaw pan fydd o efo fi. -Cafodd effaith dda ar Mary. -Wn i ddim sut y dois i yma. -Rwy mor hapus dy fod ti wedi dod. -Maen nhw bron mor gyfeillgar â chŵn. -Ac yr oedd Siôn yn y dŵr yn nofio yn braf ers hanner awr. -Rŵan, aros di lle rwyt ti fod. -Mae stryd yn ei dref enedigol wedi ei enwi er anrhydedd iddo. -Roedd yn uniaith Gymraeg tan yn wyth oed. -Byddai hi'n cerdded rownd a rownd y gerddi. -Parhaodd yn Llanelwy hyd ei farwolaeth. -Roedd yn gefnder i'r bardd a'r emynydd William Ambrose. -Roedd y teulu a'i wreiddiau yn Sir Ddinbych. -Ei unig addysg yn blentyn ifanc yng Nghymru oedd yn yr Ysgol Sul. -Mae'n plant ni yn chwarae gyda phren a cherrig. -Mae o ganddo fo gartre rŵan. -Bu yn ennill arian ychwanegol i'r teulu trwy ganu mewn priodasau a chynebryngau. -Does dim sail hanesyddol na ieithyddol i'r myth. -Mae hynny'n drueni, meddai Martha. -Aeth llawer o bobl i'r angladd. -Edrychodd ar y tân coch a gwrando ar y gwynt yn bugunad. -Mae'r safle bellach yn amgueddfa, ac mae hefyd yn grochendy sy'n gweithio. -Er hynny llwyddodd i ysgrifennu nifer fawr o ddramâu llwyddiannus. -Roedd e'n goridor hir ac yn fforchio yn goridorau eraill. -Bu farw ei wraig gyntaf yn Aberdaron wrth esgor. -Gwrthododd y ddau deulu fynychu'r briodas. -Ti'n lwcus fod gen ti fwyd yn ogystal ag archwaeth. -Claddwyd ei weddillion ym mynwent gyhoeddus y Rhyl. -Hoffwn i weld eich bwthyn chi. -Un o'i nodweddion pennaf yw abnormaleddau yn lliw'r croen. -Yn gyffredinol, mae diagnosis yn seiliedig ar archwiliad, profion gwaed a delweddu meddygol. -Roedd hi'n weithgar yn wleidyddol o'i hieuenctid. -Achosodd y Rhyfel Byd Cyntaf oedi pellach. -Mae cofeb iddo yn Eglwys y Santes Fair Magdalen, Cerrigydrudion. -Ddaru ti sglaffio hwnna go iawn bore 'ma on'd do? -Dychwelodd i Gymru i wasanaethu fel athro Saesneg a hyfforddwr rygbi. -Ers ei dienyddiad, bu ymdrechion i adfer enw da Morgan. -Cafodd ei hannog gan ei athrawon i geisio am hyfforddiant llais. -Y mae muriau eglwys y mynachdy'n aros eto. -Roedd Morris yn ddynwaredwr naturiol. -Bu'n mynychu dosbarthiadau nos i ddysgu economeg wleidyddol a chadw llyfrau cyfrifon. -Adeiladodd yno dŷ, siediau a buarthau stoc. -Agorodd ddrws yr ystafell a mynd allan i'r coridor, ac yna dechreuodd grwydro. -Roedd hi'n dechrau hoffi Martha hefyd. -Roedd o hefyd yn siomedig efo ymateb y mwyafrif i'r adroddiad. -Roedd yn fab i William Thomas Davies, cyfreithiwr, ac Anne Elizabeth ei wraig. -Roedd Evans yn Anghydffurfiwr pybyr. -Roedd ei dad yn asiant tai ac yn henadur Rhyddfrydol ar Gyngor Sir Forgannwg. -Cydsyniodd, yn bennaf er mwyn pwyso am ddiwygio'r deddfau mwyngloddio. -Rwy wedi bod i'r gerddi eraill. -Heb driniaeth gall marwolaeth ddigwydd o fewn ychydig ddyddiau. -Roedd y robin goch mor ddel a chrand a phrydferth. -Ei hunig fwyd oedd pecyn o fferins. -Gosodir yr elfennau mewn colofnau a rhesi. -Darluniau a ffotograffau du-a-gwyn sydd yn y gyfrol. -Bu'n aelod o Blaid Gomiwnyddol Ffederasiwn Rwsia a Phlaid Gomiwnyddol yr Undeb Sofietaidd. -Os na fyddwch yn gadael i mi fynd gyda chi, ni fyddaf yn hapus. -Nofel ddirgelwch am garchariad un gŵr ar gam am lofruddiaeth honedig ei ffrind. -Llyfr yn cynnwys astudiaeth o enwau afonydd Môn ynghyd â manylion eu tarddiadau. -Ar ba sianel deledu mae e? -Mae hi'n gyn-ddisgybl Ysgol Uwchradd y Gorllewin, ysgol i ferched. -Mae hi mor boeth mae'r planhigion wedi gwywo. -Ni siaredir ei Chymraeg yn ei hysgolion na'i llysoedd cyfraith na'i chynghorau. -Yn y fynwent honno gorwedd Ap Vychan hyd ganiad yr utgorn. -Mab i löwr o Gymru oedd Roy Jenkins. -Pa draw sydd yn cael ei ddefnyddio yn y darn yma? -Yr oedd y merched wedi cael addysg llawer gwell na'r cyffredin. -Croesawyd yr adroddiad gan lefarwyr ar ran pob plaid -Clywir arogl y rhedyn sy'n llosgi dan y crochanaid tatws. -Allwn ni gael fforc lân os gwelwch yn dda. -Tynasom sgwrs â dwy Ffrances oedd wedi dod o'r ddinas i'r môr. -Yn y coleg bu'n chwarae i dîm y Brifysgol ac i Gymru Llundain. -Fe'i saethwyd ar leoliad yng Nghymru. -Derbyniodd ei addysg elfennol yn ysgolion cyffredin ei Gymru frodorol. -Ymosodwyd ar Gaerwrangon yn gynnar yn y rhyfel a difrodwyd yr eglwys gadeiriol. -Cafodd y testun ei gyfieithu i'r Saesneg nifer fawr o weithiau. -Roedd hi'n mynd i helpu ei mam gyda'r golch. -Pam oedd e'n ei chasáu hi? -Ni phriododd ac ni fu iddi blant. -Cerddodd i'r pen arall, gan edrych eto. -Ychwanegwyd ystafelloedd gwisgo hefyd. -Er gwaethaf ei yrfa wleidyddol hir, cofir amdano yn bennaf fel arweinydd dirwest. -Penododd Penn ef yn feistr y rholiau. -Yr oedd ganddo ddigon o arian i fyw yn gysurus o ran hynny. -Wedi hynny profodd ryddid wrth lefaru a nerth o weddïo. -Bu'n un o gyd-sylfaenwyr Plaid Genedlaethol yr Alban. -Roedd y gwylanod wedi bod yn rhwygo'r bagiau plastig. -Gweithredir un gan Awyrennau Brenhinol Gwlad Iorddonen ar gyfer teithwyr busnes a dosbarth cyntaf. -Roedd y planhigion parhaol wedi cael eu torri nôl i orffwys dros y gaeaf. -Nawddsant pentref ac eglwys Llansanffraid Gwynllŵg yw'r Santes Ffraid. -Rhoddodd ei llaw yn ddamweiniol ar y tapestri yn ei hymyl. -Fe'i hystyrir yn dad llawdriniaeth orthopedig ym Mhrydain. -Roedd ei lygaid yn goleuo gan lawenydd ac athrylith. -Dywedodd yn ddifrifol ei fod wedi ysgrifennu'r englyn ar ddarn o bapur te. -Llusgodd y rhan fwyaf o'r maen i'r ail gar. -Dyma'r ail ynys hygyrch. -Y nod yw ennill sgôr penodol. -Er gwaethaf y ddeddf parhaodd y gwylliaid wrth eu hanfadwaith. -Gwnaed gwelliannau eraill perthnasol i fywyd y ddinas hefyd. -Cyfrol ragorol gyda llaw; difyr, treiddgar, cyfoes. -Aeth yntau yn ddistaw a hurt ei olwg. -Erioed wedi deall sut gafodd Islwyn Ffowc Elis get-awê efo'r peth. -Roedd y gwarchodwyr yn byw yn barhaol yn y tŵr. -Dylid gwneud fersiynau digidol o bob llyfr Cymraeg nad yw mewn hawlfraint. -Eisteddodd Mary yn syllu arni ac yn edrych ar ei bonet crand. -Dim ond yn ystod y gwyliau oeddwn i'n mynd. -Dim ond un gwarchgeidwad oedd yn gallu ymadael ar y tro. -Y tu mewn mae le tân a dau agoriad bach, hanner ogrwn. -Bu'n aelod o gynghorau lleol ac yn gwasanaethu fel ynad heddwch. -Achosodd peth fel hyn gryn helynt lawer tro, wrth gwrs. -Ar ôl dwy flynedd bu anghydfod rhwng y gweinidog a blaenoriaid y capel. -Gweithiwch allan y patrwm ac yna llenwch y bylchau. -Da dy weld yn hybu Saunders yn rhengoedd y Blaid. -Petaech yn fodlon, fyddai modd i chi fy nilyn i, os gwelwch yn dda? -Penderfynodd ganolbwyntio ar bêl-droed gan chwarae i dîm merched y Bari. -Mae'r gêm yn cael ei chwarae gan edrych o'r brig i lawr. -Wedi bod mewn ambell un o'u cyfarfodydd. -Wir yn gwerthfawrogi. -Bu farw ei dad trwy foddi yn yr afon Cothi. -Penderfynodd geisio codi ymwybyddiaeth genedlaethol trwy gynnal ac annerch cyfarfodydd cyhoeddus parhaus. -Siawns am sgwrs ffôn, Dewi? -Enghraifft hefyd o drafod gwâr ar wrthwynebydd. -Sedd canol dde naturiol yw hi. -Yr oedd Wil yn ei elfen, chwarddodd drachefn. -Mae wedi ei ddynodi yn ymddiriedolaeth brifysgol sy'n gysylltiedig â Phrifysgol Abertawe. -Yn Lerpwl bu'n frwd dros achosion cymdeithasol. -Myfyrdod byrfyfyr ar yr hanner can nofel orau yn y Gymraeg, yn nhrefn teilyngdod. -Myfyrdod byrfyfyr beunyddiol ar nofelau gorau'r Gymraeg, yn nhrefn teilyngdod. -Rwy'n falch o weld hyn, Adam. -Mae pencadlys y bwrdd wedi ei leoli ym Mae Baglan. -Mae'r chwaraewyr yn cymryd tro i agor can o dan eu trwynau. -Mae modd gwylio rhaglenni ar y teledu. -Mae pob lefel yn cael ei gychwyn mewn blwch ffôn. -Defnyddir cyfryngau cymdeithasol i hyrwyddo a marchnata'r digwyddiad -Mae'r ddau gyn-gariad yn troi'n elynion pennaf. -Estynnwyd gwahoddiad i Price sefyll fel ymgeisydd gan rai o anghydffurfwyr Aberhonddu. -Ond mae'r perfformiad efo Covid wedi bod yn druenus. -Wedi cael llawer o fudd a mwynhad o'i darllen. -Mae'r pwyntiau wedi dod un ar ôl y llall i Gymru. -Bychain a budron oedd y rhan fwyaf o'r tai. -Byddai efallai yn eithaf costus, ond yn werthfawr iawn -A wnewch chwi fy nysgu i? -Tra yn fachgen yng Nghwmgïedd mynychodd Rees ddosbarthiadau tonic sol-ffa Phylip Thomas. -Bydd adar yn cario hadau i'r ynysoedd. -Clywn sŵn canu distaw yn y cefndir. -Mae'r darlun bellach yn rhan o gasgliad yr Oriel Bortreadau Genedlaethol yn Llundain. -Llyfrau fel hyn ydi ceinion coll y gwareiddiad Cymraeg. -Gwraig Wil oedd hi. -Roedd fel petai'n bugunad yn uwch nag erioed. -Cynhaliodd Roberts weithdai ar ragamcaniad canu a llais. -Wedi hyn bu cynnydd yn y nifer o weinidogion anghydffurfiol ar gyrff cyhoeddus. -Honnwyd ei fod wedi derbyn rhai pleidleisiau annilys ac wedi gwrthod rhai dilys. -Y mae ei tho yn anwastad a llwyd. -Rwy'n hoffi'r caffi yn y Warchodfa Natur. -Meddyliodd am saethu'r ci, druan, yn y fan. -Bu Doctor Price unwaith eto yn cymryd rhan weithredol ym materion y plwyf. -Roedd yn Gymro ymroddedig iawn, yn angerddol dros ei wlad a hawliau ei gydwladwyr. -Dylai'r athrawes atgyfnerthu dealltwriaeth y disgyblion o'r eirfa gywir ar lafar -Gallwn i hefyd ofyn i'r darlithwyr am gyngor i wneud y penderfyniad cywir -Mae'r car yn rhy hir i ffitio drwy'r bwlch. -Maent yn cwrdd pan fydd hi'n gweini brechdan iddo. -Bu farw ym Marnes, Llundain. -Mi oedd o'n cychwyn teimlo'n chwil ar ôl yfed y gwin. -Mae hyd ei effeithiau yn para am tua phedair i chwe awr. -Cynhelir yr ŵyl ar y pedwerydd Dydd Iau ym mis Tachwedd. -Mynychodd ddarlithoedd, astudiodd ieithoedd tramor, ac ysgrifennodd ddramâu. -Helpa fi gario'r bagia siopio i fewn i'r tŷ. -Llwydda i fychanu'r byd llenyddol dyrchafedig Cymreig mewn ffordd wreiddiol a doniol. -Dewis da o lyfr Amelia! -Yn yr ysgol cafodd ei chywilyddio'n gyhoeddus am wrthod canu carolau Nadolig. -Rhaid i'r glwydd droi'n felyn cyn hel y tatws. -A gwell na ffraeo ar Twitter. -Mewn cylch, gyda'i grymedd yn gyson, mae pob pwynt yn fertig. -Pam mai ond bore yma ydw i'n dysgu hyn? -Cau y drws ar dy ôl plis. -Mae'n awdures nifer o lyfrau, yn bennaf am iaith ac addysg. -Mae'r hemisffer dominyddol yn rheoli iaith, swyddogaethau mathemategol a dadansoddol, a chyflawnder. -Hapus am y beichiogrwydd. -Ma hi'n sgortshar 'ma heddiw fyd. -Dyma'r nofel fwyaf personol o'i eiddo hyd yma. -Mae'r ochr ddwyreiniol iddo wedi'i ddifetha. -Rhag ofn bod pobl yn meddwl ein bod wedi rhannu rhyw brofiad rhyfedd. -Gelwir siart bar fertigol weithiau'n graff llinell. -Nid ydy'r rhestr ganlynol yn gynhwysfawr. -Tyd efo fi i siopio p'nawn 'ma. -Does dim rhaid bachu'r ddau ben, dw i'n cymryd? -Dyma'r cyfle i ddweud eich dweud. -Treuliodd y rhan fwyaf o'i oes yn dafarnwr yn Llundain. -Yn ifanc iawn dysgodd grefft y saer, cyn prentisio mewn peirianneg ym Mirmingham. -Yr ydych yn pleidio rhyddid ar bob ystâd heblaw eich ystâd eich hun. -Dwi'n defnyddio cau fewn am lock down. -Tybed os fydd 'na gytundeb heddiw? -Ef a adeiladodd Plas Nantclwyd yn Llanelidan, rhyw ddwy filltir o dref Rhuthun. -Dymunai fy nghyfaill fod yn gi. -Pentref a phlwyf yn Sir Benfro ydy Eglwys Wythwr. -Gall salwch neu wenwyn achosi cramp hefyd, yn enwedig yn y stumog. -Aeth ffrog Thomas ar dân. -Sut maen nhw'n mynd i gael y ffrwythau, tybed? -Mae'n bosibl bob amser rhannu polygon ceugrwm yn set o bolygonau amgrwm. -Cyflwyniad dwyieithog yn llawn ffeithiau a lluniau lliw am Glawdd Offa. -Dyma un o'r pwyntiau ro'n i'n gwneud bore 'ma. -Nofel datrys a dirgelwch i'r arddegau hŷn ac oedolion. -Drama epig farddonol a chwareus. -Ti'n rhoi stwff i fyny. -Ti 'di gadel gwydr ar y ford tu fas. -Mae hi'n ddydd Llun. -Ydy hi'n normal i ymennydd dwyieithog darllen un iaith fel y llall? -Llyfr sy'n amlinellu'r egwyddorion Cristnogol ar gyfer y teulu. -Wi wedi prynu bag lledr gwyrdd. -Fysach chdi'n meindio llnau y car heddiw? -Gyda darluniau du a gwyn gan Jac Jones. -Roedd dwy gath yn ei hambygio ar ochr y ffordd. -Mae gan ddadansoddi data sawl agwedd a thechnegau amrywiol. -Gellir diffinio geometregau meidraidd hefyd fel gwirebau, a dim arall. -Dyma chi ddatrysiad i broblem go iawn. -Casgliad o erthyglau gan Emlyn Evans yw Rhwng Cyfnos a Gwawr. -Mae'n gallu cysgu dros y gaeaf mewn coed bytholwyrdd neu lwyni. -Llongyfarchiadau i'r holl awduron ar restrau byr Llyfr y Flwyddyn eleni. -Ti 'di bod yn y bar newydd yn dre? -Man pwysig iawn yn yr Oesoedd Canol oedd Castell Dinas Emrys. -Gall gymryd rhai wythnosau iddo ddiflannu. -Mae o wedi marw wedi iddo gael ei drywanu yn y ddinas neithiwr. -Mae hi am gwcio bwyd figan i swper. -Mae hi'n fwdlyd yng ngwaelod y cae. -Fel diolch, gwnaed ef yn Arglwydd Siambrlen. -Gall gael ei achosi gan chwydu neu beswch. -Mewn trapesoid anghyfochrog, ni cheir dwy neu ragor o linellau o'r un hyd. -Ceir olion aredig yma ac acw dros y crug hwn. -Ysgrifennodd atodiad i Hanes y Merthyron, ysgrif ar Helynt y Degwm, ac ati. -Roedd stêm yn codi oddi arno, yng nghanol y llyn. -Dyna'n union beth maen nhw'n ddweud hefyd. -Dydyn nhw ddim yn codi tariff ar gig oen. -Gall y claf hefyd deimlo'n benysgafn ac yn flinedig. -Y mae'r gerdd i'r noddwr anhysbys hefyd yn dilyn yr un confensiynau. -Roedd yn filwr ac yn wleidydd Cymreig. -Ar ddechrau glasoed mae'r thymws yn dechrau proses araf o fynd yn llai. -Mae gan y cortecs ardaloedd synhwyraidd, modur a chymdeithasu. -Gellir ei weld hefyd mewn rhai llynnoedd yng ngorllewin yr Alban. -Un o'r dulliau o brofi datganiad mathemategol yw prawf trwy ollwng. -Lle prysur yw'r dref. -Llyfr stori i blant gyda lluniau gan Elwyn Ioan. -Honno oedd yr allwedd i'r ardd gaeedig. -Ymhlith y deunyddiau eraill a ddefnyddir y mae alwminiwm, titaniwm a charbon ffibr. -Hafaledd, oddi mewn i fathemateg, yw'r berthynas rhwng dau faint. -Nid yw ei ddefnydd yn cael ei argymell ar gyfer plant. -Cyhoeddodd Cyngor Sir Ddinbych eu bwriad i aildrefnu addysg yn y cylch. -Gobeithio wneith pobl bwysig Twitter wrando. -Druan â Wyn a Nia Norm. -Mae cyfnod hedfan yr herald rhwng Mehefin a Thachwedd. -Yng Nghaerhirfryn y cafodd ei eni. -Mae Modryb Magi wedi diflannu! -Daeth ei yrfa ysgol i ben yng nghanol y Rhyfel Byd Cyntaf. -Mae'n fath o brawf anuniongyrchol sy'n sefydlu gwir neu ddilysrwydd cynnig. -Wedi cymhwyso symudodd i Gastellnewydd Emlyn i gychwyn cwmni cyfreithiol. -Bu ei waith mwy diweddar yn tueddu i ganolbwyntio ar broblemau cymdeithasol. -Cyfeirio rydym yn y term hwn at ddyfeisiadau megis y cyfrifiadur llaw. -Ymgynghorwyr ceir oeddent i ddechrau, ac nid oedden nhw'n cynhyrchu ceir. -Hi oedd y pedwerydd o saith o blant. -Dyluniadau, diagramau a mapiau du-a-gwyn. -Nofel am fyfyrwyr sy'n cychwyn yn y brifysgol yn Aberystwyth. -Felly gofynnon nhw iddi ei rannu rhyngddynt. -Mond oedd ei gadeirydd cyntaf. -Mi oeddan nhw ar fin ennill gêm. -Bydd o wrthi eto heddiw. -Gellir ystyried y silindr yn storfa ddata. -Gwneith hwnna'r tro. -Diddorol iawn wir. -Heddwch i'w lwch. -Ond, nid oedd yn cynnwys Gogledd Iwerddon. -Lleolir y nofel mewn pentref gwledig ar ddechrau'r saithdegau. -Am ei fod yn fwy ariannog, ac hefyd yn dwy didoriad. -Dw i'n teimlo 'mod i wedi'n nhwyllo. -Mi oedd ymladd yn erbyn y gwynt wedi stwyrian ei gwaed hi. -Roedd teulu ei dad yn hanu o Benygraig, Sir Gaerfyrddin. -Ym Mhrifysgol y Met, Caerdydd bu'n astudio Gwyddoniaeth Feddygol. -Mae nifer o luniau du a gwyn yn y nofel. -Ac mi ddeudis i y baswn i. -Bu hefyd yn Gymrawd o'r Gymdeithas Archeolegol. -Mae'r gacen ferw ma' yn neis nain. -Mae antipasti yn debyg i hors d'oeurves. -Ond beth sydd wedi digwydd iddi? -Eryri 'di'n swyddfa i heddiw. -Mae'r coridor yn rhy gul. -Rhywun allan yn cael trafferth ffeindio rwla i aros? -Paid defnyddio'r dacteg yna efo post wyt ti actiwali eisiau, wrth gwrs. -Beth bynnag eu natur rhaid iddynt fod yn ddiddorol yr olwg ac yn flasus. -Amgueddfa yw'r adeilad, bellach. -Testun ac astudiaeth lenyddol o waith Siôn ap Hywel. -Astudiodd ffrwydron yng Nghaergrawnt adeg yr Ail Ryfel Byd. -Y ffurf debyg i'r paralelogram, mewn tri dimensiwn yw'r paralelepiped. -Ceir craig anferthol ar y copa. -Gall hydoddi'n hawdd mewn dŵr ac mae'n asid gwan. -Stori antur i blant yn y gyfres Gari Tryfan. -Wi angen golchi dillad heddi. -Amcanion sylfaenol yr astudiaeth o geometreg algebraidd yw amrywiaeth algebraidd. -I mi, yn anffodus, mae'n rhy hwyr erbyn hyn. -Ni wyddom pa bryd oedd ei ddydd Gŵyl. - llygaid Cymro Cymreig yr wyf i yn dewis edrych ar y cwestiwn hwn. -Roedd Rhys hefyd yn gyfoethog iawn. -Newyddion trist o'i golli. -Wir i ti, wnaeth llygaid John bron rowlio allan o'i ben. -Newydd anfon Lowri i nôl bara o'r Co-op yn Rhos. -Ysgol ddwyieithog, wledig yn Sir Ddinbych ydy Ysgol Bro Famau. -Mae'n hedfan rhwng Ebrill a Mehefin. -Y gair cyferbyniol iddo yw newidyn. -Ymunodd tri o gefnogwyr yr herwgipwyr â hwy. -Felly hefyd De Affrica, a bu'n lladmerydd huawdl iawn yn erbyn apartheid. -Ti 'di trio llyfrgelloedd y sir? -Mae hynny'n agwedd rhy nodweddiadol yno dwi'n credu, yn anffodus. -Dywedir fod gan linell sy'n gostwng gynnydd negyddol. -Dw i 'di peintio 'y ngwinadd yn las gola'. -Mae'n clera Cymru benbaladr yn darllen ei waith. -Yn ei llythyrau, mae'n trafod y manteision niferus a gynigiwyd gan y Sefydliad. -Rwy'n hoffi'r syniad o fyrgars cig oen Cymreig. -Gweithiodd Beti a'r lleill yn galed mewn amgylchiadau anodd iawn. -Llyfr rhyngweithiol sy'n cyflwyno profiadau newydd ac yn hybu sgiliau sylwi. -Pwy yn hollol yw Liw? -Dwi'n byw mewn byd bach fflwfflyd diniwed. -Oedd o'n sbïo arna i. -Bu'n aelod o Academi Gwyddorau Hwngari am rai blynyddoedd. -Saif llawer o adfeilion yn dyst i hyn ledled y dalaith. -Ceir amrywiaeth eang o ran cynllun a maint yr abacws. -Felly mi feddyliodd y byddai'n mynd ychydig ymhellach ar y beic. -Yn ddiweddarach, defnyddiwyd y crug gan y Rhufeiniaid, fel tŵr. -Nath y gath ddu groesi'r ffordd. -Enw'r fam fynydd yw Aran Fawddwy. -Mae Magi'r iâr yn mynd am dro ar draws fuarth y fferm. -Stori i blant bach sy'n Gymry Cymraeg, wedi'i throsi o'r Almaeneg. -Arllwyswch ychydig o'r purée a'i guro gyda chwisg. -Mae hi hefyd yn awdur ar gyfres o lyfrau ffiseg i fyfyrwyr ysgol uwchradd. -Yr ymennydd yw canolfan reoli'r corff cyfan. -Pam y gorfu'r Undebwyr yn yr Etholiad Cyffredinol diwethaf? -Teimlai Mistres Mary ychydig bach yn lletchwith wrth fynd allan o'r ystafell. -Ceir sawl crug yn yr ardal hon. -Yr ail gyfrol yng Nghyfres Beibl a Chrefydd. -Mi wnaeth y plant beintio llun enfys. -Mae wedi'i anrheithio dros y blynyddoedd. -Yna llithrodd drwy'r drws, a'i gau y tu ôl iddi. -Enw'i dad oedd Hywel Selau a'i fam oedd Mali. -Yn rhyfedd iawn, mae'r blodyn sych yn fwy lliwgar nag un ffres! -Dwi'n gwylio lot o stwff isdeitlau. -Gall ormod ohono fod yn angheuol. -Adargraffiad o'r clasur o hiwmor Cymreig. -Mae gên lân 'da ti. -Hynny yw, nid yw'n sero o unrhyw bolynomial gyda chyfernod cymarebol. -Stori gan Emily Huws ac Elfyn Pritchard yw Yr Eira Mawr a'r Rhew. -Yr oedd gan Humphreys-Owen ddiddordeb mawr mewn addysg. -Mae wedi ei amgylchynu bron yn gyfan gwbl gan goedwigoedd. -Mae'n gopi llawer mwy agos i Efrog Newydd. -Roedd ei chysylltiadau gwleidyddol cynharaf â chenedlaetholdeb Gwlad Groeg. -Dw i 'di bod yn watsiad fideos ar Youtube. -'S dim modd ei ddweud e heb godi ysgwyddau. -Gweinwch y cawl yn boeth, gyda Parmesan wedi'i ratio. -Ar fy ffordd drwy Gaerdydd wlyb. -Gwelir lafa a lludw folcanig o'r cyfnod hwn yn Sir Benfro. -Mewn car trydan, gall y modur trydan weithredu i symud. -Codwyd cofeb iddo ar y tŷ lle'i ganed gan y Sefydliad Ffiseg. -Fe'i cysylltir i'r cyhyrau a'r meinwe cysylltiol. -Bu'n aelod o Gymdeithas Genedlaethol dros Hawl Merched i Bleidleisio am rai blynyddoedd. -Beth yn y byd mawr sy wedi digwydd iddi? -Mi gafon ni ddiwrnod difyr ddoe ar y trip. -Dadleuodd y dylai'r ysgolion cyhoeddus gynnig rhaglenni gwasanaethau cymdeithasol i blant difreintiedig. -Newydd gael sgwrs bositif gyda pheiriannydd sy'n codio ap bancio. -Casgliad o wyth o ganeuon gan Tecwyn Ellis yw Canu Cynnar. -Nath o ddringo fyny'r graig. -Mae ar gael i'w lawrlwytho yma. -Dy gyflog di oedd hwnna? -Hanai ei theulu o'r Almaen ac o Rwsia. -Doedd o byth yn gofyn i bobl hŷn am bethau. -Dyma stori o gyffro, herwgipio, brwydro a chwedloniaeth. -Mae'r rhain yn cynnwys grwpiau, cylchoedd, meysydd, modiwlau, gofod fector, dellt ac algebrâu. -Mae tynnu yn dilyn nifer o batrymau pwysig. -Dw i ddim yn coelio hynna. -A allwch chi ddychmygu byd y tylwyth teg heb y lliw pinc? -Mae'n siŵr o ddigwydd yn fuan. -Wythnosolyn ydoedd a gyhoeddwyd bob dydd Sul. -Oedd hi'n sgwennu lot o erthyglau i'r papur newydd. -Casgliad amrywiol o ddywediadau a hanesion ffraeth a bachog. -Caniateir i gôl-geidwaid i wisgo trowsus tracwisg yn hytrach na siorts. -Mae'n hynod bwysig, felly, nad yw hyn yn amharu ar y darllediad. -Crynodeb o hanes datblygiad mynydda gan Dewi Jones yw Ar Drywydd y Dringwyr. -Nofel ddirgelwch i oedolion yw hon. -Claddwyd ei gorff ym Mhriordy'r Santes Fair, y Fenni. -Mae'n perthyn i gerbyd Ford disel llwyd. -Fe'i magwyd ym Mhorthyrhyd ger Caerfyrddin. -Mi oedd 'na lwyth o blanhigion ar y silff ffenast. -Roedd e'n gwisgo cap stabal. -Dw i 'di codi hyn droeon ar eu cardiau adborth cwsmeriaid. -Ganwyd David Morris yng Nghaerfyrddin yn fab hynaf William Morris, bancwr. -Gellir ei adnabod heddiw fel Sir y Fflint. -Roedd ei mam sengl yn wael, yn gweithio fel gweinyddes a chogydd. -Mae'r rhain yn cynnwys heintiau'r amrantau, cyfbilennau, a'r gornbilen. -Cedwir ei gwaith yn Llyfrgell Genedlaethol yr Almaen. -Iawn, felly, dwi newydd glywed am hyn. -Maen nhw i gyd yn fetelau trosiannol gwyn neu lwyd golau eu lliw. -Caneuon modern i unawdydd, grŵp neu gôr. -Llus ydy prif fwyd y lindys. -Cyhoeddiad rhannol Gymraeg, rhannol Saesneg. -Roedd modd comisiynu milwyr y Gwasanaeth Cenedlaethol a oedd yn dangos addewid. -Bu'n aelod o Ferched y Chwyldro Americanaidd am rai blynyddoedd. -Ef oedd y cyfieithydd ac awdur yr Argraff a'r Nodiadau. -Y fam fynydd ydy Craig Portas. -Am restr o faneri Cymreig, gweler yma. -Mae ei gwaith sinema bron i gyd yn weithiau sy'n ymwneud â ffeministiaeth. -Arweinlyfr i ffynonellau hanes lleol ac achau teulu. -Hwn yw'r côn golau gyda dimensiwn amser. -Dyma bedwaredd nofel Manon Steffan Ros yng nghyfres yr Onnen. -Yn aml, mi wnân nhw ddiflannu a dychwelyd am rai blynyddoedd. -Roedd hefyd yn aelod o Academi Llythyrau Brasil. -Mae hi'n cael ei hadnabod fel ysbrydoliaeth i lawer o artistiaid. -Gliniaduron Windows Deg ydyn nhw. -Nadolig Llawen i chi i gyd. -Casgliad o ganeuon gan Eilir Owen Griffiths. -Aethon ni i adra ar y trên. -Ar adegau, nid oes angen symbol i ddangos hynny. -Yng Ngwledydd Prydain mae'n gyffur sydd ar gael trwy bresgripsiwn meddygol yn unig. -Bydd yn troelli am ddwy filltir o'r traeth i'r môr. -Be' ti'n 'neud heddiw 'ma? -Dw i ddim yn dallt 'i hiwmor o i fod yn onest. -Mi gerddon nhw am filltiroedd cyn cyrraedd y maes gwersylla. -Nofel sy'n dal gafael hyd at y diwedd. -Mae pobl yn ciwio am sglods yn Y Dafarn Datws. -Mae cyfres ddrama Swedeg newydd ar Netflix yn dda iawn. -Fe'i gweinir trwy'r geg neu chwistrelliad i mewn i wythïen. -Ni newidir unrhyw bwynt o fewn y cylch. -Roedd yn Grynwr, o ran crefydd. -Dyma nofel Gymraeg gyntaf Eiddwen Jones. -Mae hi bellach yn ddinesydd Americanaidd. -Copïau o brintiau hanesyddol yw'r darluniau. -Stori i blant am fachgen o'r enw Arwyn sydd wedi gwirioni ar bysgota. -Ni wn pa beth a wnaf â thi. -Llwyddodd i gadw'r sedd i'r achos Rhyddfrydol. -Gellir canfod yr oedolyn ar ei adain rhwng Mai a Gorffennaf. -Meddyliodd Mary ychydig am hyn. -Mae nodweddion topolegol pwysig yn cynnwys cysylltedd a chrynhoi. -Mae'n cwmpasu'r ddynol ryw a natur y ddynol ryw. -Mi ddaethon nhw i fyny hefo cynllun i atal llifogydd yn y dref. -Mewn rhai ieithoedd, er enghraifft yr Almaeneg, fe'i gelwir yn asgwrn y groes. -Y mae llawer ohonynt wedi ymuno â'r blaid. -Lle fase orau? -Ceir cyfuniad delfrydol o hiwmor iach a deunydd mwy dwys a chyffrous. -Ei nai John a etifeddodd ei ystâd. -Ffotograffau lliw trawiadol o'r gofod, a darluniau lliw. -Wnes i losgi 'y ngwynab yn yr haul. -Bydd angen bwrdd torri go fawr arnoch, a rholbren mwy na'r arfer. -Y mae'n nhw'n lluosocach o lawer na'r lleill. -Mae'r deifwyr yn archwilio ogof o dan y môr. -Gormod o haul sy'n achosi llosg haul. -Caiff ei adnabod fel pla mewn fforestydd conifferaidd. -Ei gynefin arferol yw afonydd a nentydd, gyda phridd tywodlyd yn wely iddo. -Gweinwch y cawl gyda croûtons a Parmesan wedi'i gratio. -Dangoswyd golau i fod yn gymorth i longau cyfagos. -Y system fwyaf cyffredin yw'r dull a elwir yn gofnod dwbl. -Aethon ni draw i'r Bala i gwrdd â chriw o ferched heini iawn. -Yr athro, yr Aelod Seneddol, yr entrepreneur a'r fam sengl. -Ysgol gynradd Gymraeg yn Rhuthun, Sir Ddinbych, yw Ysgol Rhewl. -Gellir ei weld ar adain rhwng Gorffennaf ac Awst. -Nid wyf chwaith am erfyn arnoch leihau'r trethi eraill. -Ystyr y gair maeth yw cynhaliaeth, lluniaeth, porthiant, ymborth neu fwyd. -Ceir cryn amrywiadau ar y modd y gellir cyflwyno'r math hwn o siart. -Rhwydwaith dargludo trydan foltedd uchel yw'r Grid Trydan Cenedlaethol. -Mae pwls yn cyfeirio at unrhyw guriad neu ddirgryniad rhythmig. -Dw i'n mynd allan i neud yoga bob bora. -Gyda'n gilydd rydym yn gryf. -Wedi'r coleg, gweithiodd fel artist masnachol. -Fe wnaeth bopeth oedd yn medru, ond mi oedd hi'n rhy hwyr. -Mae'n gaeafgysgu fel lindys. -Y trydydd llyfr sy'n dilyn helyntion Maw, y gath fach sinsir. -Wnes i ddim ei weld e. -Mae'r rhain yn cynnwys ei cherddoriaeth wreiddiol a cherddoriaeth artistiaid Brodorol Americanaidd eraill. -Mae'n ddigon bach i gael ei gario o gwmpas yn ddidrafferth. -Cyfrol am flodau a phlanhigion gan Gareth Maelor yw Ystyriwch y Lili. -Mae pob pennod yn ymdrin â mis o'r flwyddyn. -Dydyn nhw ddim hanner call! -Tyd â phapur newydd o'r siop. -Ni fydd taliad nes bod y banc yn newid ei arfer. -Sbïa ar y fideo 'ma. -Mi oedd llond y cwpwrdd o ffeiliau a gwaith papur. -Fe'i lluniwyd i nodi deucanmlwyddiant ei farw. -Allwch chi ofyn pam? -Mae'n un metr o uchder. -Y rheswm dros hyn yw bod cysgod y Lleuad yn llawer iawn llai. -Dylai claf sydd yn dioddef o unrhyw un o'r effeithiau hyn osgoi gyrru. -Prif fwyd y lindys ydy gweiriau a brwyn, gan yfed barrug y bore. -Mae'r cig yn rhy anodd ei gnoi. -Prif fwyd y lindys ydy ffwng, cen carreg a dail sy'n pydru. -Dwi'n hynod brysur fy hun. -Er iddo ail a thrydydd ganu, nid oedd diwedd ar alwadau'r dorf. -Nofel gyfoes sy'n llawn cynllwyn, sbin a dychan. -Ma'n wha'r i wedi prynu beic newydd. -Gwelais fod y postmon yn gallu ei ffitio mewn trwy'r blwch llythyrau. -Cafodd ei gladdu ym mynwent Llandderfel. -Tynnais i mewn a gadael pres mewn bocs. -All y tylwyth teg ddim dychmygu bod yn y côr heb Mali. -Nath y tarw redeg ar ôl yr hogyn bach. -Rhowch o drwy ogor, ac yna ei ail-gynhesu. -Dw i'n licio dy ffrog di. -Ddo i acw fory, iawn. -Gall ddarganfod pellter, uchder, cyfeiriad a chyflymder y gwrthrych. -Ffisegydd oedd Rhisiart Morgan Davies a anwyd yng Nghorris, Gwynedd. -Mae hi'n gwisgo sbectol goch. -Mae'n rhaid bod rhywbeth rhyfedd wedi digwydd iddi yn ystod deng mlynedd. -Rhan o gyfres o nofelau byr, syml i blant. -Asid organig, crisialaidd gwyn ydy asid tartarig. -Ceir cysyniadau eraill, gwirioneddol a briodwyd yn ddiweddarach. -Darluniau doniol du-a-gwyn. -Sgwenna atyn nhw i beidio trin y Gymraeg yn llai ffafriol na Saesneg. -Yn draddodiadol, arferai dadansoddi real gyfeirio at theori ffwythiannau newidynnau real. -Wedi'i gwahardd rhag ymarfer meddyginiaeth yno, gwnaeth ddadansoddiadau bywyd drwy archwilio'r llaw. -Testun mewn orgraff ddiweddar ac aralleiriad, nodiadau a geirfa ar gyfer pob cerdd. -Mae'n cynllunio, ystyried, beirniadu, ac yn trefnu lleferydd a gwybodaeth. -Mae'r llyfr hwn yn edrych ar fywyd yn y dref. -Beth oedd ei henw? -Roedd hi'n byw ar ei phen ei hun mewn tŷ. -Ymadawodd a'r naill brifysgol a'r llall heb ennill gradd. -Lle brynist ti'r mwclis 'na? -Pridd neu waddod rhydd yw Llifwaddod. -Does fawr o fathemateg yma, yn hytrach dibynnir ar synnwyr cyffredin a phrofiad. -Mae'r etholaeth yn ne-ddwyrain Ucheldir yr Alban. -Dydi'r printar ddim yn gweithio achos bod 'na rywbath yn styc ynddo fo. -Nes bod ei bochau yn eithaf coch. -Ymladd dros urddas ac iechyd gweithwyr a phobl Cymru. -Mae'r math yma o löyn byw yn ymwelydd prin â gwledydd Prydain. -Cyhoeddir y traethawd gorau yn y Boy's Own Paper. -Dw i heb ddarllen am y fath beth eto. -Mae yma hefyd ganolfan dwristiaeth o fewn y ganolfan. -Mae hwn yn dda. -Mae llwyth o stwff da sy'n swnio'n dda mewn maes pêl-droed. -Rhwng Mehefin ac Awst mae'r oedolyn yn hedfan, a hynny mewn un genhedlaeth. -Yn ddiweddarach bu yn Gyrnol ar Ail Fataliwn Gwirfoddolwyr Cyffinwyr De Cymru. -Cafodd hi addysg farddol bellach gan Ioan Madog a'r Prifardd Emrys. -Mae Wicpedia yn lle da i ddechrau. -Rhaid eu darganfod cyn y gêm fawr yn erbyn Lloegr. -Rhan o gyfres o nofelau byrion, syml i blant. -Ti'n hen beth bach rhyfedd hen ffasiwn. -Gwyddent mai effaith hyn fyddai cynnydd mewn pris olew drwy'r byd. -Ceir cymysgedd o gychod pysgota a chychod pleser. -Roedd ei fam, y Frenhines Victoria, yn ffafrio Elisabeth fel darpar ferch-yng-nghyfraith. -Mae o'n cadw malwod mewn tanc. -Wnes i weld nhw'n fyw flwyddyn dwytha. -Mae'r ffrwyth yn edrych fel grawnwin bychain ac yn llawn rhinweddau. -Mae'n tyfu i oddeutu un metr o uchder a lled. -Enwodd ei fab cyntaf ei ôl ei hun. -Ceir hefyd adran faith yn ymwneud ag Arthur. -Bu Davies yn gysylltiedig â'r cwmni am weddill ei oes. -Radiws mewnol cylch, tiwb neu wrthrych gwag arall yw radiws ei geudod. -Mae petryal yn bedair ochr â phedair ongl sgwâr. -Mae'r cymwysterau angenrheidiol yn amrywio o wlad i wlad. -Teitl yn y gyfres o gyfrolau byr a chyflym Stori Sydyn. -Straeon hunangofiannol eu naws sy'n llawn o naws y gorffennol. -Mae dy fam yn wraig garedig. -Lladdwyd pum athro yn y trychineb. -Wi'n edrych ar luniau ohonat ti yn fach. -Dyma sut y cafodd yr enw Lladin. -Mae arwynebau'r polyhedronau hyn yn rheolaidd. -Roedd yn ddigon cryf i ysgwyd canghennau'r coed. -Geiriadur termau sy'n ymwneud a'r diwydiant coedwigaeth. -Lluniwyd arddangosfa a'r llawlyfr dwyieithog hwn ar y pwnc. -Mae'n gynghorydd ar Gyngor Dref Dinbych. -Mae rhai pobl yn mynnu mai'r geiriau'n unig a ysgrifennwyd ganddynt. -Ac oherwydd hynny, fe'i gelwir yn Taffi hyd y dydd hwn. -Wna i gysylltu â ti am fanylion amdanat. -Wi wedi peinto 'ngwinedd i'n binc tywyll. -Mae hwnna'n handi iawn. -Ceir nifer helaeth o henebion tebyg ar yr un llethr. -Ma' fe wedi bod yn cysgu tu fas. -Roedd hi'n amlwg nad oedd llawer o nerth ym mreichiau a choesau Sali. -O hynny ymlaen, cyfeiriwyd ei diddordebau yn bennaf at atal cenhedlu. -Mi oedd yna botyn o fêl yn y cwpwrdd. -Cyfrol gryno am lwybrau beicio mynydd yng Ngogledd Ddwyrain Cymru. -Mae'r peiriant coffi 'di malu. -Lwyddes i i godi'n fore am unwaith. -A fydd Elwyn yn darganfod yr ateb cyn iddi fynd yn rhy hwyr? -Plant sy'n ei ddal fel arfer. -Dw i'n gweithio ar ffarm odro. -A sblit-sgrin hefyd. -Ystyrir y ddrama hon y fwyaf o ddramâu'r awdur. -Sathrodd i lawr ar yr wy. -Dechreuodd ymarfer Myfyrdod Trosgynnol yn chwech oed. -Mi oedd yna ddeigryn yn llifo lawr ei gwyneb. -Dyma'r erthygl oedd dan sylw yn y seminar. -Chafon ni ddim llawer o lwyddiant yn adeiladu'r ddesg. -Llyfr bwrdd lliwgar gyda geirfa elfennol ac yn llawn darluniau o fyd natur. -Un o foelydd Clwyd. -Arferai'r Rhufeiniaid ei fwyta, ar ôl ei besgi gyda blawd. -Un ystafell ydy'r gell. -Mae'r gyfrol ddarluniadol ddwyieithog hon yn ddathliad o hanes y dref. -Mae hefyd yn gyffredin drwy Loegr yn enwedig yn y De Ddwyrain. -Mae'n un newydd pwrpasol o'i olwg. -Ceir dwy ffordd o ddisgrifio aelodau o set. -Maent yn gwasanaethu i drosglwyddo seiniau o'r awyr i'r cochlea. -Nid oedd gan Michelle fawr o ddiddordeb mewn gwleidyddiaeth tan y refferendwm. -Mae'r adeilad yn cynnwys fflatiau erbyn heddiw. -Ges i ganiau seidr am bunt o'r sdesion. -Pum stori am anallu criw brith o gymeriadau pentrefol i gyfathrebu â'i gilydd. -O'dd e'n lico ca'l mwgyn ar ôl gwaith. -Ysgrifennai ei hemynau ar ochr dudalennau ei Beibl a llyfrau crefyddol eraill. -Fel arfer mae'n cael ei gymryd trwy'r genau. -Mae'n hynod am ei siapau syml, Canoldirol, gyda'i waliau gwynion. -Gallwch ychwanegu mwy o stoc os ydy o'n rhy drwchus. -Brynes i beth heno a meddwl bod y pris yn uwch. -Roedd o'n prynu cerdyn pen-blwydd. -Ysgarwyd ei rhieni pan oedd yn ei harddegau. -Mi oedden nhw i fod i briodi wythnos nesaf. -Mae rhai o'i nofelau eraill wedi archwilio polaredd rhyw a hunaniaeth rywiol. -Defnyddir y term o fewn meysydd megis geometreg dafluniol, lluniadau technegol, ac ati. -Cafwyd gwrthwynebiad cryf yn erbyn ymosodiad Israel ar y llongau cymorth. -Pwrpas hyn ydy tynnu sylw'r gwyliwr at y grocbren. -Mae lladron wedi difetha'r crug dros y blynyddoedd. -Diolch ti boi. -Dyw saethu ffesantod heb ei wahardd yng Nghymru, dim ond ar dir cyhoeddus. -Mae'r haenau mewnol yn cynnwys y mater gwyn, a'r ganglia sylfaenol. -Tref yn Swydd Amwythig, Lloegr ydy Ellesmere. -Does 'na ddim angen poeni am ddim byd. -Ceir cryn amrywiaeth yn lliw'r gwyfyn hwn. -Stori gan Haf Llewelyn yw Stwffia dy ffon hoci. -Beth fyddai'r term Cymraeg? -Mae 'nwylo i'n oer. -Efo'r llyfrgelloedd ar gau, mae rhywun yn llwyr ddibynnol ar wroniaid fel hyn. -Ceir maen enfawr ar y copa. -Cafodd Andreas ei fagu gan ei fam, ei fodryb a'i nain. -Carwn pe bai rhywun yn recordio'r Pedair Cainc. -Hwnna 'di'r te gorau. -Daeth hyn ag enwogrwydd mawr iddi. -Mae ar gael fel meddyginiaeth generig ac mae'n gymharol rad. -Pliciwch y madarch a thynnu'r coesau, gan roi'r coesau i un ochr. -Efallai bod Huw yn iawn. -Mae glöyn y perthi, hefyd, ychydig yn llai. -Rho dy ben nôl. -Beth a wnaeth Iesu? -Magwyd hi yn Swydd Gaer, Lloegr. -Dyma gyfrol sy'n cyflwyno ymdriniaeth fanwl o'r Diwygiad. -Ymddangosai y diwrnod cyhyd ag wythnos. -Cafodd ei addysgu yn Ysgol Genedlaethol Llanfechell. -Bu i'r ddau ymwahanu ac yna ysgaru. -Prif fwyd y lindys ydy'r dderwen. -Rwy'n methu ffeindio'r gwreiddiol. -Ysgol newydd, ardal newydd, pobl newydd a dim byd ond trafferth a phoen. -Mae un o'r ffenestri'n cynnwys hen wydr o ffenestr liw cynharach. -Mae'n digwydd ar dywydd oer a phan fo diffyg yng nghylchrediad y gwaed. -Mae 'na fleiddiaid yn yr ogof. -Mae sgil-effeithiau yn gyffredin iawn. -Ges i sgwrs efo aelodau o'r gymuned yma dro yn ôl. -Canlyniad yr etholiad oedd bod y ddau ymgeisydd yn gyfartal. -Mae gan wledydd y byd gytundebau ynglŷn â phatentau a gwarchod hawliau'r dyfeisiwr. -Gwell bod yn onest efo pawb. -Mae'r tri mochyn bach ar fin dechrau adeiladu eu tai eu hunain. -Yng Nghaerdydd y ganwyd Lloyd-Jones a chafodd ei fagu yn Llangeitho, Ceredigion. -Drama ar fydr ac odl ydyw ac mae'r awdur yn anhysbys. -Fe fu yn Gadeirydd Cymdeithas Fyddin Diriogaethol Swydd Amwythig. -Dwi'n ama fod o'n cadw wbath gwerthfawr iawn yn ei locar personol. -Ceid fath ddistawrwydd ar wyneb y ddaear fel byddai Thomas Carlyle farw o lawenydd. -Nath o wylltio fi 'sdi. -Mae yna olion o feddrodau o Oes yr Haearn. -Ni wyddys y rheolau'n iawn ac mae'n bosibl nad oedd llawer ohonynt. -Mae De Glynebwy yn gymuned ym Mlaenau Gwent. -Doeddan ni heb i weld o ers misoedd. -Gall steroidau hefyd fod yn ddefnyddiol. -Neu ynteu, cymysgent y ddwy ynghyd, a byddai hynny'n waeth fyth. -Ai mater o hap a damwain yw cariad? -Gest ti lond trol o hwyl? -Ni ellir ei weld o bell, oherwydd maint y derw sydd o'i amgylch. -Bydd rhaid i chi socian y bara mewn llefrith. -Safodd am swyddi cyhoeddus bedair gwaith. -Ymgyrchodd dros hawl merched i bleidleisio, sef yr hyn a alwyd yn etholfraint. -Mae'n ddiwrnod y gêm fawr rhwng Ysgol Cwmbwrla ac Ysgol Bronaber. -Mae'r ap diweddaraf i mi ei leoleiddio bellach ar gael yn Gymraeg. -Planhigion a ddefnyddir i roi blas, arogl neu liw ar fwyd yw perlysieuyn. -Nofel gyfoes i bobl ifanc ac iddi flas hud a lledrith y Preselau. -Yn y cerebrwm, mae rhanbarthau penodol ar gyfer pob math o ysgogiad ac ymateb. -Mae'n gynllun gwych ac fe gewch chi hyfforddiant o safon. -Nid oedd hi wedi mynd yn bell pan welodd bod y ffordd ar gau. -Roedd aelodaeth o'r blaid yn anghyfreithlon yn Awstria. -Roedd ei rhieni'n ddarllenwyr mawr, a oedd yn meithrin ei thueddiadau academaidd. -Hang on, dydi hynna ddim fel chdi. -Plygwch y blawd dros y wyau a'r dŵr a'i dylino. -Hed mewn un genhedlaeth a hynny rhwng Mai i ganol Hydref. -Mi oedd 'na lot o gerrig ar y traeth. -Casgliad o ddeg stori antur wir ar gyfer plant. -Mae'r ci yn cweithi ar y postman. -Ei ŵyr oedd sylfaenydd y Ffiwsilwyr Brenhinol Cymreig. -Mae'r elfennau sydd ag ymddygiad tebyg, felly, o dan ei gilydd, mewn rhesi. -Mae 'na lot o loerennau o gwmpas y ddaear. -Cafodd yr anrhydedd fel cydnabyddiaeth am ei waith yn trin cleifion. -Ei dderbyn a wneuthum am ei werth. -Os yw baban yn y groth yn ei ddal, gall fod yn ddifrifol. -Dw i methu stopio byta siocled. -Diddymwyd yr etholaeth flwyddyn yn ddiweddarach. -Roedd yn ferch i ddau Iddew cyfoethog. -Ei arbenigedd oedd anianeg. -Od iawn oedd hynna. -Wedi cyrraedd y maes awyr mae'n darganfod bod y Cartel wedi ei dwyn. -Mae hi'n arddangos ei gwaith celf yn yr oriel. -Ni wyddys pwy oedd ei fam. -Daeth y babi hwnnw yn frenin Ffrainc maes o law. -Nid oes unrhyw olion o'r tŵr wedi goroesi. -Mae gan y prif banciau wasanaethau ffôn Cymraeg. -Casgliad o atgofion gan Amrywiol yw Modryb. -Dilyniant i Olion Hen Elwyn ac I'r Tir Tywyll. -Wi wedi plannu tato yn yr ardd. -Gellir defnyddio'r blodau sychion fel perlysieuyn i roi blas ar fwyd. -Ac oherwydd hynny gelwir ef yn Bully; hynny ydyw, Bygylwr. -Dw i'n credu eu bod nhw ar ganol ychwanegu enwau Cymraeg yn raddol. -Ar ôl ei farwolaeth, rhoddodd y gorau i ysgrifennu ffuglen. -Yn ddiweddarach yn ei bywyd, teithiodd i Brydain a chynorthwyo'r mudiad etholfraint yno. -Torcha dy lewys cyn i chdi olchi'r llestri. -Er iddi wrthod talu'r ddirwy, gwrthododd yr awdurdodau gymryd camau pellach. -Mae'n fwy cyffredin ymhlith pobl hŷn a menywod. -Ti yng Nghaerdydd dydd Sadwrn nesa? -Yn ei barn hi, ofn oedd yn gyfrifol, oherwydd bygythiad Llywodraeth Sbaen. -Casgliad o ddeugain dawns gan Eddie Jones yw Hwyl y Ddawns Werin. -Oddet ti'n ei nabod e o'r blaen? -Ac ie, wastad wedi meddwl beth sy'n digwydd i'r holl fwyd. -Ydych chi'n barod am antur? -Fe argyhoeddir pob gwleidydd o gyfreithiwr mai ofer fydd iddo mwyach lefaru a gweithredu. -Mae gan adio sawl nodwedd bwysig. -Mae o'n licio rasio ceir. -Gyda syndod a dig y clywais di yn cablu urddas, ac yn diystyru llywodraeth. -Mae rhan o'r etholaeth o fewn rhan ganol Ucheldir yr Alban. -Mae adwaith cemegol wastad yn broses sy'n cyfuno deunyddiau cemegol. -Wedi gwneud yr ymarfer corff pan oedd yr hysbysebion ymlaen. -Planhigyn lluosflwydd byrhoedlog ydy llygad llo mawr neu weithiau llygad-llo mawr. -Geith o swper yn munud. -Wedi sgwrs fer danfonodd yr heddwas y ddau ar eu ffordd. -Dyma restr o lyfrau Cymraeg sy'n ymwneud ag Atgofion a Hunangofiannau. -Dwi'n hoffi espionage a stwff amlwg fel yna. -Ceir portreadau byrion o enillwyr. -Myneged ei alar bod cynifer o Gymry mor rhyddfrydig i ddygymod ag iau caethiwed. -Mae egni gwres yn cael ei drosglwyddo drwy ddarfudiad a phelydriad. -At hynny, gellir rhannu rhifau cymhleth hefyd gyda rhifau cymhleth di-sero. -Er gwaethaf yr uchelgeisiau hyn, daeth llenyddiaeth i'r amlwg fel ei phrif ddiddordeb. -Llyfr ac astudiaeth lenyddol, Gymraeg gan Sioned Davies yw Crefft y Cyfarwydd. -Cyfrol sy'n cynnwys cyflwyniadau i wyrthiau Iesu. -Golygai hyn y gallai cyfandiroedd gael eu ffurfio. -Plwyf enfawr, nad oedd yn ddinas ar y pryd. -Mae nifer o baramedrau yn gysylltiedig â thrychiad conig. -Rhyfel ydoedd rhwng taleithiau Protestaniaid a Chatholig. -Fydd canlyniadau Rhyl ddim yn cyfri, rwy'n tybio. -Does dim cysylltiad rhwng cael heigiad o lau a glendid neu lanweithdra. -Mae'r llyfrgell yn arbenigo mewn llyfrau prin ac yn gweithredu hefyd fel archifdy. -Anodd iawn oedd dweud pa un ohonyn nhw oedd yn cwyno fwyaf. -Ŵyr Rhys oedd Rowland Ellis a aned yma. -Teithlyfr gan Alun Ifans yw Swyn Sir Benfro. -Ceir siambr gladdu o'r Oes Efydd o fewn y muriau. -Mae'n nefoedd go iawn yntydi. -Ie, fel fflwff, gwaddol petalau am wn i. -Roedd y sŵn yr wylo am y colera wedi codi ofn arni. -Mae dy sbectol di'n gam. -Ni siaredir Llydaweg yn y dref, ond ceir ef yn y wlad oddi amgylch. -Diolch Siân am yr enwebiad. -Prin y gallasai bwled fy ngoddiweddyd. -Mae cylch o oleuni disgleiriach ar dy aflwyddiant di nag ar lwyddiant eraill. -Dydi hi ddim yn licio gwisgo sgerti. -Pa liw ydi'r bloda'? -Tra yn y ddalfa, aeth ar streic newyn a syched. -Ydyn nhw'n cytuno neu'n anghytuno gyda threfn y stori? -Cynhwysir yma gerddi amrywiol iawn sy'n adlewyrchu rhychwant eang o bynciau. -Ond angen i unigolion greu cyfri Wicipedia a gallwch lwytho ffotos chi 'di tynnu. -Adeiladodd fwthyn un llawr hygyrch fel cartref ar gyfer ei fab anabl. -Yn ddiweddarach siaradodd â chynrychiolwyr Democrataidd yn unig. -Casgliad newydd o ryseitiau gan Gareth Richards yw Prydau Pum Peth. -Mae ei llinach yn tarddu o'r Ffindir. -Ysgrifau gan ddeuddeg o ysgolheigion ar y deuddeg diwygiwr Protestannaidd. -Wnes i ollwng 'y mhanad ar y llawr. -Ges i gyfarfod hefo'n narlithydd p'nawn 'ma. -Bydd hyn yn atgyfnerthu driblo a rhoi i'r disgyblion yr hyder i ddriblo -Golyga datblygiadau meddygol diweddar fod disgwyliad oes yn cynyddu, a chyfraddau marwolaethau yn lleihau. -Diolch o galon i ti am y manylion. -Mae'n rhyfedd be ma' rhywun yn dod ar ei draws dramor. -Gallai hefyd olygu hefyd gydymaith person, ei gymar, ei gymydog neu ei elyn. -Dyma gronicl y ddinas breifat. -A fydd copïau gennych? -Yn llawn dychan o sefydliadau a phobl Cymru, dyma nofel lawn difyrrwch. -Es i i redeg dros Fynydd Gellionnen bore 'ma. -I ni, y Gymraeg yw'r unig wrthglawdd rhyngom a diddymdra. -Rhoddais i ddogfen ar Google Docs ddoe. -Mae o'n gymaint o gîc. -Ystyr y gair rhwyll ydy rhwyd. -Dw i 'di bod yn rhostio tomatos yn y popdy efo olew a halen. -Cyfrol o ddeg o straeon byrion gan Eigra Lewis Roberts yw Oni Bai. -Mathau o wermod ydy prif fwyd y siani flewog; mae'n gaeafgysgu fel chwiler. -Mi ddaeth hi adref yn fyw ac yn iach. -Na, dw i heb gael fy mharashiwtio yma. -Fe'i canfyddir yn y rhan fwyaf o Ewrop. -Mae ein pasbortau yn datgan ein hunaniaeth. -Mae canran yn rhif di ddimensiwn. -Roedd hi'n nyrs yn y Rhyfel Byd Cyntaf. -Mae'n rhaid bod gair Cymraeg am hyn? -Mwynhaodd y profiad, cymaint, rhoddodd ei fryd ar fod o flaen y camera. -Gwasanaethodd fel gweinidog mewn gweinyddiaethau Torïaidd a Chwigaidd. -Pa ap Android sy'n dda ar gyfer lluniau awyr nos a'r sêr? -Mae gweddill ei agenda'n un eitha cymedrol er enghraifft hawliau hoywon ac erthylu. -Lluniau lliwgar gan Jac Jones. -Mewn geometreg hyperbolig, gelwir y pwyntiau anfeidredd yn aml yn bwyntiau ideal. -Roedd yn arbenigwr mewn gwydr lliw canoloesol. -Dyma bedwaredd nofel Alun Jones. -Dilyniant i'r nofel Lleuwen gan yr un awdur. -Nid oes consensws ynglŷn â beth yw'r gwahanol ganghennau o fewn mathemateg gymhwysol. -Ceir yma heneb llawer hynach, sef siambr gladdu ger coedwig Goed Parc Garw. -Dim byd i'w weld yno. -Comedi tywyll yw'r ddrama hon. -Ystyrir y papur hwn yn garreg filltir hanesyddol o fewn y maes. -Wnes i droi fy ffêr wrth drio neidio dros y wal. -Ceir llun ohono'n blentyn a chofeb iddo yng Ngholeg yr Iesu. -Mor falch bod Non ddigon call i sylwi bod rhywun yn tynnu'i choes. -Gorwedd gwreiddiau'r canu arbennig hwn yn ôl ym myd y Celtiaid. -Gofynnodd beth oedd yn bod. -Llyfryn o gerddi amrywiol ac argraffiadau, rhai yn ymwneud â Llanfairpwllgwyngyll a Garndolbenmaen. -Mae doniolwch ac eironi'n nadreddu drwy ei cherddi. -Un o arweinwyr y Mormoniaid yn Unol Daleithiau America oedd Daniel Jones. -Gwasanaethodd fel Ynad Heddwch ar fainc Sir Feirionnydd. -Casgliad o gywyddau grymus gan amryw o feirdd. -Beth ydy hi? -Bu farw o drawiad ar y galon ar y fferm flwyddyn yn ddiweddarach. -Pa ddiwrnod mae'i ben-blwydd o? -Be' sy' yn y bocs ar waelod y grisia'? -Ychwanegwch nionyn wedi'i dorri a'i goginio nes ei fod yn frown euraidd. -Wedi gadael yr ysgol mynychodd Adran Iaith a Sefydliad Amddiffyn. -Dw i angen rhoi lliw yn 'y ngwallt. -Mae'n fwy amlwg mewn merched nag ydyw mewn dynion. -Dilyniant i Dawnsio Gwirion a'r Duw Rhyw. -Brenhinwr o Frycheiniog a anwyd yn y Drenewydd. -Rhoddwyd ei weddillion i orwedd yng mynwent teulu Nanteos yn Eglwys Llanbadarn. -Mae geometreg algebraidd yn gangen o fathemateg, sy'n astudio seroau polynomialau aml cyfeiriol. -Llyfr cyfri yn cynnwys ffeithiau am anifeiliaid, map ac arweiniad. -Rhaid i ffermwyr sefyll ar eu traed cyn bod y fferm deuluol ar ben. -Ac yna cymerodd anadl ddofn. -Yng ngwledydd Prydain fe'i ceir yn yr Alban yn unig. -Gan mai pobl anaml ydym, yn preswylio parth bychan o Ynys Brydain. -Roedd rhywun wedi rhoi yr ocsiwn ymlaen am un o'r gloch y bore. -Gwerth i bob tad a dyn ddarllen hwn. -Y gangen o fathemateg sy'n ymwneud â thebygolrwydd yw damcaniaeth tebygolrwydd. -Mi oedd Mari'n cerdded yn ei chwsg bob nos. -Siaradodd gyda theimlad a gyfansoddid o dosturi, o syndod ac o ddigofaint. -Toriad drwy'r bilen ludiog ddynol. -Arhoson ni mewn gwesty reit ar lan y môr. -Mi aethon ni ar goll ar ôl dilyn y llwybr anghywir. -Tra'n casglu madarch yng nghaeau Tŷ'n Ffridd caiff Endaf fraw ofnadwy. -Ei hedyn symbolaidd yw ceirch. -Roedd yn ferch i raglaw ac roedd ei brawd yn Nhŷ'r Arglwyddi. -Dim ond un plentyndod 'dan ni'n ei gael. -Hynny yw, mae creithio yn rhan naturiol o'r broses o fendio'r croen. -Rwyt wedi mynd yn un garfaglach wrth ostwng dy arre i ddiolch amdano fo. -Gyda Ffrainc y cysylltir y gair fel arfer. -Defnyddiodd ei swydd fel modd o ganfod gwybodaeth am fecanweithiau diogelwch ei gleientiaid. -Dwi'n byw ger Wrecsam. -Mae'n Is-Reithor Prifysgol yr Haf, Catalwnia. -Dwi'n siŵr bydd cefnogaeth unfrydol i'r syniada' 'ma. -Ond mae'r plastig eisoes yn ein dŵr. -Dyma'r gyfrol gyntaf erioed i drafod crefft y gynghanedd yn unig. -Bu raid i'r gŵr ofyn rhyw gwestiwn i un o'r fforddolion brodorol. -Mae'n etholaeth amrywiol a gwahanol i etholaethau eraill yr Alban. -A phwy yw'r dyn a chanddo wyneb melyn yn llun pasbort Peter? -Bu Heulwen yn cydweithio gyda Hywel Gwynfryn ar y radio. -Fodd bynnag, ni allent gytuno ar enwebai ar gyfer olynydd iddo. -Nid hon oedd yr ardd oedd wedi'i chau. -Mae plentyn yn sgwatio y tu ôl i wagen gyda dau bwmpen ynddo. -Ni wnaeth y Dug ei benodi i'r Gonffederasiwn ei hun. -At hynny, mae rhai o ysgolion Israel hefyd yn cynnig cyrsiau Rwsieg. -Dedfrydodd swyddogion o Bacistan bob swyddog i flwyddyn mewn carchar ym Mhacistan. -Maent wedi eu cyfieithu i sawl iaith arall. -Y diod y byddwch yn ei gael pan fyddwch chi ddim yn cael diod. -Mae dawnsiwr yn dawnsio mewn dillad glas pryfoclyd yn y strydoedd. -Gallai ei gŵr fod yn wyllt ac yn awdurdodol. -Mae'r erthygl bresennol yn delio â disgyn rhydd Newton yn unig. -Roeddent wedi bod yn pentyrru bwyd a chyflenwadau at y gaeaf. -Yn nodweddiadol, cânt eu canfod mewn coedwigoedd collddail, llaith. -Mae'r genws hefyd yn Awstralia, De Asia, Môr y Canoldir, a Gogledd America. -Defnyddir y cnewyllyn fel olew, bran, startsh, glwtamadau, bwyd anifeiliaid, a thoddyddion. -Menyw yn Asia yn edrych ar rywbeth. -Ei grynodeb o'r digwyddiad oedd bod llwyddiant a methiant yn cydweithio. -Mae'n amlwg fod angen gwahanol gymhareb gêr ar gyfer y cyflwr hwn. -Mae angen newid y ffordd yma o gynhyrchu tê perlysiau Tsieineaidd, mewn ffordd flaengar. -Nid yw dofednod sy'n pori wedi'u cyfyngu i ieir a thyrcwn. -Ac rwyf yn ei chusanu i basio fy egni ymlaen iddi. -Mae ganddo raglenni busnesau hefyd fel "trio ymlaen rhithwir" a "mesurydd". -Mae'r holl beilotiaid yn gyn-filwyr Llynges Frenhinol ond hefyd Corfflu'r Llu Awyr. -Hyrwyddai gerddoriaeth newydd mewn ffyrdd eraill hefyd. -Mae'r bwyty wedi'i leoli mewn delwriaeth Ford wedi'i addasu. -Gôl-geidwad hoci yn deifio. -Roedd rhai awduron yn galw hyn yn “fodel” symlach newydd o bensaernïaeth gyfrifiadurol. -Cyn hynny roddent yn aml wedi eu gwahanu i'w pennau eu hunain o'r injan. -Mae'n nhw'n tueddu i golli canghennau mawr mewn stormydd gwynt. -Moriasom rhwng dwy res o goed poplys. -Bydd hysbysu yn y papur bro leol ar gyfer y gweithgareddau hyn -Hi oedd gêm ryngwladol ola'r tymor. -Ond wyddwn i ddim ar y pryd. -Roeddynt yn barod iawn i roi pob cefnogaeth iddo. -Paid gwastraffu trydan, diffodd y golau. -Ni fwytâi Dafydd byth bryd o fwyd heb ei rannu â Phero. -Ti a fi'n debyg iawn i'n gilydd. -Gall plant arbrofi gyda golosg neu bensil ar bapur i greu tonau gwahanol -Ydw i'n cael mynd i'r gerddi? -Heddiw, rydych am werthuso a dadansoddi nodweddion bisgedi -Mae'r Iarll yn cydsynio. -Yn yr etholiad cyffredinol llwyddodd Thomas i gadw'r sedd dros y Rhyddfrydwyr. -Fy niwrnod rhydd i ydi o heddiw a dw i'n mynd adre. -Bu'n gweithio mewn pyllau yn Nowlais, Aberdâr, Cwm Twrch ac Ystalyfera. -Roedd y ffau yn llawn dŵr a gweddill y c'nawon yn farw. -Roedd hyn yn galluogi defnyddio sbotoleuadau i dynnu sylw at berfformwyr llwyfan. -Wedi dychwelyd i Loegr roedd wedi dod yn ffigwr enwog ymysg Catholigion y wlad. -Bydd y ddiod hud, yn ôl y pedler diegwyddor, yn datgelu ei gwir gariad. -'Dan ni'n chwilio am luniau ar wahanol bynciau -Sefydlwyd Comisiynydd yr Iaith Gymraeg yn lle hynny. -Gwasanaethodd fel capten a rheolwr Cymru. -Credaf nad ydyw yn rhy ddiweddar apelio atoch chi i amddiffyn eich dinasyddiaeth. -Rhydd hyn bwysau cynyddol ar y galw am fwyd a dŵr. -Myfyrdodau byrfyfyr ar y nofelau Cymraeg gorau. -Claddwyd ei weddillion ym mynwent capel Calfaria. -Mae rhai arwyddion o adeiladau mewnol yn goroesi. -Mi fydd hyn a hyn am Borthmadog. -Nawr doedd neb yn ei dilyn hi. -Roedd hi wedi gweld bythynnod gwyngalchog a goleuadau tafarn. -Yr oedd rhyw geinder a heddwch rhyfedd wedi gorffwys ar yr hen fangre annwyl. -Wnes i ddim gwasgu'r botwm iawn. -Stori gan Mair Wynn Hughes yw Trip a Hanner. -Gall y claf gael twymyn a theimlo'n flinedig. -Agorodd y drws i fynd allan. -Mae rhannau ohono'n greithiau aradr. -Mae'r ceffyl yn y cae. -Syrthiodd mam feichiog Meilir i lawr y grisiau gyda chanlyniadau pellgyrhaeddol. -Mae'r llong 'na 'n anferth. -Yn ôl traddodiad bu yma frwydr waedlyd yn ystod Rhyfel Cartref Lloegr. -Ddaru fi 'm i weld o. -Mae sgil-effeithiau difrifol eraill yn cynnwys adweithiau alergaidd a phwysedd gwaed isel. -Mae'r term esgyrnyn yn golygu asgwrn bach. -Casgliad o ganeuon i blant gan Robat Arwyn yw Miwsig y Misoedd. -Yn yr ysgol uwchradd doeddan ni byth yn cael mynd allan. -Mae'r Unol Daleithiau yn anferth. -Awdur Cymreig yw Aled Richards. -Y chweched mewn cyfres am ferched cynradd sy'n gwirioni ar ddawnsio. -Stori i blant oed cynradd gan Ceri Wyn Jones yw Nawr Te, Blant. -Mae rhywun eisoes wedi gyrru yma i nôl fi. -Mae arlunydd yn aros yno a gŵr o Firmingham sy'n dipyn o ddirgelwch. -Nofel wedi'i lleoli yng nghefn gwlad Sir Frycheiniog adeg helynt y Rhyfel Cartref. -Bu farw yn Llundain. -Gwasanaethai fel trysorydd yr Amgueddfa Genedlaethol; a thrysorydd y Bwrdd Penodiadau Cymreig. -Fodd bynnag, gall hinsawdd dymherus olygu tywydd na ellir ei ddarogan. -Ac yna dechreuais i or-feddwl a meddwl mod i'n gor-dreiglo! -Dw i 'di sgwennu i Wicipedia. -Mae cwsg yn caniatáu i'ch ymennydd brosesu gwybodaeth yn eich cof -Mae'n well gen i gorau meibion. -Joe Biden fydd arlywydd nesaf yr Unol Daleithiau. -Dw i ddim am roi gwaith cartref i chi yr wythnos hon. -Maen nhw wedi dadbacio pob dim ond y lluniau ar gyfer y waliau. From 5835ade5c082a0965aa4bcbbf0068048502cfc70 Mon Sep 17 00:00:00 2001 From: Anastasia Kuznetsova Date: Wed, 15 Jan 2025 20:33:57 -0500 Subject: [PATCH 53/61] adapt CV recipe --- .../CommonVoice/ASR/linear/hparams/train.yaml | 100 +++--- .../hparams/train_speech_tokenizer.yaml | 2 +- benchmarks/DASB/CommonVoice/ASR/train.py | 291 ++++++------------ 3 files changed, 149 insertions(+), 244 deletions(-) diff --git a/benchmarks/DASB/CommonVoice/ASR/linear/hparams/train.yaml b/benchmarks/DASB/CommonVoice/ASR/linear/hparams/train.yaml index 079d10f40..4c7f885a9 100644 --- a/benchmarks/DASB/CommonVoice/ASR/linear/hparams/train.yaml +++ b/benchmarks/DASB/CommonVoice/ASR/linear/hparams/train.yaml @@ -1,27 +1,25 @@ -# ############################################################################ -# Model: E2E ASR with CTC -# Encoder: Linear Encoder -# Decoder: CTC beam searcher and greedy searcher -# Tokens: character -# Training: Librispeech 960h -# Authors: -# - Pooneh Mousavi 2024 -# - Jarod Duret 2024 -# ############################################################################ -# Seed needs to be set at top of yaml, before objects with parameters are made +# ################################ +# Script for training an ASR model evaluating an SSL representation +# model on one language from the CommonVoice dataset. A SentencePiece tokenizer +# with number of tokens equal to is learned in a first phase +# on the considered language. +# +# Authors +# * Pooneh Mousavi 2024 +# ################################ +# Seed needs to be set at top of yaml, before objects with parameters are made seed: 1986 __set_seed: !apply:torch.manual_seed [!ref ] -run_name: !PLACEHOLDER -output_folder: !ref results// -output_wer_folder: !ref /wer.txt +language: cy # use 'cy' for Welsh and 'eu' for Basque +output_folder: !ref results/CommonVoice//linear/speech_tokenizer/ +test_wer_file: !ref /wer_test.txt save_folder: !ref /save train_log: !ref /train_log.txt -testing: True # If set to True, the test evlaution is done, otherwise skipped. - +cached_data_folder: cache/CommonVoice//linear/speech_tokenizer/ +run_name: !PLACEHOLDER # Data files -data_folder: !PLACEHOLDER # e.g, /local/cv-corpus-11.0-2022-09-21/ -cached_data_folder: !PLACEHOLDER # e.g., path/to/cache +data_folder: /data/anakuzne/cv/cv-corpus-17.0-2024-03-15/cy # e.g, /local/cv-corpus-11.0-2022-09-21/ train_tsv_file: !ref /train.tsv # Standard CommonVoice .tsv files dev_tsv_file: !ref /dev.tsv # Standard CommonVoice .tsv files test_tsv_file: !ref /test.tsv # Standard CommonVoice .tsv files @@ -30,7 +28,6 @@ train_csv: !ref /train.csv valid_csv: !ref /dev.csv test_csv: !ref /test.csv skip_prep: False # Skip data preparation -language: cy # use 'cy' for Welsh and 'eu' for Basque tokens_folder: !PLACEHOLDER # Path to the folder where extracted tokens are saved. pretrain_embeddings_folder: none # Optional: If pretrain_embeddings is True, this should be set to the path where the pretrained embeddings are saved. @@ -53,9 +50,7 @@ valid_search_interval: 1 avg_checkpoints: 10 # Number of checkpoints to average for evaluation cache_size: 1.e+10 -lr_model: 0.00001 # @orion_step1: --lr_model~"loguniform(0.00001,0.5)" -weight_decay: 0.0005 - +lr_model: 0.0002 # @orion_step1: --lr_model~"loguniform(0.00001,0.5)" # Training parameters dynamic_batching: True @@ -83,22 +78,24 @@ dynamic_batch_sampler_val: # Dataloader options train_dataloader_opts: batch_size: !ref - shuffle: True - num_workers: !ref -valid_dataloader_opts: - batch_size: !ref +dataloader_options: + batch_size: !ref + num_workers: 4 -test_dataloader_opts: +test_dataloader_options: batch_size: !ref + num_workers: 4 +valid_dataloader_opts: + batch_size: !ref ####################### Model parameters ########################### # Tokenizer parameters # These parameters should be set according to the tokenizer used to extract tokens saved in . vocab_size: 1024 -num_codebooks: 24 -sample_rate: 24000 +num_codebooks: 8 +sample_rate: 16000 # Feature parameters encoder_dim: 1024 @@ -108,18 +105,16 @@ freeze_embedding: False # Linear activation: !name:torch.nn.Sigmoid -dnn_layers: 2 # @orion_step1: --dnn_layers~"uniform(1, 4,discrete=True)" +dnn_layers: 1 # @orion_step1: --dnn_layers~"uniform(1, 4,discrete=True)" dnn_neurons: 2048 dropout: 0.2 -output_neurons: 31 +output_neurons: 100 # BPE parameters -# BPE parameters -token_type: char # ["unigram", "bpe", "char"] +token_type: bpe # ["unigram", "bpe", "char"] character_coverage: 1.0 blank_index: 0 -bos_index: 1 -eos_index: 2 +unk_index: 1 # Decoding parameters beam_size: 100 @@ -135,7 +130,6 @@ discrete_embedding_layer: !new:model.custom_model.Discrete_EmbeddingLayer num_codebooks: !ref vocab_size: !ref emb_dim: !ref - # hidden_dim: !ref freeze: !ref init: !ref @@ -158,7 +152,6 @@ modules: encoder: !ref ctc_lin: !ref attention_mlp: !ref - # tokenizer: !ref discrete_embedding_layer: !ref @@ -168,13 +161,19 @@ model: !new:torch.nn.ModuleList ####################### Decoding & optimiser ########################### # Decoding parameters test_beam_search: + beam_size: 143 + topk: 1 blank_index: !ref - beam_size: !ref - beam_prune_logp: !ref - token_prune_min_logp: !ref - prune_history: !ref + space_token: ' ' # make sure this is the same as the one used in the tokenizer + beam_prune_logp: -12.0 + token_prune_min_logp: -1.2 + prune_history: True alpha: 0.8 beta: 1.2 + # can be downloaded from here https://www.openslr.org/11/ or trained with kenLM + # It can either be a .bin or .arpa ; note: .arpa is much slower at loading + # If you don't want to use an LM, comment it out or set it to null + kenlm_model_path: null ctc_cost: !name:speechbrain.nnet.losses.ctc_loss blank_index: !ref @@ -189,25 +188,21 @@ scheduler: !new:speechbrain.nnet.schedulers.NewBobScheduler annealing_factor: 0.8 patient: 0 -#scheduler: !new:speechbrain.nnet.schedulers.LinearNoamScheduler -# lr_initial: !ref -# n_warmup_steps: 3000 -# n_keep_steps: 10 - -model_opt_class: !name:torch.optim.AdamW +model_opt_class: !name:torch.optim.Adam lr: !ref - betas: (0.9, 0.98) - eps: 0.000000001 - weight_decay: !ref + +label_encoder: !new:speechbrain.dataio.encoder.CTCTextEncoder ############################## Logging and Pretrainer ########################## checkpointer: !new:speechbrain.utils.checkpoints.Checkpointer checkpoints_dir: !ref recoverables: model: !ref - scheduler: !ref + scheduler_model: !ref + attention_mlp: !ref + discrete_embedding_layer: !ref counter: !ref - + tokenizer: !ref # Functions and classes epoch_counter: !new:speechbrain.utils.epoch_loop.EpochCounter @@ -220,4 +215,3 @@ error_rate_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats cer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats split_tokens: True -wer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats diff --git a/benchmarks/DASB/CommonVoice/ASR/linear/hparams/train_speech_tokenizer.yaml b/benchmarks/DASB/CommonVoice/ASR/linear/hparams/train_speech_tokenizer.yaml index 69d471448..264bef5fd 100644 --- a/benchmarks/DASB/CommonVoice/ASR/linear/hparams/train_speech_tokenizer.yaml +++ b/benchmarks/DASB/CommonVoice/ASR/linear/hparams/train_speech_tokenizer.yaml @@ -19,7 +19,7 @@ train_log: !ref /train_log.txt # Data files -data_folder: !PLACEHOLDER # e.g, /local/cv-corpus-11.0-2022-09-21/ +data_folder: /data/anakuzne/cv/cv-corpus-17.0-2024-03-15/cy # e.g, /local/cv-corpus-11.0-2022-09-21/ train_tsv_file: !ref /train.tsv # Standard CommonVoice .tsv files dev_tsv_file: !ref /dev.tsv # Standard CommonVoice .tsv files test_tsv_file: !ref /test.tsv # Standard CommonVoice .tsv files diff --git a/benchmarks/DASB/CommonVoice/ASR/train.py b/benchmarks/DASB/CommonVoice/ASR/train.py index a819c41e8..2c8467c7a 100644 --- a/benchmarks/DASB/CommonVoice/ASR/train.py +++ b/benchmarks/DASB/CommonVoice/ASR/train.py @@ -1,107 +1,86 @@ #!/usr/bin/env/python3 -"""Recipe for training an discrete tokens ctc ASR system with librispeech. - -Decoding is performed with greedy decoding at validation time. -At test time, beamsearch is used with an optional external language model. +""" Script for training an ASR model evaluating an SSL representation +model on one language from the CommonVoice dataset. A SentencePiece tokenizer +with number of tokens equal to is learned in a first phase, on +the considered language. Authors * Pooneh Mousavi 2024 - * Jarod Duret 2024 """ -import os import sys -import time import torch -import torchaudio import logging import speechbrain as sb from speechbrain.utils.distributed import run_on_main, if_main_process -from speechbrain.tokenizers.SentencePiece import SentencePiece from hyperpyyaml import load_hyperpyyaml -from pathlib import Path +import torchaudio +from speechbrain.tokenizers.SentencePiece import SentencePiece +from speechbrain.utils.data_utils import undo_padding +import time +import os base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../")) sys.path.append(base_dir) - logger = logging.getLogger(__name__) -def compute_grad_norms(model): - total_norm = 0.0 - for p in model.parameters(): - if p.grad is not None: - param_norm = p.grad.data.norm(2) - total_norm += param_norm.item() ** 2 - total_norm = total_norm ** 0.5 - return total_norm # Define training procedure class ASR(sb.Brain): def compute_forward(self, batch, stage): """Forward computations from the waveform batches to the output probabilities.""" batch = batch.to(self.device) wavs, wav_lens = batch.sig - in_toks, _ = batch.speech_tokens - - in_embs = self.modules.discrete_embedding_layer( - in_toks - ) # [B, T, N-Q, D] - - # Attention-Pooling - att_w = self.modules.attention_mlp(in_embs) # [B, T, N-Q, 1] - in_embs = torch.matmul(att_w.transpose(2, -1), in_embs).squeeze( - -2 - ) # [B, T, D] + p_tokens, _ = batch.speech_tokens + + embeddings = self.modules.discrete_embedding_layer(p_tokens) + att_w = self.modules.attention_mlp(embeddings) + feats = torch.matmul(att_w.transpose(2, -1), embeddings).squeeze(-2) if type(self.modules.encoder).__name__ == "VanillaNN": - enc_out = self.modules.encoder(in_embs) + enc_out = self.modules.encoder(feats) elif type(self.modules.encoder).__name__ == "LSTM": - enc_out, _ = self.modules.encoder(in_embs) + enc_out, _ = self.modules.encoder(feats) else: raise NotImplementedError + + p_tokens = None # output layer for ctc log-probabilities logits = self.modules.ctc_lin(enc_out) p_ctc = self.hparams.log_softmax(logits) - p_tokens = None + if stage == sb.Stage.VALID: p_tokens = sb.decoders.ctc_greedy_decode( p_ctc, wav_lens, blank_id=self.hparams.blank_index ) elif stage == sb.Stage.TEST: p_tokens = test_searcher(p_ctc, wav_lens) - return p_ctc, wav_lens, p_tokens def compute_objectives(self, predictions, batch, stage): """Computes the loss (CTC+NLL) given predictions and targets.""" - p_ctc, wav_lens, predicted_tokens = predictions + p_ctc, wav_lens, p_tokens = predictions ids = batch.id tokens, tokens_lens = batch.tokens - - # Label Augmentation - if stage == sb.Stage.TRAIN and hasattr(self.hparams, "wav_augment"): - tokens = self.hparams.wav_augment.replicate_labels(tokens) - tokens_lens = self.hparams.wav_augment.replicate_labels(tokens_lens) - loss = self.hparams.ctc_cost(p_ctc, tokens, wav_lens, tokens_lens) if stage == sb.Stage.VALID: - # Decode token terms to words - predicted_words = self.tokenizer( - predicted_tokens, task="decode_from_list" - ) + # Convert token indices to words + predicted_words = self.tokenizer(p_tokens, task="decode_from_list") + elif stage == sb.Stage.TEST: - predicted_words = [ - hyp[0].text.split(" ") for hyp in predicted_tokens - ] + predicted_words = [hyp[0].text.split(" ") for hyp in p_tokens] if stage != sb.Stage.TRAIN: - target_words = [wrd.split(" ") for wrd in batch.wrd] + # Convert indices to words + target_words = undo_padding(tokens, tokens_lens) + target_words = self.tokenizer(target_words, task="decode_from_list") + self.wer_metric.append(ids, predicted_words, target_words) self.cer_metric.append(ids, predicted_words, target_words) @@ -111,10 +90,10 @@ def on_stage_start(self, stage, epoch): """Gets called at the beginning of each epoch""" if stage != sb.Stage.TRAIN: self.cer_metric = self.hparams.cer_computer() - self.wer_metric = self.hparams.wer_computer() + self.wer_metric = self.hparams.error_rate_computer() def on_stage_end(self, stage, stage_loss, epoch): - """Gets called at the end of a epoch.""" + """Gets called at the end of an epoch.""" # Compute/store important stats stage_stats = {"loss": stage_loss} if stage == sb.Stage.TRAIN: @@ -122,83 +101,76 @@ def on_stage_end(self, stage, stage_loss, epoch): else: stage_stats["CER"] = self.cer_metric.summarize("error_rate") stage_stats["WER"] = self.wer_metric.summarize("error_rate") - current_epoch = self.hparams.epoch_counter.current - valid_search_interval = self.hparams.valid_search_interval - if ( - current_epoch % valid_search_interval == 0 - or stage == sb.Stage.TEST - ): - stage_stats["WER"] = self.wer_metric.summarize("error_rate") - - # log stats and save checkpoint at end-of-epoch + + # Perform end-of-iteration things, like annealing, logging, etc. if stage == sb.Stage.VALID: - if type(self.hparams.scheduler).__name__ == "NewBobScheduler": - lr, new_lr = self.hparams.scheduler(stage_stats["loss"]) - sb.nnet.schedulers.update_learning_rate(self.optimizer, new_lr) - elif type(self.hparams.scheduler).__name__ == "LinearNoamScheduler": - lr = self.hparams.scheduler.current_lr - else: - raise NotImplementedError - - optimizer = self.optimizer.__class__.__name__ - epoch_stats = { - "epoch": epoch, - "lr": lr, - "optimizer": optimizer, - } + old_lr_model, new_lr_model = self.hparams.scheduler( + stage_stats["loss"] + ) + sb.nnet.schedulers.update_learning_rate( + self.model_optimizer, new_lr_model + ) + self.hparams.train_logger.log_stats( - stats_meta=epoch_stats, + stats_meta={"epoch": epoch, "lr_model": old_lr_model}, train_stats=self.train_stats, valid_stats=stage_stats, ) self.checkpointer.save_and_keep_only( - meta={"WER": stage_stats["WER"], "epoch": epoch}, - min_keys=["WER"], - num_to_keep=self.hparams.avg_checkpoints, + meta={"WER": stage_stats["WER"]}, min_keys=["WER"], ) - elif stage == sb.Stage.TEST: self.hparams.train_logger.log_stats( stats_meta={"Epoch loaded": self.hparams.epoch_counter.current}, test_stats=stage_stats, ) if if_main_process(): - with open( - self.hparams.output_wer_folder, "w", encoding="utf-8" - ) as w: + with open(self.hparams.test_wer_file, "w") as w: self.wer_metric.write_stats(w) - def on_fit_batch_end(self, batch, outputs, loss, should_step): - if ( - should_step - and type(self.hparams.scheduler).__name__ == "LinearNoamScheduler" - ): - self.hparams.scheduler(self.optimizer) + def init_optimizers(self): + "Initializes the weights optimizer and model optimizer" + self.model_optimizer = self.hparams.model_opt_class( + self.hparams.model.parameters() + ) + self.optimizers_dict = { + "model_optimizer": self.model_optimizer, + } + # Initializing the weights + if self.checkpointer is not None: + self.checkpointer.add_recoverable("modelopt", self.model_optimizer) + +# Define custom data procedure def dataio_prepare(hparams, tokenizer): """This function prepares the datasets to be used in the brain class. - It also defines the data processing pipeline through user-defined functions. - """ - #data_folder = hparams["data_folder"] + It also defines the data processing pipeline through user-defined functions.""" + + # 1. Define datasets + data_folder = hparams["data_folder"] train_data = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=hparams["train_csv"], + csv_path=hparams["train_csv"], replacements={"data_root": data_folder}, ) - print(f"Train data size: {len(train_data)}") if hparams["sorting"] == "ascending": # we sort training data to speed up training and get better results. - train_data = train_data.filtered_sorted(sort_key="duration") + train_data = train_data.filtered_sorted( + sort_key="duration", + key_max_value={"duration": hparams["avoid_if_longer_than"]}, + ) # when sorting do not shuffle in dataloader ! otherwise is pointless - hparams["train_dataloader_opts"]["shuffle"] = False + hparams["dataloader_options"]["shuffle"] = False elif hparams["sorting"] == "descending": train_data = train_data.filtered_sorted( - sort_key="duration", reverse=True + sort_key="duration", + reverse=True, + key_max_value={"duration": hparams["avoid_if_longer_than"]}, ) # when sorting do not shuffle in dataloader ! otherwise is pointless - hparams["train_dataloader_opts"]["shuffle"] = False + hparams["dataloader_options"]["shuffle"] = False elif hparams["sorting"] == "random": pass @@ -209,13 +181,16 @@ def dataio_prepare(hparams, tokenizer): ) valid_data = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=hparams["valid_csv"], + csv_path=hparams["valid_csv"], replacements={"data_root": data_folder}, ) + # We also sort the validation data so it is faster to validate valid_data = valid_data.filtered_sorted(sort_key="duration") test_data = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=hparams["test_csv"], + csv_path=hparams["test_csv"], replacements={"data_root": data_folder}, ) + + # We also sort the validation data so it is faster to validate test_data = test_data.filtered_sorted(sort_key="duration") datasets = [train_data, valid_data, test_data] @@ -232,30 +207,23 @@ def tokens_pipeline(id): sb.dataio.dataset.add_dynamic_item(datasets, tokens_pipeline) - ## 2. Define audio pipeline: - + # 2. Define audio pipeline: @sb.utils.data_pipeline.takes("wav") @sb.utils.data_pipeline.provides("sig") def audio_pipeline(wav): - sig = sb.dataio.dataio.read_audio(wav) info = torchaudio.info(wav) + sig = sb.dataio.dataio.read_audio(wav) resampled = torchaudio.transforms.Resample( info.sample_rate, hparams["sample_rate"], )(sig) - # resampled = resampled.unsqueeze(0) return resampled sb.dataio.dataset.add_dynamic_item(datasets, audio_pipeline) # 3. Define text pipeline: @sb.utils.data_pipeline.takes("wrd") - @sb.utils.data_pipeline.provides( - "wrd", "char_list", "tokens_list", "tokens" - ) + @sb.utils.data_pipeline.provides("tokens_list", "tokens") def text_pipeline(wrd): - yield wrd - char_list = list(wrd) - yield char_list tokens_list = tokenizer.sp.encode_as_ids(wrd) yield tokens_list tokens = torch.LongTensor(tokens_list) @@ -265,50 +233,22 @@ def text_pipeline(wrd): # 4. Set output: sb.dataio.dataset.set_output_keys( - datasets, ["id", "sig", "wrd", "char_list", "tokens", "speech_tokens"], - ) - - # 5. If Dynamic Batching is used, we instantiate the needed samplers. - train_batch_sampler = None - valid_batch_sampler = None - if hparams["dynamic_batching"]: - from speechbrain.dataio.sampler import DynamicBatchSampler # noqa - - dynamic_hparams_train = hparams["dynamic_batch_sampler_train"] - dynamic_hparams_val = hparams["dynamic_batch_sampler_val"] - - train_batch_sampler = DynamicBatchSampler( - train_data, - length_func=lambda x: x["duration"], - **dynamic_hparams_train, - ) - - valid_batch_sampler = DynamicBatchSampler( - valid_data, - length_func=lambda x: x["duration"], - **dynamic_hparams_val, - ) - - return ( - train_data, - valid_data, - test_data, - train_batch_sampler, - valid_batch_sampler, + datasets, ["id", "sig", "tokens", "speech_tokens"], ) + return train_data, valid_data, test_data if __name__ == "__main__": - # CLI: hparams_file, run_opts, overrides = sb.parse_arguments(sys.argv[1:]) - with open(hparams_file) as fin: - hparams = load_hyperpyyaml(fin, overrides) # If distributed_launch=True then # create ddp_group with the right communication protocol sb.utils.distributed.ddp_init_group(run_opts) + with open(hparams_file) as fin: + hparams = load_hyperpyyaml(fin, overrides) + # Create experiment directory sb.create_experiment_directory( experiment_directory=hparams["output_folder"], @@ -337,24 +277,17 @@ def text_pipeline(wrd): # Defining tokenizer and loading it tokenizer = SentencePiece( - model_dir=hparams["cached_data_folder"], - vocab_size=hparams["output_neurons"], + model_dir=hparams["save_folder"], + vocab_size=hparams["output_neurons"], # Number of considered tokens annotation_train=hparams["train_csv"], annotation_read="wrd", model_type=hparams["token_type"], character_coverage=hparams["character_coverage"], - bos_id=hparams["bos_index"], - eos_id=hparams["eos_index"], ) - # here we create the datasets objects as well as tokenization and encoding - ( - train_data, - valid_data, - test_data, - train_bsampler, - valid_bsampler, - ) = dataio_prepare(hparams, tokenizer) + # Create the datasets objects as well as tokenization and encoding :-D + train_data, valid_data, test_data = dataio_prepare(hparams, tokenizer) + # Use pretrained embeddings if hparams["pretrain_embeddings"]: @@ -398,7 +331,6 @@ def text_pipeline(wrd): # Trainer initialization asr_brain = ASR( modules=hparams["modules"], - opt_class=hparams["model_opt_class"], hparams=hparams, run_opts=run_opts, checkpointer=hparams["checkpointer"], @@ -416,45 +348,24 @@ def text_pipeline(wrd): **hparams["test_beam_search"], vocab_list=vocab_list, ) - train_dataloader_opts = hparams["train_dataloader_opts"] - valid_dataloader_opts = hparams["valid_dataloader_opts"] - - if train_bsampler is not None: - train_dataloader_opts = { - "batch_sampler": train_bsampler, - "num_workers": hparams["num_workers"], - } - - if valid_bsampler is not None: - valid_dataloader_opts = {"batch_sampler": valid_bsampler} - - # Measure time - start_time = time.time() # Start the timer # Training - with torch.autograd.detect_anomaly(): - asr_brain.fit( - asr_brain.hparams.epoch_counter, - train_data, - valid_data, - train_loader_kwargs=hparams["train_dataloader_opts"], - valid_loader_kwargs=hparams["valid_dataloader_opts"], - ) + start_time = time.time() # Start the timer + asr_brain.fit( + asr_brain.hparams.epoch_counter, + train_data, + valid_data, + train_loader_kwargs=hparams["train_dataloader_opts"], + valid_loader_kwargs=hparams["valid_dataloader_opts"], + ) end_time = time.time() # End the timer # Calculate elapsed time elapsed_time = end_time - start_time logger.info(f"Model execution time: {elapsed_time:.6f} seconds") - if hparams["testing"]: - # Testing - if not os.path.exists(hparams["output_wer_folder"]): - os.makedirs(hparams["output_wer_folder"]) - - asr_brain.hparams.output_wer_folder = os.path.join( - hparams["output_wer_folder"], f"wer_test.txt" - ) - asr_brain.evaluate( - test_data, - test_loader_kwargs=hparams["test_dataloader_opts"], - min_key="WER", - ) \ No newline at end of file + # Testing + asr_brain.evaluate( + test_data, + min_key="WER", + test_loader_kwargs=hparams["test_dataloader_options"], + ) \ No newline at end of file From e767ebceddcb9896fac56843268c374f520d1aab Mon Sep 17 00:00:00 2001 From: Anastasia Kuznetsova Date: Thu, 16 Jan 2025 13:35:39 -0500 Subject: [PATCH 54/61] adapt cv for offline extraction --- .../trial_i1bqja82.conf | 0 .../trial_64thsyjx.conf | 0 .../trial_6tilg99w.conf | 0 .../trial_gi7fd6od.conf | 0 .../CommonVoice/ASR/linear/hparams/train.yaml | 3 +- benchmarks/DASB/CommonVoice/ASR/train.py | 39 +++++++++++-------- 6 files changed, 24 insertions(+), 18 deletions(-) create mode 100644 benchmarks/DASB/ASR-cv-cy-dac-medium-linear-hopt_step1-v1gzh1pqrj/4d86aa9aacc99d94308c26df03af0023/trial_i1bqja82.conf create mode 100644 benchmarks/DASB/ASR-cv-cy-encoder-medium-linear-hopt_step1-v1ho85_kel/4d86aa9aacc99d94308c26df03af0023/trial_64thsyjx.conf create mode 100644 benchmarks/DASB/ASR-cv-cy-encoder-medium-linear-hopt_step1-v1ho85_kel/4d86aa9aacc99d94308c26df03af0023/trial_6tilg99w.conf create mode 100644 benchmarks/DASB/ASR-cv-cy-encoder-medium-linear-hopt_step1-v1ho85_kel/4d86aa9aacc99d94308c26df03af0023/trial_gi7fd6od.conf diff --git a/benchmarks/DASB/ASR-cv-cy-dac-medium-linear-hopt_step1-v1gzh1pqrj/4d86aa9aacc99d94308c26df03af0023/trial_i1bqja82.conf b/benchmarks/DASB/ASR-cv-cy-dac-medium-linear-hopt_step1-v1gzh1pqrj/4d86aa9aacc99d94308c26df03af0023/trial_i1bqja82.conf new file mode 100644 index 000000000..e69de29bb diff --git a/benchmarks/DASB/ASR-cv-cy-encoder-medium-linear-hopt_step1-v1ho85_kel/4d86aa9aacc99d94308c26df03af0023/trial_64thsyjx.conf b/benchmarks/DASB/ASR-cv-cy-encoder-medium-linear-hopt_step1-v1ho85_kel/4d86aa9aacc99d94308c26df03af0023/trial_64thsyjx.conf new file mode 100644 index 000000000..e69de29bb diff --git a/benchmarks/DASB/ASR-cv-cy-encoder-medium-linear-hopt_step1-v1ho85_kel/4d86aa9aacc99d94308c26df03af0023/trial_6tilg99w.conf b/benchmarks/DASB/ASR-cv-cy-encoder-medium-linear-hopt_step1-v1ho85_kel/4d86aa9aacc99d94308c26df03af0023/trial_6tilg99w.conf new file mode 100644 index 000000000..e69de29bb diff --git a/benchmarks/DASB/ASR-cv-cy-encoder-medium-linear-hopt_step1-v1ho85_kel/4d86aa9aacc99d94308c26df03af0023/trial_gi7fd6od.conf b/benchmarks/DASB/ASR-cv-cy-encoder-medium-linear-hopt_step1-v1ho85_kel/4d86aa9aacc99d94308c26df03af0023/trial_gi7fd6od.conf new file mode 100644 index 000000000..e69de29bb diff --git a/benchmarks/DASB/CommonVoice/ASR/linear/hparams/train.yaml b/benchmarks/DASB/CommonVoice/ASR/linear/hparams/train.yaml index 4c7f885a9..c2db750eb 100644 --- a/benchmarks/DASB/CommonVoice/ASR/linear/hparams/train.yaml +++ b/benchmarks/DASB/CommonVoice/ASR/linear/hparams/train.yaml @@ -28,6 +28,7 @@ train_csv: !ref /train.csv valid_csv: !ref /dev.csv test_csv: !ref /test.csv skip_prep: False # Skip data preparation +testing: True # If set to True, the test evlaution is done, otherwise skipped. tokens_folder: !PLACEHOLDER # Path to the folder where extracted tokens are saved. pretrain_embeddings_folder: none # Optional: If pretrain_embeddings is True, this should be set to the path where the pretrained embeddings are saved. @@ -111,7 +112,7 @@ dropout: 0.2 output_neurons: 100 # BPE parameters -token_type: bpe # ["unigram", "bpe", "char"] +token_type: char # ["unigram", "bpe", "char"] character_coverage: 1.0 blank_index: 0 unk_index: 1 diff --git a/benchmarks/DASB/CommonVoice/ASR/train.py b/benchmarks/DASB/CommonVoice/ASR/train.py index 2c8467c7a..134147776 100644 --- a/benchmarks/DASB/CommonVoice/ASR/train.py +++ b/benchmarks/DASB/CommonVoice/ASR/train.py @@ -33,11 +33,11 @@ def compute_forward(self, batch, stage): batch = batch.to(self.device) wavs, wav_lens = batch.sig p_tokens, _ = batch.speech_tokens - + embeddings = self.modules.discrete_embedding_layer(p_tokens) att_w = self.modules.attention_mlp(embeddings) feats = torch.matmul(att_w.transpose(2, -1), embeddings).squeeze(-2) - + if type(self.modules.encoder).__name__ == "VanillaNN": enc_out = self.modules.encoder(feats) @@ -46,7 +46,7 @@ def compute_forward(self, batch, stage): else: raise NotImplementedError - + p_tokens = None # output layer for ctc log-probabilities @@ -117,7 +117,9 @@ def on_stage_end(self, stage, stage_loss, epoch): valid_stats=stage_stats, ) self.checkpointer.save_and_keep_only( - meta={"WER": stage_stats["WER"]}, min_keys=["WER"], + meta={"WER": stage_stats["WER"], "epoch": epoch}, + min_keys=["WER"], + num_to_keep=self.hparams.avg_checkpoints, ) elif stage == sb.Stage.TEST: self.hparams.train_logger.log_stats( @@ -141,17 +143,18 @@ def init_optimizers(self): self.checkpointer.add_recoverable("modelopt", self.model_optimizer) - # Define custom data procedure def dataio_prepare(hparams, tokenizer): """This function prepares the datasets to be used in the brain class. - It also defines the data processing pipeline through user-defined functions.""" + It also defines the data processing pipeline through user-defined functions. + """ # 1. Define datasets data_folder = hparams["data_folder"] train_data = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=hparams["train_csv"], replacements={"data_root": data_folder}, + csv_path=hparams["train_csv"], + replacements={"data_root": data_folder}, ) if hparams["sorting"] == "ascending": @@ -181,13 +184,15 @@ def dataio_prepare(hparams, tokenizer): ) valid_data = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=hparams["valid_csv"], replacements={"data_root": data_folder}, + csv_path=hparams["valid_csv"], + replacements={"data_root": data_folder}, ) # We also sort the validation data so it is faster to validate valid_data = valid_data.filtered_sorted(sort_key="duration") test_data = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=hparams["test_csv"], replacements={"data_root": data_folder}, + csv_path=hparams["test_csv"], + replacements={"data_root": data_folder}, ) # We also sort the validation data so it is faster to validate @@ -214,7 +219,8 @@ def audio_pipeline(wav): info = torchaudio.info(wav) sig = sb.dataio.dataio.read_audio(wav) resampled = torchaudio.transforms.Resample( - info.sample_rate, hparams["sample_rate"], + info.sample_rate, + hparams["sample_rate"], )(sig) return resampled @@ -233,7 +239,8 @@ def text_pipeline(wrd): # 4. Set output: sb.dataio.dataset.set_output_keys( - datasets, ["id", "sig", "tokens", "speech_tokens"], + datasets, + ["id", "sig", "tokens", "speech_tokens"], ) return train_data, valid_data, test_data @@ -288,7 +295,6 @@ def text_pipeline(wrd): # Create the datasets objects as well as tokenization and encoding :-D train_data, valid_data, test_data = dataio_prepare(hparams, tokenizer) - # Use pretrained embeddings if hparams["pretrain_embeddings"]: tokens_loader = hparams["tokens_loader"] @@ -296,9 +302,7 @@ def text_pipeline(wrd): hparams["pretain_embeddings_folder"] ) if isinstance(hparams["num_codebooks"], int): - embs = embs[ - : hparams["num_codebooks"] * hparams["vocab_size"], - ] + embs = embs[: hparams["num_codebooks"] * hparams["vocab_size"],] # For discrete SSL, num_codebooks is a list used to determine which layers to use. # It is not sequential and can be, for example, [0, 1] or [1, 4]. elif isinstance(hparams["num_codebooks"], list): @@ -345,7 +349,8 @@ def text_pipeline(wrd): from speechbrain.decoders.ctc import CTCBeamSearcher test_searcher = CTCBeamSearcher( - **hparams["test_beam_search"], vocab_list=vocab_list, + **hparams["test_beam_search"], + vocab_list=vocab_list, ) # Training @@ -368,4 +373,4 @@ def text_pipeline(wrd): test_data, min_key="WER", test_loader_kwargs=hparams["test_dataloader_options"], - ) \ No newline at end of file + ) From eb2e6924006a1fbad5c99c4418f8840d0d2b8ad8 Mon Sep 17 00:00:00 2001 From: Anastasia Kuznetsova Date: Thu, 16 Jan 2025 13:38:26 -0500 Subject: [PATCH 55/61] adapt cv for offline extraction --- .../4d86aa9aacc99d94308c26df03af0023/trial_i1bqja82.conf | 0 .../4d86aa9aacc99d94308c26df03af0023/trial_64thsyjx.conf | 0 .../4d86aa9aacc99d94308c26df03af0023/trial_6tilg99w.conf | 0 .../4d86aa9aacc99d94308c26df03af0023/trial_gi7fd6od.conf | 0 4 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 benchmarks/DASB/ASR-cv-cy-dac-medium-linear-hopt_step1-v1gzh1pqrj/4d86aa9aacc99d94308c26df03af0023/trial_i1bqja82.conf delete mode 100644 benchmarks/DASB/ASR-cv-cy-encoder-medium-linear-hopt_step1-v1ho85_kel/4d86aa9aacc99d94308c26df03af0023/trial_64thsyjx.conf delete mode 100644 benchmarks/DASB/ASR-cv-cy-encoder-medium-linear-hopt_step1-v1ho85_kel/4d86aa9aacc99d94308c26df03af0023/trial_6tilg99w.conf delete mode 100644 benchmarks/DASB/ASR-cv-cy-encoder-medium-linear-hopt_step1-v1ho85_kel/4d86aa9aacc99d94308c26df03af0023/trial_gi7fd6od.conf diff --git a/benchmarks/DASB/ASR-cv-cy-dac-medium-linear-hopt_step1-v1gzh1pqrj/4d86aa9aacc99d94308c26df03af0023/trial_i1bqja82.conf b/benchmarks/DASB/ASR-cv-cy-dac-medium-linear-hopt_step1-v1gzh1pqrj/4d86aa9aacc99d94308c26df03af0023/trial_i1bqja82.conf deleted file mode 100644 index e69de29bb..000000000 diff --git a/benchmarks/DASB/ASR-cv-cy-encoder-medium-linear-hopt_step1-v1ho85_kel/4d86aa9aacc99d94308c26df03af0023/trial_64thsyjx.conf b/benchmarks/DASB/ASR-cv-cy-encoder-medium-linear-hopt_step1-v1ho85_kel/4d86aa9aacc99d94308c26df03af0023/trial_64thsyjx.conf deleted file mode 100644 index e69de29bb..000000000 diff --git a/benchmarks/DASB/ASR-cv-cy-encoder-medium-linear-hopt_step1-v1ho85_kel/4d86aa9aacc99d94308c26df03af0023/trial_6tilg99w.conf b/benchmarks/DASB/ASR-cv-cy-encoder-medium-linear-hopt_step1-v1ho85_kel/4d86aa9aacc99d94308c26df03af0023/trial_6tilg99w.conf deleted file mode 100644 index e69de29bb..000000000 diff --git a/benchmarks/DASB/ASR-cv-cy-encoder-medium-linear-hopt_step1-v1ho85_kel/4d86aa9aacc99d94308c26df03af0023/trial_gi7fd6od.conf b/benchmarks/DASB/ASR-cv-cy-encoder-medium-linear-hopt_step1-v1ho85_kel/4d86aa9aacc99d94308c26df03af0023/trial_gi7fd6od.conf deleted file mode 100644 index e69de29bb..000000000 From b1d08dd40548c623f719507c5e39f89d81926024 Mon Sep 17 00:00:00 2001 From: Anastasia Kuznetsova Date: Sun, 19 Jan 2025 18:11:09 -0500 Subject: [PATCH 56/61] add lstm config --- .../CommonVoice/ASR/LSTM/hparams/train.yaml | 202 ++++++++---------- .../CommonVoice/ASR/linear/hparams/train.yaml | 2 +- 2 files changed, 93 insertions(+), 111 deletions(-) diff --git a/benchmarks/DASB/CommonVoice/ASR/LSTM/hparams/train.yaml b/benchmarks/DASB/CommonVoice/ASR/LSTM/hparams/train.yaml index d6644b574..2e7237ee0 100644 --- a/benchmarks/DASB/CommonVoice/ASR/LSTM/hparams/train.yaml +++ b/benchmarks/DASB/CommonVoice/ASR/LSTM/hparams/train.yaml @@ -1,28 +1,26 @@ -# ############################################################################ -# Model: E2E ASR with CTC -# Auido Tokenizer: Encodec -# Encoder: LSTM Encoder -# Decoder: CTC beam searcher and greedy searcher -# Tokens: character -# Training: Librispeech 960h -# Authors: -# - Pooneh Mousavi 2024 -# - Jarod Duret 2024 -# ############################################################################ -# Seed needs to be set at top of yaml, before objects with parameters are made +# ################################ +# Script for training an ASR model evaluating an SSL representation +# model on one language from the CommonVoice dataset. A SentencePiece tokenizer +# with number of tokens equal to is learned in a first phase +# on the considered language. +# +# Authors +# * Pooneh Mousavi 2024 +# ################################ +# Seed needs to be set at top of yaml, before objects with parameters are made seed: 1986 __set_seed: !apply:torch.manual_seed [!ref ] -run_name: !PLACEHOLDER -output_folder: !ref results// -output_wer_folder: !ref /wer.txt +language: cy # use 'cy' for Welsh and 'eu' for Basque +output_folder: !ref results/CommonVoice/speech_tokenizer// +test_wer_file: !ref /wer_test.txt save_folder: !ref /save train_log: !ref /train_log.txt -testing: True # If set to True, the test evlaution is done, otherwise skipped. +cached_data_folder: cache/CommonVoice//LSTM/speech_tokenizer/ +run_name: !PLACEHOLDER # Data files data_folder: !PLACEHOLDER # e.g, /local/cv-corpus-11.0-2022-09-21/ -cached_data_folder: !PLACEHOLDER # e.g., path/to/cache train_tsv_file: !ref /train.tsv # Standard CommonVoice .tsv files dev_tsv_file: !ref /dev.tsv # Standard CommonVoice .tsv files test_tsv_file: !ref /test.tsv # Standard CommonVoice .tsv files @@ -31,21 +29,23 @@ train_csv: !ref /train.csv valid_csv: !ref /dev.csv test_csv: !ref /test.csv skip_prep: False # Skip data preparation -language: cy # use 'cy' for Welsh and 'eu' for Basque +testing: True # If set to True, the test evlaution is done, otherwise skipped. tokens_folder: !PLACEHOLDER # Path to the folder where extracted tokens are saved. -pretrain_embeddings_folder: none # Optional: If pretrain_embeddings is True, this should be set to the path where the pretrained embeddings are saved. +pretrain_embeddings_folder: non avoid_if_longer_than: 10.0 -####################### Training Parameters #################################### +# Training parameters number_of_epochs: 20 + batch_size_exponent: 4 # @orion_step1: --batch_size_exponent~"uniform(2, 4,discrete=True)" batch_size: !ref 2 ** test_batch_size: 1 grad_accumulation_factor: 2 max_grad_norm: 5.0 + sorting: descending #random num_workers: 8 loss_reduction: batchmean @@ -53,10 +53,10 @@ precision: fp32 # bf16, fp16 or fp32loss_reduction: batchmean valid_search_interval: 1 avg_checkpoints: 10 # Number of checkpoints to average for evaluation cache_size: 1.e+10 +token_type: bpe # ["unigram", "bpe", "char"] +character_coverage: 1.0 -lr_model: 0.00001 # @orion_step1: --lr_model~"loguniform(0.00001,0.5)" -weight_decay: 0.0005 - +lr_model: 0.0002 # @orion_step1: --lr_model~"loguniform(0.00001,0.5)" # Training parameters dynamic_batching: True @@ -81,138 +81,121 @@ dynamic_batch_sampler_val: batch_ordering: !ref max_batch_ex: !ref + # Dataloader options train_dataloader_opts: batch_size: !ref - shuffle: True - num_workers: !ref +dataloader_options: + batch_size: !ref + num_workers: 4 +test_dataloader_options: + batch_size: !ref + num_workers: 4 + valid_dataloader_opts: - batch_size: !ref + batch_size: !ref -test_dataloader_opts: - batch_size: !ref +# Model parameters + +activation: !name:torch.nn.Sigmoid +dnn_layers: 1 +dnn_neurons: 768 +freeze_encoder: True + +# Outputs +output_neurons: 100 # BPE size, index(blank/eos/bos) = 0 + +# Decoding parameters +blank_index: 0 +unk_index: 1 +test_beam_search: + beam_size: 143 + topk: 1 + blank_index: !ref + space_token: ' ' # make sure this is the same as the one used in the tokenizer + beam_prune_logp: -12.0 + token_prune_min_logp: -1.2 + prune_history: True + alpha: 0.8 + beta: 1.2 + # can be downloaded from here https://www.openslr.org/11/ or trained with kenLM + # It can either be a .bin or .arpa ; note: .arpa is much slower at loading + # If you don't want to use an LM, comment it out or set it to null + kenlm_model_path: null -####################### Model parameters ########################### -# Tokenizer parameters -# These parameters should be set according to the tokenizer used to extract tokens saved in . +### Config for Tokenizer vocab_size: 1024 -num_codebooks: 24 -sample_rate: 24000 +num_codebooks: 2 +sample_rate: 16000 # Feature parameters encoder_dim: 1024 -# If set to True, encoder_dim should match the dimension of the tokenizer. For Encodec, it is 128. -pretrain_embeddings: False -freeze_embedding: False -# LSTM -activation: !name:torch.nn.Sigmoid -dnn_layers: 2 # @orion_step1: --dnn_layers~"uniform(1, 4,discrete=True)" -dnn_neurons: 1024 -dropout: 0.2 -output_neurons: 31 - -# BPE parameters -# BPE parameters -token_type: char # ["unigram", "bpe", "char"] -character_coverage: 1.0 -blank_index: 0 -bos_index: 1 -eos_index: 2 - -# Decoding parameters -beam_size: 100 -beam_prune_logp: -12.0 -token_prune_min_logp: -1.2 -prune_history: False - -############################## models ################################ -tokens_loader: !new:utils.tokens.TokensLoader - data_path: !ref +# Functions and classes +# +epoch_counter: !new:speechbrain.utils.epoch_loop.EpochCounter + limit: !ref -discrete_embedding_layer: !new:model.custom_model.Discrete_EmbeddingLayer +# Modules +discrete_embedding_layer: !new:custom_model.Discrete_EmbeddingLayer num_codebooks: !ref vocab_size: !ref emb_dim: !ref - # hidden_dim: !ref - freeze: !ref - init: !ref -attention_mlp: !new:model.custom_model.AttentionMLP +attention_mlp: !new:custom_model.AttentionMLP input_dim: !ref hidden_dim: !ref -encoder: !new:speechbrain.nnet.RNN.LSTM + +enc: !new:speechbrain.nnet.RNN.LSTM input_shape: [Null, Null, !ref ] - num_layers: !ref + num_layers: 2 bidirectional: True - dropout: !ref - hidden_size: !ref + dropout: 0.2 + hidden_size: 1024 ctc_lin: !new:speechbrain.nnet.linear.Linear input_size: 2048 n_neurons: !ref +log_softmax: !new:speechbrain.nnet.activations.Softmax + apply_log: True + +ctc_cost: !name:speechbrain.nnet.losses.ctc_loss + blank_index: !ref + modules: - encoder: !ref + enc: !ref ctc_lin: !ref attention_mlp: !ref - # tokenizer: !ref discrete_embedding_layer: !ref - model: !new:torch.nn.ModuleList - - [!ref , !ref , !ref , !ref ] - -####################### Decoding & optimiser ########################### -# Decoding parameters -test_beam_search: - blank_index: !ref - beam_size: !ref - beam_prune_logp: !ref - token_prune_min_logp: !ref - prune_history: !ref - alpha: 0.8 - beta: 1.2 - -ctc_cost: !name:speechbrain.nnet.losses.ctc_loss - blank_index: !ref - + - [!ref , !ref , !ref , !ref ] -log_softmax: !new:speechbrain.nnet.activations.Softmax - apply_log: True +model_opt_class: !name:torch.optim.Adam + lr: !ref -scheduler: !new:speechbrain.nnet.schedulers.NewBobScheduler - initial_value: !ref +lr_annealing_model: !new:speechbrain.nnet.schedulers.NewBobScheduler + initial_value: !ref improvement_threshold: 0.0025 annealing_factor: 0.8 patient: 0 -#scheduler: !new:speechbrain.nnet.schedulers.LinearNoamScheduler -# lr_initial: !ref -# n_warmup_steps: 3000 -# n_keep_steps: 10 +label_encoder: !new:speechbrain.dataio.encoder.CTCTextEncoder -model_opt_class: !name:torch.optim.AdamW - lr: !ref - betas: (0.9, 0.98) - eps: 0.000000001 - weight_decay: !ref - -############################## Logging and Pretrainer ########################## checkpointer: !new:speechbrain.utils.checkpoints.Checkpointer checkpoints_dir: !ref recoverables: model: !ref - scheduler: !ref + scheduler_model: !ref + attention_mlp: !ref + codec: !ref + discrete_embedding_layer: !ref counter: !ref - - -# Functions and classes -epoch_counter: !new:speechbrain.utils.epoch_loop.EpochCounter - limit: !ref + tokenizer: !ref train_logger: !new:speechbrain.utils.train_logger.FileTrainLogger save_file: !ref @@ -221,4 +204,3 @@ error_rate_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats cer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats split_tokens: True -wer_computer: !name:speechbrain.utils.metric_stats.ErrorRateStats diff --git a/benchmarks/DASB/CommonVoice/ASR/linear/hparams/train.yaml b/benchmarks/DASB/CommonVoice/ASR/linear/hparams/train.yaml index c2db750eb..c81c4559b 100644 --- a/benchmarks/DASB/CommonVoice/ASR/linear/hparams/train.yaml +++ b/benchmarks/DASB/CommonVoice/ASR/linear/hparams/train.yaml @@ -112,7 +112,7 @@ dropout: 0.2 output_neurons: 100 # BPE parameters -token_type: char # ["unigram", "bpe", "char"] +token_type: bpe # ["unigram", "bpe", "char"] character_coverage: 1.0 blank_index: 0 unk_index: 1 From 6a094d2a17910b798405b4acc601b0c1ede6ef9d Mon Sep 17 00:00:00 2001 From: Anastasia Kuznetsova Date: Sun, 19 Jan 2025 18:29:15 -0500 Subject: [PATCH 57/61] fix lr in lstm config --- benchmarks/DASB/CommonVoice/ASR/LSTM/hparams/train.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks/DASB/CommonVoice/ASR/LSTM/hparams/train.yaml b/benchmarks/DASB/CommonVoice/ASR/LSTM/hparams/train.yaml index 2e7237ee0..b2e8751c2 100644 --- a/benchmarks/DASB/CommonVoice/ASR/LSTM/hparams/train.yaml +++ b/benchmarks/DASB/CommonVoice/ASR/LSTM/hparams/train.yaml @@ -176,10 +176,10 @@ model: !new:torch.nn.ModuleList - [!ref , !ref , !ref , !ref ] model_opt_class: !name:torch.optim.Adam - lr: !ref + lr: !ref lr_annealing_model: !new:speechbrain.nnet.schedulers.NewBobScheduler - initial_value: !ref + initial_value: !ref improvement_threshold: 0.0025 annealing_factor: 0.8 patient: 0 From 6b1431631be1627b45558277728737180d834fdc Mon Sep 17 00:00:00 2001 From: Anastasia Kuznetsova Date: Sun, 19 Jan 2025 18:30:36 -0500 Subject: [PATCH 58/61] fix lr in lstm config --- benchmarks/DASB/CommonVoice/ASR/LSTM/hparams/train.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/benchmarks/DASB/CommonVoice/ASR/LSTM/hparams/train.yaml b/benchmarks/DASB/CommonVoice/ASR/LSTM/hparams/train.yaml index b2e8751c2..a0c0600fd 100644 --- a/benchmarks/DASB/CommonVoice/ASR/LSTM/hparams/train.yaml +++ b/benchmarks/DASB/CommonVoice/ASR/LSTM/hparams/train.yaml @@ -192,7 +192,6 @@ checkpointer: !new:speechbrain.utils.checkpoints.Checkpointer model: !ref scheduler_model: !ref attention_mlp: !ref - codec: !ref discrete_embedding_layer: !ref counter: !ref tokenizer: !ref From 768b9a0fd35b2df0d98a04d080be8bce888a427d Mon Sep 17 00:00:00 2001 From: Anastasia Kuznetsova Date: Mon, 20 Jan 2025 12:39:42 -0500 Subject: [PATCH 59/61] upd .gitignore --- .gitignore | 2 ++ .../DASB/CommonVoice/extraction/hparams/discrete_ssl.yaml | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 6606d1085..1e0667fa7 100644 --- a/.gitignore +++ b/.gitignore @@ -44,6 +44,8 @@ htmlcov/ .coverage .coverage.* .cache +cache/ +ASR-cv* nosetests.xml coverage.xml *.cover diff --git a/benchmarks/DASB/CommonVoice/extraction/hparams/discrete_ssl.yaml b/benchmarks/DASB/CommonVoice/extraction/hparams/discrete_ssl.yaml index 12fde3a2a..cb18a37d0 100644 --- a/benchmarks/DASB/CommonVoice/extraction/hparams/discrete_ssl.yaml +++ b/benchmarks/DASB/CommonVoice/extraction/hparams/discrete_ssl.yaml @@ -25,7 +25,7 @@ convert_to_wav: False # longer sentences certainly correspond to "open microphones". avoid_if_longer_than: 10.0 -batch_size: 8 +batch_size: 1 num_workers: 8 src_key: wav id_key: id From a1ca0ca02e48c8a1453130be0696e4c0e4297b4a Mon Sep 17 00:00:00 2001 From: Anastasia Kuznetsova Date: Mon, 20 Jan 2025 15:17:53 -0500 Subject: [PATCH 60/61] fix filtering in CV extract --- .../DASB/CommonVoice/extraction/extract.py | 43 +++++++++++++------ .../extraction/hparams/discrete_ssl.yaml | 15 ++++--- speechbrain | 2 +- 3 files changed, 39 insertions(+), 21 deletions(-) diff --git a/benchmarks/DASB/CommonVoice/extraction/extract.py b/benchmarks/DASB/CommonVoice/extraction/extract.py index de87951e4..e2c927cb4 100644 --- a/benchmarks/DASB/CommonVoice/extraction/extract.py +++ b/benchmarks/DASB/CommonVoice/extraction/extract.py @@ -44,10 +44,10 @@ prepare_common_voice, kwargs={ "data_folder": hparams["data_folder"], - "save_folder": hparams["output_folder"], - "train_tsv_file": hparams["train_tsv"], - "dev_tsv_file": hparams["dev_tsv"], - "test_tsv_file": hparams["test_tsv"], + "save_folder": hparams["save_folder"], + "train_tsv_file": hparams["train_tsv_file"], + "dev_tsv_file": hparams["dev_tsv_file"], + "test_tsv_file": hparams["test_tsv_file"], "accented_letters": hparams["accented_letters"], "language": hparams["language"], "skip_prep": hparams["skip_prep"], @@ -56,23 +56,40 @@ tokens_extractor = hparams["tokens_extractor"] data_folder = hparams["data_folder"] - datasets = [] - for split in ["train", "dev", "test"]: - csv_path = hparams["output_folder"] +f"/{split}.csv" - name = pl.Path(csv_path).stem - dataset = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=csv_path, + + train_data = sb.dataio.dataset.DynamicItemDataset.from_csv( + csv_path=hparams["train_csv"], + replacements={"data_root": data_folder}, + ) + + train_data = train_data.filtered_sorted( + sort_key="duration", + key_max_value={"duration": hparams["avoid_if_longer_than"]}, ) - datasets.append(dataset) + # when sorting do not shuffle in dataloader ! otherwise is pointless + hparams["dataloader_options"]["shuffle"] = False + + valid_data = sb.dataio.dataset.DynamicItemDataset.from_csv( + csv_path=hparams["valid_csv"], + replacements={"data_root": data_folder}, + ) + valid_data = valid_data.filtered_sorted(sort_key="duration") + + test_data = sb.dataio.dataset.DynamicItemDataset.from_csv( + csv_path=hparams["test_csv"], + replacements={"data_root": data_folder}, + ) + test_data = test_data.filtered_sorted(sort_key="duration") + datasets = [train_data, valid_data, test_data] - merged_data = { + merged_dataset = { key: value for dataset in datasets for key, value in dataset.data.items() } - merged_dataset = DynamicItemDataset(merged_data) save_folder = pl.Path(hparams["save_folder"]) + logger.info("Extracting dataset tokens ...") tokens_extractor.extract_tokens( merged_dataset, diff --git a/benchmarks/DASB/CommonVoice/extraction/hparams/discrete_ssl.yaml b/benchmarks/DASB/CommonVoice/extraction/hparams/discrete_ssl.yaml index cb18a37d0..ae9cb618f 100644 --- a/benchmarks/DASB/CommonVoice/extraction/hparams/discrete_ssl.yaml +++ b/benchmarks/DASB/CommonVoice/extraction/hparams/discrete_ssl.yaml @@ -37,11 +37,12 @@ dataloader_opts: num_workers: !ref ### Configuration for discrete SSL model -# | SSL Model | HF Encoder | K-Means Dataset | K-Means Size | SSL Layers | Vocoder Model | -# |------------|----------------------------------------|-----------------|--------------|----------------------|------------------------------------------| -# | WavLM | microsoft/wavlm-large | LibriSpeech960 | 1000 | 1, 3, 7, 12, 18, 23 | speechbrain/hifigan-wavlm-k1000-LibriTTS | -# | HuBERT | facebook/hubert-large-ll60k | LibriSpeech960 | 1000 | 1, 3, 7, 12, 18, 23 | WIP | -# | Wav2Vec2 | facebook/wav2vec2-large-960h-lv60-self | LibriSpeech960 | 1000 | 1, 3, 7, 12, 18, 23 | WIP | +# | SSL Model | HF Encoder | K-Means Dataset | K-Means Size | SSL Layers | Vocoder Model | +# |------------|----------------------------------------|-----------------|--------------|----------------------|---------------------------------------------| +# | WavLM | microsoft/wavlm-large | LibriSpeech960 | 1000 | 1, 3, 7, 12, 18, 23 | speechbrain/hifigan-wavlm-k1000-LibriTTS | +# | HuBERT | facebook/hubert-large-ll60k | LibriSpeech960 | 1000 | 1, 3, 7, 12, 18, 23 | speechbrain/hifigan-hubert-k1000-LibriTTS | +# | Wav2Vec2 | facebook/wav2vec2-large | LibriSpeech960 | 1000 | 1, 3, 7, 12, 18, 23 | speechbrain/hifigan-wav2vec2-k1000-LibriTTS | + # ssl_model_type: hubert, wavlm, wav2vec2 # ssl_hub: facebook/hubert-large-ll60k, microsoft/wavlm-large, facebook/wav2vec2-large @@ -49,8 +50,8 @@ ssl_model_type: hubert ssl_hub: facebook/hubert-large-ll60k ssl_folder: !ref /ssl_checkpoint kmeans_cache_dir: !ref /kmeans_checkpoint -kmeans_dataset: LibriSpeech -vocoder_repo_id: null +kmeans_dataset: LibriSpeech960 +vocoder_repo_id: speechbrain/hifigan-hubert-k1000-LibriTTS freeze_ssl: True freeze_feature_extractor: True vocab_size: 1000 diff --git a/speechbrain b/speechbrain index e602161f4..ecb34d8fa 160000 --- a/speechbrain +++ b/speechbrain @@ -1 +1 @@ -Subproject commit e602161f4d305e13a26fc71b7dbe4a4cfeaa8847 +Subproject commit ecb34d8fa4fb0aa8d9888e33478ec54064f25ff8 From 8662a2a0447bfa71ce2cd8938f7098b1f3e697dd Mon Sep 17 00:00:00 2001 From: Anastasia Kuznetsova Date: Mon, 20 Jan 2025 19:11:26 -0500 Subject: [PATCH 61/61] adjust cv prepare pipeline --- .../extraction/common_voice_prepare.py | 204 ++++++++++++++---- .../DASB/CommonVoice/extraction/extract.py | 4 +- .../extraction/hparams/encodec.yaml | 11 +- .../extraction/hparams/speech_tokenizer.yaml | 6 +- benchmarks/DASB/utils/tokens.py | 2 +- 5 files changed, 179 insertions(+), 48 deletions(-) diff --git a/benchmarks/DASB/CommonVoice/extraction/common_voice_prepare.py b/benchmarks/DASB/CommonVoice/extraction/common_voice_prepare.py index 196d144d7..5b0c7c875 100644 --- a/benchmarks/DASB/CommonVoice/extraction/common_voice_prepare.py +++ b/benchmarks/DASB/CommonVoice/extraction/common_voice_prepare.py @@ -3,24 +3,28 @@ Download: https://commonvoice.mozilla.org/en/datasets Author ------ -Titouan Parcollet +Titouan Parcollet 2021, 2022, 2024 Luca Della Libera 2022 Pooneh Mousavi 2022 Salima Mdhaffar 2023 +Adel Moumen 2024 """ -from dataclasses import dataclass -import os import csv +import functools +import os import re -import logging import unicodedata -import functools +from dataclasses import dataclass -from speechbrain.utils.parallel import parallel_map from speechbrain.dataio.dataio import read_audio_info +from speechbrain.utils.logger import get_logger +from speechbrain.utils.parallel import parallel_map + +logger = get_logger(__name__) -logger = logging.getLogger(__name__) +VERBOSE = False +SAMPLING_RATE = 16_000 def prepare_common_voice( @@ -32,6 +36,7 @@ def prepare_common_voice( accented_letters=False, language="en", skip_prep=False, + convert_to_wav=False, ): """ Prepares the csv files for the Mozilla Common Voice dataset. @@ -57,6 +62,17 @@ def prepare_common_voice( Specify the language for text normalization. skip_prep: bool If True, skip data preparation. + convert_to_wav: bool + If True, `.mp3` files are converted (duplicated) to uncompressed `.wav`. + Uncompressed `wav`s can be much faster to decode than MP3, at the cost + of much higher disk usage and bandwidth. This might be useful if you are + CPU-limited in workers during training. + This invokes the `ffmpeg` commandline, so ffmpeg must be installed. + + Returns + ------- + None + Example ------- >>> from recipes.CommonVoice.common_voice_prepare import prepare_common_voice @@ -98,17 +114,15 @@ def prepare_common_voice( test_tsv_file = test_tsv_file # Setting the save folder - if not os.path.exists(save_folder): - os.makedirs(save_folder) + os.makedirs(save_folder, exist_ok=True) - # Setting ouput files + # Setting output files save_csv_train = save_folder + "/train.csv" save_csv_dev = save_folder + "/dev.csv" save_csv_test = save_folder + "/test.csv" # If csv already exists, we skip the data preparation if skip(save_csv_train, save_csv_dev, save_csv_test): - msg = "%s already exists, skipping data preparation!" % (save_csv_train) logger.info(msg) @@ -129,7 +143,12 @@ def prepare_common_voice( ) for tsv_file, save_csv in file_pairs: create_csv( - tsv_file, save_csv, data_folder, accented_letters, language, + convert_to_wav, + tsv_file, + save_csv, + data_folder, + accented_letters, + language, ) @@ -137,6 +156,16 @@ def skip(save_csv_train, save_csv_dev, save_csv_test): """ Detects if the Common Voice data preparation has been already done. If the preparation has been done, we can skip it. + + Arguments + --------- + save_csv_train : str + The train csv file + save_csv_dev : str + The dev csv file + save_csv_test : str + The test csv file + Returns ------- bool @@ -161,23 +190,60 @@ def skip(save_csv_train, save_csv_dev, save_csv_test): class CVRow: snt_id: str duration: float - mp3_path: str + audio_path: str spk_id: str words: str -def process_line(line, data_folder, language, accented_letters): +def process_line( + line, convert_to_wav, data_folder, language, accented_letters, header_map +): + """Process a line of CommonVoice tsv file. + + Arguments + --------- + line : str + A line of the CommonVoice tsv file. + convert_to_wav : bool + If True, `.mp3` files are converted (duplicated) to uncompressed `.wav`. + Uncompressed `wav`s can be much faster to decode than MP3, at the cost + of much higher disk usage and bandwidth. This might be useful if you are + CPU-limited in workers during training. + This invokes the `ffmpeg` commandline, so ffmpeg must be installed. + data_folder : str + Path to the CommonVoice dataset. + language : str + Language code, e.g. "en" + accented_letters : bool + Defines if accented letters will be kept as individual letters or + transformed to the closest non-accented letters. + header_map : Dict[str, int] + Map from column name to column indices + + Returns + ------- + CVRow + A dataclass containing the information about the line. + """ + + columns = line.strip().split("\t") + spk_id = columns[header_map["client_id"]] + audio_path_filename = columns[header_map["path"]] + words = columns[header_map["sentence"]] + # Path is at indice 1 in Common Voice tsv files. And .mp3 files # are located in datasets/lang/clips/ - mp3_path = data_folder + "/clips/" + line.split("\t")[1] + audio_path = data_folder + "/clips/" + audio_path_filename + + if convert_to_wav: + audio_path = convert_mp3_to_wav(audio_path) - file_name = mp3_path.split(".")[-2].split("/")[-1] - spk_id = line.split("\t")[0] + file_name = audio_path.split(".")[-2].split("/")[-1] snt_id = file_name # Reading the signal (to retrieve duration in seconds) - if os.path.isfile(mp3_path): - info = read_audio_info(mp3_path) + if os.path.isfile(audio_path): + info = read_audio_info(audio_path) else: msg = "\tError loading: %s" % (str(len(file_name))) logger.info(msg) @@ -186,7 +252,6 @@ def process_line(line, data_folder, language, accented_letters): duration = info.num_frames / info.sample_rate # Getting transcript - words = line.split("\t")[3] # Unicode Normalization words = unicode_normalisation(words) @@ -219,26 +284,39 @@ def process_line(line, data_folder, language, accented_letters): return None # Composition of the csv_line - return CVRow(snt_id, duration, mp3_path, spk_id, words) + return CVRow(snt_id, duration, audio_path, spk_id, words) def create_csv( - orig_tsv_file, csv_file, data_folder, accented_letters=False, language="en" + convert_to_wav, + orig_tsv_file, + csv_file, + data_folder, + accented_letters=False, + language="en", ): """ Creates the csv file given a list of wav files. + Arguments --------- + convert_to_wav : bool + If True, `.mp3` files are converted (duplicated) to uncompressed `.wav`. + Uncompressed `wav`s can be much faster to decode than MP3, at the cost + of much higher disk usage and bandwidth. This might be useful if you are + CPU-limited in workers during training. + This invokes the `ffmpeg` commandline, so ffmpeg must be installed. orig_tsv_file : str Path to the Common Voice tsv file (standard file). + csv_file : str + New csv file. data_folder : str Path of the CommonVoice dataset. accented_letters : bool, optional Defines if accented letters will be kept as individual letters or transformed to the closest non-accented letters. - Returns - ------- - None + language : str + Language code, e.g. "en" """ # Check if the given files exists @@ -248,8 +326,15 @@ def create_csv( raise FileNotFoundError(msg) # We load and skip the header - loaded_csv = open(orig_tsv_file, "r").readlines()[1:] - nb_samples = len(loaded_csv) + csv_lines = open(orig_tsv_file, "r", encoding="utf-8").readlines() + header_line = csv_lines[0] + csv_data_lines = csv_lines[1:] + nb_samples = len(csv_data_lines) + + header_map = { + column_name: index + for index, column_name in enumerate(header_line.split("\t")) + } msg = "Preparing CSV files for %s samples ..." % (str(nb_samples)) logger.info(msg) @@ -263,22 +348,24 @@ def create_csv( line_processor = functools.partial( process_line, + convert_to_wav=convert_to_wav, data_folder=data_folder, language=language, accented_letters=accented_letters, + header_map=header_map, ) # Stream into a .tmp file, and rename it to the real path at the end. csv_file_tmp = csv_file + ".tmp" - with open(csv_file_tmp, mode="w", encoding="utf-8") as csv_f: + with open(csv_file_tmp, mode="w", newline="", encoding="utf-8") as csv_f: csv_writer = csv.writer( csv_f, delimiter=",", quotechar='"', quoting=csv.QUOTE_MINIMAL ) csv_writer.writerow(["ID", "duration", "wav", "spk_id", "wrd"]) - for row in parallel_map(line_processor, loaded_csv): + for row in parallel_map(line_processor, csv_data_lines): if row is None: continue @@ -287,7 +374,7 @@ def create_csv( [ row.snt_id, str(row.duration), - row.mp3_path, + row.audio_path, row.spk_id, row.words, ] @@ -298,12 +385,43 @@ def create_csv( # Final prints msg = "%s successfully created!" % (csv_file) logger.info(msg) - msg = "Number of samples: %s " % (str(len(loaded_csv))) + msg = "Number of samples: %s " % (str(len(csv_data_lines))) logger.info(msg) msg = "Total duration: %s Hours" % (str(round(total_duration / 3600, 2))) logger.info(msg) +def convert_mp3_to_wav(audio_mp3_path): + """Convert an mp3 file to a wav file. + + Parameters + ---------- + audio_mp3_path : str + The path to the opus file to be converted. + + Returns + ------- + str + The path to the converted wav file. + + Raises + ------ + subprocess.CalledProcessError + If the conversion process fails. + """ + audio_wav_path = audio_mp3_path.replace(".mp3", ".wav") + + if VERBOSE: + os.system( + f"ffmpeg -y -i {audio_mp3_path} -ac 1 -ar {SAMPLING_RATE} {audio_wav_path}" + ) + else: + os.system( + f"ffmpeg -y -i {audio_mp3_path} -ac 1 -ar {SAMPLING_RATE} {audio_wav_path} > /dev/null 2>&1" + ) + return audio_wav_path + + def language_specific_preprocess(language, words): # !! Language specific cleaning !! # Important: feel free to specify the text normalization @@ -327,9 +445,7 @@ def language_specific_preprocess(language, words): ) # replace 0000SS0000 back to ß as its initial presence in the corpus elif language == "fr": # SM - words = re.sub( - "[^’'A-Za-z0-9À-ÖØ-öø-ÿЀ-ӿéæœâçèàûî]+", " ", words - ) + words = re.sub("[^’'A-Za-z0-9À-ÖØ-öø-ÿЀ-ӿéæœâçèàûî]+", " ", words) words = words.replace("’", "'") words = words.replace("é", "é") words = words.replace("æ", "ae") @@ -374,13 +490,15 @@ def language_specific_preprocess(language, words): words = words.replace("Z'", "Z") words = words.replace("O'", "O") words = words.replace("X'", "X") - words = words.replace("AUJOURD' HUI", "AUJOURD'HUI") + words = words.replace( + "AUJOURD' HUI", "AUJOURD'HUI" # cspell:disable-line + ) elif language == "ar": HAMZA = "\u0621" ALEF_MADDA = "\u0622" ALEF_HAMZA_ABOVE = "\u0623" letters = ( - "ابتةثجحخدذرزژشسصضطظعغفقكلمنهويىءآأؤإئ" + "ابتةثجحخدذرزژشسصضطظعغفقكلمنهويىءآأؤإئ" # cspell:disable-line + HAMZA + ALEF_MADDA + ALEF_HAMZA_ABOVE @@ -391,7 +509,7 @@ def language_specific_preprocess(language, words): ALEF_MADDA = "\u0622" ALEF_HAMZA_ABOVE = "\u0623" letters = ( - "ابپتةثجحخچدذرزژسشصضطظعغفقگکلمنهویىءآأؤإئ" + "ابپتةثجحخچدذرزژسشصضطظعغفقگکلمنهویىءآأؤإئ" # cspell:disable-line + HAMZA + ALEF_MADDA + ALEF_HAMZA_ABOVE @@ -410,6 +528,7 @@ def galc(w): elif language == "es": # Fix the following error in dataset large: # KeyError: 'The item En noviembre lanzaron Queen Elizabeth , coproducida por Foreign Noi$e . requires replacements which were not supplied.' + # cspell:ignore noviembre lanzaron coproducida words = words.replace("$", "s") return words @@ -418,9 +537,12 @@ def check_commonvoice_folders(data_folder): """ Check if the data folder actually contains the Common Voice dataset. If not, raises an error. - Returns - ------- - None + + Arguments + --------- + data_folder : str + The folder containing the data to check + Raises ------ FileNotFoundError @@ -446,4 +568,4 @@ def strip_accents(text): .encode("ascii", "ignore") .decode("utf-8") ) - return str(text) + return str(text) \ No newline at end of file diff --git a/benchmarks/DASB/CommonVoice/extraction/extract.py b/benchmarks/DASB/CommonVoice/extraction/extract.py index e2c927cb4..a4cfccfd1 100644 --- a/benchmarks/DASB/CommonVoice/extraction/extract.py +++ b/benchmarks/DASB/CommonVoice/extraction/extract.py @@ -67,10 +67,10 @@ key_max_value={"duration": hparams["avoid_if_longer_than"]}, ) # when sorting do not shuffle in dataloader ! otherwise is pointless - hparams["dataloader_options"]["shuffle"] = False + hparams["dataloader_opts"]["shuffle"] = False valid_data = sb.dataio.dataset.DynamicItemDataset.from_csv( - csv_path=hparams["valid_csv"], + csv_path=hparams["dev_csv"], replacements={"data_root": data_folder}, ) valid_data = valid_data.filtered_sorted(sort_key="duration") diff --git a/benchmarks/DASB/CommonVoice/extraction/hparams/encodec.yaml b/benchmarks/DASB/CommonVoice/extraction/hparams/encodec.yaml index 179981d34..707a2f43f 100644 --- a/benchmarks/DASB/CommonVoice/extraction/hparams/encodec.yaml +++ b/benchmarks/DASB/CommonVoice/extraction/hparams/encodec.yaml @@ -13,9 +13,14 @@ train_log: !ref /extraction_log.txt # Data files data_folder: /data/anakuzne/cv/cv-corpus-17.0-2024-03-15/cy -train_tsv: !ref /train.tsv -dev_tsv: !ref /dev.tsv -test_tsv: !ref /test.tsv +train_tsv_file: !ref /train.tsv +dev_tsv_file: !ref /dev.tsv +test_tsv_file: !ref /test.tsv + +train_csv: !ref /train.csv +dev_csv: !ref /dev.csv +test_csv: !ref /test.csv + language: cy accented_letters: True skip_prep: False diff --git a/benchmarks/DASB/CommonVoice/extraction/hparams/speech_tokenizer.yaml b/benchmarks/DASB/CommonVoice/extraction/hparams/speech_tokenizer.yaml index 9a4fe840a..a3dcd0bf6 100644 --- a/benchmarks/DASB/CommonVoice/extraction/hparams/speech_tokenizer.yaml +++ b/benchmarks/DASB/CommonVoice/extraction/hparams/speech_tokenizer.yaml @@ -44,7 +44,11 @@ freeze_embedding: False save_embedding: False # EnCodec model (see https://huggingface.co/docs/transformers/v4.31.0/en/model_doc/encodec) -tokenizer: !new:utils.tokenizer_interface.SpeechTokenizer +#tokenizer: !new:utils.tokenizer_interface.SpeechTokenizer +# source: fnlp/SpeechTokenizer # Only the 24kHz version supports mono audio +# save_path: !ref + +tokenizer: !new:utils.tokenizer_interface.SpeechTokenizerWrapper source: fnlp/SpeechTokenizer # Only the 24kHz version supports mono audio save_path: !ref diff --git a/benchmarks/DASB/utils/tokens.py b/benchmarks/DASB/utils/tokens.py index 03ea5049c..d55d8d449 100644 --- a/benchmarks/DASB/utils/tokens.py +++ b/benchmarks/DASB/utils/tokens.py @@ -408,4 +408,4 @@ def load_pretrained_embeddings(self, data_path, save_name="embeddings"): raise ValueError(f"Data folder not found: {data_path.as_posix()}") embeddings = np.load(data_path / f"{save_name}.npy") embeddings = torch.from_numpy(embeddings) - return embeddings + return embeddings \ No newline at end of file