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

2024-06-25 23:56:15 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

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

我自己尝试了一些方法,并在运行create_pretraining_data.pyrun_pretraining.py脚本后获得了一些结果。然而,我不确定我所做的是否正确。在

我还想知道我应该用什么方法来验证我的模型。在

非常感谢任何帮助!在

脚本修改

我做的修改是:

1以列表格式生成输入文件

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

^{pr2}$

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

2来自唯一分段单词的voab文件

我真的很怀疑这一点。为了创建vocab文件,我所做的就是从整个文档中找到唯一的标记。然后添加核心令牌需求[CLS], [SEP], [UNK] and [MASK]。我不确定这样做是否正确。在

非常感谢您对这方面的反馈!在

三。跳过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)

结果/输出

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

有关raw和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

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


Tags: 文件of文档py标记脚本numberinput
1条回答
网友
1楼 · 发布于 2024-06-25 23:56:15

首先,你的训练数据似乎很少(你提到的词汇量是649)。BERT是一个庞大的模型,需要大量的训练数据。谷歌发布的英文模型至少在整个维基百科上都有培训。想想看!在

BERT使用一种叫做wordpart的东西来保证固定的词汇量。很少的单词是这样分割的:Jet makers feud over seat width with big orders at stake翻译成单词:_J et _makers _fe ud _over _seat _width _with _big _orders _at _stake。在

WordPieceTokenizer.tokenize(text)接受一个由空格预先指定的文本,因此您应该更改BasicTokenizer,它是由您的特定标记器在WordPieceTokenizer之前运行的,它应该按空格分隔标记。 要训练您自己的worwork Tookenizer,请看一下sentenePiece,它在bpe模式下与WordPiece基本相同。 然后,您可以从字块模型导出词汇表。在

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

相关问题 更多 >