我可以使用高棉语言的标记化输入文件和自定义词汇文件从头开始对BERT模型进行预训练吗?]

问题描述 投票:2回答:1

我想知道是否可以使用我自己的标记化/分段文档(以及我自己的vocab文件)作为create_pretraining_data.py脚本的输入文件(git源:https://github.com/google-research/bert)。

产生此问题的主要原因是,高棉语的细分/标记与英语不同。

Original:
វា​មាន​មក​ជាមួយ​នូវ

Segmented/Tokenized:
វា មាន មក ជាមួយ នូវ

我自己尝试了一些操作,并在运行create_pretraining_data.pyrun_pretraining.py脚本后设法获得了一些结果。但是,我不确定我在做什么可以被认为是正确的。

我还想知道验证模型所用的方法。

非常感谢您的帮助!

脚本修改

我所做的修改是:1.以列表格式制作输入文件

不是普通的纯文本,输入文件来自自定义的高棉标记化输出,然后将其制成列表格式,模仿了运行示例英语文本时得到的输出。

[[['ដំណាំ', 'សាវម៉ាវ', 'ជា', 'ប្រភេទ', 'ឈើ', 'ហូប', 'ផ្លែ'],  
['វា', 'ផ្តល់', 'ផប្រយោជន៍', 'យ៉ាង', 'ច្រើន', 'ដល់', 'សុខភាព']],  
[['cmt', '$', '270', 'នាំ', 'លាភ', 'នាំ', 'សំណាង', 'ហេង', 'ហេង']]]

*外括号表示源文件,第一个嵌套括号表示文档,第二个嵌套括号表示句子。与all_documents函数中的变量create_training_instances()完全相同的结构

2.来自唯一分段词的Vocab文件

这是我真的非常怀疑的部分。要创建我的vocab文件,我要做的就是从整个文档中找到唯一的标记。然后,我添加核心令牌要求[CLS], [SEP], [UNK] and [MASK]。我不确定这是否是正确的方法。

对此部分的反馈非常感谢!

3.跳过create_training_instances()函数中的标记化步骤

因为我的输入文件已经与变量all_documents匹配,所以我将第183行跳过到第207行。我将其替换为按原样读取输入:

  for input_file in input_files:
      with tf.gfile.GFile(input_file, "r") as reader:
          lines = reader.read()
      all_documents = ast.literal_eval(lines)

结果/输出

原始输入文件(在自定义标记化之前)来自于随机网页抓取。

有关原始和vocab文件的某些信息:

Number of documents/articles: 5
Number of sentences: 78
Number of vocabs: 649 (including [CLS], [SEP] etc.)

下面是运行create_pretraining_data.py后的输出(末尾)

create_pretraining_data_khmer_output

这是运行run_pretraining.py后得到的结果>

“20191119_sample_4”

如上图所示,我从中得到的准确性很低,因此如果我做得正确,我会很担心。

我想知道是否可以将我自己的标记化/分段文档(以及我自己的vocab文件)用作create_pretraining_data.py脚本的输入文件(git源:https:/ ...) >

首先,您似乎只有很少的训练数据(您提到的词汇量是649)。 BERT是一个庞大的模型,需要大量的训练数据。谷歌发布的英语模型至少在整个维基百科上都经过了培训。考虑一下!

BERT使用一种称为WordPiece的东西,可以保证固定的词汇量。稀有单词会像这样被拆分:Jet makers feud over seat width with big orders at stake转换为wordPiece as:_J et _makers _fe ud _over _seat _width _with _big _orders _at _stake

WordPieceTokenizer.tokenize(text)接受由空格预加符号的文本,因此您应更改BasicTokenizer,它由您的特定令牌生成器在WordPieceTokenizer之前运行,该令牌应按空格分隔令牌。要训​​练自己的WorPiece-Tookenizer,请看sentenePiece,它在bpe模式下与WordPiece基本相同。然后,您可以从WordPiece模型中导出词汇表。

我自己没有预先训练BERT模型,所以我无法帮助您准确更改代码中的内容。

python nlp tokenize bert-language-model
1个回答
0
投票

首先,您似乎只有很少的训练数据(您提到的词汇量是649)。 BERT是一个庞大的模型,需要大量的训练数据。谷歌发布的英语模型至少在整个维基百科上都经过了培训。考虑一下!

© www.soinside.com 2019 - 2024. All rights reserved.