2

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

这个问题的主要原因是高棉语的分割/标记化与英语不同。

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

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

我自己尝试了一些东西,并在运行create_pretraining_data.pyandrun_pretraining.py脚本后设法得到了一些结果。但是,我不确定我所做的是否可以被认为是正确的。

我也想知道我应该用来验证我的模型的方法。

非常感谢任何帮助!

脚本修改

我所做的修改是:

1. 将输入文件制作成列表格式

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

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

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

2. 来自独特分词的词汇文件

这是我真的很怀疑的部分。为了创建我的词汇文件,我所做的只是从整个文档中找到唯一的标记。然后我添加核心令牌要求[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)

结果/输出

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

有关原始和词汇文件的一些信息:

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

如上图所示,我从中得到的准确度非常低,因此我担心我是否做得正确。

4

1 回答 1

1

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

BERT 使用一种叫做 WordPiece 的东西来保证固定的词汇量。稀有词是这样拆分的:Jet makers feud over seat width with big orders at stake转换为 wordPiece 为:_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 模型,所以我无法帮助您准确地更改代码中的某些内容。

于 2019-11-27T14:12:59.343 回答